From cc4d7af8fad1ae89dbc12c3a836f18124421e016 Mon Sep 17 00:00:00 2001 From: Eric Beard Date: Mon, 18 Mar 2024 17:41:39 -0700 Subject: [PATCH] Adding schemas to the binary, continuing with pkl gen --- internal/aws/cfn/cfn.go | 36 +- internal/aws/cfn/schema.go | 2 + .../schemas/aws/accessanalyzer/analyzer.json | 215 + .../cfn/schemas/aws/acmpca/certificate.json | 521 + .../aws/acmpca/certificateauthority.json | 461 + .../certificateauthorityactivation.json | 70 + .../cfn/schemas/aws/acmpca/permission.json | 62 + .../aws/cfn/schemas/aws/amazonmq/broker.json | 334 + .../schemas/aws/amazonmq/configuration.json | 79 + .../amazonmq/configurationassociation.json | 47 + internal/aws/cfn/schemas/aws/amplify/app.json | 346 + .../aws/cfn/schemas/aws/amplify/branch.json | 259 + .../aws/cfn/schemas/aws/amplify/domain.json | 192 + .../aws/amplifyuibuilder/component.json | 583 + .../schemas/aws/amplifyuibuilder/form.json | 597 + .../schemas/aws/amplifyuibuilder/theme.json | 158 + .../cfn/schemas/aws/apigateway/account.json | 46 + .../cfn/schemas/aws/apigateway/apikey.json | 139 + .../schemas/aws/apigateway/authorizer.json | 118 + .../aws/apigateway/basepathmapping.json | 81 + .../aws/apigateway/clientcertificate.json | 81 + .../schemas/aws/apigateway/deployment.json | 328 + .../aws/apigateway/documentationpart.json | 122 + .../aws/apigateway/documentationversion.json | 74 + .../schemas/aws/apigateway/domainname.json | 124 + .../aws/apigateway/gatewayresponse.json | 84 + .../cfn/schemas/aws/apigateway/method.json | 328 + .../aws/cfn/schemas/aws/apigateway/model.json | 83 + .../aws/apigateway/requestvalidator.json | 81 + .../cfn/schemas/aws/apigateway/resource.json | 80 + .../cfn/schemas/aws/apigateway/restapi.json | 225 + .../aws/cfn/schemas/aws/apigateway/stage.json | 261 + .../cfn/schemas/aws/apigateway/usageplan.json | 180 + .../schemas/aws/apigateway/usageplankey.json | 78 + .../cfn/schemas/aws/apigateway/vpclink.json | 129 + .../aws/cfn/schemas/aws/apigatewayv2/api.json | 229 + .../apigatewaymanagedoverrides.json | 136 + .../schemas/aws/apigatewayv2/apimapping.json | 78 + .../schemas/aws/apigatewayv2/authorizer.json | 144 + .../schemas/aws/apigatewayv2/deployment.json | 87 + .../schemas/aws/apigatewayv2/domainname.json | 138 + .../schemas/aws/apigatewayv2/integration.json | 88 + .../aws/apigatewayv2/integrationresponse.json | 90 + .../cfn/schemas/aws/apigatewayv2/model.json | 90 + .../cfn/schemas/aws/apigatewayv2/route.json | 143 + .../aws/apigatewayv2/routeresponse.json | 112 + .../cfn/schemas/aws/apigatewayv2/stage.json | 95 + .../cfn/schemas/aws/apigatewayv2/vpclink.json | 110 + .../schemas/aws/appconfig/application.json | 105 + .../aws/appconfig/configurationprofile.json | 191 + .../cfn/schemas/aws/appconfig/deployment.json | 98 + .../aws/appconfig/deploymentstrategy.json | 68 + .../schemas/aws/appconfig/environment.json | 165 + .../cfn/schemas/aws/appconfig/extension.json | 209 + .../aws/appconfig/extensionassociation.json | 134 + .../appconfig/hostedconfigurationversion.json | 117 + .../cfn/schemas/aws/appflow/connector.json | 114 + .../schemas/aws/appflow/connectorprofile.json | 1265 ++ .../aws/cfn/schemas/aws/appflow/flow.json | 1770 +++ .../aws/appintegrations/dataintegration.json | 282 + .../aws/appintegrations/eventintegration.json | 161 + .../scalabletarget.json | 187 + .../applicationautoscaling/scalingpolicy.json | 366 + .../aws/applicationinsights/application.json | 729 + .../cfn/schemas/aws/appmesh/gatewayroute.json | 439 + .../aws/cfn/schemas/aws/appmesh/mesh.json | 99 + .../aws/cfn/schemas/aws/appmesh/route.json | 541 + .../schemas/aws/appmesh/virtualgateway.json | 537 + .../cfn/schemas/aws/appmesh/virtualnode.json | 752 + .../schemas/aws/appmesh/virtualrouter.json | 118 + .../schemas/aws/appmesh/virtualservice.json | 120 + .../apprunner/autoscalingconfiguration.json | 113 + .../apprunner/observabilityconfiguration.json | 120 + .../cfn/schemas/aws/apprunner/service.json | 549 + .../schemas/aws/apprunner/vpcconnector.json | 119 + .../aws/apprunner/vpcingressconnection.json | 151 + .../cfn/schemas/aws/appstream/appblock.json | 180 + .../aws/appstream/appblockbuilder.json | 197 + .../schemas/aws/appstream/application.json | 193 + .../applicationentitlementassociation.json | 55 + .../applicationfleetassociation.json | 53 + .../aws/appstream/directoryconfig.json | 127 + .../schemas/aws/appstream/entitlement.json | 95 + .../aws/cfn/schemas/aws/appstream/fleet.json | 176 + .../schemas/aws/appstream/imagebuilder.json | 198 + .../aws/cfn/schemas/aws/appstream/stack.json | 184 + .../aws/appstream/stackfleetassociation.json | 26 + .../aws/appstream/stackuserassociation.json | 39 + .../aws/cfn/schemas/aws/appstream/user.json | 42 + .../aws/cfn/schemas/aws/appsync/apicache.json | 46 + .../aws/cfn/schemas/aws/appsync/apikey.json | 39 + .../cfn/schemas/aws/appsync/datasource.json | 254 + .../cfn/schemas/aws/appsync/domainname.json | 82 + .../aws/appsync/domainnameapiassociation.json | 63 + .../aws/appsync/functionconfiguration.json | 190 + .../cfn/schemas/aws/appsync/graphqlapi.json | 250 + .../schemas/aws/appsync/graphqlschema.json | 31 + .../aws/cfn/schemas/aws/appsync/resolver.json | 245 + .../aws/appsync/sourceapiassociation.json | 171 + .../schemas/aws/aps/rulegroupsnamespace.json | 130 + .../aws/cfn/schemas/aws/aps/workspace.json | 176 + .../aws/athena/capacityreservation.json | 206 + .../cfn/schemas/aws/athena/datacatalog.json | 117 + .../cfn/schemas/aws/athena/namedquery.json | 82 + .../schemas/aws/athena/preparedstatement.json | 85 + .../aws/cfn/schemas/aws/athena/workgroup.json | 412 + .../schemas/aws/auditmanager/assessment.json | 371 + .../aws/autoscaling/autoscalinggroup.json | 825 ++ .../aws/autoscaling/launchconfiguration.json | 241 + .../aws/autoscaling/lifecyclehook.json | 92 + .../aws/autoscaling/scalingpolicy.json | 441 + .../aws/autoscaling/scheduledaction.json | 89 + .../cfn/schemas/aws/autoscaling/warmpool.json | 70 + .../aws/autoscalingplans/scalingplan.json | 271 + .../cfn/schemas/aws/backup/backupplan.json | 209 + .../schemas/aws/backup/backupselection.json | 179 + .../cfn/schemas/aws/backup/backupvault.json | 156 + .../aws/cfn/schemas/aws/backup/framework.json | 203 + .../cfn/schemas/aws/backup/reportplan.json | 189 + .../schemas/aws/backupgateway/hypervisor.json | 162 + .../schemas/aws/batch/computeenvironment.json | 297 + .../cfn/schemas/aws/batch/jobdefinition.json | 947 ++ .../aws/cfn/schemas/aws/batch/jobqueue.json | 165 + .../schemas/aws/batch/schedulingpolicy.json | 125 + .../aws/billingconductor/billinggroup.json | 199 + .../aws/billingconductor/customlineitem.json | 298 + .../aws/billingconductor/pricingplan.json | 139 + .../aws/billingconductor/pricingrule.json | 210 + .../aws/cfn/schemas/aws/budgets/budget.json | 224 + .../schemas/aws/budgets/budgetsaction.json | 246 + .../cfn/schemas/aws/cassandra/keyspace.json | 156 + .../aws/cfn/schemas/aws/cassandra/table.json | 425 + .../cfn/schemas/aws/ce/anomalymonitor.json | 153 + .../schemas/aws/ce/anomalysubscription.json | 175 + .../aws/cfn/schemas/aws/ce/costcategory.json | 92 + .../aws/certificatemanager/account.json | 63 + .../aws/certificatemanager/certificate.json | 99 + .../microsoftteamschannelconfiguration.json | 127 + .../chatbot/slackchannelconfiguration.json | 114 + .../aws/cleanrooms/analysistemplate.json | 267 + .../schemas/aws/cleanrooms/collaboration.json | 271 + .../aws/cleanrooms/configuredtable.json | 537 + .../configuredtableassociation.json | 153 + .../schemas/aws/cleanrooms/membership.json | 259 + .../schemas/aws/cloud9/environmentec2.json | 105 + .../aws/cloudformation/customresource.json | 25 + .../cloudformation/hookdefaultversion.json | 85 + .../aws/cloudformation/hooktypeconfig.json | 104 + .../aws/cloudformation/hookversion.json | 145 + .../cfn/schemas/aws/cloudformation/macro.json | 38 + .../cloudformation/moduledefaultversion.json | 74 + .../aws/cloudformation/moduleversion.json | 106 + .../aws/cloudformation/publictypeversion.json | 112 + .../schemas/aws/cloudformation/publisher.json | 89 + .../resourcedefaultversion.json | 83 + .../aws/cloudformation/resourceversion.json | 138 + .../cfn/schemas/aws/cloudformation/stack.json | 243 + .../schemas/aws/cloudformation/stackset.json | 419 + .../aws/cloudformation/typeactivation.json | 157 + .../aws/cloudformation/waitcondition.json | 29 + .../cloudformation/waitconditionhandle.json | 16 + .../schemas/aws/cloudfront/cachepolicy.json | 187 + .../cloudfrontoriginaccessidentity.json | 75 + .../continuousdeploymentpolicy.json | 220 + .../schemas/aws/cloudfront/distribution.json | 1028 ++ .../cfn/schemas/aws/cloudfront/function.json | 129 + .../cfn/schemas/aws/cloudfront/keygroup.json | 86 + .../cloudfront/monitoringsubscription.json | 73 + .../aws/cloudfront/originaccesscontrol.json | 89 + .../aws/cloudfront/originrequestpolicy.json | 150 + .../cfn/schemas/aws/cloudfront/publickey.json | 86 + .../aws/cloudfront/realtimelogconfig.json | 121 + .../aws/cloudfront/responseheaderspolicy.json | 406 + .../aws/cloudfront/streamingdistribution.json | 144 + .../cfn/schemas/aws/cloudtrail/channel.json | 165 + .../aws/cloudtrail/eventdatastore.json | 338 + .../aws/cloudtrail/resourcepolicy.json | 56 + .../aws/cfn/schemas/aws/cloudtrail/trail.json | 398 + .../aws/cfn/schemas/aws/cloudwatch/alarm.json | 275 + .../aws/cloudwatch/anomalydetector.json | 210 + .../aws/cloudwatch/compositealarm.json | 130 + .../cfn/schemas/aws/cloudwatch/dashboard.json | 28 + .../schemas/aws/cloudwatch/insightrule.json | 46 + .../schemas/aws/cloudwatch/metricstream.json | 301 + .../cfn/schemas/aws/codeartifact/domain.json | 136 + .../schemas/aws/codeartifact/repository.json | 164 + .../cfn/schemas/aws/codebuild/project.json | 534 + .../schemas/aws/codebuild/reportgroup.json | 107 + .../aws/codebuild/sourcecredential.json | 36 + .../schemas/aws/codecommit/repository.json | 147 + .../schemas/aws/codedeploy/application.json | 88 + .../aws/codedeploy/deploymentconfig.json | 169 + .../aws/codedeploy/deploymentgroup.json | 498 + .../aws/codeguruprofiler/profilinggroup.json | 176 + .../repositoryassociation.json | 149 + .../aws/codepipeline/customactiontype.json | 221 + .../schemas/aws/codepipeline/pipeline.json | 464 + .../cfn/schemas/aws/codepipeline/webhook.json | 88 + .../aws/codestar/githubrepository.json | 77 + .../aws/codestarconnections/connection.json | 131 + .../notificationrule.json | 144 + .../cfn/schemas/aws/cognito/identitypool.json | 170 + .../aws/cognito/identitypoolprincipaltag.json | 82 + .../cognito/identitypoolroleattachment.json | 159 + .../aws/cfn/schemas/aws/cognito/userpool.json | 516 + .../schemas/aws/cognito/userpoolclient.json | 224 + .../schemas/aws/cognito/userpooldomain.json | 48 + .../schemas/aws/cognito/userpoolgroup.json | 89 + .../aws/cognito/userpoolidentityprovider.json | 48 + .../aws/cognito/userpoolresourceserver.json | 59 + .../userpoolriskconfigurationattachment.json | 215 + .../userpooluicustomizationattachment.json | 33 + .../cfn/schemas/aws/cognito/userpooluser.json | 127 + .../userpoolusertogroupattachment.json | 59 + .../aws/comprehend/documentclassifier.json | 365 + .../cfn/schemas/aws/comprehend/flywheel.json | 285 + .../aws/config/aggregationauthorization.json | 114 + .../cfn/schemas/aws/config/configrule.json | 230 + .../aws/config/configurationaggregator.json | 168 + .../aws/config/configurationrecorder.json | 131 + .../schemas/aws/config/conformancepack.json | 151 + .../schemas/aws/config/deliverychannel.json | 51 + .../aws/config/organizationconfigrule.json | 180 + .../config/organizationconformancepack.json | 153 + .../aws/config/remediationconfiguration.json | 77 + .../cfn/schemas/aws/config/storedquery.json | 127 + .../schemas/aws/connect/approvedorigin.json | 73 + .../cfn/schemas/aws/connect/contactflow.json | 161 + .../aws/connect/contactflowmodule.json | 147 + .../schemas/aws/connect/evaluationform.json | 545 + .../schemas/aws/connect/hoursofoperation.json | 195 + .../aws/cfn/schemas/aws/connect/instance.json | 238 + .../aws/connect/instancestorageconfig.json | 262 + .../aws/connect/integrationassociation.json | 147 + .../cfn/schemas/aws/connect/phonenumber.json | 156 + .../aws/cfn/schemas/aws/connect/prompt.json | 134 + .../aws/cfn/schemas/aws/connect/queue.json | 219 + .../cfn/schemas/aws/connect/quickconnect.json | 237 + .../schemas/aws/connect/routingprofile.json | 277 + .../aws/cfn/schemas/aws/connect/rule.json | 515 + .../cfn/schemas/aws/connect/securitykey.json | 85 + .../cfn/schemas/aws/connect/tasktemplate.json | 337 + .../aws/connect/trafficdistributiongroup.json | 140 + .../aws/cfn/schemas/aws/connect/user.json | 310 + .../aws/connect/userhierarchygroup.json | 128 + .../aws/cfn/schemas/aws/connect/view.json | 162 + .../cfn/schemas/aws/connect/viewversion.json | 99 + .../aws/connectcampaigns/campaign.json | 263 + .../aws/controltower/enabledcontrol.json | 206 + .../cfn/schemas/aws/cur/reportdefinition.json | 155 + .../calculatedattributedefinition.json | 322 + .../schemas/aws/customerprofiles/domain.json | 463 + .../aws/customerprofiles/eventstream.json | 183 + .../aws/customerprofiles/integration.json | 702 + .../aws/customerprofiles/objecttype.json | 277 + .../aws/cfn/schemas/aws/databrew/dataset.json | 467 + .../aws/cfn/schemas/aws/databrew/job.json | 632 + .../aws/cfn/schemas/aws/databrew/project.json | 137 + .../aws/cfn/schemas/aws/databrew/recipe.json | 589 + .../aws/cfn/schemas/aws/databrew/ruleset.json | 250 + .../cfn/schemas/aws/databrew/schedule.json | 111 + .../schemas/aws/datapipeline/pipeline.json | 255 + .../aws/cfn/schemas/aws/datasync/agent.json | 161 + .../aws/datasync/locationazureblob.json | 188 + .../cfn/schemas/aws/datasync/locationefs.json | 190 + .../aws/datasync/locationfsxlustre.json | 146 + .../aws/datasync/locationfsxontap.json | 251 + .../aws/datasync/locationfsxopenzfs.json | 191 + .../aws/datasync/locationfsxwindows.json | 166 + .../schemas/aws/datasync/locationhdfs.json | 250 + .../cfn/schemas/aws/datasync/locationnfs.json | 176 + .../aws/datasync/locationobjectstorage.json | 183 + .../cfn/schemas/aws/datasync/locations3.json | 167 + .../cfn/schemas/aws/datasync/locationsmb.json | 184 + .../schemas/aws/datasync/storagesystem.json | 214 + .../aws/cfn/schemas/aws/datasync/task.json | 601 + internal/aws/cfn/schemas/aws/dax/cluster.json | 102 + .../cfn/schemas/aws/dax/parametergroup.json | 28 + .../aws/cfn/schemas/aws/dax/subnetgroup.json | 35 + .../aws/cfn/schemas/aws/detective/graph.json | 89 + .../aws/detective/memberinvitation.json | 78 + .../aws/detective/organizationadmin.json | 70 + .../loganomalydetectionintegration.json | 62 + .../aws/devopsguru/notificationchannel.json | 138 + .../aws/devopsguru/resourcecollection.json | 129 + .../aws/directoryservice/microsoftad.json | 84 + .../aws/directoryservice/simplead.json | 163 + .../cfn/schemas/aws/dlm/lifecyclepolicy.json | 577 + .../aws/cfn/schemas/aws/dms/certificate.json | 30 + .../aws/cfn/schemas/aws/dms/endpoint.json | 948 ++ .../schemas/aws/dms/eventsubscription.json | 74 + .../schemas/aws/dms/replicationconfig.json | 194 + .../schemas/aws/dms/replicationinstance.json | 104 + .../aws/dms/replicationsubnetgroup.json | 61 + .../cfn/schemas/aws/dms/replicationtask.json | 90 + .../aws/cfn/schemas/aws/docdb/dbcluster.json | 144 + .../aws/docdb/dbclusterparametergroup.json | 63 + .../aws/cfn/schemas/aws/docdb/dbinstance.json | 85 + .../cfn/schemas/aws/docdb/dbsubnetgroup.json | 61 + .../cfn/schemas/aws/docdbelastic/cluster.json | 195 + .../cfn/schemas/aws/dynamodb/globaltable.json | 593 + .../aws/cfn/schemas/aws/dynamodb/table.json | 603 + .../schemas/aws/ec2/capacityreservation.json | 159 + .../aws/ec2/capacityreservationfleet.json | 191 + .../cfn/schemas/aws/ec2/carriergateway.json | 102 + .../aws/ec2/clientvpnauthorizationrule.json | 42 + .../schemas/aws/ec2/clientvpnendpoint.json | 238 + .../cfn/schemas/aws/ec2/clientvpnroute.json | 39 + .../clientvpntargetnetworkassociation.json | 30 + .../cfn/schemas/aws/ec2/customergateway.json | 109 + .../aws/cfn/schemas/aws/ec2/dhcpoptions.json | 132 + .../aws/cfn/schemas/aws/ec2/ec2fleet.json | 713 + .../aws/ec2/egressonlyinternetgateway.json | 59 + internal/aws/cfn/schemas/aws/ec2/eip.json | 130 + .../cfn/schemas/aws/ec2/eipassociation.json | 76 + .../enclavecertificateiamroleassociation.json | 73 + internal/aws/cfn/schemas/aws/ec2/flowlog.json | 186 + .../aws/ec2/gatewayroutetableassociation.json | 64 + internal/aws/cfn/schemas/aws/ec2/host.json | 90 + .../aws/cfn/schemas/aws/ec2/instance.json | 540 + .../aws/ec2/instanceconnectendpoint.json | 124 + .../cfn/schemas/aws/ec2/internetgateway.json | 90 + internal/aws/cfn/schemas/aws/ec2/ipam.json | 165 + .../cfn/schemas/aws/ec2/ipamallocation.json | 91 + .../aws/cfn/schemas/aws/ec2/ipampool.json | 282 + .../aws/cfn/schemas/aws/ec2/ipampoolcidr.json | 84 + .../aws/ec2/ipamresourcediscovery.json | 146 + .../ec2/ipamresourcediscoveryassociation.json | 143 + .../aws/cfn/schemas/aws/ec2/ipamscope.json | 135 + internal/aws/cfn/schemas/aws/ec2/keypair.json | 133 + .../cfn/schemas/aws/ec2/launchtemplate.json | 1152 ++ .../schemas/aws/ec2/localgatewayroute.json | 97 + .../aws/ec2/localgatewayroutetable.json | 125 + ...tablevirtualinterfacegroupassociation.json | 126 + .../localgatewayroutetablevpcassociation.json | 115 + .../aws/cfn/schemas/aws/ec2/natgateway.json | 144 + .../aws/cfn/schemas/aws/ec2/networkacl.json | 99 + .../cfn/schemas/aws/ec2/networkaclentry.json | 111 + .../aws/ec2/networkinsightsaccessscope.json | 236 + .../networkinsightsaccessscopeanalysis.json | 131 + .../aws/ec2/networkinsightsanalysis.json | 708 + .../schemas/aws/ec2/networkinsightspath.json | 181 + .../cfn/schemas/aws/ec2/networkinterface.json | 278 + .../aws/ec2/networkinterfaceattachment.json | 113 + .../aws/ec2/networkinterfacepermission.json | 35 + .../networkperformancemetricsubscription.json | 70 + .../cfn/schemas/aws/ec2/placementgroup.json | 100 + .../aws/cfn/schemas/aws/ec2/prefixlist.json | 151 + internal/aws/cfn/schemas/aws/ec2/route.json | 133 + .../aws/cfn/schemas/aws/ec2/routetable.json | 97 + .../cfn/schemas/aws/ec2/securitygroup.json | 215 + .../schemas/aws/ec2/securitygroupegress.json | 104 + .../schemas/aws/ec2/securitygroupingress.json | 118 + .../aws/cfn/schemas/aws/ec2/spotfleet.json | 979 ++ internal/aws/cfn/schemas/aws/ec2/subnet.json | 200 + .../cfn/schemas/aws/ec2/subnetcidrblock.json | 84 + .../aws/ec2/subnetnetworkaclassociation.json | 64 + .../aws/ec2/subnetroutetableassociation.json | 68 + .../schemas/aws/ec2/trafficmirrorfilter.json | 54 + .../aws/ec2/trafficmirrorfilterrule.json | 75 + .../schemas/aws/ec2/trafficmirrorsession.json | 71 + .../schemas/aws/ec2/trafficmirrortarget.json | 59 + .../cfn/schemas/aws/ec2/transitgateway.json | 152 + .../aws/ec2/transitgatewayattachment.json | 161 + .../aws/ec2/transitgatewayconnect.json | 115 + .../ec2/transitgatewaymulticastdomain.json | 119 + ...nsitgatewaymulticastdomainassociation.json | 76 + .../transitgatewaymulticastgroupmember.json | 101 + .../transitgatewaymulticastgroupsource.json | 101 + .../ec2/transitgatewaypeeringattachment.json | 128 + .../schemas/aws/ec2/transitgatewayroute.json | 37 + .../aws/ec2/transitgatewayroutetable.json | 91 + .../transitgatewayroutetableassociation.json | 30 + .../transitgatewayroutetablepropagation.json | 30 + .../aws/ec2/transitgatewayvpcattachment.json | 178 + .../aws/ec2/verifiedaccessendpoint.json | 423 + .../schemas/aws/ec2/verifiedaccessgroup.json | 185 + .../aws/ec2/verifiedaccessinstance.json | 291 + .../aws/ec2/verifiedaccesstrustprovider.json | 236 + internal/aws/cfn/schemas/aws/ec2/volume.json | 150 + .../cfn/schemas/aws/ec2/volumeattachment.json | 81 + internal/aws/cfn/schemas/aws/ec2/vpc.json | 159 + .../aws/cfn/schemas/aws/ec2/vpccidrblock.json | 114 + .../aws/ec2/vpcdhcpoptionsassociation.json | 62 + .../aws/cfn/schemas/aws/ec2/vpcendpoint.json | 145 + .../vpcendpointconnectionnotification.json | 81 + .../schemas/aws/ec2/vpcendpointservice.json | 92 + .../ec2/vpcendpointservicepermissions.json | 74 + .../schemas/aws/ec2/vpcgatewayattachment.json | 84 + .../schemas/aws/ec2/vpcpeeringconnection.json | 121 + .../cfn/schemas/aws/ec2/vpnconnection.json | 138 + .../schemas/aws/ec2/vpnconnectionroute.json | 55 + .../aws/cfn/schemas/aws/ec2/vpngateway.json | 97 + .../aws/ec2/vpngatewayroutepropagation.json | 30 + .../cfn/schemas/aws/ecr/publicrepository.json | 182 + .../schemas/aws/ecr/pullthroughcacherule.json | 136 + .../cfn/schemas/aws/ecr/registrypolicy.json | 63 + .../aws/ecr/replicationconfiguration.json | 162 + .../aws/cfn/schemas/aws/ecr/repository.json | 233 + .../cfn/schemas/aws/ecs/capacityprovider.json | 141 + internal/aws/cfn/schemas/aws/ecs/cluster.json | 237 + .../clustercapacityproviderassociations.json | 128 + .../cfn/schemas/aws/ecs/primarytaskset.json | 59 + internal/aws/cfn/schemas/aws/ecs/service.json | 738 + .../cfn/schemas/aws/ecs/taskdefinition.json | 1088 ++ internal/aws/cfn/schemas/aws/ecs/taskset.json | 242 + .../aws/cfn/schemas/aws/efs/accesspoint.json | 195 + .../aws/cfn/schemas/aws/efs/filesystem.json | 285 + .../aws/cfn/schemas/aws/efs/mounttarget.json | 95 + internal/aws/cfn/schemas/aws/eks/addon.json | 158 + internal/aws/cfn/schemas/aws/eks/cluster.json | 398 + .../cfn/schemas/aws/eks/fargateprofile.json | 186 + .../aws/eks/identityproviderconfig.json | 199 + .../aws/cfn/schemas/aws/eks/nodegroup.json | 309 + .../schemas/aws/elasticache/cachecluster.json | 223 + .../elasticache/globalreplicationgroup.json | 180 + .../aws/elasticache/parametergroup.json | 62 + .../aws/elasticache/replicationgroup.json | 331 + .../aws/elasticache/securitygroup.json | 47 + .../aws/elasticache/securitygroupingress.json | 29 + .../schemas/aws/elasticache/subnetgroup.json | 104 + .../aws/cfn/schemas/aws/elasticache/user.json | 180 + .../schemas/aws/elasticache/usergroup.json | 135 + .../aws/elasticbeanstalk/application.json | 126 + .../elasticbeanstalk/applicationversion.json | 94 + .../configurationtemplate.json | 146 + .../aws/elasticbeanstalk/environment.json | 205 + .../elasticloadbalancing/loadbalancer.json | 321 + .../aws/elasticloadbalancingv2/listener.json | 430 + .../listenercertificate.json | 44 + .../elasticloadbalancingv2/listenerrule.json | 553 + .../elasticloadbalancingv2/loadbalancer.json | 216 + .../elasticloadbalancingv2/targetgroup.json | 257 + .../cfn/schemas/aws/elasticsearch/domain.json | 317 + internal/aws/cfn/schemas/aws/emr/cluster.json | 859 ++ .../schemas/aws/emr/instancefleetconfig.json | 211 + .../schemas/aws/emr/instancegroupconfig.json | 312 + .../aws/emr/securityconfiguration.json | 54 + internal/aws/cfn/schemas/aws/emr/step.json | 102 + internal/aws/cfn/schemas/aws/emr/studio.json | 236 + .../schemas/aws/emr/studiosessionmapping.json | 113 + .../aws/cfn/schemas/aws/emr/walworkspace.json | 93 + .../aws/emrcontainers/virtualcluster.json | 157 + .../aws/emrserverless/application.json | 639 + .../entityresolution/matchingworkflow.json | 368 + .../aws/entityresolution/schemamapping.json | 219 + .../schemas/aws/events/apidestination.json | 92 + .../aws/cfn/schemas/aws/events/archive.json | 70 + .../cfn/schemas/aws/events/connection.json | 252 + .../aws/cfn/schemas/aws/events/endpoint.json | 238 + .../aws/cfn/schemas/aws/events/eventbus.json | 112 + .../schemas/aws/events/eventbuspolicy.json | 58 + internal/aws/cfn/schemas/aws/events/rule.json | 589 + .../schemas/aws/eventschemas/discoverer.json | 123 + .../schemas/aws/eventschemas/registry.json | 95 + .../aws/eventschemas/registrypolicy.json | 58 + .../cfn/schemas/aws/eventschemas/schema.json | 141 + .../cfn/schemas/aws/evidently/experiment.json | 314 + .../cfn/schemas/aws/evidently/feature.json | 213 + .../aws/cfn/schemas/aws/evidently/launch.json | 315 + .../cfn/schemas/aws/evidently/project.json | 222 + .../cfn/schemas/aws/evidently/segment.json | 109 + .../cfn/schemas/aws/finspace/environment.json | 284 + .../schemas/aws/fis/experimenttemplate.json | 399 + .../schemas/aws/fms/notificationchannel.json | 59 + internal/aws/cfn/schemas/aws/fms/policy.json | 353 + .../aws/cfn/schemas/aws/fms/resourceset.json | 147 + .../aws/cfn/schemas/aws/forecast/dataset.json | 183 + .../schemas/aws/forecast/datasetgroup.json | 135 + .../schemas/aws/frauddetector/detector.json | 612 + .../schemas/aws/frauddetector/entitytype.json | 116 + .../schemas/aws/frauddetector/eventtype.json | 365 + .../cfn/schemas/aws/frauddetector/label.json | 116 + .../cfn/schemas/aws/frauddetector/list.json | 155 + .../schemas/aws/frauddetector/outcome.json | 116 + .../schemas/aws/frauddetector/variable.json | 178 + .../aws/fsx/datarepositoryassociation.json | 212 + .../aws/cfn/schemas/aws/fsx/filesystem.json | 444 + .../aws/cfn/schemas/aws/fsx/snapshot.json | 58 + .../aws/fsx/storagevirtualmachine.json | 113 + internal/aws/cfn/schemas/aws/fsx/volume.json | 350 + .../aws/cfn/schemas/aws/gamelift/alias.json | 107 + .../aws/cfn/schemas/aws/gamelift/build.json | 120 + .../aws/cfn/schemas/aws/gamelift/fleet.json | 589 + .../schemas/aws/gamelift/gameservergroup.json | 445 + .../aws/gamelift/gamesessionqueue.json | 247 + .../cfn/schemas/aws/gamelift/location.json | 105 + .../gamelift/matchmakingconfiguration.json | 230 + .../aws/gamelift/matchmakingruleset.json | 122 + .../aws/cfn/schemas/aws/gamelift/script.json | 168 + .../aws/globalaccelerator/accelerator.json | 151 + .../aws/globalaccelerator/endpointgroup.json | 181 + .../aws/globalaccelerator/listener.json | 112 + .../aws/cfn/schemas/aws/glue/classifier.json | 127 + .../aws/cfn/schemas/aws/glue/connection.json | 81 + .../aws/cfn/schemas/aws/glue/crawler.json | 294 + .../aws/cfn/schemas/aws/glue/database.json | 114 + .../glue/datacatalogencryptionsettings.json | 70 + .../schemas/aws/glue/dataqualityruleset.json | 48 + .../aws/cfn/schemas/aws/glue/devendpoint.json | 75 + internal/aws/cfn/schemas/aws/glue/job.json | 134 + .../aws/cfn/schemas/aws/glue/mltransform.json | 163 + .../aws/cfn/schemas/aws/glue/partition.json | 221 + .../aws/cfn/schemas/aws/glue/registry.json | 105 + internal/aws/cfn/schemas/aws/glue/schema.json | 190 + .../cfn/schemas/aws/glue/schemaversion.json | 97 + .../aws/glue/schemaversionmetadata.json | 72 + .../aws/glue/securityconfiguration.json | 74 + internal/aws/cfn/schemas/aws/glue/table.json | 284 + .../aws/cfn/schemas/aws/glue/trigger.json | 146 + .../aws/cfn/schemas/aws/glue/workflow.json | 34 + .../cfn/schemas/aws/grafana/workspace.json | 495 + .../aws/greengrass/connectordefinition.json | 76 + .../connectordefinitionversion.json | 55 + .../aws/greengrass/coredefinition.json | 80 + .../aws/greengrass/coredefinitionversion.json | 59 + .../aws/greengrass/devicedefinition.json | 80 + .../greengrass/devicedefinitionversion.json | 59 + .../aws/greengrass/functiondefinition.json | 180 + .../greengrass/functiondefinitionversion.json | 160 + .../aws/cfn/schemas/aws/greengrass/group.json | 75 + .../schemas/aws/greengrass/groupversion.json | 53 + .../aws/greengrass/loggerdefinition.json | 84 + .../greengrass/loggerdefinitionversion.json | 63 + .../aws/greengrass/resourcedefinition.json | 220 + .../greengrass/resourcedefinitionversion.json | 199 + .../greengrass/subscriptiondefinition.json | 81 + .../subscriptiondefinitionversion.json | 60 + .../aws/greengrassv2/componentversion.json | 341 + .../schemas/aws/greengrassv2/deployment.json | 393 + .../cfn/schemas/aws/groundstation/config.json | 338 + .../groundstation/dataflowendpointgroup.json | 271 + .../aws/groundstation/missionprofile.json | 173 + .../cfn/schemas/aws/guardduty/detector.json | 217 + .../aws/cfn/schemas/aws/guardduty/filter.json | 194 + .../aws/cfn/schemas/aws/guardduty/ipset.json | 128 + .../aws/cfn/schemas/aws/guardduty/master.json | 73 + .../aws/cfn/schemas/aws/guardduty/member.json | 89 + .../schemas/aws/guardduty/threatintelset.json | 128 + .../schemas/aws/healthlake/fhirdatastore.json | 296 + .../aws/cfn/schemas/aws/iam/accesskey.json | 36 + internal/aws/cfn/schemas/aws/iam/group.json | 123 + .../aws/cfn/schemas/aws/iam/grouppolicy.json | 63 + .../cfn/schemas/aws/iam/instanceprofile.json | 77 + .../cfn/schemas/aws/iam/managedpolicy.json | 161 + .../aws/cfn/schemas/aws/iam/oidcprovider.json | 125 + internal/aws/cfn/schemas/aws/iam/policy.json | 97 + internal/aws/cfn/schemas/aws/iam/role.json | 189 + .../aws/cfn/schemas/aws/iam/rolepolicy.json | 63 + .../aws/cfn/schemas/aws/iam/samlprovider.json | 109 + .../schemas/aws/iam/servercertificate.json | 132 + .../schemas/aws/iam/servicelinkedrole.json | 70 + internal/aws/cfn/schemas/aws/iam/user.json | 210 + .../aws/cfn/schemas/aws/iam/userpolicy.json | 63 + .../schemas/aws/iam/usertogroupaddition.json | 30 + .../cfn/schemas/aws/iam/virtualmfadevice.json | 109 + .../cfn/schemas/aws/identitystore/group.json | 96 + .../aws/identitystore/groupmembership.json | 114 + .../schemas/aws/imagebuilder/component.json | 169 + .../aws/imagebuilder/containerrecipe.json | 340 + .../distributionconfiguration.json | 340 + .../cfn/schemas/aws/imagebuilder/image.json | 263 + .../aws/imagebuilder/imagepipeline.json | 277 + .../schemas/aws/imagebuilder/imagerecipe.json | 262 + .../infrastructureconfiguration.json | 204 + .../aws/inspector/assessmenttarget.json | 56 + .../aws/inspector/assessmenttemplate.json | 94 + .../schemas/aws/inspector/resourcegroup.json | 65 + .../cfn/schemas/aws/inspectorv2/filter.json | 372 + .../schemas/aws/internetmonitor/monitor.json | 293 + .../aws/iot/accountauditconfiguration.json | 171 + .../aws/cfn/schemas/aws/iot/authorizer.json | 128 + .../aws/cfn/schemas/aws/iot/billinggroup.json | 120 + .../cfn/schemas/aws/iot/cacertificate.json | 179 + .../aws/cfn/schemas/aws/iot/certificate.json | 104 + .../aws/cfn/schemas/aws/iot/custommetric.json | 117 + .../aws/cfn/schemas/aws/iot/dimension.json | 121 + .../schemas/aws/iot/domainconfiguration.json | 224 + .../aws/cfn/schemas/aws/iot/fleetmetric.json | 173 + .../aws/cfn/schemas/aws/iot/jobtemplate.json | 403 + internal/aws/cfn/schemas/aws/iot/logging.json | 78 + .../cfn/schemas/aws/iot/mitigationaction.json | 259 + internal/aws/cfn/schemas/aws/iot/policy.json | 110 + .../aws/iot/policyprincipalattachment.json | 30 + .../schemas/aws/iot/provisioningtemplate.json | 140 + .../aws/iot/resourcespecificlogging.json | 92 + .../aws/cfn/schemas/aws/iot/rolealias.json | 127 + .../cfn/schemas/aws/iot/scheduledaudit.json | 141 + .../cfn/schemas/aws/iot/securityprofile.json | 427 + internal/aws/cfn/schemas/aws/iot/thing.json | 85 + .../aws/cfn/schemas/aws/iot/thinggroup.json | 153 + .../aws/iot/thingprincipalattachment.json | 30 + .../aws/cfn/schemas/aws/iot/thingtype.json | 138 + .../aws/cfn/schemas/aws/iot/topicrule.json | 1005 ++ .../schemas/aws/iot/topicruledestination.json | 123 + .../aws/cfn/schemas/aws/iot1click/device.json | 30 + .../cfn/schemas/aws/iot1click/placement.json | 36 + .../cfn/schemas/aws/iot1click/project.json | 49 + .../cfn/schemas/aws/iotanalytics/channel.json | 151 + .../cfn/schemas/aws/iotanalytics/dataset.json | 523 + .../schemas/aws/iotanalytics/datastore.json | 305 + .../schemas/aws/iotanalytics/pipeline.json | 443 + .../iotcoredeviceadvisor/suitedefinition.json | 196 + .../cfn/schemas/aws/iotevents/alarmmodel.json | 561 + .../schemas/aws/iotevents/detectormodel.json | 727 + .../aws/cfn/schemas/aws/iotevents/input.json | 138 + .../schemas/aws/iotfleethub/application.json | 156 + .../schemas/aws/iotfleetwise/campaign.json | 453 + .../aws/iotfleetwise/decodermanifest.json | 491 + .../cfn/schemas/aws/iotfleetwise/fleet.json | 125 + .../aws/iotfleetwise/modelmanifest.json | 147 + .../aws/iotfleetwise/signalcatalog.json | 371 + .../cfn/schemas/aws/iotfleetwise/vehicle.json | 150 + .../schemas/aws/iotsitewise/accesspolicy.json | 156 + .../cfn/schemas/aws/iotsitewise/asset.json | 237 + .../schemas/aws/iotsitewise/assetmodel.json | 566 + .../schemas/aws/iotsitewise/dashboard.json | 125 + .../cfn/schemas/aws/iotsitewise/gateway.json | 196 + .../cfn/schemas/aws/iotsitewise/portal.json | 160 + .../cfn/schemas/aws/iotsitewise/project.json | 125 + .../aws/iotthingsgraph/flowtemplate.json | 43 + .../aws/iottwinmaker/componenttype.json | 558 + .../cfn/schemas/aws/iottwinmaker/entity.json | 600 + .../cfn/schemas/aws/iottwinmaker/scene.json | 189 + .../cfn/schemas/aws/iottwinmaker/syncjob.json | 141 + .../schemas/aws/iottwinmaker/workspace.json | 127 + .../schemas/aws/iotwireless/destination.json | 120 + .../aws/iotwireless/deviceprofile.json | 186 + .../schemas/aws/iotwireless/fuotatask.json | 170 + .../aws/iotwireless/multicastgroup.json | 152 + .../networkanalyzerconfiguration.json | 157 + .../aws/iotwireless/partneraccount.json | 166 + .../aws/iotwireless/serviceprofile.json | 168 + .../aws/iotwireless/taskdefinition.json | 182 + .../aws/iotwireless/wirelessdevice.json | 357 + .../iotwireless/wirelessdeviceimporttask.json | 215 + .../aws/iotwireless/wirelessgateway.json | 135 + internal/aws/cfn/schemas/aws/ivs/channel.json | 160 + .../cfn/schemas/aws/ivs/playbackkeypair.json | 116 + .../aws/ivs/recordingconfiguration.json | 271 + .../aws/cfn/schemas/aws/ivs/streamkey.json | 122 + .../aws/ivschat/loggingconfiguration.json | 225 + .../aws/cfn/schemas/aws/ivschat/room.json | 167 + .../schemas/aws/kafkaconnect/connector.json | 574 + .../cfn/schemas/aws/kendra/datasource.json | 1783 +++ internal/aws/cfn/schemas/aws/kendra/faq.json | 208 + .../aws/cfn/schemas/aws/kendra/index.json | 444 + .../aws/kendraranking/executionplan.json | 156 + .../aws/cfn/schemas/aws/kinesis/stream.json | 195 + .../schemas/aws/kinesis/streamconsumer.json | 42 + .../aws/kinesisanalytics/application.json | 231 + .../kinesisanalytics/applicationoutput.json | 112 + .../applicationreferencedatasource.json | 166 + .../aws/kinesisanalyticsv2/application.json | 983 ++ .../applicationcloudwatchloggingoption.json | 43 + .../kinesisanalyticsv2/applicationoutput.json | 100 + .../applicationreferencedatasource.json | 162 + .../aws/kinesisfirehose/deliverystream.json | 1433 ++ .../aws/kinesisvideo/signalingchannel.json | 103 + .../cfn/schemas/aws/kinesisvideo/stream.json | 118 + internal/aws/cfn/schemas/aws/kms/alias.json | 65 + internal/aws/cfn/schemas/aws/kms/key.json | 189 + .../aws/cfn/schemas/aws/kms/replicakey.json | 145 + .../aws/lakeformation/datacellsfilter.json | 133 + .../aws/lakeformation/datalakesettings.json | 72 + .../aws/lakeformation/permissions.json | 157 + .../lakeformation/principalpermissions.json | 518 + .../schemas/aws/lakeformation/resource.json | 38 + .../cfn/schemas/aws/lakeformation/tag.json | 90 + .../aws/lakeformation/tagassociation.json | 241 + .../aws/cfn/schemas/aws/lambda/alias.json | 89 + .../schemas/aws/lambda/codesigningconfig.json | 111 + .../schemas/aws/lambda/eventinvokeconfig.json | 137 + .../aws/lambda/eventsourcemapping.json | 398 + .../aws/cfn/schemas/aws/lambda/function.json | 573 + .../cfn/schemas/aws/lambda/layerversion.json | 120 + .../aws/lambda/layerversionpermission.json | 74 + .../cfn/schemas/aws/lambda/permission.json | 138 + internal/aws/cfn/schemas/aws/lambda/url.json | 191 + .../aws/cfn/schemas/aws/lambda/version.json | 151 + internal/aws/cfn/schemas/aws/lex/bot.json | 2339 ++++ .../aws/cfn/schemas/aws/lex/botalias.json | 410 + .../aws/cfn/schemas/aws/lex/botversion.json | 128 + .../cfn/schemas/aws/lex/resourcepolicy.json | 90 + .../cfn/schemas/aws/licensemanager/grant.json | 91 + .../schemas/aws/licensemanager/license.json | 241 + .../aws/cfn/schemas/aws/lightsail/alarm.json | 121 + .../aws/cfn/schemas/aws/lightsail/bucket.json | 161 + .../schemas/aws/lightsail/certificate.json | 115 + .../cfn/schemas/aws/lightsail/container.json | 323 + .../cfn/schemas/aws/lightsail/database.json | 231 + .../aws/cfn/schemas/aws/lightsail/disk.json | 232 + .../schemas/aws/lightsail/distribution.json | 305 + .../cfn/schemas/aws/lightsail/instance.json | 457 + .../schemas/aws/lightsail/loadbalancer.json | 143 + .../lightsail/loadbalancertlscertificate.json | 103 + .../cfn/schemas/aws/lightsail/staticip.json | 82 + .../aws/location/geofencecollection.json | 174 + .../aws/cfn/schemas/aws/location/map.json | 192 + .../cfn/schemas/aws/location/placeindex.json | 180 + .../schemas/aws/location/routecalculator.json | 161 + .../aws/cfn/schemas/aws/location/tracker.json | 191 + .../schemas/aws/location/trackerconsumer.json | 60 + .../cfn/schemas/aws/logs/accountpolicy.json | 128 + .../aws/cfn/schemas/aws/logs/destination.json | 83 + .../aws/cfn/schemas/aws/logs/loggroup.json | 177 + .../aws/cfn/schemas/aws/logs/logstream.json | 63 + .../cfn/schemas/aws/logs/metricfilter.json | 197 + .../cfn/schemas/aws/logs/querydefinition.json | 83 + .../cfn/schemas/aws/logs/resourcepolicy.json | 65 + .../schemas/aws/logs/subscriptionfilter.json | 98 + .../lookoutequipment/inferencescheduler.json | 253 + .../cfn/schemas/aws/lookoutmetrics/alert.json | 139 + .../aws/lookoutmetrics/anomalydetector.json | 547 + .../schemas/aws/lookoutvision/project.json | 69 + .../aws/cfn/schemas/aws/m2/application.json | 170 + .../aws/cfn/schemas/aws/m2/environment.json | 277 + .../aws/cfn/schemas/aws/macie/allowlist.json | 180 + .../aws/macie/customdataidentifier.json | 136 + .../cfn/schemas/aws/macie/findingsfilter.json | 195 + .../aws/cfn/schemas/aws/macie/session.json | 77 + .../aws/managedblockchain/accessor.json | 157 + .../schemas/aws/managedblockchain/member.json | 151 + .../schemas/aws/managedblockchain/node.json | 51 + .../cfn/schemas/aws/mediaconnect/bridge.json | 331 + .../aws/mediaconnect/bridgeoutput.json | 104 + .../aws/mediaconnect/bridgesource.json | 132 + .../cfn/schemas/aws/mediaconnect/flow.json | 308 + .../aws/mediaconnect/flowentitlement.json | 153 + .../schemas/aws/mediaconnect/flowoutput.json | 174 + .../schemas/aws/mediaconnect/flowsource.json | 237 + .../aws/mediaconnect/flowvpcinterface.json | 88 + .../cfn/schemas/aws/mediaconnect/gateway.json | 115 + .../schemas/aws/mediaconvert/jobtemplate.json | 89 + .../cfn/schemas/aws/mediaconvert/preset.json | 41 + .../cfn/schemas/aws/mediaconvert/queue.json | 38 + .../cfn/schemas/aws/medialive/channel.json | 3191 +++++ .../aws/cfn/schemas/aws/medialive/input.json | 138 + .../aws/medialive/inputsecuritygroup.json | 41 + .../cfn/schemas/aws/mediapackage/asset.json | 130 + .../cfn/schemas/aws/mediapackage/channel.json | 168 + .../aws/mediapackage/originendpoint.json | 707 + .../mediapackage/packagingconfiguration.json | 516 + .../aws/mediapackage/packaginggroup.json | 140 + .../cfn/schemas/aws/mediastore/container.json | 145 + .../cfn/schemas/aws/mediatailor/channel.json | 264 + .../aws/mediatailor/channelpolicy.json | 58 + .../schemas/aws/mediatailor/livesource.json | 148 + .../mediatailor/playbackconfiguration.json | 291 + .../aws/mediatailor/sourcelocation.json | 197 + .../schemas/aws/mediatailor/vodsource.json | 148 + .../aws/cfn/schemas/aws/memorydb/acl.json | 119 + .../aws/cfn/schemas/aws/memorydb/cluster.json | 253 + .../schemas/aws/memorydb/parametergroup.json | 121 + .../cfn/schemas/aws/memorydb/subnetgroup.json | 117 + .../aws/cfn/schemas/aws/memorydb/user.json | 142 + .../cfn/schemas/aws/msk/batchscramsecret.json | 93 + internal/aws/cfn/schemas/aws/msk/cluster.json | 617 + .../cfn/schemas/aws/msk/clusterpolicy.json | 79 + .../cfn/schemas/aws/msk/configuration.json | 105 + .../schemas/aws/msk/serverlesscluster.json | 158 + .../cfn/schemas/aws/msk/vpcconnection.json | 161 + .../aws/cfn/schemas/aws/mwaa/environment.json | 498 + .../cfn/schemas/aws/neptune/dbcluster.json | 331 + .../aws/neptune/dbclusterparametergroup.json | 63 + .../cfn/schemas/aws/neptune/dbinstance.json | 89 + .../schemas/aws/neptune/dbparametergroup.json | 63 + .../schemas/aws/neptune/dbsubnetgroup.json | 61 + .../schemas/aws/networkfirewall/firewall.json | 197 + .../aws/networkfirewall/firewallpolicy.json | 369 + .../networkfirewall/loggingconfiguration.json | 158 + .../aws/networkfirewall/rulegroup.json | 717 + .../aws/networkmanager/connectattachment.json | 203 + .../aws/networkmanager/connectpeer.json | 237 + .../aws/networkmanager/corenetwork.json | 214 + .../customergatewayassociation.json | 78 + .../schemas/aws/networkmanager/device.json | 196 + .../aws/networkmanager/globalnetwork.json | 112 + .../cfn/schemas/aws/networkmanager/link.json | 168 + .../aws/networkmanager/linkassociation.json | 74 + .../cfn/schemas/aws/networkmanager/site.json | 157 + .../sitetositevpnattachment.json | 193 + .../networkmanager/transitgatewaypeering.json | 157 + .../transitgatewayregistration.json | 70 + .../transitgatewayroutetableattachment.json | 192 + .../aws/networkmanager/vpcattachment.json | 227 + .../aws/nimblestudio/launchprofile.json | 347 + .../aws/nimblestudio/streamingimage.json | 177 + .../cfn/schemas/aws/nimblestudio/studio.json | 167 + .../aws/nimblestudio/studiocomponent.json | 393 + internal/aws/cfn/schemas/aws/oam/link.json | 127 + internal/aws/cfn/schemas/aws/oam/sink.json | 92 + .../schemas/aws/omics/annotationstore.json | 293 + .../cfn/schemas/aws/omics/referencestore.json | 134 + .../aws/cfn/schemas/aws/omics/rungroup.json | 114 + .../cfn/schemas/aws/omics/sequencestore.json | 141 + .../cfn/schemas/aws/omics/variantstore.json | 183 + .../aws/cfn/schemas/aws/omics/workflow.json | 220 + .../opensearchserverless/accesspolicy.json | 99 + .../aws/opensearchserverless/collection.json | 161 + .../opensearchserverless/securityconfig.json | 139 + .../opensearchserverless/securitypolicy.json | 105 + .../aws/opensearchserverless/vpcendpoint.json | 159 + .../schemas/aws/opensearchservice/domain.json | 535 + .../aws/cfn/schemas/aws/opsworks/app.json | 153 + .../elasticloadbalancerattachment.json | 26 + .../cfn/schemas/aws/opsworks/instance.json | 231 + .../aws/cfn/schemas/aws/opsworks/layer.json | 253 + .../aws/cfn/schemas/aws/opsworks/stack.json | 225 + .../cfn/schemas/aws/opsworks/userprofile.json | 34 + .../aws/cfn/schemas/aws/opsworks/volume.json | 36 + .../cfn/schemas/aws/opsworkscm/server.json | 236 + .../schemas/aws/organizations/account.json | 173 + .../aws/organizations/organization.json | 94 + .../aws/organizations/organizationalunit.json | 135 + .../cfn/schemas/aws/organizations/policy.json | 177 + .../aws/organizations/resourcepolicy.json | 115 + .../aws/cfn/schemas/aws/osis/pipeline.json | 282 + .../aws/panorama/applicationinstance.json | 299 + .../aws/cfn/schemas/aws/panorama/package.json | 176 + .../schemas/aws/panorama/packageversion.json | 168 + .../schemas/aws/pcaconnectorad/connector.json | 132 + .../pcaconnectorad/directoryregistration.json | 91 + .../pcaconnectorad/serviceprincipalname.json | 70 + .../schemas/aws/pcaconnectorad/template.json | 1037 ++ .../templategroupaccesscontrolentry.json | 110 + .../cfn/schemas/aws/personalize/dataset.json | 150 + .../schemas/aws/personalize/datasetgroup.json | 82 + .../cfn/schemas/aws/personalize/schema.json | 73 + .../cfn/schemas/aws/personalize/solution.json | 304 + .../cfn/schemas/aws/pinpoint/admchannel.json | 36 + .../cfn/schemas/aws/pinpoint/apnschannel.json | 49 + .../aws/pinpoint/apnssandboxchannel.json | 49 + .../schemas/aws/pinpoint/apnsvoipchannel.json | 49 + .../aws/pinpoint/apnsvoipsandboxchannel.json | 49 + .../aws/cfn/schemas/aws/pinpoint/app.json | 32 + .../aws/pinpoint/applicationsettings.json | 88 + .../schemas/aws/pinpoint/baiduchannel.json | 36 + .../cfn/schemas/aws/pinpoint/campaign.json | 537 + .../schemas/aws/pinpoint/emailchannel.json | 45 + .../schemas/aws/pinpoint/emailtemplate.json | 48 + .../cfn/schemas/aws/pinpoint/eventstream.json | 33 + .../cfn/schemas/aws/pinpoint/gcmchannel.json | 37 + .../schemas/aws/pinpoint/inapptemplate.json | 213 + .../schemas/aws/pinpoint/pushtemplate.json | 130 + .../aws/cfn/schemas/aws/pinpoint/segment.json | 234 + .../cfn/schemas/aws/pinpoint/smschannel.json | 34 + .../cfn/schemas/aws/pinpoint/smstemplate.json | 42 + .../schemas/aws/pinpoint/voicechannel.json | 28 + .../aws/pinpointemail/configurationset.json | 94 + .../configurationseteventdestination.json | 136 + .../aws/pinpointemail/dedicatedippool.json | 43 + .../schemas/aws/pinpointemail/identity.json | 91 + internal/aws/cfn/schemas/aws/pipes/pipe.json | 1721 +++ .../proton/environmentaccountconnection.json | 165 + .../aws/proton/environmenttemplate.json | 144 + .../schemas/aws/proton/servicetemplate.json | 148 + internal/aws/cfn/schemas/aws/qldb/ledger.json | 59 + internal/aws/cfn/schemas/aws/qldb/stream.json | 139 + .../cfn/schemas/aws/quicksight/analysis.json | 11061 +++++++++++++++ .../cfn/schemas/aws/quicksight/dashboard.json | 11299 ++++++++++++++++ .../cfn/schemas/aws/quicksight/dataset.json | 1444 ++ .../schemas/aws/quicksight/datasource.json | 968 ++ .../aws/quicksight/refreshschedule.json | 158 + .../cfn/schemas/aws/quicksight/template.json | 11028 +++++++++++++++ .../aws/cfn/schemas/aws/quicksight/theme.json | 477 + .../aws/cfn/schemas/aws/quicksight/topic.json | 1016 ++ .../schemas/aws/quicksight/vpcconnection.json | 277 + .../aws/cfn/schemas/aws/ram/permission.json | 129 + .../cfn/schemas/aws/ram/resourceshare.json | 82 + .../aws/rds/customdbengineversion.json | 176 + .../aws/cfn/schemas/aws/rds/dbcluster.json | 530 + .../aws/rds/dbclusterparametergroup.json | 122 + .../aws/cfn/schemas/aws/rds/dbinstance.json | 659 + .../cfn/schemas/aws/rds/dbparametergroup.json | 119 + internal/aws/cfn/schemas/aws/rds/dbproxy.json | 204 + .../cfn/schemas/aws/rds/dbproxyendpoint.json | 148 + .../schemas/aws/rds/dbproxytargetgroup.json | 132 + .../cfn/schemas/aws/rds/dbsecuritygroup.json | 80 + .../aws/rds/dbsecuritygroupingress.json | 34 + .../cfn/schemas/aws/rds/dbsubnetgroup.json | 114 + .../schemas/aws/rds/eventsubscription.json | 130 + .../cfn/schemas/aws/rds/globalcluster.json | 103 + .../aws/cfn/schemas/aws/rds/optiongroup.json | 186 + .../aws/cfn/schemas/aws/redshift/cluster.json | 430 + .../aws/redshift/clusterparametergroup.json | 158 + .../aws/redshift/clustersecuritygroup.json | 50 + .../redshift/clustersecuritygroupingress.json | 37 + .../aws/redshift/clustersubnetgroup.json | 166 + .../schemas/aws/redshift/endpointaccess.json | 225 + .../aws/redshift/endpointauthorization.json | 144 + .../aws/redshift/eventsubscription.json | 199 + .../schemas/aws/redshift/scheduledaction.json | 202 + .../aws/redshiftserverless/namespace.json | 318 + .../aws/redshiftserverless/workgroup.json | 387 + .../aws/refactorspaces/application.json | 247 + .../aws/refactorspaces/environment.json | 163 + .../cfn/schemas/aws/refactorspaces/route.json | 296 + .../schemas/aws/refactorspaces/service.json | 232 + .../schemas/aws/rekognition/collection.json | 109 + .../cfn/schemas/aws/rekognition/project.json | 71 + .../aws/rekognition/streamprocessor.json | 395 + .../cfn/schemas/aws/resiliencehub/app.json | 307 + .../aws/resiliencehub/resiliencypolicy.json | 145 + .../defaultviewassociation.json | 52 + .../schemas/aws/resourceexplorer2/index.json | 102 + .../schemas/aws/resourceexplorer2/view.json | 121 + .../cfn/schemas/aws/resourcegroups/group.json | 209 + .../aws/cfn/schemas/aws/robomaker/fleet.json | 78 + .../aws/cfn/schemas/aws/robomaker/robot.json | 107 + .../aws/robomaker/robotapplication.json | 175 + .../robomaker/robotapplicationversion.json | 69 + .../aws/robomaker/simulationapplication.json | 244 + .../simulationapplicationversion.json | 69 + .../cfn/schemas/aws/rolesanywhere/crl.json | 107 + .../schemas/aws/rolesanywhere/profile.json | 128 + .../aws/rolesanywhere/trustanchor.json | 208 + .../schemas/aws/route53/cidrcollection.json | 107 + .../aws/cfn/schemas/aws/route53/dnssec.json | 57 + .../cfn/schemas/aws/route53/healthcheck.json | 215 + .../cfn/schemas/aws/route53/hostedzone.json | 181 + .../schemas/aws/route53/keysigningkey.json | 92 + .../cfn/schemas/aws/route53/recordset.json | 166 + .../schemas/aws/route53/recordsetgroup.json | 184 + .../aws/route53recoverycontrol/cluster.json | 129 + .../route53recoverycontrol/controlpanel.json | 126 + .../routingcontrol.json | 97 + .../route53recoverycontrol/safetyrule.json | 242 + .../aws/route53recoveryreadiness/cell.json | 111 + .../readinesscheck.json | 103 + .../recoverygroup.json | 106 + .../route53recoveryreadiness/resourceset.json | 218 + .../route53resolver/firewalldomainlist.json | 205 + .../route53resolver/firewallrulegroup.json | 262 + .../firewallrulegroupassociation.json | 203 + .../aws/route53resolver/outpostresolver.json | 179 + .../aws/route53resolver/resolverconfig.json | 90 + .../route53resolver/resolverdnssecconfig.json | 79 + .../aws/route53resolver/resolverendpoint.json | 118 + .../resolverqueryloggingconfig.json | 130 + ...resolverqueryloggingconfigassociation.json | 102 + .../aws/route53resolver/resolverrule.json | 176 + .../resolverruleassociation.json | 64 + .../aws/cfn/schemas/aws/rum/appmonitor.json | 411 + .../aws/cfn/schemas/aws/s3/accesspoint.json | 152 + internal/aws/cfn/schemas/aws/s3/bucket.json | 1774 +++ .../aws/cfn/schemas/aws/s3/bucketpolicy.json | 65 + .../aws/s3/multiregionaccesspoint.json | 126 + .../aws/s3/multiregionaccesspointpolicy.json | 79 + .../aws/cfn/schemas/aws/s3/storagelens.json | 485 + .../aws/s3objectlambda/accesspoint.json | 243 + .../aws/s3objectlambda/accesspointpolicy.json | 57 + .../schemas/aws/s3outposts/accesspoint.json | 103 + .../cfn/schemas/aws/s3outposts/bucket.json | 292 + .../schemas/aws/s3outposts/bucketpolicy.json | 56 + .../cfn/schemas/aws/s3outposts/endpoint.json | 170 + .../aws/cfn/schemas/aws/sagemaker/app.json | 221 + .../schemas/aws/sagemaker/appimageconfig.json | 261 + .../schemas/aws/sagemaker/coderepository.json | 71 + .../sagemaker/dataqualityjobdefinition.json | 591 + .../aws/cfn/schemas/aws/sagemaker/device.json | 113 + .../schemas/aws/sagemaker/devicefleet.json | 124 + .../aws/cfn/schemas/aws/sagemaker/domain.json | 814 ++ .../cfn/schemas/aws/sagemaker/endpoint.json | 198 + .../schemas/aws/sagemaker/endpointconfig.json | 476 + .../schemas/aws/sagemaker/featuregroup.json | 359 + .../aws/cfn/schemas/aws/sagemaker/image.json | 152 + .../schemas/aws/sagemaker/imageversion.json | 229 + .../aws/sagemaker/inferenceexperiment.json | 440 + .../aws/cfn/schemas/aws/sagemaker/model.json | 230 + .../aws/sagemaker/modelbiasjobdefinition.json | 627 + .../cfn/schemas/aws/sagemaker/modelcard.json | 1028 ++ .../modelexplainabilityjobdefinition.json | 581 + .../schemas/aws/sagemaker/modelpackage.json | 1111 ++ .../aws/sagemaker/modelpackagegroup.json | 150 + .../sagemaker/modelqualityjobdefinition.json | 653 + .../aws/sagemaker/monitoringschedule.json | 741 + .../aws/sagemaker/notebookinstance.json | 122 + .../notebookinstancelifecycleconfig.json | 47 + .../cfn/schemas/aws/sagemaker/pipeline.json | 177 + .../cfn/schemas/aws/sagemaker/project.json | 242 + .../aws/cfn/schemas/aws/sagemaker/space.json | 465 + .../schemas/aws/sagemaker/userprofile.json | 572 + .../cfn/schemas/aws/sagemaker/workteam.json | 124 + .../cfn/schemas/aws/scheduler/schedule.json | 591 + .../schemas/aws/scheduler/schedulegroup.json | 131 + internal/aws/cfn/schemas/aws/sdb/domain.json | 19 + .../aws/secretsmanager/resourcepolicy.json | 32 + .../aws/secretsmanager/rotationschedule.json | 96 + .../schemas/aws/secretsmanager/secret.json | 196 + .../secrettargetattachment.json | 30 + .../aws/securityhub/automationrule.json | 829 ++ .../aws/cfn/schemas/aws/securityhub/hub.json | 101 + .../cfn/schemas/aws/securityhub/standard.json | 106 + .../acceptedportfolioshare.json | 29 + .../servicecatalog/cloudformationproduct.json | 170 + .../cloudformationprovisionedproduct.json | 230 + .../launchnotificationconstraint.json | 44 + .../servicecatalog/launchroleconstraint.json | 42 + .../launchtemplateconstraint.json | 40 + .../schemas/aws/servicecatalog/portfolio.json | 61 + .../portfolioprincipalassociation.json | 39 + .../portfolioproductassociation.json | 38 + .../aws/servicecatalog/portfolioshare.json | 37 + .../resourceupdateconstraint.json | 40 + .../aws/servicecatalog/serviceaction.json | 108 + .../serviceactionassociation.json | 79 + .../servicecatalog/stacksetconstraint.json | 65 + .../schemas/aws/servicecatalog/tagoption.json | 33 + .../servicecatalog/tagoptionassociation.json | 30 + .../application.json | 122 + .../attributegroup.json | 102 + .../attributegroupassociation.json | 85 + .../resourceassociation.json | 94 + .../aws/servicediscovery/httpnamespace.json | 57 + .../aws/servicediscovery/instance.json | 30 + .../servicediscovery/privatednsnamespace.json | 96 + .../servicediscovery/publicdnsnamespace.json | 91 + .../schemas/aws/servicediscovery/service.json | 137 + .../cfn/schemas/aws/ses/configurationset.json | 184 + .../ses/configurationseteventdestination.json | 181 + .../aws/cfn/schemas/aws/ses/contactlist.json | 126 + .../cfn/schemas/aws/ses/dedicatedippool.json | 58 + .../cfn/schemas/aws/ses/emailidentity.json | 173 + .../cfn/schemas/aws/ses/receiptfilter.json | 58 + .../aws/cfn/schemas/aws/ses/receiptrule.json | 216 + .../cfn/schemas/aws/ses/receiptruleset.json | 22 + .../aws/cfn/schemas/aws/ses/template.json | 90 + .../cfn/schemas/aws/ses/vdmattributes.json | 81 + .../aws/cfn/schemas/aws/shield/drtaccess.json | 90 + .../aws/shield/proactiveengagement.json | 115 + .../cfn/schemas/aws/shield/protection.json | 200 + .../schemas/aws/shield/protectiongroup.json | 147 + .../schemas/aws/signer/profilepermission.json | 66 + .../schemas/aws/signer/signingprofile.json | 145 + .../aws/simspaceweaver/simulation.json | 133 + .../aws/cfn/schemas/aws/sns/subscription.json | 58 + internal/aws/cfn/schemas/aws/sns/topic.json | 213 + .../schemas/aws/sns/topicinlinepolicy.json | 57 + .../aws/cfn/schemas/aws/sns/topicpolicy.json | 61 + internal/aws/cfn/schemas/aws/sqs/queue.json | 167 + .../schemas/aws/sqs/queueinlinepolicy.json | 60 + .../aws/cfn/schemas/aws/sqs/queuepolicy.json | 61 + .../aws/cfn/schemas/aws/ssm/association.json | 269 + .../aws/cfn/schemas/aws/ssm/document.json | 236 + .../schemas/aws/ssm/maintenancewindow.json | 78 + .../aws/ssm/maintenancewindowtarget.json | 68 + .../aws/ssm/maintenancewindowtask.json | 243 + .../aws/cfn/schemas/aws/ssm/parameter.json | 120 + .../cfn/schemas/aws/ssm/patchbaseline.json | 370 + .../cfn/schemas/aws/ssm/resourcedatasync.json | 184 + .../cfn/schemas/aws/ssm/resourcepolicy.json | 72 + .../cfn/schemas/aws/ssmcontacts/contact.json | 196 + .../aws/ssmcontacts/contactchannel.json | 96 + .../aws/cfn/schemas/aws/ssmcontacts/plan.json | 180 + .../cfn/schemas/aws/ssmcontacts/rotation.json | 312 + .../aws/ssmincidents/replicationset.json | 158 + .../aws/ssmincidents/responseplan.json | 449 + .../aws/cfn/schemas/aws/sso/assignment.json | 115 + ...ceaccesscontrolattributeconfiguration.json | 134 + .../cfn/schemas/aws/sso/permissionset.json | 232 + .../schemas/aws/stepfunctions/activity.json | 92 + .../aws/stepfunctions/statemachine.json | 265 + .../aws/stepfunctions/statemachinealias.json | 185 + .../stepfunctions/statemachineversion.json | 83 + .../schemas/aws/supportapp/accountalias.json | 61 + .../supportapp/slackchannelconfiguration.json | 101 + .../slackworkspaceconfiguration.json | 67 + .../cfn/schemas/aws/synthetics/canary.json | 385 + .../aws/cfn/schemas/aws/synthetics/group.json | 118 + .../aws/systemsmanagersap/application.json | 167 + .../cfn/schemas/aws/timestream/database.json | 99 + .../aws/timestream/scheduledquery.json | 546 + .../aws/cfn/schemas/aws/timestream/table.json | 240 + .../cfn/schemas/aws/transfer/agreement.json | 173 + .../cfn/schemas/aws/transfer/certificate.json | 193 + .../cfn/schemas/aws/transfer/connector.json | 237 + .../aws/cfn/schemas/aws/transfer/profile.json | 136 + .../aws/cfn/schemas/aws/transfer/server.json | 235 + .../aws/cfn/schemas/aws/transfer/user.json | 135 + .../cfn/schemas/aws/transfer/workflow.json | 390 + .../verifiedpermissions/identitysource.json | 201 + .../aws/verifiedpermissions/policy.json | 200 + .../aws/verifiedpermissions/policystore.json | 130 + .../verifiedpermissions/policytemplate.json | 103 + .../aws/cfn/schemas/aws/voiceid/domain.json | 142 + .../aws/vpclattice/accesslogsubscription.json | 199 + .../schemas/aws/vpclattice/authpolicy.json | 64 + .../cfn/schemas/aws/vpclattice/listener.json | 242 + .../aws/vpclattice/resourcepolicy.json | 54 + .../aws/cfn/schemas/aws/vpclattice/rule.json | 358 + .../cfn/schemas/aws/vpclattice/service.json | 176 + .../aws/vpclattice/servicenetwork.json | 133 + .../servicenetworkserviceassociation.json | 220 + .../servicenetworkvpcassociation.json | 206 + .../schemas/aws/vpclattice/targetgroup.json | 337 + .../aws/cfn/schemas/aws/waf/bytematchset.json | 75 + internal/aws/cfn/schemas/aws/waf/ipset.json | 50 + internal/aws/cfn/schemas/aws/waf/rule.json | 59 + .../schemas/aws/waf/sizeconstraintset.json | 74 + .../schemas/aws/waf/sqlinjectionmatchset.json | 65 + internal/aws/cfn/schemas/aws/waf/webacl.json | 74 + .../aws/cfn/schemas/aws/waf/xssmatchset.json | 66 + .../schemas/aws/wafregional/bytematchset.json | 75 + .../schemas/aws/wafregional/geomatchset.json | 50 + .../cfn/schemas/aws/wafregional/ipset.json | 50 + .../aws/wafregional/ratebasedrule.json | 68 + .../aws/wafregional/regexpatternset.json | 33 + .../aws/cfn/schemas/aws/wafregional/rule.json | 59 + .../aws/wafregional/sizeconstraintset.json | 73 + .../aws/wafregional/sqlinjectionmatchset.json | 65 + .../cfn/schemas/aws/wafregional/webacl.json | 75 + .../aws/wafregional/webaclassociation.json | 30 + .../schemas/aws/wafregional/xssmatchset.json | 65 + internal/aws/cfn/schemas/aws/wafv2/ipset.json | 166 + .../aws/wafv2/loggingconfiguration.json | 238 + .../schemas/aws/wafv2/regexpatternset.json | 132 + .../aws/cfn/schemas/aws/wafv2/rulegroup.json | 1464 ++ .../aws/cfn/schemas/aws/wafv2/webacl.json | 2002 +++ .../schemas/aws/wafv2/webaclassociation.json | 125 + .../aws/cfn/schemas/aws/wisdom/assistant.json | 134 + .../aws/wisdom/assistantassociation.json | 146 + .../cfn/schemas/aws/wisdom/knowledgebase.json | 206 + .../aws/workspaces/connectionalias.json | 123 + .../cfn/schemas/aws/workspaces/workspace.json | 91 + .../aws/workspacesweb/browsersettings.json | 159 + .../aws/workspacesweb/identityprovider.json | 128 + .../aws/workspacesweb/ipaccesssettings.json | 204 + .../aws/workspacesweb/networksettings.json | 142 + .../cfn/schemas/aws/workspacesweb/portal.json | 295 + .../schemas/aws/workspacesweb/truststore.json | 124 + .../useraccessloggingsettings.json | 118 + .../aws/workspacesweb/usersettings.json | 252 + internal/aws/cfn/schemas/aws/xray/group.json | 114 + .../cfn/schemas/aws/xray/resourcepolicy.json | 73 + .../cfn/schemas/aws/xray/samplingrule.json | 284 + internal/cmd/build/pkl.go | 265 +- pkl/aws/accessanalyzer/analyzer.pkl | 12 +- pkl/aws/acmpca/certificate.pkl | 232 +- pkl/aws/acmpca/certificateauthority.pkl | 215 +- pkl/aws/amazonmq/broker.pkl | 116 +- pkl/aws/amazonmq/configuration.pkl | 16 +- pkl/aws/amplify/app.pkl | 92 +- pkl/aws/amplify/branch.pkl | 68 +- pkl/aws/amplify/domain.pkl | 42 +- pkl/aws/amplifyuibuilder/component.pkl | 226 +- pkl/aws/amplifyuibuilder/form.pkl | 225 +- pkl/aws/amplifyuibuilder/theme.pkl | 33 +- pkl/aws/apigateway/apikey.pkl | 32 +- pkl/aws/apigateway/authorizer.pkl | 40 +- pkl/aws/apigateway/clientcertificate.pkl | 8 +- pkl/aws/apigateway/deployment.pkl | 86 +- pkl/aws/apigateway/documentationpart.pkl | 12 +- pkl/aws/apigateway/domainname.pkl | 30 +- pkl/aws/apigateway/gatewayresponse.pkl | 9 +- pkl/aws/apigateway/method.pkl | 104 +- pkl/aws/apigateway/requestvalidator.pkl | 8 +- pkl/aws/apigateway/restapi.pkl | 87 +- pkl/aws/apigateway/stage.pkl | 79 +- pkl/aws/apigateway/usageplan.pkl | 28 +- pkl/aws/apigateway/usageplankey.pkl | 8 +- pkl/aws/apigatewayv2/api.pkl | 95 +- .../apigatewaymanagedoverrides.pkl | 24 +- pkl/aws/apigatewayv2/authorizer.pkl | 44 +- pkl/aws/apigatewayv2/deployment.pkl | 8 +- pkl/aws/apigatewayv2/domainname.pkl | 21 +- pkl/aws/apigatewayv2/integration.pkl | 62 +- pkl/aws/apigatewayv2/integrationresponse.pkl | 8 +- pkl/aws/apigatewayv2/route.pkl | 46 +- pkl/aws/apigatewayv2/routeresponse.pkl | 31 +- pkl/aws/apigatewayv2/stage.pkl | 36 +- pkl/aws/apigatewayv2/vpclink.pkl | 5 +- pkl/aws/appconfig/application.pkl | 2 +- pkl/aws/appconfig/configurationprofile.pkl | 44 +- pkl/aws/appconfig/deployment.pkl | 26 +- pkl/aws/appconfig/deploymentstrategy.pkl | 20 +- pkl/aws/appconfig/environment.pkl | 18 +- pkl/aws/appconfig/extension.pkl | 30 +- pkl/aws/appconfig/extensionassociation.pkl | 19 +- .../appconfig/hostedconfigurationversion.pkl | 16 +- pkl/aws/appflow/connector.pkl | 8 +- pkl/aws/appflow/connectorprofile.pkl | 535 +- pkl/aws/appflow/flow.pkl | 688 +- pkl/aws/appintegrations/dataintegration.pkl | 37 +- pkl/aws/appintegrations/eventintegration.pkl | 18 +- .../applicationautoscaling/scalabletarget.pkl | 38 +- .../applicationautoscaling/scalingpolicy.pkl | 124 +- pkl/aws/applicationinsights/application.pkl | 237 +- pkl/aws/appmesh/gatewayroute.pkl | 156 +- pkl/aws/appmesh/mesh.pkl | 20 +- pkl/aws/appmesh/route.pkl | 202 +- pkl/aws/appmesh/virtualgateway.pkl | 202 +- pkl/aws/appmesh/virtualnode.pkl | 300 +- pkl/aws/appmesh/virtualrouter.pkl | 34 +- pkl/aws/appmesh/virtualservice.pkl | 18 +- .../apprunner/autoscalingconfiguration.pkl | 8 +- .../apprunner/observabilityconfiguration.pkl | 10 +- pkl/aws/apprunner/service.pkl | 197 +- pkl/aws/apprunner/vpcingressconnection.pkl | 28 +- pkl/aws/appstream/appblock.pkl | 43 +- pkl/aws/appstream/appblockbuilder.pkl | 40 +- pkl/aws/appstream/application.pkl | 60 +- .../appstream/applicationfleetassociation.pkl | 5 +- pkl/aws/appstream/directoryconfig.pkl | 12 +- pkl/aws/appstream/entitlement.pkl | 10 +- pkl/aws/appstream/fleet.pkl | 84 +- pkl/aws/appstream/imagebuilder.pkl | 62 +- pkl/aws/appstream/stack.pkl | 84 +- pkl/aws/appstream/stackfleetassociation.pkl | 25 + pkl/aws/appstream/stackuserassociation.pkl | 8 +- pkl/aws/appsync/datasource.pkl | 96 +- pkl/aws/appsync/domainnameapiassociation.pkl | 6 +- pkl/aws/appsync/functionconfiguration.pkl | 80 +- pkl/aws/appsync/graphqlapi.pkl | 76 +- pkl/aws/appsync/resolver.pkl | 121 +- pkl/aws/appsync/sourceapiassociation.pkl | 10 +- pkl/aws/aps/rulegroupsnamespace.pkl | 8 +- pkl/aws/athena/capacityreservation.pkl | 45 +- pkl/aws/athena/datacatalog.pkl | 29 +- pkl/aws/athena/namedquery.pkl | 16 +- pkl/aws/athena/preparedstatement.pkl | 8 +- pkl/aws/athena/workgroup.pkl | 221 +- pkl/aws/auditmanager/assessment.pkl | 203 +- pkl/aws/autoscaling/autoscalinggroup.pkl | 457 +- pkl/aws/autoscaling/launchconfiguration.pkl | 108 +- pkl/aws/autoscaling/lifecyclehook.pkl | 16 +- pkl/aws/autoscaling/scalingpolicy.pkl | 164 +- pkl/aws/autoscaling/scheduledaction.pkl | 20 +- pkl/aws/autoscaling/warmpool.pkl | 16 +- pkl/aws/autoscalingplans/scalingplan.pkl | 96 +- pkl/aws/backup/backupplan.pkl | 35 +- pkl/aws/backup/backupselection.pkl | 10 +- pkl/aws/backup/backupvault.pkl | 30 +- pkl/aws/backup/framework.pkl | 26 +- pkl/aws/backup/reportplan.pkl | 12 +- pkl/aws/backupgateway/hypervisor.pkl | 22 +- pkl/aws/batch/computeenvironment.pkl | 67 +- pkl/aws/batch/jobdefinition.pkl | 410 +- pkl/aws/batch/jobqueue.pkl | 31 +- pkl/aws/batch/schedulingpolicy.pkl | 34 +- pkl/aws/billingconductor/billinggroup.pkl | 25 +- pkl/aws/billingconductor/customlineitem.pkl | 79 +- pkl/aws/billingconductor/pricingplan.pkl | 19 +- pkl/aws/billingconductor/pricingrule.pkl | 38 +- pkl/aws/budgets/budget.pkl | 84 +- pkl/aws/budgets/budgetsaction.pkl | 78 +- pkl/aws/cassandra/keyspace.pkl | 17 +- pkl/aws/cassandra/table.pkl | 163 +- pkl/aws/ce/anomalymonitor.pkl | 27 +- pkl/aws/ce/anomalysubscription.pkl | 41 +- pkl/aws/ce/costcategory.pkl | 21 +- pkl/aws/certificatemanager/account.pkl | 9 +- pkl/aws/certificatemanager/certificate.pkl | 30 +- .../microsoftteamschannelconfiguration.pkl | 16 +- pkl/aws/chatbot/slackchannelconfiguration.pkl | 24 +- pkl/aws/cleanrooms/analysistemplate.pkl | 58 +- pkl/aws/cleanrooms/collaboration.pkl | 79 +- pkl/aws/cleanrooms/configuredtable.pkl | 158 +- .../cleanrooms/configuredtableassociation.pkl | 20 +- pkl/aws/cleanrooms/membership.pkl | 57 +- pkl/aws/cloud9/environmentec2.pkl | 24 +- pkl/aws/cloudformation/hookdefaultversion.pkl | 11 +- pkl/aws/cloudformation/hooktypeconfig.pkl | 19 +- pkl/aws/cloudformation/hookversion.pkl | 26 +- pkl/aws/cloudformation/macro.pkl | 14 +- .../cloudformation/moduledefaultversion.pkl | 8 +- pkl/aws/cloudformation/moduleversion.pkl | 3 +- pkl/aws/cloudformation/publictypeversion.pkl | 13 +- .../cloudformation/resourcedefaultversion.pkl | 3 +- pkl/aws/cloudformation/resourceversion.pkl | 22 +- pkl/aws/cloudformation/stack.pkl | 66 +- pkl/aws/cloudformation/stackset.pkl | 164 +- pkl/aws/cloudformation/typeactivation.pkl | 47 +- pkl/aws/cloudformation/waitcondition.pkl | 8 +- pkl/aws/cloudfront/cachepolicy.pkl | 40 +- .../cloudfrontoriginaccessidentity.pkl | 4 +- .../cloudfront/continuousdeploymentpolicy.pkl | 44 +- pkl/aws/cloudfront/distribution.pkl | 387 +- pkl/aws/cloudfront/function.pkl | 22 +- pkl/aws/cloudfront/keygroup.pkl | 6 +- pkl/aws/cloudfront/monitoringsubscription.pkl | 8 +- pkl/aws/cloudfront/originaccesscontrol.pkl | 8 +- pkl/aws/cloudfront/originrequestpolicy.pkl | 30 +- pkl/aws/cloudfront/publickey.pkl | 6 +- pkl/aws/cloudfront/realtimelogconfig.pkl | 16 +- pkl/aws/cloudfront/responseheaderspolicy.pkl | 124 +- pkl/aws/cloudfront/streamingdistribution.pkl | 44 +- pkl/aws/cloudtrail/channel.pkl | 42 +- pkl/aws/cloudtrail/eventdatastore.pkl | 85 +- pkl/aws/cloudtrail/trail.pkl | 114 +- pkl/aws/cloudwatch/alarm.pkl | 122 +- pkl/aws/cloudwatch/anomalydetector.pkl | 64 +- pkl/aws/cloudwatch/compositealarm.pkl | 32 +- pkl/aws/cloudwatch/insightrule.pkl | 7 +- pkl/aws/cloudwatch/metricstream.pkl | 46 +- pkl/aws/codeartifact/domain.pkl | 4 +- pkl/aws/codeartifact/repository.pkl | 18 +- pkl/aws/codebuild/project.pkl | 257 +- pkl/aws/codebuild/reportgroup.pkl | 40 +- pkl/aws/codebuild/sourcecredential.pkl | 8 +- pkl/aws/codecommit/repository.pkl | 46 +- pkl/aws/codedeploy/application.pkl | 6 +- pkl/aws/codedeploy/deploymentconfig.pkl | 32 +- pkl/aws/codedeploy/deploymentgroup.pkl | 226 +- pkl/aws/codeguruprofiler/profilinggroup.pkl | 34 +- .../repositoryassociation.pkl | 28 +- pkl/aws/codepipeline/customactiontype.pkl | 36 +- pkl/aws/codepipeline/pipeline.pkl | 162 +- pkl/aws/codepipeline/webhook.pkl | 38 +- pkl/aws/codestar/githubrepository.pkl | 36 +- pkl/aws/codestarconnections/connection.pkl | 20 +- .../notificationrule.pkl | 28 +- pkl/aws/cognito/identitypool.pkl | 50 +- pkl/aws/cognito/identitypoolprincipaltag.pkl | 12 +- .../cognito/identitypoolroleattachment.pkl | 31 +- pkl/aws/cognito/userpool.pkl | 249 +- pkl/aws/cognito/userpoolclient.pkl | 78 +- pkl/aws/cognito/userpooldomain.pkl | 4 +- pkl/aws/cognito/userpoolidentityprovider.pkl | 18 +- pkl/aws/cognito/userpoolresourceserver.pkl | 14 +- .../userpoolriskconfigurationattachment.pkl | 58 +- .../userpooluicustomizationattachment.pkl | 8 +- pkl/aws/cognito/userpooluser.pkl | 11 +- .../cognito/userpoolusertogroupattachment.pkl | 8 +- pkl/aws/comprehend/documentclassifier.pkl | 110 +- pkl/aws/comprehend/flywheel.pkl | 61 +- pkl/aws/config/aggregationauthorization.pkl | 4 +- pkl/aws/config/configrule.pkl | 57 +- pkl/aws/config/configurationaggregator.pkl | 20 +- pkl/aws/config/configurationrecorder.pkl | 30 +- pkl/aws/config/conformancepack.pkl | 26 +- pkl/aws/config/deliverychannel.pkl | 4 +- pkl/aws/config/organizationconfigrule.pkl | 40 +- .../config/organizationconformancepack.pkl | 41 +- pkl/aws/config/remediationconfiguration.pkl | 38 +- pkl/aws/config/storedquery.pkl | 4 +- pkl/aws/connect/approvedorigin.pkl | 14 +- pkl/aws/connect/contactflow.pkl | 12 +- pkl/aws/connect/contactflowmodule.pkl | 20 +- pkl/aws/connect/evaluationform.pkl | 193 +- pkl/aws/connect/hoursofoperation.pkl | 38 +- pkl/aws/connect/instance.pkl | 73 +- pkl/aws/connect/instancestorageconfig.pkl | 94 +- pkl/aws/connect/integrationassociation.pkl | 28 +- pkl/aws/connect/phonenumber.pkl | 28 +- pkl/aws/connect/prompt.pkl | 12 +- pkl/aws/connect/queue.pkl | 72 +- pkl/aws/connect/quickconnect.pkl | 81 +- pkl/aws/connect/routingprofile.pkl | 98 +- pkl/aws/connect/rule.pkl | 169 + pkl/aws/connect/securitykey.pkl | 19 +- pkl/aws/connect/tasktemplate.pkl | 120 +- pkl/aws/connect/trafficdistributiongroup.pkl | 12 +- pkl/aws/connect/user.pkl | 151 +- pkl/aws/connect/userhierarchygroup.pkl | 19 +- pkl/aws/connect/view.pkl | 20 +- pkl/aws/connect/viewversion.pkl | 8 +- pkl/aws/connectcampaigns/campaign.pkl | 64 +- pkl/aws/controltower/enabledcontrol.pkl | 70 + pkl/aws/cur/reportdefinition.pkl | 52 +- .../calculatedattributedefinition.pkl | 140 +- pkl/aws/customerprofiles/domain.pkl | 136 +- pkl/aws/customerprofiles/eventstream.pkl | 34 +- pkl/aws/customerprofiles/integration.pkl | 215 +- pkl/aws/customerprofiles/objecttype.pkl | 62 +- pkl/aws/databrew/dataset.pkl | 165 +- pkl/aws/databrew/job.pkl | 283 +- pkl/aws/databrew/project.pkl | 20 +- pkl/aws/databrew/recipe.pkl | 138 + pkl/aws/databrew/ruleset.pkl | 89 +- pkl/aws/databrew/schedule.pkl | 25 +- pkl/aws/datapipeline/pipeline.pkl | 60 +- pkl/aws/datasync/agent.pkl | 4 +- pkl/aws/datasync/locationazureblob.pkl | 40 +- pkl/aws/datasync/locationefs.pkl | 24 +- pkl/aws/datasync/locationfsxlustre.pkl | 6 +- pkl/aws/datasync/locationfsxontap.pkl | 64 +- pkl/aws/datasync/locationfsxopenzfs.pkl | 28 +- pkl/aws/datasync/locationfsxwindows.pkl | 22 +- pkl/aws/datasync/locationhdfs.pkl | 66 +- pkl/aws/datasync/locationnfs.pkl | 22 +- pkl/aws/datasync/locationobjectstorage.pkl | 28 +- pkl/aws/datasync/locations3.pkl | 24 +- pkl/aws/datasync/locationsmb.pkl | 40 +- pkl/aws/datasync/storagesystem.pkl | 44 +- pkl/aws/datasync/task.pkl | 162 +- pkl/aws/dax/cluster.pkl | 42 +- pkl/aws/dax/parametergroup.pkl | 8 +- pkl/aws/detective/graph.pkl | 6 +- pkl/aws/detective/memberinvitation.pkl | 16 +- .../loganomalydetectionintegration.pkl | 5 +- pkl/aws/devopsguru/notificationchannel.pkl | 40 +- pkl/aws/devopsguru/resourcecollection.pkl | 29 +- pkl/aws/directoryservice/microsoftad.pkl | 20 +- pkl/aws/directoryservice/simplead.pkl | 26 +- pkl/aws/dlm/lifecyclepolicy.pkl | 255 +- pkl/aws/dms/endpoint.pkl | 548 +- pkl/aws/dms/eventsubscription.pkl | 20 +- pkl/aws/dms/replicationconfig.pkl | 53 +- pkl/aws/dms/replicationinstance.pkl | 44 +- pkl/aws/dms/replicationsubnetgroup.pkl | 6 +- pkl/aws/dms/replicationtask.pkl | 40 +- pkl/aws/docdb/dbcluster.pkl | 86 +- pkl/aws/docdb/dbclusterparametergroup.pkl | 16 +- pkl/aws/docdb/dbinstance.pkl | 32 +- pkl/aws/docdb/dbsubnetgroup.pkl | 6 +- pkl/aws/docdbelastic/cluster.pkl | 38 +- pkl/aws/dynamodb/globaltable.pkl | 170 +- pkl/aws/dynamodb/table.pkl | 228 +- pkl/aws/ec2/capacityreservation.pkl | 52 +- pkl/aws/ec2/capacityreservationfleet.pkl | 50 +- pkl/aws/ec2/carriergateway.pkl | 9 +- pkl/aws/ec2/clientvpnendpoint.pkl | 104 +- pkl/aws/ec2/customergateway.pkl | 4 +- pkl/aws/ec2/dhcpoptions.pkl | 14 +- pkl/aws/ec2/ec2fleet.pkl | 276 +- pkl/aws/ec2/eip.pkl | 38 +- pkl/aws/ec2/eipassociation.pkl | 8 +- pkl/aws/ec2/flowlog.pkl | 44 +- pkl/aws/ec2/host.pkl | 28 +- pkl/aws/ec2/instance.pkl | 287 +- pkl/aws/ec2/instanceconnectendpoint.pkl | 13 +- pkl/aws/ec2/internetgateway.pkl | 10 +- pkl/aws/ec2/ipam.pkl | 22 +- pkl/aws/ec2/ipamallocation.pkl | 7 +- pkl/aws/ec2/ipampool.pkl | 93 +- pkl/aws/ec2/ipamresourcediscovery.pkl | 24 +- .../ec2/ipamresourcediscoveryassociation.pkl | 12 +- pkl/aws/ec2/ipamscope.pkl | 12 +- pkl/aws/ec2/keypair.pkl | 18 +- pkl/aws/ec2/launchtemplate.pkl | 569 +- pkl/aws/ec2/localgatewayroute.pkl | 8 +- pkl/aws/ec2/localgatewayroutetable.pkl | 19 +- ...etablevirtualinterfacegroupassociation.pkl | 17 +- .../localgatewayroutetablevpcassociation.pkl | 15 +- pkl/aws/ec2/natgateway.pkl | 35 +- pkl/aws/ec2/networkacl.pkl | 4 +- pkl/aws/ec2/networkaclentry.pkl | 54 +- pkl/aws/ec2/networkinsightsaccessscope.pkl | 45 +- .../networkinsightsaccessscopeanalysis.pkl | 10 +- pkl/aws/ec2/networkinsightsanalysis.pkl | 300 +- pkl/aws/ec2/networkinsightspath.pkl | 82 +- pkl/aws/ec2/networkinterface.pkl | 104 +- pkl/aws/ec2/networkinterfaceattachment.pkl | 4 +- .../networkperformancemetricsubscription.pkl | 8 +- pkl/aws/ec2/placementgroup.pkl | 18 +- pkl/aws/ec2/prefixlist.pkl | 24 +- pkl/aws/ec2/route.pkl | 62 +- pkl/aws/ec2/routetable.pkl | 7 +- pkl/aws/ec2/securitygroup.pkl | 52 +- pkl/aws/ec2/securitygroupegress.pkl | 45 +- pkl/aws/ec2/securitygroupingress.pkl | 85 +- pkl/aws/ec2/spotfleet.pkl | 358 +- pkl/aws/ec2/subnet.pkl | 78 +- pkl/aws/ec2/subnetcidrblock.pkl | 16 +- pkl/aws/ec2/subnetroutetableassociation.pkl | 3 +- pkl/aws/ec2/trafficmirrorfilter.pkl | 4 +- pkl/aws/ec2/trafficmirrorfilterrule.pkl | 24 +- pkl/aws/ec2/trafficmirrorsession.pkl | 22 +- pkl/aws/ec2/trafficmirrortarget.pkl | 18 +- pkl/aws/ec2/transitgateway.pkl | 40 +- pkl/aws/ec2/transitgatewayattachment.pkl | 4 +- pkl/aws/ec2/transitgatewayconnect.pkl | 16 +- pkl/aws/ec2/transitgatewaymulticastdomain.pkl | 6 +- ...ansitgatewaymulticastdomainassociation.pkl | 8 +- .../transitgatewaymulticastgroupmember.pkl | 8 +- .../transitgatewaymulticastgroupsource.pkl | 8 +- .../ec2/transitgatewaypeeringattachment.pkl | 28 +- pkl/aws/ec2/transitgatewayroute.pkl | 12 +- pkl/aws/ec2/transitgatewayroutetable.pkl | 10 +- .../transitgatewayroutetablepropagation.pkl | 6 +- pkl/aws/ec2/transitgatewayvpcattachment.pkl | 20 +- pkl/aws/ec2/verifiedaccessendpoint.pkl | 104 +- pkl/aws/ec2/verifiedaccessgroup.pkl | 18 +- pkl/aws/ec2/verifiedaccessinstance.pkl | 39 +- pkl/aws/ec2/verifiedaccesstrustprovider.pkl | 72 +- pkl/aws/ec2/volume.pkl | 76 +- pkl/aws/ec2/volumeattachment.pkl | 29 +- pkl/aws/ec2/vpc.pkl | 33 +- pkl/aws/ec2/vpccidrblock.pkl | 24 +- pkl/aws/ec2/vpcendpoint.pkl | 44 +- .../ec2/vpcendpointconnectionnotification.pkl | 8 +- pkl/aws/ec2/vpcendpointservice.pkl | 8 +- pkl/aws/ec2/vpcpeeringconnection.pkl | 4 +- pkl/aws/ec2/vpnconnection.pkl | 24 +- pkl/aws/ec2/vpngateway.pkl | 4 +- pkl/aws/ecr/publicrepository.pkl | 44 +- pkl/aws/ecr/pullthroughcacherule.pkl | 45 +- pkl/aws/ecr/registrypolicy.pkl | 8 +- pkl/aws/ecr/replicationconfiguration.pkl | 50 +- pkl/aws/ecr/repository.pkl | 97 - pkl/aws/ecs/capacityprovider.pkl | 28 +- pkl/aws/ecs/cluster.pkl | 67 +- .../clustercapacityproviderassociations.pkl | 34 +- pkl/aws/ecs/service.pkl | 424 +- pkl/aws/ecs/taskdefinition.pkl | 559 +- pkl/aws/ecs/taskset.pkl | 90 +- pkl/aws/efs/accesspoint.pkl | 47 +- pkl/aws/efs/filesystem.pkl | 131 +- pkl/aws/efs/mounttarget.pkl | 16 +- pkl/aws/eks/addon.pkl | 40 +- pkl/aws/eks/cluster.pkl | 125 +- pkl/aws/eks/fargateprofile.pkl | 28 +- pkl/aws/eks/identityproviderconfig.pkl | 20 +- pkl/aws/eks/nodegroup.pkl | 96 +- pkl/aws/elasticache/cachecluster.pkl | 112 +- .../elasticache/globalreplicationgroup.pkl | 60 +- pkl/aws/elasticache/parametergroup.pkl | 12 +- pkl/aws/elasticache/replicationgroup.pkl | 210 +- pkl/aws/elasticache/securitygroup.pkl | 4 +- pkl/aws/elasticache/securitygroupingress.pkl | 8 +- pkl/aws/elasticache/subnetgroup.pkl | 4 +- pkl/aws/elasticache/user.pkl | 22 +- pkl/aws/elasticache/usergroup.pkl | 10 +- pkl/aws/elasticbeanstalk/application.pkl | 28 +- .../elasticbeanstalk/applicationversion.pkl | 4 +- .../configurationtemplate.pkl | 28 +- pkl/aws/elasticbeanstalk/environment.pkl | 62 +- pkl/aws/elasticloadbalancing/loadbalancer.pkl | 144 + pkl/aws/elasticloadbalancingv2/listener.pkl | 156 +- .../listenercertificate.pkl | 4 +- .../elasticloadbalancingv2/listenerrule.pkl | 214 +- .../elasticloadbalancingv2/loadbalancer.pkl | 94 +- .../elasticloadbalancingv2/targetgroup.pkl | 106 +- pkl/aws/elasticsearch/domain.pkl | 158 +- pkl/aws/emr/cluster.pkl | 386 +- pkl/aws/emr/instancefleetconfig.pkl | 60 +- pkl/aws/emr/instancegroupconfig.pkl | 114 +- pkl/aws/emr/step.pkl | 26 +- pkl/aws/emr/studio.pkl | 109 +- pkl/aws/emr/studiosessionmapping.pkl | 15 +- pkl/aws/emr/walworkspace.pkl | 4 +- pkl/aws/emrcontainers/virtualcluster.pkl | 16 +- pkl/aws/emrserverless/application.pkl | 259 +- pkl/aws/entityresolution/matchingworkflow.pkl | 128 +- pkl/aws/entityresolution/schemamapping.pkl | 77 +- pkl/aws/events/apidestination.pkl | 8 +- pkl/aws/events/archive.pkl | 8 +- pkl/aws/events/connection.pkl | 46 +- pkl/aws/events/endpoint.pkl | 63 +- pkl/aws/events/eventbus.pkl | 18 +- pkl/aws/events/eventbuspolicy.pkl | 14 +- pkl/aws/events/rule.pkl | 221 +- pkl/aws/eventschemas/discoverer.pkl | 4 +- pkl/aws/eventschemas/registry.pkl | 10 +- pkl/aws/eventschemas/registrypolicy.pkl | 8 +- pkl/aws/eventschemas/schema.pkl | 14 +- pkl/aws/evidently/experiment.pkl | 78 +- pkl/aws/evidently/feature.pkl | 36 +- pkl/aws/evidently/launch.pkl | 74 +- pkl/aws/evidently/project.pkl | 28 +- pkl/aws/evidently/segment.pkl | 12 +- pkl/aws/finspace/environment.pkl | 69 + pkl/aws/fis/experimenttemplate.pkl | 186 +- pkl/aws/fms/notificationchannel.pkl | 9 +- pkl/aws/fms/policy.pkl | 134 +- pkl/aws/fms/resourceset.pkl | 35 +- pkl/aws/forecast/dataset.pkl | 35 +- pkl/aws/forecast/datasetgroup.pkl | 43 +- pkl/aws/frauddetector/detector.pkl | 132 +- pkl/aws/frauddetector/entitytype.pkl | 12 +- pkl/aws/frauddetector/eventtype.pkl | 48 +- pkl/aws/frauddetector/label.pkl | 12 +- pkl/aws/frauddetector/list.pkl | 25 +- pkl/aws/frauddetector/outcome.pkl | 12 +- pkl/aws/frauddetector/variable.pkl | 30 +- pkl/aws/fsx/datarepositoryassociation.pkl | 82 +- pkl/aws/fsx/filesystem.pkl | 170 +- pkl/aws/fsx/snapshot.pkl | 4 +- pkl/aws/fsx/storagevirtualmachine.pkl | 42 +- pkl/aws/fsx/volume.pkl | 142 +- pkl/aws/gamelift/alias.pkl | 4 +- pkl/aws/gamelift/build.pkl | 14 +- pkl/aws/gamelift/fleet.pkl | 285 +- pkl/aws/gamelift/gameservergroup.pkl | 194 +- pkl/aws/gamelift/gamesessionqueue.pkl | 87 +- pkl/aws/gamelift/location.pkl | 4 +- pkl/aws/gamelift/matchmakingconfiguration.pkl | 92 +- pkl/aws/gamelift/matchmakingruleset.pkl | 4 +- pkl/aws/gamelift/script.pkl | 14 +- pkl/aws/globalaccelerator/accelerator.pkl | 27 +- pkl/aws/globalaccelerator/endpointgroup.pkl | 66 +- pkl/aws/globalaccelerator/listener.pkl | 42 - pkl/aws/glue/classifier.pkl | 44 +- pkl/aws/glue/connection.pkl | 14 +- pkl/aws/glue/crawler.pkl | 122 +- pkl/aws/glue/database.pkl | 26 +- .../glue/datacatalogencryptionsettings.pkl | 22 +- pkl/aws/glue/dataqualityruleset.pkl | 18 +- pkl/aws/glue/devendpoint.pkl | 48 +- pkl/aws/glue/job.pkl | 86 +- pkl/aws/glue/mltransform.pkl | 64 +- pkl/aws/glue/partition.pkl | 68 +- pkl/aws/glue/registry.pkl | 4 +- pkl/aws/glue/schema.pkl | 42 +- pkl/aws/glue/schemaversion.pkl | 4 +- pkl/aws/glue/schemaversionmetadata.pkl | 8 +- pkl/aws/glue/securityconfiguration.pkl | 35 +- pkl/aws/glue/table.pkl | 124 +- pkl/aws/glue/trigger.pkl | 54 +- pkl/aws/grafana/workspace.pkl | 151 +- pkl/aws/greengrass/connectordefinition.pkl | 16 +- .../greengrass/connectordefinitionversion.pkl | 4 +- pkl/aws/greengrass/coredefinition.pkl | 8 +- pkl/aws/greengrass/coredefinitionversion.pkl | 6 +- pkl/aws/greengrass/devicedefinition.pkl | 16 +- .../greengrass/devicedefinitionversion.pkl | 6 +- pkl/aws/greengrass/functiondefinition.pkl | 62 +- .../greengrass/functiondefinitionversion.pkl | 34 +- pkl/aws/greengrass/group.pkl | 8 +- pkl/aws/greengrass/groupversion.pkl | 14 +- pkl/aws/greengrass/loggerdefinition.pkl | 22 +- .../greengrass/loggerdefinitionversion.pkl | 12 +- pkl/aws/greengrass/resourcedefinition.pkl | 74 +- .../greengrass/resourcedefinitionversion.pkl | 70 +- pkl/aws/greengrass/subscriptiondefinition.pkl | 20 +- .../subscriptiondefinitionversion.pkl | 8 +- pkl/aws/greengrassv2/componentversion.pkl | 116 +- pkl/aws/greengrassv2/deployment.pkl | 132 +- pkl/aws/groundstation/config.pkl | 148 +- .../groundstation/dataflowendpointgroup.pkl | 94 +- pkl/aws/groundstation/missionprofile.pkl | 36 +- pkl/aws/guardduty/detector.pkl | 62 +- pkl/aws/guardduty/filter.pkl | 36 +- pkl/aws/guardduty/ipset.pkl | 14 +- pkl/aws/guardduty/member.pkl | 8 +- pkl/aws/guardduty/threatintelset.pkl | 12 +- pkl/aws/healthlake/fhirdatastore.pkl | 84 +- pkl/aws/iam/group.pkl | 22 +- pkl/aws/iam/grouppolicy.pkl | 12 +- pkl/aws/iam/instanceprofile.pkl | 9 +- pkl/aws/iam/managedpolicy.pkl | 22 +- pkl/aws/iam/oidcprovider.pkl | 14 +- pkl/aws/iam/policy.pkl | 26 +- pkl/aws/iam/role.pkl | 76 +- pkl/aws/iam/rolepolicy.pkl | 12 +- pkl/aws/iam/samlprovider.pkl | 4 +- pkl/aws/iam/servercertificate.pkl | 18 +- pkl/aws/iam/user.pkl | 73 +- pkl/aws/iam/userpolicy.pkl | 26 +- pkl/aws/iam/virtualmfadevice.pkl | 6 +- pkl/aws/identitystore/group.pkl | 4 +- pkl/aws/identitystore/groupmembership.pkl | 4 +- pkl/aws/imagebuilder/component.pkl | 26 +- pkl/aws/imagebuilder/containerrecipe.pkl | 90 +- .../distributionconfiguration.pkl | 87 +- pkl/aws/imagebuilder/image.pkl | 57 +- pkl/aws/imagebuilder/imagepipeline.pkl | 97 +- pkl/aws/imagebuilder/imagerecipe.pkl | 76 +- .../infrastructureconfiguration.pkl | 74 +- pkl/aws/inspector/assessmenttemplate.pkl | 14 +- pkl/aws/inspector/resourcegroup.pkl | 4 +- pkl/aws/inspectorv2/filter.pkl | 153 +- pkl/aws/internetmonitor/monitor.pkl | 73 +- pkl/aws/iot/accountauditconfiguration.pkl | 54 +- pkl/aws/iot/authorizer.pkl | 24 +- pkl/aws/iot/billinggroup.pkl | 4 +- pkl/aws/iot/cacertificate.pkl | 50 +- pkl/aws/iot/certificate.pkl | 14 +- pkl/aws/iot/custommetric.pkl | 12 +- pkl/aws/iot/dimension.pkl | 6 +- pkl/aws/iot/domainconfiguration.pkl | 62 +- pkl/aws/iot/fleetmetric.pkl | 57 +- pkl/aws/iot/jobtemplate.pkl | 156 +- pkl/aws/iot/logging.pkl | 8 +- pkl/aws/iot/mitigationaction.pkl | 46 +- pkl/aws/iot/policy.pkl | 10 +- pkl/aws/iot/provisioningtemplate.pkl | 28 +- pkl/aws/iot/resourcespecificlogging.pkl | 12 +- pkl/aws/iot/rolealias.pkl | 16 +- pkl/aws/iot/scheduledaudit.pkl | 24 +- pkl/aws/iot/securityprofile.pkl | 123 +- pkl/aws/iot/thing.pkl | 8 +- pkl/aws/iot/thinggroup.pkl | 14 +- pkl/aws/iot/thingtype.pkl | 4 +- pkl/aws/iot/topicrule.pkl | 384 +- pkl/aws/iot/topicruledestination.pkl | 27 +- pkl/aws/iot1click/placement.pkl | 8 +- pkl/aws/iot1click/project.pkl | 10 +- pkl/aws/iotanalytics/channel.pkl | 53 +- pkl/aws/iotanalytics/dataset.pkl | 160 +- pkl/aws/iotanalytics/datastore.pkl | 121 +- pkl/aws/iotanalytics/pipeline.pkl | 96 +- .../iotcoredeviceadvisor/suitedefinition.pkl | 45 +- pkl/aws/iotevents/alarmmodel.pkl | 253 +- pkl/aws/iotevents/detectormodel.pkl | 288 +- pkl/aws/iotevents/input.pkl | 29 +- pkl/aws/iotfleethub/application.pkl | 16 +- pkl/aws/iotfleetwise/campaign.pkl | 144 +- pkl/aws/iotfleetwise/decodermanifest.pkl | 114 +- pkl/aws/iotfleetwise/fleet.pkl | 4 +- pkl/aws/iotfleetwise/modelmanifest.pkl | 29 +- pkl/aws/iotfleetwise/signalcatalog.pkl | 101 +- pkl/aws/iotfleetwise/vehicle.pkl | 28 +- pkl/aws/iotsitewise/accesspolicy.pkl | 42 +- pkl/aws/iotsitewise/asset.pkl | 36 +- pkl/aws/iotsitewise/assetmodel.pkl | 187 +- pkl/aws/iotsitewise/dashboard.pkl | 22 +- pkl/aws/iotsitewise/gateway.pkl | 50 +- pkl/aws/iotsitewise/portal.pkl | 30 +- pkl/aws/iotsitewise/project.pkl | 27 +- pkl/aws/iotthingsgraph/flowtemplate.pkl | 4 +- pkl/aws/iottwinmaker/componenttype.pkl | 164 +- pkl/aws/iottwinmaker/entity.pkl | 157 +- pkl/aws/iottwinmaker/scene.pkl | 27 +- pkl/aws/iottwinmaker/syncjob.pkl | 21 +- pkl/aws/iottwinmaker/workspace.pkl | 13 +- pkl/aws/iotwireless/destination.pkl | 12 +- pkl/aws/iotwireless/deviceprofile.pkl | 59 +- pkl/aws/iotwireless/fuotatask.pkl | 56 +- pkl/aws/iotwireless/multicastgroup.pkl | 36 +- .../networkanalyzerconfiguration.pkl | 20 +- pkl/aws/iotwireless/partneraccount.pkl | 36 +- pkl/aws/iotwireless/serviceprofile.pkl | 40 +- pkl/aws/iotwireless/taskdefinition.pkl | 58 +- pkl/aws/iotwireless/wirelessdevice.pkl | 102 +- .../iotwireless/wirelessdeviceimporttask.pkl | 22 +- pkl/aws/iotwireless/wirelessgateway.pkl | 22 +- pkl/aws/ivs/channel.pkl | 20 +- pkl/aws/ivs/playbackkeypair.pkl | 4 +- pkl/aws/ivs/recordingconfiguration.pkl | 58 +- pkl/aws/ivs/streamkey.pkl | 4 +- pkl/aws/ivschat/loggingconfiguration.pkl | 40 +- pkl/aws/ivschat/room.pkl | 8 +- pkl/aws/kms/alias.pkl | 9 +- pkl/aws/kms/key.pkl | 96 +- pkl/aws/kms/replicakey.pkl | 47 - pkl/aws/omics/annotationstore.pkl | 101 - scripts/cache-schemas.sh | 11 + scripts/gen-one-pkl.sh | 6 +- scripts/one-schema.sh | 25 + 1731 files changed, 283449 insertions(+), 18982 deletions(-) create mode 100644 internal/aws/cfn/schemas/aws/accessanalyzer/analyzer.json create mode 100644 internal/aws/cfn/schemas/aws/acmpca/certificate.json create mode 100644 internal/aws/cfn/schemas/aws/acmpca/certificateauthority.json create mode 100644 internal/aws/cfn/schemas/aws/acmpca/certificateauthorityactivation.json create mode 100644 internal/aws/cfn/schemas/aws/acmpca/permission.json create mode 100644 internal/aws/cfn/schemas/aws/amazonmq/broker.json create mode 100644 internal/aws/cfn/schemas/aws/amazonmq/configuration.json create mode 100644 internal/aws/cfn/schemas/aws/amazonmq/configurationassociation.json create mode 100644 internal/aws/cfn/schemas/aws/amplify/app.json create mode 100644 internal/aws/cfn/schemas/aws/amplify/branch.json create mode 100644 internal/aws/cfn/schemas/aws/amplify/domain.json create mode 100644 internal/aws/cfn/schemas/aws/amplifyuibuilder/component.json create mode 100644 internal/aws/cfn/schemas/aws/amplifyuibuilder/form.json create mode 100644 internal/aws/cfn/schemas/aws/amplifyuibuilder/theme.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/account.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/apikey.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/authorizer.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/basepathmapping.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/clientcertificate.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/deployment.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/documentationpart.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/documentationversion.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/domainname.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/gatewayresponse.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/method.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/model.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/requestvalidator.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/resource.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/restapi.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/stage.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/usageplan.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/usageplankey.json create mode 100644 internal/aws/cfn/schemas/aws/apigateway/vpclink.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/api.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/apigatewaymanagedoverrides.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/apimapping.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/authorizer.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/deployment.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/domainname.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/integration.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/integrationresponse.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/model.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/route.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/routeresponse.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/stage.json create mode 100644 internal/aws/cfn/schemas/aws/apigatewayv2/vpclink.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/application.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/configurationprofile.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/deployment.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/deploymentstrategy.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/environment.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/extension.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/extensionassociation.json create mode 100644 internal/aws/cfn/schemas/aws/appconfig/hostedconfigurationversion.json create mode 100644 internal/aws/cfn/schemas/aws/appflow/connector.json create mode 100644 internal/aws/cfn/schemas/aws/appflow/connectorprofile.json create mode 100644 internal/aws/cfn/schemas/aws/appflow/flow.json create mode 100644 internal/aws/cfn/schemas/aws/appintegrations/dataintegration.json create mode 100644 internal/aws/cfn/schemas/aws/appintegrations/eventintegration.json create mode 100644 internal/aws/cfn/schemas/aws/applicationautoscaling/scalabletarget.json create mode 100644 internal/aws/cfn/schemas/aws/applicationautoscaling/scalingpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/applicationinsights/application.json create mode 100644 internal/aws/cfn/schemas/aws/appmesh/gatewayroute.json create mode 100644 internal/aws/cfn/schemas/aws/appmesh/mesh.json create mode 100644 internal/aws/cfn/schemas/aws/appmesh/route.json create mode 100644 internal/aws/cfn/schemas/aws/appmesh/virtualgateway.json create mode 100644 internal/aws/cfn/schemas/aws/appmesh/virtualnode.json create mode 100644 internal/aws/cfn/schemas/aws/appmesh/virtualrouter.json create mode 100644 internal/aws/cfn/schemas/aws/appmesh/virtualservice.json create mode 100644 internal/aws/cfn/schemas/aws/apprunner/autoscalingconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/apprunner/observabilityconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/apprunner/service.json create mode 100644 internal/aws/cfn/schemas/aws/apprunner/vpcconnector.json create mode 100644 internal/aws/cfn/schemas/aws/apprunner/vpcingressconnection.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/appblock.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/appblockbuilder.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/application.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/applicationentitlementassociation.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/applicationfleetassociation.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/directoryconfig.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/entitlement.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/fleet.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/imagebuilder.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/stack.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/stackfleetassociation.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/stackuserassociation.json create mode 100644 internal/aws/cfn/schemas/aws/appstream/user.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/apicache.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/apikey.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/datasource.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/domainname.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/domainnameapiassociation.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/functionconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/graphqlapi.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/graphqlschema.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/resolver.json create mode 100644 internal/aws/cfn/schemas/aws/appsync/sourceapiassociation.json create mode 100644 internal/aws/cfn/schemas/aws/aps/rulegroupsnamespace.json create mode 100644 internal/aws/cfn/schemas/aws/aps/workspace.json create mode 100644 internal/aws/cfn/schemas/aws/athena/capacityreservation.json create mode 100644 internal/aws/cfn/schemas/aws/athena/datacatalog.json create mode 100644 internal/aws/cfn/schemas/aws/athena/namedquery.json create mode 100644 internal/aws/cfn/schemas/aws/athena/preparedstatement.json create mode 100644 internal/aws/cfn/schemas/aws/athena/workgroup.json create mode 100644 internal/aws/cfn/schemas/aws/auditmanager/assessment.json create mode 100644 internal/aws/cfn/schemas/aws/autoscaling/autoscalinggroup.json create mode 100644 internal/aws/cfn/schemas/aws/autoscaling/launchconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/autoscaling/lifecyclehook.json create mode 100644 internal/aws/cfn/schemas/aws/autoscaling/scalingpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/autoscaling/scheduledaction.json create mode 100644 internal/aws/cfn/schemas/aws/autoscaling/warmpool.json create mode 100644 internal/aws/cfn/schemas/aws/autoscalingplans/scalingplan.json create mode 100644 internal/aws/cfn/schemas/aws/backup/backupplan.json create mode 100644 internal/aws/cfn/schemas/aws/backup/backupselection.json create mode 100644 internal/aws/cfn/schemas/aws/backup/backupvault.json create mode 100644 internal/aws/cfn/schemas/aws/backup/framework.json create mode 100644 internal/aws/cfn/schemas/aws/backup/reportplan.json create mode 100644 internal/aws/cfn/schemas/aws/backupgateway/hypervisor.json create mode 100644 internal/aws/cfn/schemas/aws/batch/computeenvironment.json create mode 100644 internal/aws/cfn/schemas/aws/batch/jobdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/batch/jobqueue.json create mode 100644 internal/aws/cfn/schemas/aws/batch/schedulingpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/billingconductor/billinggroup.json create mode 100644 internal/aws/cfn/schemas/aws/billingconductor/customlineitem.json create mode 100644 internal/aws/cfn/schemas/aws/billingconductor/pricingplan.json create mode 100644 internal/aws/cfn/schemas/aws/billingconductor/pricingrule.json create mode 100644 internal/aws/cfn/schemas/aws/budgets/budget.json create mode 100644 internal/aws/cfn/schemas/aws/budgets/budgetsaction.json create mode 100644 internal/aws/cfn/schemas/aws/cassandra/keyspace.json create mode 100644 internal/aws/cfn/schemas/aws/cassandra/table.json create mode 100644 internal/aws/cfn/schemas/aws/ce/anomalymonitor.json create mode 100644 internal/aws/cfn/schemas/aws/ce/anomalysubscription.json create mode 100644 internal/aws/cfn/schemas/aws/ce/costcategory.json create mode 100644 internal/aws/cfn/schemas/aws/certificatemanager/account.json create mode 100644 internal/aws/cfn/schemas/aws/certificatemanager/certificate.json create mode 100644 internal/aws/cfn/schemas/aws/chatbot/microsoftteamschannelconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/chatbot/slackchannelconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/cleanrooms/analysistemplate.json create mode 100644 internal/aws/cfn/schemas/aws/cleanrooms/collaboration.json create mode 100644 internal/aws/cfn/schemas/aws/cleanrooms/configuredtable.json create mode 100644 internal/aws/cfn/schemas/aws/cleanrooms/configuredtableassociation.json create mode 100644 internal/aws/cfn/schemas/aws/cleanrooms/membership.json create mode 100644 internal/aws/cfn/schemas/aws/cloud9/environmentec2.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/customresource.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/hookdefaultversion.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/hooktypeconfig.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/hookversion.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/macro.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/moduledefaultversion.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/moduleversion.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/publictypeversion.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/publisher.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/resourcedefaultversion.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/resourceversion.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/stack.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/stackset.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/typeactivation.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/waitcondition.json create mode 100644 internal/aws/cfn/schemas/aws/cloudformation/waitconditionhandle.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/cachepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/cloudfrontoriginaccessidentity.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/continuousdeploymentpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/distribution.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/function.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/keygroup.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/monitoringsubscription.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/originaccesscontrol.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/originrequestpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/publickey.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/realtimelogconfig.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/responseheaderspolicy.json create mode 100644 internal/aws/cfn/schemas/aws/cloudfront/streamingdistribution.json create mode 100644 internal/aws/cfn/schemas/aws/cloudtrail/channel.json create mode 100644 internal/aws/cfn/schemas/aws/cloudtrail/eventdatastore.json create mode 100644 internal/aws/cfn/schemas/aws/cloudtrail/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/cloudtrail/trail.json create mode 100644 internal/aws/cfn/schemas/aws/cloudwatch/alarm.json create mode 100644 internal/aws/cfn/schemas/aws/cloudwatch/anomalydetector.json create mode 100644 internal/aws/cfn/schemas/aws/cloudwatch/compositealarm.json create mode 100644 internal/aws/cfn/schemas/aws/cloudwatch/dashboard.json create mode 100644 internal/aws/cfn/schemas/aws/cloudwatch/insightrule.json create mode 100644 internal/aws/cfn/schemas/aws/cloudwatch/metricstream.json create mode 100644 internal/aws/cfn/schemas/aws/codeartifact/domain.json create mode 100644 internal/aws/cfn/schemas/aws/codeartifact/repository.json create mode 100644 internal/aws/cfn/schemas/aws/codebuild/project.json create mode 100644 internal/aws/cfn/schemas/aws/codebuild/reportgroup.json create mode 100644 internal/aws/cfn/schemas/aws/codebuild/sourcecredential.json create mode 100644 internal/aws/cfn/schemas/aws/codecommit/repository.json create mode 100644 internal/aws/cfn/schemas/aws/codedeploy/application.json create mode 100644 internal/aws/cfn/schemas/aws/codedeploy/deploymentconfig.json create mode 100644 internal/aws/cfn/schemas/aws/codedeploy/deploymentgroup.json create mode 100644 internal/aws/cfn/schemas/aws/codeguruprofiler/profilinggroup.json create mode 100644 internal/aws/cfn/schemas/aws/codegurureviewer/repositoryassociation.json create mode 100644 internal/aws/cfn/schemas/aws/codepipeline/customactiontype.json create mode 100644 internal/aws/cfn/schemas/aws/codepipeline/pipeline.json create mode 100644 internal/aws/cfn/schemas/aws/codepipeline/webhook.json create mode 100644 internal/aws/cfn/schemas/aws/codestar/githubrepository.json create mode 100644 internal/aws/cfn/schemas/aws/codestarconnections/connection.json create mode 100644 internal/aws/cfn/schemas/aws/codestarnotifications/notificationrule.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/identitypool.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/identitypoolprincipaltag.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/identitypoolroleattachment.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpool.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpoolclient.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpooldomain.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpoolgroup.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpoolidentityprovider.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpoolresourceserver.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpoolriskconfigurationattachment.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpooluicustomizationattachment.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpooluser.json create mode 100644 internal/aws/cfn/schemas/aws/cognito/userpoolusertogroupattachment.json create mode 100644 internal/aws/cfn/schemas/aws/comprehend/documentclassifier.json create mode 100644 internal/aws/cfn/schemas/aws/comprehend/flywheel.json create mode 100644 internal/aws/cfn/schemas/aws/config/aggregationauthorization.json create mode 100644 internal/aws/cfn/schemas/aws/config/configrule.json create mode 100644 internal/aws/cfn/schemas/aws/config/configurationaggregator.json create mode 100644 internal/aws/cfn/schemas/aws/config/configurationrecorder.json create mode 100644 internal/aws/cfn/schemas/aws/config/conformancepack.json create mode 100644 internal/aws/cfn/schemas/aws/config/deliverychannel.json create mode 100644 internal/aws/cfn/schemas/aws/config/organizationconfigrule.json create mode 100644 internal/aws/cfn/schemas/aws/config/organizationconformancepack.json create mode 100644 internal/aws/cfn/schemas/aws/config/remediationconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/config/storedquery.json create mode 100644 internal/aws/cfn/schemas/aws/connect/approvedorigin.json create mode 100644 internal/aws/cfn/schemas/aws/connect/contactflow.json create mode 100644 internal/aws/cfn/schemas/aws/connect/contactflowmodule.json create mode 100644 internal/aws/cfn/schemas/aws/connect/evaluationform.json create mode 100644 internal/aws/cfn/schemas/aws/connect/hoursofoperation.json create mode 100644 internal/aws/cfn/schemas/aws/connect/instance.json create mode 100644 internal/aws/cfn/schemas/aws/connect/instancestorageconfig.json create mode 100644 internal/aws/cfn/schemas/aws/connect/integrationassociation.json create mode 100644 internal/aws/cfn/schemas/aws/connect/phonenumber.json create mode 100644 internal/aws/cfn/schemas/aws/connect/prompt.json create mode 100644 internal/aws/cfn/schemas/aws/connect/queue.json create mode 100644 internal/aws/cfn/schemas/aws/connect/quickconnect.json create mode 100644 internal/aws/cfn/schemas/aws/connect/routingprofile.json create mode 100644 internal/aws/cfn/schemas/aws/connect/rule.json create mode 100644 internal/aws/cfn/schemas/aws/connect/securitykey.json create mode 100644 internal/aws/cfn/schemas/aws/connect/tasktemplate.json create mode 100644 internal/aws/cfn/schemas/aws/connect/trafficdistributiongroup.json create mode 100644 internal/aws/cfn/schemas/aws/connect/user.json create mode 100644 internal/aws/cfn/schemas/aws/connect/userhierarchygroup.json create mode 100644 internal/aws/cfn/schemas/aws/connect/view.json create mode 100644 internal/aws/cfn/schemas/aws/connect/viewversion.json create mode 100644 internal/aws/cfn/schemas/aws/connectcampaigns/campaign.json create mode 100644 internal/aws/cfn/schemas/aws/controltower/enabledcontrol.json create mode 100644 internal/aws/cfn/schemas/aws/cur/reportdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/customerprofiles/calculatedattributedefinition.json create mode 100644 internal/aws/cfn/schemas/aws/customerprofiles/domain.json create mode 100644 internal/aws/cfn/schemas/aws/customerprofiles/eventstream.json create mode 100644 internal/aws/cfn/schemas/aws/customerprofiles/integration.json create mode 100644 internal/aws/cfn/schemas/aws/customerprofiles/objecttype.json create mode 100644 internal/aws/cfn/schemas/aws/databrew/dataset.json create mode 100644 internal/aws/cfn/schemas/aws/databrew/job.json create mode 100644 internal/aws/cfn/schemas/aws/databrew/project.json create mode 100644 internal/aws/cfn/schemas/aws/databrew/recipe.json create mode 100644 internal/aws/cfn/schemas/aws/databrew/ruleset.json create mode 100644 internal/aws/cfn/schemas/aws/databrew/schedule.json create mode 100644 internal/aws/cfn/schemas/aws/datapipeline/pipeline.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/agent.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationazureblob.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationefs.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationfsxlustre.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationfsxontap.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationfsxopenzfs.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationfsxwindows.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationhdfs.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationnfs.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationobjectstorage.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locations3.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/locationsmb.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/storagesystem.json create mode 100644 internal/aws/cfn/schemas/aws/datasync/task.json create mode 100644 internal/aws/cfn/schemas/aws/dax/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/dax/parametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/dax/subnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/detective/graph.json create mode 100644 internal/aws/cfn/schemas/aws/detective/memberinvitation.json create mode 100644 internal/aws/cfn/schemas/aws/detective/organizationadmin.json create mode 100644 internal/aws/cfn/schemas/aws/devopsguru/loganomalydetectionintegration.json create mode 100644 internal/aws/cfn/schemas/aws/devopsguru/notificationchannel.json create mode 100644 internal/aws/cfn/schemas/aws/devopsguru/resourcecollection.json create mode 100644 internal/aws/cfn/schemas/aws/directoryservice/microsoftad.json create mode 100644 internal/aws/cfn/schemas/aws/directoryservice/simplead.json create mode 100644 internal/aws/cfn/schemas/aws/dlm/lifecyclepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/dms/certificate.json create mode 100644 internal/aws/cfn/schemas/aws/dms/endpoint.json create mode 100644 internal/aws/cfn/schemas/aws/dms/eventsubscription.json create mode 100644 internal/aws/cfn/schemas/aws/dms/replicationconfig.json create mode 100644 internal/aws/cfn/schemas/aws/dms/replicationinstance.json create mode 100644 internal/aws/cfn/schemas/aws/dms/replicationsubnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/dms/replicationtask.json create mode 100644 internal/aws/cfn/schemas/aws/docdb/dbcluster.json create mode 100644 internal/aws/cfn/schemas/aws/docdb/dbclusterparametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/docdb/dbinstance.json create mode 100644 internal/aws/cfn/schemas/aws/docdb/dbsubnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/docdbelastic/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/dynamodb/globaltable.json create mode 100644 internal/aws/cfn/schemas/aws/dynamodb/table.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/capacityreservation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/capacityreservationfleet.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/carriergateway.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/clientvpnauthorizationrule.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/clientvpnendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/clientvpnroute.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/clientvpntargetnetworkassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/customergateway.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/dhcpoptions.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ec2fleet.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/egressonlyinternetgateway.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/eip.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/eipassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/enclavecertificateiamroleassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/flowlog.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/gatewayroutetableassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/host.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/instance.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/instanceconnectendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/internetgateway.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ipam.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ipamallocation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ipampool.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ipampoolcidr.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ipamresourcediscovery.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ipamresourcediscoveryassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/ipamscope.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/keypair.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/launchtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/localgatewayroute.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/localgatewayroutetable.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevirtualinterfacegroupassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevpcassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/natgateway.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkacl.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkaclentry.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscope.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscopeanalysis.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkinsightsanalysis.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkinsightspath.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkinterface.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkinterfaceattachment.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkinterfacepermission.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/networkperformancemetricsubscription.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/placementgroup.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/prefixlist.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/route.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/routetable.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/securitygroup.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/securitygroupegress.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/securitygroupingress.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/spotfleet.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/subnet.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/subnetcidrblock.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/subnetnetworkaclassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/subnetroutetableassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilter.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilterrule.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/trafficmirrorsession.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/trafficmirrortarget.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgateway.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewayattachment.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewayconnect.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomain.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomainassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupmember.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupsource.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewaypeeringattachment.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewayroute.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetable.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetableassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetablepropagation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/transitgatewayvpcattachment.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/verifiedaccessendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/verifiedaccessgroup.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/verifiedaccessinstance.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/verifiedaccesstrustprovider.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/volume.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/volumeattachment.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpc.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpccidrblock.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpcdhcpoptionsassociation.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpcendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpcendpointconnectionnotification.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpcendpointservice.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpcendpointservicepermissions.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpcgatewayattachment.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpcpeeringconnection.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpnconnection.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpnconnectionroute.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpngateway.json create mode 100644 internal/aws/cfn/schemas/aws/ec2/vpngatewayroutepropagation.json create mode 100644 internal/aws/cfn/schemas/aws/ecr/publicrepository.json create mode 100644 internal/aws/cfn/schemas/aws/ecr/pullthroughcacherule.json create mode 100644 internal/aws/cfn/schemas/aws/ecr/registrypolicy.json create mode 100644 internal/aws/cfn/schemas/aws/ecr/replicationconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/ecr/repository.json create mode 100644 internal/aws/cfn/schemas/aws/ecs/capacityprovider.json create mode 100644 internal/aws/cfn/schemas/aws/ecs/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/ecs/clustercapacityproviderassociations.json create mode 100644 internal/aws/cfn/schemas/aws/ecs/primarytaskset.json create mode 100644 internal/aws/cfn/schemas/aws/ecs/service.json create mode 100644 internal/aws/cfn/schemas/aws/ecs/taskdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/ecs/taskset.json create mode 100644 internal/aws/cfn/schemas/aws/efs/accesspoint.json create mode 100644 internal/aws/cfn/schemas/aws/efs/filesystem.json create mode 100644 internal/aws/cfn/schemas/aws/efs/mounttarget.json create mode 100644 internal/aws/cfn/schemas/aws/eks/addon.json create mode 100644 internal/aws/cfn/schemas/aws/eks/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/eks/fargateprofile.json create mode 100644 internal/aws/cfn/schemas/aws/eks/identityproviderconfig.json create mode 100644 internal/aws/cfn/schemas/aws/eks/nodegroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/cachecluster.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/globalreplicationgroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/parametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/replicationgroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/securitygroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/securitygroupingress.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/subnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/user.json create mode 100644 internal/aws/cfn/schemas/aws/elasticache/usergroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticbeanstalk/application.json create mode 100644 internal/aws/cfn/schemas/aws/elasticbeanstalk/applicationversion.json create mode 100644 internal/aws/cfn/schemas/aws/elasticbeanstalk/configurationtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/elasticbeanstalk/environment.json create mode 100644 internal/aws/cfn/schemas/aws/elasticloadbalancing/loadbalancer.json create mode 100644 internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listener.json create mode 100644 internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenercertificate.json create mode 100644 internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenerrule.json create mode 100644 internal/aws/cfn/schemas/aws/elasticloadbalancingv2/loadbalancer.json create mode 100644 internal/aws/cfn/schemas/aws/elasticloadbalancingv2/targetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/elasticsearch/domain.json create mode 100644 internal/aws/cfn/schemas/aws/emr/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/emr/instancefleetconfig.json create mode 100644 internal/aws/cfn/schemas/aws/emr/instancegroupconfig.json create mode 100644 internal/aws/cfn/schemas/aws/emr/securityconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/emr/step.json create mode 100644 internal/aws/cfn/schemas/aws/emr/studio.json create mode 100644 internal/aws/cfn/schemas/aws/emr/studiosessionmapping.json create mode 100644 internal/aws/cfn/schemas/aws/emr/walworkspace.json create mode 100644 internal/aws/cfn/schemas/aws/emrcontainers/virtualcluster.json create mode 100644 internal/aws/cfn/schemas/aws/emrserverless/application.json create mode 100644 internal/aws/cfn/schemas/aws/entityresolution/matchingworkflow.json create mode 100644 internal/aws/cfn/schemas/aws/entityresolution/schemamapping.json create mode 100644 internal/aws/cfn/schemas/aws/events/apidestination.json create mode 100644 internal/aws/cfn/schemas/aws/events/archive.json create mode 100644 internal/aws/cfn/schemas/aws/events/connection.json create mode 100644 internal/aws/cfn/schemas/aws/events/endpoint.json create mode 100644 internal/aws/cfn/schemas/aws/events/eventbus.json create mode 100644 internal/aws/cfn/schemas/aws/events/eventbuspolicy.json create mode 100644 internal/aws/cfn/schemas/aws/events/rule.json create mode 100644 internal/aws/cfn/schemas/aws/eventschemas/discoverer.json create mode 100644 internal/aws/cfn/schemas/aws/eventschemas/registry.json create mode 100644 internal/aws/cfn/schemas/aws/eventschemas/registrypolicy.json create mode 100644 internal/aws/cfn/schemas/aws/eventschemas/schema.json create mode 100644 internal/aws/cfn/schemas/aws/evidently/experiment.json create mode 100644 internal/aws/cfn/schemas/aws/evidently/feature.json create mode 100644 internal/aws/cfn/schemas/aws/evidently/launch.json create mode 100644 internal/aws/cfn/schemas/aws/evidently/project.json create mode 100644 internal/aws/cfn/schemas/aws/evidently/segment.json create mode 100644 internal/aws/cfn/schemas/aws/finspace/environment.json create mode 100644 internal/aws/cfn/schemas/aws/fis/experimenttemplate.json create mode 100644 internal/aws/cfn/schemas/aws/fms/notificationchannel.json create mode 100644 internal/aws/cfn/schemas/aws/fms/policy.json create mode 100644 internal/aws/cfn/schemas/aws/fms/resourceset.json create mode 100644 internal/aws/cfn/schemas/aws/forecast/dataset.json create mode 100644 internal/aws/cfn/schemas/aws/forecast/datasetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/frauddetector/detector.json create mode 100644 internal/aws/cfn/schemas/aws/frauddetector/entitytype.json create mode 100644 internal/aws/cfn/schemas/aws/frauddetector/eventtype.json create mode 100644 internal/aws/cfn/schemas/aws/frauddetector/label.json create mode 100644 internal/aws/cfn/schemas/aws/frauddetector/list.json create mode 100644 internal/aws/cfn/schemas/aws/frauddetector/outcome.json create mode 100644 internal/aws/cfn/schemas/aws/frauddetector/variable.json create mode 100644 internal/aws/cfn/schemas/aws/fsx/datarepositoryassociation.json create mode 100644 internal/aws/cfn/schemas/aws/fsx/filesystem.json create mode 100644 internal/aws/cfn/schemas/aws/fsx/snapshot.json create mode 100644 internal/aws/cfn/schemas/aws/fsx/storagevirtualmachine.json create mode 100644 internal/aws/cfn/schemas/aws/fsx/volume.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/alias.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/build.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/fleet.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/gameservergroup.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/gamesessionqueue.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/location.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/matchmakingconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/matchmakingruleset.json create mode 100644 internal/aws/cfn/schemas/aws/gamelift/script.json create mode 100644 internal/aws/cfn/schemas/aws/globalaccelerator/accelerator.json create mode 100644 internal/aws/cfn/schemas/aws/globalaccelerator/endpointgroup.json create mode 100644 internal/aws/cfn/schemas/aws/globalaccelerator/listener.json create mode 100644 internal/aws/cfn/schemas/aws/glue/classifier.json create mode 100644 internal/aws/cfn/schemas/aws/glue/connection.json create mode 100644 internal/aws/cfn/schemas/aws/glue/crawler.json create mode 100644 internal/aws/cfn/schemas/aws/glue/database.json create mode 100644 internal/aws/cfn/schemas/aws/glue/datacatalogencryptionsettings.json create mode 100644 internal/aws/cfn/schemas/aws/glue/dataqualityruleset.json create mode 100644 internal/aws/cfn/schemas/aws/glue/devendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/glue/job.json create mode 100644 internal/aws/cfn/schemas/aws/glue/mltransform.json create mode 100644 internal/aws/cfn/schemas/aws/glue/partition.json create mode 100644 internal/aws/cfn/schemas/aws/glue/registry.json create mode 100644 internal/aws/cfn/schemas/aws/glue/schema.json create mode 100644 internal/aws/cfn/schemas/aws/glue/schemaversion.json create mode 100644 internal/aws/cfn/schemas/aws/glue/schemaversionmetadata.json create mode 100644 internal/aws/cfn/schemas/aws/glue/securityconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/glue/table.json create mode 100644 internal/aws/cfn/schemas/aws/glue/trigger.json create mode 100644 internal/aws/cfn/schemas/aws/glue/workflow.json create mode 100644 internal/aws/cfn/schemas/aws/grafana/workspace.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/connectordefinition.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/connectordefinitionversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/coredefinition.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/coredefinitionversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/devicedefinition.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/devicedefinitionversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/functiondefinition.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/functiondefinitionversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/group.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/groupversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/loggerdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/loggerdefinitionversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/resourcedefinition.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/resourcedefinitionversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinition.json create mode 100644 internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinitionversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrassv2/componentversion.json create mode 100644 internal/aws/cfn/schemas/aws/greengrassv2/deployment.json create mode 100644 internal/aws/cfn/schemas/aws/groundstation/config.json create mode 100644 internal/aws/cfn/schemas/aws/groundstation/dataflowendpointgroup.json create mode 100644 internal/aws/cfn/schemas/aws/groundstation/missionprofile.json create mode 100644 internal/aws/cfn/schemas/aws/guardduty/detector.json create mode 100644 internal/aws/cfn/schemas/aws/guardduty/filter.json create mode 100644 internal/aws/cfn/schemas/aws/guardduty/ipset.json create mode 100644 internal/aws/cfn/schemas/aws/guardduty/master.json create mode 100644 internal/aws/cfn/schemas/aws/guardduty/member.json create mode 100644 internal/aws/cfn/schemas/aws/guardduty/threatintelset.json create mode 100644 internal/aws/cfn/schemas/aws/healthlake/fhirdatastore.json create mode 100644 internal/aws/cfn/schemas/aws/iam/accesskey.json create mode 100644 internal/aws/cfn/schemas/aws/iam/group.json create mode 100644 internal/aws/cfn/schemas/aws/iam/grouppolicy.json create mode 100644 internal/aws/cfn/schemas/aws/iam/instanceprofile.json create mode 100644 internal/aws/cfn/schemas/aws/iam/managedpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/iam/oidcprovider.json create mode 100644 internal/aws/cfn/schemas/aws/iam/policy.json create mode 100644 internal/aws/cfn/schemas/aws/iam/role.json create mode 100644 internal/aws/cfn/schemas/aws/iam/rolepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/iam/samlprovider.json create mode 100644 internal/aws/cfn/schemas/aws/iam/servercertificate.json create mode 100644 internal/aws/cfn/schemas/aws/iam/servicelinkedrole.json create mode 100644 internal/aws/cfn/schemas/aws/iam/user.json create mode 100644 internal/aws/cfn/schemas/aws/iam/userpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/iam/usertogroupaddition.json create mode 100644 internal/aws/cfn/schemas/aws/iam/virtualmfadevice.json create mode 100644 internal/aws/cfn/schemas/aws/identitystore/group.json create mode 100644 internal/aws/cfn/schemas/aws/identitystore/groupmembership.json create mode 100644 internal/aws/cfn/schemas/aws/imagebuilder/component.json create mode 100644 internal/aws/cfn/schemas/aws/imagebuilder/containerrecipe.json create mode 100644 internal/aws/cfn/schemas/aws/imagebuilder/distributionconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/imagebuilder/image.json create mode 100644 internal/aws/cfn/schemas/aws/imagebuilder/imagepipeline.json create mode 100644 internal/aws/cfn/schemas/aws/imagebuilder/imagerecipe.json create mode 100644 internal/aws/cfn/schemas/aws/imagebuilder/infrastructureconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/inspector/assessmenttarget.json create mode 100644 internal/aws/cfn/schemas/aws/inspector/assessmenttemplate.json create mode 100644 internal/aws/cfn/schemas/aws/inspector/resourcegroup.json create mode 100644 internal/aws/cfn/schemas/aws/inspectorv2/filter.json create mode 100644 internal/aws/cfn/schemas/aws/internetmonitor/monitor.json create mode 100644 internal/aws/cfn/schemas/aws/iot/accountauditconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/iot/authorizer.json create mode 100644 internal/aws/cfn/schemas/aws/iot/billinggroup.json create mode 100644 internal/aws/cfn/schemas/aws/iot/cacertificate.json create mode 100644 internal/aws/cfn/schemas/aws/iot/certificate.json create mode 100644 internal/aws/cfn/schemas/aws/iot/custommetric.json create mode 100644 internal/aws/cfn/schemas/aws/iot/dimension.json create mode 100644 internal/aws/cfn/schemas/aws/iot/domainconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/iot/fleetmetric.json create mode 100644 internal/aws/cfn/schemas/aws/iot/jobtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/iot/logging.json create mode 100644 internal/aws/cfn/schemas/aws/iot/mitigationaction.json create mode 100644 internal/aws/cfn/schemas/aws/iot/policy.json create mode 100644 internal/aws/cfn/schemas/aws/iot/policyprincipalattachment.json create mode 100644 internal/aws/cfn/schemas/aws/iot/provisioningtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/iot/resourcespecificlogging.json create mode 100644 internal/aws/cfn/schemas/aws/iot/rolealias.json create mode 100644 internal/aws/cfn/schemas/aws/iot/scheduledaudit.json create mode 100644 internal/aws/cfn/schemas/aws/iot/securityprofile.json create mode 100644 internal/aws/cfn/schemas/aws/iot/thing.json create mode 100644 internal/aws/cfn/schemas/aws/iot/thinggroup.json create mode 100644 internal/aws/cfn/schemas/aws/iot/thingprincipalattachment.json create mode 100644 internal/aws/cfn/schemas/aws/iot/thingtype.json create mode 100644 internal/aws/cfn/schemas/aws/iot/topicrule.json create mode 100644 internal/aws/cfn/schemas/aws/iot/topicruledestination.json create mode 100644 internal/aws/cfn/schemas/aws/iot1click/device.json create mode 100644 internal/aws/cfn/schemas/aws/iot1click/placement.json create mode 100644 internal/aws/cfn/schemas/aws/iot1click/project.json create mode 100644 internal/aws/cfn/schemas/aws/iotanalytics/channel.json create mode 100644 internal/aws/cfn/schemas/aws/iotanalytics/dataset.json create mode 100644 internal/aws/cfn/schemas/aws/iotanalytics/datastore.json create mode 100644 internal/aws/cfn/schemas/aws/iotanalytics/pipeline.json create mode 100644 internal/aws/cfn/schemas/aws/iotcoredeviceadvisor/suitedefinition.json create mode 100644 internal/aws/cfn/schemas/aws/iotevents/alarmmodel.json create mode 100644 internal/aws/cfn/schemas/aws/iotevents/detectormodel.json create mode 100644 internal/aws/cfn/schemas/aws/iotevents/input.json create mode 100644 internal/aws/cfn/schemas/aws/iotfleethub/application.json create mode 100644 internal/aws/cfn/schemas/aws/iotfleetwise/campaign.json create mode 100644 internal/aws/cfn/schemas/aws/iotfleetwise/decodermanifest.json create mode 100644 internal/aws/cfn/schemas/aws/iotfleetwise/fleet.json create mode 100644 internal/aws/cfn/schemas/aws/iotfleetwise/modelmanifest.json create mode 100644 internal/aws/cfn/schemas/aws/iotfleetwise/signalcatalog.json create mode 100644 internal/aws/cfn/schemas/aws/iotfleetwise/vehicle.json create mode 100644 internal/aws/cfn/schemas/aws/iotsitewise/accesspolicy.json create mode 100644 internal/aws/cfn/schemas/aws/iotsitewise/asset.json create mode 100644 internal/aws/cfn/schemas/aws/iotsitewise/assetmodel.json create mode 100644 internal/aws/cfn/schemas/aws/iotsitewise/dashboard.json create mode 100644 internal/aws/cfn/schemas/aws/iotsitewise/gateway.json create mode 100644 internal/aws/cfn/schemas/aws/iotsitewise/portal.json create mode 100644 internal/aws/cfn/schemas/aws/iotsitewise/project.json create mode 100644 internal/aws/cfn/schemas/aws/iotthingsgraph/flowtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/iottwinmaker/componenttype.json create mode 100644 internal/aws/cfn/schemas/aws/iottwinmaker/entity.json create mode 100644 internal/aws/cfn/schemas/aws/iottwinmaker/scene.json create mode 100644 internal/aws/cfn/schemas/aws/iottwinmaker/syncjob.json create mode 100644 internal/aws/cfn/schemas/aws/iottwinmaker/workspace.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/destination.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/deviceprofile.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/fuotatask.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/multicastgroup.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/networkanalyzerconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/partneraccount.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/serviceprofile.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/taskdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/wirelessdevice.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/wirelessdeviceimporttask.json create mode 100644 internal/aws/cfn/schemas/aws/iotwireless/wirelessgateway.json create mode 100644 internal/aws/cfn/schemas/aws/ivs/channel.json create mode 100644 internal/aws/cfn/schemas/aws/ivs/playbackkeypair.json create mode 100644 internal/aws/cfn/schemas/aws/ivs/recordingconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/ivs/streamkey.json create mode 100644 internal/aws/cfn/schemas/aws/ivschat/loggingconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/ivschat/room.json create mode 100644 internal/aws/cfn/schemas/aws/kafkaconnect/connector.json create mode 100644 internal/aws/cfn/schemas/aws/kendra/datasource.json create mode 100644 internal/aws/cfn/schemas/aws/kendra/faq.json create mode 100644 internal/aws/cfn/schemas/aws/kendra/index.json create mode 100644 internal/aws/cfn/schemas/aws/kendraranking/executionplan.json create mode 100644 internal/aws/cfn/schemas/aws/kinesis/stream.json create mode 100644 internal/aws/cfn/schemas/aws/kinesis/streamconsumer.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisanalytics/application.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisanalytics/applicationoutput.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisanalytics/applicationreferencedatasource.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisanalyticsv2/application.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationcloudwatchloggingoption.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationoutput.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationreferencedatasource.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisfirehose/deliverystream.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisvideo/signalingchannel.json create mode 100644 internal/aws/cfn/schemas/aws/kinesisvideo/stream.json create mode 100644 internal/aws/cfn/schemas/aws/kms/alias.json create mode 100644 internal/aws/cfn/schemas/aws/kms/key.json create mode 100644 internal/aws/cfn/schemas/aws/kms/replicakey.json create mode 100644 internal/aws/cfn/schemas/aws/lakeformation/datacellsfilter.json create mode 100644 internal/aws/cfn/schemas/aws/lakeformation/datalakesettings.json create mode 100644 internal/aws/cfn/schemas/aws/lakeformation/permissions.json create mode 100644 internal/aws/cfn/schemas/aws/lakeformation/principalpermissions.json create mode 100644 internal/aws/cfn/schemas/aws/lakeformation/resource.json create mode 100644 internal/aws/cfn/schemas/aws/lakeformation/tag.json create mode 100644 internal/aws/cfn/schemas/aws/lakeformation/tagassociation.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/alias.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/codesigningconfig.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/eventinvokeconfig.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/eventsourcemapping.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/function.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/layerversion.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/layerversionpermission.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/permission.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/url.json create mode 100644 internal/aws/cfn/schemas/aws/lambda/version.json create mode 100644 internal/aws/cfn/schemas/aws/lex/bot.json create mode 100644 internal/aws/cfn/schemas/aws/lex/botalias.json create mode 100644 internal/aws/cfn/schemas/aws/lex/botversion.json create mode 100644 internal/aws/cfn/schemas/aws/lex/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/licensemanager/grant.json create mode 100644 internal/aws/cfn/schemas/aws/licensemanager/license.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/alarm.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/bucket.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/certificate.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/container.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/database.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/disk.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/distribution.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/instance.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/loadbalancer.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/loadbalancertlscertificate.json create mode 100644 internal/aws/cfn/schemas/aws/lightsail/staticip.json create mode 100644 internal/aws/cfn/schemas/aws/location/geofencecollection.json create mode 100644 internal/aws/cfn/schemas/aws/location/map.json create mode 100644 internal/aws/cfn/schemas/aws/location/placeindex.json create mode 100644 internal/aws/cfn/schemas/aws/location/routecalculator.json create mode 100644 internal/aws/cfn/schemas/aws/location/tracker.json create mode 100644 internal/aws/cfn/schemas/aws/location/trackerconsumer.json create mode 100644 internal/aws/cfn/schemas/aws/logs/accountpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/logs/destination.json create mode 100644 internal/aws/cfn/schemas/aws/logs/loggroup.json create mode 100644 internal/aws/cfn/schemas/aws/logs/logstream.json create mode 100644 internal/aws/cfn/schemas/aws/logs/metricfilter.json create mode 100644 internal/aws/cfn/schemas/aws/logs/querydefinition.json create mode 100644 internal/aws/cfn/schemas/aws/logs/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/logs/subscriptionfilter.json create mode 100644 internal/aws/cfn/schemas/aws/lookoutequipment/inferencescheduler.json create mode 100644 internal/aws/cfn/schemas/aws/lookoutmetrics/alert.json create mode 100644 internal/aws/cfn/schemas/aws/lookoutmetrics/anomalydetector.json create mode 100644 internal/aws/cfn/schemas/aws/lookoutvision/project.json create mode 100644 internal/aws/cfn/schemas/aws/m2/application.json create mode 100644 internal/aws/cfn/schemas/aws/m2/environment.json create mode 100644 internal/aws/cfn/schemas/aws/macie/allowlist.json create mode 100644 internal/aws/cfn/schemas/aws/macie/customdataidentifier.json create mode 100644 internal/aws/cfn/schemas/aws/macie/findingsfilter.json create mode 100644 internal/aws/cfn/schemas/aws/macie/session.json create mode 100644 internal/aws/cfn/schemas/aws/managedblockchain/accessor.json create mode 100644 internal/aws/cfn/schemas/aws/managedblockchain/member.json create mode 100644 internal/aws/cfn/schemas/aws/managedblockchain/node.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/bridge.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/bridgeoutput.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/bridgesource.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/flow.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/flowentitlement.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/flowoutput.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/flowsource.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/flowvpcinterface.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconnect/gateway.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconvert/jobtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconvert/preset.json create mode 100644 internal/aws/cfn/schemas/aws/mediaconvert/queue.json create mode 100644 internal/aws/cfn/schemas/aws/medialive/channel.json create mode 100644 internal/aws/cfn/schemas/aws/medialive/input.json create mode 100644 internal/aws/cfn/schemas/aws/medialive/inputsecuritygroup.json create mode 100644 internal/aws/cfn/schemas/aws/mediapackage/asset.json create mode 100644 internal/aws/cfn/schemas/aws/mediapackage/channel.json create mode 100644 internal/aws/cfn/schemas/aws/mediapackage/originendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/mediapackage/packagingconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/mediapackage/packaginggroup.json create mode 100644 internal/aws/cfn/schemas/aws/mediastore/container.json create mode 100644 internal/aws/cfn/schemas/aws/mediatailor/channel.json create mode 100644 internal/aws/cfn/schemas/aws/mediatailor/channelpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/mediatailor/livesource.json create mode 100644 internal/aws/cfn/schemas/aws/mediatailor/playbackconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/mediatailor/sourcelocation.json create mode 100644 internal/aws/cfn/schemas/aws/mediatailor/vodsource.json create mode 100644 internal/aws/cfn/schemas/aws/memorydb/acl.json create mode 100644 internal/aws/cfn/schemas/aws/memorydb/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/memorydb/parametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/memorydb/subnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/memorydb/user.json create mode 100644 internal/aws/cfn/schemas/aws/msk/batchscramsecret.json create mode 100644 internal/aws/cfn/schemas/aws/msk/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/msk/clusterpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/msk/configuration.json create mode 100644 internal/aws/cfn/schemas/aws/msk/serverlesscluster.json create mode 100644 internal/aws/cfn/schemas/aws/msk/vpcconnection.json create mode 100644 internal/aws/cfn/schemas/aws/mwaa/environment.json create mode 100644 internal/aws/cfn/schemas/aws/neptune/dbcluster.json create mode 100644 internal/aws/cfn/schemas/aws/neptune/dbclusterparametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/neptune/dbinstance.json create mode 100644 internal/aws/cfn/schemas/aws/neptune/dbparametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/neptune/dbsubnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/networkfirewall/firewall.json create mode 100644 internal/aws/cfn/schemas/aws/networkfirewall/firewallpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/networkfirewall/loggingconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/networkfirewall/rulegroup.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/connectattachment.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/connectpeer.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/corenetwork.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/customergatewayassociation.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/device.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/globalnetwork.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/link.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/linkassociation.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/site.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/sitetositevpnattachment.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/transitgatewaypeering.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/transitgatewayregistration.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/transitgatewayroutetableattachment.json create mode 100644 internal/aws/cfn/schemas/aws/networkmanager/vpcattachment.json create mode 100644 internal/aws/cfn/schemas/aws/nimblestudio/launchprofile.json create mode 100644 internal/aws/cfn/schemas/aws/nimblestudio/streamingimage.json create mode 100644 internal/aws/cfn/schemas/aws/nimblestudio/studio.json create mode 100644 internal/aws/cfn/schemas/aws/nimblestudio/studiocomponent.json create mode 100644 internal/aws/cfn/schemas/aws/oam/link.json create mode 100644 internal/aws/cfn/schemas/aws/oam/sink.json create mode 100644 internal/aws/cfn/schemas/aws/omics/annotationstore.json create mode 100644 internal/aws/cfn/schemas/aws/omics/referencestore.json create mode 100644 internal/aws/cfn/schemas/aws/omics/rungroup.json create mode 100644 internal/aws/cfn/schemas/aws/omics/sequencestore.json create mode 100644 internal/aws/cfn/schemas/aws/omics/variantstore.json create mode 100644 internal/aws/cfn/schemas/aws/omics/workflow.json create mode 100644 internal/aws/cfn/schemas/aws/opensearchserverless/accesspolicy.json create mode 100644 internal/aws/cfn/schemas/aws/opensearchserverless/collection.json create mode 100644 internal/aws/cfn/schemas/aws/opensearchserverless/securityconfig.json create mode 100644 internal/aws/cfn/schemas/aws/opensearchserverless/securitypolicy.json create mode 100644 internal/aws/cfn/schemas/aws/opensearchserverless/vpcendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/opensearchservice/domain.json create mode 100644 internal/aws/cfn/schemas/aws/opsworks/app.json create mode 100644 internal/aws/cfn/schemas/aws/opsworks/elasticloadbalancerattachment.json create mode 100644 internal/aws/cfn/schemas/aws/opsworks/instance.json create mode 100644 internal/aws/cfn/schemas/aws/opsworks/layer.json create mode 100644 internal/aws/cfn/schemas/aws/opsworks/stack.json create mode 100644 internal/aws/cfn/schemas/aws/opsworks/userprofile.json create mode 100644 internal/aws/cfn/schemas/aws/opsworks/volume.json create mode 100644 internal/aws/cfn/schemas/aws/opsworkscm/server.json create mode 100644 internal/aws/cfn/schemas/aws/organizations/account.json create mode 100644 internal/aws/cfn/schemas/aws/organizations/organization.json create mode 100644 internal/aws/cfn/schemas/aws/organizations/organizationalunit.json create mode 100644 internal/aws/cfn/schemas/aws/organizations/policy.json create mode 100644 internal/aws/cfn/schemas/aws/organizations/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/osis/pipeline.json create mode 100644 internal/aws/cfn/schemas/aws/panorama/applicationinstance.json create mode 100644 internal/aws/cfn/schemas/aws/panorama/package.json create mode 100644 internal/aws/cfn/schemas/aws/panorama/packageversion.json create mode 100644 internal/aws/cfn/schemas/aws/pcaconnectorad/connector.json create mode 100644 internal/aws/cfn/schemas/aws/pcaconnectorad/directoryregistration.json create mode 100644 internal/aws/cfn/schemas/aws/pcaconnectorad/serviceprincipalname.json create mode 100644 internal/aws/cfn/schemas/aws/pcaconnectorad/template.json create mode 100644 internal/aws/cfn/schemas/aws/pcaconnectorad/templategroupaccesscontrolentry.json create mode 100644 internal/aws/cfn/schemas/aws/personalize/dataset.json create mode 100644 internal/aws/cfn/schemas/aws/personalize/datasetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/personalize/schema.json create mode 100644 internal/aws/cfn/schemas/aws/personalize/solution.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/admchannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/apnschannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/apnssandboxchannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/apnsvoipchannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/apnsvoipsandboxchannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/app.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/applicationsettings.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/baiduchannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/campaign.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/emailchannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/emailtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/eventstream.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/gcmchannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/inapptemplate.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/pushtemplate.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/segment.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/smschannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/smstemplate.json create mode 100644 internal/aws/cfn/schemas/aws/pinpoint/voicechannel.json create mode 100644 internal/aws/cfn/schemas/aws/pinpointemail/configurationset.json create mode 100644 internal/aws/cfn/schemas/aws/pinpointemail/configurationseteventdestination.json create mode 100644 internal/aws/cfn/schemas/aws/pinpointemail/dedicatedippool.json create mode 100644 internal/aws/cfn/schemas/aws/pinpointemail/identity.json create mode 100644 internal/aws/cfn/schemas/aws/pipes/pipe.json create mode 100644 internal/aws/cfn/schemas/aws/proton/environmentaccountconnection.json create mode 100644 internal/aws/cfn/schemas/aws/proton/environmenttemplate.json create mode 100644 internal/aws/cfn/schemas/aws/proton/servicetemplate.json create mode 100644 internal/aws/cfn/schemas/aws/qldb/ledger.json create mode 100644 internal/aws/cfn/schemas/aws/qldb/stream.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/analysis.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/dashboard.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/dataset.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/datasource.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/refreshschedule.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/template.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/theme.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/topic.json create mode 100644 internal/aws/cfn/schemas/aws/quicksight/vpcconnection.json create mode 100644 internal/aws/cfn/schemas/aws/ram/permission.json create mode 100644 internal/aws/cfn/schemas/aws/ram/resourceshare.json create mode 100644 internal/aws/cfn/schemas/aws/rds/customdbengineversion.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbcluster.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbclusterparametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbinstance.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbparametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbproxy.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbproxyendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbproxytargetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbsecuritygroup.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbsecuritygroupingress.json create mode 100644 internal/aws/cfn/schemas/aws/rds/dbsubnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/rds/eventsubscription.json create mode 100644 internal/aws/cfn/schemas/aws/rds/globalcluster.json create mode 100644 internal/aws/cfn/schemas/aws/rds/optiongroup.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/clusterparametergroup.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/clustersecuritygroup.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/clustersecuritygroupingress.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/clustersubnetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/endpointaccess.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/endpointauthorization.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/eventsubscription.json create mode 100644 internal/aws/cfn/schemas/aws/redshift/scheduledaction.json create mode 100644 internal/aws/cfn/schemas/aws/redshiftserverless/namespace.json create mode 100644 internal/aws/cfn/schemas/aws/redshiftserverless/workgroup.json create mode 100644 internal/aws/cfn/schemas/aws/refactorspaces/application.json create mode 100644 internal/aws/cfn/schemas/aws/refactorspaces/environment.json create mode 100644 internal/aws/cfn/schemas/aws/refactorspaces/route.json create mode 100644 internal/aws/cfn/schemas/aws/refactorspaces/service.json create mode 100644 internal/aws/cfn/schemas/aws/rekognition/collection.json create mode 100644 internal/aws/cfn/schemas/aws/rekognition/project.json create mode 100644 internal/aws/cfn/schemas/aws/rekognition/streamprocessor.json create mode 100644 internal/aws/cfn/schemas/aws/resiliencehub/app.json create mode 100644 internal/aws/cfn/schemas/aws/resiliencehub/resiliencypolicy.json create mode 100644 internal/aws/cfn/schemas/aws/resourceexplorer2/defaultviewassociation.json create mode 100644 internal/aws/cfn/schemas/aws/resourceexplorer2/index.json create mode 100644 internal/aws/cfn/schemas/aws/resourceexplorer2/view.json create mode 100644 internal/aws/cfn/schemas/aws/resourcegroups/group.json create mode 100644 internal/aws/cfn/schemas/aws/robomaker/fleet.json create mode 100644 internal/aws/cfn/schemas/aws/robomaker/robot.json create mode 100644 internal/aws/cfn/schemas/aws/robomaker/robotapplication.json create mode 100644 internal/aws/cfn/schemas/aws/robomaker/robotapplicationversion.json create mode 100644 internal/aws/cfn/schemas/aws/robomaker/simulationapplication.json create mode 100644 internal/aws/cfn/schemas/aws/robomaker/simulationapplicationversion.json create mode 100644 internal/aws/cfn/schemas/aws/rolesanywhere/crl.json create mode 100644 internal/aws/cfn/schemas/aws/rolesanywhere/profile.json create mode 100644 internal/aws/cfn/schemas/aws/rolesanywhere/trustanchor.json create mode 100644 internal/aws/cfn/schemas/aws/route53/cidrcollection.json create mode 100644 internal/aws/cfn/schemas/aws/route53/dnssec.json create mode 100644 internal/aws/cfn/schemas/aws/route53/healthcheck.json create mode 100644 internal/aws/cfn/schemas/aws/route53/hostedzone.json create mode 100644 internal/aws/cfn/schemas/aws/route53/keysigningkey.json create mode 100644 internal/aws/cfn/schemas/aws/route53/recordset.json create mode 100644 internal/aws/cfn/schemas/aws/route53/recordsetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoverycontrol/cluster.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoverycontrol/controlpanel.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoverycontrol/routingcontrol.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoverycontrol/safetyrule.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoveryreadiness/cell.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoveryreadiness/readinesscheck.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoveryreadiness/recoverygroup.json create mode 100644 internal/aws/cfn/schemas/aws/route53recoveryreadiness/resourceset.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/firewalldomainlist.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroup.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroupassociation.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/outpostresolver.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/resolverconfig.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/resolverdnssecconfig.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/resolverendpoint.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfig.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfigassociation.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/resolverrule.json create mode 100644 internal/aws/cfn/schemas/aws/route53resolver/resolverruleassociation.json create mode 100644 internal/aws/cfn/schemas/aws/rum/appmonitor.json create mode 100644 internal/aws/cfn/schemas/aws/s3/accesspoint.json create mode 100644 internal/aws/cfn/schemas/aws/s3/bucket.json create mode 100644 internal/aws/cfn/schemas/aws/s3/bucketpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/s3/multiregionaccesspoint.json create mode 100644 internal/aws/cfn/schemas/aws/s3/multiregionaccesspointpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/s3/storagelens.json create mode 100644 internal/aws/cfn/schemas/aws/s3objectlambda/accesspoint.json create mode 100644 internal/aws/cfn/schemas/aws/s3objectlambda/accesspointpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/s3outposts/accesspoint.json create mode 100644 internal/aws/cfn/schemas/aws/s3outposts/bucket.json create mode 100644 internal/aws/cfn/schemas/aws/s3outposts/bucketpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/s3outposts/endpoint.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/app.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/appimageconfig.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/coderepository.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/dataqualityjobdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/device.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/devicefleet.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/domain.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/endpoint.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/endpointconfig.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/featuregroup.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/image.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/imageversion.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/inferenceexperiment.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/model.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/modelbiasjobdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/modelcard.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/modelexplainabilityjobdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/modelpackage.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/modelpackagegroup.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/modelqualityjobdefinition.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/monitoringschedule.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/notebookinstance.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/notebookinstancelifecycleconfig.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/pipeline.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/project.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/space.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/userprofile.json create mode 100644 internal/aws/cfn/schemas/aws/sagemaker/workteam.json create mode 100644 internal/aws/cfn/schemas/aws/scheduler/schedule.json create mode 100644 internal/aws/cfn/schemas/aws/scheduler/schedulegroup.json create mode 100644 internal/aws/cfn/schemas/aws/sdb/domain.json create mode 100644 internal/aws/cfn/schemas/aws/secretsmanager/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/secretsmanager/rotationschedule.json create mode 100644 internal/aws/cfn/schemas/aws/secretsmanager/secret.json create mode 100644 internal/aws/cfn/schemas/aws/secretsmanager/secrettargetattachment.json create mode 100644 internal/aws/cfn/schemas/aws/securityhub/automationrule.json create mode 100644 internal/aws/cfn/schemas/aws/securityhub/hub.json create mode 100644 internal/aws/cfn/schemas/aws/securityhub/standard.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/acceptedportfolioshare.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/cloudformationproduct.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/cloudformationprovisionedproduct.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/launchnotificationconstraint.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/launchroleconstraint.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/launchtemplateconstraint.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/portfolio.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/portfolioprincipalassociation.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/portfolioproductassociation.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/portfolioshare.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/resourceupdateconstraint.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/serviceaction.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/serviceactionassociation.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/stacksetconstraint.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/tagoption.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalog/tagoptionassociation.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalogappregistry/application.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroup.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroupassociation.json create mode 100644 internal/aws/cfn/schemas/aws/servicecatalogappregistry/resourceassociation.json create mode 100644 internal/aws/cfn/schemas/aws/servicediscovery/httpnamespace.json create mode 100644 internal/aws/cfn/schemas/aws/servicediscovery/instance.json create mode 100644 internal/aws/cfn/schemas/aws/servicediscovery/privatednsnamespace.json create mode 100644 internal/aws/cfn/schemas/aws/servicediscovery/publicdnsnamespace.json create mode 100644 internal/aws/cfn/schemas/aws/servicediscovery/service.json create mode 100644 internal/aws/cfn/schemas/aws/ses/configurationset.json create mode 100644 internal/aws/cfn/schemas/aws/ses/configurationseteventdestination.json create mode 100644 internal/aws/cfn/schemas/aws/ses/contactlist.json create mode 100644 internal/aws/cfn/schemas/aws/ses/dedicatedippool.json create mode 100644 internal/aws/cfn/schemas/aws/ses/emailidentity.json create mode 100644 internal/aws/cfn/schemas/aws/ses/receiptfilter.json create mode 100644 internal/aws/cfn/schemas/aws/ses/receiptrule.json create mode 100644 internal/aws/cfn/schemas/aws/ses/receiptruleset.json create mode 100644 internal/aws/cfn/schemas/aws/ses/template.json create mode 100644 internal/aws/cfn/schemas/aws/ses/vdmattributes.json create mode 100644 internal/aws/cfn/schemas/aws/shield/drtaccess.json create mode 100644 internal/aws/cfn/schemas/aws/shield/proactiveengagement.json create mode 100644 internal/aws/cfn/schemas/aws/shield/protection.json create mode 100644 internal/aws/cfn/schemas/aws/shield/protectiongroup.json create mode 100644 internal/aws/cfn/schemas/aws/signer/profilepermission.json create mode 100644 internal/aws/cfn/schemas/aws/signer/signingprofile.json create mode 100644 internal/aws/cfn/schemas/aws/simspaceweaver/simulation.json create mode 100644 internal/aws/cfn/schemas/aws/sns/subscription.json create mode 100644 internal/aws/cfn/schemas/aws/sns/topic.json create mode 100644 internal/aws/cfn/schemas/aws/sns/topicinlinepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/sns/topicpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/sqs/queue.json create mode 100644 internal/aws/cfn/schemas/aws/sqs/queueinlinepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/sqs/queuepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/association.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/document.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/maintenancewindow.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/maintenancewindowtarget.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/maintenancewindowtask.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/parameter.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/patchbaseline.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/resourcedatasync.json create mode 100644 internal/aws/cfn/schemas/aws/ssm/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/ssmcontacts/contact.json create mode 100644 internal/aws/cfn/schemas/aws/ssmcontacts/contactchannel.json create mode 100644 internal/aws/cfn/schemas/aws/ssmcontacts/plan.json create mode 100644 internal/aws/cfn/schemas/aws/ssmcontacts/rotation.json create mode 100644 internal/aws/cfn/schemas/aws/ssmincidents/replicationset.json create mode 100644 internal/aws/cfn/schemas/aws/ssmincidents/responseplan.json create mode 100644 internal/aws/cfn/schemas/aws/sso/assignment.json create mode 100644 internal/aws/cfn/schemas/aws/sso/instanceaccesscontrolattributeconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/sso/permissionset.json create mode 100644 internal/aws/cfn/schemas/aws/stepfunctions/activity.json create mode 100644 internal/aws/cfn/schemas/aws/stepfunctions/statemachine.json create mode 100644 internal/aws/cfn/schemas/aws/stepfunctions/statemachinealias.json create mode 100644 internal/aws/cfn/schemas/aws/stepfunctions/statemachineversion.json create mode 100644 internal/aws/cfn/schemas/aws/supportapp/accountalias.json create mode 100644 internal/aws/cfn/schemas/aws/supportapp/slackchannelconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/supportapp/slackworkspaceconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/synthetics/canary.json create mode 100644 internal/aws/cfn/schemas/aws/synthetics/group.json create mode 100644 internal/aws/cfn/schemas/aws/systemsmanagersap/application.json create mode 100644 internal/aws/cfn/schemas/aws/timestream/database.json create mode 100644 internal/aws/cfn/schemas/aws/timestream/scheduledquery.json create mode 100644 internal/aws/cfn/schemas/aws/timestream/table.json create mode 100644 internal/aws/cfn/schemas/aws/transfer/agreement.json create mode 100644 internal/aws/cfn/schemas/aws/transfer/certificate.json create mode 100644 internal/aws/cfn/schemas/aws/transfer/connector.json create mode 100644 internal/aws/cfn/schemas/aws/transfer/profile.json create mode 100644 internal/aws/cfn/schemas/aws/transfer/server.json create mode 100644 internal/aws/cfn/schemas/aws/transfer/user.json create mode 100644 internal/aws/cfn/schemas/aws/transfer/workflow.json create mode 100644 internal/aws/cfn/schemas/aws/verifiedpermissions/identitysource.json create mode 100644 internal/aws/cfn/schemas/aws/verifiedpermissions/policy.json create mode 100644 internal/aws/cfn/schemas/aws/verifiedpermissions/policystore.json create mode 100644 internal/aws/cfn/schemas/aws/verifiedpermissions/policytemplate.json create mode 100644 internal/aws/cfn/schemas/aws/voiceid/domain.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/accesslogsubscription.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/authpolicy.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/listener.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/rule.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/service.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/servicenetwork.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/servicenetworkserviceassociation.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/servicenetworkvpcassociation.json create mode 100644 internal/aws/cfn/schemas/aws/vpclattice/targetgroup.json create mode 100644 internal/aws/cfn/schemas/aws/waf/bytematchset.json create mode 100644 internal/aws/cfn/schemas/aws/waf/ipset.json create mode 100644 internal/aws/cfn/schemas/aws/waf/rule.json create mode 100644 internal/aws/cfn/schemas/aws/waf/sizeconstraintset.json create mode 100644 internal/aws/cfn/schemas/aws/waf/sqlinjectionmatchset.json create mode 100644 internal/aws/cfn/schemas/aws/waf/webacl.json create mode 100644 internal/aws/cfn/schemas/aws/waf/xssmatchset.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/bytematchset.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/geomatchset.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/ipset.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/ratebasedrule.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/regexpatternset.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/rule.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/sizeconstraintset.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/sqlinjectionmatchset.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/webacl.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/webaclassociation.json create mode 100644 internal/aws/cfn/schemas/aws/wafregional/xssmatchset.json create mode 100644 internal/aws/cfn/schemas/aws/wafv2/ipset.json create mode 100644 internal/aws/cfn/schemas/aws/wafv2/loggingconfiguration.json create mode 100644 internal/aws/cfn/schemas/aws/wafv2/regexpatternset.json create mode 100644 internal/aws/cfn/schemas/aws/wafv2/rulegroup.json create mode 100644 internal/aws/cfn/schemas/aws/wafv2/webacl.json create mode 100644 internal/aws/cfn/schemas/aws/wafv2/webaclassociation.json create mode 100644 internal/aws/cfn/schemas/aws/wisdom/assistant.json create mode 100644 internal/aws/cfn/schemas/aws/wisdom/assistantassociation.json create mode 100644 internal/aws/cfn/schemas/aws/wisdom/knowledgebase.json create mode 100644 internal/aws/cfn/schemas/aws/workspaces/connectionalias.json create mode 100644 internal/aws/cfn/schemas/aws/workspaces/workspace.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/browsersettings.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/identityprovider.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/ipaccesssettings.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/networksettings.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/portal.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/truststore.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/useraccessloggingsettings.json create mode 100644 internal/aws/cfn/schemas/aws/workspacesweb/usersettings.json create mode 100644 internal/aws/cfn/schemas/aws/xray/group.json create mode 100644 internal/aws/cfn/schemas/aws/xray/resourcepolicy.json create mode 100644 internal/aws/cfn/schemas/aws/xray/samplingrule.json create mode 100755 scripts/cache-schemas.sh create mode 100755 scripts/one-schema.sh diff --git a/internal/aws/cfn/cfn.go b/internal/aws/cfn/cfn.go index f009d588..714d0236 100644 --- a/internal/aws/cfn/cfn.go +++ b/internal/aws/cfn/cfn.go @@ -4,6 +4,7 @@ package cfn import ( "context" + "embed" "encoding/json" "errors" "fmt" @@ -56,6 +57,9 @@ const WAIT_PERIOD_IN_SECONDS = 2 var Schemas map[string]string +//go:embed schemas +var schemaFiles embed.FS + func checkTemplate(template cft.Template) (string, error) { templateBody := format.String(template, format.Options{}) @@ -794,15 +798,31 @@ func GetTypeSchema(name string) (string, error) { if exists { return schema, nil } else { - res, err := getClient().DescribeType(context.Background(), &cloudformation.DescribeTypeInput{ - Type: "RESOURCE", TypeName: &name, - }) - if err != nil { - config.Debugf("GetTypeSchema SDK error: %v", err) - return "", err + // Look in the embedded file system next + path := strings.Replace(name, "::", "/", -1) + path = strings.ToLower(path) + path = "schemas/" + path + ".json" + b, err := schemaFiles.ReadFile(path) + if err == nil { + config.Debugf("read schema from path %s", path) + s := string(b) + Schemas[name] = s + return s, nil + } else { + config.Debugf("unable to read schema from path %s: %v", path, err) + + // Go ahead and download the schema from the registry + + res, err := getClient().DescribeType(context.Background(), &cloudformation.DescribeTypeInput{ + Type: "RESOURCE", TypeName: &name, + }) + if err != nil { + config.Debugf("GetTypeSchema SDK error: %v", err) + return "", err + } + Schemas[name] = *res.Schema + return *res.Schema, nil } - Schemas[name] = *res.Schema - return *res.Schema, nil } } diff --git a/internal/aws/cfn/schema.go b/internal/aws/cfn/schema.go index d90f29d6..31e55a9f 100644 --- a/internal/aws/cfn/schema.go +++ b/internal/aws/cfn/schema.go @@ -30,7 +30,9 @@ type Prop struct { Required []string `json:"required"` OneOf []*Prop `json:"oneOf"` AnyOf []*Prop `json:"anyOf"` + AllOf []*Prop `json:"allOf"` PatternProperties any `json:"patternProperties"` + Title string `json:"title"` } func (p *Prop) GetProperties() map[string]*Prop { diff --git a/internal/aws/cfn/schemas/aws/accessanalyzer/analyzer.json b/internal/aws/cfn/schemas/aws/accessanalyzer/analyzer.json new file mode 100644 index 00000000..550f5a13 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/accessanalyzer/analyzer.json @@ -0,0 +1,215 @@ +{ + "typeName": "AWS::AccessAnalyzer::Analyzer", + "description": "The AWS::AccessAnalyzer::Analyzer type specifies an analyzer of the user's account", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-accessanalyzer.git", + "resourceLink": { + "templateUri": "/access-analyzer/home?region=${awsRegion}#/analyzer/${AnalyzerName}", + "mappings": { + "AnalyzerName": "/AnalyzerName" + } + }, + "definitions": { + "ArchiveRule": { + "description": "An Access Analyzer archive rule. Archive rules automatically archive new findings that meet the criteria you define when you create the rule.", + "type": "object", + "properties": { + "Filter": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/Filter" + } + }, + "RuleName": { + "type": "string", + "description": "The archive rule name" + } + }, + "required": [ + "Filter", + "RuleName" + ], + "additionalProperties": false + }, + "Filter": { + "type": "object", + "properties": { + "Contains": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Eq": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Exists": { + "type": "boolean" + }, + "Property": { + "type": "string" + }, + "Neq": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "Property" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "UnusedAccessConfiguration": { + "description": "The Configuration for Unused Access Analyzer", + "type": "object", + "properties": { + "UnusedAccessAge": { + "description": "The specified access age in days for which to generate findings for unused access. For example, if you specify 90 days, the analyzer will generate findings for IAM entities within the accounts of the selected organization for any access that hasn't been used in 90 or more days since the analyzer's last scan. You can choose a value between 1 and 180 days.", + "type": "integer", + "minimum": 1, + "maximum": 180 + } + }, + "additionalProperties": false + } + }, + "properties": { + "AnalyzerName": { + "description": "Analyzer name", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ArchiveRules": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ArchiveRule" + } + }, + "Arn": { + "description": "Amazon Resource Name (ARN) of the analyzer", + "type": "string", + "minLength": 1, + "maxLength": 1600 + }, + "Tags": { + "type": "array", + "maxItems": 50, + "insertionOrder": false, + "uniqueItems": true, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Type": { + "description": "The type of the analyzer, must be one of ACCOUNT, ORGANIZATION, ACCOUNT_UNUSED_ACCESS or ORGANIZATION_UNUSED_ACCESS", + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "AnalyzerConfiguration": { + "description": "The configuration for the analyzer", + "type": "object", + "properties": { + "UnusedAccessConfiguration": { + "$ref": "#/definitions/UnusedAccessConfiguration" + } + }, + "additionalProperties": false + } + }, + "required": [ + "Type" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AnalyzerName", + "/properties/Type", + "/properties/AnalyzerConfiguration" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "access-analyzer:CreateAnalyzer", + "access-analyzer:TagResource", + "iam:CreateServiceLinkedRole", + "organizations:ListAWSServiceAccessForOrganization", + "organizations:ListDelegatedAdministrators" + ] + }, + "read": { + "permissions": [ + "access-analyzer:ListAnalyzers", + "access-analyzer:GetAnalyzer", + "access-analyzer:ListArchiveRules" + ] + }, + "update": { + "permissions": [ + "access-analyzer:CreateArchiveRule", + "access-analyzer:DeleteArchiveRule", + "access-analyzer:ListAnalyzers", + "access-analyzer:TagResource", + "access-analyzer:UntagResource", + "access-analyzer:UpdateArchiveRule" + ] + }, + "delete": { + "permissions": [ + "access-analyzer:DeleteAnalyzer" + ] + }, + "list": { + "permissions": [ + "access-analyzer:ListAnalyzers" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/acmpca/certificate.json b/internal/aws/cfn/schemas/aws/acmpca/certificate.json new file mode 100644 index 00000000..e576346e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/acmpca/certificate.json @@ -0,0 +1,521 @@ +{ + "typeName": "AWS::ACMPCA::Certificate", + "description": "The ``AWS::ACMPCA::Certificate`` resource is used to issue a certificate using your private certificate authority. For more information, see the [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) action.", + "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "definitions": { + "ApiPassthrough": { + "description": "Contains X.509 certificate information to be placed in an issued certificate. An ``APIPassthrough`` or ``APICSRPassthrough`` template variant must be selected, or else this parameter is ignored. \n If conflicting or duplicate certificate information is supplied from other sources, AWS Private CA applies [order of operation rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations) to determine what information is used.", + "type": "object", + "additionalProperties": false, + "properties": { + "Extensions": { + "$ref": "#/definitions/Extensions", + "description": "Specifies X.509 extension information for a certificate." + }, + "Subject": { + "$ref": "#/definitions/Subject", + "description": "Contains information about the certificate subject. The Subject field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The Subject must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate." + } + } + }, + "Arn": { + "type": "string" + }, + "CertificatePolicyList": { + "type": "array", + "items": { + "$ref": "#/definitions/PolicyInformation" + } + }, + "ExtendedKeyUsage": { + "description": "Specifies additional purposes for which the certified public key may be used other than basic purposes indicated in the ``KeyUsage`` extension.", + "type": "object", + "additionalProperties": false, + "properties": { + "ExtendedKeyUsageType": { + "type": "string", + "description": "Specifies a standard ``ExtendedKeyUsage`` as defined as in [RFC 5280](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.12)." + }, + "ExtendedKeyUsageObjectIdentifier": { + "$ref": "#/definitions/CustomObjectIdentifier", + "description": "Specifies a custom ``ExtendedKeyUsage`` with an object identifier (OID)." + } + } + }, + "ExtendedKeyUsageList": { + "type": "array", + "items": { + "$ref": "#/definitions/ExtendedKeyUsage" + } + }, + "Extensions": { + "description": "Contains X.509 extension information for a certificate.", + "type": "object", + "additionalProperties": false, + "properties": { + "CertificatePolicies": { + "$ref": "#/definitions/CertificatePolicyList", + "description": "Contains a sequence of one or more policy information terms, each of which consists of an object identifier (OID) and optional qualifiers. For more information, see NIST's definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier).\n In an end-entity certificate, these terms indicate the policy under which the certificate was issued and the purposes for which it may be used. In a CA certificate, these terms limit the set of policies for certification paths that include this certificate." + }, + "ExtendedKeyUsage": { + "$ref": "#/definitions/ExtendedKeyUsageList", + "description": "Specifies additional purposes for which the certified public key may be used other than basic purposes indicated in the ``KeyUsage`` extension." + }, + "KeyUsage": { + "$ref": "#/definitions/KeyUsage", + "description": "Defines one or more purposes for which the key contained in the certificate can be used. Default value for each option is false." + }, + "SubjectAlternativeNames": { + "$ref": "#/definitions/GeneralNameList", + "description": "The subject alternative name extension allows identities to be bound to the subject of the certificate. These identities may be included in addition to or in place of the identity in the subject field of the certificate." + }, + "CustomExtensions": { + "$ref": "#/definitions/CustomExtensionList", + "description": "Contains a sequence of one or more X.509 extensions, each of which consists of an object identifier (OID), a base64-encoded value, and the critical flag. For more information, see the [Global OID reference database.](https://docs.aws.amazon.com/https://oidref.com/2.5.29)" + } + } + }, + "CustomExtensionList": { + "description": "Array of X.509 extensions for a certificate.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomExtension" + } + }, + "CustomExtension": { + "description": "Specifies the X.509 extension information for a certificate.\n Extensions present in ``CustomExtensions`` follow the ``ApiPassthrough`` [template rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations).", + "type": "object", + "additionalProperties": false, + "properties": { + "Critical": { + "type": "boolean", + "description": "Specifies the critical flag of the X.509 extension." + }, + "ObjectIdentifier": { + "$ref": "#/definitions/CustomObjectIdentifier", + "description": "Specifies the object identifier (OID) of the X.509 extension. For more information, see the [Global OID reference database.](https://docs.aws.amazon.com/https://oidref.com/2.5.29)" + }, + "Value": { + "type": "string", + "description": "Specifies the base64-encoded value of the X.509 extension." + } + }, + "required": [ + "ObjectIdentifier", + "Value" + ] + }, + "GeneralNameList": { + "type": "array", + "items": { + "$ref": "#/definitions/GeneralName" + } + }, + "GeneralName": { + "description": "Describes an ASN.1 X.400 ``GeneralName`` as defined in [RFC 5280](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280). Only one of the following naming options should be provided. Providing more than one option results in an ``InvalidArgsException`` error.", + "type": "object", + "additionalProperties": false, + "properties": { + "OtherName": { + "$ref": "#/definitions/OtherName", + "description": "Represents ``GeneralName`` using an ``OtherName`` object." + }, + "Rfc822Name": { + "$ref": "#/definitions/Rfc822Name", + "description": "Represents ``GeneralName`` as an [RFC 822](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc822) email address." + }, + "DnsName": { + "$ref": "#/definitions/DnsName", + "description": "Represents ``GeneralName`` as a DNS name." + }, + "DirectoryName": { + "$ref": "#/definitions/Subject", + "description": "Contains information about the certificate subject. The certificate can be one issued by your private certificate authority (CA) or it can be your private CA certificate. The Subject field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The Subject must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate. The DN must be unique for each entity, but your private CA can issue more than one certificate with the same DN to the same entity." + }, + "EdiPartyName": { + "$ref": "#/definitions/EdiPartyName", + "description": "Represents ``GeneralName`` as an ``EdiPartyName`` object." + }, + "UniformResourceIdentifier": { + "$ref": "#/definitions/UniformResourceIdentifier", + "description": "Represents ``GeneralName`` as a URI." + }, + "IpAddress": { + "$ref": "#/definitions/IpAddress", + "description": "Represents ``GeneralName`` as an IPv4 or IPv6 address." + }, + "RegisteredId": { + "$ref": "#/definitions/CustomObjectIdentifier", + "description": "Represents ``GeneralName`` as an object identifier (OID)." + } + } + }, + "KeyUsage": { + "description": "Defines one or more purposes for which the key contained in the certificate can be used. Default value for each option is false.", + "type": "object", + "additionalProperties": false, + "properties": { + "DigitalSignature": { + "type": "boolean", + "default": false, + "description": "Key can be used for digital signing." + }, + "NonRepudiation": { + "type": "boolean", + "default": false, + "description": "Key can be used for non-repudiation." + }, + "KeyEncipherment": { + "type": "boolean", + "default": false, + "description": "Key can be used to encipher data." + }, + "DataEncipherment": { + "type": "boolean", + "default": false, + "description": "Key can be used to decipher data." + }, + "KeyAgreement": { + "type": "boolean", + "default": false, + "description": "Key can be used in a key-agreement protocol." + }, + "KeyCertSign": { + "type": "boolean", + "default": false, + "description": "Key can be used to sign certificates." + }, + "CRLSign": { + "type": "boolean", + "default": false, + "description": "Key can be used to sign CRLs." + }, + "EncipherOnly": { + "type": "boolean", + "default": false, + "description": "Key can be used only to encipher data." + }, + "DecipherOnly": { + "type": "boolean", + "default": false, + "description": "Key can be used only to decipher data." + } + } + }, + "PolicyInformation": { + "description": "Defines the X.509 ``CertificatePolicies`` extension.", + "type": "object", + "additionalProperties": false, + "properties": { + "CertPolicyId": { + "$ref": "#/definitions/CustomObjectIdentifier", + "description": "Specifies the object identifier (OID) of the certificate policy under which the certificate was issued. For more information, see NIST's definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier)." + }, + "PolicyQualifiers": { + "$ref": "#/definitions/PolicyQualifierInfoList", + "description": "Modifies the given ``CertPolicyId`` with a qualifier. AWS Private CA supports the certification practice statement (CPS) qualifier." + } + }, + "required": [ + "CertPolicyId" + ] + }, + "PolicyQualifierInfo": { + "description": "Modifies the ``CertPolicyId`` of a ``PolicyInformation`` object with a qualifier. AWS Private CA supports the certification practice statement (CPS) qualifier.", + "type": "object", + "additionalProperties": false, + "properties": { + "PolicyQualifierId": { + "type": "string", + "description": "Identifies the qualifier modifying a ``CertPolicyId``." + }, + "Qualifier": { + "$ref": "#/definitions/Qualifier", + "description": "Defines the qualifier type. AWS Private CA supports the use of a URI for a CPS qualifier in this field." + } + }, + "required": [ + "PolicyQualifierId", + "Qualifier" + ] + }, + "PolicyQualifierInfoList": { + "type": "array", + "items": { + "$ref": "#/definitions/PolicyQualifierInfo" + } + }, + "Qualifier": { + "description": "Defines a ``PolicyInformation`` qualifier. AWS Private CA supports the [certification practice statement (CPS) qualifier](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.4) defined in RFC 5280.", + "type": "object", + "additionalProperties": false, + "properties": { + "CpsUri": { + "type": "string", + "description": "Contains a pointer to a certification practice statement (CPS) published by the CA." + } + }, + "required": [ + "CpsUri" + ] + }, + "Subject": { + "description": "Contains information about the certificate subject. The ``Subject`` field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The ``Subject``must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate.", + "type": "object", + "additionalProperties": false, + "properties": { + "Country": { + "type": "string", + "description": "Two-digit code that specifies the country in which the certificate subject located." + }, + "Organization": { + "type": "string", + "description": "Legal name of the organization with which the certificate subject is affiliated." + }, + "OrganizationalUnit": { + "type": "string", + "description": "A subdivision or unit of the organization (such as sales or finance) with which the certificate subject is affiliated." + }, + "DistinguishedNameQualifier": { + "type": "string", + "description": "Disambiguating information for the certificate subject." + }, + "State": { + "type": "string", + "description": "State in which the subject of the certificate is located." + }, + "CommonName": { + "type": "string", + "description": "For CA and end-entity certificates in a private PKI, the common name (CN) can be any string within the length limit.\n Note: In publicly trusted certificates, the common name must be a fully qualified domain name (FQDN) associated with the certificate subject." + }, + "SerialNumber": { + "type": "string", + "description": "The certificate serial number." + }, + "Locality": { + "type": "string", + "description": "The locality (such as a city or town) in which the certificate subject is located." + }, + "Title": { + "type": "string", + "description": "A title such as Mr. or Ms., which is pre-pended to the name to refer formally to the certificate subject." + }, + "Surname": { + "type": "string", + "description": "Family name. In the US and the UK, for example, the surname of an individual is ordered last. In Asian cultures the surname is typically ordered first." + }, + "GivenName": { + "type": "string", + "description": "First name." + }, + "Initials": { + "type": "string", + "description": "Concatenation that typically contains the first letter of the *GivenName*, the first letter of the middle name if one exists, and the first letter of the *Surname*." + }, + "Pseudonym": { + "type": "string", + "description": "Typically a shortened version of a longer *GivenName*. For example, Jonathan is often shortened to John. Elizabeth is often shortened to Beth, Liz, or Eliza." + }, + "GenerationQualifier": { + "type": "string", + "description": "Typically a qualifier appended to the name of an individual. Examples include Jr. for junior, Sr. for senior, and III for third." + }, + "CustomAttributes": { + "$ref": "#/definitions/CustomAttributeList", + "description": "Contains a sequence of one or more X.500 relative distinguished names (RDNs), each of which consists of an object identifier (OID) and a value. For more information, see NIST?s definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier).\n Custom attributes cannot be used in combination with standard attributes." + } + } + }, + "CustomAttributeList": { + "description": "Array of X.500 attribute type and value. CustomAttributes cannot be used along with pre-defined attributes.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomAttribute" + } + }, + "CustomAttribute": { + "description": "Defines the X.500 relative distinguished name (RDN).", + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectIdentifier": { + "$ref": "#/definitions/CustomObjectIdentifier", + "description": "Specifies the object identifier (OID) of the attribute type of the relative distinguished name (RDN)." + }, + "Value": { + "type": "string", + "description": "Specifies the attribute value of relative distinguished name (RDN)." + } + }, + "required": [ + "ObjectIdentifier", + "Value" + ] + }, + "Validity": { + "description": "Length of time for which the certificate issued by your private certificate authority (CA), or by the private CA itself, is valid in days, months, or years. You can issue a certificate by calling the ``IssueCertificate`` operation.", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "number", + "description": "A long integer interpreted according to the value of ``Type``, below." + }, + "Type": { + "type": "string", + "description": "Specifies whether the ``Value`` parameter represents days, months, or years." + } + }, + "required": [ + "Value", + "Type" + ] + }, + "CustomObjectIdentifier": { + "description": "String that contains X.509 ObjectIdentifier information.", + "type": "string" + }, + "OtherName": { + "description": "Defines a custom ASN.1 X.400 ``GeneralName`` using an object identifier (OID) and value. The OID must satisfy the regular expression shown below. For more information, see NIST's definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier).", + "type": "object", + "additionalProperties": false, + "properties": { + "TypeId": { + "$ref": "#/definitions/CustomObjectIdentifier", + "description": "Specifies an OID." + }, + "Value": { + "type": "string", + "description": "Specifies an OID value." + } + }, + "required": [ + "TypeId", + "Value" + ] + }, + "Rfc822Name": { + "description": "String that contains X.509 Rfc822Name information.", + "type": "string" + }, + "DnsName": { + "description": "String that contains X.509 DnsName information.", + "type": "string" + }, + "EdiPartyName": { + "description": "Describes an Electronic Data Interchange (EDI) entity as described in as defined in [Subject Alternative Name](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) in RFC 5280.", + "type": "object", + "additionalProperties": false, + "properties": { + "PartyName": { + "type": "string", + "description": "Specifies the party name." + }, + "NameAssigner": { + "type": "string", + "description": "Specifies the name assigner." + } + }, + "required": [ + "PartyName", + "NameAssigner" + ] + }, + "UniformResourceIdentifier": { + "description": "String that contains X.509 UniformResourceIdentifier information.", + "type": "string" + }, + "IpAddress": { + "description": "String that contains X.509 IpAddress information.", + "type": "string" + } + }, + "properties": { + "ApiPassthrough": { + "description": "Specifies X.509 certificate information to be included in the issued certificate. An ``APIPassthrough`` or ``APICSRPassthrough`` template variant must be selected, or else this parameter is ignored.", + "$ref": "#/definitions/ApiPassthrough" + }, + "CertificateAuthorityArn": { + "description": "The Amazon Resource Name (ARN) for the private CA issues the certificate.", + "$ref": "#/definitions/Arn" + }, + "CertificateSigningRequest": { + "description": "The certificate signing request (CSR) for the certificate.", + "type": "string", + "minLength": 1 + }, + "SigningAlgorithm": { + "description": "The name of the algorithm that will be used to sign the certificate to be issued. \n This parameter should not be confused with the ``SigningAlgorithm`` parameter used to sign a CSR in the ``CreateCertificateAuthority`` action.\n The specified signing algorithm family (RSA or ECDSA) must match the algorithm family of the CA's secret key.", + "type": "string" + }, + "TemplateArn": { + "description": "Specifies a custom configuration template to use when issuing a certificate. If this parameter is not provided, PCAshort defaults to the ``EndEntityCertificate/V1`` template. For more information about PCAshort templates, see [Using Templates](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html).", + "$ref": "#/definitions/Arn" + }, + "Validity": { + "description": "The period of time during which the certificate will be valid.", + "$ref": "#/definitions/Validity" + }, + "ValidityNotBefore": { + "description": "Information describing the start of the validity period of the certificate. This parameter sets the ?Not Before\" date for the certificate.\n By default, when issuing a certificate, PCAshort sets the \"Not Before\" date to the issuance time minus 60 minutes. This compensates for clock inconsistencies across computer systems. The ``ValidityNotBefore`` parameter can be used to customize the ?Not Before? value. \n Unlike the ``Validity`` parameter, the ``ValidityNotBefore`` parameter is optional.\n The ``ValidityNotBefore`` value is expressed as an explicit date and time, using the ``Validity`` type value ``ABSOLUTE``.", + "$ref": "#/definitions/Validity" + }, + "Certificate": { + "description": "", + "type": "string" + }, + "Arn": { + "description": "", + "$ref": "#/definitions/Arn" + } + }, + "additionalProperties": false, + "required": [ + "CertificateAuthorityArn", + "CertificateSigningRequest", + "SigningAlgorithm", + "Validity" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Certificate" + ], + "createOnlyProperties": [ + "/properties/ApiPassthrough", + "/properties/CertificateAuthorityArn", + "/properties/CertificateSigningRequest", + "/properties/SigningAlgorithm", + "/properties/TemplateArn", + "/properties/Validity", + "/properties/ValidityNotBefore" + ], + "writeOnlyProperties": [ + "/properties/ApiPassthrough", + "/properties/CertificateSigningRequest" + ], + "primaryIdentifier": [ + "/properties/Arn", + "/properties/CertificateAuthorityArn" + ], + "handlers": { + "create": { + "permissions": [ + "acm-pca:IssueCertificate", + "acm-pca:GetCertificate" + ] + }, + "read": { + "permissions": [ + "acm-pca:GetCertificate" + ] + }, + "delete": { + "permissions": [ + "acm-pca:GetCertificate" + ] + }, + "update": { + "permissions": [] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/acmpca/certificateauthority.json b/internal/aws/cfn/schemas/aws/acmpca/certificateauthority.json new file mode 100644 index 00000000..b3dc53e4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/acmpca/certificateauthority.json @@ -0,0 +1,461 @@ +{ + "typeName": "AWS::ACMPCA::CertificateAuthority", + "description": "Private certificate authority.", + "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "definitions": { + "Arn": { + "type": "string" + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + }, + "Subject": { + "description": "Structure that contains X.500 distinguished name information for your CA.", + "type": "object", + "additionalProperties": false, + "properties": { + "Country": { + "type": "string" + }, + "Organization": { + "type": "string" + }, + "OrganizationalUnit": { + "type": "string" + }, + "DistinguishedNameQualifier": { + "type": "string" + }, + "State": { + "type": "string" + }, + "CommonName": { + "type": "string" + }, + "SerialNumber": { + "type": "string" + }, + "Locality": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "Surname": { + "type": "string" + }, + "GivenName": { + "type": "string" + }, + "Initials": { + "type": "string" + }, + "Pseudonym": { + "type": "string" + }, + "GenerationQualifier": { + "type": "string" + }, + "CustomAttributes": { + "$ref": "#/definitions/CustomAttributeList" + } + } + }, + "CustomAttributeList": { + "description": "Array of X.500 attribute type and value. CustomAttributes cannot be used along with pre-defined attributes.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomAttribute" + } + }, + "CustomAttribute": { + "description": "Structure that contains X.500 attribute type and value.", + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectIdentifier": { + "$ref": "#/definitions/CustomObjectIdentifier" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "ObjectIdentifier", + "Value" + ] + }, + "CrlDistributionPointExtensionConfiguration": { + "description": "Configures the default behavior of the CRL Distribution Point extension for certificates issued by your certificate authority", + "type": "object", + "additionalProperties": false, + "properties": { + "OmitExtension": { + "type": "boolean" + } + }, + "required": [ + "OmitExtension" + ] + }, + "CrlConfiguration": { + "description": "Your certificate authority can create and maintain a certificate revocation list (CRL). A CRL contains information about certificates that have been revoked.", + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "ExpirationInDays": { + "type": "integer" + }, + "CustomCname": { + "type": "string" + }, + "S3BucketName": { + "type": "string" + }, + "S3ObjectAcl": { + "type": "string" + }, + "CrlDistributionPointExtensionConfiguration": { + "$ref": "#/definitions/CrlDistributionPointExtensionConfiguration" + } + } + }, + "OcspConfiguration": { + "description": "Helps to configure online certificate status protocol (OCSP) responder for your certificate authority", + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "OcspCustomCname": { + "type": "string" + } + } + }, + "RevocationConfiguration": { + "description": "Certificate Authority revocation information.", + "type": "object", + "additionalProperties": false, + "properties": { + "CrlConfiguration": { + "$ref": "#/definitions/CrlConfiguration" + }, + "OcspConfiguration": { + "$ref": "#/definitions/OcspConfiguration" + } + } + }, + "KeyUsage": { + "description": "Structure that contains X.509 KeyUsage information.", + "type": "object", + "additionalProperties": false, + "properties": { + "DigitalSignature": { + "type": "boolean", + "default": false + }, + "NonRepudiation": { + "type": "boolean", + "default": false + }, + "KeyEncipherment": { + "type": "boolean", + "default": false + }, + "DataEncipherment": { + "type": "boolean", + "default": false + }, + "KeyAgreement": { + "type": "boolean", + "default": false + }, + "KeyCertSign": { + "type": "boolean", + "default": false + }, + "CRLSign": { + "type": "boolean", + "default": false + }, + "EncipherOnly": { + "type": "boolean", + "default": false + }, + "DecipherOnly": { + "type": "boolean", + "default": false + } + } + }, + "CustomObjectIdentifier": { + "description": "String that contains X.509 ObjectIdentifier information.", + "type": "string" + }, + "AccessMethodType": { + "description": "Pre-defined enum string for X.509 AccessMethod ObjectIdentifiers.", + "type": "string" + }, + "AccessMethod": { + "description": "Structure that contains X.509 AccessMethod information. Assign one and ONLY one field.", + "type": "object", + "additionalProperties": false, + "properties": { + "CustomObjectIdentifier": { + "$ref": "#/definitions/CustomObjectIdentifier" + }, + "AccessMethodType": { + "$ref": "#/definitions/AccessMethodType" + } + } + }, + "OtherName": { + "description": "Structure that contains X.509 OtherName information.", + "type": "object", + "additionalProperties": false, + "properties": { + "TypeId": { + "$ref": "#/definitions/CustomObjectIdentifier" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "TypeId", + "Value" + ] + }, + "Rfc822Name": { + "description": "String that contains X.509 Rfc822Name information.", + "type": "string" + }, + "DnsName": { + "description": "String that contains X.509 DnsName information.", + "type": "string" + }, + "EdiPartyName": { + "description": "Structure that contains X.509 EdiPartyName information.", + "type": "object", + "additionalProperties": false, + "properties": { + "PartyName": { + "type": "string" + }, + "NameAssigner": { + "type": "string" + } + }, + "required": [ + "PartyName", + "NameAssigner" + ] + }, + "UniformResourceIdentifier": { + "description": "String that contains X.509 UniformResourceIdentifier information.", + "type": "string" + }, + "IpAddress": { + "description": "String that contains X.509 IpAddress information.", + "type": "string" + }, + "GeneralName": { + "description": "Structure that contains X.509 GeneralName information. Assign one and ONLY one field.", + "type": "object", + "additionalProperties": false, + "properties": { + "OtherName": { + "$ref": "#/definitions/OtherName" + }, + "Rfc822Name": { + "$ref": "#/definitions/Rfc822Name" + }, + "DnsName": { + "$ref": "#/definitions/DnsName" + }, + "DirectoryName": { + "$ref": "#/definitions/Subject" + }, + "EdiPartyName": { + "$ref": "#/definitions/EdiPartyName" + }, + "UniformResourceIdentifier": { + "$ref": "#/definitions/UniformResourceIdentifier" + }, + "IpAddress": { + "$ref": "#/definitions/IpAddress" + }, + "RegisteredId": { + "$ref": "#/definitions/CustomObjectIdentifier" + } + } + }, + "AccessDescription": { + "description": "Structure that contains X.509 AccessDescription information.", + "type": "object", + "additionalProperties": false, + "properties": { + "AccessMethod": { + "$ref": "#/definitions/AccessMethod" + }, + "AccessLocation": { + "$ref": "#/definitions/GeneralName" + } + }, + "required": [ + "AccessMethod", + "AccessLocation" + ] + }, + "SubjectInformationAccess": { + "description": "Array of X.509 AccessDescription.", + "type": "array", + "items": { + "$ref": "#/definitions/AccessDescription" + } + }, + "CsrExtensions": { + "description": "Structure that contains CSR pass though extensions information.", + "type": "object", + "additionalProperties": false, + "properties": { + "KeyUsage": { + "$ref": "#/definitions/KeyUsage" + }, + "SubjectInformationAccess": { + "$ref": "#/definitions/SubjectInformationAccess" + } + } + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the certificate authority.", + "$ref": "#/definitions/Arn" + }, + "Type": { + "description": "The type of the certificate authority.", + "type": "string" + }, + "KeyAlgorithm": { + "description": "Public key algorithm and size, in bits, of the key pair that your CA creates when it issues a certificate.", + "type": "string" + }, + "SigningAlgorithm": { + "description": "Algorithm your CA uses to sign certificate requests.", + "type": "string" + }, + "Subject": { + "description": "Structure that contains X.500 distinguished name information for your CA.", + "$ref": "#/definitions/Subject" + }, + "RevocationConfiguration": { + "description": "Certificate revocation information used by the CreateCertificateAuthority and UpdateCertificateAuthority actions.", + "$ref": "#/definitions/RevocationConfiguration" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CertificateSigningRequest": { + "description": "The base64 PEM-encoded certificate signing request (CSR) for your certificate authority certificate.", + "type": "string" + }, + "CsrExtensions": { + "description": "Structure that contains CSR pass through extension information used by the CreateCertificateAuthority action.", + "$ref": "#/definitions/CsrExtensions" + }, + "KeyStorageSecurityStandard": { + "description": "KeyStorageSecurityStadard defines a cryptographic key management compliance standard used for handling CA keys.", + "type": "string" + }, + "UsageMode": { + "description": "Usage mode of the ceritificate authority.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Type", + "KeyAlgorithm", + "SigningAlgorithm", + "Subject" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CertificateSigningRequest" + ], + "writeOnlyProperties": [ + "/properties/Subject", + "/properties/Subject", + "/properties/CsrExtensions", + "/properties/Tags", + "/properties/RevocationConfiguration", + "/properties/KeyStorageSecurityStandard" + ], + "createOnlyProperties": [ + "/properties/Type", + "/properties/KeyAlgorithm", + "/properties/SigningAlgorithm", + "/properties/Subject", + "/properties/CsrExtensions", + "/properties/KeyStorageSecurityStandard", + "/properties/UsageMode" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "acm-pca:CreateCertificateAuthority", + "acm-pca:DescribeCertificateAuthority", + "acm-pca:GetCertificateAuthorityCsr" + ] + }, + "read": { + "permissions": [ + "acm-pca:DescribeCertificateAuthority", + "acm-pca:GetCertificateAuthorityCsr", + "acm-pca:ListTags" + ] + }, + "update": { + "permissions": [ + "acm-pca:ListTags", + "acm-pca:TagCertificateAuthority", + "acm-pca:UntagCertificateAuthority", + "acm-pca:UpdateCertificateAuthority" + ] + }, + "delete": { + "permissions": [ + "acm-pca:DeleteCertificateAuthority", + "acm-pca:DescribeCertificateAuthority" + ] + }, + "list": { + "permissions": [ + "acm-pca:DescribeCertificateAuthority", + "acm-pca:GetCertificateAuthorityCsr", + "acm-pca:ListCertificateAuthorities", + "acm-pca:ListTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/acmpca/certificateauthorityactivation.json b/internal/aws/cfn/schemas/aws/acmpca/certificateauthorityactivation.json new file mode 100644 index 00000000..89dc7499 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/acmpca/certificateauthorityactivation.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::ACMPCA::CertificateAuthorityActivation", + "description": "Used to install the certificate authority certificate and update the certificate authority status.", + "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "properties": { + "CertificateAuthorityArn": { + "description": "Arn of the Certificate Authority.", + "type": "string" + }, + "Certificate": { + "description": "Certificate Authority certificate that will be installed in the Certificate Authority.", + "type": "string" + }, + "CertificateChain": { + "description": "Certificate chain for the Certificate Authority certificate.", + "type": "string" + }, + "Status": { + "description": "The status of the Certificate Authority.", + "type": "string" + }, + "CompleteCertificateChain": { + "description": "The complete certificate chain, including the Certificate Authority certificate.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "CertificateAuthorityArn", + "Certificate" + ], + "createOnlyProperties": [ + "/properties/CertificateAuthorityArn" + ], + "writeOnlyProperties": [ + "/properties/Certificate", + "/properties/CertificateChain" + ], + "readOnlyProperties": [ + "/properties/CompleteCertificateChain" + ], + "primaryIdentifier": [ + "/properties/CertificateAuthorityArn" + ], + "handlers": { + "create": { + "permissions": [ + "acm-pca:ImportCertificateAuthorityCertificate", + "acm-pca:UpdateCertificateAuthority" + ] + }, + "read": { + "permissions": [ + "acm-pca:GetCertificateAuthorityCertificate", + "acm-pca:DescribeCertificateAuthority" + ] + }, + "delete": { + "permissions": [ + "acm-pca:UpdateCertificateAuthority" + ] + }, + "update": { + "permissions": [ + "acm-pca:ImportCertificateAuthorityCertificate", + "acm-pca:UpdateCertificateAuthority" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/acmpca/permission.json b/internal/aws/cfn/schemas/aws/acmpca/permission.json new file mode 100644 index 00000000..98dad9a4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/acmpca/permission.json @@ -0,0 +1,62 @@ +{ + "typeName": "AWS::ACMPCA::Permission", + "description": "Permission set on private certificate authority", + "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "properties": { + "Actions": { + "description": "The actions that the specified AWS service principal can use. Actions IssueCertificate, GetCertificate and ListPermissions must be provided.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "CertificateAuthorityArn": { + "description": "The Amazon Resource Name (ARN) of the Private Certificate Authority that grants the permission.", + "type": "string" + }, + "Principal": { + "description": "The AWS service or identity that receives the permission. At this time, the only valid principal is acm.amazonaws.com.", + "type": "string" + }, + "SourceAccount": { + "description": "The ID of the calling account.", + "type": "string" + } + }, + "additionalProperties": false, + "taggable": false, + "required": [ + "Actions", + "CertificateAuthorityArn", + "Principal" + ], + "createOnlyProperties": [ + "/properties/Actions", + "/properties/CertificateAuthorityArn", + "/properties/Principal", + "/properties/SourceAccount" + ], + "primaryIdentifier": [ + "/properties/CertificateAuthorityArn", + "/properties/Principal" + ], + "handlers": { + "create": { + "permissions": [ + "acm-pca:CreatePermission", + "acm-pca:ListPermissions" + ] + }, + "read": { + "permissions": [ + "acm-pca:ListPermissions" + ] + }, + "delete": { + "permissions": [ + "acm-pca:DeletePermission" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/amazonmq/broker.json b/internal/aws/cfn/schemas/aws/amazonmq/broker.json new file mode 100644 index 00000000..a8000eb1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amazonmq/broker.json @@ -0,0 +1,334 @@ +{ + "typeName": "AWS::AmazonMQ::Broker", + "description": "Resource Type definition for AWS::AmazonMQ::Broker", + "additionalProperties": false, + "properties": { + "SecurityGroups": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DataReplicationPrimaryBrokerArn": { + "type": "string" + }, + "Configuration": { + "$ref": "#/definitions/ConfigurationId" + }, + "AuthenticationStrategy": { + "type": "string" + }, + "Users": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/User" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "StompEndpoints": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MqttEndpoints": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AmqpEndpoints": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DeploymentMode": { + "type": "string" + }, + "EngineType": { + "type": "string" + }, + "EncryptionOptions": { + "$ref": "#/definitions/EncryptionOptions" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagsEntry" + } + }, + "ConfigurationRevision": { + "type": "integer" + }, + "StorageType": { + "type": "string" + }, + "EngineVersion": { + "type": "string" + }, + "MaintenanceWindowStartTime": { + "$ref": "#/definitions/MaintenanceWindow" + }, + "HostInstanceType": { + "type": "string" + }, + "AutoMinorVersionUpgrade": { + "type": "boolean" + }, + "Logs": { + "$ref": "#/definitions/LogList" + }, + "ConfigurationId": { + "type": "string" + }, + "DataReplicationMode": { + "type": "string" + }, + "BrokerName": { + "type": "string" + }, + "WssEndpoints": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "IpAddresses": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "OpenWireEndpoints": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "LdapServerMetadata": { + "$ref": "#/definitions/LdapServerMetadata" + }, + "PubliclyAccessible": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + } + }, + "definitions": { + "LogList": { + "type": "object", + "additionalProperties": false, + "properties": { + "Audit": { + "type": "boolean" + }, + "General": { + "type": "boolean" + } + } + }, + "LdapServerMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "Hosts": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "UserRoleName": { + "type": "string" + }, + "UserSearchMatching": { + "type": "string" + }, + "RoleName": { + "type": "string" + }, + "UserBase": { + "type": "string" + }, + "UserSearchSubtree": { + "type": "boolean" + }, + "RoleSearchMatching": { + "type": "string" + }, + "ServiceAccountUsername": { + "type": "string" + }, + "RoleBase": { + "type": "string" + }, + "ServiceAccountPassword": { + "type": "string" + }, + "RoleSearchSubtree": { + "type": "boolean" + } + }, + "required": [ + "Hosts", + "UserSearchMatching", + "UserBase", + "RoleSearchMatching", + "ServiceAccountUsername", + "RoleBase", + "ServiceAccountPassword" + ] + }, + "User": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReplicationUser": { + "type": "boolean" + }, + "ConsoleAccess": { + "type": "boolean" + }, + "Username": { + "type": "string" + }, + "Groups": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Password": { + "type": "string" + } + }, + "required": [ + "Username", + "Password" + ] + }, + "MaintenanceWindow": { + "type": "object", + "additionalProperties": false, + "properties": { + "DayOfWeek": { + "type": "string" + }, + "TimeOfDay": { + "type": "string" + }, + "TimeZone": { + "type": "string" + } + }, + "required": [ + "DayOfWeek", + "TimeOfDay", + "TimeZone" + ] + }, + "TagsEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "EncryptionOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "type": "string" + }, + "UseAwsOwnedKey": { + "type": "boolean" + } + }, + "required": [ + "UseAwsOwnedKey" + ] + }, + "ConfigurationId": { + "type": "object", + "additionalProperties": false, + "properties": { + "Revision": { + "type": "integer" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "Revision", + "Id" + ] + } + }, + "required": [ + "EngineVersion", + "DeploymentMode", + "HostInstanceType", + "EngineType", + "AutoMinorVersionUpgrade", + "Users", + "PubliclyAccessible", + "BrokerName" + ], + "createOnlyProperties": [ + "/properties/BrokerName", + "/properties/StorageType", + "/properties/DeploymentMode", + "/properties/EngineType", + "/properties/SubnetIds", + "/properties/AuthenticationStrategy", + "/properties/EncryptionOptions", + "/properties/PubliclyAccessible" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/IpAddresses", + "/properties/Id", + "/properties/MqttEndpoints", + "/properties/OpenWireEndpoints", + "/properties/ConfigurationId", + "/properties/ConfigurationRevision", + "/properties/StompEndpoints", + "/properties/WssEndpoints", + "/properties/AmqpEndpoints", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/amazonmq/configuration.json b/internal/aws/cfn/schemas/aws/amazonmq/configuration.json new file mode 100644 index 00000000..cc88ec05 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amazonmq/configuration.json @@ -0,0 +1,79 @@ +{ + "typeName": "AWS::AmazonMQ::Configuration", + "description": "Resource Type definition for AWS::AmazonMQ::Configuration", + "additionalProperties": false, + "properties": { + "EngineVersion": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Revision": { + "type": "integer" + }, + "AuthenticationStrategy": { + "type": "string" + }, + "EngineType": { + "type": "string" + }, + "Data": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagsEntry" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "TagsEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "EngineVersion", + "EngineType", + "Data", + "Name" + ], + "createOnlyProperties": [ + "/properties/EngineType", + "/properties/Name", + "/properties/AuthenticationStrategy", + "/properties/EngineVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Revision", + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/amazonmq/configurationassociation.json b/internal/aws/cfn/schemas/aws/amazonmq/configurationassociation.json new file mode 100644 index 00000000..3f406b9b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amazonmq/configurationassociation.json @@ -0,0 +1,47 @@ +{ + "typeName": "AWS::AmazonMQ::ConfigurationAssociation", + "description": "Resource Type definition for AWS::AmazonMQ::ConfigurationAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Broker": { + "type": "string" + }, + "Configuration": { + "$ref": "#/definitions/ConfigurationId" + } + }, + "definitions": { + "ConfigurationId": { + "type": "object", + "additionalProperties": false, + "properties": { + "Revision": { + "type": "integer" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "Revision", + "Id" + ] + } + }, + "required": [ + "Configuration", + "Broker" + ], + "createOnlyProperties": [ + "/properties/Broker" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/amplify/app.json b/internal/aws/cfn/schemas/aws/amplify/app.json new file mode 100644 index 00000000..bf138ec9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amplify/app.json @@ -0,0 +1,346 @@ +{ + "typeName": "AWS::Amplify::App", + "description": "The AWS::Amplify::App resource creates Apps in the Amplify Console. An App is a collection of branches.", + "additionalProperties": false, + "properties": { + "AccessToken": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "AppId": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "pattern": "d[a-z0-9]+" + }, + "AppName": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "(?s).+" + }, + "Arn": { + "type": "string", + "maxLength": 1000, + "pattern": "(?s).*" + }, + "AutoBranchCreationConfig": { + "$ref": "#/definitions/AutoBranchCreationConfig" + }, + "BasicAuthConfig": { + "$ref": "#/definitions/BasicAuthConfig" + }, + "BuildSpec": { + "type": "string", + "minLength": 1, + "maxLength": 25000, + "pattern": "(?s).+" + }, + "CustomHeaders": { + "type": "string", + "minLength": 0, + "maxLength": 25000, + "pattern": "(?s).*" + }, + "CustomRules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CustomRule" + } + }, + "DefaultDomain": { + "type": "string", + "minLength": 0, + "maxLength": 1000 + }, + "Description": { + "type": "string", + "maxLength": 1000, + "pattern": "(?s).*" + }, + "EnableBranchAutoDeletion": { + "type": "boolean" + }, + "EnvironmentVariables": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + }, + "IAMServiceRole": { + "type": "string", + "minLength": 1, + "maxLength": 1000, + "pattern": "(?s).*" + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "(?s).+" + }, + "OauthToken": { + "type": "string", + "maxLength": 1000, + "pattern": "(?s).*" + }, + "Platform": { + "type": "string", + "enum": [ + "WEB", + "WEB_DYNAMIC", + "WEB_COMPUTE" + ] + }, + "Repository": { + "type": "string", + "pattern": "(?s).*" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "AutoBranchCreationConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutoBranchCreationPatterns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "BasicAuthConfig": { + "$ref": "#/definitions/BasicAuthConfig" + }, + "BuildSpec": { + "type": "string", + "minLength": 1, + "maxLength": 25000 + }, + "EnableAutoBranchCreation": { + "type": "boolean" + }, + "EnableAutoBuild": { + "type": "boolean" + }, + "EnablePerformanceMode": { + "type": "boolean" + }, + "EnablePullRequestPreview": { + "type": "boolean" + }, + "EnvironmentVariables": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + }, + "Framework": { + "type": "string", + "maxLength": 255, + "pattern": "(?s).*" + }, + "PullRequestEnvironmentName": { + "type": "string", + "maxLength": 20, + "pattern": "(?s).*" + }, + "Stage": { + "type": "string", + "enum": [ + "EXPERIMENTAL", + "BETA", + "PULL_REQUEST", + "PRODUCTION", + "DEVELOPMENT" + ] + } + } + }, + "BasicAuthConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "EnableBasicAuth": { + "type": "boolean" + }, + "Username": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Password": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + } + }, + "CustomRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Condition": { + "type": "string", + "minLength": 0, + "maxLength": 2048, + "pattern": "(?s).*" + }, + "Status": { + "type": "string", + "minLength": 3, + "maxLength": 7, + "pattern": ".{3,7}" + }, + "Target": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "(?s).+" + }, + "Source": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "(?s).+" + } + }, + "required": [ + "Target", + "Source" + ] + }, + "EnvironmentVariable": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "maxLength": 255, + "pattern": "(?s).*" + }, + "Value": { + "type": "string", + "maxLength": 5500, + "pattern": "(?s).*" + } + }, + "required": [ + "Name", + "Value" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "insertionOrder": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/AppId", + "/properties/AppName", + "/properties/Arn", + "/properties/DefaultDomain" + ], + "writeOnlyProperties": [ + "/properties/AccessToken", + "/properties/BasicAuthConfig", + "/properties/OauthToken", + "/properties/AutoBranchCreationConfig" + ], + "handlers": { + "create": { + "permissions": [ + "amplify:GetApp", + "amplify:CreateApp", + "amplify:TagResource", + "codecommit:GetRepository", + "codecommit:PutRepositoryTriggers", + "codecommit:GetRepositoryTriggers", + "sns:CreateTopic", + "sns:Subscribe", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "amplify:GetApp", + "amplify:DeleteApp", + "codecommit:GetRepository", + "codecommit:GetRepositoryTriggers", + "codecommit:PutRepositoryTriggers", + "sns:Unsubscribe", + "iam:PassRole" + ] + }, + "list": { + "permissions": [ + "amplify:GetApp", + "amplify:ListApps", + "amplify:ListTagsForResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "amplify:GetApp", + "amplify:ListTagsForResource", + "codecommit:GetRepository", + "codecommit:GetRepositoryTriggers", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "amplify:GetApp", + "amplify:UpdateApp", + "amplify:ListTagsForResource", + "amplify:TagResource", + "amplify:UntagResource", + "codecommit:GetRepository", + "codecommit:PutRepositoryTriggers", + "codecommit:GetRepositoryTriggers", + "sns:CreateTopic", + "sns:Subscribe", + "sns:Unsubscribe", + "iam:PassRole" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/amplify/branch.json b/internal/aws/cfn/schemas/aws/amplify/branch.json new file mode 100644 index 00000000..46274c04 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amplify/branch.json @@ -0,0 +1,259 @@ +{ + "typeName": "AWS::Amplify::Branch", + "description": "The AWS::Amplify::Branch resource creates a new branch within an app.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", + "additionalProperties": false, + "properties": { + "AppId": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "pattern": "d[a-z0-9]+" + }, + "Arn": { + "type": "string", + "maxLength": 1000, + "pattern": "(?s).*" + }, + "BasicAuthConfig": { + "$ref": "#/definitions/BasicAuthConfig" + }, + "Backend": { + "$ref": "#/definitions/Backend" + }, + "BranchName": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "(?s).+" + }, + "BuildSpec": { + "type": "string", + "minLength": 1, + "maxLength": 25000, + "pattern": "(?s).+" + }, + "Description": { + "type": "string", + "maxLength": 1000, + "pattern": "(?s).*" + }, + "EnableAutoBuild": { + "type": "boolean" + }, + "EnablePerformanceMode": { + "type": "boolean" + }, + "EnablePullRequestPreview": { + "type": "boolean" + }, + "EnvironmentVariables": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + }, + "Framework": { + "type": "string", + "maxLength": 255, + "pattern": "(?s).*" + }, + "PullRequestEnvironmentName": { + "type": "string", + "maxLength": 20, + "pattern": "(?s).*" + }, + "Stage": { + "type": "string", + "enum": [ + "EXPERIMENTAL", + "BETA", + "PULL_REQUEST", + "PRODUCTION", + "DEVELOPMENT" + ] + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Backend": { + "type": "object", + "additionalProperties": false, + "properties": { + "StackArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + } + }, + "EnvironmentVariable": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "maxLength": 255, + "pattern": "(?s).*" + }, + "Value": { + "type": "string", + "maxLength": 5500, + "pattern": "(?s).*" + } + }, + "required": [ + "Name", + "Value" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "insertionOrder": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "BasicAuthConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "EnableBasicAuth": { + "type": "boolean" + }, + "Username": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Password": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Username", + "Password" + ] + } + }, + "required": [ + "AppId", + "BranchName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AppId", + "/properties/BranchName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/BasicAuthConfig" + ], + "handlers": { + "create": { + "permissions": [ + "amplify:GetBranch", + "amplify:CreateBranch", + "amplify:TagResource", + "codecommit:GetRepository", + "codecommit:PutRepositoryTriggers", + "codecommit:GetRepositoryTriggers", + "s3:GetObject", + "s3:GetObjectAcl", + "s3:PutObject", + "s3:PutObjectAcl", + "sns:CreateTopic", + "sns:Subscribe", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "amplify:GetBranch", + "amplify:DeleteBranch", + "codecommit:GetRepository", + "codecommit:GetRepositoryTriggers", + "sns:Unsubscribe", + "iam:PassRole" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "AppId": { + "$ref": "resource-schema.json#/properties/AppId" + } + }, + "required": [ + "AppId" + ] + }, + "permissions": [ + "amplify:GetBranch", + "amplify:ListBranches", + "amplify:ListTagsForResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "amplify:GetBranch", + "amplify:ListTagsForResource", + "codecommit:GetRepository", + "codecommit:GetRepositoryTriggers", + "s3:GetObject", + "s3:GetObjectAcl", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "amplify:GetBranch", + "amplify:UpdateBranch", + "amplify:ListTagsForResource", + "amplify:TagResource", + "amplify:UntagResource", + "codecommit:GetRepository", + "codecommit:PutRepositoryTriggers", + "codecommit:GetRepositoryTriggers", + "s3:GetObject", + "s3:GetObjectAcl", + "s3:PutObject", + "s3:PutObjectAcl", + "sns:CreateTopic", + "sns:Subscribe", + "sns:Unsubscribe", + "iam:PassRole" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/amplify/domain.json b/internal/aws/cfn/schemas/aws/amplify/domain.json new file mode 100644 index 00000000..48d65b3d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amplify/domain.json @@ -0,0 +1,192 @@ +{ + "typeName": "AWS::Amplify::Domain", + "description": "The AWS::Amplify::Domain resource allows you to connect a custom domain to your app.", + "additionalProperties": false, + "properties": { + "AppId": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "pattern": "d[a-z0-9]+" + }, + "Arn": { + "type": "string", + "maxLength": 1000, + "pattern": "(?s).*" + }, + "AutoSubDomainCreationPatterns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "(?s).+" + } + }, + "AutoSubDomainIAMRole": { + "type": "string", + "pattern": "^$|^arn:.+:iam::\\d{12}:role.+", + "maxLength": 1000 + }, + "CertificateRecord": { + "type": "string", + "maxLength": 1000 + }, + "Certificate": { + "$ref": "#/definitions/Certificate" + }, + "CertificateSettings": { + "$ref": "#/definitions/CertificateSettings" + }, + "DomainName": { + "type": "string", + "pattern": "^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])(\\.)?$", + "maxLength": 255 + }, + "DomainStatus": { + "type": "string" + }, + "UpdateStatus": { + "type": "string" + }, + "EnableAutoSubDomain": { + "type": "boolean" + }, + "StatusReason": { + "type": "string", + "maxLength": 1000 + }, + "SubDomainSettings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SubDomainSetting" + }, + "maxItems": 255 + } + }, + "definitions": { + "CertificateSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateType": { + "type": "string", + "enum": [ + "AMPLIFY_MANAGED", + "CUSTOM" + ] + }, + "CustomCertificateArn": { + "type": "string", + "pattern": "^arn:aws:acm:[a-z0-9-]+:\\d{12}:certificate\\/.+$" + } + } + }, + "Certificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateType": { + "type": "string", + "enum": [ + "AMPLIFY_MANAGED", + "CUSTOM" + ] + }, + "CertificateArn": { + "type": "string", + "pattern": "\"^arn:aws:acm:[a-z0-9-]+:\\d{12}:certificate\\/.+$\"" + }, + "CertificateVerificationDNSRecord": { + "type": "string", + "maxLength": 1000 + } + } + }, + "SubDomainSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "Prefix": { + "type": "string", + "maxLength": 255, + "pattern": "(?s).*" + }, + "BranchName": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "(?s).+" + } + }, + "required": [ + "Prefix", + "BranchName" + ] + } + }, + "required": [ + "AppId", + "DomainName", + "SubDomainSettings" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AppId", + "/properties/DomainName" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/DomainStatus", + "/properties/StatusReason", + "/properties/CertificateRecord" + ], + "handlers": { + "create": { + "permissions": [ + "amplify:CreateDomainAssociation", + "route53:ListHostedZones", + "route53:ChangeResourceRecordSets", + "iam:PassRole", + "amplify:TagResource" + ] + }, + "delete": { + "permissions": [ + "amplify:DeleteDomainAssociation", + "iam:PassRole", + "amplify:DeleteDomainAssociation" + ] + }, + "list": { + "permissions": [ + "amplify:ListDomainAssociations", + "iam:PassRole", + "amplify:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "amplify:GetDomainAssociation", + "route53:ListHostedZones", + "iam:PassRole", + "amplify:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "amplify:UpdateDomainAssociation", + "route53:ListHostedZones", + "route53:ChangeResourceRecordSets", + "iam:PassRole", + "amplify:ListTagsForResource", + "amplify:TagResource", + "amplify:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/amplifyuibuilder/component.json b/internal/aws/cfn/schemas/aws/amplifyuibuilder/component.json new file mode 100644 index 00000000..9582767e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amplifyuibuilder/component.json @@ -0,0 +1,583 @@ +{ + "typeName": "AWS::AmplifyUIBuilder::Component", + "description": "Definition of AWS::AmplifyUIBuilder::Component Resource Type", + "definitions": { + "ActionParameters": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/ComponentProperty" + }, + "Url": { + "$ref": "#/definitions/ComponentProperty" + }, + "Anchor": { + "$ref": "#/definitions/ComponentProperty" + }, + "Target": { + "$ref": "#/definitions/ComponentProperty" + }, + "Global": { + "$ref": "#/definitions/ComponentProperty" + }, + "Model": { + "type": "string" + }, + "Id": { + "$ref": "#/definitions/ComponentProperty" + }, + "Fields": { + "$ref": "#/definitions/ComponentProperties" + }, + "State": { + "$ref": "#/definitions/MutationActionSetStateParameter" + } + }, + "additionalProperties": false + }, + "ComponentBindingProperties": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/ComponentBindingPropertiesValue" + } + }, + "additionalProperties": false + }, + "ComponentBindingPropertiesValue": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "BindingProperties": { + "$ref": "#/definitions/ComponentBindingPropertiesValueProperties" + }, + "DefaultValue": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ComponentBindingPropertiesValueProperties": { + "type": "object", + "properties": { + "Model": { + "type": "string" + }, + "Field": { + "type": "string" + }, + "Predicates": { + "type": "array", + "items": { + "$ref": "#/definitions/Predicate" + } + }, + "UserAttribute": { + "type": "string" + }, + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + }, + "DefaultValue": { + "type": "string" + }, + "SlotName": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ComponentChild": { + "type": "object", + "properties": { + "ComponentType": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Properties": { + "$ref": "#/definitions/ComponentProperties" + }, + "Children": { + "type": "array", + "items": { + "$ref": "#/definitions/ComponentChild" + } + }, + "Events": { + "$ref": "#/definitions/ComponentEvents" + }, + "SourceId": { + "type": "string" + } + }, + "required": [ + "ComponentType", + "Name", + "Properties" + ], + "additionalProperties": false + }, + "ComponentCollectionProperties": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/ComponentDataConfiguration" + } + }, + "additionalProperties": false + }, + "ComponentConditionProperty": { + "type": "object", + "properties": { + "Property": { + "type": "string" + }, + "Field": { + "type": "string" + }, + "Operator": { + "type": "string" + }, + "Operand": { + "type": "string" + }, + "Then": { + "$ref": "#/definitions/ComponentProperty" + }, + "Else": { + "$ref": "#/definitions/ComponentProperty" + }, + "OperandType": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ComponentDataConfiguration": { + "type": "object", + "properties": { + "Model": { + "type": "string" + }, + "Sort": { + "type": "array", + "items": { + "$ref": "#/definitions/SortProperty" + } + }, + "Predicate": { + "$ref": "#/definitions/Predicate" + }, + "Identifiers": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "Model" + ], + "additionalProperties": false + }, + "ComponentEvent": { + "type": "object", + "properties": { + "Action": { + "type": "string" + }, + "Parameters": { + "$ref": "#/definitions/ActionParameters" + }, + "BindingEvent": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ComponentEvents": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/ComponentEvent" + } + }, + "additionalProperties": false + }, + "ComponentOverrides": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/ComponentOverridesValue" + } + }, + "additionalProperties": false + }, + "ComponentOverridesValue": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ComponentProperties": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/ComponentProperty" + } + }, + "additionalProperties": false + }, + "ComponentProperty": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "BindingProperties": { + "$ref": "#/definitions/ComponentPropertyBindingProperties" + }, + "CollectionBindingProperties": { + "$ref": "#/definitions/ComponentPropertyBindingProperties" + }, + "DefaultValue": { + "type": "string" + }, + "Model": { + "type": "string" + }, + "Bindings": { + "$ref": "#/definitions/FormBindings" + }, + "Event": { + "type": "string" + }, + "UserAttribute": { + "type": "string" + }, + "Concat": { + "type": "array", + "items": { + "$ref": "#/definitions/ComponentProperty" + } + }, + "Condition": { + "$ref": "#/definitions/ComponentConditionProperty" + }, + "Configured": { + "type": "boolean" + }, + "Type": { + "type": "string" + }, + "ImportedValue": { + "type": "string" + }, + "ComponentName": { + "type": "string" + }, + "Property": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ComponentPropertyBindingProperties": { + "type": "object", + "properties": { + "Property": { + "type": "string" + }, + "Field": { + "type": "string" + } + }, + "required": [ + "Property" + ], + "additionalProperties": false + }, + "ComponentVariant": { + "type": "object", + "properties": { + "VariantValues": { + "$ref": "#/definitions/ComponentVariantValues" + }, + "Overrides": { + "$ref": "#/definitions/ComponentOverrides" + } + }, + "additionalProperties": false + }, + "ComponentVariantValues": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "FormBindingElement": { + "type": "object", + "properties": { + "Element": { + "type": "string" + }, + "Property": { + "type": "string" + } + }, + "required": [ + "Element", + "Property" + ], + "additionalProperties": false + }, + "FormBindings": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/FormBindingElement" + } + }, + "additionalProperties": false + }, + "MutationActionSetStateParameter": { + "type": "object", + "properties": { + "ComponentName": { + "type": "string" + }, + "Property": { + "type": "string" + }, + "Set": { + "$ref": "#/definitions/ComponentProperty" + } + }, + "required": [ + "ComponentName", + "Property", + "Set" + ], + "additionalProperties": false + }, + "Predicate": { + "type": "object", + "properties": { + "Or": { + "type": "array", + "items": { + "$ref": "#/definitions/Predicate" + } + }, + "And": { + "type": "array", + "items": { + "$ref": "#/definitions/Predicate" + } + }, + "Field": { + "type": "string" + }, + "Operator": { + "type": "string" + }, + "Operand": { + "type": "string" + }, + "OperandType": { + "type": "string", + "pattern": "^boolean|string|number$" + } + }, + "additionalProperties": false + }, + "SortDirection": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + }, + "SortProperty": { + "type": "object", + "properties": { + "Field": { + "type": "string" + }, + "Direction": { + "$ref": "#/definitions/SortDirection" + } + }, + "required": [ + "Direction", + "Field" + ], + "additionalProperties": false + }, + "Tags": { + "type": "object", + "patternProperties": { + "^(?!aws:)[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "additionalProperties": false + } + }, + "properties": { + "AppId": { + "type": "string" + }, + "BindingProperties": { + "$ref": "#/definitions/ComponentBindingProperties" + }, + "Children": { + "type": "array", + "items": { + "$ref": "#/definitions/ComponentChild" + } + }, + "CollectionProperties": { + "$ref": "#/definitions/ComponentCollectionProperties" + }, + "ComponentType": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "CreatedAt": { + "type": "string", + "format": "date-time" + }, + "EnvironmentName": { + "type": "string" + }, + "Events": { + "$ref": "#/definitions/ComponentEvents" + }, + "Id": { + "type": "string" + }, + "ModifiedAt": { + "type": "string", + "format": "date-time" + }, + "Name": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "Overrides": { + "$ref": "#/definitions/ComponentOverrides" + }, + "Properties": { + "$ref": "#/definitions/ComponentProperties" + }, + "SchemaVersion": { + "type": "string" + }, + "SourceId": { + "type": "string" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "Variants": { + "type": "array", + "items": { + "$ref": "#/definitions/ComponentVariant" + } + } + }, + "createOnlyProperties": [ + "/properties/AppId", + "/properties/EnvironmentName" + ], + "readOnlyProperties": [ + "/properties/CreatedAt", + "/properties/Id", + "/properties/ModifiedAt" + ], + "primaryIdentifier": [ + "/properties/AppId", + "/properties/EnvironmentName", + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:CreateComponent", + "amplifyuibuilder:GetComponent", + "amplifyuibuilder:TagResource" + ] + }, + "read": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:GetComponent" + ] + }, + "update": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:GetComponent", + "amplifyuibuilder:TagResource", + "amplifyuibuilder:UntagResource", + "amplifyuibuilder:UpdateComponent" + ] + }, + "delete": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:DeleteComponent", + "amplifyuibuilder:GetComponent", + "amplifyuibuilder:UntagResource" + ] + }, + "list": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:ListComponents" + ], + "handlerSchema": { + "properties": { + "AppId": { + "$ref": "resource-schema.json#/properties/AppId" + }, + "EnvironmentName": { + "$ref": "resource-schema.json#/properties/EnvironmentName" + } + }, + "required": [ + "AppId", + "EnvironmentName" + ] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplifyuibuilder", + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/amplifyuibuilder/form.json b/internal/aws/cfn/schemas/aws/amplifyuibuilder/form.json new file mode 100644 index 00000000..82776674 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amplifyuibuilder/form.json @@ -0,0 +1,597 @@ +{ + "typeName": "AWS::AmplifyUIBuilder::Form", + "description": "Definition of AWS::AmplifyUIBuilder::Form Resource Type", + "definitions": { + "FieldConfig": { + "type": "object", + "properties": { + "Label": { + "type": "string" + }, + "Position": { + "$ref": "#/definitions/FieldPosition" + }, + "Excluded": { + "type": "boolean" + }, + "InputType": { + "$ref": "#/definitions/FieldInputConfig" + }, + "Validations": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldValidationConfiguration" + } + } + }, + "additionalProperties": false + }, + "FieldInputConfig": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Required": { + "type": "boolean" + }, + "ReadOnly": { + "type": "boolean" + }, + "Placeholder": { + "type": "string" + }, + "DefaultValue": { + "type": "string" + }, + "DescriptiveText": { + "type": "string" + }, + "DefaultChecked": { + "type": "boolean" + }, + "DefaultCountryCode": { + "type": "string" + }, + "ValueMappings": { + "$ref": "#/definitions/ValueMappings" + }, + "Name": { + "type": "string" + }, + "MinValue": { + "type": "number" + }, + "MaxValue": { + "type": "number" + }, + "Step": { + "type": "number" + }, + "Value": { + "type": "string" + }, + "IsArray": { + "type": "boolean" + }, + "FileUploaderConfig": { + "$ref": "#/definitions/FileUploaderFieldConfig" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "FieldPosition": { + "oneOf": [ + { + "type": "object", + "title": "Fixed", + "properties": { + "Fixed": { + "$ref": "#/definitions/FixedPosition" + } + }, + "required": [ + "Fixed" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "RightOf", + "properties": { + "RightOf": { + "type": "string" + } + }, + "required": [ + "RightOf" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "Below", + "properties": { + "Below": { + "type": "string" + } + }, + "required": [ + "Below" + ], + "additionalProperties": false + } + ] + }, + "FieldValidationConfiguration": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "StrValues": { + "type": "array", + "items": { + "type": "string" + } + }, + "NumValues": { + "type": "array", + "items": { + "type": "number" + } + }, + "ValidationMessage": { + "type": "string" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "FieldsMap": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/FieldConfig" + } + }, + "additionalProperties": false + }, + "FileUploaderFieldConfig": { + "type": "object", + "properties": { + "AccessLevel": { + "$ref": "#/definitions/StorageAccessLevel" + }, + "AcceptedFileTypes": { + "type": "array", + "items": { + "type": "string" + } + }, + "ShowThumbnails": { + "type": "boolean" + }, + "IsResumable": { + "type": "boolean" + }, + "MaxFileCount": { + "type": "number" + }, + "MaxSize": { + "type": "number" + } + }, + "required": [ + "AcceptedFileTypes", + "AccessLevel" + ], + "additionalProperties": false + }, + "FixedPosition": { + "type": "string", + "enum": [ + "first" + ] + }, + "FormActionType": { + "type": "string", + "enum": [ + "create", + "update" + ] + }, + "FormButton": { + "type": "object", + "properties": { + "Excluded": { + "type": "boolean" + }, + "Children": { + "type": "string" + }, + "Position": { + "$ref": "#/definitions/FieldPosition" + } + }, + "additionalProperties": false + }, + "FormButtonsPosition": { + "type": "string", + "enum": [ + "top", + "bottom", + "top_and_bottom" + ] + }, + "FormCTA": { + "type": "object", + "properties": { + "Position": { + "$ref": "#/definitions/FormButtonsPosition" + }, + "Clear": { + "$ref": "#/definitions/FormButton" + }, + "Cancel": { + "$ref": "#/definitions/FormButton" + }, + "Submit": { + "$ref": "#/definitions/FormButton" + } + }, + "additionalProperties": false + }, + "FormDataSourceType": { + "type": "string", + "enum": [ + "DataStore", + "Custom" + ] + }, + "FormDataTypeConfig": { + "type": "object", + "properties": { + "DataSourceType": { + "$ref": "#/definitions/FormDataSourceType" + }, + "DataTypeName": { + "type": "string" + } + }, + "required": [ + "DataSourceType", + "DataTypeName" + ], + "additionalProperties": false + }, + "FormInputBindingProperties": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/FormInputBindingPropertiesValue" + } + }, + "additionalProperties": false + }, + "FormInputBindingPropertiesValue": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "BindingProperties": { + "$ref": "#/definitions/FormInputBindingPropertiesValueProperties" + } + }, + "additionalProperties": false + }, + "FormInputBindingPropertiesValueProperties": { + "type": "object", + "properties": { + "Model": { + "type": "string" + } + }, + "additionalProperties": false + }, + "FormInputValueProperty": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "BindingProperties": { + "$ref": "#/definitions/FormInputValuePropertyBindingProperties" + }, + "Concat": { + "type": "array", + "items": { + "$ref": "#/definitions/FormInputValueProperty" + } + } + }, + "additionalProperties": false + }, + "FormInputValuePropertyBindingProperties": { + "type": "object", + "properties": { + "Property": { + "type": "string" + }, + "Field": { + "type": "string" + } + }, + "required": [ + "Property" + ], + "additionalProperties": false + }, + "FormStyle": { + "type": "object", + "properties": { + "HorizontalGap": { + "$ref": "#/definitions/FormStyleConfig" + }, + "VerticalGap": { + "$ref": "#/definitions/FormStyleConfig" + }, + "OuterPadding": { + "$ref": "#/definitions/FormStyleConfig" + } + }, + "additionalProperties": false + }, + "FormStyleConfig": { + "oneOf": [ + { + "type": "object", + "title": "TokenReference", + "properties": { + "TokenReference": { + "type": "string" + } + }, + "required": [ + "TokenReference" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "Value", + "properties": { + "Value": { + "type": "string" + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + } + ] + }, + "LabelDecorator": { + "type": "string", + "enum": [ + "required", + "optional", + "none" + ] + }, + "SectionalElement": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Position": { + "$ref": "#/definitions/FieldPosition" + }, + "Text": { + "type": "string" + }, + "Level": { + "type": "number" + }, + "Orientation": { + "type": "string" + }, + "Excluded": { + "type": "boolean" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "SectionalElementMap": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/SectionalElement" + } + }, + "additionalProperties": false + }, + "StorageAccessLevel": { + "type": "string", + "enum": [ + "public", + "protected", + "private" + ] + }, + "Tags": { + "type": "object", + "patternProperties": { + "^(?!aws:)[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "ValueMapping": { + "type": "object", + "properties": { + "DisplayValue": { + "$ref": "#/definitions/FormInputValueProperty" + }, + "Value": { + "$ref": "#/definitions/FormInputValueProperty" + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "ValueMappings": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/ValueMapping" + } + }, + "BindingProperties": { + "$ref": "#/definitions/FormInputBindingProperties" + } + }, + "required": [ + "Values" + ], + "additionalProperties": false + } + }, + "properties": { + "AppId": { + "type": "string" + }, + "Cta": { + "$ref": "#/definitions/FormCTA" + }, + "DataType": { + "$ref": "#/definitions/FormDataTypeConfig" + }, + "EnvironmentName": { + "type": "string" + }, + "Fields": { + "$ref": "#/definitions/FieldsMap" + }, + "FormActionType": { + "$ref": "#/definitions/FormActionType" + }, + "Id": { + "type": "string" + }, + "LabelDecorator": { + "$ref": "#/definitions/LabelDecorator" + }, + "Name": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "SchemaVersion": { + "type": "string" + }, + "SectionalElements": { + "$ref": "#/definitions/SectionalElementMap" + }, + "Style": { + "$ref": "#/definitions/FormStyle" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "createOnlyProperties": [ + "/properties/AppId", + "/properties/EnvironmentName" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/AppId", + "/properties/EnvironmentName", + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:CreateForm", + "amplifyuibuilder:GetForm", + "amplifyuibuilder:TagResource", + "amplifyuibuilder:UntagResource" + ] + }, + "read": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:GetForm", + "amplifyuibuilder:TagResource" + ] + }, + "update": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:GetForm", + "amplifyuibuilder:TagResource", + "amplifyuibuilder:UntagResource", + "amplifyuibuilder:UpdateForm" + ] + }, + "delete": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:DeleteForm", + "amplifyuibuilder:TagResource", + "amplifyuibuilder:UntagResource" + ] + }, + "list": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:ListForms" + ], + "handlerSchema": { + "properties": { + "AppId": { + "$ref": "resource-schema.json#/properties/AppId" + }, + "EnvironmentName": { + "$ref": "resource-schema.json#/properties/EnvironmentName" + } + }, + "required": [ + "AppId", + "EnvironmentName" + ] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplifyuibuilder", + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/amplifyuibuilder/theme.json b/internal/aws/cfn/schemas/aws/amplifyuibuilder/theme.json new file mode 100644 index 00000000..0a0a133c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/amplifyuibuilder/theme.json @@ -0,0 +1,158 @@ +{ + "typeName": "AWS::AmplifyUIBuilder::Theme", + "description": "Definition of AWS::AmplifyUIBuilder::Theme Resource Type", + "definitions": { + "Tags": { + "type": "object", + "patternProperties": { + "^(?!aws:)[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "ThemeValue": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Children": { + "type": "array", + "items": { + "$ref": "#/definitions/ThemeValues" + } + } + }, + "additionalProperties": false + }, + "ThemeValues": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "$ref": "#/definitions/ThemeValue" + } + }, + "additionalProperties": false + } + }, + "properties": { + "AppId": { + "type": "string" + }, + "CreatedAt": { + "type": "string", + "format": "date-time" + }, + "EnvironmentName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "ModifiedAt": { + "type": "string", + "format": "date-time" + }, + "Name": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "Overrides": { + "type": "array", + "items": { + "$ref": "#/definitions/ThemeValues" + } + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/ThemeValues" + } + } + }, + "createOnlyProperties": [ + "/properties/AppId", + "/properties/EnvironmentName" + ], + "readOnlyProperties": [ + "/properties/CreatedAt", + "/properties/Id", + "/properties/ModifiedAt" + ], + "primaryIdentifier": [ + "/properties/AppId", + "/properties/EnvironmentName", + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:CreateTheme", + "amplifyuibuilder:GetTheme", + "amplifyuibuilder:TagResource" + ] + }, + "read": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:GetTheme" + ] + }, + "update": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:GetTheme", + "amplifyuibuilder:TagResource", + "amplifyuibuilder:UntagResource", + "amplifyuibuilder:UpdateTheme" + ] + }, + "delete": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:DeleteTheme", + "amplifyuibuilder:UntagResource" + ] + }, + "list": { + "permissions": [ + "amplify:GetApp", + "amplifyuibuilder:ListThemes" + ], + "handlerSchema": { + "properties": { + "AppId": { + "$ref": "resource-schema.json#/properties/AppId" + }, + "EnvironmentName": { + "$ref": "resource-schema.json#/properties/EnvironmentName" + } + }, + "required": [ + "AppId", + "EnvironmentName" + ] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplifyuibuilder", + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/account.json b/internal/aws/cfn/schemas/aws/apigateway/account.json new file mode 100644 index 00000000..750d1a21 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/account.json @@ -0,0 +1,46 @@ +{ + "typeName": "AWS::ApiGateway::Account", + "description": "The ``AWS::ApiGateway::Account`` resource specifies the IAM role that Amazon API Gateway uses to write API logs to Amazon CloudWatch Logs. To avoid overwriting other roles, you should only have one ``AWS::ApiGateway::Account`` resource per region per account.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "Id": { + "description": "", + "type": "string" + }, + "CloudWatchRoleArn": { + "description": "The ARN of an Amazon CloudWatch role for the current Account.", + "type": "string" + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:PATCH", + "iam:GetRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "iam:GetRole", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/apikey.json b/internal/aws/cfn/schemas/aws/apigateway/apikey.json new file mode 100644 index 00000000..77d15d47 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/apikey.json @@ -0,0 +1,139 @@ +{ + "typeName": "AWS::ApiGateway::ApiKey", + "description": "The ``AWS::ApiGateway::ApiKey`` resource creates a unique key that you can distribute to clients who are executing API Gateway ``Method`` resources that require an API key. To specify which API key clients must use, map the API key with the ``RestApi`` and ``Stage`` resources that include the methods that require a key.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "APIKeyId": { + "description": "", + "type": "string" + }, + "CustomerId": { + "description": "An MKT customer identifier, when integrating with the AWS SaaS Marketplace.", + "type": "string" + }, + "Description": { + "description": "The description of the ApiKey.", + "type": "string" + }, + "Enabled": { + "description": "Specifies whether the ApiKey can be used by callers.", + "default": false, + "type": "boolean" + }, + "GenerateDistinctId": { + "description": "Specifies whether (``true``) or not (``false``) the key identifier is distinct from the created API key value. This parameter is deprecated and should not be used.", + "type": "boolean" + }, + "Name": { + "description": "A name for the API key. If you don't specify a name, CFN generates a unique physical ID and uses that ID for the API key name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html).\n If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.", + "type": "string" + }, + "StageKeys": { + "description": "DEPRECATED FOR USAGE PLANS - Specifies stages associated with the API key.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/StageKey" + } + }, + "Tags": { + "description": "The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with ``aws:``. The tag value can be up to 256 characters.", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Value": { + "description": "Specifies a value of the API key.", + "type": "string" + } + }, + "definitions": { + "StageKey": { + "type": "object", + "additionalProperties": false, + "properties": { + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + }, + "StageName": { + "description": "The stage name associated with the stage key.", + "type": "string" + } + }, + "description": "``StageKey`` is a property of the [AWS::ApiGateway::ApiKey](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html) resource that specifies the stage to associate with the API key. This association allows only clients with the key to make requests to methods in that stage." + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "description": "" + } + }, + "createOnlyProperties": [ + "/properties/GenerateDistinctId", + "/properties/Name", + "/properties/Value" + ], + "writeOnlyProperties": [ + "/properties/GenerateDistinctId" + ], + "primaryIdentifier": [ + "/properties/APIKeyId" + ], + "readOnlyProperties": [ + "/properties/APIKeyId" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PATCH", + "apigateway:PUT", + "apigateway:DELETE" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE", + "apigateway:GET" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/authorizer.json b/internal/aws/cfn/schemas/aws/apigateway/authorizer.json new file mode 100644 index 00000000..6f61669e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/authorizer.json @@ -0,0 +1,118 @@ +{ + "typeName": "AWS::ApiGateway::Authorizer", + "description": "The ``AWS::ApiGateway::Authorizer`` resource creates an authorization layer that API Gateway activates for methods that have authorization enabled. API Gateway activates the authorizer when a client calls those methods.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "properties": { + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + }, + "AuthorizerId": { + "type": "string", + "description": "" + }, + "AuthType": { + "description": "Optional customer-defined field, used in OpenAPI imports and exports without functional impact.", + "type": "string" + }, + "AuthorizerCredentials": { + "description": "Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, specify null.", + "type": "string" + }, + "AuthorizerResultTtlInSeconds": { + "description": "The TTL in seconds of cached authorizer results. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway will cache authorizer responses. If this field is not set, the default value is 300. The maximum value is 3600, or 1 hour.", + "type": "integer" + }, + "AuthorizerUri": { + "description": "Specifies the authorizer's Uniform Resource Identifier (URI). For ``TOKEN`` or ``REQUEST`` authorizers, this must be a well-formed Lambda function URI, for example, ``arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations``. In general, the URI has this form ``arn:aws:apigateway:{region}:lambda:path/{service_api}``, where ``{region}`` is the same as the region hosting the Lambda function, ``path`` indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial ``/``. For Lambda functions, this is usually of the form ``/2015-03-31/functions/[FunctionARN]/invocations``.", + "type": "string" + }, + "IdentitySource": { + "description": "The identity source for which authorization is requested. For a ``TOKEN`` or ``COGNITO_USER_POOLS`` authorizer, this is required and specifies the request header mapping expression for the custom header holding the authorization token submitted by the client. For example, if the token header name is ``Auth``, the header mapping expression is ``method.request.header.Auth``. For the ``REQUEST`` authorizer, this is required when authorization caching is enabled. The value is a comma-separated string of one or more mapping expressions of the specified request parameters. For example, if an ``Auth`` header, a ``Name`` query string parameter are defined as identity sources, this value is ``method.request.header.Auth, method.request.querystring.Name``. These parameters will be used to derive the authorization caching key and to perform runtime validation of the ``REQUEST`` authorizer by verifying all of the identity-related request parameters are present, not null and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function, otherwise, it returns a 401 Unauthorized response without calling the Lambda function. The valid value is a string of comma-separated mapping expressions of the specified request parameters. When the authorization caching is not enabled, this property is optional.", + "type": "string" + }, + "IdentityValidationExpression": { + "description": "A validation expression for the incoming identity token. For ``TOKEN`` authorizers, this value is a regular expression. For ``COGNITO_USER_POOLS`` authorizers, API Gateway will match the ``aud`` field of the incoming token from the client against the specified regular expression. It will invoke the authorizer's Lambda function when there is a match. Otherwise, it will return a 401 Unauthorized response without calling the Lambda function. The validation expression does not apply to the ``REQUEST`` authorizer.", + "type": "string" + }, + "Name": { + "description": "The name of the authorizer.", + "type": "string" + }, + "ProviderARNs": { + "description": "A list of the Amazon Cognito user pool ARNs for the ``COGNITO_USER_POOLS`` authorizer. Each element is of this format: ``arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}``. For a ``TOKEN`` or ``REQUEST`` authorizer, this is not defined.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "Type": { + "description": "The authorizer type. Valid values are ``TOKEN`` for a Lambda function using a single authorization token submitted in a custom header, ``REQUEST`` for a Lambda function using incoming request parameters, and ``COGNITO_USER_POOLS`` for using an Amazon Cognito user pool.", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "RestApiId", + "Type", + "Name" + ], + "createOnlyProperties": [ + "/properties/RestApiId" + ], + "primaryIdentifier": [ + "/properties/RestApiId", + "/properties/AuthorizerId" + ], + "readOnlyProperties": [ + "/properties/AuthorizerId" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PATCH", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/basepathmapping.json b/internal/aws/cfn/schemas/aws/apigateway/basepathmapping.json new file mode 100644 index 00000000..d6b2370e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/basepathmapping.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::ApiGateway::BasePathMapping", + "description": "The ``AWS::ApiGateway::BasePathMapping`` resource creates a base path that clients who call your API must use in the invocation URL.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "BasePath": { + "type": "string", + "description": "The base path name that callers of the API must provide as part of the URL after the domain name." + }, + "DomainName": { + "type": "string", + "description": "The domain name of the BasePathMapping resource to be described." + }, + "RestApiId": { + "type": "string", + "description": "The string identifier of the associated RestApi." + }, + "Stage": { + "type": "string", + "description": "The name of the associated stage." + } + }, + "required": [ + "DomainName" + ], + "createOnlyProperties": [ + "/properties/DomainName", + "/properties/BasePath" + ], + "primaryIdentifier": [ + "/properties/DomainName", + "/properties/BasePath" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE", + "apigateway:PATCH" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DomainName": { + "$ref": "resource-schema.json#/properties/DomainName" + } + }, + "required": [ + "DomainName" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/clientcertificate.json b/internal/aws/cfn/schemas/aws/apigateway/clientcertificate.json new file mode 100644 index 00000000..b6bcaa17 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/clientcertificate.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::ApiGateway::ClientCertificate", + "description": "The ``AWS::ApiGateway::ClientCertificate`` resource creates a client certificate that API Gateway uses to configure client-side SSL authentication for sending requests to the integration endpoint.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "ClientCertificateId": { + "description": "", + "type": "string" + }, + "Description": { + "description": "The description of the client certificate.", + "type": "string" + }, + "Tags": { + "description": "The collection of tags. Each tag element is associated with a given resource.", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ], + "description": "" + } + }, + "primaryIdentifier": [ + "/properties/ClientCertificateId" + ], + "readOnlyProperties": [ + "/properties/ClientCertificateId" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PATCH", + "apigateway:PUT", + "apigateway:DELETE" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/deployment.json b/internal/aws/cfn/schemas/aws/apigateway/deployment.json new file mode 100644 index 00000000..f556ecbd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/deployment.json @@ -0,0 +1,328 @@ +{ + "typeName": "AWS::ApiGateway::Deployment", + "description": "The ``AWS::ApiGateway::Deployment`` resource deploys an API Gateway ``RestApi`` resource to a stage so that clients can call the API over the internet. The stage acts as an environment.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "DeploymentId": { + "type": "string", + "description": "" + }, + "DeploymentCanarySettings": { + "$ref": "#/definitions/DeploymentCanarySettings", + "description": "The input configuration for a canary deployment." + }, + "Description": { + "type": "string", + "description": "The description for the Deployment resource to create." + }, + "RestApiId": { + "type": "string", + "description": "The string identifier of the associated RestApi." + }, + "StageDescription": { + "$ref": "#/definitions/StageDescription", + "description": "The description of the Stage resource for the Deployment resource to create. To specify a stage description, you must also provide a stage name." + }, + "StageName": { + "type": "string", + "description": "The name of the Stage resource for the Deployment resource to create." + } + }, + "definitions": { + "StageDescription": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccessLogSetting": { + "description": "Specifies settings for logging access in this stage.", + "$ref": "#/definitions/AccessLogSetting" + }, + "CacheClusterEnabled": { + "description": "Specifies whether a cache cluster is enabled for the stage.", + "type": "boolean" + }, + "CacheClusterSize": { + "description": "The size of the stage's cache cluster. For more information, see [cacheClusterSize](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html#apigw-CreateStage-request-cacheClusterSize) in the *API Gateway API Reference*.", + "type": "string" + }, + "CacheDataEncrypted": { + "description": "Indicates whether the cached responses are encrypted.", + "type": "boolean" + }, + "CacheTtlInSeconds": { + "description": "The time-to-live (TTL) period, in seconds, that specifies how long API Gateway caches responses.", + "type": "integer" + }, + "CachingEnabled": { + "description": "Indicates whether responses are cached and returned for requests. You must enable a cache cluster on the stage to cache responses. For more information, see [Enable API Gateway Caching in a Stage to Enhance API Performance](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html) in the *API Gateway Developer Guide*.", + "type": "boolean" + }, + "CanarySetting": { + "description": "Specifies settings for the canary deployment in this stage.", + "$ref": "#/definitions/CanarySetting" + }, + "ClientCertificateId": { + "description": "The identifier of the client certificate that API Gateway uses to call your integration endpoints in the stage.", + "type": "string" + }, + "DataTraceEnabled": { + "description": "Indicates whether data trace logging is enabled for methods in the stage. API Gateway pushes these logs to Amazon CloudWatch Logs.", + "type": "boolean" + }, + "Description": { + "description": "A description of the purpose of the stage.", + "type": "string" + }, + "DocumentationVersion": { + "description": "The version identifier of the API documentation snapshot.", + "type": "string" + }, + "LoggingLevel": { + "description": "The logging level for this method. For valid values, see the ``loggingLevel`` property of the [MethodSetting](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodSetting.html) resource in the *Amazon API Gateway API Reference*.", + "type": "string" + }, + "MethodSettings": { + "description": "Configures settings for all of the stage's methods.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MethodSetting" + } + }, + "MetricsEnabled": { + "description": "Indicates whether Amazon CloudWatch metrics are enabled for methods in the stage.", + "type": "boolean" + }, + "Tags": { + "description": "An array of arbitrary tags (key-value pairs) to associate with the stage.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ThrottlingBurstLimit": { + "description": "The target request burst rate limit. This allows more requests through for a period of time than the target rate limit. For more information, see [Manage API Request Throttling](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html) in the *API Gateway Developer Guide*.", + "type": "integer" + }, + "ThrottlingRateLimit": { + "description": "The target request steady-state rate limit. For more information, see [Manage API Request Throttling](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html) in the *API Gateway Developer Guide*.", + "type": "number" + }, + "TracingEnabled": { + "description": "Specifies whether active tracing with X-ray is enabled for this stage.\n For more information, see [Trace API Gateway API Execution with X-Ray](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-xray.html) in the *API Gateway Developer Guide*.", + "type": "boolean" + }, + "Variables": { + "description": "A map that defines the stage variables. Variable names must consist of alphanumeric characters, and the values must match the following regular expression: ``[A-Za-z0-9-._~:/?#&=,]+``.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + } + }, + "description": "``StageDescription`` is a property of the [AWS::ApiGateway::Deployment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html) resource that configures a deployment stage." + }, + "DeploymentCanarySettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "PercentTraffic": { + "description": "The percentage (0.0-100.0) of traffic routed to the canary deployment.", + "type": "number" + }, + "StageVariableOverrides": { + "description": "A stage variable overrides used for the canary release deployment. They can override existing stage variables or add new stage variables for the canary release deployment. These stage variables are represented as a string-to-string map between stage variable names and their values.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "UseStageCache": { + "description": "A Boolean flag to indicate whether the canary release deployment uses the stage cache or not.", + "type": "boolean" + } + }, + "description": "The ``DeploymentCanarySettings`` property type specifies settings for the canary deployment." + }, + "AccessLogSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationArn": { + "description": "The Amazon Resource Name (ARN) of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with ``amazon-apigateway-``.", + "type": "string" + }, + "Format": { + "description": "A single line format of the access logs of data, as specified by selected $context variables. The format must include at least ``$context.requestId``.", + "type": "string" + } + }, + "description": "The ``AccessLogSetting`` property type specifies settings for logging access in this stage.\n ``AccessLogSetting`` is a property of the [StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type." + }, + "CanarySetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "PercentTraffic": { + "description": "The percent (0-100) of traffic diverted to a canary deployment.", + "type": "number" + }, + "StageVariableOverrides": { + "description": "Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "UseStageCache": { + "description": "A Boolean flag to indicate whether the canary deployment uses the stage cache or not.", + "type": "boolean" + } + }, + "description": "The ``CanarySetting`` property type specifies settings for the canary deployment in this stage.\n ``CanarySetting`` is a property of the [StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type." + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag", + "type": "string" + }, + "Value": { + "description": "The value for the tag", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ], + "description": "" + }, + "MethodSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "CacheDataEncrypted": { + "description": "Specifies whether the cached responses are encrypted.", + "type": "boolean" + }, + "CacheTtlInSeconds": { + "description": "Specifies the time to live (TTL), in seconds, for cached responses. The higher the TTL, the longer the response will be cached.", + "type": "integer" + }, + "CachingEnabled": { + "description": "Specifies whether responses should be cached and returned for requests. A cache cluster must be enabled on the stage for responses to be cached.", + "type": "boolean" + }, + "DataTraceEnabled": { + "description": "Specifies whether data trace logging is enabled for this method, which affects the log entries pushed to Amazon CloudWatch Logs. This can be useful to troubleshoot APIs, but can result in logging sensitive data. We recommend that you don't enable this option for production APIs.", + "type": "boolean" + }, + "HttpMethod": { + "description": "The HTTP method.", + "type": "string" + }, + "LoggingLevel": { + "description": "Specifies the logging level for this method, which affects the log entries pushed to Amazon CloudWatch Logs. Valid values are ``OFF``, ``ERROR``, and ``INFO``. Choose ``ERROR`` to write only error-level entries to CloudWatch Logs, or choose ``INFO`` to include all ``ERROR`` events as well as extra informational events.", + "type": "string" + }, + "MetricsEnabled": { + "description": "Specifies whether Amazon CloudWatch metrics are enabled for this method.", + "type": "boolean" + }, + "ResourcePath": { + "description": "The resource path for this method. Forward slashes (``/``) are encoded as ``~1`` and the initial slash must include a forward slash. For example, the path value ``/resource/subresource`` must be encoded as ``/~1resource~1subresource``. To specify the root path, use only a slash (``/``).", + "type": "string" + }, + "ThrottlingBurstLimit": { + "description": "Specifies the throttling burst limit.", + "type": "integer" + }, + "ThrottlingRateLimit": { + "description": "Specifies the throttling rate limit.", + "type": "number" + } + }, + "description": "The ``MethodSetting`` property type configures settings for all methods in a stage.\n The ``MethodSettings`` property of the [Amazon API Gateway Deployment StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type contains a list of ``MethodSetting`` property types." + } + }, + "taggable": true, + "required": [ + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/DeploymentCanarySettings", + "/properties/RestApiId" + ], + "primaryIdentifier": [ + "/properties/DeploymentId", + "/properties/RestApiId" + ], + "readOnlyProperties": [ + "/properties/DeploymentId" + ], + "writeOnlyProperties": [ + "/properties/StageName", + "/properties/StageDescription", + "/properties/DeploymentCanarySettings" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:PATCH", + "apigateway:PUT", + "apigateway:GET" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT", + "apigateway:DELETE" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/documentationpart.json b/internal/aws/cfn/schemas/aws/apigateway/documentationpart.json new file mode 100644 index 00000000..c04b24b5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/documentationpart.json @@ -0,0 +1,122 @@ +{ + "typeName": "AWS::ApiGateway::DocumentationPart", + "description": "The ``AWS::ApiGateway::DocumentationPart`` resource creates a documentation part for an API. For more information, see [Representation of API Documentation in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api-content-representation.html) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "DocumentationPartId": { + "description": "", + "type": "string" + }, + "Location": { + "description": "The location of the targeted API entity of the to-be-created documentation part.", + "$ref": "#/definitions/Location" + }, + "Properties": { + "description": "The new documentation content map of the targeted API entity. Enclosed key-value pairs are API-specific, but only OpenAPI-compliant key-value pairs can be exported and, hence, published.", + "type": "string" + }, + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + } + }, + "definitions": { + "Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "Method": { + "description": "The HTTP verb of a method. It is a valid field for the API entity types of ``METHOD``, ``PATH_PARAMETER``, ``QUERY_PARAMETER``, ``REQUEST_HEADER``, ``REQUEST_BODY``, ``RESPONSE``, ``RESPONSE_HEADER``, and ``RESPONSE_BODY``. The default value is ``*`` for any method. When an applicable child entity inherits the content of an entity of the same type with more general specifications of the other ``location`` attributes, the child entity's ``method`` attribute must match that of the parent entity exactly.", + "type": "string" + }, + "Name": { + "description": "The name of the targeted API entity. It is a valid and required field for the API entity types of ``AUTHORIZER``, ``MODEL``, ``PATH_PARAMETER``, ``QUERY_PARAMETER``, ``REQUEST_HEADER``, ``REQUEST_BODY`` and ``RESPONSE_HEADER``. It is an invalid field for any other entity type.", + "type": "string" + }, + "Path": { + "description": "The URL path of the target. It is a valid field for the API entity types of ``RESOURCE``, ``METHOD``, ``PATH_PARAMETER``, ``QUERY_PARAMETER``, ``REQUEST_HEADER``, ``REQUEST_BODY``, ``RESPONSE``, ``RESPONSE_HEADER``, and ``RESPONSE_BODY``. The default value is ``/`` for the root resource. When an applicable child entity inherits the content of another entity of the same type with more general specifications of the other ``location`` attributes, the child entity's ``path`` attribute must match that of the parent entity as a prefix.", + "type": "string" + }, + "StatusCode": { + "description": "The HTTP status code of a response. It is a valid field for the API entity types of ``RESPONSE``, ``RESPONSE_HEADER``, and ``RESPONSE_BODY``. The default value is ``*`` for any status code. When an applicable child entity inherits the content of an entity of the same type with more general specifications of the other ``location`` attributes, the child entity's ``statusCode`` attribute must match that of the parent entity exactly.", + "type": "string" + }, + "Type": { + "description": "The type of API entity to which the documentation content applies. Valid values are ``API``, ``AUTHORIZER``, ``MODEL``, ``RESOURCE``, ``METHOD``, ``PATH_PARAMETER``, ``QUERY_PARAMETER``, ``REQUEST_HEADER``, ``REQUEST_BODY``, ``RESPONSE``, ``RESPONSE_HEADER``, and ``RESPONSE_BODY``. Content inheritance does not apply to any entity of the ``API``, ``AUTHORIZER``, ``METHOD``, ``MODEL``, ``REQUEST_BODY``, or ``RESOURCE`` type.", + "type": "string", + "enum": [ + "API", + "AUTHORIZER", + "MODEL", + "RESOURCE", + "METHOD", + "PATH_PARAMETER", + "QUERY_PARAMETER", + "REQUEST_HEADER", + "REQUEST_BODY", + "RESPONSE", + "RESPONSE_HEADER", + "RESPONSE_BODY" + ] + } + }, + "description": "The ``Location`` property specifies the location of the Amazon API Gateway API entity that the documentation applies to. ``Location`` is a property of the [AWS::ApiGateway::DocumentationPart](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationpart.html) resource.\n For more information about each property, including constraints and valid values, see [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPartLocation.html) in the *Amazon API Gateway REST API Reference*." + } + }, + "required": [ + "Location", + "Properties", + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/Location", + "/properties/RestApiId" + ], + "primaryIdentifier": [ + "/properties/DocumentationPartId", + "/properties/RestApiId" + ], + "readOnlyProperties": [ + "/properties/DocumentationPartId" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:GET", + "apigateway:POST" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PATCH" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/documentationversion.json b/internal/aws/cfn/schemas/aws/apigateway/documentationversion.json new file mode 100644 index 00000000..da8da031 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/documentationversion.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::ApiGateway::DocumentationVersion", + "description": "The ``AWS::ApiGateway::DocumentationVersion`` resource creates a snapshot of the documentation for an API. For more information, see [Representation of API Documentation in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api-content-representation.html) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "definitions": {}, + "properties": { + "Description": { + "description": "A description about the new documentation snapshot.", + "type": "string" + }, + "DocumentationVersion": { + "description": "The version identifier of the to-be-updated documentation version.", + "type": "string", + "minLength": 1 + }, + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "DocumentationVersion", + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/DocumentationVersion", + "/properties/RestApiId" + ], + "primaryIdentifier": [ + "/properties/DocumentationVersion", + "/properties/RestApiId" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:GET", + "apigateway:POST" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PATCH" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/domainname.json b/internal/aws/cfn/schemas/aws/apigateway/domainname.json new file mode 100644 index 00000000..c0b50b24 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/domainname.json @@ -0,0 +1,124 @@ +{ + "typeName": "AWS::ApiGateway::DomainName", + "description": "Resource Type definition for AWS::ApiGateway::DomainName.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "EndpointConfiguration": { + "type": "object", + "properties": { + "Types": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MutualTlsAuthentication": { + "type": "object", + "properties": { + "TruststoreUri": { + "type": "string" + }, + "TruststoreVersion": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "DomainName": { + "type": "string" + }, + "DistributionDomainName": { + "type": "string" + }, + "DistributionHostedZoneId": { + "type": "string" + }, + "EndpointConfiguration": { + "$ref": "#/definitions/EndpointConfiguration" + }, + "MutualTlsAuthentication": { + "$ref": "#/definitions/MutualTlsAuthentication" + }, + "RegionalDomainName": { + "type": "string" + }, + "RegionalHostedZoneId": { + "type": "string" + }, + "CertificateArn": { + "type": "string" + }, + "RegionalCertificateArn": { + "type": "string" + }, + "OwnershipVerificationCertificateArn": { + "type": "string" + }, + "SecurityPolicy": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/DomainName" + ], + "createOnlyProperties": [ + "/properties/DomainName" + ], + "readOnlyProperties": [ + "/properties/RegionalHostedZoneId", + "/properties/DistributionDomainName", + "/properties/RegionalDomainName", + "/properties/DistributionHostedZoneId" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:*" + ] + }, + "read": { + "permissions": [ + "apigateway:*" + ] + }, + "update": { + "permissions": [ + "apigateway:*" + ] + }, + "delete": { + "permissions": [ + "apigateway:*" + ] + }, + "list": { + "permissions": [ + "apigateway:*" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/gatewayresponse.json b/internal/aws/cfn/schemas/aws/apigateway/gatewayresponse.json new file mode 100644 index 00000000..c28ad180 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/gatewayresponse.json @@ -0,0 +1,84 @@ +{ + "typeName": "AWS::ApiGateway::GatewayResponse", + "description": "The ``AWS::ApiGateway::GatewayResponse`` resource creates a gateway response for your API. For more information, see [API Gateway Responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/customize-gateway-responses.html#api-gateway-gatewayResponse-definition) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "properties": { + "Id": { + "description": "", + "type": "string" + }, + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + }, + "ResponseType": { + "description": "The response type of the associated GatewayResponse.", + "type": "string" + }, + "StatusCode": { + "description": "The HTTP status code for this GatewayResponse.", + "type": "string" + }, + "ResponseParameters": { + "description": "Response parameters (paths, query strings and headers) of the GatewayResponse as a string-to-string map of key-value pairs.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "ResponseTemplates": { + "description": "Response templates of the GatewayResponse as a string-to-string map of key-value pairs.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + } + }, + "required": [ + "ResponseType", + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/ResponseType", + "/properties/RestApiId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "taggable": false, + "handlers": { + "create": { + "permissions": [ + "apigateway:PUT", + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PUT" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/method.json b/internal/aws/cfn/schemas/aws/apigateway/method.json new file mode 100644 index 00000000..162ec421 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/method.json @@ -0,0 +1,328 @@ +{ + "typeName": "AWS::ApiGateway::Method", + "description": "The ``AWS::ApiGateway::Method`` resource creates API Gateway methods that define the parameters and body that clients must send in their requests.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "definitions": { + "Integration": { + "type": "object", + "additionalProperties": false, + "properties": { + "CacheKeyParameters": { + "description": "A list of request parameters whose values API Gateway caches. To be valid values for ``cacheKeyParameters``, these parameters must also be specified for Method ``requestParameters``.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "CacheNamespace": { + "description": "Specifies a group of related cached parameters. By default, API Gateway uses the resource ID as the ``cacheNamespace``. You can specify the same ``cacheNamespace`` across resources to return the same cached data for requests to different resources.", + "type": "string" + }, + "ConnectionId": { + "description": "The ID of the VpcLink used for the integration when ``connectionType=VPC_LINK`` and undefined, otherwise.", + "type": "string" + }, + "ConnectionType": { + "description": "The type of the network connection to the integration endpoint. The valid value is ``INTERNET`` for connections through the public routable internet or ``VPC_LINK`` for private connections between API Gateway and a network load balancer in a VPC. The default value is ``INTERNET``.", + "type": "string", + "enum": [ + "INTERNET", + "VPC_LINK" + ] + }, + "ContentHandling": { + "description": "Specifies how to handle request payload content type conversions. Supported values are ``CONVERT_TO_BINARY`` and ``CONVERT_TO_TEXT``, with the following behaviors:\n If this property is not defined, the request payload will be passed through from the method request to integration request without modification, provided that the ``passthroughBehavior`` is configured to support payload pass-through.", + "type": "string", + "enum": [ + "CONVERT_TO_BINARY", + "CONVERT_TO_TEXT" + ] + }, + "Credentials": { + "description": "Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string ``arn:aws:iam::\\*:user/\\*``. To use resource-based permissions on supported AWS services, specify null.", + "type": "string" + }, + "IntegrationHttpMethod": { + "description": "Specifies the integration's HTTP method type. For the Type property, if you specify ``MOCK``, this property is optional. For Lambda integrations, you must set the integration method to ``POST``. For all other types, you must specify this property.", + "type": "string" + }, + "IntegrationResponses": { + "description": "Specifies the integration's responses.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/IntegrationResponse" + } + }, + "PassthroughBehavior": { + "description": "Specifies how the method request body of an unmapped content type will be passed through the integration request to the back end without transformation. A content type is unmapped if no mapping template is defined in the integration or the content type does not match any of the mapped content types, as specified in ``requestTemplates``. The valid value is one of the following: ``WHEN_NO_MATCH``: passes the method request body through the integration request to the back end without transformation when the method request content type does not match any content type associated with the mapping templates defined in the integration request. ``WHEN_NO_TEMPLATES``: passes the method request body through the integration request to the back end without transformation when no mapping template is defined in the integration request. If a template is defined when this option is selected, the method request of an unmapped content-type will be rejected with an HTTP 415 Unsupported Media Type response. ``NEVER``: rejects the method request with an HTTP 415 Unsupported Media Type response when either the method request content type does not match any content type associated with the mapping templates defined in the integration request or no mapping template is defined in the integration request.", + "type": "string", + "enum": [ + "WHEN_NO_MATCH", + "WHEN_NO_TEMPLATES", + "NEVER" + ] + }, + "RequestParameters": { + "description": "A key-value map specifying request parameters that are passed from the method request to the back end. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the back end. The method request parameter value must match the pattern of ``method.request.{location}.{name}``, where ``location`` is ``querystring``, ``path``, or ``header`` and ``name`` must be a valid and unique method request parameter name.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "RequestTemplates": { + "description": "Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "TimeoutInMillis": { + "description": "Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000 milliseconds or 29 seconds.", + "type": "integer", + "minimum": 50 + }, + "Type": { + "description": "Specifies an API method integration type. The valid value is one of the following:\n For the HTTP and HTTP proxy integrations, each integration can specify a protocol (``http/https``), port and path. Standard 80 and 443 ports are supported as well as custom ports above 1024. An HTTP or HTTP proxy integration with a ``connectionType`` of ``VPC_LINK`` is referred to as a private integration and uses a VpcLink to connect API Gateway to a network load balancer of a VPC.", + "type": "string", + "enum": [ + "AWS", + "AWS_PROXY", + "HTTP", + "HTTP_PROXY", + "MOCK" + ] + }, + "Uri": { + "description": "Specifies Uniform Resource Identifier (URI) of the integration endpoint.\n For ``HTTP`` or ``HTTP_PROXY`` integrations, the URI must be a fully formed, encoded HTTP(S) URL according to the RFC-3986 specification for standard integrations. If ``connectionType`` is ``VPC_LINK`` specify the Network Load Balancer DNS name. For ``AWS`` or ``AWS_PROXY`` integrations, the URI is of the form ``arn:aws:apigateway:{region}:{subdomain.service|service}:path|action/{service_api}``. Here, {Region} is the API Gateway region (e.g., us-east-1); {service} is the name of the integrated AWS service (e.g., s3); and {subdomain} is a designated subdomain supported by certain AWS service for fast host-name lookup. action can be used for an AWS service action-based API, using an Action={name}&{p1}={v1}&p2={v2}... query string. The ensuing {service_api} refers to a supported action {name} plus any required input parameters. Alternatively, path can be used for an AWS service path-based API. The ensuing service_api refers to the path to an AWS service resource, including the region of the integrated AWS service, if applicable. For example, for integration with the S3 API of GetObject, the uri can be either ``arn:aws:apigateway:us-west-2:s3:action/GetObject&Bucket={bucket}&Key={key}`` or ``arn:aws:apigateway:us-west-2:s3:path/{bucket}/{key}``", + "type": "string" + } + }, + "required": [ + "Type" + ], + "description": "``Integration`` is a property of the [AWS::ApiGateway::Method](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html) resource that specifies information about the target backend that a method calls." + }, + "MethodResponse": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResponseModels": { + "description": "Specifies the Model resources used for the response's content-type. Response models are represented as a key/value map, with a content-type as the key and a Model name as the value.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "ResponseParameters": { + "description": "A key-value map specifying required or optional response parameters that API Gateway can send back to the caller. A key defines a method response header and the value specifies whether the associated method response header is required or not. The expression of the key must match the pattern ``method.response.header.{name}``, where ``name`` is a valid and unique header name. API Gateway passes certain integration response data to the method response headers specified here according to the mapping you prescribe in the API's IntegrationResponse. The integration response data that can be mapped include an integration response header expressed in ``integration.response.header.{name}``, a static value enclosed within a pair of single quotes (e.g., ``'application/json'``), or a JSON expression from the back-end response payload in the form of ``integration.response.body.{JSON-expression}``, where ``JSON-expression`` is a valid JSON expression without the ``$`` prefix.)", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": [ + "boolean", + "string" + ] + } + } + }, + "StatusCode": { + "description": "The method response's status code.", + "type": "string" + } + }, + "required": [ + "StatusCode" + ], + "description": "Represents a method response of a given HTTP status code returned to the client. The method response is passed from the back end through the associated integration response that can be transformed using a mapping template." + }, + "IntegrationResponse": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContentHandling": { + "description": "Specifies how to handle response payload content type conversions. Supported values are ``CONVERT_TO_BINARY`` and ``CONVERT_TO_TEXT``, with the following behaviors:\n If this property is not defined, the response payload will be passed through from the integration response to the method response without modification.", + "type": "string", + "enum": [ + "CONVERT_TO_BINARY", + "CONVERT_TO_TEXT" + ] + }, + "ResponseParameters": { + "description": "A key-value map specifying response parameters that are passed to the method response from the back end. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of ``method.response.header.{name}``, where ``name`` is a valid and unique header name. The mapped non-static value must match the pattern of ``integration.response.header.{name}`` or ``integration.response.body.{JSON-expression}``, where ``name`` is a valid and unique response header name and ``JSON-expression`` is a valid JSON expression without the ``$`` prefix.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "ResponseTemplates": { + "description": "Specifies the templates used to transform the integration response body. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "SelectionPattern": { + "description": "Specifies the regular expression (regex) pattern used to choose an integration response based on the response from the back end. For example, if the success response returns nothing and the error response returns some string, you could use the ``.+`` regex to match error response. However, make sure that the error response does not contain any newline (``\\n``) character in such cases. If the back end is an LAMlong function, the LAMlong function error header is matched. For all other HTTP and AWS back ends, the HTTP status code is matched.", + "type": "string" + }, + "StatusCode": { + "description": "Specifies the status code that is used to map the integration response to an existing MethodResponse.", + "type": "string" + } + }, + "required": [ + "StatusCode" + ], + "description": "``IntegrationResponse`` is a property of the [Amazon API Gateway Method Integration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html) property type that specifies the response that API Gateway sends after a method's backend finishes processing a request." + } + }, + "properties": { + "ApiKeyRequired": { + "description": "A boolean flag specifying whether a valid ApiKey is required to invoke this method.", + "type": "boolean" + }, + "AuthorizationScopes": { + "description": "A list of authorization scopes configured on the method. The scopes are used with a ``COGNITO_USER_POOLS`` authorizer to authorize the method invocation. The authorization works by matching the method scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any method scopes matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the method scope is configured, the client must provide an access token instead of an identity token for authorization purposes.", + "type": "array", + "items": { + "type": "string" + } + }, + "AuthorizationType": { + "description": "The method's authorization type. This parameter is required. For valid values, see [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) in the *API Gateway API Reference*.\n If you specify the ``AuthorizerId`` property, specify ``CUSTOM`` or ``COGNITO_USER_POOLS`` for this property.", + "type": "string", + "enum": [ + "NONE", + "AWS_IAM", + "CUSTOM", + "COGNITO_USER_POOLS" + ] + }, + "AuthorizerId": { + "description": "The identifier of an authorizer to use on this method. The method's authorization type must be ``CUSTOM`` or ``COGNITO_USER_POOLS``.", + "type": "string" + }, + "HttpMethod": { + "description": "The method's HTTP verb.", + "type": "string" + }, + "Integration": { + "description": "Represents an ``HTTP``, ``HTTP_PROXY``, ``AWS``, ``AWS_PROXY``, or Mock integration.", + "$ref": "#/definitions/Integration" + }, + "MethodResponses": { + "description": "Gets a method response associated with a given HTTP status code.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MethodResponse" + } + }, + "OperationName": { + "description": "A human-friendly operation identifier for the method. For example, you can assign the ``operationName`` of ``ListPets`` for the ``GET /pets`` method in the ``PetStore`` example.", + "type": "string" + }, + "RequestModels": { + "description": "A key-value map specifying data schemas, represented by Model resources, (as the mapped value) of the request payloads of given content types (as the mapping key).", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "RequestParameters": { + "description": "A key-value map defining required or optional method request parameters that can be accepted by API Gateway. A key is a method request parameter name matching the pattern of ``method.request.{location}.{name}``, where ``location`` is ``querystring``, ``path``, or ``header`` and ``name`` is a valid and unique parameter name. The value associated with the key is a Boolean flag indicating whether the parameter is required (``true``) or optional (``false``). The method request parameter names defined here are available in Integration to be mapped to integration request parameters or templates.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": [ + "boolean", + "string" + ] + } + } + }, + "RequestValidatorId": { + "description": "The identifier of a RequestValidator for request validation.", + "type": "string" + }, + "ResourceId": { + "description": "The Resource identifier for the MethodResponse resource.", + "type": "string" + }, + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "RestApiId", + "ResourceId", + "HttpMethod" + ], + "primaryIdentifier": [ + "/properties/RestApiId", + "/properties/ResourceId", + "/properties/HttpMethod" + ], + "createOnlyProperties": [ + "/properties/RestApiId", + "/properties/ResourceId", + "/properties/HttpMethod" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:PUT", + "apigateway:GET", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE", + "apigateway:PUT", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/model.json b/internal/aws/cfn/schemas/aws/apigateway/model.json new file mode 100644 index 00000000..a241d1da --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/model.json @@ -0,0 +1,83 @@ +{ + "typeName": "AWS::ApiGateway::Model", + "description": "The ``AWS::ApiGateway::Model`` resource defines the structure of a request or response payload for an API method.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "ContentType": { + "type": "string", + "description": "The content-type for the model." + }, + "Description": { + "type": "string", + "description": "The description of the model." + }, + "Name": { + "type": "string", + "description": "A name for the model. If you don't specify a name, CFN generates a unique physical ID and uses that ID for the model name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html).\n If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name." + }, + "RestApiId": { + "type": "string", + "description": "The string identifier of the associated RestApi." + }, + "Schema": { + "description": "The schema for the model. For ``application/json`` models, this should be JSON schema draft 4 model. Do not include \"\\*/\" characters in the description of any properties because such \"\\*/\" characters may be interpreted as the closing marker for comments in some languages, such as Java or JavaScript, causing the installation of your API's SDK generated by API Gateway to fail.", + "type": [ + "object", + "string" + ] + } + }, + "required": [ + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/ContentType", + "/properties/Name", + "/properties/RestApiId" + ], + "primaryIdentifier": [ + "/properties/RestApiId", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/requestvalidator.json b/internal/aws/cfn/schemas/aws/apigateway/requestvalidator.json new file mode 100644 index 00000000..27e5b0ee --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/requestvalidator.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::ApiGateway::RequestValidator", + "description": "The ``AWS::ApiGateway::RequestValidator`` resource sets up basic validation rules for incoming requests to your API. For more information, see [Enable Basic Request Validation for an API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "RequestValidatorId": { + "description": "", + "type": "string" + }, + "Name": { + "description": "The name of this RequestValidator", + "type": "string" + }, + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + }, + "ValidateRequestBody": { + "description": "A Boolean flag to indicate whether to validate a request body according to the configured Model schema.", + "type": "boolean" + }, + "ValidateRequestParameters": { + "description": "A Boolean flag to indicate whether to validate request parameters (``true``) or not (``false``).", + "type": "boolean" + } + }, + "required": [ + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/RestApiId" + ], + "readOnlyProperties": [ + "/properties/RequestValidatorId" + ], + "primaryIdentifier": [ + "/properties/RestApiId", + "/properties/RequestValidatorId" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/resource.json b/internal/aws/cfn/schemas/aws/apigateway/resource.json new file mode 100644 index 00000000..f966d9c1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/resource.json @@ -0,0 +1,80 @@ +{ + "typeName": "AWS::ApiGateway::Resource", + "description": "The ``AWS::ApiGateway::Resource`` resource creates a resource in an API.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "ResourceId": { + "description": "", + "type": "string" + }, + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + }, + "ParentId": { + "description": "The parent resource's identifier.", + "type": "string" + }, + "PathPart": { + "description": "The last path segment for this resource.", + "type": "string" + } + }, + "taggable": false, + "required": [ + "ParentId", + "PathPart", + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/PathPart", + "/properties/ParentId", + "/properties/RestApiId" + ], + "primaryIdentifier": [ + "/properties/RestApiId", + "/properties/ResourceId" + ], + "readOnlyProperties": [ + "/properties/ResourceId" + ], + "handlers": { + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "create": { + "permissions": [ + "apigateway:POST" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PATCH" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/restapi.json b/internal/aws/cfn/schemas/aws/apigateway/restapi.json new file mode 100644 index 00000000..39cd444a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/restapi.json @@ -0,0 +1,225 @@ +{ + "typeName": "AWS::ApiGateway::RestApi", + "description": "The ``AWS::ApiGateway::RestApi`` resource creates a REST API. For more information, see [restapi:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateRestApi.html) in the *Amazon API Gateway REST API Reference*.\n On January 1, 2016, the Swagger Specification was donated to the [OpenAPI initiative](https://docs.aws.amazon.com/https://www.openapis.org/), becoming the foundation of the OpenAPI Specification.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "definitions": { + "EndpointConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Types": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "A list of endpoint types of an API (RestApi) or its custom domain name (DomainName). For an edge-optimized API and its custom domain name, the endpoint type is ``\"EDGE\"``. For a regional API and its custom domain name, the endpoint type is ``REGIONAL``. For a private API, the endpoint type is ``PRIVATE``." + }, + "VpcEndpointIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "A list of VpcEndpointIds of an API (RestApi) against which to create Route53 ALIASes. It is only supported for ``PRIVATE`` endpoint type." + } + }, + "description": "The ``EndpointConfiguration`` property type specifies the endpoint types of a REST API.\n ``EndpointConfiguration`` is a property of the [AWS::ApiGateway::RestApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html) resource." + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "description": "" + }, + "S3Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "type": "string", + "description": "The name of the S3 bucket where the OpenAPI file is stored." + }, + "ETag": { + "type": "string", + "description": "The Amazon S3 ETag (a file checksum) of the OpenAPI file. If you don't specify a value, API Gateway skips ETag validation of your OpenAPI file." + }, + "Version": { + "type": "string", + "description": "For versioning-enabled buckets, a specific version of the OpenAPI file." + }, + "Key": { + "type": "string", + "description": "The file name of the OpenAPI file (Amazon S3 object name)." + } + }, + "description": "``S3Location`` is a property of the [AWS::ApiGateway::RestApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html) resource that specifies the Amazon S3 location of a OpenAPI (formerly Swagger) file that defines a set of RESTful APIs in JSON or YAML.\n On January 1, 2016, the Swagger Specification was donated to the [OpenAPI initiative](https://docs.aws.amazon.com/https://www.openapis.org/), becoming the foundation of the OpenAPI Specification." + } + }, + "properties": { + "RestApiId": { + "type": "string", + "description": "" + }, + "RootResourceId": { + "type": "string", + "description": "" + }, + "ApiKeySourceType": { + "type": "string", + "description": "The source of the API key for metering requests according to a usage plan. Valid values are: ``HEADER`` to read the API key from the ``X-API-Key`` header of a request. ``AUTHORIZER`` to read the API key from the ``UsageIdentifierKey`` from a custom authorizer." + }, + "BinaryMediaTypes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "The list of binary media types supported by the RestApi. By default, the RestApi supports only UTF-8-encoded text payloads." + }, + "Body": { + "type": [ + "object", + "string" + ], + "description": "An OpenAPI specification that defines a set of RESTful APIs in JSON format. For YAML templates, you can also provide the specification in YAML format." + }, + "BodyS3Location": { + "$ref": "#/definitions/S3Location", + "description": "The Amazon Simple Storage Service (Amazon S3) location that points to an OpenAPI file, which defines a set of RESTful APIs in JSON or YAML format." + }, + "CloneFrom": { + "type": "string", + "description": "The ID of the RestApi that you want to clone from." + }, + "EndpointConfiguration": { + "$ref": "#/definitions/EndpointConfiguration", + "description": "A list of the endpoint types of the API. Use this property when creating an API. When importing an existing API, specify the endpoint configuration types using the ``Parameters`` property." + }, + "Description": { + "type": "string", + "description": "The description of the RestApi." + }, + "DisableExecuteApiEndpoint": { + "type": "boolean", + "description": "Specifies whether clients can invoke your API by using the default ``execute-api`` endpoint. By default, clients can invoke your API with the default ``https://{api_id}.execute-api.{region}.amazonaws.com`` endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint" + }, + "FailOnWarnings": { + "type": "boolean", + "description": "A query parameter to indicate whether to rollback the API update (``true``) or not (``false``) when a warning is encountered. The default value is ``false``." + }, + "Name": { + "type": "string", + "description": "The name of the RestApi. A name is required if the REST API is not based on an OpenAPI specification." + }, + "MinimumCompressionSize": { + "type": "integer", + "description": "A nullable integer that is used to enable compression (with non-negative between 0 and 10485760 (10M) bytes, inclusive) or disable compression (with a null value) on an API. When compression is enabled, compression or decompression is not applied on the payload if the payload size is smaller than this value. Setting it to zero allows compression for any payload size." + }, + "Mode": { + "type": "string", + "description": "This property applies only when you use OpenAPI to define your REST API. The ``Mode`` determines how API Gateway handles resource updates.\n Valid values are ``overwrite`` or ``merge``. \n For ``overwrite``, the new API definition replaces the existing one. The existing API identifier remains unchanged.\n For ``merge``, the new API definition is merged with the existing API.\n If you don't specify this property, a default value is chosen. For REST APIs created before March 29, 2021, the default is ``overwrite``. For REST APIs created after March 29, 2021, the new API definition takes precedence, but any container types such as endpoint configurations and binary media types are merged with the existing API. \n Use the default mode to define top-level ``RestApi`` properties in addition to using OpenAPI. Generally, it's preferred to use API Gateway's OpenAPI extensions to model these properties." + }, + "Policy": { + "type": [ + "object", + "string" + ], + "description": "A policy document that contains the permissions for the ``RestApi`` resource. To set the ARN for the policy, use the ``!Join`` intrinsic function with ``\"\"`` as delimiter and values of ``\"execute-api:/\"`` and ``\"*\"``." + }, + "Parameters": { + "type": [ + "object", + "string" + ], + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "description": "Custom header parameters as part of the request. For example, to exclude DocumentationParts from an imported API, set ``ignore=documentation`` as a ``parameters`` value, as in the AWS CLI command of ``aws apigateway import-rest-api --parameters ignore=documentation --body 'file:///path/to/imported-api-body.json'``." + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with ``aws:``. The tag value can be up to 256 characters." + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/RestApiId" + ], + "readOnlyProperties": [ + "/properties/RestApiId", + "/properties/RootResourceId" + ], + "writeOnlyProperties": [ + "/properties/Body", + "/properties/BodyS3Location", + "/properties/CloneFrom", + "/properties/FailOnWarnings", + "/properties/Mode", + "/properties/Parameters" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:GET", + "apigateway:POST", + "apigateway:PUT", + "apigateway:PATCH", + "apigateway:UpdateRestApiPolicy", + "s3:GetObject", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE", + "apigateway:PATCH", + "apigateway:PUT", + "apigateway:UpdateRestApiPolicy", + "s3:GetObject", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/stage.json b/internal/aws/cfn/schemas/aws/apigateway/stage.json new file mode 100644 index 00000000..02dc1fe7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/stage.json @@ -0,0 +1,261 @@ +{ + "typeName": "AWS::ApiGateway::Stage", + "description": "The ``AWS::ApiGateway::Stage`` resource creates a stage for a deployment.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "AccessLogSetting": { + "description": "Access log settings, including the access log format and access log destination ARN.", + "$ref": "#/definitions/AccessLogSetting" + }, + "CacheClusterEnabled": { + "description": "Specifies whether a cache cluster is enabled for the stage.", + "type": "boolean" + }, + "CacheClusterSize": { + "description": "The stage's cache capacity in GB. For more information about choosing a cache size, see [Enabling API caching to enhance responsiveness](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html).", + "type": "string" + }, + "CanarySetting": { + "description": "Settings for the canary deployment in this stage.", + "$ref": "#/definitions/CanarySetting" + }, + "ClientCertificateId": { + "description": "The identifier of a client certificate for an API stage.", + "type": "string" + }, + "DeploymentId": { + "description": "The identifier of the Deployment that the stage points to.", + "type": "string" + }, + "Description": { + "description": "The stage's description.", + "type": "string" + }, + "DocumentationVersion": { + "description": "The version of the associated API documentation.", + "type": "string" + }, + "MethodSettings": { + "description": "A map that defines the method settings for a Stage resource. Keys (designated as ``/{method_setting_key`` below) are method paths defined as ``{resource_path}/{http_method}`` for an individual method override, or ``/\\*/\\*`` for overriding all methods in the stage.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MethodSetting" + } + }, + "RestApiId": { + "description": "The string identifier of the associated RestApi.", + "type": "string" + }, + "StageName": { + "description": "The name of the stage is the first path segment in the Uniform Resource Identifier (URI) of a call to API Gateway. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.", + "type": "string" + }, + "Tags": { + "description": "The collection of tags. Each tag element is associated with a given resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TracingEnabled": { + "description": "Specifies whether active tracing with X-ray is enabled for the Stage.", + "type": "boolean" + }, + "Variables": { + "description": "A map (string-to-string map) that defines the stage variables, where the variable name is the key and the variable value is the value. Variable names are limited to alphanumeric characters. Values must match the following regular expression: ``[A-Za-z0-9-._~:/?#&=,]+``.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + } + }, + "definitions": { + "CanarySetting": { + "description": "Configuration settings of a canary deployment.", + "type": "object", + "additionalProperties": false, + "properties": { + "DeploymentId": { + "description": "The ID of the canary deployment.", + "type": "string" + }, + "PercentTraffic": { + "description": "The percent (0-100) of traffic diverted to a canary deployment.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "StageVariableOverrides": { + "description": "Stage variables overridden for a canary release deployment, including new stage variables introduced in the canary. These stage variables are represented as a string-to-string map between stage variable names and their values.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "UseStageCache": { + "description": "A Boolean flag to indicate whether the canary deployment uses the stage cache or not.", + "type": "boolean" + } + } + }, + "AccessLogSetting": { + "description": "The ``AccessLogSetting`` property type specifies settings for logging access in this stage.\n ``AccessLogSetting`` is a property of the [AWS::ApiGateway::Stage](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html) resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationArn": { + "description": "The Amazon Resource Name (ARN) of the CloudWatch Logs log group or Kinesis Data Firehose delivery stream to receive access logs. If you specify a Kinesis Data Firehose delivery stream, the stream name must begin with ``amazon-apigateway-``. This parameter is required to enable access logging.", + "type": "string" + }, + "Format": { + "description": "A single line format of the access logs of data, as specified by selected [$context variables](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference). The format must include at least ``$context.requestId``. This parameter is required to enable access logging.", + "type": "string" + } + } + }, + "MethodSetting": { + "description": "The ``MethodSetting`` property type configures settings for all methods in a stage.\n The ``MethodSettings`` property of the ``AWS::ApiGateway::Stage`` resource contains a list of ``MethodSetting`` property types.", + "type": "object", + "additionalProperties": false, + "properties": { + "CacheDataEncrypted": { + "description": "Specifies whether the cached responses are encrypted.", + "type": "boolean" + }, + "CacheTtlInSeconds": { + "description": "Specifies the time to live (TTL), in seconds, for cached responses. The higher the TTL, the longer the response will be cached.", + "type": "integer" + }, + "CachingEnabled": { + "description": "Specifies whether responses should be cached and returned for requests. A cache cluster must be enabled on the stage for responses to be cached.", + "type": "boolean" + }, + "DataTraceEnabled": { + "description": "Specifies whether data trace logging is enabled for this method, which affects the log entries pushed to Amazon CloudWatch Logs. This can be useful to troubleshoot APIs, but can result in logging sensitive data. We recommend that you don't enable this option for production APIs.", + "type": "boolean" + }, + "HttpMethod": { + "description": "The HTTP method. To apply settings to multiple resources and methods, specify an asterisk (``*``) for the ``HttpMethod`` and ``/*`` for the ``ResourcePath``. This parameter is required when you specify a ``MethodSetting``.", + "type": "string" + }, + "LoggingLevel": { + "description": "Specifies the logging level for this method, which affects the log entries pushed to Amazon CloudWatch Logs. Valid values are ``OFF``, ``ERROR``, and ``INFO``. Choose ``ERROR`` to write only error-level entries to CloudWatch Logs, or choose ``INFO`` to include all ``ERROR`` events as well as extra informational events.", + "type": "string" + }, + "MetricsEnabled": { + "description": "Specifies whether Amazon CloudWatch metrics are enabled for this method.", + "type": "boolean" + }, + "ResourcePath": { + "description": "The resource path for this method. Forward slashes (``/``) are encoded as ``~1`` and the initial slash must include a forward slash. For example, the path value ``/resource/subresource`` must be encoded as ``/~1resource~1subresource``. To specify the root path, use only a slash (``/``). To apply settings to multiple resources and methods, specify an asterisk (``*``) for the ``HttpMethod`` and ``/*`` for the ``ResourcePath``. This parameter is required when you specify a ``MethodSetting``.", + "type": "string" + }, + "ThrottlingBurstLimit": { + "description": "Specifies the throttling burst limit.", + "type": "integer", + "minimum": 0 + }, + "ThrottlingRateLimit": { + "description": "Specifies the throttling rate limit.", + "type": "number", + "minimum": 0 + } + } + }, + "Tag": { + "description": "", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "RestApiId" + ], + "createOnlyProperties": [ + "/properties/RestApiId", + "/properties/StageName" + ], + "primaryIdentifier": [ + "/properties/RestApiId", + "/properties/StageName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:PATCH", + "apigateway:PUT", + "apigateway:DELETE" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RestApiId": { + "$ref": "resource-schema.json#/properties/RestApiId" + } + }, + "required": [ + "RestApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/usageplan.json b/internal/aws/cfn/schemas/aws/apigateway/usageplan.json new file mode 100644 index 00000000..876619d3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/usageplan.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::ApiGateway::UsagePlan", + "description": "The ``AWS::ApiGateway::UsagePlan`` resource creates a usage plan for deployed APIs. A usage plan sets a target for the throttling and quota limits on individual client API keys. For more information, see [Creating and Using API Usage Plans in Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html) in the *API Gateway Developer Guide*.\n In some cases clients can exceed the targets that you set. Don?t rely on usage plans to control costs. Consider using [](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) to monitor costs and [](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) to manage API requests.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string", + "description": "" + }, + "ApiStages": { + "type": "array", + "description": "The associated API stages of a usage plan.", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ApiStage" + } + }, + "Description": { + "type": "string", + "description": "The description of a usage plan." + }, + "Quota": { + "$ref": "#/definitions/QuotaSettings", + "description": "The target maximum number of permitted requests per a given unit time interval." + }, + "Tags": { + "type": "array", + "description": "The collection of tags. Each tag element is associated with a given resource.", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Throttle": { + "$ref": "#/definitions/ThrottleSettings", + "description": "A map containing method level throttling information for API stage in a usage plan." + }, + "UsagePlanName": { + "type": "string", + "description": "The name of a usage plan." + } + }, + "definitions": { + "ApiStage": { + "type": "object", + "additionalProperties": false, + "properties": { + "ApiId": { + "type": "string", + "description": "API Id of the associated API stage in a usage plan." + }, + "Stage": { + "type": "string", + "description": "API stage name of the associated API stage in a usage plan." + }, + "Throttle": { + "type": "object", + "description": "Map containing method level throttling information for API stage in a usage plan.", + "additionalProperties": false, + "patternProperties": { + ".*": { + "$ref": "#/definitions/ThrottleSettings" + } + } + } + }, + "description": "API stage name of the associated API stage in a usage plan." + }, + "ThrottleSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "BurstLimit": { + "type": "integer", + "minimum": 0, + "description": "The API target request burst rate limit. This allows more requests through for a period of time than the target rate limit." + }, + "RateLimit": { + "type": "number", + "minimum": 0, + "description": "The API target request rate limit." + } + }, + "description": "``ThrottleSettings`` is a property of the [AWS::ApiGateway::UsagePlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html) resource that specifies the overall request rate (average requests per second) and burst capacity when users call your REST APIs." + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "" + }, + "QuotaSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Limit": { + "type": "integer", + "minimum": 0, + "description": "The target maximum number of requests that can be made in a given time period." + }, + "Offset": { + "type": "integer", + "minimum": 0, + "description": "The number of requests subtracted from the given limit in the initial time period." + }, + "Period": { + "type": "string", + "description": "The time period in which the limit applies. Valid values are \"DAY\", \"WEEK\" or \"MONTH\"." + } + }, + "description": "``QuotaSettings`` is a property of the [AWS::ApiGateway::UsagePlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html) resource that specifies a target for the maximum number of requests users can make to your REST APIs.\n In some cases clients can exceed the targets that you set. Don?t rely on usage plans to control costs. Consider using [](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) to monitor costs and [](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) to manage API requests." + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE", + "apigateway:PATCH", + "apigateway:PUT" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE", + "apigateway:GET", + "apigateway:PATCH" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/usageplankey.json b/internal/aws/cfn/schemas/aws/apigateway/usageplankey.json new file mode 100644 index 00000000..499c99f0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/usageplankey.json @@ -0,0 +1,78 @@ +{ + "typeName": "AWS::ApiGateway::UsagePlanKey", + "description": "The ``AWS::ApiGateway::UsagePlanKey`` resource associates an API key with a usage plan. This association determines which users the usage plan is applied to.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "additionalProperties": false, + "properties": { + "KeyId": { + "description": "The Id of the UsagePlanKey resource.", + "type": "string" + }, + "KeyType": { + "description": "The type of a UsagePlanKey resource for a plan customer.", + "type": "string", + "enum": [ + "API_KEY" + ] + }, + "UsagePlanId": { + "description": "The Id of the UsagePlan resource representing the usage plan containing the UsagePlanKey resource representing a plan customer.", + "type": "string" + }, + "Id": { + "description": "", + "type": "string" + } + }, + "taggable": false, + "required": [ + "KeyType", + "UsagePlanId", + "KeyId" + ], + "createOnlyProperties": [ + "/properties/KeyId", + "/properties/UsagePlanId", + "/properties/KeyType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE", + "apigateway:GET" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "UsagePlanId": { + "$ref": "resource-schema.json#/properties/UsagePlanId" + } + }, + "required": [ + "UsagePlanId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigateway/vpclink.json b/internal/aws/cfn/schemas/aws/apigateway/vpclink.json new file mode 100644 index 00000000..3e09a90b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigateway/vpclink.json @@ -0,0 +1,129 @@ +{ + "typeName": "AWS::ApiGateway::VpcLink", + "description": "Schema for AWS ApiGateway VpcLink", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Name": { + "description": "A name for the VPC link.", + "type": "string" + }, + "Description": { + "description": "A description of the VPC link.", + "type": "string" + }, + "Tags": { + "description": "An array of arbitrary tags (key-value pairs) to associate with the stage.", + "insertionOrder": false, + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TargetArns": { + "description": "The ARN of network load balancer of the VPC targeted by the VPC link. The network load balancer must be owned by the same AWS account of the API owner.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "VpcLinkId": { + "description": "The ID of the instance that backs VPC link.", + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Name", + "TargetArns" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:PUT", + "apigateway:GET", + "ec2:CreateVpcEndpointServiceConfiguration", + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:ModifyVpcEndpointServicePermissions" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT", + "ec2:CreateVpcEndpointServiceConfiguration", + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:ModifyVpcEndpointServicePermissions" + ] + }, + "read": { + "permissions": [ + "apigateway:GET", + "ec2:CreateVpcEndpointServiceConfiguration", + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:ModifyVpcEndpointServicePermissions" + ] + }, + "list": { + "permissions": [ + "apigateway:GET", + "ec2:CreateVpcEndpointServiceConfiguration", + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:ModifyVpcEndpointServicePermissions" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE", + "apigateway:PUT", + "ec2:CreateVpcEndpointServiceConfiguration", + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:ModifyVpcEndpointServicePermissions" + ] + } + }, + "createOnlyProperties": [ + "/properties/TargetArns" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/VpcLinkId" + ], + "readOnlyProperties": [ + "/properties/VpcLinkId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/api.json b/internal/aws/cfn/schemas/aws/apigatewayv2/api.json new file mode 100644 index 00000000..5b724c3e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/api.json @@ -0,0 +1,229 @@ +{ + "typeName": "AWS::ApiGatewayV2::Api", + "description": "The ``AWS::ApiGatewayV2::Api`` resource creates an API. WebSocket APIs and HTTP APIs are supported. For more information about WebSocket APIs, see [About WebSocket APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-overview.html) in the *API Gateway Developer Guide*. For more information about HTTP APIs, see [HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html) in the *API Gateway Developer Guide.*", + "additionalProperties": false, + "properties": { + "RouteSelectionExpression": { + "type": "string", + "description": "The route selection expression for the API. For HTTP APIs, the ``routeSelectionExpression`` must be ``${request.method} ${request.path}``. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs." + }, + "BodyS3Location": { + "$ref": "#/definitions/BodyS3Location", + "description": "The S3 location of an OpenAPI definition. Supported only for HTTP APIs. To import an HTTP API, you must specify a ``Body`` or ``BodyS3Location``. If you specify a ``Body`` or ``BodyS3Location``, don't specify CloudFormation resources such as ``AWS::ApiGatewayV2::Authorizer`` or ``AWS::ApiGatewayV2::Route``. API Gateway doesn't support the combination of OpenAPI and CloudFormation resources." + }, + "Description": { + "type": "string", + "description": "The description of the API." + }, + "ApiEndpoint": { + "type": "string", + "description": "" + }, + "BasePath": { + "type": "string", + "description": "Specifies how to interpret the base path of the API during import. Valid values are ``ignore``, ``prepend``, and ``split``. The default value is ``ignore``. To learn more, see [Set the OpenAPI basePath Property](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html). Supported only for HTTP APIs." + }, + "FailOnWarnings": { + "type": "boolean", + "description": "Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered." + }, + "DisableExecuteApiEndpoint": { + "type": "boolean", + "description": "Specifies whether clients can invoke your API by using the default ``execute-api`` endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint." + }, + "DisableSchemaValidation": { + "type": "boolean", + "description": "Avoid validating models when creating a deployment. Supported only for WebSocket APIs." + }, + "Name": { + "type": "string", + "description": "The name of the API. Required unless you specify an OpenAPI definition for ``Body`` or ``S3BodyLocation``." + }, + "Target": { + "type": "string", + "description": "This property is part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Supported only for HTTP APIs." + }, + "CredentialsArn": { + "type": "string", + "description": "This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify ``arn:aws:iam::*:user/*``. To use resource-based permissions on supported AWS services, specify ``null``. Currently, this property is not used for HTTP integrations. Supported only for HTTP APIs." + }, + "CorsConfiguration": { + "$ref": "#/definitions/Cors", + "description": "A CORS configuration. Supported only for HTTP APIs. See [Configuring CORS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html) for more information." + }, + "Version": { + "type": "string", + "description": "A version identifier for the API." + }, + "ProtocolType": { + "type": "string", + "description": "The API protocol. Valid values are ``WEBSOCKET`` or ``HTTP``. Required unless you specify an OpenAPI definition for ``Body`` or ``S3BodyLocation``." + }, + "RouteKey": { + "type": "string", + "description": "This property is part of quick create. If you don't specify a ``routeKey``, a default route of ``$default`` is created. The ``$default`` route acts as a catch-all for any request made to your API, for a particular stage. The ``$default`` route key can't be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs." + }, + "ApiId": { + "type": "string", + "description": "" + }, + "Body": { + "type": "object", + "description": "The OpenAPI definition. Supported only for HTTP APIs. To import an HTTP API, you must specify a ``Body`` or ``BodyS3Location``. If you specify a ``Body`` or ``BodyS3Location``, don't specify CloudFormation resources such as ``AWS::ApiGatewayV2::Authorizer`` or ``AWS::ApiGatewayV2::Route``. API Gateway doesn't support the combination of OpenAPI and CloudFormation resources." + }, + "Tags": { + "type": "object", + "description": "The collection of tags. Each tag element is associated with a given resource.", + "additionalProperties": false, + "patternProperties": { + ".*": { + "type": "string" + } + } + }, + "ApiKeySelectionExpression": { + "type": "string", + "description": "An API key selection expression. Supported only for WebSocket APIs. See [API Key Selection Expressions](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions)." + } + }, + "definitions": { + "BodyS3Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "Etag": { + "type": "string", + "description": "The Etag of the S3 object." + }, + "Bucket": { + "type": "string", + "description": "The S3 bucket that contains the OpenAPI definition to import. Required if you specify a ``BodyS3Location`` for an API." + }, + "Version": { + "type": "string", + "description": "The version of the S3 object." + }, + "Key": { + "type": "string", + "description": "The key of the S3 object. Required if you specify a ``BodyS3Location`` for an API." + } + }, + "description": "The ``BodyS3Location`` property specifies an S3 location from which to import an OpenAPI definition. Supported only for HTTP APIs." + }, + "Cors": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllowOrigins": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "Represents a collection of allowed origins. Supported only for HTTP APIs." + }, + "AllowCredentials": { + "type": "boolean", + "description": "Specifies whether credentials are included in the CORS request. Supported only for HTTP APIs." + }, + "ExposeHeaders": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "Represents a collection of exposed headers. Supported only for HTTP APIs." + }, + "AllowHeaders": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "Represents a collection of allowed headers. Supported only for HTTP APIs." + }, + "MaxAge": { + "type": "integer", + "description": "The number of seconds that the browser should cache preflight request results. Supported only for HTTP APIs." + }, + "AllowMethods": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "Represents a collection of allowed HTTP methods. Supported only for HTTP APIs." + } + }, + "description": "The ``Cors`` property specifies a CORS configuration for an API. Supported only for HTTP APIs. See [Configuring CORS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html) for more information." + } + }, + "createOnlyProperties": [ + "/properties/ProtocolType" + ], + "primaryIdentifier": [ + "/properties/ApiId" + ], + "readOnlyProperties": [ + "/properties/ApiId", + "/properties/ApiEndpoint" + ], + "writeOnlyProperties": [ + "/properties/BasePath", + "/properties/Body", + "/properties/BodyS3Location", + "/properties/BodyS3Location/Etag", + "/properties/BodyS3Location/Bucket", + "/properties/BodyS3Location/Version", + "/properties/BodyS3Location/Key", + "/properties/CredentialsArn", + "/properties/FailOnWarnings", + "/properties/RouteKey", + "/properties/Target", + "/properties/DisableSchemaValidation" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:PUT", + "s3:getObject" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT", + "apigateway:POST", + "s3:getObject" + ] + }, + "read": { + "permissions": [ + "apigateway:GET", + "s3:getObject" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE", + "s3:getObject" + ] + }, + "list": { + "permissions": [ + "apigateway:GET", + "s3:getObject" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/apigatewaymanagedoverrides.json b/internal/aws/cfn/schemas/aws/apigatewayv2/apigatewaymanagedoverrides.json new file mode 100644 index 00000000..9ae4eb0f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/apigatewaymanagedoverrides.json @@ -0,0 +1,136 @@ +{ + "typeName": "AWS::ApiGatewayV2::ApiGatewayManagedOverrides", + "description": "Resource Type definition for AWS::ApiGatewayV2::ApiGatewayManagedOverrides", + "additionalProperties": false, + "properties": { + "Stage": { + "$ref": "#/definitions/StageOverrides" + }, + "Integration": { + "$ref": "#/definitions/IntegrationOverrides" + }, + "Id": { + "type": "string" + }, + "ApiId": { + "type": "string" + }, + "Route": { + "$ref": "#/definitions/RouteOverrides" + } + }, + "definitions": { + "AccessLogSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationArn": { + "type": "string" + }, + "Format": { + "type": "string" + } + } + }, + "RouteSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "DetailedMetricsEnabled": { + "type": "boolean" + }, + "LoggingLevel": { + "type": "string" + }, + "DataTraceEnabled": { + "type": "boolean" + }, + "ThrottlingBurstLimit": { + "type": "integer" + }, + "ThrottlingRateLimit": { + "type": "number" + } + } + }, + "StageOverrides": { + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "AccessLogSettings": { + "$ref": "#/definitions/AccessLogSettings" + }, + "AutoDeploy": { + "type": "boolean" + }, + "RouteSettings": { + "type": "object" + }, + "StageVariables": { + "type": "object" + }, + "DefaultRouteSettings": { + "$ref": "#/definitions/RouteSettings" + } + } + }, + "RouteOverrides": { + "type": "object", + "additionalProperties": false, + "properties": { + "AuthorizationScopes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Target": { + "type": "string" + }, + "AuthorizationType": { + "type": "string" + }, + "AuthorizerId": { + "type": "string" + }, + "OperationName": { + "type": "string" + } + } + }, + "IntegrationOverrides": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimeoutInMillis": { + "type": "integer" + }, + "Description": { + "type": "string" + }, + "PayloadFormatVersion": { + "type": "string" + }, + "IntegrationMethod": { + "type": "string" + } + } + } + }, + "required": [ + "ApiId" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/apimapping.json b/internal/aws/cfn/schemas/aws/apigatewayv2/apimapping.json new file mode 100644 index 00000000..95886eb7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/apimapping.json @@ -0,0 +1,78 @@ +{ + "typeName": "AWS::ApiGatewayV2::ApiMapping", + "description": "The ``AWS::ApiGatewayV2::ApiMapping`` resource contains an API mapping. An API mapping relates a path of your custom domain name to a stage of your API. A custom domain name can have multiple API mappings, but the paths can't overlap. A custom domain can map only to APIs of the same protocol type. For more information, see [CreateApiMapping](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/domainnames-domainname-apimappings.html#CreateApiMapping) in the *Amazon API Gateway V2 API Reference*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2.git", + "properties": { + "ApiMappingId": { + "description": "", + "type": "string" + }, + "DomainName": { + "description": "The domain name.", + "type": "string" + }, + "Stage": { + "description": "The API stage.", + "type": "string" + }, + "ApiMappingKey": { + "description": "The API mapping key.", + "type": "string" + }, + "ApiId": { + "description": "The identifier of the API.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "DomainName", + "Stage", + "ApiId" + ], + "createOnlyProperties": [ + "/properties/DomainName" + ], + "primaryIdentifier": [ + "/properties/ApiMappingId", + "/properties/DomainName" + ], + "readOnlyProperties": [ + "/properties/ApiMappingId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:DELETE" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/authorizer.json b/internal/aws/cfn/schemas/aws/apigatewayv2/authorizer.json new file mode 100644 index 00000000..f5be1707 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/authorizer.json @@ -0,0 +1,144 @@ +{ + "typeName": "AWS::ApiGatewayV2::Authorizer", + "description": "The ``AWS::ApiGatewayV2::Authorizer`` resource creates an authorizer for a WebSocket API or an HTTP API. To learn more, see [Controlling and managing access to a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-control-access.html) and [Controlling and managing access to an HTTP API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-access-control.html) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "additionalProperties": false, + "properties": { + "IdentityValidationExpression": { + "type": "string", + "description": "This parameter is not used." + }, + "AuthorizerUri": { + "type": "string", + "description": "The authorizer's Uniform Resource Identifier (URI). For ``REQUEST`` authorizers, this must be a well-formed Lambda function URI, for example, ``arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations``. In general, the URI has this form: ``arn:aws:apigateway:{region}:lambda:path/{service_api}``, where *{region}* is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial ``/``. For Lambda functions, this is usually of the form ``/2015-03-31/functions/[FunctionARN]/invocations``." + }, + "AuthorizerCredentialsArn": { + "type": "string", + "description": "Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, specify null. Supported only for ``REQUEST`` authorizers." + }, + "AuthorizerType": { + "type": "string", + "description": "The authorizer type. Specify ``REQUEST`` for a Lambda function using incoming request parameters. Specify ``JWT`` to use JSON Web Tokens (supported only for HTTP APIs)." + }, + "JwtConfiguration": { + "$ref": "#/definitions/JWTConfiguration", + "description": "The ``JWTConfiguration`` property specifies the configuration of a JWT authorizer. Required for the ``JWT`` authorizer type. Supported only for HTTP APIs." + }, + "AuthorizerResultTtlInSeconds": { + "type": "integer", + "description": "The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers." + }, + "IdentitySource": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "The identity source for which authorization is requested.\n For a ``REQUEST`` authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with ``$``, for example, ``$request.header.Auth``, ``$request.querystring.Name``. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html).\n For ``JWT``, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example ``$request.header.Authorization``." + }, + "AuthorizerPayloadFormatVersion": { + "type": "string", + "description": "Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are ``1.0`` and ``2.0``. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html)." + }, + "ApiId": { + "type": "string", + "description": "The API identifier." + }, + "EnableSimpleResponses": { + "type": "boolean", + "description": "Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html)." + }, + "AuthorizerId": { + "type": "string", + "description": "" + }, + "Name": { + "type": "string", + "description": "The name of the authorizer." + } + }, + "definitions": { + "JWTConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Issuer": { + "type": "string", + "description": "The base domain of the identity provider that issues JSON Web Tokens. For example, an Amazon Cognito user pool has the following format: ``https://cognito-idp.{region}.amazonaws.com/{userPoolId}``. Required for the ``JWT`` authorizer type. Supported only for HTTP APIs." + }, + "Audience": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "A list of the intended recipients of the JWT. A valid JWT must provide an ``aud`` that matches at least one entry in this list. See [RFC 7519](https://docs.aws.amazon.com/https://tools.ietf.org/html/rfc7519#section-4.1.3). Required for the ``JWT`` authorizer type. Supported only for HTTP APIs." + } + }, + "description": "The ``JWTConfiguration`` property specifies the configuration of a JWT authorizer. Required for the ``JWT`` authorizer type. Supported only for HTTP APIs." + } + }, + "required": [ + "AuthorizerType", + "ApiId", + "Name" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/AuthorizerId", + "/properties/ApiId" + ], + "readOnlyProperties": [ + "/properties/AuthorizerId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ApiId": { + "$ref": "resource-schema.json#/properties/ApiId" + } + }, + "required": [ + "ApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/deployment.json b/internal/aws/cfn/schemas/aws/apigatewayv2/deployment.json new file mode 100644 index 00000000..0c4eda49 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/deployment.json @@ -0,0 +1,87 @@ +{ + "typeName": "AWS::ApiGatewayV2::Deployment", + "description": "The ``AWS::ApiGatewayV2::Deployment`` resource creates a deployment for an API.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "additionalProperties": false, + "properties": { + "DeploymentId": { + "type": "string", + "description": "" + }, + "Description": { + "type": "string", + "description": "The description for the deployment resource." + }, + "StageName": { + "type": "string", + "description": "The name of an existing stage to associate with the deployment." + }, + "ApiId": { + "type": "string", + "description": "The API identifier." + } + }, + "required": [ + "ApiId" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/ApiId", + "/properties/DeploymentId" + ], + "readOnlyProperties": [ + "/properties/DeploymentId" + ], + "writeOnlyProperties": [ + "/properties/StageName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ApiId": { + "$ref": "resource-schema.json#/properties/ApiId" + } + }, + "required": [ + "ApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/domainname.json b/internal/aws/cfn/schemas/aws/apigatewayv2/domainname.json new file mode 100644 index 00000000..70ce79b7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/domainname.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::ApiGatewayV2::DomainName", + "description": "The ``AWS::ApiGatewayV2::DomainName`` resource specifies a custom domain name for your API in Amazon API Gateway (API Gateway). \n You can use a custom domain name to provide a URL that's more intuitive and easier to recall. For more information about using custom domain names, see [Set up Custom Domain Name for an API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2.git", + "additionalProperties": false, + "properties": { + "MutualTlsAuthentication": { + "description": "The mutual TLS authentication configuration for a custom domain name.", + "$ref": "#/definitions/MutualTlsAuthentication" + }, + "RegionalHostedZoneId": { + "description": "", + "type": "string" + }, + "RegionalDomainName": { + "description": "", + "type": "string" + }, + "DomainName": { + "description": "The custom domain name for your API in Amazon API Gateway. Uppercase letters are not supported.", + "type": "string" + }, + "DomainNameConfigurations": { + "description": "The domain name configurations.", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/DomainNameConfiguration" + } + }, + "Tags": { + "type": "object", + "description": "The collection of tags associated with a domain name.", + "additionalProperties": false, + "patternProperties": { + ".*": { + "type": "string" + } + } + } + }, + "definitions": { + "MutualTlsAuthentication": { + "type": "object", + "additionalProperties": false, + "properties": { + "TruststoreVersion": { + "type": "string", + "description": "The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket." + }, + "TruststoreUri": { + "type": "string", + "description": "An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, ``s3://bucket-name/key-name``. The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object." + } + }, + "description": "If specified, API Gateway performs two-way authentication between the client and the server. Clients must present a trusted certificate to access your API." + }, + "DomainNameConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "OwnershipVerificationCertificateArn": { + "type": "string", + "description": "The Amazon resource name (ARN) for the public certificate issued by ACMlong. This ARN is used to validate custom domain ownership. It's required only if you configure mutual TLS and use either an ACM-imported or a private CA certificate ARN as the regionalCertificateArn." + }, + "EndpointType": { + "type": "string", + "description": "The endpoint type." + }, + "CertificateName": { + "type": "string", + "description": "The user-friendly name of the certificate that will be used by the edge-optimized endpoint for this domain name." + }, + "SecurityPolicy": { + "type": "string", + "description": "The Transport Layer Security (TLS) version of the security policy for this domain name. The valid values are ``TLS_1_0`` and ``TLS_1_2``." + }, + "CertificateArn": { + "type": "string", + "description": "An AWS-managed certificate that will be used by the edge-optimized endpoint for this domain name. AWS Certificate Manager is the only supported source." + } + }, + "description": "The ``DomainNameConfiguration`` property type specifies the configuration for an API's domain name.\n ``DomainNameConfiguration`` is a property of the [AWS::ApiGatewayV2::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html) resource." + } + }, + "required": [ + "DomainName" + ], + "createOnlyProperties": [ + "/properties/DomainName" + ], + "primaryIdentifier": [ + "/properties/DomainName" + ], + "readOnlyProperties": [ + "/properties/RegionalDomainName", + "/properties/RegionalHostedZoneId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/integration.json b/internal/aws/cfn/schemas/aws/apigatewayv2/integration.json new file mode 100644 index 00000000..db780526 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/integration.json @@ -0,0 +1,88 @@ +{ + "typeName": "AWS::ApiGatewayV2::Integration", + "description": "Resource Type definition for AWS::ApiGatewayV2::Integration", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "TemplateSelectionExpression": { + "type": "string" + }, + "ConnectionType": { + "type": "string" + }, + "ResponseParameters": { + "type": "object" + }, + "IntegrationMethod": { + "type": "string" + }, + "PassthroughBehavior": { + "type": "string" + }, + "RequestParameters": { + "type": "object" + }, + "ConnectionId": { + "type": "string" + }, + "IntegrationUri": { + "type": "string" + }, + "PayloadFormatVersion": { + "type": "string" + }, + "CredentialsArn": { + "type": "string" + }, + "RequestTemplates": { + "type": "object" + }, + "TimeoutInMillis": { + "type": "integer" + }, + "TlsConfig": { + "$ref": "#/definitions/TlsConfig" + }, + "ContentHandlingStrategy": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "IntegrationSubtype": { + "type": "string" + }, + "ApiId": { + "type": "string" + }, + "IntegrationType": { + "type": "string" + } + }, + "definitions": { + "TlsConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServerNameToVerify": { + "type": "string" + } + } + } + }, + "required": [ + "ApiId", + "IntegrationType" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/integrationresponse.json b/internal/aws/cfn/schemas/aws/apigatewayv2/integrationresponse.json new file mode 100644 index 00000000..d24c7d51 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/integrationresponse.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::ApiGatewayV2::IntegrationResponse", + "description": "The ``AWS::ApiGatewayV2::IntegrationResponse`` resource updates an integration response for an WebSocket API. For more information, see [Set up WebSocket API Integration Responses in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-integration-responses.html) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2.git", + "additionalProperties": false, + "properties": { + "IntegrationResponseId": { + "description": "", + "type": "string" + }, + "ResponseTemplates": { + "description": "The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.", + "type": "object" + }, + "TemplateSelectionExpression": { + "description": "The template selection expression for the integration response. Supported only for WebSocket APIs.", + "type": "string" + }, + "ResponseParameters": { + "description": "A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of ``method.response.header.{name}``, where name is a valid and unique header name. The mapped non-static value must match the pattern of ``integration.response.header.{name}`` or ``integration.response.body.{JSON-expression}``, where ``{name}`` is a valid and unique response header name and ``{JSON-expression}`` is a valid JSON expression without the ``$`` prefix.", + "type": "object" + }, + "ContentHandlingStrategy": { + "description": "Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are ``CONVERT_TO_BINARY`` and ``CONVERT_TO_TEXT``, with the following behaviors:\n ``CONVERT_TO_BINARY``: Converts a response payload from a Base64-encoded string to the corresponding binary blob.\n ``CONVERT_TO_TEXT``: Converts a response payload from a binary blob to a Base64-encoded string.\n If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.", + "type": "string" + }, + "IntegrationId": { + "description": "The integration ID.", + "type": "string" + }, + "IntegrationResponseKey": { + "description": "The integration response key.", + "type": "string" + }, + "ApiId": { + "description": "The API identifier.", + "type": "string" + } + }, + "required": [ + "ApiId", + "IntegrationId", + "IntegrationResponseKey" + ], + "createOnlyProperties": [ + "/properties/ApiId", + "/properties/IntegrationId" + ], + "readOnlyProperties": [ + "/properties/IntegrationResponseId" + ], + "primaryIdentifier": [ + "/properties/ApiId", + "/properties/IntegrationId", + "/properties/IntegrationResponseId" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:PUT", + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/model.json b/internal/aws/cfn/schemas/aws/apigatewayv2/model.json new file mode 100644 index 00000000..1df0ddbf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/model.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::ApiGatewayV2::Model", + "description": "The ``AWS::ApiGatewayV2::Model`` resource updates data model for a WebSocket API. For more information, see [Model Selection Expressions](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-model-selection-expressions) in the *API Gateway Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "additionalProperties": false, + "properties": { + "ModelId": { + "type": "string", + "description": "" + }, + "Description": { + "type": "string", + "description": "The description of the model." + }, + "ContentType": { + "type": "string", + "description": "The content-type for the model, for example, \"application/json\"." + }, + "Schema": { + "type": "object", + "description": "The schema for the model. For application/json models, this should be JSON schema draft 4 model." + }, + "ApiId": { + "type": "string", + "description": "The API identifier." + }, + "Name": { + "type": "string", + "description": "The name of the model." + } + }, + "required": [ + "ApiId", + "Schema", + "Name" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/ApiId", + "/properties/ModelId" + ], + "readOnlyProperties": [ + "/properties/ModelId" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ApiId": { + "$ref": "resource-schema.json#/properties/ApiId" + } + }, + "required": [ + "ApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/route.json b/internal/aws/cfn/schemas/aws/apigatewayv2/route.json new file mode 100644 index 00000000..7c478ffa --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/route.json @@ -0,0 +1,143 @@ +{ + "typeName": "AWS::ApiGatewayV2::Route", + "description": "The ``AWS::ApiGatewayV2::Route`` resource creates a route for an API.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "additionalProperties": false, + "properties": { + "RouteId": { + "type": "string", + "description": "" + }, + "RouteResponseSelectionExpression": { + "type": "string", + "description": "The route response selection expression for the route. Supported only for WebSocket APIs." + }, + "RequestModels": { + "type": "object", + "description": "The request models for the route. Supported only for WebSocket APIs." + }, + "OperationName": { + "type": "string", + "description": "The operation name for the route." + }, + "AuthorizationScopes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "The authorization scopes supported by this route." + }, + "ApiKeyRequired": { + "type": "boolean", + "description": "Specifies whether an API key is required for the route. Supported only for WebSocket APIs." + }, + "RouteKey": { + "type": "string", + "description": "The route key for the route. For HTTP APIs, the route key can be either ``$default``, or a combination of an HTTP method and resource path, for example, ``GET /pets``." + }, + "AuthorizationType": { + "type": "string", + "description": "The authorization type for the route. For WebSocket APIs, valid values are ``NONE`` for open access, ``AWS_IAM`` for using AWS IAM permissions, and ``CUSTOM`` for using a Lambda authorizer. For HTTP APIs, valid values are ``NONE`` for open access, ``JWT`` for using JSON Web Tokens, ``AWS_IAM`` for using AWS IAM permissions, and ``CUSTOM`` for using a Lambda authorizer." + }, + "ModelSelectionExpression": { + "type": "string", + "description": "The model selection expression for the route. Supported only for WebSocket APIs." + }, + "ApiId": { + "type": "string", + "description": "The API identifier." + }, + "RequestParameters": { + "type": "object", + "items": { + "$ref": "#/definitions/ParameterConstraints" + }, + "description": "The request parameters for the route. Supported only for WebSocket APIs." + }, + "Target": { + "type": "string", + "description": "The target for the route." + }, + "AuthorizerId": { + "type": "string", + "description": "The identifier of the ``Authorizer`` resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer." + } + }, + "definitions": { + "ParameterConstraints": { + "type": "object", + "properties": { + "Required": { + "type": "boolean" + } + }, + "required": [ + "Required" + ], + "additionalProperties": false, + "description": "" + } + }, + "required": [ + "RouteKey", + "ApiId" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/ApiId", + "/properties/RouteId" + ], + "readOnlyProperties": [ + "/properties/RouteId" + ], + "writeOnlyProperties": [ + "/properties/AuthorizerId", + "/properties/RequestParameters" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ApiId": { + "$ref": "resource-schema.json#/properties/ApiId" + } + }, + "required": [ + "ApiId" + ] + }, + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/routeresponse.json b/internal/aws/cfn/schemas/aws/apigatewayv2/routeresponse.json new file mode 100644 index 00000000..31d1942b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/routeresponse.json @@ -0,0 +1,112 @@ +{ + "typeName": "AWS::ApiGatewayV2::RouteResponse", + "description": "The ``AWS::ApiGatewayV2::RouteResponse`` resource creates a route response for a WebSocket API. For more information, see [Set up Route Responses for a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-route-response.html) in the *API Gateway Developer Guide*.", + "additionalProperties": false, + "properties": { + "RouteResponseKey": { + "type": "string", + "description": "The route response key." + }, + "ResponseParameters": { + "$ref": "#/definitions/RouteParameters", + "description": "The route response parameters." + }, + "RouteId": { + "type": "string", + "description": "The route ID." + }, + "ModelSelectionExpression": { + "type": "string", + "description": "The model selection expression for the route response. Supported only for WebSocket APIs." + }, + "ApiId": { + "type": "string", + "description": "The API identifier." + }, + "ResponseModels": { + "type": "object", + "description": "The response models for the route response." + }, + "RouteResponseId": { + "type": "string", + "description": "" + } + }, + "definitions": { + "ParameterConstraints": { + "type": "object", + "properties": { + "Required": { + "type": "boolean", + "description": "Specifies whether the parameter is required." + } + }, + "required": [ + "Required" + ], + "additionalProperties": false, + "description": "Specifies whether the parameter is required." + }, + "RouteParameters": { + "patternProperties": { + "^.+$": { + "$ref": "#/definitions/ParameterConstraints" + } + }, + "additionalProperties": false + } + }, + "required": [ + "RouteResponseKey", + "RouteId", + "ApiId" + ], + "createOnlyProperties": [ + "/properties/ApiId", + "/properties/RouteId" + ], + "readOnlyProperties": [ + "/properties/RouteResponseId" + ], + "primaryIdentifier": [ + "/properties/ApiId", + "/properties/RouteId", + "/properties/RouteResponseId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:PUT" + ] + }, + "read": { + "permissions": [ + "apigateway:GET" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE" + ] + }, + "list": { + "permissions": [ + "apigateway:GET" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/stage.json b/internal/aws/cfn/schemas/aws/apigatewayv2/stage.json new file mode 100644 index 00000000..ab51ec4d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/stage.json @@ -0,0 +1,95 @@ +{ + "typeName": "AWS::ApiGatewayV2::Stage", + "description": "Resource Type definition for AWS::ApiGatewayV2::Stage", + "additionalProperties": false, + "properties": { + "DeploymentId": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AutoDeploy": { + "type": "boolean" + }, + "RouteSettings": { + "type": "object" + }, + "StageName": { + "type": "string" + }, + "StageVariables": { + "type": "object" + }, + "AccessPolicyId": { + "type": "string" + }, + "ClientCertificateId": { + "type": "string" + }, + "AccessLogSettings": { + "$ref": "#/definitions/AccessLogSettings" + }, + "Id": { + "type": "string" + }, + "ApiId": { + "type": "string" + }, + "DefaultRouteSettings": { + "$ref": "#/definitions/RouteSettings" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "AccessLogSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationArn": { + "type": "string" + }, + "Format": { + "type": "string" + } + } + }, + "RouteSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "DetailedMetricsEnabled": { + "type": "boolean" + }, + "LoggingLevel": { + "type": "string" + }, + "DataTraceEnabled": { + "type": "boolean" + }, + "ThrottlingBurstLimit": { + "type": "integer" + }, + "ThrottlingRateLimit": { + "type": "number" + } + } + } + }, + "required": [ + "StageName", + "ApiId" + ], + "createOnlyProperties": [ + "/properties/StageName", + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/apigatewayv2/vpclink.json b/internal/aws/cfn/schemas/aws/apigatewayv2/vpclink.json new file mode 100644 index 00000000..78d98fa7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apigatewayv2/vpclink.json @@ -0,0 +1,110 @@ +{ + "typeName": "AWS::ApiGatewayV2::VpcLink", + "description": "The ``AWS::ApiGatewayV2::VpcLink`` resource creates a VPC link. Supported only for HTTP APIs. The VPC link status must transition from ``PENDING`` to ``AVAILABLE`` to successfully create a VPC link, which can take up to 10 minutes. To learn more, see [Working with VPC Links for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vpc-links.html) in the *API Gateway Developer Guide*.", + "additionalProperties": false, + "properties": { + "VpcLinkId": { + "type": "string", + "description": "" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "A list of subnet IDs to include in the VPC link." + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "A list of security group IDs for the VPC link." + }, + "Tags": { + "type": "object", + "description": "The collection of tags. Each tag element is associated with a given resource.", + "additionalProperties": false, + "patternProperties": { + ".*": { + "type": "string" + } + } + }, + "Name": { + "type": "string", + "description": "The name of the VPC link." + } + }, + "required": [ + "SubnetIds", + "Name" + ], + "createOnlyProperties": [ + "/properties/SecurityGroupIds", + "/properties/SubnetIds" + ], + "primaryIdentifier": [ + "/properties/VpcLinkId" + ], + "readOnlyProperties": [ + "/properties/VpcLinkId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "apigateway:POST", + "apigateway:GET", + "apigateway:TagResource", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "update": { + "permissions": [ + "apigateway:PATCH", + "apigateway:GET", + "apigateway:TagResource", + "apigateway:unTagResource", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "read": { + "permissions": [ + "apigateway:GET", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "delete": { + "permissions": [ + "apigateway:GET", + "apigateway:DELETE", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "list": { + "permissions": [ + "apigateway:GET", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/application.json b/internal/aws/cfn/schemas/aws/appconfig/application.json new file mode 100644 index 00000000..c12725ef --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/application.json @@ -0,0 +1,105 @@ +{ + "typeName": "AWS::AppConfig::Application", + "description": "Resource Type definition for AWS::AppConfig::Application", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig.git", + "definitions": { + "Tags": { + "description": "Metadata to assign to the application. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key-value string map. The valid character set is [a-zA-Z1-9 +-=._:/-]. The tag key can be up to 128 characters and must not start with aws:.", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:.)[a-zA-Z1-9+=._:/-]*$" + }, + "Value": { + "type": "string", + "description": "The tag value can be up to 256 characters.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Description": { + "type": "string", + "description": "A description of the application." + }, + "ApplicationId": { + "type": "string", + "description": "The application Id" + }, + "Tags": { + "type": "array", + "description": "Metadata to assign to the application. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tags" + }, + "insertionOrder": false + }, + "Name": { + "type": "string", + "description": "A name for the application." + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/ApplicationId" + ], + "handlers": { + "create": { + "permissions": [ + "appconfig:CreateApplication", + "appconfig:GetApplication", + "appconfig:ListTagsForResource", + "appconfig:TagResource" + ] + }, + "read": { + "permissions": [ + "appconfig:GetApplication", + "appconfig:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "appconfig:UpdateApplication", + "appconfig:TagResource", + "appconfig:UntagResource" + ] + }, + "delete": { + "permissions": [ + "appconfig:GetApplication", + "appconfig:DeleteApplication" + ] + }, + "list": { + "permissions": [ + "appconfig:ListApplications" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/configurationprofile.json b/internal/aws/cfn/schemas/aws/appconfig/configurationprofile.json new file mode 100644 index 00000000..099665f7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/configurationprofile.json @@ -0,0 +1,191 @@ +{ + "typeName": "AWS::AppConfig::ConfigurationProfile", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig", + "definitions": { + "Validators": { + "description": "A list of methods for validating the configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string", + "description": "AWS AppConfig supports validators of type JSON_SCHEMA and LAMBDA." + }, + "Content": { + "type": "string", + "description": "Either the JSON Schema content or the Amazon Resource Name (ARN) of an Lambda function.", + "minLength": 0, + "maxLength": 32768 + } + } + }, + "Tags": { + "description": "Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key-value string map. The tag key can be up to 128 characters and must not start with aws:.", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:.)[a-zA-Z0-9 +=._:/-]*$" + }, + "Value": { + "type": "string", + "description": "The tag value can be up to 256 characters.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "LocationUri": { + "type": "string", + "description": "A URI to locate the configuration. You can specify the AWS AppConfig hosted configuration store, Systems Manager (SSM) document, an SSM Parameter Store parameter, or an Amazon S3 object.", + "minLength": 1, + "maxLength": 2048 + }, + "Type": { + "type": "string", + "description": "The type of configurations contained in the profile. When calling this API, enter one of the following values for Type: AWS.AppConfig.FeatureFlags, AWS.Freeform", + "pattern": "^[a-zA-Z\\.]+" + }, + "Description": { + "type": "string", + "description": "A description of the configuration profile.", + "minLength": 0, + "maxLength": 1024 + }, + "Validators": { + "type": "array", + "description": "A list of methods for validating the configuration.", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Validators" + }, + "insertionOrder": false, + "maxItems": 2 + }, + "RetrievalRoleArn": { + "type": "string", + "description": "The ARN of an IAM role with permission to access the configuration at the specified LocationUri.", + "minLength": 20, + "maxLength": 2048, + "pattern": "^((arn):(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):(iam)::\\d{12}:role[/].*)$" + }, + "ConfigurationProfileId": { + "type": "string", + "description": "The configuration profile ID" + }, + "ApplicationId": { + "type": "string", + "description": "The application ID.", + "pattern": "[a-z0-9]{4,7}", + "relationshipRef": { + "typeName": "AWS::AppConfig::Application", + "propertyPath": "/properties/ApplicationId" + } + }, + "Tags": { + "type": "array", + "description": "Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tags" + }, + "insertionOrder": false + }, + "Name": { + "type": "string", + "description": "A name for the configuration profile.", + "minLength": 1, + "maxLength": 128 + }, + "KmsKeyIdentifier": { + "type": "string", + "description": "The AWS Key Management Service key identifier (key ID, key alias, or key ARN) provided when the resource was created or updated.", + "pattern": "^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}|alias/[a-zA-Z0-9/_-]{1,250}|arn:aws[a-zA-Z-]*:kms:[a-z]{2}(-gov|-iso(b?))?-[a-z]+-\\d{1}:\\d{12}:(key/[0-9a-f-]{36}|alias/[a-zA-Z0-9/_-]{1,250})$" + }, + "KmsKeyArn": { + "type": "string", + "description": "The Amazon Resource Name of the AWS Key Management Service key to encrypt new configuration data versions in the AWS AppConfig hosted configuration store. This attribute is only used for hosted configuration types. To encrypt data managed in other configuration stores, see the documentation for how to specify an AWS KMS key for that particular service.", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:(aws[a-zA-Z-]*)?:[a-z]+:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:[a-zA-Z0-9-_/:.]+" + } + }, + "additionalProperties": false, + "required": [ + "LocationUri", + "ApplicationId", + "Name" + ], + "createOnlyProperties": [ + "/properties/LocationUri", + "/properties/Type", + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/ApplicationId", + "/properties/ConfigurationProfileId" + ], + "readOnlyProperties": [ + "/properties/ConfigurationProfileId", + "/properties/KmsKeyArn" + ], + "handlers": { + "create": { + "permissions": [ + "appconfig:CreateConfigurationProfile", + "appconfig:GetConfigurationProfile", + "appconfig:TagResource", + "appconfig:ListTagsForResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "appconfig:GetConfigurationProfile", + "appconfig:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "appconfig:UpdateConfigurationProfile", + "appconfig:TagResource", + "appconfig:UntagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "appconfig:DeleteConfigurationProfile" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ApplicationId": { + "$ref": "resource-schema.json#/properties/ApplicationId" + } + }, + "required": [ + "ApplicationId" + ] + }, + "permissions": [ + "appconfig:ListConfigurationProfiles" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/deployment.json b/internal/aws/cfn/schemas/aws/appconfig/deployment.json new file mode 100644 index 00000000..2a5f9879 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/deployment.json @@ -0,0 +1,98 @@ +{ + "typeName": "AWS::AppConfig::Deployment", + "description": "Resource Type definition for AWS::AppConfig::Deployment", + "additionalProperties": false, + "properties": { + "DeploymentStrategyId": { + "type": "string" + }, + "ConfigurationProfileId": { + "type": "string" + }, + "EnvironmentId": { + "type": "string" + }, + "KmsKeyIdentifier": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ConfigurationVersion": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "DynamicExtensionParameters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/DynamicExtensionParameters" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tags" + } + } + }, + "definitions": { + "DynamicExtensionParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExtensionReference": { + "type": "string" + }, + "ParameterName": { + "type": "string" + }, + "ParameterValue": { + "type": "string" + } + } + }, + "Tags": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + } + }, + "required": [ + "DeploymentStrategyId", + "ConfigurationProfileId", + "EnvironmentId", + "ConfigurationVersion", + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/KmsKeyIdentifier", + "/properties/DeploymentStrategyId", + "/properties/ConfigurationVersion", + "/properties/ApplicationId", + "/properties/ConfigurationProfileId", + "/properties/Tags", + "/properties/EnvironmentId", + "/properties/Description", + "/properties/DynamicExtensionParameters" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/deploymentstrategy.json b/internal/aws/cfn/schemas/aws/appconfig/deploymentstrategy.json new file mode 100644 index 00000000..8e3dfff5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/deploymentstrategy.json @@ -0,0 +1,68 @@ +{ + "typeName": "AWS::AppConfig::DeploymentStrategy", + "description": "Resource Type definition for AWS::AppConfig::DeploymentStrategy", + "additionalProperties": false, + "properties": { + "ReplicateTo": { + "type": "string" + }, + "GrowthType": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "DeploymentDurationInMinutes": { + "type": "number" + }, + "GrowthFactor": { + "type": "number" + }, + "Id": { + "type": "string" + }, + "FinalBakeTimeInMinutes": { + "type": "number" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tags" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tags": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + } + }, + "required": [ + "ReplicateTo", + "DeploymentDurationInMinutes", + "GrowthFactor", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/ReplicateTo" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/environment.json b/internal/aws/cfn/schemas/aws/appconfig/environment.json new file mode 100644 index 00000000..23546bd8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/environment.json @@ -0,0 +1,165 @@ +{ + "typeName": "AWS::AppConfig::Environment", + "description": "Resource Type definition for AWS::AppConfig::Environment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig.git", + "additionalProperties": false, + "properties": { + "EnvironmentId": { + "type": "string", + "description": "The environment ID.", + "pattern": "[a-z0-9]{4,7}" + }, + "ApplicationId": { + "type": "string", + "description": "The application ID.", + "pattern": "[a-z0-9]{4,7}" + }, + "Name": { + "type": "string", + "description": "A name for the environment.", + "minLength": 1, + "maxLength": 64 + }, + "Description": { + "type": "string", + "description": "A description of the environment.", + "minLength": 0, + "maxLength": 1024 + }, + "Monitors": { + "type": "array", + "description": "Amazon CloudWatch alarms to monitor during the deployment process.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Monitor" + }, + "minItems": 0, + "maxItems": 5 + }, + "Tags": { + "type": "array", + "description": "Metadata to assign to the environment. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false + } + }, + "definitions": { + "Monitor": { + "type": "object", + "description": "Amazon CloudWatch alarm to monitor during the deployment process.", + "additionalProperties": false, + "properties": { + "AlarmArn": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the Amazon CloudWatch alarm.", + "minLength": 1, + "maxLength": 2048 + }, + "AlarmRoleArn": { + "type": "string", + "description": "ARN of an AWS Identity and Access Management (IAM) role for AWS AppConfig to monitor AlarmArn.", + "minLength": 20, + "maxLength": 2048, + "pattern": "^((arn):(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):(iam)::\\d{12}:role[/].*)$" + } + }, + "required": [ + "AlarmArn" + ] + }, + "Tag": { + "description": "Metadata to assign to the environment. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key-value string map. The valid character set is [a-zA-Z1-9+-=._:/]. The tag key can be up to 128 characters and must not start with aws:.", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:.)[a-zA-Z1-9+=._:/-]*$" + }, + "Value": { + "type": "string", + "description": "The tag value can be up to 256 characters.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "Name", + "ApplicationId" + ], + "readOnlyProperties": [ + "/properties/EnvironmentId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/ApplicationId", + "/properties/EnvironmentId" + ], + "handlers": { + "create": { + "permissions": [ + "appconfig:CreateEnvironment", + "appconfig:GetEnvironment", + "appconfig:ListTagsForResource", + "appconfig:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "appconfig:GetEnvironment", + "appconfig:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "appconfig:UpdateEnvironment", + "appconfig:TagResource", + "appconfig:UntagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "appconfig:GetEnvironment", + "appconfig:DeleteEnvironment" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ApplicationId": { + "$ref": "resource-schema.json#/properties/ApplicationId" + } + }, + "required": [ + "ApplicationId" + ] + }, + "permissions": [ + "appconfig:ListEnvironments" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/extension.json b/internal/aws/cfn/schemas/aws/appconfig/extension.json new file mode 100644 index 00000000..3a3ea85e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/extension.json @@ -0,0 +1,209 @@ +{ + "typeName": "AWS::AppConfig::Extension", + "description": "Resource Type definition for AWS::AppConfig::Extension", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "VersionNumber": { + "type": "integer" + }, + "Name": { + "description": "Name of the extension.", + "type": "string" + }, + "Description": { + "description": "Description of the extension.", + "type": "string" + }, + "Actions": { + "type": "object", + "patternProperties": { + "^.+$": { + "$ref": "#/definitions/Actions" + } + }, + "additionalProperties": false + }, + "Parameters": { + "type": "object", + "patternProperties": { + "^.+$": { + "$ref": "#/definitions/Parameter" + } + }, + "additionalProperties": false + }, + "LatestVersionNumber": { + "type": "integer" + }, + "Tags": { + "description": "An array of key-value tags to apply to this resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Actions": { + "description": "A list of actions for an extension to take at a specific action point.", + "uniqueItems": true, + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Action" + } + }, + "Action": { + "description": "An action for an extension to take at a specific action point.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of the extension action.", + "minLength": 1, + "maxLength": 128 + }, + "Description": { + "type": "string", + "description": "The description of the extension Action.", + "minLength": 0, + "maxLength": 1024 + }, + "Uri": { + "type": "string", + "description": "The URI of the extension action.", + "minLength": 1, + "maxLength": 2048 + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the role for invoking the extension action.", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "Name", + "Uri" + ], + "additionalProperties": false + }, + "Parameter": { + "description": "A parameter for the extension to send to a specific action.", + "type": "object", + "properties": { + "Description": { + "type": "string", + "description": "The description of the extension Parameter.", + "minLength": 0, + "maxLength": 1024 + }, + "Dynamic": { + "type": "boolean" + }, + "Required": { + "type": "boolean" + } + }, + "required": [ + "Required" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Actions" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/VersionNumber" + ], + "writeOnlyProperties": [ + "/properties/LatestVersionNumber", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "appconfig:CreateExtension", + "appconfig:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "appconfig:GetExtension" + ] + }, + "update": { + "permissions": [ + "appconfig:UpdateExtension", + "appconfig:TagResource", + "appconfig:UntagResource" + ] + }, + "delete": { + "permissions": [ + "appconfig:DeleteExtension", + "appconfig:UntagResource" + ] + }, + "list": { + "permissions": [ + "appconfig:ListExtensions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/extensionassociation.json b/internal/aws/cfn/schemas/aws/appconfig/extensionassociation.json new file mode 100644 index 00000000..1162f42d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/extensionassociation.json @@ -0,0 +1,134 @@ +{ + "typeName": "AWS::AppConfig::ExtensionAssociation", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "ExtensionArn": { + "type": "string" + }, + "ResourceArn": { + "type": "string" + }, + "ExtensionIdentifier": { + "type": "string" + }, + "ResourceIdentifier": { + "type": "string" + }, + "ExtensionVersionNumber": { + "type": "integer" + }, + "Parameters": { + "type": "object", + "patternProperties": { + "^.+$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/ResourceArn", + "/properties/ExtensionArn" + ], + "createOnlyProperties": [ + "/properties/ExtensionIdentifier", + "/properties/ResourceIdentifier", + "/properties/ExtensionVersionNumber", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "writeOnlyProperties": [ + "/properties/ExtensionIdentifier", + "/properties/ResourceIdentifier", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "appconfig:CreateExtensionAssociation", + "appconfig:TagResource" + ] + }, + "read": { + "permissions": [ + "appconfig:GetExtensionAssociation" + ] + }, + "update": { + "permissions": [ + "appconfig:UpdateExtensionAssociation", + "appconfig:TagResource", + "appconfig:UntagResource" + ] + }, + "delete": { + "permissions": [ + "appconfig:DeleteExtensionAssociation", + "appconfig:UntagResource" + ] + }, + "list": { + "permissions": [ + "appconfig:ListExtensionAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appconfig/hostedconfigurationversion.json b/internal/aws/cfn/schemas/aws/appconfig/hostedconfigurationversion.json new file mode 100644 index 00000000..46ce65a2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appconfig/hostedconfigurationversion.json @@ -0,0 +1,117 @@ +{ + "typeName": "AWS::AppConfig::HostedConfigurationVersion", + "description": "Resource Type definition for AWS::AppConfig::HostedConfigurationVersion", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig.git", + "additionalProperties": false, + "properties": { + "ApplicationId": { + "type": "string", + "description": "The application ID.", + "pattern": "[a-z0-9]{4,7}" + }, + "ConfigurationProfileId": { + "type": "string", + "description": "The configuration profile ID.", + "pattern": "[a-z0-9]{4,7}" + }, + "VersionNumber": { + "type": "string", + "description": "Current version number of hosted configuration version." + }, + "Description": { + "type": "string", + "description": "A description of the hosted configuration version.", + "minLength": 0, + "maxLength": 1024 + }, + "Content": { + "type": "string", + "description": "The content of the configuration or the configuration data." + }, + "ContentType": { + "type": "string", + "description": "A standard MIME type describing the format of the configuration content.", + "minLength": 1, + "maxLength": 255 + }, + "LatestVersionNumber": { + "type": "integer", + "description": "An optional locking token used to prevent race conditions from overwriting configuration updates when creating a new version. To ensure your data is not overwritten when creating multiple hosted configuration versions in rapid succession, specify the version number of the latest hosted configuration version." + }, + "VersionLabel": { + "type": "string", + "description": "A user-defined label for an AWS AppConfig hosted configuration version.", + "pattern": "^$|.*[^0-9].*", + "minLength": 0, + "maxLength": 64 + } + }, + "required": [ + "ApplicationId", + "ConfigurationProfileId", + "Content", + "ContentType" + ], + "readOnlyProperties": [ + "/properties/VersionNumber" + ], + "writeOnlyProperties": [ + "/properties/LatestVersionNumber" + ], + "createOnlyProperties": [ + "/properties/ApplicationId", + "/properties/ConfigurationProfileId", + "/properties/Description", + "/properties/Content", + "/properties/ContentType", + "/properties/LatestVersionNumber", + "/properties/VersionLabel" + ], + "primaryIdentifier": [ + "/properties/ApplicationId", + "/properties/ConfigurationProfileId", + "/properties/VersionNumber" + ], + "handlers": { + "create": { + "permissions": [ + "appconfig:CreateHostedConfigurationVersion" + ] + }, + "read": { + "permissions": [ + "appconfig:GetHostedConfigurationVersion" + ] + }, + "delete": { + "permissions": [ + "appconfig:DeleteHostedConfigurationVersion" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ApplicationId": { + "$ref": "resource-schema.json#/properties/ApplicationId" + }, + "ConfigurationProfileId": { + "$ref": "resource-schema.json#/properties/ConfigurationProfileId" + } + }, + "required": [ + "ApplicationId", + "ConfigurationProfileId" + ] + }, + "permissions": [ + "appconfig:ListHostedConfigurationVersions" + ] + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/appflow/connector.json b/internal/aws/cfn/schemas/aws/appflow/connector.json new file mode 100644 index 00000000..98250881 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appflow/connector.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::AppFlow::Connector", + "description": "Resource schema for AWS::AppFlow::Connector", + "sourceUrl": "https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html", + "additionalProperties": false, + "properties": { + "ConnectorLabel": { + "description": " The name of the connector. The name is unique for each ConnectorRegistration in your AWS account.", + "type": "string", + "pattern": "[a-zA-Z0-9][\\w!@#.-]+", + "maxLength": 512 + }, + "ConnectorArn": { + "description": " The arn of the connector. The arn is unique for each ConnectorRegistration in your AWS account.", + "type": "string", + "pattern": "arn:*:appflow:.*:[0-9]+:.*", + "maxLength": 512 + }, + "ConnectorProvisioningType": { + "description": "The provisioning type of the connector. Currently the only supported value is LAMBDA. ", + "type": "string", + "pattern": "[a-zA-Z0-9][\\w!@#.-]+", + "maxLength": 256, + "minLength": 1 + }, + "ConnectorProvisioningConfig": { + "description": "Contains information about the configuration of the connector being registered.", + "$ref": "#/definitions/ConnectorProvisioningConfig" + }, + "Description": { + "description": "A description about the connector that's being registered.", + "type": "string", + "pattern": "[\\s\\w/!@#+=.-]*", + "maxLength": 2048 + } + }, + "definitions": { + "ConnectorProvisioningConfig": { + "description": "Contains information about the configuration of the connector being registered.", + "type": "object", + "properties": { + "Lambda": { + "description": "Contains information about the configuration of the lambda which is being registered as the connector.", + "$ref": "#/definitions/LambdaConnectorProvisioningConfig" + } + }, + "additionalProperties": false + }, + "LambdaConnectorProvisioningConfig": { + "description": "Contains information about the configuration of the lambda which is being registered as the connector.", + "type": "object", + "properties": { + "LambdaArn": { + "description": "Lambda ARN of the connector being registered.", + "type": "string", + "pattern": "arn:*:.*:.*:[0-9]+:.*", + "maxLength": 512 + } + }, + "required": [ + "LambdaArn" + ], + "additionalProperties": false + } + }, + "required": [ + "ConnectorProvisioningType", + "ConnectorProvisioningConfig" + ], + "createOnlyProperties": [ + "/properties/ConnectorLabel" + ], + "readOnlyProperties": [ + "/properties/ConnectorArn" + ], + "primaryIdentifier": [ + "/properties/ConnectorLabel" + ], + "handlers": { + "create": { + "permissions": [ + "appflow:RegisterConnector", + "lambda:InvokeFunction" + ] + }, + "read": { + "permissions": [ + "appflow:DescribeConnector" + ] + }, + "delete": { + "permissions": [ + "appflow:UnRegisterConnector" + ] + }, + "list": { + "permissions": [ + "appflow:ListConnectors" + ] + }, + "update": { + "permissions": [ + "appflow:UpdateConnectorRegistration", + "lambda:InvokeFunction" + ] + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/appflow/connectorprofile.json b/internal/aws/cfn/schemas/aws/appflow/connectorprofile.json new file mode 100644 index 00000000..6f452aa1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appflow/connectorprofile.json @@ -0,0 +1,1265 @@ +{ + "typeName": "AWS::AppFlow::ConnectorProfile", + "description": "Resource Type definition for AWS::AppFlow::ConnectorProfile", + "additionalProperties": false, + "properties": { + "ConnectorProfileArn": { + "description": "Unique identifier for connector profile resources", + "type": "string", + "pattern": "arn:aws:appflow:.*:[0-9]+:.*", + "maxLength": 512 + }, + "ConnectorLabel": { + "description": "The label of the connector. The label is unique for each ConnectorRegistration in your AWS account. Only needed if calling for CUSTOMCONNECTOR connector type/.", + "type": "string", + "pattern": "[\\w!@#.-]+", + "maxLength": 256 + }, + "ConnectorProfileName": { + "description": "The maximum number of items to retrieve in a single batch.", + "type": "string", + "pattern": "[\\w/!@#+=.-]+", + "maxLength": 256 + }, + "KMSArn": { + "description": "The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.", + "type": "string", + "pattern": "arn:aws:kms:.*:[0-9]+:.*", + "maxLength": 2048, + "minLength": 20 + }, + "ConnectorType": { + "description": "List of Saas providers that need connector profile to be created", + "$ref": "#/definitions/ConnectorType" + }, + "ConnectionMode": { + "description": "Mode in which data transfer should be enabled. Private connection mode is currently enabled for Salesforce, Snowflake, Trendmicro and Singular", + "type": "string", + "enum": [ + "Public", + "Private" + ] + }, + "ConnectorProfileConfig": { + "description": "Connector specific configurations needed to create connector profile", + "$ref": "#/definitions/ConnectorProfileConfig" + }, + "CredentialsArn": { + "description": "A unique Arn for Connector-Profile resource", + "type": "string", + "pattern": "arn:aws:.*:.*:[0-9]+:.*", + "maxLength": 512 + } + }, + "definitions": { + "ConnectorType": { + "type": "string", + "enum": [ + "Salesforce", + "Pardot", + "Singular", + "Slack", + "Redshift", + "Marketo", + "Googleanalytics", + "Zendesk", + "Servicenow", + "SAPOData", + "Datadog", + "Trendmicro", + "Snowflake", + "Dynatrace", + "Infornexus", + "Amplitude", + "Veeva", + "CustomConnector" + ] + }, + "ConnectorProfileConfig": { + "description": "Connector specific configurations needed to create connector profile", + "type": "object", + "properties": { + "ConnectorProfileProperties": { + "$ref": "#/definitions/ConnectorProfileProperties" + }, + "ConnectorProfileCredentials": { + "$ref": "#/definitions/ConnectorProfileCredentials" + } + } + }, + "ConnectorProfileProperties": { + "description": "Connector specific properties needed to create connector profile - currently not needed for Amplitude, Trendmicro, Googleanalytics and Singular", + "type": "object", + "properties": { + "Datadog": { + "$ref": "#/definitions/DatadogConnectorProfileProperties" + }, + "Dynatrace": { + "$ref": "#/definitions/DynatraceConnectorProfileProperties" + }, + "InforNexus": { + "$ref": "#/definitions/InforNexusConnectorProfileProperties" + }, + "Marketo": { + "$ref": "#/definitions/MarketoConnectorProfileProperties" + }, + "Redshift": { + "$ref": "#/definitions/RedshiftConnectorProfileProperties" + }, + "SAPOData": { + "$ref": "#/definitions/SAPODataConnectorProfileProperties" + }, + "Salesforce": { + "$ref": "#/definitions/SalesforceConnectorProfileProperties" + }, + "Pardot": { + "$ref": "#/definitions/PardotConnectorProfileProperties" + }, + "ServiceNow": { + "$ref": "#/definitions/ServiceNowConnectorProfileProperties" + }, + "Slack": { + "$ref": "#/definitions/SlackConnectorProfileProperties" + }, + "Snowflake": { + "$ref": "#/definitions/SnowflakeConnectorProfileProperties" + }, + "Veeva": { + "$ref": "#/definitions/VeevaConnectorProfileProperties" + }, + "Zendesk": { + "$ref": "#/definitions/ZendeskConnectorProfileProperties" + }, + "CustomConnector": { + "$ref": "#/definitions/CustomConnectorProfileProperties" + } + } + }, + "ConnectorProfileCredentials": { + "description": "Connector specific configuration needed to create connector profile based on Authentication mechanism", + "type": "object", + "properties": { + "Amplitude": { + "$ref": "#/definitions/AmplitudeConnectorProfileCredentials" + }, + "Datadog": { + "$ref": "#/definitions/DatadogConnectorProfileCredentials" + }, + "Dynatrace": { + "$ref": "#/definitions/DynatraceConnectorProfileCredentials" + }, + "GoogleAnalytics": { + "$ref": "#/definitions/GoogleAnalyticsConnectorProfileCredentials" + }, + "InforNexus": { + "$ref": "#/definitions/InforNexusConnectorProfileCredentials" + }, + "Marketo": { + "$ref": "#/definitions/MarketoConnectorProfileCredentials" + }, + "Redshift": { + "$ref": "#/definitions/RedshiftConnectorProfileCredentials" + }, + "SAPOData": { + "$ref": "#/definitions/SAPODataConnectorProfileCredentials" + }, + "Salesforce": { + "$ref": "#/definitions/SalesforceConnectorProfileCredentials" + }, + "Pardot": { + "$ref": "#/definitions/PardotConnectorProfileCredentials" + }, + "ServiceNow": { + "$ref": "#/definitions/ServiceNowConnectorProfileCredentials" + }, + "Singular": { + "$ref": "#/definitions/SingularConnectorProfileCredentials" + }, + "Slack": { + "$ref": "#/definitions/SlackConnectorProfileCredentials" + }, + "Snowflake": { + "$ref": "#/definitions/SnowflakeConnectorProfileCredentials" + }, + "Trendmicro": { + "$ref": "#/definitions/TrendmicroConnectorProfileCredentials" + }, + "Veeva": { + "$ref": "#/definitions/VeevaConnectorProfileCredentials" + }, + "Zendesk": { + "$ref": "#/definitions/ZendeskConnectorProfileCredentials" + }, + "CustomConnector": { + "$ref": "#/definitions/CustomConnectorProfileCredentials" + } + } + }, + "AmplitudeConnectorProfileCredentials": { + "type": "object", + "required": [ + "ApiKey", + "SecretKey" + ], + "properties": { + "ApiKey": { + "description": "A unique alphanumeric identi?er used to authenticate a user, developer, or calling program to your API.", + "$ref": "#/definitions/ApiKey" + }, + "SecretKey": { + "$ref": "#/definitions/SecretKey" + } + } + }, + "DatadogConnectorProfileCredentials": { + "type": "object", + "required": [ + "ApiKey", + "ApplicationKey" + ], + "properties": { + "ApiKey": { + "description": "A unique alphanumeric identi?er used to authenticate a user, developer, or calling program to your API.", + "$ref": "#/definitions/ApiKey" + }, + "ApplicationKey": { + "description": "Application keys, in conjunction with your API key, give you full access to Datadog?s programmatic API. Application keys are associated with the user account that created them. The application key is used to log all requests made to the API.", + "$ref": "#/definitions/ApplicationKey" + } + } + }, + "DatadogConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the Datadog resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "DynatraceConnectorProfileCredentials": { + "type": "object", + "required": [ + "ApiToken" + ], + "properties": { + "ApiToken": { + "description": "The API tokens used by Dynatrace API to authenticate various API calls.", + "$ref": "#/definitions/ApiToken" + } + } + }, + "DynatraceConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the Dynatrace resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "GoogleAnalyticsConnectorProfileCredentials": { + "type": "object", + "required": [ + "ClientId", + "ClientSecret" + ], + "properties": { + "ClientId": { + "description": "The identi?er for the desired client.", + "$ref": "#/definitions/ClientId" + }, + "ClientSecret": { + "description": "The client secret used by the oauth client to authenticate to the authorization server.", + "$ref": "#/definitions/ClientSecret" + }, + "AccessToken": { + "description": "The credentials used to access protected resources.", + "$ref": "#/definitions/AccessToken" + }, + "RefreshToken": { + "description": "The credentials used to acquire new access tokens.", + "$ref": "#/definitions/RefreshToken" + }, + "ConnectorOAuthRequest": { + "description": "The oauth needed to request security tokens from the connector endpoint.", + "$ref": "#/definitions/ConnectorOAuthRequest" + } + } + }, + "InforNexusConnectorProfileCredentials": { + "type": "object", + "required": [ + "AccessKeyId", + "UserId", + "SecretAccessKey", + "Datakey" + ], + "properties": { + "AccessKeyId": { + "description": "The Access Key portion of the credentials.", + "$ref": "#/definitions/AccessKeyId" + }, + "UserId": { + "description": "The identi?er for the user.", + "$ref": "#/definitions/Username" + }, + "SecretAccessKey": { + "description": "The secret key used to sign requests.", + "$ref": "#/definitions/Key" + }, + "Datakey": { + "description": "The encryption keys used to encrypt data.", + "$ref": "#/definitions/Key" + } + } + }, + "InforNexusConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the InforNexus resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "MarketoConnectorProfileCredentials": { + "type": "object", + "required": [ + "ClientId", + "ClientSecret" + ], + "properties": { + "ClientId": { + "description": "The identi?er for the desired client.", + "$ref": "#/definitions/ClientId" + }, + "ClientSecret": { + "description": "The client secret used by the oauth client to authenticate to the authorization server.", + "$ref": "#/definitions/ClientSecret" + }, + "AccessToken": { + "description": "The credentials used to access protected resources.", + "$ref": "#/definitions/AccessToken" + }, + "ConnectorOAuthRequest": { + "description": "The oauth needed to request security tokens from the connector endpoint.", + "$ref": "#/definitions/ConnectorOAuthRequest" + } + } + }, + "MarketoConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the Marketo resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "RedshiftConnectorProfileCredentials": { + "type": "object", + "properties": { + "Username": { + "description": "The name of the user.", + "$ref": "#/definitions/Username" + }, + "Password": { + "description": "The password that corresponds to the username.", + "$ref": "#/definitions/Password" + } + } + }, + "RedshiftConnectorProfileProperties": { + "type": "object", + "required": [ + "BucketName", + "RoleArn" + ], + "properties": { + "DatabaseUrl": { + "description": "The JDBC URL of the Amazon Redshift cluster.", + "$ref": "#/definitions/DatabaseUrl" + }, + "BucketName": { + "description": "The name of the Amazon S3 bucket associated with Redshift.", + "$ref": "#/definitions/BucketName" + }, + "BucketPrefix": { + "description": "The object key for the destination bucket in which Amazon AppFlow will place the ?les.", + "$ref": "#/definitions/BucketPrefix" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role.", + "$ref": "#/definitions/RoleArn" + }, + "IsRedshiftServerless": { + "description": "If Amazon AppFlow will connect to Amazon Redshift Serverless or Amazon Redshift cluster.", + "type": "boolean" + }, + "DataApiRoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role that grants Amazon AppFlow access to the data through the Amazon Redshift Data API.", + "$ref": "#/definitions/DataApiRoleArn" + }, + "ClusterIdentifier": { + "description": "The unique identifier of the Amazon Redshift cluster.", + "$ref": "#/definitions/ClusterIdentifier" + }, + "WorkgroupName": { + "description": "The name of the Amazon Redshift serverless workgroup", + "$ref": "#/definitions/WorkgroupName" + }, + "DatabaseName": { + "description": "The name of the Amazon Redshift database that will store the transferred data.", + "$ref": "#/definitions/DatabaseName" + } + } + }, + "SAPODataConnectorProfileCredentials": { + "type": "object", + "properties": { + "BasicAuthCredentials": { + "$ref": "#/definitions/BasicAuthCredentials" + }, + "OAuthCredentials": { + "type": "object", + "properties": { + "AccessToken": { + "$ref": "#/definitions/AccessToken" + }, + "RefreshToken": { + "$ref": "#/definitions/RefreshToken" + }, + "ConnectorOAuthRequest": { + "$ref": "#/definitions/ConnectorOAuthRequest" + }, + "ClientId": { + "$ref": "#/definitions/ClientId" + }, + "ClientSecret": { + "$ref": "#/definitions/ClientSecret" + } + } + } + } + }, + "SAPODataConnectorProfileProperties": { + "type": "object", + "properties": { + "ApplicationHostUrl": { + "$ref": "#/definitions/ApplicationHostUrl" + }, + "ApplicationServicePath": { + "$ref": "#/definitions/ApplicationServicePath" + }, + "PortNumber": { + "$ref": "#/definitions/PortNumber" + }, + "ClientNumber": { + "$ref": "#/definitions/ClientNumber" + }, + "LogonLanguage": { + "$ref": "#/definitions/LogonLanguage" + }, + "PrivateLinkServiceName": { + "$ref": "#/definitions/PrivateLinkServiceName" + }, + "OAuthProperties": { + "$ref": "#/definitions/OAuthProperties" + }, + "DisableSSO": { + "description": "If you set this parameter to true, Amazon AppFlow bypasses the single sign-on (SSO) settings in your SAP account when it accesses your SAP OData instance.", + "type": "boolean" + } + } + }, + "SalesforceConnectorProfileCredentials": { + "type": "object", + "properties": { + "AccessToken": { + "description": "The credentials used to access protected resources.", + "$ref": "#/definitions/AccessToken" + }, + "RefreshToken": { + "description": "The credentials used to acquire new access tokens.", + "$ref": "#/definitions/RefreshToken" + }, + "ConnectorOAuthRequest": { + "description": "The oauth needed to request security tokens from the connector endpoint.", + "$ref": "#/definitions/ConnectorOAuthRequest" + }, + "ClientCredentialsArn": { + "description": "The client credentials to fetch access token and refresh token.", + "$ref": "#/definitions/ClientCredentialsArn" + }, + "OAuth2GrantType": { + "description": "The grant types to fetch an access token", + "$ref": "#/definitions/OAuth2GrantType" + }, + "JwtToken": { + "description": "The credentials used to access your Salesforce records", + "$ref": "#/definitions/JwtToken" + } + } + }, + "SalesforceConnectorProfileProperties": { + "type": "object", + "properties": { + "InstanceUrl": { + "description": "The location of the Salesforce resource", + "$ref": "#/definitions/InstanceUrl" + }, + "isSandboxEnvironment": { + "description": "Indicates whether the connector profile applies to a sandbox or production environment", + "type": "boolean" + }, + "usePrivateLinkForMetadataAndAuthorization": { + "description": "Indicates whether to make Metadata And Authorization calls over Pivate Network", + "type": "boolean" + } + } + }, + "PardotConnectorProfileProperties": { + "type": "object", + "required": [ + "BusinessUnitId" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the Salesforce Pardot resource", + "$ref": "#/definitions/InstanceUrl" + }, + "IsSandboxEnvironment": { + "description": "Indicates whether the connector profile applies to a demo or production environment", + "type": "boolean" + }, + "BusinessUnitId": { + "description": "The Business unit id of Salesforce Pardot instance to be connected", + "$ref": "#/definitions/BusinessUnitId" + } + } + }, + "PardotConnectorProfileCredentials": { + "type": "object", + "properties": { + "AccessToken": { + "description": "The credentials used to access protected resources.", + "$ref": "#/definitions/AccessToken" + }, + "RefreshToken": { + "description": "The credentials used to acquire new access tokens.", + "$ref": "#/definitions/RefreshToken" + }, + "ConnectorOAuthRequest": { + "description": "The oauth needed to request security tokens from the connector endpoint.", + "$ref": "#/definitions/ConnectorOAuthRequest" + }, + "ClientCredentialsArn": { + "description": "The client credentials to fetch access token and refresh token.", + "$ref": "#/definitions/ClientCredentialsArn" + } + } + }, + "ServiceNowConnectorProfileCredentials": { + "type": "object", + "properties": { + "Username": { + "description": "The name of the user.", + "$ref": "#/definitions/Username" + }, + "Password": { + "description": "The password that corresponds to the username.", + "$ref": "#/definitions/Password" + }, + "OAuth2Credentials": { + "description": "The OAuth 2.0 credentials required to authenticate the user.", + "$ref": "#/definitions/OAuth2Credentials" + } + } + }, + "ServiceNowConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the ServiceNow resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "SingularConnectorProfileCredentials": { + "type": "object", + "required": [ + "ApiKey" + ], + "properties": { + "ApiKey": { + "description": "A unique alphanumeric identi?er used to authenticate a user, developer, or calling program to your API.", + "$ref": "#/definitions/ApiKey" + } + } + }, + "SlackConnectorProfileCredentials": { + "type": "object", + "required": [ + "ClientId", + "ClientSecret" + ], + "properties": { + "ClientId": { + "description": "The identi?er for the desired client.", + "$ref": "#/definitions/ClientId" + }, + "ClientSecret": { + "description": "The client secret used by the oauth client to authenticate to the authorization server.", + "$ref": "#/definitions/ClientSecret" + }, + "AccessToken": { + "description": "The credentials used to access protected resources.", + "$ref": "#/definitions/AccessToken" + }, + "ConnectorOAuthRequest": { + "description": "The oauth needed to request security tokens from the connector endpoint.", + "$ref": "#/definitions/ConnectorOAuthRequest" + } + } + }, + "SlackConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the Slack resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "SnowflakeConnectorProfileCredentials": { + "type": "object", + "required": [ + "Username", + "Password" + ], + "properties": { + "Username": { + "description": "The name of the user.", + "$ref": "#/definitions/Username" + }, + "Password": { + "description": "The password that corresponds to the username.", + "$ref": "#/definitions/Password" + } + } + }, + "SnowflakeConnectorProfileProperties": { + "type": "object", + "required": [ + "Warehouse", + "Stage", + "BucketName" + ], + "properties": { + "Warehouse": { + "description": "The name of the Snow?ake warehouse.", + "$ref": "#/definitions/Warehouse" + }, + "Stage": { + "description": "The name of the Amazon S3 stage that was created while setting up an Amazon S3 stage in the\nSnow?ake account. This is written in the following format: < Database>< Schema>.", + "$ref": "#/definitions/Stage" + }, + "BucketName": { + "description": "The name of the Amazon S3 bucket associated with Snow?ake.", + "$ref": "#/definitions/BucketName" + }, + "BucketPrefix": { + "description": "The bucket prefix that refers to the Amazon S3 bucket associated with Snow?ake.", + "$ref": "#/definitions/BucketPrefix" + }, + "PrivateLinkServiceName": { + "description": "The Snow?ake Private Link service name to be used for private data transfers.", + "$ref": "#/definitions/PrivateLinkServiceName" + }, + "AccountName": { + "description": "The name of the account.", + "$ref": "#/definitions/AccountName" + }, + "Region": { + "description": "The region of the Snow?ake account.", + "$ref": "#/definitions/Region" + } + } + }, + "TrendmicroConnectorProfileCredentials": { + "type": "object", + "required": [ + "ApiSecretKey" + ], + "properties": { + "ApiSecretKey": { + "description": "The Secret Access Key portion of the credentials.", + "$ref": "#/definitions/ApiSecretKey" + } + } + }, + "VeevaConnectorProfileCredentials": { + "type": "object", + "required": [ + "Username", + "Password" + ], + "properties": { + "Username": { + "description": "The name of the user.", + "$ref": "#/definitions/Username" + }, + "Password": { + "description": "The password that corresponds to the username.", + "$ref": "#/definitions/Password" + } + } + }, + "VeevaConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the Veeva resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "ZendeskConnectorProfileCredentials": { + "type": "object", + "required": [ + "ClientId", + "ClientSecret" + ], + "properties": { + "ClientId": { + "description": "The identi?er for the desired client.", + "$ref": "#/definitions/ClientId" + }, + "ClientSecret": { + "description": "The client secret used by the oauth client to authenticate to the authorization server.", + "$ref": "#/definitions/ClientSecret" + }, + "AccessToken": { + "description": "The credentials used to access protected resources.", + "$ref": "#/definitions/AccessToken" + }, + "ConnectorOAuthRequest": { + "description": "The oauth needed to request security tokens from the connector endpoint.", + "$ref": "#/definitions/ConnectorOAuthRequest" + } + } + }, + "ZendeskConnectorProfileProperties": { + "type": "object", + "required": [ + "InstanceUrl" + ], + "properties": { + "InstanceUrl": { + "description": "The location of the Zendesk resource", + "$ref": "#/definitions/InstanceUrl" + } + } + }, + "CustomConnectorProfileCredentials": { + "type": "object", + "required": [ + "AuthenticationType" + ], + "properties": { + "AuthenticationType": { + "$ref": "#/definitions/AuthenticationType" + }, + "Basic": { + "$ref": "#/definitions/BasicAuthCredentials" + }, + "Oauth2": { + "$ref": "#/definitions/OAuth2Credentials" + }, + "ApiKey": { + "$ref": "#/definitions/ApiKeyCredentials" + }, + "Custom": { + "$ref": "#/definitions/CustomAuthCredentials" + } + }, + "additionalProperties": false + }, + "CustomConnectorProfileProperties": { + "type": "object", + "properties": { + "ProfileProperties": { + "$ref": "#/definitions/ProfileProperties" + }, + "OAuth2Properties": { + "$ref": "#/definitions/OAuth2Properties" + } + }, + "additionalProperties": false + }, + "ApiKeyCredentials": { + "type": "object", + "required": [ + "ApiKey" + ], + "properties": { + "ApiKey": { + "$ref": "#/definitions/ApiKey" + }, + "ApiSecretKey": { + "$ref": "#/definitions/ApiSecretKey" + } + }, + "additionalProperties": false + }, + "CustomAuthCredentials": { + "type": "object", + "required": [ + "CustomAuthenticationType" + ], + "properties": { + "CustomAuthenticationType": { + "$ref": "#/definitions/CustomAuthenticationType" + }, + "CredentialsMap": { + "$ref": "#/definitions/CredentialsMap" + } + }, + "additionalProperties": false + }, + "CredentialsMap": { + "description": "A map for properties for custom authentication.", + "type": "object", + "patternProperties": { + "^[\\w]{1,128}$": { + "description": "A string containing the value for the property", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "\\S+" + } + }, + "required": [], + "additionalProperties": false + }, + "OAuth2Credentials": { + "type": "object", + "properties": { + "ClientId": { + "$ref": "#/definitions/ClientId" + }, + "ClientSecret": { + "$ref": "#/definitions/ClientSecret" + }, + "AccessToken": { + "$ref": "#/definitions/AccessToken" + }, + "RefreshToken": { + "$ref": "#/definitions/RefreshToken" + }, + "OAuthRequest": { + "$ref": "#/definitions/ConnectorOAuthRequest" + } + }, + "additionalProperties": false + }, + "BasicAuthCredentials": { + "type": "object", + "required": [ + "Username", + "Password" + ], + "properties": { + "Username": { + "$ref": "#/definitions/Username" + }, + "Password": { + "$ref": "#/definitions/Password" + } + }, + "additionalProperties": false + }, + "AuthenticationType": { + "type": "string", + "enum": [ + "OAUTH2", + "APIKEY", + "BASIC", + "CUSTOM" + ] + }, + "OAuth2Properties": { + "type": "object", + "properties": { + "TokenUrl": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]" + }, + "OAuth2GrantType": { + "$ref": "#/definitions/OAuth2GrantType" + }, + "TokenUrlCustomProperties": { + "$ref": "#/definitions/TokenUrlCustomProperties" + } + }, + "additionalProperties": false + }, + "ProfileProperties": { + "description": "A map for properties for custom connector.", + "type": "object", + "patternProperties": { + "^[\\w]{1,256}$": { + "description": "A string containing the value for the property", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "\\S+" + } + }, + "required": [], + "additionalProperties": false + }, + "OAuth2GrantType": { + "type": "string", + "enum": [ + "CLIENT_CREDENTIALS", + "AUTHORIZATION_CODE", + "JWT_BEARER" + ] + }, + "TokenUrlCustomProperties": { + "description": "A map for properties for custom connector Token Url.", + "type": "object", + "patternProperties": { + "^[\\w]{1,128}$": { + "description": "A string containing the value for the property", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "\\S+" + } + }, + "required": [], + "additionalProperties": false + }, + "CustomAuthenticationType": { + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "ClientId": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "ClientSecret": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "InstanceUrl": { + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "AccessToken": { + "type": "string", + "pattern": "\\S+", + "maxLength": 4096 + }, + "ApiKey": { + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "ApiSecretKey": { + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "ApiToken": { + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "ApplicationKey": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "AuthCode": { + "type": "string", + "pattern": "\\S+", + "maxLength": 4096 + }, + "BucketName": { + "type": "string", + "pattern": "\\S+", + "maxLength": 63, + "minLength": 3 + }, + "BucketPrefix": { + "type": "string", + "maxLength": 128 + }, + "Key": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "DatabaseUrl": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "RoleArn": { + "type": "string", + "pattern": "arn:aws:iam:.*:[0-9]+:.*", + "maxLength": 512 + }, + "DataApiRoleArn": { + "type": "string", + "pattern": "arn:aws:iam:.*:[0-9]+:.*", + "maxLength": 512 + }, + "ClusterIdentifier": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "WorkgroupName": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "DatabaseName": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "Warehouse": { + "type": "string", + "pattern": "[\\s\\w/!@#+=.-]*", + "maxLength": 512 + }, + "Stage": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "PrivateLinkServiceName": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "AccountName": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "JwtToken": { + "type": "string", + "pattern": "^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_.+/=]*$", + "maxLength": 8000 + }, + "RefreshToken": { + "type": "string", + "pattern": "\\S+", + "maxLength": 4096 + }, + "Region": { + "type": "string", + "pattern": "\\S+", + "maxLength": 64 + }, + "SecretKey": { + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "AccessKeyId": { + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "Username": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "Password": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "BusinessUnitId": { + "type": "string", + "pattern": "\\S+", + "maxLength": 18 + }, + "ConnectorOAuthRequest": { + "type": "object", + "properties": { + "AuthCode": { + "description": "The code provided by the connector when it has been authenticated via the connected app.", + "type": "string" + }, + "RedirectUri": { + "description": "The URL to which the authentication server redirects the browser after authorization has been\ngranted.", + "type": "string" + } + } + }, + "ClientCredentialsArn": { + "type": "string", + "pattern": "arn:aws:secretsmanager:.*:[0-9]+:.*", + "maxLength": 2048 + }, + "ApplicationHostUrl": { + "type": "string", + "maxLength": 256, + "pattern": "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]" + }, + "ApplicationServicePath": { + "type": "string", + "pattern": "\\S+", + "maxLength": 512 + }, + "ClientNumber": { + "type": "string", + "pattern": "^\\d{3}$", + "minLength": 3, + "maxLength": 3 + }, + "LogonLanguage": { + "type": "string", + "pattern": "^[a-zA-Z0-9_]*$", + "maxLength": 2 + }, + "PortNumber": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "OAuthProperties": { + "type": "object", + "properties": { + "AuthCodeUrl": { + "type": "string", + "maxLength": 256, + "pattern": "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]" + }, + "TokenUrl": { + "type": "string", + "maxLength": 256, + "pattern": "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]" + }, + "OAuthScopes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "maxLength": 128, + "pattern": "[/\\w]*" + } + } + } + } + }, + "required": [ + "ConnectorProfileName", + "ConnectionMode", + "ConnectorType" + ], + "createOnlyProperties": [ + "/properties/ConnectorProfileName", + "/properties/ConnectorType", + "/properties/ConnectorLabel" + ], + "readOnlyProperties": [ + "/properties/ConnectorProfileArn", + "/properties/CredentialsArn" + ], + "writeOnlyProperties": [ + "/properties/ConnectorProfileConfig", + "/properties/KMSArn" + ], + "primaryIdentifier": [ + "/properties/ConnectorProfileName" + ], + "handlers": { + "create": { + "permissions": [ + "appflow:CreateConnectorProfile", + "kms:ListKeys", + "kms:DescribeKey", + "kms:ListAliases", + "kms:CreateGrant", + "kms:ListGrants", + "iam:PassRole", + "secretsmanager:CreateSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:PutResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "appflow:DeleteConnectorProfile" + ] + }, + "list": { + "permissions": [ + "appflow:DescribeConnectorProfiles" + ] + }, + "read": { + "permissions": [ + "appflow:DescribeConnectorProfiles" + ] + }, + "update": { + "permissions": [ + "appflow:UpdateConnectorProfile", + "kms:ListKeys", + "kms:DescribeKey", + "kms:ListAliases", + "kms:CreateGrant", + "kms:ListGrants", + "iam:PassRole", + "secretsmanager:CreateSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:PutResourcePolicy" + ] + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/appflow/flow.json b/internal/aws/cfn/schemas/aws/appflow/flow.json new file mode 100644 index 00000000..70751375 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appflow/flow.json @@ -0,0 +1,1770 @@ +{ + "typeName": "AWS::AppFlow::Flow", + "description": "Resource schema for AWS::AppFlow::Flow.", + "sourceUrl": "https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html", + "additionalProperties": false, + "properties": { + "FlowArn": { + "description": "ARN identifier of the flow.", + "type": "string", + "pattern": "arn:aws:appflow:.*:[0-9]+:.*", + "maxLength": 512 + }, + "FlowName": { + "description": "Name of the flow.", + "type": "string", + "pattern": "[a-zA-Z0-9][\\w!@#.-]+", + "maxLength": 256, + "minLength": 1 + }, + "Description": { + "description": "Description of the flow.", + "type": "string", + "pattern": "[\\w!@#\\-.?,\\s]*", + "maxLength": 2048 + }, + "KMSArn": { + "description": "The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.", + "type": "string", + "pattern": "arn:aws:kms:.*:[0-9]+:.*", + "maxLength": 2048, + "minLength": 20 + }, + "TriggerConfig": { + "description": "Trigger settings of the flow.", + "$ref": "#/definitions/TriggerConfig" + }, + "FlowStatus": { + "description": "Flow activation status for Scheduled- and Event-triggered flows", + "type": "string", + "enum": [ + "Active", + "Suspended", + "Draft" + ] + }, + "SourceFlowConfig": { + "description": "Configurations of Source connector of the flow.", + "$ref": "#/definitions/SourceFlowConfig" + }, + "DestinationFlowConfigList": { + "description": "List of Destination connectors of the flow.", + "type": "array", + "items": { + "$ref": "#/definitions/DestinationFlowConfig" + } + }, + "Tasks": { + "description": "List of tasks for the flow.", + "type": "array", + "items": { + "$ref": "#/definitions/Task" + } + }, + "Tags": { + "description": "List of Tags.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "MetadataCatalogConfig": { + "description": "Configurations of metadata catalog of the flow.", + "$ref": "#/definitions/MetadataCatalogConfig" + } + }, + "definitions": { + "TriggerConfig": { + "description": "Trigger settings of the flow.", + "type": "object", + "properties": { + "TriggerType": { + "description": "Trigger type of the flow", + "$ref": "#/definitions/TriggerType" + }, + "TriggerProperties": { + "description": "Details required based on the type of trigger", + "$ref": "#/definitions/ScheduledTriggerProperties" + } + }, + "required": [ + "TriggerType" + ], + "additionalProperties": false + }, + "SourceFlowConfig": { + "description": "Configurations of Source connector of the flow.", + "type": "object", + "properties": { + "ConnectorType": { + "description": "Type of source connector", + "$ref": "#/definitions/ConnectorType" + }, + "ApiVersion": { + "description": "The API version that the destination connector uses.", + "$ref": "#/definitions/ApiVersion" + }, + "ConnectorProfileName": { + "description": "Name of source connector profile", + "$ref": "#/definitions/ConnectorProfileName" + }, + "SourceConnectorProperties": { + "description": "Source connector details required to query a connector", + "$ref": "#/definitions/SourceConnectorProperties" + }, + "IncrementalPullConfig": { + "description": "Configuration for scheduled incremental data pull", + "$ref": "#/definitions/IncrementalPullConfig" + } + }, + "required": [ + "ConnectorType", + "SourceConnectorProperties" + ], + "additionalProperties": false + }, + "DestinationFlowConfig": { + "description": "Configurations of destination connector.", + "type": "object", + "properties": { + "ConnectorType": { + "description": "Destination connector type", + "$ref": "#/definitions/ConnectorType" + }, + "ApiVersion": { + "description": "The API version that the destination connector uses.", + "$ref": "#/definitions/ApiVersion" + }, + "ConnectorProfileName": { + "description": "Name of destination connector profile", + "$ref": "#/definitions/ConnectorProfileName" + }, + "DestinationConnectorProperties": { + "description": "Destination connector details", + "$ref": "#/definitions/DestinationConnectorProperties" + } + }, + "required": [ + "ConnectorType", + "DestinationConnectorProperties" + ], + "additionalProperties": false + }, + "Task": { + "type": "object", + "properties": { + "SourceFields": { + "description": "Source fields on which particular task will be applied", + "type": "array", + "items": { + "type": "string" + } + }, + "ConnectorOperator": { + "description": "Operation to be performed on provided source fields", + "$ref": "#/definitions/ConnectorOperator" + }, + "DestinationField": { + "description": "A field value on which source field should be validated", + "type": "string", + "maxLength": 256 + }, + "TaskType": { + "description": "Type of task", + "$ref": "#/definitions/TaskType" + }, + "TaskProperties": { + "description": "A Map used to store task related info", + "type": "array", + "items": { + "$ref": "#/definitions/TaskPropertiesObject" + } + } + }, + "required": [ + "SourceFields", + "TaskType" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A label for tagging AppFlow resources", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "MetadataCatalogConfig": { + "description": "Configurations of metadata catalog of the flow.", + "type": "object", + "properties": { + "GlueDataCatalog": { + "description": "Configurations of glue data catalog of the flow.", + "$ref": "#/definitions/GlueDataCatalog" + } + }, + "additionalProperties": false + }, + "GlueDataCatalog": { + "description": "Trigger settings of the flow.", + "type": "object", + "properties": { + "RoleArn": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 512, + "pattern": "arn:aws:iam:.*:[0-9]+:.*" + }, + "DatabaseName": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 255, + "pattern": "[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\t]*" + }, + "TablePrefix": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 128, + "pattern": "[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\t]*" + } + }, + "required": [ + "RoleArn", + "DatabaseName", + "TablePrefix" + ], + "additionalProperties": false + }, + "DestinationConnectorProperties": { + "description": "Destination connector details", + "type": "object", + "properties": { + "Redshift": { + "$ref": "#/definitions/RedshiftDestinationProperties" + }, + "S3": { + "$ref": "#/definitions/S3DestinationProperties" + }, + "Salesforce": { + "$ref": "#/definitions/SalesforceDestinationProperties" + }, + "Snowflake": { + "$ref": "#/definitions/SnowflakeDestinationProperties" + }, + "EventBridge": { + "$ref": "#/definitions/EventBridgeDestinationProperties" + }, + "Upsolver": { + "$ref": "#/definitions/UpsolverDestinationProperties" + }, + "LookoutMetrics": { + "$ref": "#/definitions/LookoutMetricsDestinationProperties" + }, + "Marketo": { + "$ref": "#/definitions/MarketoDestinationProperties" + }, + "Zendesk": { + "$ref": "#/definitions/ZendeskDestinationProperties" + }, + "CustomConnector": { + "$ref": "#/definitions/CustomConnectorDestinationProperties" + }, + "SAPOData": { + "$ref": "#/definitions/SAPODataDestinationProperties" + } + } + }, + "IncrementalPullConfig": { + "description": "Configuration for scheduled incremental data pull", + "type": "object", + "properties": { + "DatetimeTypeFieldName": { + "$ref": "#/definitions/DatetimeTypeFieldName" + } + } + }, + "SourceConnectorProperties": { + "description": "Source connector details required to query a connector", + "type": "object", + "properties": { + "Amplitude": { + "$ref": "#/definitions/AmplitudeSourceProperties" + }, + "Datadog": { + "$ref": "#/definitions/DatadogSourceProperties" + }, + "Dynatrace": { + "$ref": "#/definitions/DynatraceSourceProperties" + }, + "GoogleAnalytics": { + "$ref": "#/definitions/GoogleAnalyticsSourceProperties" + }, + "InforNexus": { + "$ref": "#/definitions/InforNexusSourceProperties" + }, + "Marketo": { + "$ref": "#/definitions/MarketoSourceProperties" + }, + "S3": { + "$ref": "#/definitions/S3SourceProperties" + }, + "SAPOData": { + "$ref": "#/definitions/SAPODataSourceProperties" + }, + "Salesforce": { + "$ref": "#/definitions/SalesforceSourceProperties" + }, + "Pardot": { + "$ref": "#/definitions/PardotSourceProperties" + }, + "ServiceNow": { + "$ref": "#/definitions/ServiceNowSourceProperties" + }, + "Singular": { + "$ref": "#/definitions/SingularSourceProperties" + }, + "Slack": { + "$ref": "#/definitions/SlackSourceProperties" + }, + "Trendmicro": { + "$ref": "#/definitions/TrendmicroSourceProperties" + }, + "Veeva": { + "$ref": "#/definitions/VeevaSourceProperties" + }, + "Zendesk": { + "$ref": "#/definitions/ZendeskSourceProperties" + }, + "CustomConnector": { + "$ref": "#/definitions/CustomConnectorSourceProperties" + } + } + }, + "ConnectorOperator": { + "description": "Operation to be performed on provided source fields", + "type": "object", + "properties": { + "Amplitude": { + "$ref": "#/definitions/AmplitudeConnectorOperator" + }, + "Datadog": { + "$ref": "#/definitions/DatadogConnectorOperator" + }, + "Dynatrace": { + "$ref": "#/definitions/DynatraceConnectorOperator" + }, + "GoogleAnalytics": { + "$ref": "#/definitions/GoogleAnalyticsConnectorOperator" + }, + "InforNexus": { + "$ref": "#/definitions/InforNexusConnectorOperator" + }, + "Marketo": { + "$ref": "#/definitions/MarketoConnectorOperator" + }, + "S3": { + "$ref": "#/definitions/S3ConnectorOperator" + }, + "SAPOData": { + "$ref": "#/definitions/SAPODataConnectorOperator" + }, + "Salesforce": { + "$ref": "#/definitions/SalesforceConnectorOperator" + }, + "Pardot": { + "$ref": "#/definitions/PardotConnectorOperator" + }, + "ServiceNow": { + "$ref": "#/definitions/ServiceNowConnectorOperator" + }, + "Singular": { + "$ref": "#/definitions/SingularConnectorOperator" + }, + "Slack": { + "$ref": "#/definitions/SlackConnectorOperator" + }, + "Trendmicro": { + "$ref": "#/definitions/TrendmicroConnectorOperator" + }, + "Veeva": { + "$ref": "#/definitions/VeevaConnectorOperator" + }, + "Zendesk": { + "$ref": "#/definitions/ZendeskConnectorOperator" + }, + "CustomConnector": { + "$ref": "#/definitions/Operator" + } + } + }, + "ScheduledTriggerProperties": { + "description": "Details required for scheduled trigger type", + "type": "object", + "properties": { + "ScheduleExpression": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "DataPullMode": { + "type": "string", + "enum": [ + "Incremental", + "Complete" + ] + }, + "ScheduleStartTime": { + "type": "number" + }, + "ScheduleEndTime": { + "type": "number" + }, + "FirstExecutionFrom": { + "type": "number" + }, + "TimeZone": { + "type": "string", + "maxLength": 256 + }, + "ScheduleOffset": { + "type": "number", + "minimum": 0, + "maximum": 36000 + }, + "FlowErrorDeactivationThreshold": { + "type": "integer", + "minimum": 1, + "maximum": 100 + } + }, + "required": [ + "ScheduleExpression" + ], + "additionalProperties": false + }, + "CustomProperties": { + "description": "A map for properties for custom connector.", + "type": "object", + "patternProperties": { + "^[\\w]{1,2048}$": { + "description": "A string containing the value for the property", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "\\S+" + } + }, + "required": [], + "additionalProperties": false + }, + "TriggerType": { + "type": "string", + "enum": [ + "Scheduled", + "Event", + "OnDemand" + ] + }, + "Object": { + "type": "string", + "maxLength": 512, + "pattern": "\\S+" + }, + "EntityName": { + "type": "string", + "maxLength": 1024, + "pattern": "\\S+" + }, + "EnableDynamicFieldUpdate": { + "type": "boolean" + }, + "IncludeDeletedRecords": { + "type": "boolean" + }, + "IncludeAllVersions": { + "type": "boolean" + }, + "IncludeRenditions": { + "type": "boolean" + }, + "IncludeSourceFiles": { + "type": "boolean" + }, + "DocumentType": { + "type": "string", + "maxLength": 512, + "pattern": "[\\s\\w_-]+" + }, + "BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "\\S+" + }, + "UpsolverBucketName": { + "type": "string", + "minLength": 16, + "maxLength": 63, + "pattern": "^(upsolver-appflow)\\S*" + }, + "BucketPrefix": { + "type": "string", + "maxLength": 512 + }, + "S3InputFormatConfig": { + "type": "object", + "properties": { + "S3InputFileType": { + "type": "string", + "enum": [ + "CSV", + "JSON" + ] + } + } + }, + "ErrorHandlingConfig": { + "type": "object", + "properties": { + "FailOnFirstError": { + "type": "boolean" + }, + "BucketPrefix": { + "$ref": "#/definitions/BucketPrefix" + }, + "BucketName": { + "$ref": "#/definitions/BucketName" + } + }, + "additionalProperties": false + }, + "SuccessResponseHandlingConfig": { + "type": "object", + "properties": { + "BucketPrefix": { + "$ref": "#/definitions/BucketPrefix" + }, + "BucketName": { + "$ref": "#/definitions/BucketName" + } + }, + "additionalProperties": false + }, + "Name": { + "type": "string", + "maxLength": 128, + "pattern": "\\S+" + }, + "WriteOperationType": { + "type": "string", + "enum": [ + "INSERT", + "UPSERT", + "UPDATE", + "DELETE" + ] + }, + "FileType": { + "type": "string", + "enum": [ + "CSV", + "JSON", + "PARQUET" + ] + }, + "AggregationType": { + "type": "string", + "enum": [ + "None", + "SingleFile" + ] + }, + "TargetFileSize": { + "type": "integer" + }, + "PreserveSourceDataTyping": { + "type": "boolean" + }, + "PrefixType": { + "type": "string", + "enum": [ + "FILENAME", + "PATH", + "PATH_AND_FILENAME" + ] + }, + "PrefixFormat": { + "type": "string", + "enum": [ + "YEAR", + "MONTH", + "DAY", + "HOUR", + "MINUTE" + ] + }, + "PathPrefixHierarchy": { + "type": "array", + "items": { + "$ref": "#/definitions/PathPrefix" + } + }, + "PathPrefix": { + "type": "string", + "enum": [ + "EXECUTION_ID", + "SCHEMA_VERSION" + ] + }, + "PrefixConfig": { + "type": "object", + "properties": { + "PrefixType": { + "$ref": "#/definitions/PrefixType" + }, + "PrefixFormat": { + "$ref": "#/definitions/PrefixFormat" + }, + "PathPrefixHierarchy": { + "$ref": "#/definitions/PathPrefixHierarchy" + } + }, + "additionalProperties": false + }, + "AggregationConfig": { + "type": "object", + "properties": { + "AggregationType": { + "$ref": "#/definitions/AggregationType" + }, + "TargetFileSize": { + "$ref": "#/definitions/TargetFileSize" + } + } + }, + "S3OutputFormatConfig": { + "type": "object", + "properties": { + "FileType": { + "$ref": "#/definitions/FileType" + }, + "PrefixConfig": { + "$ref": "#/definitions/PrefixConfig" + }, + "AggregationConfig": { + "$ref": "#/definitions/AggregationConfig" + }, + "PreserveSourceDataTyping": { + "$ref": "#/definitions/PreserveSourceDataTyping" + } + }, + "additionalProperties": false + }, + "UpsolverS3OutputFormatConfig": { + "type": "object", + "properties": { + "FileType": { + "$ref": "#/definitions/FileType" + }, + "PrefixConfig": { + "$ref": "#/definitions/PrefixConfig" + }, + "AggregationConfig": { + "$ref": "#/definitions/AggregationConfig" + } + }, + "required": [ + "PrefixConfig" + ], + "additionalProperties": false + }, + "ConnectorType": { + "type": "string", + "enum": [ + "SAPOData", + "Salesforce", + "Pardot", + "Singular", + "Slack", + "Redshift", + "S3", + "Marketo", + "Googleanalytics", + "Zendesk", + "Servicenow", + "Datadog", + "Trendmicro", + "Snowflake", + "Dynatrace", + "Infornexus", + "Amplitude", + "Veeva", + "CustomConnector", + "EventBridge", + "Upsolver", + "LookoutMetrics" + ] + }, + "ApiVersion": { + "description": "The API version that the connector will use.", + "type": "string", + "pattern": "\\S+", + "maxLength": 256 + }, + "ConnectorProfileName": { + "description": "Name of connector profile", + "type": "string", + "pattern": "[\\w/!@#+=.-]+", + "maxLength": 256 + }, + "AmplitudeSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "DatadogSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "DynatraceSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "GoogleAnalyticsSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "InforNexusSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "MarketoSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "S3SourceProperties": { + "type": "object", + "properties": { + "BucketName": { + "$ref": "#/definitions/BucketName" + }, + "BucketPrefix": { + "$ref": "#/definitions/BucketPrefix" + }, + "S3InputFormatConfig": { + "$ref": "#/definitions/S3InputFormatConfig" + } + }, + "required": [ + "BucketName", + "BucketPrefix" + ], + "additionalProperties": false + }, + "SAPODataSourceProperties": { + "type": "object", + "properties": { + "ObjectPath": { + "$ref": "#/definitions/Object" + }, + "parallelismConfig": { + "$ref": "#/definitions/SAPODataParallelismConfig" + }, + "paginationConfig": { + "$ref": "#/definitions/SAPODataPaginationConfig" + } + }, + "required": [ + "ObjectPath" + ], + "additionalProperties": false + }, + "SalesforceSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "EnableDynamicFieldUpdate": { + "$ref": "#/definitions/EnableDynamicFieldUpdate" + }, + "IncludeDeletedRecords": { + "$ref": "#/definitions/IncludeDeletedRecords" + }, + "DataTransferApi": { + "$ref": "#/definitions/DataTransferApi" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "PardotSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "ServiceNowSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "SingularSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "SlackSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "TrendmicroSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "VeevaSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "DocumentType": { + "$ref": "#/definitions/DocumentType" + }, + "IncludeSourceFiles": { + "$ref": "#/definitions/IncludeSourceFiles" + }, + "IncludeRenditions": { + "$ref": "#/definitions/IncludeRenditions" + }, + "IncludeAllVersions": { + "$ref": "#/definitions/IncludeAllVersions" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "ZendeskSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "CustomConnectorSourceProperties": { + "type": "object", + "properties": { + "EntityName": { + "$ref": "#/definitions/EntityName" + }, + "CustomProperties": { + "$ref": "#/definitions/CustomProperties" + }, + "DataTransferApi": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 64, + "pattern": "[\\w/-]+" + }, + "Type": { + "type": "string", + "enum": [ + "SYNC", + "ASYNC", + "AUTOMATIC" + ] + } + }, + "required": [ + "Name", + "Type" + ], + "additionalProperties": false + } + }, + "required": [ + "EntityName" + ], + "additionalProperties": false + }, + "CustomConnectorDestinationProperties": { + "type": "object", + "properties": { + "EntityName": { + "$ref": "#/definitions/EntityName" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + }, + "WriteOperationType": { + "$ref": "#/definitions/WriteOperationType" + }, + "IdFieldNames": { + "description": "List of fields used as ID when performing a write operation.", + "type": "array", + "items": { + "type": "string" + } + }, + "CustomProperties": { + "$ref": "#/definitions/CustomProperties" + } + }, + "required": [ + "EntityName" + ], + "additionalProperties": false + }, + "ZendeskDestinationProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + }, + "IdFieldNames": { + "description": "List of fields used as ID when performing a write operation.", + "type": "array", + "items": { + "type": "string" + } + }, + "WriteOperationType": { + "$ref": "#/definitions/WriteOperationType" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "RedshiftDestinationProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "IntermediateBucketName": { + "$ref": "#/definitions/BucketName" + }, + "BucketPrefix": { + "$ref": "#/definitions/BucketPrefix" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + } + }, + "required": [ + "Object", + "IntermediateBucketName" + ], + "additionalProperties": false + }, + "S3DestinationProperties": { + "type": "object", + "properties": { + "BucketName": { + "$ref": "#/definitions/BucketName" + }, + "BucketPrefix": { + "$ref": "#/definitions/BucketPrefix" + }, + "S3OutputFormatConfig": { + "$ref": "#/definitions/S3OutputFormatConfig" + } + }, + "required": [ + "BucketName" + ], + "additionalProperties": false + }, + "SAPODataDestinationProperties": { + "type": "object", + "properties": { + "ObjectPath": { + "$ref": "#/definitions/Object" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + }, + "SuccessResponseHandlingConfig": { + "$ref": "#/definitions/SuccessResponseHandlingConfig" + }, + "IdFieldNames": { + "description": "List of fields used as ID when performing a write operation.", + "type": "array", + "items": { + "type": "string" + } + }, + "WriteOperationType": { + "$ref": "#/definitions/WriteOperationType" + } + }, + "required": [ + "ObjectPath" + ], + "additionalProperties": false + }, + "SalesforceDestinationProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + }, + "IdFieldNames": { + "description": "List of fields used as ID when performing a write operation.", + "type": "array", + "items": { + "type": "string" + } + }, + "WriteOperationType": { + "$ref": "#/definitions/WriteOperationType" + }, + "DataTransferApi": { + "$ref": "#/definitions/DataTransferApi" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "SnowflakeDestinationProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "IntermediateBucketName": { + "$ref": "#/definitions/BucketName" + }, + "BucketPrefix": { + "$ref": "#/definitions/BucketPrefix" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + } + }, + "required": [ + "Object", + "IntermediateBucketName" + ], + "additionalProperties": false + }, + "EventBridgeDestinationProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "UpsolverDestinationProperties": { + "type": "object", + "properties": { + "BucketName": { + "$ref": "#/definitions/UpsolverBucketName" + }, + "BucketPrefix": { + "$ref": "#/definitions/BucketPrefix" + }, + "S3OutputFormatConfig": { + "$ref": "#/definitions/UpsolverS3OutputFormatConfig" + } + }, + "required": [ + "BucketName", + "S3OutputFormatConfig" + ], + "additionalProperties": false + }, + "LookoutMetricsDestinationProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "additionalProperties": false + }, + "MarketoDestinationProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "ErrorHandlingConfig": { + "$ref": "#/definitions/ErrorHandlingConfig" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "DatetimeTypeFieldName": { + "description": "Name of the datetime/timestamp data type field to be used for importing incremental records from the source", + "type": "string", + "maxLength": 256 + }, + "TaskType": { + "type": "string", + "enum": [ + "Arithmetic", + "Filter", + "Map", + "Map_all", + "Mask", + "Merge", + "Passthrough", + "Truncate", + "Validate", + "Partition" + ] + }, + "OperatorPropertiesKeys": { + "type": "string", + "enum": [ + "VALUE", + "VALUES", + "DATA_TYPE", + "UPPER_BOUND", + "LOWER_BOUND", + "SOURCE_DATA_TYPE", + "DESTINATION_DATA_TYPE", + "VALIDATION_ACTION", + "MASK_VALUE", + "MASK_LENGTH", + "TRUNCATE_LENGTH", + "MATH_OPERATION_FIELDS_ORDER", + "CONCAT_FORMAT", + "SUBFIELD_CATEGORY_MAP", + "EXCLUDE_SOURCE_FIELDS_LIST", + "INCLUDE_NEW_FIELDS", + "ORDERED_PARTITION_KEYS_LIST" + ] + }, + "TaskPropertiesObject": { + "description": "An object used to store task related info", + "type": "object", + "properties": { + "Key": { + "$ref": "#/definitions/OperatorPropertiesKeys" + }, + "Value": { + "type": "string", + "maxLength": 2048, + "pattern": ".+" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "AmplitudeConnectorOperator": { + "type": "string", + "enum": [ + "BETWEEN" + ] + }, + "DatadogConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "BETWEEN", + "EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "DynatraceConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "BETWEEN", + "EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "GoogleAnalyticsConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "BETWEEN" + ] + }, + "InforNexusConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "BETWEEN", + "EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "MarketoConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "BETWEEN", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "S3ConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "SAPODataConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "CONTAINS", + "GREATER_THAN", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "SalesforceConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "CONTAINS", + "GREATER_THAN", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "PardotConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "EQUAL_TO", + "NO_OP", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC" + ] + }, + "ServiceNowConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "CONTAINS", + "GREATER_THAN", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "SingularConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "SlackConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "BETWEEN", + "EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "TrendmicroConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "VeevaConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "ZendeskConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "GREATER_THAN", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "Operator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "CONTAINS", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "Status": { + "type": "string", + "enum": [ + "Active", + "Draft", + "Errored", + "Suspended" + ] + }, + "DataTransferApi": { + "type": "string", + "enum": [ + "AUTOMATIC", + "BULKV2", + "REST_SYNC" + ] + }, + "SAPODataParallelismConfig": { + "description": "SAP Source connector parallelism factor", + "type": "object", + "properties": { + "maxParallelism": { + "$ref": "#/definitions/SAPODataMaxParallelism" + } + }, + "required": [ + "maxParallelism" + ], + "additionalProperties": false + }, + "SAPODataPaginationConfig": { + "description": "SAP Source connector page size", + "type": "object", + "properties": { + "maxPageSize": { + "$ref": "#/definitions/SAPODataMaxPageSize" + } + }, + "required": [ + "maxPageSize" + ], + "additionalProperties": false + }, + "SAPODataMaxParallelism": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "SAPODataMaxPageSize": { + "type": "integer", + "minimum": 1, + "maximum": 10000 + } + }, + "required": [ + "FlowName", + "Tasks", + "SourceFlowConfig", + "DestinationFlowConfigList", + "TriggerConfig" + ], + "createOnlyProperties": [ + "/properties/FlowName", + "/properties/KMSArn" + ], + "readOnlyProperties": [ + "/properties/FlowArn" + ], + "primaryIdentifier": [ + "/properties/FlowName" + ], + "handlers": { + "create": { + "permissions": [ + "appflow:CreateFlow", + "appflow:StartFlow", + "appflow:TagResource", + "appflow:ListTagsForResource", + "appflow:UseConnectorProfile", + "iam:PassRole", + "s3:ListAllMyBuckets", + "s3:GetBucketLocation", + "s3:GetBucketPolicy", + "kms:ListGrants", + "kms:ListKeys", + "kms:DescribeKey", + "kms:ListAliases", + "kms:CreateGrant", + "secretsmanager:CreateSecret", + "secretsmanager:PutResourcePolicy" + ] + }, + "read": { + "permissions": [ + "appflow:DescribeFlow", + "appflow:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "appflow:UpdateFlow", + "appflow:StartFlow", + "appflow:StopFlow", + "appflow:TagResource", + "appflow:UntagResource", + "appflow:ListTagsForResource", + "appflow:UseConnectorProfile", + "iam:PassRole", + "s3:ListAllMyBuckets", + "s3:GetBucketLocation", + "s3:GetBucketPolicy", + "kms:ListGrants", + "secretsmanager:CreateSecret", + "secretsmanager:PutResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "appflow:DeleteFlow" + ] + }, + "list": { + "permissions": [ + "appflow:ListFlows" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/appintegrations/dataintegration.json b/internal/aws/cfn/schemas/aws/appintegrations/dataintegration.json new file mode 100644 index 00000000..0aadf423 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appintegrations/dataintegration.json @@ -0,0 +1,282 @@ +{ + "typeName": "AWS::AppIntegrations::DataIntegration", + "description": "Resource Type definition for AWS::AppIntegrations::DataIntegration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "ScheduleConfig": { + "type": "object", + "properties": { + "FirstExecutionFrom": { + "description": "The start date for objects to import in the first flow run. Epoch or ISO timestamp format is supported.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 255 + }, + "Object": { + "description": "The name of the object to pull from the data source.", + "type": "string", + "pattern": "^[a-zA-Z0-9/\\._\\-]+$", + "minLength": 1, + "maxLength": 255 + }, + "ScheduleExpression": { + "description": "How often the data should be pulled from data source.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false, + "required": [ + "ScheduleExpression" + ] + }, + "Tag": { + "description": "A label for tagging DataIntegration resources", + "type": "object", + "properties": { + "Key": { + "description": "A key to identify the tag.", + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "Corresponding tag value for the key.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "FileConfiguration": { + "description": "The configuration for what files should be pulled from the source.", + "type": "object", + "properties": { + "Folders": { + "description": "Identifiers for the source folders to pull all files from recursively.", + "type": "array", + "minItems": 1, + "maxItems": 10, + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 200 + } + }, + "Filters": { + "description": "Restrictions for what files should be pulled from the source.", + "type": "object", + "patternProperties": { + "^[A-Za-z]": { + "type": "array", + "minItems": 1, + "maxItems": 2048, + "items": { + "type": "string", + "maxLength": 255, + "minLength": 1 + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "Folders" + ] + }, + "ObjectConfiguration": { + "description": "The configuration for what data should be pulled from the source.", + "type": "object", + "patternProperties": { + "^.+$": { + "type": "object", + "patternProperties": { + "^[A-Za-z]": { + "type": "array", + "minItems": 1, + "maxItems": 2048, + "items": { + "type": "string", + "maxLength": 255, + "minLength": 1 + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "properties": { + "Description": { + "description": "The data integration description.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "Id": { + "description": "The unique identifer of the data integration.", + "type": "string", + "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}", + "minLength": 1, + "maxLength": 255 + }, + "DataIntegrationArn": { + "description": "The Amazon Resource Name (ARN) of the data integration.", + "type": "string", + "pattern": "^arn:aws[-a-z]*:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$", + "minLength": 1, + "maxLength": 2048 + }, + "Name": { + "description": "The name of the data integration.", + "type": "string", + "pattern": "^[a-zA-Z0-9/\\._\\-]+$", + "minLength": 1, + "maxLength": 255 + }, + "KmsKey": { + "description": "The KMS key of the data integration.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 255 + }, + "ScheduleConfig": { + "description": "The name of the data and how often it should be pulled from the source.", + "$ref": "#/definitions/ScheduleConfig" + }, + "SourceURI": { + "description": "The URI of the data source.", + "type": "string", + "pattern": "^(\\w+\\:\\/\\/[\\w.-]+[\\w/!@#+=.-]+$)|(\\w+\\:\\/\\/[\\w.-]+[\\w/!@#+=.-]+[\\w/!@#+=.-]+[\\w/!@#+=.,-]+$)", + "minLength": 1, + "maxLength": 1000 + }, + "Tags": { + "description": "The tags (keys and values) associated with the data integration.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 200 + }, + "FileConfiguration": { + "description": "The configuration for what files should be pulled from the source.", + "$ref": "#/definitions/FileConfiguration" + }, + "ObjectConfiguration": { + "description": "The configuration for what data should be pulled from the source.", + "$ref": "#/definitions/ObjectConfiguration" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "Name", + "KmsKey", + "SourceURI" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/DataIntegrationArn" + ], + "createOnlyProperties": [ + "/properties/KmsKey", + "/properties/ScheduleConfig", + "/properties/SourceURI" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "app-integrations:CreateDataIntegration", + "app-integrations:TagResource", + "appflow:DescribeConnectorProfiles", + "appflow:CreateFlow", + "appflow:DeleteFlow", + "appflow:DescribeConnectorEntity", + "appflow:UseConnectorProfile", + "appflow:TagResource", + "appflow:UntagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:ListAliases", + "kms:ListGrants", + "kms:ListKeys", + "s3:GetBucketNotification", + "s3:PutBucketNotification", + "s3:GetEncryptionConfiguration" + ] + }, + "read": { + "permissions": [ + "app-integrations:GetDataIntegration", + "app-integrations:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "app-integrations:ListDataIntegrations" + ] + }, + "update": { + "permissions": [ + "app-integrations:GetDataIntegration", + "app-integrations:UpdateDataIntegration", + "app-integrations:TagResource", + "app-integrations:UntagResource", + "appflow:DescribeConnectorProfiles", + "appflow:DeleteFlow", + "appflow:DescribeConnectorEntity", + "appflow:UseConnectorProfile", + "appflow:TagResource", + "appflow:UntagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:ListAliases", + "kms:ListGrants", + "kms:ListKeys" + ] + }, + "delete": { + "permissions": [ + "app-integrations:DeleteDataIntegration", + "app-integrations:UntagResource", + "appflow:CreateFlow", + "appflow:DeleteFlow", + "appflow:DescribeConnectorEntity", + "appflow:UseConnectorProfile", + "appflow:TagResource", + "appflow:UntagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:ListAliases", + "kms:ListGrants", + "kms:ListKeys" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appintegrations/eventintegration.json b/internal/aws/cfn/schemas/aws/appintegrations/eventintegration.json new file mode 100644 index 00000000..e417bfa2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appintegrations/eventintegration.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::AppIntegrations::EventIntegration", + "description": "Resource Type definition for AWS::AppIntegrations::EventIntegration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "EventFilter": { + "type": "object", + "properties": { + "Source": { + "description": "The source of the events.", + "type": "string", + "pattern": "^aws\\.partner\\/.*$", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Source" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "description": "A key to identify the tag.", + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "Corresponding tag value for the key.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "Metadata": { + "type": "object", + "properties": { + "Key": { + "description": "A key to identify the metadata.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 255 + }, + "Value": { + "description": "Corresponding metadata value for the key.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Description": { + "description": "The event integration description.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "EventIntegrationArn": { + "description": "The Amazon Resource Name (ARN) of the event integration.", + "type": "string", + "pattern": "^arn:aws[-a-z]*:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$", + "minLength": 1, + "maxLength": 2048 + }, + "Name": { + "description": "The name of the event integration.", + "type": "string", + "pattern": "^[a-zA-Z0-9/\\._\\-]+$", + "minLength": 1, + "maxLength": 255 + }, + "EventBridgeBus": { + "description": "The Amazon Eventbridge bus for the event integration.", + "type": "string", + "pattern": "^[a-zA-Z0-9/\\._\\-]+$", + "minLength": 1, + "maxLength": 255 + }, + "EventFilter": { + "description": "The EventFilter (source) associated with the event integration.", + "$ref": "#/definitions/EventFilter" + }, + "Tags": { + "description": "The tags (keys and values) associated with the event integration.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 200 + } + }, + "additionalProperties": false, + "required": [ + "Name", + "EventBridgeBus", + "EventFilter" + ], + "readOnlyProperties": [ + "/properties/EventIntegrationArn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/EventBridgeBus", + "/properties/EventFilter" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "app-integrations:CreateEventIntegration", + "app-integrations:TagResource" + ] + }, + "read": { + "permissions": [ + "app-integrations:GetEventIntegration", + "app-integrations:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "app-integrations:ListEventIntegrations" + ] + }, + "update": { + "permissions": [ + "app-integrations:GetEventIntegration", + "app-integrations:UpdateEventIntegration", + "app-integrations:TagResource", + "app-integrations:UntagResource" + ] + }, + "delete": { + "permissions": [ + "app-integrations:DeleteEventIntegration" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/applicationautoscaling/scalabletarget.json b/internal/aws/cfn/schemas/aws/applicationautoscaling/scalabletarget.json new file mode 100644 index 00000000..5c46bcba --- /dev/null +++ b/internal/aws/cfn/schemas/aws/applicationautoscaling/scalabletarget.json @@ -0,0 +1,187 @@ +{ + "typeName": "AWS::ApplicationAutoScaling::ScalableTarget", + "description": "Resource Type definition for AWS::ApplicationAutoScaling::ScalableTarget", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "definitions": { + "SuspendedState": { + "type": "object", + "additionalProperties": false, + "description": "specifies whether the scaling activities for a scalable target are in a suspended state", + "properties": { + "ScheduledScalingSuspended": { + "type": "boolean" + }, + "DynamicScalingOutSuspended": { + "type": "boolean" + }, + "DynamicScalingInSuspended": { + "type": "boolean" + } + } + }, + "ScheduledAction": { + "type": "object", + "additionalProperties": false, + "description": "specifies a scheduled action for a scalable target", + "properties": { + "Timezone": { + "type": "string" + }, + "ScheduledActionName": { + "type": "string" + }, + "EndTime": { + "type": "string" + }, + "Schedule": { + "type": "string" + }, + "StartTime": { + "type": "string" + }, + "ScalableTargetAction": { + "$ref": "#/definitions/ScalableTargetAction" + } + }, + "required": [ + "ScheduledActionName", + "Schedule" + ] + }, + "ScalableTargetAction": { + "type": "object", + "additionalProperties": false, + "description": "specifies the minimum and maximum capacity", + "properties": { + "MinCapacity": { + "type": "integer" + }, + "MaxCapacity": { + "type": "integer" + } + } + } + }, + "properties": { + "Id": { + "description": "This value can be returned by using the Ref function. Ref returns the Cloudformation generated ID of the resource in format - ResourceId|ScalableDimension|ServiceNamespace", + "type": "string" + }, + "MaxCapacity": { + "description": "The maximum value that you plan to scale in to. When a scaling policy is in effect, Application Auto Scaling can scale in (contract) as needed to the minimum capacity limit in response to changing demand", + "type": "integer" + }, + "MinCapacity": { + "description": "The minimum value that you plan to scale in to. When a scaling policy is in effect, Application Auto Scaling can scale in (contract) as needed to the minimum capacity limit in response to changing demand", + "type": "integer" + }, + "ResourceId": { + "description": "The identifier of the resource associated with the scalable target", + "type": "string" + }, + "RoleARN": { + "description": "Specify the Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that allows Application Auto Scaling to modify the scalable target on your behalf. ", + "type": "string" + }, + "ScalableDimension": { + "description": "The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property", + "type": "string" + }, + "ScheduledActions": { + "description": "The scheduled actions for the scalable target. Duplicates aren't allowed.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ScheduledAction" + } + }, + "ServiceNamespace": { + "description": "The namespace of the AWS service that provides the resource, or a custom-resource", + "type": "string" + }, + "SuspendedState": { + "description": "An embedded object that contains attributes and attribute values that are used to suspend and resume automatic scaling. Setting the value of an attribute to true suspends the specified scaling activities. Setting it to false (default) resumes the specified scaling activities.", + "$ref": "#/definitions/SuspendedState" + } + }, + "required": [ + "ResourceId", + "ServiceNamespace", + "ScalableDimension", + "MinCapacity", + "MaxCapacity" + ], + "createOnlyProperties": [ + "/properties/ResourceId", + "/properties/ScalableDimension", + "/properties/ServiceNamespace" + ], + "primaryIdentifier": [ + "/properties/ResourceId", + "/properties/ScalableDimension", + "/properties/ServiceNamespace" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/RoleARN" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:RegisterScalableTarget", + "application-autoscaling:DescribeScheduledActions", + "application-autoscaling:PutScheduledAction", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "cloudwatch:PutMetricAlarm", + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms", + "lambda:GetProvisionedConcurrencyConfig", + "lambda:PutProvisionedConcurrencyConfig", + "lambda:DeleteProvisionedConcurrencyConfig" + ] + }, + "read": { + "permissions": [ + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:DescribeScheduledActions" + ] + }, + "list": { + "permissions": [ + "application-autoscaling:DescribeScalableTargets" + ] + }, + "update": { + "permissions": [ + "application-autoscaling:RegisterScalableTarget", + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:DescribeScheduledActions", + "application-autoscaling:DeleteScheduledAction", + "application-autoscaling:PutScheduledAction", + "cloudwatch:PutMetricAlarm", + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms", + "lambda:GetProvisionedConcurrencyConfig", + "lambda:PutProvisionedConcurrencyConfig", + "lambda:DeleteProvisionedConcurrencyConfig" + ] + }, + "delete": { + "permissions": [ + "application-autoscaling:DeregisterScalableTarget" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/applicationautoscaling/scalingpolicy.json b/internal/aws/cfn/schemas/aws/applicationautoscaling/scalingpolicy.json new file mode 100644 index 00000000..b5aeb0cf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/applicationautoscaling/scalingpolicy.json @@ -0,0 +1,366 @@ +{ + "typeName": "AWS::ApplicationAutoScaling::ScalingPolicy", + "description": "Resource Type definition for AWS::ApplicationAutoScaling::ScalingPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "StepScalingPolicyConfiguration": { + "description": "A step scaling policy.", + "type": "object", + "additionalProperties": false, + "properties": { + "AdjustmentType": { + "description": "Specifies how the ScalingAdjustment value in a StepAdjustment is interpreted.", + "type": "string" + }, + "Cooldown": { + "description": "The amount of time, in seconds, to wait for a previous scaling activity to take effect.", + "type": "integer" + }, + "MetricAggregationType": { + "description": "The aggregation type for the CloudWatch metrics. Valid values are Minimum, Maximum, and Average. If the aggregation type is null, the value is treated as Average", + "type": "string" + }, + "MinAdjustmentMagnitude": { + "description": "The minimum value to scale by when the adjustment type is PercentChangeInCapacity.", + "type": "integer" + }, + "StepAdjustments": { + "description": "A set of adjustments that enable you to scale based on the size of the alarm breach.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/StepAdjustment" + } + } + } + }, + "TargetTrackingScalingPolicyConfiguration": { + "description": "A target tracking scaling policy.", + "type": "object", + "additionalProperties": false, + "properties": { + "CustomizedMetricSpecification": { + "description": "A customized metric. You can specify either a predefined metric or a customized metric.", + "$ref": "#/definitions/CustomizedMetricSpecification" + }, + "DisableScaleIn": { + "description": "Indicates whether scale in by the target tracking scaling policy is disabled. If the value is true, scale in is disabled and the target tracking scaling policy won't remove capacity from the scalable target. Otherwise, scale in is enabled and the target tracking scaling policy can remove capacity from the scalable target. The default value is false.", + "type": "boolean" + }, + "PredefinedMetricSpecification": { + "description": "A predefined metric. You can specify either a predefined metric or a customized metric.", + "$ref": "#/definitions/PredefinedMetricSpecification" + }, + "ScaleInCooldown": { + "description": "The amount of time, in seconds, after a scale-in activity completes before another scale-in activity can start.", + "type": "integer" + }, + "ScaleOutCooldown": { + "description": "The amount of time, in seconds, to wait for a previous scale-out activity to take effect.", + "type": "integer" + }, + "TargetValue": { + "description": "The target value for the metric. Although this property accepts numbers of type Double, it won't accept values that are either too small or too large. Values must be in the range of -2^360 to 2^360. The value must be a valid number based on the choice of metric. For example, if the metric is CPU utilization, then the target value is a percent value that represents how much of the CPU can be used before scaling out.", + "type": "number" + } + }, + "required": [ + "TargetValue" + ] + }, + "PredefinedMetricSpecification": { + "description": "Represents a predefined metric for a target tracking scaling policy to use with Application Auto Scaling.", + "type": "object", + "additionalProperties": false, + "properties": { + "PredefinedMetricType": { + "description": "The metric type. The ALBRequestCountPerTarget metric type applies only to Spot Fleets and ECS services.", + "type": "string" + }, + "ResourceLabel": { + "description": "Identifies the resource associated with the metric type. You can't specify a resource label unless the metric type is ALBRequestCountPerTarget and there is a target group attached to the Spot Fleet or ECS service.", + "type": "string" + } + }, + "required": [ + "PredefinedMetricType" + ] + }, + "CustomizedMetricSpecification": { + "description": "Represents a CloudWatch metric of your choosing for a target tracking scaling policy to use with Application Auto Scaling.", + "type": "object", + "additionalProperties": false, + "properties": { + "Dimensions": { + "description": "The dimensions of the metric.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricDimension" + } + }, + "MetricName": { + "description": "The name of the metric. To get the exact metric name, namespace, and dimensions, inspect the Metric object that is returned by a call to ListMetrics.", + "type": "string" + }, + "Namespace": { + "description": "The namespace of the metric.", + "type": "string" + }, + "Statistic": { + "description": "The statistic of the metric.", + "type": "string" + }, + "Unit": { + "description": "The unit of the metric. For a complete list of the units that CloudWatch supports, see the MetricDatum data type in the Amazon CloudWatch API Reference.", + "type": "string" + }, + "Metrics": { + "description": "The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TargetTrackingMetricDataQuery" + } + } + } + }, + "TargetTrackingMetricDataQuery": { + "description": "The metric data to return. Also defines whether this call is returning data for one metric only, or whether it is performing a math expression on the values of returned metric statistics to create a new time series. A time series is a series of data points, each of which is associated with a timestamp.", + "type": "object", + "additionalProperties": false, + "properties": { + "Expression": { + "description": "The math expression to perform on the returned data, if this object is performing a math expression.", + "type": "string" + }, + "Id": { + "description": "A short name that identifies the object's results in the response.", + "type": "string" + }, + "Label": { + "description": "A human-readable label for this metric or expression. This is especially useful if this is a math expression, so that you know what the value represents.", + "type": "string" + }, + "ReturnData": { + "description": "Indicates whether to return the timestamps and raw data values of this metric.", + "type": "boolean" + }, + "MetricStat": { + "description": "Information about the metric data to return.", + "$ref": "#/definitions/TargetTrackingMetricStat" + } + } + }, + "TargetTrackingMetricStat": { + "description": "This structure defines the CloudWatch metric to return, along with the statistic, period, and unit.", + "type": "object", + "additionalProperties": false, + "properties": { + "Metric": { + "description": "The CloudWatch metric to return, including the metric name, namespace, and dimensions. ", + "$ref": "#/definitions/TargetTrackingMetric" + }, + "Stat": { + "description": "The statistic to return. It can include any CloudWatch statistic or extended statistic.", + "type": "string" + }, + "Unit": { + "description": "The unit to use for the returned data points.", + "type": "string" + } + } + }, + "TargetTrackingMetric": { + "description": "Represents a specific metric.", + "type": "object", + "additionalProperties": false, + "properties": { + "Dimensions": { + "description": "The dimensions for the metric.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TargetTrackingMetricDimension" + } + }, + "MetricName": { + "description": "The name of the metric.", + "type": "string" + }, + "Namespace": { + "description": "The namespace of the metric.", + "type": "string" + } + } + }, + "TargetTrackingMetricDimension": { + "description": "Describes the dimension of a metric.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "The name of the dimension.", + "type": "string" + }, + "Value": { + "description": "The value of the dimension.", + "type": "string" + } + } + }, + "StepAdjustment": { + "description": "Represents a step adjustment for a StepScalingPolicyConfiguration. Describes an adjustment based on the difference between the value of the aggregated CloudWatch metric and the breach threshold that you've defined for the alarm.", + "type": "object", + "additionalProperties": false, + "properties": { + "MetricIntervalLowerBound": { + "description": "The lower bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the lower bound is inclusive (the metric must be greater than or equal to the threshold plus the lower bound). Otherwise, it is exclusive (the metric must be greater than the threshold plus the lower bound). A null value indicates negative infinity.", + "type": "number" + }, + "MetricIntervalUpperBound": { + "description": "The upper bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the upper bound is exclusive (the metric must be less than the threshold plus the upper bound). Otherwise, it is inclusive (the metric must be less than or equal to the threshold plus the upper bound). A null value indicates positive infinity.", + "type": "number" + }, + "ScalingAdjustment": { + "description": "The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a positive value.", + "type": "integer" + } + }, + "required": [ + "ScalingAdjustment" + ] + }, + "MetricDimension": { + "description": "Describes the dimension names and values associated with a metric.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "The name of the dimension.", + "type": "string" + }, + "Value": { + "description": "The value of the dimension.", + "type": "string" + } + }, + "required": [ + "Value", + "Name" + ] + } + }, + "properties": { + "PolicyName": { + "description": "The name of the scaling policy.\n\nUpdates to the name of a target tracking scaling policy are not supported, unless you also update the metric used for scaling. To change only a target tracking scaling policy's name, first delete the policy by removing the existing AWS::ApplicationAutoScaling::ScalingPolicy resource from the template and updating the stack. Then, recreate the resource with the same settings and a different name.", + "type": "string" + }, + "PolicyType": { + "description": "The scaling policy type.\n\nThe following policy types are supported:\n\nTargetTrackingScaling Not supported for Amazon EMR\n\nStepScaling Not supported for DynamoDB, Amazon Comprehend, Lambda, Amazon Keyspaces, Amazon MSK, Amazon ElastiCache, or Neptune.", + "type": "string" + }, + "ResourceId": { + "description": "The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.", + "type": "string" + }, + "ScalableDimension": { + "description": "The scalable dimension. This string consists of the service namespace, resource type, and scaling property.", + "type": "string" + }, + "ScalingTargetId": { + "description": "The CloudFormation-generated ID of an Application Auto Scaling scalable target. For more information about the ID, see the Return Value section of the AWS::ApplicationAutoScaling::ScalableTarget resource.", + "type": "string" + }, + "ServiceNamespace": { + "description": "The namespace of the AWS service that provides the resource, or a custom-resource.", + "type": "string" + }, + "StepScalingPolicyConfiguration": { + "description": "A step scaling policy.", + "$ref": "#/definitions/StepScalingPolicyConfiguration" + }, + "TargetTrackingScalingPolicyConfiguration": { + "description": "A target tracking scaling policy.", + "$ref": "#/definitions/TargetTrackingScalingPolicyConfiguration" + }, + "Arn": { + "description": "ARN is a read only property for the resource.", + "type": "string" + } + }, + "required": [ + "PolicyName", + "PolicyType" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/PolicyName", + "/properties/ServiceNamespace", + "/properties/ResourceId", + "/properties/ScalableDimension", + "/properties/ScalingTargetId" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/TargetTrackingScalingPolicyConfiguration/PredefinedMetricSpecification/ResourceLabel", + "/properties/ScalingTargetId" + ], + "primaryIdentifier": [ + "/properties/Arn", + "/properties/ScalableDimension" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:PutScalingPolicy" + ] + }, + "read": { + "permissions": [ + "application-autoscaling:DescribeScalingPolicies" + ] + }, + "update": { + "permissions": [ + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:PutScalingPolicy" + ] + }, + "delete": { + "permissions": [ + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:DeleteScalingPolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ServiceNamespace": { + "description": "The name of the service", + "type": "string" + } + }, + "required": [ + "ServiceNamespace" + ] + }, + "permissions": [ + "application-autoscaling:DescribeScalingPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/applicationinsights/application.json b/internal/aws/cfn/schemas/aws/applicationinsights/application.json new file mode 100644 index 00000000..3dd482ff --- /dev/null +++ b/internal/aws/cfn/schemas/aws/applicationinsights/application.json @@ -0,0 +1,729 @@ +{ + "typeName": "AWS::ApplicationInsights::Application", + "description": "Resource schema for AWS::ApplicationInsights::Application", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-applicationinsights.git", + "properties": { + "ResourceGroupName": { + "description": "The name of the resource group.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z0-9.-_]*" + }, + "ApplicationARN": { + "description": "The ARN of the ApplicationInsights application.", + "type": "string" + }, + "CWEMonitorEnabled": { + "description": "Indicates whether Application Insights can listen to CloudWatch events for the application resources.", + "type": "boolean" + }, + "OpsCenterEnabled": { + "description": "When set to true, creates opsItems for any problems detected on an application.", + "type": "boolean" + }, + "OpsItemSNSTopicArn": { + "description": "The SNS topic provided to Application Insights that is associated to the created opsItem.", + "type": "string", + "minLength": 20, + "maxLength": 300, + "pattern": "^arn:aws(-[\\w]+)*:[\\w\\d-]+:([\\w\\d-]*)?:[\\w\\d_-]*([:/].+)*$" + }, + "Tags": { + "description": "The tags of Application Insights application.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1, + "insertionOrder": true + }, + "CustomComponents": { + "description": "The custom grouped components.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomComponent" + }, + "minItems": 1, + "insertionOrder": true + }, + "LogPatternSets": { + "description": "The log pattern sets.", + "type": "array", + "items": { + "$ref": "#/definitions/LogPatternSet" + }, + "minItems": 1, + "insertionOrder": true + }, + "AutoConfigurationEnabled": { + "description": "If set to true, application will be configured with recommended monitoring configuration.", + "type": "boolean" + }, + "ComponentMonitoringSettings": { + "description": "The monitoring settings of the components.", + "type": "array", + "items": { + "$ref": "#/definitions/ComponentMonitoringSetting" + }, + "minItems": 1, + "insertionOrder": true + }, + "GroupingType": { + "description": "The grouping type of the application", + "type": "string", + "enum": [ + "ACCOUNT_BASED" + ] + }, + "AttachMissingPermission": { + "description": "If set to true, the managed policies for SSM and CW will be attached to the instance roles if they are missing", + "type": "boolean" + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "CustomComponent": { + "description": "The custom grouped component.", + "type": "object", + "properties": { + "ComponentName": { + "description": "The name of the component.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[\\d\\w\\-_.+]*$" + }, + "ResourceList": { + "description": "The list of resource ARNs that belong to the component.", + "type": "array", + "items": { + "type": "string", + "minLength": 20, + "maxLength": 300, + "pattern": "^arn:aws(-[\\w]+)*:[\\w\\d-]+:([\\w\\d-]*)?:[\\w\\d_-]*([:/].+)*$" + }, + "minItems": 1, + "insertionOrder": true + } + }, + "required": [ + "ComponentName", + "ResourceList" + ], + "additionalProperties": false + }, + "LogPatternSet": { + "description": "The log pattern set.", + "type": "object", + "properties": { + "PatternSetName": { + "description": "The name of the log pattern set.", + "type": "string", + "minLength": 1, + "maxLength": 30, + "pattern": "[a-zA-Z0-9.-_]*" + }, + "LogPatterns": { + "description": "The log patterns of a set.", + "type": "array", + "items": { + "$ref": "#/definitions/LogPattern" + }, + "minItems": 1, + "insertionOrder": true + } + }, + "required": [ + "PatternSetName", + "LogPatterns" + ], + "additionalProperties": false + }, + "LogPattern": { + "description": "The log pattern.", + "type": "object", + "properties": { + "PatternName": { + "description": "The name of the log pattern.", + "type": "string", + "minLength": 1, + "maxLength": 50, + "pattern": "[a-zA-Z0-9.-_]*" + }, + "Pattern": { + "description": "The log pattern.", + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "Rank": { + "description": "Rank of the log pattern.", + "type": "integer" + } + }, + "required": [ + "PatternName", + "Pattern", + "Rank" + ], + "additionalProperties": false + }, + "ComponentMonitoringSetting": { + "description": "The monitoring setting of the component.", + "type": "object", + "properties": { + "ComponentName": { + "description": "The name of the component.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[\\d\\w\\-_.+]*$" + }, + "ComponentARN": { + "description": "The ARN of the compnonent.", + "type": "string", + "minLength": 20, + "maxLength": 300, + "pattern": "^arn:aws(-[\\w]+)*:[\\w\\d-]+:([\\w\\d-]*)?:[\\w\\d_-]*([:/].+)*$" + }, + "Tier": { + "description": "The tier of the application component.", + "type": "string", + "pattern": "^[A-Z][[A-Z]_]*$" + }, + "ComponentConfigurationMode": { + "description": "The component monitoring configuration mode.", + "type": "string", + "enum": [ + "DEFAULT", + "DEFAULT_WITH_OVERWRITE", + "CUSTOM" + ] + }, + "DefaultOverwriteComponentConfiguration": { + "description": "The overwritten settings on default component monitoring configuration.", + "$ref": "#/definitions/ComponentConfiguration" + }, + "CustomComponentConfiguration": { + "description": "The monitoring configuration of the component.", + "$ref": "#/definitions/ComponentConfiguration" + } + }, + "required": [ + "Tier", + "ComponentConfigurationMode" + ], + "oneOf": [ + { + "required": [ + "ComponentName" + ] + }, + { + "required": [ + "ComponentARN" + ] + } + ], + "additionalProperties": false + }, + "ComponentConfiguration": { + "description": "The configuration settings of the component.", + "type": "object", + "properties": { + "ConfigurationDetails": { + "description": "The configuration settings", + "$ref": "#/definitions/ConfigurationDetails" + }, + "SubComponentTypeConfigurations": { + "description": "Sub component configurations of the component.", + "type": "array", + "items": { + "$ref": "#/definitions/SubComponentTypeConfiguration" + }, + "minItems": 1, + "insertionOrder": true + } + }, + "additionalProperties": false + }, + "ConfigurationDetails": { + "description": "The configuration settings.", + "type": "object", + "properties": { + "AlarmMetrics": { + "description": "A list of metrics to monitor for the component.", + "type": "array", + "items": { + "$ref": "#/definitions/AlarmMetric" + }, + "insertionOrder": true + }, + "Logs": { + "description": "A list of logs to monitor for the component.", + "type": "array", + "items": { + "$ref": "#/definitions/Log" + }, + "insertionOrder": true + }, + "WindowsEvents": { + "description": "A list of Windows Events to log.", + "type": "array", + "items": { + "$ref": "#/definitions/WindowsEvent" + }, + "insertionOrder": true + }, + "Processes": { + "description": "A list of processes to monitor for the component. Only Windows EC2 instances can have a processes section.", + "type": "array", + "items": { + "$ref": "#/definitions/Process" + }, + "insertionOrder": true + }, + "Alarms": { + "description": "A list of alarms to monitor for the component.", + "type": "array", + "items": { + "$ref": "#/definitions/Alarm" + }, + "insertionOrder": true + }, + "JMXPrometheusExporter": { + "description": "The JMX Prometheus Exporter settings.", + "$ref": "#/definitions/JMXPrometheusExporter" + }, + "HANAPrometheusExporter": { + "description": "The HANA DB Prometheus Exporter settings.", + "$ref": "#/definitions/HANAPrometheusExporter" + }, + "HAClusterPrometheusExporter": { + "description": "The HA cluster Prometheus Exporter settings.", + "$ref": "#/definitions/HAClusterPrometheusExporter" + }, + "NetWeaverPrometheusExporter": { + "description": "The NetWeaver Prometheus Exporter settings.", + "$ref": "#/definitions/NetWeaverPrometheusExporter" + }, + "SQLServerPrometheusExporter": { + "description": "The SQL Prometheus Exporter settings.", + "$ref": "#/definitions/SQLServerPrometheusExporter" + } + }, + "additionalProperties": false + }, + "SubComponentConfigurationDetails": { + "description": "The configuration settings of sub components.", + "type": "object", + "properties": { + "AlarmMetrics": { + "description": "A list of metrics to monitor for the component.", + "type": "array", + "items": { + "$ref": "#/definitions/AlarmMetric" + }, + "insertionOrder": true + }, + "Logs": { + "description": "A list of logs to monitor for the component.", + "type": "array", + "items": { + "$ref": "#/definitions/Log" + }, + "insertionOrder": true + }, + "WindowsEvents": { + "description": "A list of Windows Events to log.", + "type": "array", + "items": { + "$ref": "#/definitions/WindowsEvent" + }, + "insertionOrder": true + }, + "Processes": { + "description": "A list of processes to monitor for the component. Only Windows EC2 instances can have a processes section.", + "type": "array", + "items": { + "$ref": "#/definitions/Process" + }, + "insertionOrder": true + } + }, + "additionalProperties": false + }, + "JMXPrometheusExporter": { + "description": "The JMX Prometheus Exporter settings.", + "type": "object", + "properties": { + "JMXURL": { + "description": "JMX service URL.", + "type": "string" + }, + "HostPort": { + "description": "Java agent host port", + "type": "string" + }, + "PrometheusPort": { + "description": "Prometheus exporter port.", + "type": "string" + } + }, + "additionalProperties": false + }, + "HANAPrometheusExporter": { + "description": "The HANA DB Prometheus Exporter settings.", + "type": "object", + "properties": { + "HANASID": { + "description": "HANA DB SID.", + "type": "string" + }, + "HANAPort": { + "description": "The HANA DB port.", + "type": "string" + }, + "HANASecretName": { + "description": "The secret name which manages the HANA DB credentials e.g. {\n \"username\": \"<>\",\n \"password\": \"<>\"\n}.", + "type": "string" + }, + "AgreeToInstallHANADBClient": { + "description": "A flag which indicates agreeing to install SAP HANA DB client.", + "type": "boolean" + }, + "PrometheusPort": { + "description": "Prometheus exporter port.", + "type": "string" + } + }, + "required": [ + "HANASID", + "HANAPort", + "HANASecretName", + "AgreeToInstallHANADBClient" + ], + "additionalProperties": false + }, + "HAClusterPrometheusExporter": { + "description": "The HA cluster Prometheus Exporter settings.", + "type": "object", + "properties": { + "PrometheusPort": { + "description": "Prometheus exporter port.", + "type": "string" + } + }, + "additionalProperties": false + }, + "NetWeaverPrometheusExporter": { + "description": "The NetWeaver Prometheus Exporter Settings.", + "type": "object", + "properties": { + "SAPSID": { + "description": "SAP NetWeaver SID.", + "type": "string" + }, + "InstanceNumbers": { + "description": "SAP instance numbers for ASCS, ERS, and App Servers.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2, + "pattern": "\\b([0-9]|[0-9][0-9])\\b" + } + }, + "PrometheusPort": { + "description": "Prometheus exporter port.", + "type": "string" + } + }, + "required": [ + "SAPSID", + "InstanceNumbers" + ], + "additionalProperties": false + }, + "SQLServerPrometheusExporter": { + "description": "The SQL prometheus exporter settings.", + "type": "object", + "properties": { + "PrometheusPort": { + "description": "Prometheus exporter port.", + "type": "string" + }, + "SQLSecretName": { + "description": "Secret name which managers SQL exporter connection. e.g. {\"data_source_name\": \"sqlserver://:@localhost:1433\"}", + "type": "string" + } + }, + "required": [ + "PrometheusPort", + "SQLSecretName" + ], + "additionalProperties": false + }, + "AlarmMetric": { + "description": "A metric to be monitored for the component.", + "type": "object", + "properties": { + "AlarmMetricName": { + "description": "The name of the metric to be monitored for the component.", + "type": "string" + } + }, + "required": [ + "AlarmMetricName" + ], + "additionalProperties": false + }, + "Log": { + "description": "A log to be monitored for the component.", + "type": "object", + "properties": { + "LogGroupName": { + "description": "The CloudWatch log group name to be associated to the monitored log.", + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "[\\.\\-_/#A-Za-z0-9]+" + }, + "LogPath": { + "description": "The path of the logs to be monitored.", + "type": "string", + "minLength": 1, + "maxLength": 260, + "pattern": "^([a-zA-Z]:\\\\[\\\\\\S|*\\S]?.*|/[^\"']*)$" + }, + "LogType": { + "description": "The log type decides the log patterns against which Application Insights analyzes the log.", + "type": "string", + "pattern": "^[A-Z][[A-Z]_]*$" + }, + "Encoding": { + "description": "The type of encoding of the logs to be monitored.", + "type": "string", + "enum": [ + "utf-8", + "utf-16", + "ascii" + ] + }, + "PatternSet": { + "description": "The name of the log pattern set.", + "type": "string", + "minLength": 1, + "maxLength": 30, + "pattern": "[a-zA-Z0-9.-_]*" + } + }, + "required": [ + "LogType" + ], + "additionalProperties": false + }, + "WindowsEvent": { + "description": "A Windows Event to be monitored for the component.", + "type": "object", + "properties": { + "LogGroupName": { + "description": "The CloudWatch log group name to be associated to the monitored log.", + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "[\\.\\-_/#A-Za-z0-9]+" + }, + "EventName": { + "description": "The type of Windows Events to log.", + "type": "string", + "minLength": 1, + "maxLength": 260, + "pattern": "^[a-zA-Z0-9_ \\\\/-]+$" + }, + "EventLevels": { + "description": "The levels of event to log. ", + "type": "array", + "items": { + "$ref": "#/definitions/EventLevel" + }, + "minItems": 1, + "insertionOrder": true + }, + "PatternSet": { + "description": "The name of the log pattern set.", + "type": "string", + "minLength": 1, + "maxLength": 30, + "pattern": "[a-zA-Z0-9.-_]*" + } + }, + "required": [ + "LogGroupName", + "EventName", + "EventLevels" + ], + "additionalProperties": false + }, + "Process": { + "description": "A process to be monitored for the component.", + "type": "object", + "properties": { + "ProcessName": { + "description": "The name of the process to be monitored for the component.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[a-zA-Z0-9_,-]+$" + }, + "AlarmMetrics": { + "description": "A list of metrics to monitor for the component.", + "type": "array", + "items": { + "$ref": "#/definitions/AlarmMetric" + }, + "insertionOrder": true + } + }, + "required": [ + "ProcessName", + "AlarmMetrics" + ], + "additionalProperties": false + }, + "EventLevel": { + "description": "The level of event to log.", + "type": "string", + "enum": [ + "INFORMATION", + "WARNING", + "ERROR", + "CRITICAL", + "VERBOSE" + ] + }, + "Alarm": { + "description": "A CloudWatch alarm to be monitored for the component.", + "type": "object", + "properties": { + "AlarmName": { + "description": "The name of the CloudWatch alarm to be monitored for the component.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Severity": { + "description": "Indicates the degree of outage when the alarm goes off.", + "type": "string", + "enum": [ + "HIGH", + "MEDIUM", + "LOW" + ] + } + }, + "required": [ + "AlarmName" + ], + "additionalProperties": false + }, + "SubComponentTypeConfiguration": { + "description": "One type sub component configurations for the component.", + "type": "object", + "properties": { + "SubComponentType": { + "description": "The sub component type.", + "type": "string", + "enum": [ + "AWS::EC2::Instance", + "AWS::EC2::Volume" + ] + }, + "SubComponentConfigurationDetails": { + "description": "The configuration settings of sub components.", + "$ref": "#/definitions/SubComponentConfigurationDetails" + } + }, + "required": [ + "SubComponentType", + "SubComponentConfigurationDetails" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "ResourceGroupName" + ], + "primaryIdentifier": [ + "/properties/ApplicationARN" + ], + "readOnlyProperties": [ + "/properties/ApplicationARN" + ], + "writeOnlyProperties": [ + "/properties/ComponentMonitoringSettings", + "/properties/LogPatternSets", + "/properties/CustomComponents", + "/properties/GroupingType", + "/properties/OpsItemSNSTopicArn", + "/properties/AttachMissingPermission" + ], + "createOnlyProperties": [ + "/properties/ResourceGroupName", + "/properties/GroupingType" + ], + "handlers": { + "create": { + "permissions": [ + "*" + ], + "timeoutInMinutes": 600 + }, + "read": { + "permissions": [ + "*" + ] + }, + "update": { + "permissions": [ + "*" + ], + "timeoutInMinutes": 600 + }, + "delete": { + "permissions": [ + "*" + ] + }, + "list": { + "permissions": [ + "*" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/appmesh/gatewayroute.json b/internal/aws/cfn/schemas/aws/appmesh/gatewayroute.json new file mode 100644 index 00000000..a8a870af --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appmesh/gatewayroute.json @@ -0,0 +1,439 @@ +{ + "typeName": "AWS::AppMesh::GatewayRoute", + "description": "Resource Type definition for AWS::AppMesh::GatewayRoute", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "string" + }, + "MeshName": { + "type": "string" + }, + "VirtualGatewayName": { + "type": "string" + }, + "MeshOwner": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + }, + "GatewayRouteName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/GatewayRouteSpec" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "GatewayRouteHostnameMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Suffix": { + "type": "string" + }, + "Exact": { + "type": "string" + } + } + }, + "QueryParameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + }, + "Match": { + "$ref": "#/definitions/HttpQueryParameterMatch" + } + }, + "required": [ + "Name" + ] + }, + "GatewayRouteVirtualService": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualServiceName": { + "type": "string" + } + }, + "required": [ + "VirtualServiceName" + ] + }, + "GatewayRouteTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualService": { + "$ref": "#/definitions/GatewayRouteVirtualService" + }, + "Port": { + "type": "integer" + } + }, + "required": [ + "VirtualService" + ] + }, + "GrpcGatewayRouteMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "Invert": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Match": { + "$ref": "#/definitions/GatewayRouteMetadataMatch" + } + }, + "required": [ + "Name" + ] + }, + "GrpcGatewayRouteMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Hostname": { + "$ref": "#/definitions/GatewayRouteHostnameMatch" + }, + "Metadata": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/GrpcGatewayRouteMetadata" + } + }, + "ServiceName": { + "type": "string" + }, + "Port": { + "type": "integer" + } + } + }, + "HttpQueryParameterMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Exact": { + "type": "string" + } + } + }, + "HttpGatewayRoutePrefixRewrite": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "DefaultPrefix": { + "type": "string" + } + } + }, + "GrpcGatewayRoute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/GrpcGatewayRouteAction" + }, + "Match": { + "$ref": "#/definitions/GrpcGatewayRouteMatch" + } + }, + "required": [ + "Action", + "Match" + ] + }, + "GatewayRouteSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "HttpRoute": { + "$ref": "#/definitions/HttpGatewayRoute" + }, + "Http2Route": { + "$ref": "#/definitions/HttpGatewayRoute" + }, + "GrpcRoute": { + "$ref": "#/definitions/GrpcGatewayRoute" + }, + "Priority": { + "type": "integer" + } + } + }, + "HttpGatewayRouteMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "$ref": "#/definitions/HttpPathMatch" + }, + "Headers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/HttpGatewayRouteHeader" + } + }, + "Port": { + "type": "integer" + }, + "Hostname": { + "$ref": "#/definitions/GatewayRouteHostnameMatch" + }, + "Prefix": { + "type": "string" + }, + "Method": { + "type": "string" + }, + "QueryParameters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/QueryParameter" + } + } + } + }, + "HttpGatewayRouteAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Target": { + "$ref": "#/definitions/GatewayRouteTarget" + }, + "Rewrite": { + "$ref": "#/definitions/HttpGatewayRouteRewrite" + } + }, + "required": [ + "Target" + ] + }, + "GrpcGatewayRouteRewrite": { + "type": "object", + "additionalProperties": false, + "properties": { + "Hostname": { + "$ref": "#/definitions/GatewayRouteHostnameRewrite" + } + } + }, + "HttpGatewayRouteHeader": { + "type": "object", + "additionalProperties": false, + "properties": { + "Invert": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Match": { + "$ref": "#/definitions/HttpGatewayRouteHeaderMatch" + } + }, + "required": [ + "Name" + ] + }, + "GatewayRouteRangeMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Start": { + "type": "integer" + }, + "End": { + "type": "integer" + } + }, + "required": [ + "Start", + "End" + ] + }, + "GrpcGatewayRouteAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Target": { + "$ref": "#/definitions/GatewayRouteTarget" + }, + "Rewrite": { + "$ref": "#/definitions/GrpcGatewayRouteRewrite" + } + }, + "required": [ + "Target" + ] + }, + "HttpGatewayRouteHeaderMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Suffix": { + "type": "string" + }, + "Exact": { + "type": "string" + }, + "Prefix": { + "type": "string" + }, + "Regex": { + "type": "string" + }, + "Range": { + "$ref": "#/definitions/GatewayRouteRangeMatch" + } + } + }, + "HttpGatewayRoutePathRewrite": { + "type": "object", + "additionalProperties": false, + "properties": { + "Exact": { + "type": "string" + } + } + }, + "GatewayRouteMetadataMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Suffix": { + "type": "string" + }, + "Exact": { + "type": "string" + }, + "Prefix": { + "type": "string" + }, + "Regex": { + "type": "string" + }, + "Range": { + "$ref": "#/definitions/GatewayRouteRangeMatch" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "HttpPathMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Regex": { + "type": "string" + }, + "Exact": { + "type": "string" + } + } + }, + "HttpGatewayRoute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/HttpGatewayRouteAction" + }, + "Match": { + "$ref": "#/definitions/HttpGatewayRouteMatch" + } + }, + "required": [ + "Action", + "Match" + ] + }, + "HttpGatewayRouteRewrite": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "$ref": "#/definitions/HttpGatewayRoutePathRewrite" + }, + "Hostname": { + "$ref": "#/definitions/GatewayRouteHostnameRewrite" + }, + "Prefix": { + "$ref": "#/definitions/HttpGatewayRoutePrefixRewrite" + } + } + }, + "GatewayRouteHostnameRewrite": { + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultTargetHostname": { + "type": "string" + } + } + } + }, + "required": [ + "MeshName", + "VirtualGatewayName", + "Spec" + ], + "createOnlyProperties": [ + "/properties/MeshName", + "/properties/VirtualGatewayName", + "/properties/MeshOwner", + "/properties/GatewayRouteName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ResourceOwner", + "/properties/Arn", + "/properties/Uid" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appmesh/mesh.json b/internal/aws/cfn/schemas/aws/appmesh/mesh.json new file mode 100644 index 00000000..b762054e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appmesh/mesh.json @@ -0,0 +1,99 @@ +{ + "typeName": "AWS::AppMesh::Mesh", + "description": "Resource Type definition for AWS::AppMesh::Mesh", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "string" + }, + "MeshName": { + "type": "string" + }, + "MeshOwner": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/MeshSpec" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "MeshSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "EgressFilter": { + "$ref": "#/definitions/EgressFilter" + }, + "ServiceDiscovery": { + "$ref": "#/definitions/MeshServiceDiscovery" + } + } + }, + "EgressFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "MeshServiceDiscovery": { + "type": "object", + "additionalProperties": false, + "properties": { + "IpPreference": { + "type": "string" + } + } + } + }, + "createOnlyProperties": [ + "/properties/MeshName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ResourceOwner", + "/properties/MeshOwner", + "/properties/Arn", + "/properties/Uid" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appmesh/route.json b/internal/aws/cfn/schemas/aws/appmesh/route.json new file mode 100644 index 00000000..4e2467bb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appmesh/route.json @@ -0,0 +1,541 @@ +{ + "typeName": "AWS::AppMesh::Route", + "description": "Resource Type definition for AWS::AppMesh::Route", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "string" + }, + "MeshName": { + "type": "string" + }, + "VirtualRouterName": { + "type": "string" + }, + "MeshOwner": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + }, + "RouteName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/RouteSpec" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "QueryParameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + }, + "Match": { + "$ref": "#/definitions/HttpQueryParameterMatch" + } + }, + "required": [ + "Name" + ] + }, + "HttpRetryPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxRetries": { + "type": "integer" + }, + "TcpRetryEvents": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "PerRetryTimeout": { + "$ref": "#/definitions/Duration" + }, + "HttpRetryEvents": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "MaxRetries", + "PerRetryTimeout" + ] + }, + "HttpQueryParameterMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Exact": { + "type": "string" + } + } + }, + "GrpcRoute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/GrpcRouteAction" + }, + "RetryPolicy": { + "$ref": "#/definitions/GrpcRetryPolicy" + }, + "Timeout": { + "$ref": "#/definitions/GrpcTimeout" + }, + "Match": { + "$ref": "#/definitions/GrpcRouteMatch" + } + }, + "required": [ + "Action", + "Match" + ] + }, + "HttpRouteAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "WeightedTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/WeightedTarget" + } + } + }, + "required": [ + "WeightedTargets" + ] + }, + "TcpRoute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/TcpRouteAction" + }, + "Timeout": { + "$ref": "#/definitions/TcpTimeout" + }, + "Match": { + "$ref": "#/definitions/TcpRouteMatch" + } + }, + "required": [ + "Action" + ] + }, + "HttpRouteHeader": { + "type": "object", + "additionalProperties": false, + "properties": { + "Invert": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Match": { + "$ref": "#/definitions/HeaderMatchMethod" + } + }, + "required": [ + "Name" + ] + }, + "GrpcTimeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "PerRequest": { + "$ref": "#/definitions/Duration" + }, + "Idle": { + "$ref": "#/definitions/Duration" + } + } + }, + "GrpcRouteMetadataMatchMethod": { + "type": "object", + "additionalProperties": false, + "properties": { + "Suffix": { + "type": "string" + }, + "Exact": { + "type": "string" + }, + "Prefix": { + "type": "string" + }, + "Regex": { + "type": "string" + }, + "Range": { + "$ref": "#/definitions/MatchRange" + } + } + }, + "GrpcRouteMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "Invert": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Match": { + "$ref": "#/definitions/GrpcRouteMetadataMatchMethod" + } + }, + "required": [ + "Name" + ] + }, + "HeaderMatchMethod": { + "type": "object", + "additionalProperties": false, + "properties": { + "Suffix": { + "type": "string" + }, + "Exact": { + "type": "string" + }, + "Prefix": { + "type": "string" + }, + "Regex": { + "type": "string" + }, + "Range": { + "$ref": "#/definitions/MatchRange" + } + } + }, + "GrpcRetryPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxRetries": { + "type": "integer" + }, + "TcpRetryEvents": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "PerRetryTimeout": { + "$ref": "#/definitions/Duration" + }, + "GrpcRetryEvents": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "HttpRetryEvents": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "MaxRetries", + "PerRetryTimeout" + ] + }, + "TcpTimeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "Idle": { + "$ref": "#/definitions/Duration" + } + } + }, + "WeightedTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualNode": { + "type": "string" + }, + "Weight": { + "type": "integer" + }, + "Port": { + "type": "integer" + } + }, + "required": [ + "VirtualNode", + "Weight" + ] + }, + "HttpPathMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Regex": { + "type": "string" + }, + "Exact": { + "type": "string" + } + } + }, + "HttpTimeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "PerRequest": { + "$ref": "#/definitions/Duration" + }, + "Idle": { + "$ref": "#/definitions/Duration" + } + } + }, + "TcpRouteAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "WeightedTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/WeightedTarget" + } + } + }, + "required": [ + "WeightedTargets" + ] + }, + "GrpcRouteMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Metadata": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/GrpcRouteMetadata" + } + }, + "MethodName": { + "type": "string" + }, + "ServiceName": { + "type": "string" + }, + "Port": { + "type": "integer" + } + } + }, + "MatchRange": { + "type": "object", + "additionalProperties": false, + "properties": { + "Start": { + "type": "integer" + }, + "End": { + "type": "integer" + } + }, + "required": [ + "Start", + "End" + ] + }, + "Duration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "integer" + }, + "Unit": { + "type": "string" + } + }, + "required": [ + "Value", + "Unit" + ] + }, + "RouteSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "HttpRoute": { + "$ref": "#/definitions/HttpRoute" + }, + "Http2Route": { + "$ref": "#/definitions/HttpRoute" + }, + "GrpcRoute": { + "$ref": "#/definitions/GrpcRoute" + }, + "TcpRoute": { + "$ref": "#/definitions/TcpRoute" + }, + "Priority": { + "type": "integer" + } + } + }, + "TcpRouteMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Port": { + "type": "integer" + } + } + }, + "HttpRoute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/HttpRouteAction" + }, + "RetryPolicy": { + "$ref": "#/definitions/HttpRetryPolicy" + }, + "Timeout": { + "$ref": "#/definitions/HttpTimeout" + }, + "Match": { + "$ref": "#/definitions/HttpRouteMatch" + } + }, + "required": [ + "Action", + "Match" + ] + }, + "GrpcRouteAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "WeightedTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/WeightedTarget" + } + } + }, + "required": [ + "WeightedTargets" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "HttpRouteMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "$ref": "#/definitions/HttpPathMatch" + }, + "Scheme": { + "type": "string" + }, + "Headers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/HttpRouteHeader" + } + }, + "Port": { + "type": "integer" + }, + "Prefix": { + "type": "string" + }, + "Method": { + "type": "string" + }, + "QueryParameters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/QueryParameter" + } + } + } + } + }, + "required": [ + "MeshName", + "VirtualRouterName", + "Spec" + ], + "createOnlyProperties": [ + "/properties/MeshName", + "/properties/VirtualRouterName", + "/properties/RouteName", + "/properties/MeshOwner" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ResourceOwner", + "/properties/Arn", + "/properties/Uid" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appmesh/virtualgateway.json b/internal/aws/cfn/schemas/aws/appmesh/virtualgateway.json new file mode 100644 index 00000000..80214045 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appmesh/virtualgateway.json @@ -0,0 +1,537 @@ +{ + "typeName": "AWS::AppMesh::VirtualGateway", + "description": "Resource Type definition for AWS::AppMesh::VirtualGateway", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "string" + }, + "VirtualGatewayName": { + "type": "string" + }, + "MeshName": { + "type": "string" + }, + "MeshOwner": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/VirtualGatewaySpec" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "VirtualGatewayListener": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionPool": { + "$ref": "#/definitions/VirtualGatewayConnectionPool" + }, + "HealthCheck": { + "$ref": "#/definitions/VirtualGatewayHealthCheckPolicy" + }, + "TLS": { + "$ref": "#/definitions/VirtualGatewayListenerTls" + }, + "PortMapping": { + "$ref": "#/definitions/VirtualGatewayPortMapping" + } + }, + "required": [ + "PortMapping" + ] + }, + "VirtualGatewayListenerTlsValidationContextTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "File": { + "$ref": "#/definitions/VirtualGatewayTlsValidationContextFileTrust" + }, + "SDS": { + "$ref": "#/definitions/VirtualGatewayTlsValidationContextSdsTrust" + } + } + }, + "VirtualGatewayAccessLog": { + "type": "object", + "additionalProperties": false, + "properties": { + "File": { + "$ref": "#/definitions/VirtualGatewayFileAccessLog" + } + } + }, + "VirtualGatewaySpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "Logging": { + "$ref": "#/definitions/VirtualGatewayLogging" + }, + "Listeners": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VirtualGatewayListener" + } + }, + "BackendDefaults": { + "$ref": "#/definitions/VirtualGatewayBackendDefaults" + } + }, + "required": [ + "Listeners" + ] + }, + "VirtualGatewayClientPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "TLS": { + "$ref": "#/definitions/VirtualGatewayClientPolicyTls" + } + } + }, + "VirtualGatewayHttpConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxConnections": { + "type": "integer" + }, + "MaxPendingRequests": { + "type": "integer" + } + }, + "required": [ + "MaxConnections" + ] + }, + "VirtualGatewayClientPolicyTls": { + "type": "object", + "additionalProperties": false, + "properties": { + "Validation": { + "$ref": "#/definitions/VirtualGatewayTlsValidationContext" + }, + "Ports": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "integer" + } + }, + "Enforce": { + "type": "boolean" + }, + "Certificate": { + "$ref": "#/definitions/VirtualGatewayClientTlsCertificate" + } + }, + "required": [ + "Validation" + ] + }, + "VirtualGatewayListenerTlsCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "SDS": { + "$ref": "#/definitions/VirtualGatewayListenerTlsSdsCertificate" + }, + "ACM": { + "$ref": "#/definitions/VirtualGatewayListenerTlsAcmCertificate" + }, + "File": { + "$ref": "#/definitions/VirtualGatewayListenerTlsFileCertificate" + } + } + }, + "VirtualGatewayTlsValidationContextSdsTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretName": { + "type": "string" + } + }, + "required": [ + "SecretName" + ] + }, + "VirtualGatewayFileAccessLog": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + }, + "Format": { + "$ref": "#/definitions/LoggingFormat" + } + }, + "required": [ + "Path" + ] + }, + "LoggingFormat": { + "type": "object", + "additionalProperties": false, + "properties": { + "Text": { + "type": "string" + }, + "Json": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/JsonFormatRef" + } + } + } + }, + "VirtualGatewayTlsValidationContext": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubjectAlternativeNames": { + "$ref": "#/definitions/SubjectAlternativeNames" + }, + "Trust": { + "$ref": "#/definitions/VirtualGatewayTlsValidationContextTrust" + } + }, + "required": [ + "Trust" + ] + }, + "VirtualGatewayListenerTlsValidationContext": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubjectAlternativeNames": { + "$ref": "#/definitions/SubjectAlternativeNames" + }, + "Trust": { + "$ref": "#/definitions/VirtualGatewayListenerTlsValidationContextTrust" + } + }, + "required": [ + "Trust" + ] + }, + "VirtualGatewayTlsValidationContextFileTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateChain": { + "type": "string" + } + }, + "required": [ + "CertificateChain" + ] + }, + "JsonFormatRef": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "VirtualGatewayHealthCheckPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + }, + "UnhealthyThreshold": { + "type": "integer" + }, + "Port": { + "type": "integer" + }, + "HealthyThreshold": { + "type": "integer" + }, + "TimeoutMillis": { + "type": "integer" + }, + "Protocol": { + "type": "string" + }, + "IntervalMillis": { + "type": "integer" + } + }, + "required": [ + "UnhealthyThreshold", + "HealthyThreshold", + "TimeoutMillis", + "Protocol", + "IntervalMillis" + ] + }, + "SubjectAlternativeNameMatchers": { + "type": "object", + "additionalProperties": false, + "properties": { + "Exact": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "VirtualGatewayTlsValidationContextTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "SDS": { + "$ref": "#/definitions/VirtualGatewayTlsValidationContextSdsTrust" + }, + "ACM": { + "$ref": "#/definitions/VirtualGatewayTlsValidationContextAcmTrust" + }, + "File": { + "$ref": "#/definitions/VirtualGatewayTlsValidationContextFileTrust" + } + } + }, + "VirtualGatewayListenerTlsAcmCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateArn": { + "type": "string" + } + }, + "required": [ + "CertificateArn" + ] + }, + "VirtualGatewayConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "HTTP": { + "$ref": "#/definitions/VirtualGatewayHttpConnectionPool" + }, + "HTTP2": { + "$ref": "#/definitions/VirtualGatewayHttp2ConnectionPool" + }, + "GRPC": { + "$ref": "#/definitions/VirtualGatewayGrpcConnectionPool" + } + } + }, + "SubjectAlternativeNames": { + "type": "object", + "additionalProperties": false, + "properties": { + "Match": { + "$ref": "#/definitions/SubjectAlternativeNameMatchers" + } + }, + "required": [ + "Match" + ] + }, + "VirtualGatewayClientTlsCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "File": { + "$ref": "#/definitions/VirtualGatewayListenerTlsFileCertificate" + }, + "SDS": { + "$ref": "#/definitions/VirtualGatewayListenerTlsSdsCertificate" + } + } + }, + "VirtualGatewayBackendDefaults": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientPolicy": { + "$ref": "#/definitions/VirtualGatewayClientPolicy" + } + } + }, + "VirtualGatewayLogging": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccessLog": { + "$ref": "#/definitions/VirtualGatewayAccessLog" + } + } + }, + "VirtualGatewayGrpcConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxRequests": { + "type": "integer" + } + }, + "required": [ + "MaxRequests" + ] + }, + "VirtualGatewayListenerTlsSdsCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretName": { + "type": "string" + } + }, + "required": [ + "SecretName" + ] + }, + "VirtualGatewayListenerTlsFileCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateChain": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + } + }, + "required": [ + "PrivateKey", + "CertificateChain" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "VirtualGatewayPortMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "Protocol": { + "type": "string" + }, + "Port": { + "type": "integer" + } + }, + "required": [ + "Port", + "Protocol" + ] + }, + "VirtualGatewayHttp2ConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxRequests": { + "type": "integer" + } + }, + "required": [ + "MaxRequests" + ] + }, + "VirtualGatewayTlsValidationContextAcmTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateAuthorityArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "CertificateAuthorityArns" + ] + }, + "VirtualGatewayListenerTls": { + "type": "object", + "additionalProperties": false, + "properties": { + "Validation": { + "$ref": "#/definitions/VirtualGatewayListenerTlsValidationContext" + }, + "Mode": { + "type": "string" + }, + "Certificate": { + "$ref": "#/definitions/VirtualGatewayListenerTlsCertificate" + } + }, + "required": [ + "Mode", + "Certificate" + ] + } + }, + "required": [ + "MeshName", + "Spec" + ], + "createOnlyProperties": [ + "/properties/MeshName", + "/properties/VirtualGatewayName", + "/properties/MeshOwner" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ResourceOwner", + "/properties/Arn", + "/properties/Uid" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appmesh/virtualnode.json b/internal/aws/cfn/schemas/aws/appmesh/virtualnode.json new file mode 100644 index 00000000..b57169b5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appmesh/virtualnode.json @@ -0,0 +1,752 @@ +{ + "typeName": "AWS::AppMesh::VirtualNode", + "description": "Resource Type definition for AWS::AppMesh::VirtualNode", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "string" + }, + "MeshName": { + "type": "string" + }, + "MeshOwner": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/VirtualNodeSpec" + }, + "VirtualNodeName": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "AccessLog": { + "type": "object", + "additionalProperties": false, + "properties": { + "File": { + "$ref": "#/definitions/FileAccessLog" + } + } + }, + "ListenerTimeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "TCP": { + "$ref": "#/definitions/TcpTimeout" + }, + "HTTP": { + "$ref": "#/definitions/HttpTimeout" + }, + "HTTP2": { + "$ref": "#/definitions/HttpTimeout" + }, + "GRPC": { + "$ref": "#/definitions/GrpcTimeout" + } + } + }, + "TlsValidationContextAcmTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateAuthorityArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "CertificateAuthorityArns" + ] + }, + "ClientPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "TLS": { + "$ref": "#/definitions/ClientPolicyTls" + } + } + }, + "FileAccessLog": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + }, + "Format": { + "$ref": "#/definitions/LoggingFormat" + } + }, + "required": [ + "Path" + ] + }, + "Listener": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionPool": { + "$ref": "#/definitions/VirtualNodeConnectionPool" + }, + "Timeout": { + "$ref": "#/definitions/ListenerTimeout" + }, + "HealthCheck": { + "$ref": "#/definitions/HealthCheck" + }, + "TLS": { + "$ref": "#/definitions/ListenerTls" + }, + "PortMapping": { + "$ref": "#/definitions/PortMapping" + }, + "OutlierDetection": { + "$ref": "#/definitions/OutlierDetection" + } + }, + "required": [ + "PortMapping" + ] + }, + "TlsValidationContextTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "SDS": { + "$ref": "#/definitions/TlsValidationContextSdsTrust" + }, + "ACM": { + "$ref": "#/definitions/TlsValidationContextAcmTrust" + }, + "File": { + "$ref": "#/definitions/TlsValidationContextFileTrust" + } + } + }, + "HealthCheck": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + }, + "UnhealthyThreshold": { + "type": "integer" + }, + "Port": { + "type": "integer" + }, + "HealthyThreshold": { + "type": "integer" + }, + "TimeoutMillis": { + "type": "integer" + }, + "Protocol": { + "type": "string" + }, + "IntervalMillis": { + "type": "integer" + } + }, + "required": [ + "UnhealthyThreshold", + "HealthyThreshold", + "TimeoutMillis", + "Protocol", + "IntervalMillis" + ] + }, + "GrpcTimeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "PerRequest": { + "$ref": "#/definitions/Duration" + }, + "Idle": { + "$ref": "#/definitions/Duration" + } + } + }, + "VirtualNodeConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "TCP": { + "$ref": "#/definitions/VirtualNodeTcpConnectionPool" + }, + "HTTP": { + "$ref": "#/definitions/VirtualNodeHttpConnectionPool" + }, + "HTTP2": { + "$ref": "#/definitions/VirtualNodeHttp2ConnectionPool" + }, + "GRPC": { + "$ref": "#/definitions/VirtualNodeGrpcConnectionPool" + } + } + }, + "TlsValidationContextFileTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateChain": { + "type": "string" + } + }, + "required": [ + "CertificateChain" + ] + }, + "ListenerTlsFileCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateChain": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + } + }, + "required": [ + "PrivateKey", + "CertificateChain" + ] + }, + "ListenerTlsValidationContextTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "File": { + "$ref": "#/definitions/TlsValidationContextFileTrust" + }, + "SDS": { + "$ref": "#/definitions/TlsValidationContextSdsTrust" + } + } + }, + "ListenerTlsCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "SDS": { + "$ref": "#/definitions/ListenerTlsSdsCertificate" + }, + "ACM": { + "$ref": "#/definitions/ListenerTlsAcmCertificate" + }, + "File": { + "$ref": "#/definitions/ListenerTlsFileCertificate" + } + } + }, + "PortMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "Protocol": { + "type": "string" + }, + "Port": { + "type": "integer" + } + }, + "required": [ + "Port", + "Protocol" + ] + }, + "TcpTimeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "Idle": { + "$ref": "#/definitions/Duration" + } + } + }, + "ListenerTls": { + "type": "object", + "additionalProperties": false, + "properties": { + "Validation": { + "$ref": "#/definitions/ListenerTlsValidationContext" + }, + "Mode": { + "type": "string" + }, + "Certificate": { + "$ref": "#/definitions/ListenerTlsCertificate" + } + }, + "required": [ + "Mode", + "Certificate" + ] + }, + "HttpTimeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "PerRequest": { + "$ref": "#/definitions/Duration" + }, + "Idle": { + "$ref": "#/definitions/Duration" + } + } + }, + "VirtualNodeTcpConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxConnections": { + "type": "integer" + } + }, + "required": [ + "MaxConnections" + ] + }, + "ServiceDiscovery": { + "type": "object", + "additionalProperties": false, + "properties": { + "DNS": { + "$ref": "#/definitions/DnsServiceDiscovery" + }, + "AWSCloudMap": { + "$ref": "#/definitions/AwsCloudMapServiceDiscovery" + } + } + }, + "ListenerTlsAcmCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateArn": { + "type": "string" + } + }, + "required": [ + "CertificateArn" + ] + }, + "VirtualNodeSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "Logging": { + "$ref": "#/definitions/Logging" + }, + "Backends": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Backend" + } + }, + "Listeners": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Listener" + } + }, + "BackendDefaults": { + "$ref": "#/definitions/BackendDefaults" + }, + "ServiceDiscovery": { + "$ref": "#/definitions/ServiceDiscovery" + } + } + }, + "Logging": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccessLog": { + "$ref": "#/definitions/AccessLog" + } + } + }, + "DnsServiceDiscovery": { + "type": "object", + "additionalProperties": false, + "properties": { + "Hostname": { + "type": "string" + }, + "IpPreference": { + "type": "string" + }, + "ResponseType": { + "type": "string" + } + }, + "required": [ + "Hostname" + ] + }, + "LoggingFormat": { + "type": "object", + "additionalProperties": false, + "properties": { + "Text": { + "type": "string" + }, + "Json": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/JsonFormatRef" + } + } + } + }, + "VirtualNodeHttp2ConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxRequests": { + "type": "integer" + } + }, + "required": [ + "MaxRequests" + ] + }, + "ClientPolicyTls": { + "type": "object", + "additionalProperties": false, + "properties": { + "Validation": { + "$ref": "#/definitions/TlsValidationContext" + }, + "Ports": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "integer" + } + }, + "Enforce": { + "type": "boolean" + }, + "Certificate": { + "$ref": "#/definitions/ClientTlsCertificate" + } + }, + "required": [ + "Validation" + ] + }, + "VirtualServiceBackend": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualServiceName": { + "type": "string" + }, + "ClientPolicy": { + "$ref": "#/definitions/ClientPolicy" + } + }, + "required": [ + "VirtualServiceName" + ] + }, + "AwsCloudMapServiceDiscovery": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AwsCloudMapInstanceAttribute" + } + }, + "NamespaceName": { + "type": "string" + }, + "ServiceName": { + "type": "string" + }, + "IpPreference": { + "type": "string" + } + }, + "required": [ + "NamespaceName", + "ServiceName" + ] + }, + "TlsValidationContext": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubjectAlternativeNames": { + "$ref": "#/definitions/SubjectAlternativeNames" + }, + "Trust": { + "$ref": "#/definitions/TlsValidationContextTrust" + } + }, + "required": [ + "Trust" + ] + }, + "JsonFormatRef": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "SubjectAlternativeNameMatchers": { + "type": "object", + "additionalProperties": false, + "properties": { + "Exact": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "AwsCloudMapInstanceAttribute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "SubjectAlternativeNames": { + "type": "object", + "additionalProperties": false, + "properties": { + "Match": { + "$ref": "#/definitions/SubjectAlternativeNameMatchers" + } + }, + "required": [ + "Match" + ] + }, + "BackendDefaults": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientPolicy": { + "$ref": "#/definitions/ClientPolicy" + } + } + }, + "Duration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "integer" + }, + "Unit": { + "type": "string" + } + }, + "required": [ + "Value", + "Unit" + ] + }, + "ListenerTlsSdsCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretName": { + "type": "string" + } + }, + "required": [ + "SecretName" + ] + }, + "TlsValidationContextSdsTrust": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretName": { + "type": "string" + } + }, + "required": [ + "SecretName" + ] + }, + "Backend": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualService": { + "$ref": "#/definitions/VirtualServiceBackend" + } + } + }, + "ListenerTlsValidationContext": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubjectAlternativeNames": { + "$ref": "#/definitions/SubjectAlternativeNames" + }, + "Trust": { + "$ref": "#/definitions/ListenerTlsValidationContextTrust" + } + }, + "required": [ + "Trust" + ] + }, + "ClientTlsCertificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "File": { + "$ref": "#/definitions/ListenerTlsFileCertificate" + }, + "SDS": { + "$ref": "#/definitions/ListenerTlsSdsCertificate" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "OutlierDetection": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxEjectionPercent": { + "type": "integer" + }, + "BaseEjectionDuration": { + "$ref": "#/definitions/Duration" + }, + "MaxServerErrors": { + "type": "integer" + }, + "Interval": { + "$ref": "#/definitions/Duration" + } + }, + "required": [ + "MaxEjectionPercent", + "BaseEjectionDuration", + "MaxServerErrors", + "Interval" + ] + }, + "VirtualNodeGrpcConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxRequests": { + "type": "integer" + } + }, + "required": [ + "MaxRequests" + ] + }, + "VirtualNodeHttpConnectionPool": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxConnections": { + "type": "integer" + }, + "MaxPendingRequests": { + "type": "integer" + } + }, + "required": [ + "MaxConnections" + ] + } + }, + "required": [ + "MeshName", + "Spec" + ], + "createOnlyProperties": [ + "/properties/MeshName", + "/properties/VirtualNodeName", + "/properties/MeshOwner" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ResourceOwner", + "/properties/Arn", + "/properties/Uid" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appmesh/virtualrouter.json b/internal/aws/cfn/schemas/aws/appmesh/virtualrouter.json new file mode 100644 index 00000000..4916a347 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appmesh/virtualrouter.json @@ -0,0 +1,118 @@ +{ + "typeName": "AWS::AppMesh::VirtualRouter", + "description": "Resource Type definition for AWS::AppMesh::VirtualRouter", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "string" + }, + "MeshName": { + "type": "string" + }, + "VirtualRouterName": { + "type": "string" + }, + "MeshOwner": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/VirtualRouterSpec" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "VirtualRouterSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "Listeners": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VirtualRouterListener" + } + } + }, + "required": [ + "Listeners" + ] + }, + "VirtualRouterListener": { + "type": "object", + "additionalProperties": false, + "properties": { + "PortMapping": { + "$ref": "#/definitions/PortMapping" + } + }, + "required": [ + "PortMapping" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "PortMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "Protocol": { + "type": "string" + }, + "Port": { + "type": "integer" + } + }, + "required": [ + "Port", + "Protocol" + ] + } + }, + "required": [ + "MeshName", + "Spec" + ], + "createOnlyProperties": [ + "/properties/MeshName", + "/properties/VirtualRouterName", + "/properties/MeshOwner" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ResourceOwner", + "/properties/Arn", + "/properties/Uid" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appmesh/virtualservice.json b/internal/aws/cfn/schemas/aws/appmesh/virtualservice.json new file mode 100644 index 00000000..f50d802a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appmesh/virtualservice.json @@ -0,0 +1,120 @@ +{ + "typeName": "AWS::AppMesh::VirtualService", + "description": "Resource Type definition for AWS::AppMesh::VirtualService", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "string" + }, + "MeshName": { + "type": "string" + }, + "MeshOwner": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "VirtualServiceName": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/VirtualServiceSpec" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "VirtualNodeServiceProvider": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualNodeName": { + "type": "string" + } + }, + "required": [ + "VirtualNodeName" + ] + }, + "VirtualServiceProvider": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualNode": { + "$ref": "#/definitions/VirtualNodeServiceProvider" + }, + "VirtualRouter": { + "$ref": "#/definitions/VirtualRouterServiceProvider" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "VirtualServiceSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "Provider": { + "$ref": "#/definitions/VirtualServiceProvider" + } + } + }, + "VirtualRouterServiceProvider": { + "type": "object", + "additionalProperties": false, + "properties": { + "VirtualRouterName": { + "type": "string" + } + }, + "required": [ + "VirtualRouterName" + ] + } + }, + "required": [ + "MeshName", + "VirtualServiceName", + "Spec" + ], + "createOnlyProperties": [ + "/properties/MeshName", + "/properties/VirtualServiceName", + "/properties/MeshOwner" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ResourceOwner", + "/properties/Arn", + "/properties/Uid" + ] +} diff --git a/internal/aws/cfn/schemas/aws/apprunner/autoscalingconfiguration.json b/internal/aws/cfn/schemas/aws/apprunner/autoscalingconfiguration.json new file mode 100644 index 00000000..26ddb61b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apprunner/autoscalingconfiguration.json @@ -0,0 +1,113 @@ +{ + "typeName": "AWS::AppRunner::AutoScalingConfiguration", + "description": "Describes an AWS App Runner automatic configuration resource that enables automatic scaling of instances used to process web requests. You can share an auto scaling configuration across multiple services.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "AutoScalingConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of this auto scaling configuration.", + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\\w|/|-){1,1011}" + }, + "AutoScalingConfigurationName": { + "description": "The customer-provided auto scaling configuration name. When you use it for the first time in an AWS Region, App Runner creates revision number 1 of this name. When you use the same name in subsequent calls, App Runner creates incremental revisions of the configuration. The auto scaling configuration name can be used in multiple revisions of a configuration.", + "type": "string", + "minLength": 4, + "maxLength": 32, + "pattern": "[A-Za-z0-9][A-Za-z0-9\\-_]{3,31}" + }, + "AutoScalingConfigurationRevision": { + "description": "The revision of this auto scaling configuration. It's unique among all the active configurations (\"Status\": \"ACTIVE\") that share the same AutoScalingConfigurationName.", + "type": "integer" + }, + "MaxConcurrency": { + "description": "The maximum number of concurrent requests that an instance processes. If the number of concurrent requests exceeds this limit, App Runner scales the service up to use more instances to process the requests.", + "type": "integer" + }, + "MaxSize": { + "description": "The maximum number of instances that an App Runner service scales up to. At most MaxSize instances actively serve traffic for your service.", + "type": "integer" + }, + "MinSize": { + "description": "The minimum number of instances that App Runner provisions for a service. The service always has at least MinSize provisioned instances. Some of them actively serve traffic. The rest of them (provisioned and inactive instances) are a cost-effective compute capacity reserve and are ready to be quickly activated. You pay for memory usage of all the provisioned instances. You pay for CPU usage of only the active subset.", + "type": "integer" + }, + "Latest": { + "description": "It's set to true for the configuration with the highest Revision among all configurations that share the same AutoScalingConfigurationName. It's set to false otherwise. App Runner temporarily doubles the number of provisioned instances during deployments, to maintain the same capacity for both old and new code.", + "type": "boolean" + }, + "Tags": { + "description": "A list of metadata items that you can associate with your auto scaling configuration resource. A tag is a key-value pair.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/AutoScalingConfigurationName", + "/properties/MaxConcurrency", + "/properties/MaxSize", + "/properties/MinSize", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/AutoScalingConfigurationArn", + "/properties/AutoScalingConfigurationRevision", + "/properties/Latest" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/AutoScalingConfigurationArn" + ], + "handlers": { + "create": { + "permissions": [ + "apprunner:CreateAutoScalingConfiguration", + "apprunner:DescribeAutoScalingConfiguration", + "apprunner:TagResource" + ] + }, + "read": { + "permissions": [ + "apprunner:DescribeAutoScalingConfiguration" + ] + }, + "delete": { + "permissions": [ + "apprunner:DeleteAutoScalingConfiguration" + ] + }, + "list": { + "permissions": [ + "apprunner:ListAutoScalingConfiguration" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apprunner/observabilityconfiguration.json b/internal/aws/cfn/schemas/aws/apprunner/observabilityconfiguration.json new file mode 100644 index 00000000..06b4e412 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apprunner/observabilityconfiguration.json @@ -0,0 +1,120 @@ +{ + "typeName": "AWS::AppRunner::ObservabilityConfiguration", + "description": "The AWS::AppRunner::ObservabilityConfiguration resource is an AWS App Runner resource type that specifies an App Runner observability configuration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apprunner.git", + "definitions": { + "TraceConfiguration": { + "description": "Describes the configuration of the tracing feature within an AWS App Runner observability configuration.", + "type": "object", + "properties": { + "Vendor": { + "description": "The implementation provider chosen for tracing App Runner services.", + "type": "string", + "enum": [ + "AWSXRAY" + ] + } + }, + "required": [ + "Vendor" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "ObservabilityConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of this ObservabilityConfiguration", + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\\w|/|-){1,1011}" + }, + "ObservabilityConfigurationName": { + "description": "A name for the observability configuration. When you use it for the first time in an AWS Region, App Runner creates revision number 1 of this name. When you use the same name in subsequent calls, App Runner creates incremental revisions of the configuration.", + "type": "string", + "minLength": 4, + "maxLength": 32, + "pattern": "[A-Za-z0-9][A-Za-z0-9\\-_]{3,31}" + }, + "ObservabilityConfigurationRevision": { + "description": "The revision of this observability configuration. It's unique among all the active configurations ('Status': 'ACTIVE') that share the same ObservabilityConfigurationName.", + "type": "integer" + }, + "Latest": { + "description": "It's set to true for the configuration with the highest Revision among all configurations that share the same Name. It's set to false otherwise.", + "type": "boolean" + }, + "TraceConfiguration": { + "description": "The configuration of the tracing feature within this observability configuration. If you don't specify it, App Runner doesn't enable tracing.", + "$ref": "#/definitions/TraceConfiguration" + }, + "Tags": { + "description": "A list of metadata items that you can associate with your observability configuration resource. A tag is a key-value pair.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [], + "createOnlyProperties": [ + "/properties/ObservabilityConfigurationName", + "/properties/TraceConfiguration", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/ObservabilityConfigurationArn", + "/properties/ObservabilityConfigurationRevision", + "/properties/Latest" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/ObservabilityConfigurationArn" + ], + "handlers": { + "create": { + "permissions": [ + "apprunner:CreateObservabilityConfiguration", + "apprunner:DescribeObservabilityConfiguration", + "apprunner:TagResource" + ] + }, + "read": { + "permissions": [ + "apprunner:DescribeObservabilityConfiguration" + ] + }, + "delete": { + "permissions": [ + "apprunner:DeleteObservabilityConfiguration" + ] + }, + "list": { + "permissions": [ + "apprunner:ListObservabilityConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apprunner/service.json b/internal/aws/cfn/schemas/aws/apprunner/service.json new file mode 100644 index 00000000..1f5b5965 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apprunner/service.json @@ -0,0 +1,549 @@ +{ + "typeName": "AWS::AppRunner::Service", + "description": "The AWS::AppRunner::Service resource specifies an AppRunner Service.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apprunner.git", + "definitions": { + "SourceConfiguration": { + "description": "Source Code configuration", + "type": "object", + "properties": { + "CodeRepository": { + "$ref": "#/definitions/CodeRepository" + }, + "ImageRepository": { + "$ref": "#/definitions/ImageRepository" + }, + "AutoDeploymentsEnabled": { + "description": "Auto Deployment enabled", + "type": "boolean" + }, + "AuthenticationConfiguration": { + "$ref": "#/definitions/AuthenticationConfiguration" + } + }, + "additionalProperties": false + }, + "CodeRepository": { + "description": "Source Code Repository", + "type": "object", + "properties": { + "RepositoryUrl": { + "type": "string", + "description": "Repository Url" + }, + "SourceCodeVersion": { + "$ref": "#/definitions/SourceCodeVersion" + }, + "CodeConfiguration": { + "$ref": "#/definitions/CodeConfiguration" + }, + "SourceDirectory": { + "type": "string", + "description": "Source Directory", + "minLength": 1, + "maxLength": 4096, + "pattern": "[^\\x00]+" + } + }, + "required": [ + "RepositoryUrl", + "SourceCodeVersion" + ], + "additionalProperties": false + }, + "SourceCodeVersion": { + "description": "Source Code Version", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "Source Code Version Type", + "enum": [ + "BRANCH" + ] + }, + "Value": { + "type": "string", + "description": "Source Code Version Value" + } + }, + "required": [ + "Type", + "Value" + ], + "additionalProperties": false + }, + "CodeConfiguration": { + "description": "Code Configuration", + "type": "object", + "properties": { + "ConfigurationSource": { + "type": "string", + "description": "Configuration Source", + "enum": [ + "REPOSITORY", + "API" + ] + }, + "CodeConfigurationValues": { + "$ref": "#/definitions/CodeConfigurationValues" + } + }, + "required": [ + "ConfigurationSource" + ], + "additionalProperties": false + }, + "CodeConfigurationValues": { + "description": "Code Configuration Values", + "type": "object", + "properties": { + "Runtime": { + "type": "string", + "description": "Runtime", + "enum": [ + "PYTHON_3", + "NODEJS_12", + "NODEJS_14", + "CORRETTO_8", + "CORRETTO_11", + "NODEJS_16", + "GO_1", + "DOTNET_6", + "PHP_81", + "RUBY_31", + "PYTHON_311", + "NODEJS_18" + ] + }, + "BuildCommand": { + "type": "string", + "description": "Build Command" + }, + "StartCommand": { + "type": "string", + "description": "Start Command" + }, + "Port": { + "type": "string", + "description": "Port" + }, + "RuntimeEnvironmentVariables": { + "type": "array", + "items": { + "$ref": "#/definitions/KeyValuePair" + } + }, + "RuntimeEnvironmentSecrets": { + "type": "array", + "items": { + "$ref": "#/definitions/KeyValuePair" + }, + "description": "The secrets and parameters that get referenced by your service as environment variables" + } + }, + "required": [ + "Runtime" + ], + "additionalProperties": false + }, + "ImageRepository": { + "description": "Image Repository", + "type": "object", + "properties": { + "ImageIdentifier": { + "type": "string", + "description": "Image Identifier", + "minLength": 1, + "maxLength": 1024, + "pattern": "([0-9]{12}.dkr.ecr.[a-z\\-]+-[0-9]{1}.amazonaws.com\\/.*)|(^public\\.ecr\\.aws\\/.+\\/.+)" + }, + "ImageConfiguration": { + "$ref": "#/definitions/ImageConfiguration" + }, + "ImageRepositoryType": { + "type": "string", + "description": "Image Repository Type", + "enum": [ + "ECR", + "ECR_PUBLIC" + ] + } + }, + "required": [ + "ImageIdentifier", + "ImageRepositoryType" + ], + "additionalProperties": false + }, + "ImageConfiguration": { + "description": "Image Configuration", + "type": "object", + "properties": { + "StartCommand": { + "type": "string", + "description": "Start Command" + }, + "Port": { + "type": "string", + "description": "Port" + }, + "RuntimeEnvironmentVariables": { + "type": "array", + "items": { + "$ref": "#/definitions/KeyValuePair" + } + }, + "RuntimeEnvironmentSecrets": { + "type": "array", + "items": { + "$ref": "#/definitions/KeyValuePair" + }, + "description": "The secrets and parameters that get referenced by your service as environment variables" + } + }, + "additionalProperties": false + }, + "AuthenticationConfiguration": { + "description": "Authentication Configuration", + "type": "object", + "properties": { + "ConnectionArn": { + "type": "string", + "description": "Connection Arn", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}" + }, + "AccessRoleArn": { + "description": "Access Role Arn", + "$ref": "#/definitions/RoleArn" + } + }, + "additionalProperties": false + }, + "InstanceConfiguration": { + "description": "Instance Configuration", + "type": "object", + "properties": { + "Cpu": { + "type": "string", + "description": "CPU", + "minLength": 3, + "maxLength": 9, + "pattern": "256|512|1024|2048|4096|(0.25|0.5|1|2|4) vCPU" + }, + "Memory": { + "type": "string", + "description": "Memory", + "minLength": 3, + "maxLength": 6, + "pattern": "512|1024|2048|3072|4096|6144|8192|10240|12288|(0.5|1|2|3|4|6|8|10|12) GB" + }, + "InstanceRoleArn": { + "description": "Instance Role Arn", + "$ref": "#/definitions/RoleArn" + } + }, + "additionalProperties": false + }, + "RoleArn": { + "type": "string", + "minLength": 29, + "maxLength": 1024, + "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):iam::[0-9]{12}:role/[\\w+=,.@-]{1,64}" + }, + "EncryptionConfiguration": { + "description": "Encryption configuration (KMS key)", + "type": "object", + "properties": { + "KmsKey": { + "type": "string", + "description": "The KMS Key", + "minLength": 0, + "maxLength": 256, + "pattern": "arn:aws(-[\\w]+)*:kms:[a-z\\-]+-[0-9]{1}:[0-9]{12}:key\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + } + }, + "required": [ + "KmsKey" + ], + "additionalProperties": false + }, + "HealthCheckConfiguration": { + "description": "Health check configuration", + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Health Check Protocol", + "enum": [ + "TCP", + "HTTP" + ] + }, + "Path": { + "type": "string", + "description": "Health check Path" + }, + "Interval": { + "type": "integer", + "description": "Health check Interval" + }, + "Timeout": { + "type": "integer", + "description": "Health check Timeout", + "minimum": 1, + "maximum": 20 + }, + "HealthyThreshold": { + "type": "integer", + "description": "Health check Healthy Threshold", + "minimum": 1, + "maximum": 20 + }, + "UnhealthyThreshold": { + "type": "integer", + "description": "Health check Unhealthy Threshold", + "minimum": 1, + "maximum": 20 + } + }, + "additionalProperties": false + }, + "EgressConfiguration": { + "description": "Network egress configuration", + "type": "object", + "properties": { + "EgressType": { + "description": "Network egress type.", + "type": "string", + "enum": [ + "DEFAULT", + "VPC" + ] + }, + "VpcConnectorArn": { + "description": "The Amazon Resource Name (ARN) of the App Runner VpcConnector.", + "type": "string", + "minLength": 44, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}" + } + }, + "required": [ + "EgressType" + ], + "additionalProperties": false + }, + "IngressConfiguration": { + "description": "Network ingress configuration", + "type": "object", + "properties": { + "IsPubliclyAccessible": { + "description": "It's set to true if the Apprunner service is publicly accessible. It's set to false otherwise.", + "type": "boolean" + } + }, + "required": [ + "IsPubliclyAccessible" + ], + "additionalProperties": false + }, + "NetworkConfiguration": { + "description": "Network configuration", + "type": "object", + "properties": { + "EgressConfiguration": { + "$ref": "#/definitions/EgressConfiguration" + }, + "IngressConfiguration": { + "$ref": "#/definitions/IngressConfiguration" + }, + "IpAddressType": { + "description": "App Runner service endpoint IP address type", + "type": "string", + "enum": [ + "IPV4", + "DUAL_STACK" + ] + } + }, + "additionalProperties": false + }, + "ServiceObservabilityConfiguration": { + "description": "Service observability configuration", + "type": "object", + "properties": { + "ObservabilityEnabled": { + "description": "Observability enabled", + "type": "boolean" + }, + "ObservabilityConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the App Runner ObservabilityConfiguration.", + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\\w|/|-){1,1011}" + } + }, + "required": [ + "ObservabilityEnabled" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + }, + "KeyValuePair": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "ServiceName": { + "description": "The AppRunner Service Name.", + "type": "string", + "minLength": 4, + "maxLength": 40, + "pattern": "[A-Za-z0-9][A-Za-z0-9-_]{3,39}" + }, + "ServiceId": { + "description": "The AppRunner Service Id", + "type": "string", + "minLength": 32, + "maxLength": 32 + }, + "ServiceArn": { + "description": "The Amazon Resource Name (ARN) of the AppRunner Service.", + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}" + }, + "ServiceUrl": { + "description": "The Service Url of the AppRunner Service.", + "type": "string" + }, + "Status": { + "description": "AppRunner Service status.", + "type": "string" + }, + "SourceConfiguration": { + "$ref": "#/definitions/SourceConfiguration" + }, + "InstanceConfiguration": { + "$ref": "#/definitions/InstanceConfiguration" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration" + }, + "HealthCheckConfiguration": { + "$ref": "#/definitions/HealthCheckConfiguration" + }, + "ObservabilityConfiguration": { + "$ref": "#/definitions/ServiceObservabilityConfiguration" + }, + "AutoScalingConfigurationArn": { + "description": "Autoscaling configuration ARN", + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}" + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "SourceConfiguration" + ], + "createOnlyProperties": [ + "/properties/ServiceName", + "/properties/EncryptionConfiguration", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/ServiceArn", + "/properties/ServiceId", + "/properties/ServiceUrl", + "/properties/Status" + ], + "writeOnlyProperties": [ + "/properties/Tags", + "/properties/AutoScalingConfigurationArn" + ], + "primaryIdentifier": [ + "/properties/ServiceArn" + ], + "handlers": { + "create": { + "permissions": [ + "apprunner:CreateService", + "apprunner:TagResource", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "logs:CreateLogGroup", + "logs:PutRetentionPolicy", + "logs:CreateLogStream", + "logs:PutLogEvents", + "logs:DescribeLogStreams", + "events:PutRule", + "events:PutTargets" + ] + }, + "read": { + "permissions": [ + "apprunner:DescribeService" + ] + }, + "update": { + "permissions": [ + "apprunner:UpdateService", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "apprunner:DeleteService" + ] + }, + "list": { + "permissions": [ + "apprunner:ListServices", + "iam:PassRole" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/apprunner/vpcconnector.json b/internal/aws/cfn/schemas/aws/apprunner/vpcconnector.json new file mode 100644 index 00000000..55e8151b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apprunner/vpcconnector.json @@ -0,0 +1,119 @@ +{ + "typeName": "AWS::AppRunner::VpcConnector", + "description": "The AWS::AppRunner::VpcConnector resource specifies an App Runner VpcConnector.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apprunner.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "VpcConnectorName": { + "description": "A name for the VPC connector. If you don't specify a name, AWS CloudFormation generates a name for your VPC connector.", + "type": "string", + "minLength": 4, + "maxLength": 40, + "pattern": "^[A-Za-z0-9][A-Za-z0-9-\\\\_]{3,39}$" + }, + "VpcConnectorArn": { + "description": "The Amazon Resource Name (ARN) of this VPC connector.", + "type": "string", + "minLength": 44, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\\\.]{0,63}:[a-z0-9-\\\\.]{0,63}:[0-9]{12}:(\\w|\\/|-){1,1011}" + }, + "VpcConnectorRevision": { + "description": "The revision of this VPC connector. It's unique among all the active connectors (\"Status\": \"ACTIVE\") that share the same Name.", + "type": "integer" + }, + "Subnets": { + "description": "A list of IDs of subnets that App Runner should use when it associates your service with a custom Amazon VPC. Specify IDs of subnets of a single Amazon VPC. App Runner determines the Amazon VPC from the subnets you specify.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string" + } + }, + "SecurityGroups": { + "description": "A list of IDs of security groups that App Runner should use for access to AWS resources under the specified subnets. If not specified, App Runner uses the default security group of the Amazon VPC. The default security group allows all outbound traffic.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Tags": { + "description": "A list of metadata items that you can associate with your VPC connector resource. A tag is a key-value pair.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "Subnets" + ], + "createOnlyProperties": [ + "/properties/VpcConnectorName", + "/properties/Subnets", + "/properties/SecurityGroups", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/VpcConnectorArn", + "/properties/VpcConnectorRevision" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/VpcConnectorArn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "apprunner:CreateVpcConnector", + "apprunner:DescribeVpcConnector", + "apprunner:TagResource", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups" + ] + }, + "read": { + "permissions": [ + "apprunner:DescribeVpcConnector" + ] + }, + "delete": { + "permissions": [ + "apprunner:DeleteVpcConnector" + ] + }, + "list": { + "permissions": [ + "apprunner:ListVpcConnectors" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/apprunner/vpcingressconnection.json b/internal/aws/cfn/schemas/aws/apprunner/vpcingressconnection.json new file mode 100644 index 00000000..bdc1fb0c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/apprunner/vpcingressconnection.json @@ -0,0 +1,151 @@ +{ + "typeName": "AWS::AppRunner::VpcIngressConnection", + "description": "The AWS::AppRunner::VpcIngressConnection resource is an App Runner resource that specifies an App Runner VpcIngressConnection.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apprunner.git", + "definitions": { + "IngressVpcConfiguration": { + "description": "The configuration of customer?s VPC and related VPC endpoint", + "type": "object", + "properties": { + "VpcId": { + "description": "The ID of the VPC that the VPC endpoint is used in.", + "type": "string" + }, + "VpcEndpointId": { + "description": "The ID of the VPC endpoint that your App Runner service connects to.", + "type": "string" + } + }, + "required": [ + "VpcId", + "VpcEndpointId" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "VpcIngressConnectionArn": { + "description": "The Amazon Resource Name (ARN) of the VpcIngressConnection.", + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\\w|/|-){1,1011}" + }, + "VpcIngressConnectionName": { + "description": "The customer-provided Vpc Ingress Connection name.", + "type": "string", + "minLength": 4, + "maxLength": 40, + "pattern": "[A-Za-z0-9][A-Za-z0-9\\-_]{3,39}" + }, + "ServiceArn": { + "description": "The Amazon Resource Name (ARN) of the service.", + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "arn:aws(-[\\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\\w|/|-){1,1011}" + }, + "Status": { + "description": "The current status of the VpcIngressConnection.", + "type": "string", + "enum": [ + "AVAILABLE", + "PENDING_CREATION", + "PENDING_UPDATE", + "PENDING_DELETION", + "FAILED_CREATION", + "FAILED_UPDATE", + "FAILED_DELETION", + "DELETED" + ] + }, + "DomainName": { + "description": "The Domain name associated with the VPC Ingress Connection.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[A-Za-z0-9*.-]{1,255}" + }, + "IngressVpcConfiguration": { + "$ref": "#/definitions/IngressVpcConfiguration" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "ServiceArn", + "IngressVpcConfiguration" + ], + "createOnlyProperties": [ + "/properties/VpcIngressConnectionName", + "/properties/ServiceArn", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/VpcIngressConnectionArn", + "/properties/DomainName", + "/properties/Status" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/VpcIngressConnectionArn" + ], + "handlers": { + "create": { + "permissions": [ + "apprunner:CreateVpcIngressConnection", + "apprunner:DescribeVpcIngressConnection", + "ec2:DescribeVpcs", + "ec2:DescribeVpcEndpoints", + "ec2:DescribeSubnets", + "apprunner:TagResource" + ] + }, + "read": { + "permissions": [ + "apprunner:DescribeVpcIngressConnection" + ] + }, + "update": { + "permissions": [ + "apprunner:UpdateVpcIngressConnection" + ] + }, + "delete": { + "permissions": [ + "apprunner:DeleteVpcIngressConnection" + ] + }, + "list": { + "permissions": [ + "apprunner:ListVpcIngressConnections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/appblock.json b/internal/aws/cfn/schemas/aws/appstream/appblock.json new file mode 100644 index 00000000..17d06fbb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/appblock.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::AppStream::AppBlock", + "description": "Resource Type definition for AWS::AppStream::AppBlock", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git", + "definitions": { + "S3Location": { + "type": "object", + "properties": { + "S3Bucket": { + "type": "string" + }, + "S3Key": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "S3Bucket" + ] + }, + "ScriptDetails": { + "type": "object", + "properties": { + "ScriptS3Location": { + "$ref": "#/definitions/S3Location" + }, + "ExecutablePath": { + "type": "string" + }, + "ExecutableParameters": { + "type": "string" + }, + "TimeoutInSeconds": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "ScriptS3Location", + "ExecutablePath", + "TimeoutInSeconds" + ] + }, + "Arn": { + "type": "string" + }, + "Tag": { + "oneOf": [ + { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "TagKey": { + "type": "string" + }, + "TagValue": { + "type": "string" + } + }, + "required": [ + "TagKey", + "TagValue" + ], + "additionalProperties": false + } + ] + }, + "PackagingType": { + "type": "string" + } + }, + "properties": { + "Name": { + "type": "string" + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Description": { + "type": "string" + }, + "DisplayName": { + "type": "string" + }, + "SourceS3Location": { + "$ref": "#/definitions/S3Location" + }, + "SetupScriptDetails": { + "$ref": "#/definitions/ScriptDetails" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "type": "string" + }, + "PackagingType": { + "$ref": "#/definitions/PackagingType" + }, + "PostSetupScriptDetails": { + "$ref": "#/definitions/ScriptDetails" + } + }, + "required": [ + "Name", + "SourceS3Location" + ], + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/DisplayName", + "/properties/Description", + "/properties/SourceS3Location", + "/properties/SetupScriptDetails", + "/properties/PackagingType", + "/properties/PostSetupScriptDetails" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "deprecatedProperties": [ + "/properties/Tags/TagKey", + "/properties/Tags/TagValue" + ], + "handlers": { + "create": { + "permissions": [ + "appstream:CreateAppBlock", + "appstream:TagResource", + "s3:GetObject", + "s3:ListBucket", + "s3:GetBucketOwnershipControls" + ] + }, + "read": { + "permissions": [ + "appstream:DescribeAppBlocks" + ] + }, + "delete": { + "permissions": [ + "appstream:DeleteAppBlock" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/appblockbuilder.json b/internal/aws/cfn/schemas/aws/appstream/appblockbuilder.json new file mode 100644 index 00000000..8c0e3c1c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/appblockbuilder.json @@ -0,0 +1,197 @@ +{ + "typeName": "AWS::AppStream::AppBlockBuilder", + "description": "Resource Type definition for AWS::AppStream::AppBlockBuilder.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git", + "definitions": { + "PlatformType": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "AccessEndpoint": { + "type": "object", + "properties": { + "EndpointType": { + "type": "string" + }, + "VpceId": { + "type": "string" + } + }, + "required": [ + "EndpointType", + "VpceId" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + } + }, + "properties": { + "Name": { + "type": "string" + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Description": { + "type": "string" + }, + "DisplayName": { + "type": "string" + }, + "Platform": { + "$ref": "#/definitions/PlatformType" + }, + "AccessEndpoints": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AccessEndpoint" + } + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + }, + "EnableDefaultInternetAccess": { + "type": "boolean" + }, + "IamRoleArn": { + "type": "string" + }, + "CreatedTime": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "AppBlockArns": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Arn" + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Platform", + "InstanceType", + "VpcConfig" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime" + ], + "writeOnlyProperties": [ + "/properties/Tags", + "/properties/AppBlockArns" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "appstream:CreateAppBlockBuilder", + "appstream:DescribeAppBlockBuilders", + "appstream:StartAppBlockBuilder", + "appstream:AssociateAppBlockBuilderAppBlock", + "appstream:DescribeAppBlockBuilderAppBlockAssociations", + "appstream:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "appstream:DescribeAppBlockBuilders" + ] + }, + "update": { + "permissions": [ + "appstream:UpdateAppBlockBuilder", + "appstream:DescribeAppBlockBuilders", + "appstream:StartAppBlockBuilder", + "appstream:StopAppBlockBuilder", + "appstream:AssociateAppBlockBuilderAppBlock", + "appstream:DisassociateAppBlockBuilderAppBlock", + "appstream:DescribeAppBlockBuilderAppBlockAssociations", + "appstream:ListTagsForResource", + "appstream:TagResource", + "appstream:UntagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "appstream:DescribeAppBlockBuilders", + "appstream:DeleteAppBlockBuilder", + "appstream:DisassociateAppBlockBuilderAppBlock", + "appstream:DescribeAppBlockBuilderAppBlockAssociations" + ] + }, + "list": { + "permissions": [ + "appstream:DescribeAppBlockBuilders" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/application.json b/internal/aws/cfn/schemas/aws/appstream/application.json new file mode 100644 index 00000000..865a104d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/application.json @@ -0,0 +1,193 @@ +{ + "typeName": "AWS::AppStream::Application", + "description": "Resource Type definition for AWS::AppStream::Application", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git", + "definitions": { + "S3Location": { + "type": "object", + "properties": { + "S3Bucket": { + "type": "string" + }, + "S3Key": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "S3Bucket", + "S3Key" + ] + }, + "Arn": { + "type": "string" + }, + "PlatformType": { + "type": "string" + }, + "Tag": { + "oneOf": [ + { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "TagKey": { + "type": "string" + }, + "TagValue": { + "type": "string" + } + }, + "required": [ + "TagKey", + "TagValue" + ], + "additionalProperties": false + } + ] + }, + "ApplicationAttribute": { + "type": "string" + } + }, + "properties": { + "Name": { + "type": "string" + }, + "DisplayName": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "LaunchPath": { + "type": "string" + }, + "LaunchParameters": { + "type": "string" + }, + "WorkingDirectory": { + "type": "string" + }, + "InstanceFamilies": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "IconS3Location": { + "$ref": "#/definitions/S3Location" + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "AppBlockArn": { + "$ref": "#/definitions/Arn" + }, + "Platforms": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/PlatformType" + }, + "insertionOrder": false + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AttributesToDelete": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ApplicationAttribute" + }, + "insertionOrder": false + }, + "CreatedTime": { + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "IconS3Location", + "LaunchPath", + "Platforms", + "InstanceFamilies", + "AppBlockArn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/InstanceFamilies", + "/properties/Platforms" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime" + ], + "writeOnlyProperties": [ + "/properties/Tags", + "/properties/AttributesToDelete" + ], + "deprecatedProperties": [ + "/properties/Tags/TagKey", + "/properties/Tags/TagValue" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "s3:GetObject", + "appstream:CreateApplication", + "appstream:TagResource" + ] + }, + "read": { + "permissions": [ + "appstream:DescribeApplications" + ] + }, + "update": { + "permissions": [ + "appstream:UpdateApplication", + "s3:GetObject" + ] + }, + "delete": { + "permissions": [ + "appstream:DeleteApplication" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/applicationentitlementassociation.json b/internal/aws/cfn/schemas/aws/appstream/applicationentitlementassociation.json new file mode 100644 index 00000000..6b1f08fc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/applicationentitlementassociation.json @@ -0,0 +1,55 @@ +{ + "typeName": "AWS::AppStream::ApplicationEntitlementAssociation", + "description": "Resource Type definition for AWS::AppStream::ApplicationEntitlementAssociation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git", + "definitions": {}, + "properties": { + "StackName": { + "type": "string" + }, + "EntitlementName": { + "type": "string" + }, + "ApplicationIdentifier": { + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "required": [ + "StackName", + "EntitlementName", + "ApplicationIdentifier" + ], + "createOnlyProperties": [ + "/properties/StackName", + "/properties/EntitlementName", + "/properties/ApplicationIdentifier" + ], + "primaryIdentifier": [ + "/properties/StackName", + "/properties/EntitlementName", + "/properties/ApplicationIdentifier" + ], + "handlers": { + "create": { + "permissions": [ + "appstream:AssociateApplicationToEntitlement", + "appstream:ListEntitledApplications" + ] + }, + "read": { + "permissions": [ + "appstream:ListEntitledApplications" + ] + }, + "delete": { + "permissions": [ + "appstream:DisassociateApplicationFromEntitlement", + "appstream:ListEntitledApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/applicationfleetassociation.json b/internal/aws/cfn/schemas/aws/appstream/applicationfleetassociation.json new file mode 100644 index 00000000..64f54794 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/applicationfleetassociation.json @@ -0,0 +1,53 @@ +{ + "typeName": "AWS::AppStream::ApplicationFleetAssociation", + "description": "Resource Type definition for AWS::AppStream::ApplicationFleetAssociation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git", + "definitions": { + "Arn": { + "type": "string" + } + }, + "properties": { + "FleetName": { + "type": "string" + }, + "ApplicationArn": { + "$ref": "#/definitions/Arn" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "required": [ + "FleetName", + "ApplicationArn" + ], + "createOnlyProperties": [ + "/properties/FleetName", + "/properties/ApplicationArn" + ], + "primaryIdentifier": [ + "/properties/FleetName", + "/properties/ApplicationArn" + ], + "handlers": { + "create": { + "permissions": [ + "appstream:AssociateApplicationFleet", + "appstream:DescribeApplicationFleetAssociations" + ] + }, + "read": { + "permissions": [ + "appstream:DescribeApplicationFleetAssociations" + ] + }, + "delete": { + "permissions": [ + "appstream:DisassociateApplicationFleet", + "appstream:DescribeApplicationFleetAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/directoryconfig.json b/internal/aws/cfn/schemas/aws/appstream/directoryconfig.json new file mode 100644 index 00000000..2aab19db --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/directoryconfig.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::AppStream::DirectoryConfig", + "description": "Resource Type definition for AWS::AppStream::DirectoryConfig", + "additionalProperties": false, + "properties": { + "OrganizationalUnitDistinguishedNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ServiceAccountCredentials": { + "$ref": "#/definitions/ServiceAccountCredentials" + }, + "DirectoryName": { + "type": "string" + }, + "CertificateBasedAuthProperties": { + "$ref": "#/definitions/CertificateBasedAuthProperties" + } + }, + "definitions": { + "ServiceAccountCredentials": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccountName": { + "type": "string" + }, + "AccountPassword": { + "type": "string" + } + }, + "required": [ + "AccountName", + "AccountPassword" + ] + }, + "CertificateBasedAuthProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string" + }, + "CertificateAuthorityArn": { + "type": "string" + } + } + } + }, + "required": [ + "DirectoryName", + "OrganizationalUnitDistinguishedNames", + "ServiceAccountCredentials" + ], + "writeOnlyProperties": [ + "/properties/ServiceAccountCredentials/AccountPassword" + ], + "createOnlyProperties": [ + "/properties/DirectoryName" + ], + "primaryIdentifier": [ + "/properties/DirectoryName" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "appstream:CreateDirectoryConfig", + "appstream:DeleteDirectoryConfig", + "appstream:DescribeDirectoryConfigs", + "appstream:UpdateDirectoryConfig", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "update": { + "permissions": [ + "appstream:CreateDirectoryConfig", + "appstream:DeleteDirectoryConfig", + "appstream:DescribeDirectoryConfigs", + "appstream:UpdateDirectoryConfig", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "read": { + "permissions": [ + "appstream:CreateDirectoryConfig", + "appstream:DeleteDirectoryConfig", + "appstream:DescribeDirectoryConfigs", + "appstream:UpdateDirectoryConfig", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "delete": { + "permissions": [ + "appstream:CreateDirectoryConfig", + "appstream:DeleteDirectoryConfig", + "appstream:DescribeDirectoryConfigs", + "appstream:UpdateDirectoryConfig", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "list": { + "permissions": [ + "appstream:CreateDirectoryConfig", + "appstream:DeleteDirectoryConfig", + "appstream:DescribeDirectoryConfigs", + "appstream:UpdateDirectoryConfig", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/entitlement.json b/internal/aws/cfn/schemas/aws/appstream/entitlement.json new file mode 100644 index 00000000..294ffa29 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/entitlement.json @@ -0,0 +1,95 @@ +{ + "typeName": "AWS::AppStream::Entitlement", + "description": "Resource Type definition for AWS::AppStream::Entitlement", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appstream.git", + "definitions": { + "Attribute": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Name", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "type": "string" + }, + "StackName": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AppVisibility": { + "type": "string" + }, + "Attributes": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Attribute" + } + }, + "CreatedTime": { + "type": "string" + }, + "LastModifiedTime": { + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "required": [ + "Name", + "StackName", + "AppVisibility", + "Attributes" + ], + "readOnlyProperties": [ + "/properties/CreatedTime", + "/properties/LastModifiedTime" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/StackName" + ], + "primaryIdentifier": [ + "/properties/StackName", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "appstream:CreateEntitlement" + ] + }, + "read": { + "permissions": [ + "appstream:DescribeEntitlements" + ] + }, + "update": { + "permissions": [ + "appstream:UpdateEntitlement" + ] + }, + "delete": { + "permissions": [ + "appstream:DeleteEntitlement" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/fleet.json b/internal/aws/cfn/schemas/aws/appstream/fleet.json new file mode 100644 index 00000000..e4a8b7e7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/fleet.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::AppStream::Fleet", + "description": "Resource Type definition for AWS::AppStream::Fleet", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "ComputeCapacity": { + "$ref": "#/definitions/ComputeCapacity" + }, + "Platform": { + "type": "string" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + }, + "FleetType": { + "type": "string" + }, + "EnableDefaultInternetAccess": { + "type": "boolean" + }, + "DomainJoinInfo": { + "$ref": "#/definitions/DomainJoinInfo" + }, + "SessionScriptS3Location": { + "$ref": "#/definitions/S3Location" + }, + "Name": { + "type": "string" + }, + "ImageName": { + "type": "string" + }, + "MaxUserDurationInSeconds": { + "type": "integer" + }, + "IdleDisconnectTimeoutInSeconds": { + "type": "integer" + }, + "UsbDeviceFilterStrings": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DisconnectTimeoutInSeconds": { + "type": "integer" + }, + "DisplayName": { + "type": "string" + }, + "StreamView": { + "type": "string" + }, + "IamRoleArn": { + "type": "string" + }, + "MaxSessionsPerInstance": { + "type": "integer" + }, + "Id": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "MaxConcurrentSessions": { + "type": "integer" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ImageArn": { + "type": "string" + } + }, + "definitions": { + "ComputeCapacity": { + "type": "object", + "additionalProperties": false, + "properties": { + "DesiredInstances": { + "type": "integer" + }, + "DesiredSessions": { + "type": "integer" + } + } + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "DomainJoinInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "OrganizationalUnitDistinguishedName": { + "type": "string" + }, + "DirectoryName": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "S3Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Bucket": { + "type": "string" + }, + "S3Key": { + "type": "string" + } + }, + "required": [ + "S3Bucket", + "S3Key" + ] + } + }, + "required": [ + "InstanceType", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/FleetType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appstream/imagebuilder.json b/internal/aws/cfn/schemas/aws/appstream/imagebuilder.json new file mode 100644 index 00000000..2b7d9edf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/imagebuilder.json @@ -0,0 +1,198 @@ +{ + "typeName": "AWS::AppStream::ImageBuilder", + "description": "Resource Type definition for AWS::AppStream::ImageBuilder", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + }, + "EnableDefaultInternetAccess": { + "type": "boolean" + }, + "DomainJoinInfo": { + "$ref": "#/definitions/DomainJoinInfo" + }, + "AppstreamAgentVersion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "ImageName": { + "type": "string" + }, + "DisplayName": { + "type": "string" + }, + "IamRoleArn": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "StreamingUrl": { + "type": "string" + }, + "ImageArn": { + "type": "string" + }, + "AccessEndpoints": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AccessEndpoint" + } + } + }, + "definitions": { + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "DomainJoinInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "OrganizationalUnitDistinguishedName": { + "type": "string" + }, + "DirectoryName": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "AccessEndpoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "EndpointType": { + "type": "string" + }, + "VpceId": { + "type": "string" + } + }, + "required": [ + "EndpointType", + "VpceId" + ] + } + }, + "required": [ + "InstanceType", + "Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/StreamingUrl" + ], + "tagging": { + "taggable": false, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "appstream:CreateImageBuilder", + "appstream:CreateImageBuilderStreamingURL", + "appstream:CreateStreamingURL", + "appstream:DeleteImageBuilder", + "appstream:DescribeImageBuilders", + "appstream:StartImageBuilder", + "appstream:StopImageBuilder", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "read": { + "permissions": [ + "appstream:CreateImageBuilder", + "appstream:CreateImageBuilderStreamingURL", + "appstream:CreateStreamingURL", + "appstream:DeleteImageBuilder", + "appstream:DescribeImageBuilders", + "appstream:StartImageBuilder", + "appstream:StopImageBuilder", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "delete": { + "permissions": [ + "appstream:CreateImageBuilder", + "appstream:CreateImageBuilderStreamingURL", + "appstream:CreateStreamingURL", + "appstream:DeleteImageBuilder", + "appstream:DescribeImageBuilders", + "appstream:StartImageBuilder", + "appstream:StopImageBuilder", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + }, + "list": { + "permissions": [ + "appstream:CreateImageBuilder", + "appstream:CreateImageBuilderStreamingURL", + "appstream:CreateStreamingURL", + "appstream:DeleteImageBuilder", + "appstream:DescribeImageBuilders", + "appstream:StartImageBuilder", + "appstream:StopImageBuilder", + "iam:CreateServiceLinkedRole", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appstream/stack.json b/internal/aws/cfn/schemas/aws/appstream/stack.json new file mode 100644 index 00000000..5bc1f390 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/stack.json @@ -0,0 +1,184 @@ +{ + "typeName": "AWS::AppStream::Stack", + "description": "Resource Type definition for AWS::AppStream::Stack", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "StorageConnectors": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/StorageConnector" + } + }, + "DeleteStorageConnectors": { + "type": "boolean" + }, + "EmbedHostDomains": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "UserSettings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/UserSetting" + } + }, + "AttributesToDelete": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "RedirectURL": { + "type": "string" + }, + "StreamingExperienceSettings": { + "$ref": "#/definitions/StreamingExperienceSettings" + }, + "Name": { + "type": "string" + }, + "FeedbackURL": { + "type": "string" + }, + "ApplicationSettings": { + "$ref": "#/definitions/ApplicationSettings" + }, + "DisplayName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AccessEndpoints": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AccessEndpoint" + } + } + }, + "definitions": { + "StorageConnector": { + "type": "object", + "additionalProperties": false, + "properties": { + "Domains": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ResourceIdentifier": { + "type": "string" + }, + "ConnectorType": { + "type": "string" + } + }, + "required": [ + "ConnectorType" + ] + }, + "ApplicationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SettingsGroup": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "StreamingExperienceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "PreferredProtocol": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "AccessEndpoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "EndpointType": { + "type": "string" + }, + "VpceId": { + "type": "string" + } + }, + "required": [ + "EndpointType", + "VpceId" + ] + }, + "UserSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "Permission": { + "type": "string" + }, + "Action": { + "type": "string" + }, + "MaximumLength": { + "type": "integer" + } + }, + "required": [ + "Action", + "Permission" + ] + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appstream/stackfleetassociation.json b/internal/aws/cfn/schemas/aws/appstream/stackfleetassociation.json new file mode 100644 index 00000000..7fae9e36 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/stackfleetassociation.json @@ -0,0 +1,26 @@ +{ + "typeName": "AWS::AppStream::StackFleetAssociation", + "description": "Resource Type definition for AWS::AppStream::StackFleetAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "FleetName": { + "type": "string" + }, + "StackName": { + "type": "string" + } + }, + "required": [ + "FleetName", + "StackName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appstream/stackuserassociation.json b/internal/aws/cfn/schemas/aws/appstream/stackuserassociation.json new file mode 100644 index 00000000..d9acbeff --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/stackuserassociation.json @@ -0,0 +1,39 @@ +{ + "typeName": "AWS::AppStream::StackUserAssociation", + "description": "Resource Type definition for AWS::AppStream::StackUserAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SendEmailNotification": { + "type": "boolean" + }, + "UserName": { + "type": "string" + }, + "StackName": { + "type": "string" + }, + "AuthenticationType": { + "type": "string" + } + }, + "required": [ + "StackName", + "UserName", + "AuthenticationType" + ], + "createOnlyProperties": [ + "/properties/StackName", + "/properties/AuthenticationType", + "/properties/SendEmailNotification", + "/properties/UserName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appstream/user.json b/internal/aws/cfn/schemas/aws/appstream/user.json new file mode 100644 index 00000000..37860e5e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appstream/user.json @@ -0,0 +1,42 @@ +{ + "typeName": "AWS::AppStream::User", + "description": "Resource Type definition for AWS::AppStream::User", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "UserName": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "MessageAction": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "AuthenticationType": { + "type": "string" + } + }, + "required": [ + "UserName", + "AuthenticationType" + ], + "createOnlyProperties": [ + "/properties/FirstName", + "/properties/MessageAction", + "/properties/LastName", + "/properties/AuthenticationType", + "/properties/UserName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appsync/apicache.json b/internal/aws/cfn/schemas/aws/appsync/apicache.json new file mode 100644 index 00000000..c77312d5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/apicache.json @@ -0,0 +1,46 @@ +{ + "typeName": "AWS::AppSync::ApiCache", + "description": "Resource Type definition for AWS::AppSync::ApiCache", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "TransitEncryptionEnabled": { + "type": "boolean" + }, + "HealthMetricsConfig": { + "type": "string" + }, + "AtRestEncryptionEnabled": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "ApiId": { + "type": "string" + }, + "ApiCachingBehavior": { + "type": "string" + }, + "Ttl": { + "type": "number" + } + }, + "required": [ + "Type", + "ApiId", + "ApiCachingBehavior", + "Ttl" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appsync/apikey.json b/internal/aws/cfn/schemas/aws/appsync/apikey.json new file mode 100644 index 00000000..ead5dc68 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/apikey.json @@ -0,0 +1,39 @@ +{ + "typeName": "AWS::AppSync::ApiKey", + "description": "Resource Type definition for AWS::AppSync::ApiKey", + "additionalProperties": false, + "properties": { + "ApiKey": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ApiKeyId": { + "type": "string" + }, + "Expires": { + "type": "number" + }, + "Arn": { + "type": "string" + }, + "ApiId": { + "type": "string" + } + }, + "required": [ + "ApiId" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/ApiKeyId" + ], + "readOnlyProperties": [ + "/properties/ApiKeyId", + "/properties/ApiKey", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appsync/datasource.json b/internal/aws/cfn/schemas/aws/appsync/datasource.json new file mode 100644 index 00000000..02996e55 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/datasource.json @@ -0,0 +1,254 @@ +{ + "typeName": "AWS::AppSync::DataSource", + "description": "Resource Type definition for AWS::AppSync::DataSource", + "additionalProperties": false, + "properties": { + "OpenSearchServiceConfig": { + "$ref": "#/definitions/OpenSearchServiceConfig" + }, + "Description": { + "type": "string" + }, + "ServiceRoleArn": { + "type": "string" + }, + "MetricsConfig": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "DataSourceArn": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "EventBridgeConfig": { + "$ref": "#/definitions/EventBridgeConfig" + }, + "HttpConfig": { + "$ref": "#/definitions/HttpConfig" + }, + "RelationalDatabaseConfig": { + "$ref": "#/definitions/RelationalDatabaseConfig" + }, + "LambdaConfig": { + "$ref": "#/definitions/LambdaConfig" + }, + "Id": { + "type": "string" + }, + "ApiId": { + "type": "string" + }, + "DynamoDBConfig": { + "$ref": "#/definitions/DynamoDBConfig" + }, + "ElasticsearchConfig": { + "$ref": "#/definitions/ElasticsearchConfig" + } + }, + "definitions": { + "RdsHttpEndpointConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "AwsRegion": { + "type": "string" + }, + "DbClusterIdentifier": { + "type": "string" + }, + "AwsSecretStoreArn": { + "type": "string" + }, + "Schema": { + "type": "string" + } + }, + "required": [ + "AwsRegion", + "DbClusterIdentifier", + "AwsSecretStoreArn" + ] + }, + "OpenSearchServiceConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AwsRegion": { + "type": "string" + }, + "Endpoint": { + "type": "string" + } + }, + "required": [ + "AwsRegion", + "Endpoint" + ] + }, + "AwsIamConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SigningRegion": { + "type": "string" + }, + "SigningServiceName": { + "type": "string" + } + } + }, + "EventBridgeConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "EventBusArn": { + "type": "string" + } + }, + "required": [ + "EventBusArn" + ] + }, + "AuthorizationConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AuthorizationType": { + "type": "string" + }, + "AwsIamConfig": { + "$ref": "#/definitions/AwsIamConfig" + } + }, + "required": [ + "AuthorizationType" + ] + }, + "DeltaSyncConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "BaseTableTTL": { + "type": "string" + }, + "DeltaSyncTableTTL": { + "type": "string" + }, + "DeltaSyncTableName": { + "type": "string" + } + }, + "required": [ + "BaseTableTTL", + "DeltaSyncTableTTL", + "DeltaSyncTableName" + ] + }, + "RelationalDatabaseConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "RdsHttpEndpointConfig": { + "$ref": "#/definitions/RdsHttpEndpointConfig" + }, + "RelationalDatabaseSourceType": { + "type": "string" + } + }, + "required": [ + "RelationalDatabaseSourceType" + ] + }, + "HttpConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Endpoint": { + "type": "string" + }, + "AuthorizationConfig": { + "$ref": "#/definitions/AuthorizationConfig" + } + }, + "required": [ + "Endpoint" + ] + }, + "LambdaConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "LambdaFunctionArn": { + "type": "string" + } + }, + "required": [ + "LambdaFunctionArn" + ] + }, + "ElasticsearchConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AwsRegion": { + "type": "string" + }, + "Endpoint": { + "type": "string" + } + }, + "required": [ + "AwsRegion", + "Endpoint" + ] + }, + "DynamoDBConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TableName": { + "type": "string" + }, + "DeltaSyncConfig": { + "$ref": "#/definitions/DeltaSyncConfig" + }, + "UseCallerCredentials": { + "type": "boolean" + }, + "AwsRegion": { + "type": "string" + }, + "Versioned": { + "type": "boolean" + } + }, + "required": [ + "TableName", + "AwsRegion" + ] + } + }, + "required": [ + "Type", + "ApiId", + "Name" + ], + "createOnlyProperties": [ + "/properties/ApiId", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/DataSourceArn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appsync/domainname.json b/internal/aws/cfn/schemas/aws/appsync/domainname.json new file mode 100644 index 00000000..e247d2b7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/domainname.json @@ -0,0 +1,82 @@ +{ + "typeName": "AWS::AppSync::DomainName", + "description": "Resource Type definition for AWS::AppSync::DomainName", + "additionalProperties": false, + "properties": { + "DomainName": { + "type": "string", + "minLength": 1, + "maxLength": 253, + "pattern": "^(\\*[a-z\\d-]*\\.)?([a-z\\d-]+\\.)+[a-z\\d-]+$" + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "CertificateArn": { + "type": "string", + "minLength": 3, + "maxLength": 2048, + "pattern": "^arn:[a-z-]*:acm:[a-z0-9-]*:\\d{12}:certificate/[0-9A-Za-z_/-]*$" + }, + "AppSyncDomainName": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "DomainName", + "CertificateArn" + ], + "primaryIdentifier": [ + "/properties/DomainName" + ], + "readOnlyProperties": [ + "/properties/AppSyncDomainName", + "/properties/HostedZoneId" + ], + "createOnlyProperties": [ + "/properties/DomainName", + "/properties/CertificateArn" + ], + "handlers": { + "create": { + "permissions": [ + "appsync:CreateDomainName", + "appsync:GetDomainName", + "acm:DescribeCertificate", + "cloudfront:UpdateDistribution" + ] + }, + "delete": { + "permissions": [ + "appsync:GetDomainName", + "appsync:DeleteDomainName" + ] + }, + "update": { + "permissions": [ + "appsync:UpdateDomainName" + ] + }, + "read": { + "permissions": [ + "appsync:GetDomainName" + ] + }, + "list": { + "permissions": [ + "appsync:ListDomainNames" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appsync/domainnameapiassociation.json b/internal/aws/cfn/schemas/aws/appsync/domainnameapiassociation.json new file mode 100644 index 00000000..72a366be --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/domainnameapiassociation.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::AppSync::DomainNameApiAssociation", + "description": "Resource Type definition for AWS::AppSync::DomainNameApiAssociation", + "additionalProperties": false, + "properties": { + "DomainName": { + "type": "string", + "minLength": 1, + "maxLength": 253, + "pattern": "^(\\*[a-z\\d-]*\\.)?([a-z\\d-]+\\.)+[a-z\\d-]+$" + }, + "ApiId": { + "type": "string" + }, + "ApiAssociationIdentifier": { + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "DomainName", + "ApiId" + ], + "primaryIdentifier": [ + "/properties/ApiAssociationIdentifier" + ], + "readOnlyProperties": [ + "/properties/ApiAssociationIdentifier" + ], + "createOnlyProperties": [ + "/properties/DomainName" + ], + "handlers": { + "create": { + "permissions": [ + "appsync:AssociateApi", + "appsync:GetApiAssociation" + ] + }, + "delete": { + "permissions": [ + "appsync:DisassociateApi", + "appsync:GetApiAssociation" + ] + }, + "update": { + "permissions": [ + "appsync:AssociateApi", + "appsync:GetApiAssociation" + ] + }, + "read": { + "permissions": [ + "appsync:GetApiAssociation" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appsync/functionconfiguration.json b/internal/aws/cfn/schemas/aws/appsync/functionconfiguration.json new file mode 100644 index 00000000..7d01ab48 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/functionconfiguration.json @@ -0,0 +1,190 @@ +{ + "typeName": "AWS::AppSync::FunctionConfiguration", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AppSyncRuntime": { + "description": "Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "description": "The name of the runtime to use. Currently, the only allowed value is APPSYNC_JS." + }, + "RuntimeVersion": { + "type": "string", + "description": "The version of the runtime to use. Currently, the only allowed version is 1.0.0." + } + }, + "required": [ + "Name", + "RuntimeVersion" + ] + }, + "SyncConfig": { + "description": "Describes a Sync configuration for a resolver. Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked.", + "type": "object", + "additionalProperties": false, + "properties": { + "ConflictDetection": { + "type": "string", + "description": "The Conflict Detection strategy to use." + }, + "ConflictHandler": { + "type": "string", + "description": "The Conflict Resolution strategy to perform in the event of a conflict." + }, + "LambdaConflictHandlerConfig": { + "$ref": "#/definitions/LambdaConflictHandlerConfig" + } + }, + "required": [ + "ConflictDetection" + ] + }, + "LambdaConflictHandlerConfig": { + "type": "object", + "description": "The LambdaConflictHandlerConfig when configuring LAMBDA as the Conflict Handler.", + "additionalProperties": false, + "properties": { + "LambdaConflictHandlerArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) for the Lambda function to use as the Conflict Handler." + } + } + } + }, + "properties": { + "FunctionId": { + "description": "The unique identifier for the function generated by the service", + "type": "string" + }, + "FunctionArn": { + "description": "The ARN for the function generated by the service", + "type": "string" + }, + "ApiId": { + "description": "The AWS AppSync GraphQL API that you want to attach using this function.", + "type": "string" + }, + "Code": { + "description": "The resolver code that contains the request and response functions. When code is used, the runtime is required. The runtime value must be APPSYNC_JS.", + "type": "string" + }, + "CodeS3Location": { + "description": "The Amazon S3 endpoint (where the code is located??).", + "type": "string" + }, + "DataSourceName": { + "description": "The name of data source this function will attach.", + "type": "string" + }, + "Description": { + "description": "The function description.", + "type": "string" + }, + "FunctionVersion": { + "description": "The version of the request mapping template. Currently, only the 2018-05-29 version of the template is supported.", + "type": "string" + }, + "MaxBatchSize": { + "description": "The maximum number of resolver request inputs that will be sent to a single AWS Lambda function in a BatchInvoke operation.", + "type": "integer" + }, + "Name": { + "description": "The name of the function.", + "type": "string" + }, + "RequestMappingTemplate": { + "description": "The Function request mapping template. Functions support only the 2018-05-29 version of the request mapping template.", + "type": "string" + }, + "RequestMappingTemplateS3Location": { + "description": "Describes a Sync configuration for a resolver. Contains information on which Conflict Detection, as well as Resolution strategy, should be performed when the resolver is invoked.", + "type": "string" + }, + "ResponseMappingTemplate": { + "description": "The Function response mapping template.", + "type": "string" + }, + "ResponseMappingTemplateS3Location": { + "description": "The location of a response mapping template in an Amazon S3 bucket. Use this if you want to provision with a template file in Amazon S3 rather than embedding it in your CloudFormation template.", + "type": "string" + }, + "Runtime": { + "description": "Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified.", + "$ref": "#/definitions/AppSyncRuntime" + }, + "SyncConfig": { + "description": "Describes a Sync configuration for a resolver. Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked.", + "$ref": "#/definitions/SyncConfig" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "ApiId", + "DataSourceName", + "Name" + ], + "readOnlyProperties": [ + "/properties/FunctionArn", + "/properties/FunctionId" + ], + "writeOnlyProperties": [ + "/properties/CodeS3Location", + "/properties/ResponseMappingTemplateS3Location", + "/properties/RequestMappingTemplateS3Location" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/FunctionArn" + ], + "handlers": { + "create": { + "permissions": [ + "s3:GetObject", + "appsync:CreateFunction" + ] + }, + "read": { + "permissions": [ + "appsync:GetFunction" + ] + }, + "update": { + "permissions": [ + "s3:GetObject", + "appsync:UpdateFunction" + ] + }, + "delete": { + "permissions": [ + "appsync:DeleteFunction" + ] + }, + "list": { + "permissions": [ + "appsync:ListFunctions" + ], + "handlerSchema": { + "properties": { + "ApiId": { + "$ref": "resource-schema.json#/properties/ApiId" + } + }, + "required": [ + "ApiId" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appsync/graphqlapi.json b/internal/aws/cfn/schemas/aws/appsync/graphqlapi.json new file mode 100644 index 00000000..16ac21ed --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/graphqlapi.json @@ -0,0 +1,250 @@ +{ + "typeName": "AWS::AppSync::GraphQLApi", + "description": "Resource Type definition for AWS::AppSync::GraphQLApi", + "additionalProperties": false, + "properties": { + "OpenIDConnectConfig": { + "$ref": "#/definitions/OpenIDConnectConfig" + }, + "MergedApiExecutionRoleArn": { + "type": "string" + }, + "EnhancedMetricsConfig": { + "$ref": "#/definitions/EnhancedMetricsConfig" + }, + "RealtimeDns": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "GraphQLUrl": { + "type": "string" + }, + "EnvironmentVariables": { + "type": "object" + }, + "GraphQLDns": { + "type": "string" + }, + "ApiType": { + "type": "string" + }, + "LambdaAuthorizerConfig": { + "$ref": "#/definitions/LambdaAuthorizerConfig" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "GraphQLEndpointArn": { + "type": "string" + }, + "AuthenticationType": { + "type": "string" + }, + "QueryDepthLimit": { + "type": "integer" + }, + "IntrospectionConfig": { + "type": "string" + }, + "OwnerContact": { + "type": "string" + }, + "ResolverCountLimit": { + "type": "integer" + }, + "AdditionalAuthenticationProviders": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AdditionalAuthenticationProvider" + } + }, + "RealtimeUrl": { + "type": "string" + }, + "XrayEnabled": { + "type": "boolean" + }, + "Visibility": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "UserPoolConfig": { + "$ref": "#/definitions/UserPoolConfig" + }, + "ApiId": { + "type": "string" + }, + "LogConfig": { + "$ref": "#/definitions/LogConfig" + } + }, + "definitions": { + "OpenIDConnectConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientId": { + "type": "string" + }, + "AuthTTL": { + "type": "number" + }, + "Issuer": { + "type": "string" + }, + "IatTTL": { + "type": "number" + } + } + }, + "EnhancedMetricsConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "OperationLevelMetricsConfig": { + "type": "string" + }, + "ResolverLevelMetricsBehavior": { + "type": "string" + }, + "DataSourceLevelMetricsBehavior": { + "type": "string" + } + }, + "required": [ + "OperationLevelMetricsConfig", + "ResolverLevelMetricsBehavior", + "DataSourceLevelMetricsBehavior" + ] + }, + "CognitoUserPoolConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AppIdClientRegex": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "AwsRegion": { + "type": "string" + } + } + }, + "LambdaAuthorizerConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "IdentityValidationExpression": { + "type": "string" + }, + "AuthorizerUri": { + "type": "string" + }, + "AuthorizerResultTtlInSeconds": { + "type": "number" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "UserPoolConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AppIdClientRegex": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "AwsRegion": { + "type": "string" + }, + "DefaultAction": { + "type": "string" + } + } + }, + "AdditionalAuthenticationProvider": { + "type": "object", + "additionalProperties": false, + "properties": { + "LambdaAuthorizerConfig": { + "$ref": "#/definitions/LambdaAuthorizerConfig" + }, + "OpenIDConnectConfig": { + "$ref": "#/definitions/OpenIDConnectConfig" + }, + "UserPoolConfig": { + "$ref": "#/definitions/CognitoUserPoolConfig" + }, + "AuthenticationType": { + "type": "string" + } + }, + "required": [ + "AuthenticationType" + ] + }, + "LogConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExcludeVerboseContent": { + "type": "boolean" + }, + "FieldLogLevel": { + "type": "string" + }, + "CloudWatchLogsRoleArn": { + "type": "string" + } + } + } + }, + "required": [ + "Name", + "AuthenticationType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/ApiId", + "/properties/GraphQLEndpointArn", + "/properties/Id", + "/properties/GraphQLDns", + "/properties/GraphQLUrl", + "/properties/RealtimeDns", + "/properties/RealtimeUrl", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appsync/graphqlschema.json b/internal/aws/cfn/schemas/aws/appsync/graphqlschema.json new file mode 100644 index 00000000..dc14fc54 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/graphqlschema.json @@ -0,0 +1,31 @@ +{ + "typeName": "AWS::AppSync::GraphQLSchema", + "description": "Resource Type definition for AWS::AppSync::GraphQLSchema", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Definition": { + "type": "string" + }, + "DefinitionS3Location": { + "type": "string" + }, + "ApiId": { + "type": "string" + } + }, + "required": [ + "ApiId" + ], + "createOnlyProperties": [ + "/properties/ApiId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/appsync/resolver.json b/internal/aws/cfn/schemas/aws/appsync/resolver.json new file mode 100644 index 00000000..983f1d95 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/resolver.json @@ -0,0 +1,245 @@ +{ + "typeName": "AWS::AppSync::Resolver", + "description": "The ``AWS::AppSync::Resolver`` resource defines the logical GraphQL resolver that you attach to fields in a schema. Request and response templates for resolvers are written in Apache Velocity Template Language (VTL) format. For more information about resolvers, see [Resolver Mapping Template Reference](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference.html).\n When you submit an update, CFNLong updates resources based on differences between what you submit and the stack's current template. To cause this resource to be updated you must change a property value for this resource in the CFNshort template. Changing the S3 file content without changing a property value will not result in an update operation.\n See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "definitions": { + "AppSyncRuntime": { + "type": "object", + "additionalProperties": false, + "properties": { + "RuntimeVersion": { + "type": "string", + "description": "The ``version`` of the runtime to use. Currently, the only allowed version is ``1.0.0``." + }, + "Name": { + "type": "string", + "description": "The ``name`` of the runtime to use. Currently, the only allowed value is ``APPSYNC_JS``." + } + }, + "required": [ + "RuntimeVersion", + "Name" + ], + "description": "Describes a runtime used by an APSYlong resolver or APSYlong function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified." + }, + "PipelineConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Functions": { + "type": "array", + "description": "A list of ``Function`` objects.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "description": "Use the ``PipelineConfig`` property type to specify ``PipelineConfig`` for an APSYlong resolver.\n ``PipelineConfig`` is a property of the [AWS::AppSync::Resolver](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html) resource." + }, + "CachingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "CachingKeys": { + "type": "array", + "description": "The caching keys for a resolver that has caching activated.\n Valid values are entries from the ``$context.arguments``, ``$context.source``, and ``$context.identity`` maps.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Ttl": { + "type": "number", + "description": "The TTL in seconds for a resolver that has caching activated.\n Valid values are 1?3,600 seconds." + } + }, + "required": [ + "Ttl" + ], + "description": "The caching configuration for a resolver that has caching activated." + }, + "SyncConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConflictHandler": { + "type": "string", + "description": "The Conflict Resolution strategy to perform in the event of a conflict.\n + *OPTIMISTIC_CONCURRENCY*: Resolve conflicts by rejecting mutations when versions don't match the latest version at the server.\n + *AUTOMERGE*: Resolve conflicts with the Automerge conflict resolution strategy.\n + *LAMBDA*: Resolve conflicts with an LAMlong function supplied in the ``LambdaConflictHandlerConfig``." + }, + "ConflictDetection": { + "type": "string", + "description": "The Conflict Detection strategy to use.\n + *VERSION*: Detect conflicts based on object versions for this resolver.\n + *NONE*: Do not detect conflicts when invoking this resolver." + }, + "LambdaConflictHandlerConfig": { + "$ref": "#/definitions/LambdaConflictHandlerConfig", + "description": "The ``LambdaConflictHandlerConfig`` when configuring ``LAMBDA`` as the Conflict Handler." + } + }, + "required": [ + "ConflictDetection" + ], + "description": "Describes a Sync configuration for a resolver.\n Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked." + }, + "LambdaConflictHandlerConfig": { + "type": "object", + "description": "The ``LambdaConflictHandlerConfig`` when configuring LAMBDA as the Conflict Handler.", + "additionalProperties": false, + "properties": { + "LambdaConflictHandlerArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) for the Lambda function to use as the Conflict Handler." + } + } + } + }, + "properties": { + "ApiId": { + "type": "string", + "description": "The APSYlong GraphQL API to which you want to attach this resolver." + }, + "CachingConfig": { + "$ref": "#/definitions/CachingConfig", + "description": "The caching configuration for the resolver." + }, + "Code": { + "type": "string", + "description": "The ``resolver`` code that contains the request and response functions. When code is used, the ``runtime`` is required. The runtime value must be ``APPSYNC_JS``." + }, + "CodeS3Location": { + "type": "string", + "description": "The Amazon S3 endpoint." + }, + "DataSourceName": { + "type": "string", + "description": "The resolver data source name." + }, + "FieldName": { + "type": "string", + "description": "The GraphQL field on a type that invokes the resolver." + }, + "Kind": { + "type": "string", + "description": "The resolver type.\n + *UNIT*: A UNIT resolver type. A UNIT resolver is the default resolver type. You can use a UNIT resolver to run a GraphQL query against a single data source.\n + *PIPELINE*: A PIPELINE resolver type. You can use a PIPELINE resolver to invoke a series of ``Function`` objects in a serial manner. You can use a pipeline resolver to run a GraphQL query against multiple data sources." + }, + "MaxBatchSize": { + "type": "integer", + "description": "The maximum number of resolver request inputs that will be sent to a single LAMlong function in a ``BatchInvoke`` operation." + }, + "PipelineConfig": { + "$ref": "#/definitions/PipelineConfig", + "description": "Functions linked with the pipeline resolver." + }, + "RequestMappingTemplate": { + "type": "string", + "description": "The request mapping template.\n Request mapping templates are optional when using a Lambda data source. For all other data sources, a request mapping template is required." + }, + "RequestMappingTemplateS3Location": { + "type": "string", + "description": "The location of a request mapping template in an S3 bucket. Use this if you want to provision with a template file in S3 rather than embedding it in your CFNshort template." + }, + "ResolverArn": { + "type": "string", + "description": "" + }, + "ResponseMappingTemplate": { + "type": "string", + "description": "The response mapping template." + }, + "ResponseMappingTemplateS3Location": { + "type": "string", + "description": "The location of a response mapping template in an S3 bucket. Use this if you want to provision with a template file in S3 rather than embedding it in your CFNshort template." + }, + "Runtime": { + "$ref": "#/definitions/AppSyncRuntime", + "description": "Describes a runtime used by an APSYlong resolver or APSYlong function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified." + }, + "SyncConfig": { + "$ref": "#/definitions/SyncConfig", + "description": "The ``SyncConfig`` for a resolver attached to a versioned data source." + }, + "TypeName": { + "type": "string", + "description": "The GraphQL type that invokes this resolver." + }, + "MetricsConfig": { + "type": "string", + "description": "", + "enum": [ + "ENABLED", + "DISABLED" + ] + } + }, + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "required": [ + "TypeName", + "ApiId", + "FieldName" + ], + "createOnlyProperties": [ + "/properties/ApiId", + "/properties/FieldName", + "/properties/TypeName" + ], + "primaryIdentifier": [ + "/properties/ResolverArn" + ], + "readOnlyProperties": [ + "/properties/ResolverArn" + ], + "writeOnlyProperties": [ + "/properties/RequestMappingTemplateS3Location", + "/properties/ResponseMappingTemplateS3Location", + "/properties/CodeS3Location" + ], + "handlers": { + "create": { + "permissions": [ + "s3:GetObject", + "appsync:CreateResolver", + "appsync:GetResolver" + ] + }, + "read": { + "permissions": [ + "appsync:GetResolver" + ] + }, + "update": { + "permissions": [ + "s3:GetObject", + "appsync:UpdateResolver" + ] + }, + "delete": { + "permissions": [ + "appsync:DeleteResolver" + ] + }, + "list": { + "permissions": [ + "appsync:ListResolvers" + ], + "handlerSchema": { + "properties": { + "ApiId": { + "$ref": "resource-schema.json#/properties/ApiId" + }, + "TypeName": { + "$ref": "resource-schema.json#/properties/TypeName" + } + }, + "required": [ + "ApiId", + "TypeName" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/appsync/sourceapiassociation.json b/internal/aws/cfn/schemas/aws/appsync/sourceapiassociation.json new file mode 100644 index 00000000..4cd18539 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/appsync/sourceapiassociation.json @@ -0,0 +1,171 @@ +{ + "typeName": "AWS::AppSync::SourceApiAssociation", + "description": "Resource Type definition for AWS::AppSync::SourceApiAssociation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "definitions": { + "SourceApiAssociationConfig": { + "properties": { + "MergeType": { + "description": "Configuration of the merged behavior for the association. For example when it could be auto or has to be manual.", + "type": "string", + "enum": [ + "AUTO_MERGE", + "MANUAL_MERGE" + ] + } + }, + "additionalProperties": false + } + }, + "properties": { + "SourceApiIdentifier": { + "description": "Identifier of the Source GraphQLApi to associate. It could be either GraphQLApi ApiId or ARN", + "type": "string" + }, + "MergedApiIdentifier": { + "description": "Identifier of the Merged GraphQLApi to associate. It could be either GraphQLApi ApiId or ARN", + "type": "string" + }, + "Description": { + "description": "Description of the SourceApiAssociation.", + "type": "string" + }, + "SourceApiAssociationConfig": { + "description": "Customized configuration for SourceApiAssociation.", + "$ref": "#/definitions/SourceApiAssociationConfig" + }, + "AssociationId": { + "description": "Id of the SourceApiAssociation.", + "type": "string" + }, + "AssociationArn": { + "description": "ARN of the SourceApiAssociation.", + "type": "string" + }, + "SourceApiId": { + "description": "GraphQLApiId of the source API in the association.", + "type": "string" + }, + "SourceApiArn": { + "description": "ARN of the source API in the association.", + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$" + }, + "MergedApiId": { + "description": "GraphQLApiId of the Merged API in the association.", + "type": "string" + }, + "MergedApiArn": { + "description": "ARN of the Merged API in the association.", + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$" + }, + "SourceApiAssociationStatus": { + "description": "Current status of SourceApiAssociation.", + "type": "string", + "enum": [ + "MERGE_SCHEDULED", + "MERGE_FAILED", + "MERGE_SUCCESS", + "MERGE_IN_PROGRESS", + "AUTO_MERGE_SCHEDULE_FAILED", + "DELETION_SCHEDULED", + "DELETION_IN_PROGRESS", + "DELETION_FAILED" + ] + }, + "SourceApiAssociationStatusDetail": { + "description": "Current SourceApiAssociation status details.", + "type": "string" + }, + "LastSuccessfulMergeDate": { + "description": "Date of last schema successful merge.", + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/AssociationId", + "/properties/AssociationArn", + "/properties/SourceApiId", + "/properties/SourceApiArn", + "/properties/MergedApiId", + "/properties/MergedApiArn", + "/properties/SourceApiAssociationStatus", + "/properties/SourceApiAssociationStatusDetail", + "/properties/LastSuccessfulMergeDate" + ], + "writeOnlyProperties": [ + "/properties/SourceApiIdentifier", + "/properties/MergedApiIdentifier" + ], + "createOnlyProperties": [ + "/properties/SourceApiIdentifier", + "/properties/MergedApiIdentifier" + ], + "primaryIdentifier": [ + "/properties/AssociationArn" + ], + "additionalIdentifiers": [ + [ + "/properties/SourceApiIdentifier", + "/properties/MergedApiIdentifier" + ] + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "appsync:AssociateSourceGraphqlApi", + "appsync:AssociateMergedGraphqlApi", + "appsync:GetSourceApiAssociation" + ] + }, + "read": { + "permissions": [ + "appsync:GetSourceApiAssociation", + "appsync:ListSourceApiAssociations" + ] + }, + "update": { + "permissions": [ + "appsync:GetSourceApiAssociation", + "appsync:UpdateSourceApiAssociation", + "appsync:GetSourceApiAssociation" + ] + }, + "delete": { + "permissions": [ + "appsync:GetSourceApiAssociation", + "appsync:DisassociateSourceGraphqlApi", + "appsync:DisassociateMergedGraphqlApi", + "appsync:ListSourceApiAssociations" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "SourceApiIdentifier": { + "$ref": "resource-schema.json#/properties/SourceApiIdentifier" + }, + "MergedApiIdentifier": { + "$ref": "resource-schema.json#/properties/MergedApiIdentifier" + } + }, + "required": [ + "SourceApiIdentifier", + "MergedApiIdentifier" + ] + }, + "permissions": [ + "appsync:ListSourceApiAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/aps/rulegroupsnamespace.json b/internal/aws/cfn/schemas/aws/aps/rulegroupsnamespace.json new file mode 100644 index 00000000..1504375b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/aps/rulegroupsnamespace.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::APS::RuleGroupsNamespace", + "description": "RuleGroupsNamespace schema for cloudformation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-aps", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Workspace": { + "description": "Required to identify a specific APS Workspace associated with this RuleGroupsNamespace.", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):aps:[a-z0-9-]+:[0-9]+:workspace/[a-zA-Z0-9-]+$" + }, + "Name": { + "description": "The RuleGroupsNamespace name.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Data": { + "description": "The RuleGroupsNamespace data.", + "type": "string" + }, + "Arn": { + "description": "The RuleGroupsNamespace ARN.", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):aps:[a-z0-9-]+:[0-9]+:rulegroupsnamespace/[a-zA-Z0-9-]+/[0-9A-Za-z][-.0-9A-Z_a-z]*$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Workspace", + "Data", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Workspace" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "aps:CreateRuleGroupsNamespace", + "aps:DescribeRuleGroupsNamespace", + "aps:TagResource" + ] + }, + "read": { + "permissions": [ + "aps:DescribeRuleGroupsNamespace", + "aps:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "aps:PutRuleGroupsNamespace", + "aps:DescribeRuleGroupsNamespace", + "aps:TagResource", + "aps:UntagResource", + "aps:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "aps:DeleteRuleGroupsNamespace", + "aps:DescribeRuleGroupsNamespace" + ] + }, + "list": { + "permissions": [ + "aps:ListRuleGroupsNamespaces", + "aps:ListTagsForResource" + ], + "handlerSchema": { + "properties": { + "Arn": { + "$ref": "resource-schema.json#/properties/Workspace" + } + }, + "required": [ + "Arn" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/aps/workspace.json b/internal/aws/cfn/schemas/aws/aps/workspace.json new file mode 100644 index 00000000..0c2673d6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/aps/workspace.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::APS::Workspace", + "description": "Resource Type definition for AWS::APS::Workspace", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "LoggingConfiguration": { + "description": "Logging configuration", + "type": "object", + "properties": { + "LogGroupArn": { + "description": "CloudWatch log group ARN", + "type": "string", + "minLength": 0, + "maxLength": 512 + } + }, + "additionalProperties": false + } + }, + "properties": { + "WorkspaceId": { + "description": "Required to identify a specific APS Workspace.", + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{1,99}$", + "minLength": 1, + "maxLength": 100 + }, + "Alias": { + "description": "AMP Workspace alias.", + "type": "string", + "minLength": 0, + "maxLength": 100 + }, + "Arn": { + "description": "Workspace arn.", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):aps:[a-z0-9-]+:[0-9]+:workspace/[a-zA-Z0-9-]+$", + "minLength": 1, + "maxLength": 128 + }, + "AlertManagerDefinition": { + "description": "The AMP Workspace alert manager definition data", + "type": "string" + }, + "PrometheusEndpoint": { + "description": "AMP Workspace prometheus endpoint", + "type": "string" + }, + "LoggingConfiguration": { + "$ref": "#/definitions/LoggingConfiguration" + }, + "KmsKeyArn": { + "description": "KMS Key ARN used to encrypt and decrypt AMP workspace data.", + "type": "string", + "pattern": "^arn:aws[-a-z]*:kms:[-a-z0-9]+:[0-9]{12}:key/.+$", + "minLength": 20, + "maxLength": 2048 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [], + "createOnlyProperties": [ + "/properties/KmsKeyArn" + ], + "readOnlyProperties": [ + "/properties/WorkspaceId", + "/properties/Arn", + "/properties/PrometheusEndpoint" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "aps:CreateWorkspace", + "aps:DescribeWorkspace", + "aps:TagResource", + "aps:CreateAlertManagerDefinition", + "aps:DescribeAlertManagerDefinition", + "aps:CreateLoggingConfiguration", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "kms:CreateGrant", + "kms:Decrypt", + "kms:GenerateDataKey" + ] + }, + "read": { + "permissions": [ + "aps:DescribeWorkspace", + "aps:ListTagsForResource", + "aps:DescribeAlertManagerDefinition", + "aps:DescribeLoggingConfiguration" + ] + }, + "update": { + "permissions": [ + "aps:UpdateWorkspaceAlias", + "aps:DescribeWorkspace", + "aps:TagResource", + "aps:UntagResource", + "aps:ListTagsForResource", + "aps:CreateAlertManagerDefinition", + "aps:PutAlertManagerDefinition", + "aps:DeleteAlertManagerDefinition", + "aps:CreateLoggingConfiguration", + "aps:DescribeLoggingConfiguration", + "aps:UpdateLoggingConfiguration", + "aps:DeleteLoggingConfiguration", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:ListLogDeliveries", + "logs:DeleteLogDelivery", + "logs:PutResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "aps:DeleteWorkspace", + "aps:DescribeWorkspace", + "aps:DeleteAlertManagerDefinition", + "aps:DeleteLoggingConfiguration", + "logs:DeleteLogDelivery" + ] + }, + "list": { + "permissions": [ + "aps:ListWorkspaces", + "aps:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/athena/capacityreservation.json b/internal/aws/cfn/schemas/aws/athena/capacityreservation.json new file mode 100644 index 00000000..4269c7aa --- /dev/null +++ b/internal/aws/cfn/schemas/aws/athena/capacityreservation.json @@ -0,0 +1,206 @@ +{ + "typeName": "AWS::Athena::CapacityReservation", + "description": "Resource schema for AWS::Athena::CapacityReservation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "definitions": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the specified capacity reservation", + "type": "string" + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "WorkgroupName": { + "pattern": "[a-zA-Z0-9._-]{1,128}", + "type": "string" + }, + "WorkgroupNames": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/WorkgroupName" + } + }, + "CapacityAssignment": { + "type": "object", + "properties": { + "WorkgroupNames": { + "$ref": "#/definitions/WorkgroupNames" + } + }, + "required": [ + "WorkgroupNames" + ], + "additionalProperties": false + }, + "CapacityAssignments": { + "description": "List of capacity assignments", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CapacityAssignment" + } + }, + "CapacityAssignmentConfiguration": { + "description": "Assignment configuration to assign workgroups to a reservation", + "type": "object", + "properties": { + "CapacityAssignments": { + "$ref": "#/definitions/CapacityAssignments" + } + }, + "required": [ + "CapacityAssignments" + ], + "additionalProperties": false + }, + "CapacityReservationStatus": { + "type": "string", + "enum": [ + "PENDING", + "ACTIVE", + "CANCELLING", + "CANCELLED", + "FAILED", + "UPDATE_PENDING" + ] + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Name": { + "description": "The reservation name.", + "pattern": "[a-zA-Z0-9._-]{1,128}", + "type": "string" + }, + "Status": { + "description": "The status of the reservation.", + "$ref": "#/definitions/CapacityReservationStatus" + }, + "TargetDpus": { + "description": "The number of DPUs to request to be allocated to the reservation.", + "type": "integer", + "format": "int64", + "minimum": 1 + }, + "AllocatedDpus": { + "description": "The number of DPUs Athena has provisioned and allocated for the reservation", + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "CapacityAssignmentConfiguration": { + "$ref": "#/definitions/CapacityAssignmentConfiguration" + }, + "CreationTime": { + "description": "The date and time the reservation was created.", + "type": "string" + }, + "LastSuccessfulAllocationTime": { + "description": "The timestamp when the last successful allocated was made", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "TargetDpus" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Status", + "/properties/AllocatedDpus", + "/properties/CreationTime", + "/properties/LastSuccessfulAllocationTime" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "athena:CreateCapacityReservation", + "athena:PutCapacityAssignmentConfiguration", + "athena:GetCapacityReservation", + "athena:TagResource" + ], + "timeoutInMinutes": 60 + }, + "read": { + "permissions": [ + "athena:GetCapacityReservation", + "athena:GetCapacityAssignmentConfiguration", + "athena:ListTagsForResource" + ], + "timeoutInMinutes": 60 + }, + "update": { + "permissions": [ + "athena:UpdateCapacityReservation", + "athena:PutCapacityAssignmentConfiguration", + "athena:GetCapacityReservation", + "athena:TagResource", + "athena:UntagResource" + ], + "timeoutInMinutes": 60 + }, + "delete": { + "permissions": [ + "athena:CancelCapacityReservation", + "athena:GetCapacityReservation", + "athena:DeleteCapacityReservation" + ], + "timeoutInMinutes": 60 + }, + "list": { + "permissions": [ + "athena:ListCapacityReservations", + "athena:GetCapacityReservation" + ], + "timeoutInMinutes": 60 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/athena/datacatalog.json b/internal/aws/cfn/schemas/aws/athena/datacatalog.json new file mode 100644 index 00000000..18609acc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/athena/datacatalog.json @@ -0,0 +1,117 @@ +{ + "typeName": "AWS::Athena::DataCatalog", + "description": "Resource schema for AWS::Athena::DataCatalog", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "definitions": { + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the data catalog to create. The catalog name must be unique for the AWS account and can use a maximum of 128 alphanumeric, underscore, at sign, or hyphen characters. ", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Description": { + "description": "A description of the data catalog to be created. ", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Parameters": { + "description": "Specifies the Lambda function or functions to use for creating the data catalog. This is a mapping whose values depend on the catalog type. ", + "type": "object", + "patternProperties": { + ".*": { + "type": "string", + "maxLength": 51200 + } + }, + "additionalProperties": false + }, + "Tags": { + "description": "A list of comma separated tags to add to the data catalog that is created. ", + "$ref": "#/definitions/Tags" + }, + "Type": { + "description": "The type of data catalog to create: LAMBDA for a federated catalog, GLUE for AWS Glue Catalog, or HIVE for an external hive metastore. ", + "type": "string", + "enum": [ + "LAMBDA", + "GLUE", + "HIVE" + ] + } + }, + "required": [ + "Name", + "Type" + ], + "handlers": { + "create": { + "permissions": [ + "athena:CreateDataCatalog", + "athena:TagResource" + ] + }, + "read": { + "permissions": [ + "athena:GetDataCatalog", + "athena:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "athena:UpdateDataCatalog", + "athena:TagResource", + "athena:GetDataCatalog", + "athena:UntagResource", + "athena:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "athena:DeleteDataCatalog" + ] + }, + "list": { + "permissions": [ + "athena:ListDataCatalog" + ] + } + }, + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "additionalProperties": false, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/athena/namedquery.json b/internal/aws/cfn/schemas/aws/athena/namedquery.json new file mode 100644 index 00000000..5323955a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/athena/namedquery.json @@ -0,0 +1,82 @@ +{ + "typeName": "AWS::Athena::NamedQuery", + "description": "Resource schema for AWS::Athena::NamedQuery", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "properties": { + "Name": { + "description": "The query name.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Database": { + "description": "The database to which the query belongs.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Description": { + "description": "The query description.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "QueryString": { + "description": "The contents of the query with all query statements.", + "type": "string", + "minLength": 1, + "maxLength": 262144 + }, + "WorkGroup": { + "description": "The name of the workgroup that contains the named query.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "NamedQueryId": { + "description": "The unique ID of the query.", + "type": "string" + } + }, + "required": [ + "Database", + "QueryString" + ], + "handlers": { + "create": { + "permissions": [ + "athena:CreateNamedQuery" + ] + }, + "read": { + "permissions": [ + "athena:GetNamedQuery" + ] + }, + "list": { + "permissions": [ + "athena:ListNamedQueries" + ] + }, + "delete": { + "permissions": [ + "athena:DeleteNamedQuery" + ] + } + }, + "readOnlyProperties": [ + "/properties/NamedQueryId" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Database", + "/properties/Description", + "/properties/QueryString", + "/properties/WorkGroup" + ], + "primaryIdentifier": [ + "/properties/NamedQueryId" + ], + "additionalProperties": false, + "taggable": false +} diff --git a/internal/aws/cfn/schemas/aws/athena/preparedstatement.json b/internal/aws/cfn/schemas/aws/athena/preparedstatement.json new file mode 100644 index 00000000..7c163a76 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/athena/preparedstatement.json @@ -0,0 +1,85 @@ +{ + "typeName": "AWS::Athena::PreparedStatement", + "description": "Resource schema for AWS::Athena::PreparedStatement", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "properties": { + "StatementName": { + "description": "The name of the prepared statement.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "WorkGroup": { + "description": "The name of the workgroup to which the prepared statement belongs.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Description": { + "description": "The description of the prepared statement.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "QueryStatement": { + "description": "The query string for the prepared statement.", + "type": "string", + "minLength": 1, + "maxLength": 262144 + } + }, + "required": [ + "StatementName", + "WorkGroup", + "QueryStatement" + ], + "handlers": { + "create": { + "permissions": [ + "athena:CreatePreparedStatement", + "athena:GetPreparedStatement" + ] + }, + "read": { + "permissions": [ + "athena:GetPreparedStatement" + ] + }, + "update": { + "permissions": [ + "athena:UpdatePreparedStatement" + ] + }, + "delete": { + "permissions": [ + "athena:DeletePreparedStatement", + "athena:GetPreparedStatement" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "WorkGroup": { + "$ref": "resource-schema.json#/properties/WorkGroup" + } + }, + "required": [ + "WorkGroup" + ] + }, + "permissions": [ + "athena:ListPreparedStatements" + ] + } + }, + "primaryIdentifier": [ + "/properties/StatementName", + "/properties/WorkGroup" + ], + "createOnlyProperties": [ + "/properties/StatementName", + "/properties/WorkGroup" + ], + "additionalProperties": false, + "taggable": false +} diff --git a/internal/aws/cfn/schemas/aws/athena/workgroup.json b/internal/aws/cfn/schemas/aws/athena/workgroup.json new file mode 100644 index 00000000..92192e9a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/athena/workgroup.json @@ -0,0 +1,412 @@ +{ + "$comment": "Resource Schema for AWS::Athena::WorkGroup. Any changes made to SDK model for WorkGroup should be reflected here.", + "typeName": "AWS::Athena::WorkGroup", + "description": "Resource schema for AWS::Athena::WorkGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "definitions": { + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "SelectedEngineVersion": { + "description": "The engine version requested by the user. Possible values are determined by the output of ListEngineVersions, including Auto. The default is Auto.", + "type": "string" + }, + "EffectiveEngineVersion": { + "description": "Read only. The engine version on which the query runs. If the user requests a valid engine version other than Auto, the effective engine version is the same as the engine version that the user requested. If the user requests Auto, the effective engine version is chosen by Athena. When a request to update the engine version is made by a CreateWorkGroup or UpdateWorkGroup operation, the EffectiveEngineVersion field is ignored.", + "type": "string" + }, + "EngineVersion": { + "description": "The Athena engine version for running queries.", + "type": "object", + "properties": { + "SelectedEngineVersion": { + "$ref": "#/definitions/SelectedEngineVersion" + }, + "EffectiveEngineVersion": { + "$ref": "#/definitions/EffectiveEngineVersion" + } + }, + "additionalProperties": false + }, + "BytesScannedCutoffPerQuery": { + "description": "The upper data usage limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan.", + "type": "integer", + "format": "int64", + "minimum": 10000000 + }, + "EnforceWorkGroupConfiguration": { + "description": "If set to \"true\", the settings for the workgroup override client-side settings. If set to \"false\", client-side settings are used", + "type": "boolean" + }, + "PublishCloudWatchMetricsEnabled": { + "description": "Indicates that the Amazon CloudWatch metrics are enabled for the workgroup.", + "type": "boolean" + }, + "RequesterPaysEnabled": { + "description": "If set to true, allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to false, workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. ", + "type": "boolean" + }, + "OutputLocation": { + "description": "The location in Amazon S3 where your query results are stored, such as s3://path/to/query/bucket/. To run the query, you must specify the query results location using one of the ways: either for individual queries using either this setting (client-side), or in the workgroup, using WorkGroupConfiguration", + "type": "string" + }, + "KmsKey": { + "description": "For SSE-KMS and CSE-KMS, this is the KMS key ARN or ID. ", + "type": "string" + }, + "EncryptionOption": { + "description": "Indicates whether Amazon S3 server-side encryption with Amazon S3-managed keys (SSE-S3), server-side encryption with KMS-managed keys (SSE-KMS), or client-side encryption with KMS-managed keys (CSE-KMS) is used.", + "type": "string", + "enum": [ + "SSE_S3", + "SSE_KMS", + "CSE_KMS" + ] + }, + "RemoveBytesScannedCutoffPerQuery": { + "description": "Indicates that the data usage control limit per query is removed.", + "type": "boolean" + }, + "EncryptionConfiguration": { + "description": "If query results are encrypted in Amazon S3, indicates the encryption option used (for example, SSE-KMS or CSE-KMS) and key information.", + "type": "object", + "properties": { + "EncryptionOption": { + "$ref": "#/definitions/EncryptionOption" + }, + "KmsKey": { + "$ref": "#/definitions/KmsKey" + } + }, + "required": [ + "EncryptionOption" + ], + "additionalProperties": false + }, + "RemoveEncryptionConfiguration": { + "type": "boolean" + }, + "AdditionalConfiguration": { + "description": "Additional Configuration that are passed to Athena Spark Calculations running in this workgroup", + "type": "string" + }, + "ExecutionRole": { + "description": "Execution Role ARN required to run Athena Spark Calculations", + "type": "string" + }, + "RemoveOutputLocation": { + "type": "boolean" + }, + "ExpectedBucketOwner": { + "description": "The AWS account ID of the owner of S3 bucket where query results are stored", + "type": "string" + }, + "RemoveExpectedBucketOwner": { + "type": "boolean" + }, + "S3AclOption": { + "description": "The Amazon S3 canned ACL that Athena should specify when storing query results. Currently the only supported canned ACL is BUCKET_OWNER_FULL_CONTROL", + "type": "string", + "enum": [ + "BUCKET_OWNER_FULL_CONTROL" + ] + }, + "AclConfiguration": { + "description": "Indicates that an Amazon S3 canned ACL should be set to control ownership of stored query results", + "type": "object", + "properties": { + "S3AclOption": { + "$ref": "#/definitions/S3AclOption" + } + }, + "required": [ + "S3AclOption" + ], + "additionalProperties": false + }, + "RemoveAclConfiguration": { + "type": "boolean" + }, + "CustomerContentEncryptionConfiguration": { + "description": "Indicates the KMS key for encrypting notebook content.", + "type": "object", + "properties": { + "KmsKey": { + "$ref": "#/definitions/KmsKey" + } + }, + "required": [ + "KmsKey" + ], + "additionalProperties": false + }, + "RemoveCustomerContentEncryptionConfiguration": { + "type": "boolean" + }, + "ResultConfiguration": { + "description": "The location in Amazon S3 where query results are stored and the encryption option, if any, used for query results. These are known as \"client-side settings\". If workgroup settings override client-side settings, then the query uses the workgroup settings.\n", + "type": "object", + "properties": { + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration" + }, + "OutputLocation": { + "$ref": "#/definitions/OutputLocation" + }, + "ExpectedBucketOwner": { + "$ref": "#/definitions/ExpectedBucketOwner" + }, + "AclConfiguration": { + "$ref": "#/definitions/AclConfiguration" + } + }, + "additionalProperties": false + }, + "ResultConfigurationUpdates": { + "description": "The result configuration information about the queries in this workgroup that will be updated. Includes the updated results location and an updated option for encrypting query results. ", + "type": "object", + "properties": { + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration" + }, + "OutputLocation": { + "$ref": "#/definitions/OutputLocation" + }, + "ExpectedBucketOwner": { + "$ref": "#/definitions/ExpectedBucketOwner" + }, + "AclConfiguration": { + "$ref": "#/definitions/AclConfiguration" + }, + "RemoveEncryptionConfiguration": { + "$ref": "#/definitions/RemoveEncryptionConfiguration" + }, + "RemoveOutputLocation": { + "$ref": "#/definitions/RemoveOutputLocation" + }, + "RemoveExpectedBucketOwner": { + "$ref": "#/definitions/RemoveExpectedBucketOwner" + }, + "RemoveAclConfiguration": { + "$ref": "#/definitions/RemoveAclConfiguration" + } + }, + "additionalProperties": false + }, + "WorkGroupConfiguration": { + "type": "object", + "properties": { + "BytesScannedCutoffPerQuery": { + "$ref": "#/definitions/BytesScannedCutoffPerQuery" + }, + "EnforceWorkGroupConfiguration": { + "$ref": "#/definitions/EnforceWorkGroupConfiguration" + }, + "PublishCloudWatchMetricsEnabled": { + "$ref": "#/definitions/PublishCloudWatchMetricsEnabled" + }, + "RequesterPaysEnabled": { + "$ref": "#/definitions/RequesterPaysEnabled" + }, + "ResultConfiguration": { + "$ref": "#/definitions/ResultConfiguration" + }, + "EngineVersion": { + "$ref": "#/definitions/EngineVersion" + }, + "AdditionalConfiguration": { + "$ref": "#/definitions/AdditionalConfiguration" + }, + "ExecutionRole": { + "$ref": "#/definitions/ExecutionRole" + }, + "CustomerContentEncryptionConfiguration": { + "$ref": "#/definitions/CustomerContentEncryptionConfiguration" + } + }, + "additionalProperties": false + }, + "WorkGroupConfigurationUpdates": { + "type": "object", + "description": "The configuration information that will be updated for this workgroup, which includes the location in Amazon S3 where query results are stored, the encryption option, if any, used for query results, whether the Amazon CloudWatch Metrics are enabled for the workgroup, whether the workgroup settings override the client-side settings, and the data usage limit for the amount of bytes scanned per query, if it is specified. ", + "properties": { + "BytesScannedCutoffPerQuery": { + "$ref": "#/definitions/BytesScannedCutoffPerQuery" + }, + "EnforceWorkGroupConfiguration": { + "$ref": "#/definitions/EnforceWorkGroupConfiguration" + }, + "PublishCloudWatchMetricsEnabled": { + "$ref": "#/definitions/PublishCloudWatchMetricsEnabled" + }, + "RequesterPaysEnabled": { + "$ref": "#/definitions/RequesterPaysEnabled" + }, + "ResultConfigurationUpdates": { + "$ref": "#/definitions/ResultConfigurationUpdates" + }, + "RemoveBytesScannedCutoffPerQuery": { + "$ref": "#/definitions/RemoveBytesScannedCutoffPerQuery" + }, + "EngineVersion": { + "$ref": "#/definitions/EngineVersion" + }, + "AdditionalConfiguration": { + "$ref": "#/definitions/AdditionalConfiguration" + }, + "ExecutionRole": { + "$ref": "#/definitions/ExecutionRole" + }, + "CustomerContentEncryptionConfiguration": { + "$ref": "#/definitions/CustomerContentEncryptionConfiguration" + }, + "RemoveCustomerContentEncryptionConfiguration": { + "$ref": "#/definitions/RemoveCustomerContentEncryptionConfiguration" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The workGroup name.", + "pattern": "[a-zA-Z0-9._-]{1,128}", + "type": "string" + }, + "Description": { + "description": "The workgroup description.", + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "Tags": { + "description": "One or more tags, separated by commas, that you want to attach to the workgroup as you create it", + "$ref": "#/definitions/Tags" + }, + "WorkGroupConfiguration": { + "description": "The workgroup configuration", + "$ref": "#/definitions/WorkGroupConfiguration" + }, + "WorkGroupConfigurationUpdates": { + "description": "The workgroup configuration update object", + "$ref": "#/definitions/WorkGroupConfigurationUpdates" + }, + "CreationTime": { + "description": "The date and time the workgroup was created.", + "type": "string" + }, + "State": { + "description": "The state of the workgroup: ENABLED or DISABLED.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "RecursiveDeleteOption": { + "description": "The option to delete the workgroup and its contents even if the workgroup contains any named queries.", + "type": "boolean" + } + }, + "required": [ + "Name" + ], + "handlers": { + "create": { + "permissions": [ + "athena:CreateWorkGroup", + "athena:TagResource", + "iam:PassRole", + "s3:GetBucketLocation", + "s3:GetObject", + "s3:ListBucket", + "s3:ListBucketMultipartUploads", + "s3:AbortMultipartUpload", + "s3:PutObject", + "s3:ListMultipartUploadParts", + "kms:Decrypt", + "kms:GenerateDataKey" + ] + }, + "read": { + "permissions": [ + "athena:GetWorkGroup", + "athena:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "athena:ListWorkGroups" + ] + }, + "delete": { + "permissions": [ + "athena:DeleteWorkGroup", + "athena:GetWorkGroup", + "athena:UntagResource" + ] + }, + "update": { + "permissions": [ + "athena:UpdateWorkGroup", + "athena:TagResource", + "athena:UntagResource", + "iam:PassRole", + "s3:GetBucketLocation", + "s3:GetObject", + "s3:ListBucket", + "s3:ListBucketMultipartUploads", + "s3:AbortMultipartUpload", + "s3:PutObject", + "s3:ListMultipartUploadParts", + "kms:Decrypt", + "kms:GenerateDataKey" + ] + } + }, + "readOnlyProperties": [ + "/properties/CreationTime", + "/properties/WorkGroupConfiguration/EngineVersion/EffectiveEngineVersion", + "/properties/WorkGroupConfigurationUpdates/EngineVersion/EffectiveEngineVersion" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "deprecatedProperties": [ + "/properties/WorkGroupConfigurationUpdates" + ], + "writeOnlyProperties": [ + "/properties/WorkGroupConfigurationUpdates", + "/properties/RecursiveDeleteOption", + "/properties/WorkGroupConfiguration/AdditionalConfiguration" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "additionalProperties": false, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/auditmanager/assessment.json b/internal/aws/cfn/schemas/aws/auditmanager/assessment.json new file mode 100644 index 00000000..a199ff15 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/auditmanager/assessment.json @@ -0,0 +1,371 @@ +{ + "typeName": "AWS::AuditManager::Assessment", + "description": "An entity that defines the scope of audit evidence collected by AWS Audit Manager.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "FrameworkId": { + "description": "The identifier for the specified framework.", + "type": "string", + "maxLength": 36, + "minLength": 32, + "pattern": "^([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|.*\\S.*)$" + }, + "UUID": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + }, + "AccountId": { + "description": "The identifier for the specified AWS account.", + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "EmailAddress": { + "description": "The unique identifier for the email account.", + "type": "string", + "maxLength": 320, + "minLength": 1, + "pattern": "^.*@.*$" + }, + "AccountName": { + "description": "The name of the specified AWS account.", + "type": "string", + "maxLength": 50, + "minLength": 1, + "pattern": "^[\\u0020-\\u007E]+$" + }, + "AWSAccount": { + "description": "The AWS account associated with the assessment.", + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "$ref": "#/definitions/AccountId" + }, + "EmailAddress": { + "$ref": "#/definitions/EmailAddress" + }, + "Name": { + "$ref": "#/definitions/AccountName" + } + } + }, + "AssessmentArn": { + "description": "The Amazon Resource Name (ARN) of the assessment.", + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:.*:auditmanager:.*" + }, + "Timestamp": { + "description": "The sequence of characters that identifies when the event occurred.", + "type": "number" + }, + "ControlSetId": { + "description": "The identifier for the specified control set.", + "type": "string", + "maxLength": 300, + "minLength": 1, + "pattern": "^[\\w\\W\\s\\S]*$" + }, + "CreatedBy": { + "description": "The IAM user or role that performed the action.", + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:.*:*:.*" + }, + "IamArn": { + "description": "The Amazon Resource Name (ARN) of the IAM user or role.", + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:.*:iam:.*" + }, + "AssessmentName": { + "description": "The name of the related assessment.", + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-_\\.]+$" + }, + "DelegationComment": { + "description": "The comment related to the delegation.", + "type": "string", + "maxLength": 350, + "pattern": "^[\\w\\W\\s\\S]*$" + }, + "RoleType": { + "description": " The IAM role type.", + "type": "string", + "enum": [ + "PROCESS_OWNER", + "RESOURCE_OWNER" + ] + }, + "DelegationStatus": { + "description": "The status of the delegation.", + "type": "string", + "enum": [ + "IN_PROGRESS", + "UNDER_REVIEW", + "COMPLETE" + ] + }, + "Delegation": { + "description": "The assignment of a control set to a delegate for review.", + "type": "object", + "additionalProperties": false, + "properties": { + "LastUpdated": { + "$ref": "#/definitions/Timestamp" + }, + "ControlSetId": { + "$ref": "#/definitions/ControlSetId" + }, + "CreationTime": { + "$ref": "#/definitions/Timestamp" + }, + "CreatedBy": { + "$ref": "#/definitions/CreatedBy" + }, + "RoleArn": { + "$ref": "#/definitions/IamArn" + }, + "AssessmentName": { + "$ref": "#/definitions/AssessmentName" + }, + "Comment": { + "$ref": "#/definitions/DelegationComment" + }, + "Id": { + "$ref": "#/definitions/UUID" + }, + "RoleType": { + "$ref": "#/definitions/RoleType" + }, + "AssessmentId": { + "$ref": "#/definitions/UUID" + }, + "Status": { + "$ref": "#/definitions/DelegationStatus" + } + } + }, + "Role": { + "description": "The wrapper that contains AWS Audit Manager role information, such as the role type and IAM ARN.", + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "$ref": "#/definitions/IamArn" + }, + "RoleType": { + "$ref": "#/definitions/RoleType" + } + } + }, + "AWSServiceName": { + "description": "The name of the AWS service.", + "type": "string" + }, + "AWSService": { + "description": "An AWS service such as Amazon S3, AWS CloudTrail, and so on.", + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceName": { + "$ref": "#/definitions/AWSServiceName" + } + } + }, + "Scope": { + "description": "The wrapper that contains the AWS accounts and AWS services in scope for the assessment.", + "type": "object", + "additionalProperties": false, + "properties": { + "AwsAccounts": { + "description": "The AWS accounts included in scope.", + "type": "array", + "items": { + "$ref": "#/definitions/AWSAccount" + } + }, + "AwsServices": { + "description": "The AWS services included in scope.", + "type": "array", + "items": { + "$ref": "#/definitions/AWSService" + } + } + } + }, + "S3Url": { + "description": "The URL of the specified Amazon S3 bucket.", + "type": "string" + }, + "AssessmentReportDestinationType": { + "description": "The destination type, such as Amazon S3.", + "type": "string", + "enum": [ + "S3" + ] + }, + "AssessmentReportsDestination": { + "description": "The destination in which evidence reports are stored for the specified assessment.", + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/S3Url" + }, + "DestinationType": { + "$ref": "#/definitions/AssessmentReportDestinationType" + } + } + }, + "AssessmentStatus": { + "description": "The status of the specified assessment. ", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "AssessmentDescription": { + "description": "The description of the specified assessment.", + "type": "string" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "FrameworkId": { + "$ref": "#/definitions/FrameworkId" + }, + "AssessmentId": { + "$ref": "#/definitions/UUID" + }, + "AwsAccount": { + "$ref": "#/definitions/AWSAccount" + }, + "Arn": { + "$ref": "#/definitions/AssessmentArn" + }, + "Tags": { + "description": "The tags associated with the assessment.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Delegations": { + "description": "The list of delegations.", + "type": "array", + "items": { + "$ref": "#/definitions/Delegation" + } + }, + "Roles": { + "description": "The list of roles for the specified assessment.", + "type": "array", + "items": { + "$ref": "#/definitions/Role" + } + }, + "Scope": { + "$ref": "#/definitions/Scope" + }, + "AssessmentReportsDestination": { + "$ref": "#/definitions/AssessmentReportsDestination" + }, + "Status": { + "$ref": "#/definitions/AssessmentStatus" + }, + "CreationTime": { + "$ref": "#/definitions/Timestamp" + }, + "Name": { + "$ref": "#/definitions/AssessmentName" + }, + "Description": { + "$ref": "#/definitions/AssessmentDescription" + } + }, + "required": [], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/AssessmentId", + "/properties/Arn", + "/properties/CreationTime" + ], + "createOnlyProperties": [ + "/properties/FrameworkId", + "/properties/AwsAccount" + ], + "writeOnlyProperties": [ + "/properties/Name", + "/properties/Description" + ], + "primaryIdentifier": [ + "/properties/AssessmentId" + ], + "handlers": { + "create": { + "permissions": [ + "auditmanager:CreateAssessment", + "auditmanager:TagResource", + "auditmanager:ListTagsForResource", + "auditmanager:BatchCreateDelegationByAssessment", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "auditmanager:GetAssessment" + ] + }, + "update": { + "permissions": [ + "auditmanager:UpdateAssessment", + "auditmanager:UpdateAssessmentStatus", + "auditmanager:BatchCreateDelegationByAssessment", + "auditmanager:BatchDeleteDelegationByAssessment" + ] + }, + "delete": { + "permissions": [ + "auditmanager:DeleteAssessment" + ] + }, + "list": { + "permissions": [ + "auditmanager:ListAssessments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/autoscaling/autoscalinggroup.json b/internal/aws/cfn/schemas/aws/autoscaling/autoscalinggroup.json new file mode 100644 index 00000000..176412f3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/autoscaling/autoscalinggroup.json @@ -0,0 +1,825 @@ +{ + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": true + }, + "deprecatedProperties": [ + "/properties/NotificationConfiguration" + ], + "typeName": "AWS::AutoScaling::AutoScalingGroup", + "description": "The ``AWS::AutoScaling::AutoScalingGroup`` resource defines an Amazon EC2 Auto Scaling group, which is a collection of Amazon EC2 instances that are treated as a logical grouping for the purposes of automatic scaling and management. \n For more information about Amazon EC2 Auto Scaling, see the [Amazon EC2 Auto Scaling User Guide](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html). \n Amazon EC2 Auto Scaling configures instances launched as part of an Auto Scaling group using either a [launch template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) or a launch configuration. We strongly recommend that you do not use launch configurations. They do not provide full functionality for Amazon EC2 Auto Scaling or Amazon EC2. For more information, see [Launch configurations](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-configurations.html) and [Migrate CloudFormation stacks from launch configurations to launch templates](https://docs.aws.amazon.com/autoscaling/ec2/userguide/migrate-launch-configurations-with-cloudformation.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "createOnlyProperties": [ + "/properties/InstanceId", + "/properties/AutoScalingGroupName" + ], + "primaryIdentifier": [ + "/properties/AutoScalingGroupName" + ], + "required": [ + "MinSize", + "MaxSize" + ], + "conditionalCreateOnlyProperties": [ + "/properties/LaunchConfigurationName", + "/properties/VPCZoneIdentifier", + "/properties/PlacementGroup", + "/properties/LaunchTemplate", + "/properties/MixedInstancesPolicy" + ], + "propertyTransform": { + "/properties/LaunchConfigurationName": "InstanceId? AutoScalingGroupName : LaunchConfigurationName" + }, + "handlers": { + "read": { + "permissions": [ + "autoscaling:Describe*", + "managed-fleets:Get*" + ] + }, + "create": { + "permissions": [ + "autoscaling:CreateAutoScalingGroup", + "autoscaling:UpdateAutoScalingGroup", + "autoscaling:CreateOrUpdateTags", + "autoscaling:Describe*", + "autoscaling:EnableMetricsCollection", + "autoscaling:PutNotificationConfiguration", + "cloudwatch:PutMetricAlarm", + "ec2:Describe*", + "ec2:Get*", + "ec2:RunInstances", + "elasticloadbalancing:Describe*", + "iam:CreateServiceLinkedRole", + "iam:PassRole", + "managed-fleets:Get*", + "managed-fleets:CreateAutoScalingGroup", + "managed-fleets:UpdateAutoScalingGroup", + "ssm:Get*" + ], + "timeoutInMinutes": 360 + }, + "update": { + "permissions": [ + "autoscaling:UpdateAutoScalingGroup", + "autoscaling:CreateOrUpdateTags", + "autoscaling:DeleteTags", + "autoscaling:Describe*", + "autoscaling:EnableMetricsCollection", + "autoscaling:DisableMetricsCollection", + "autoscaling:PutNotificationConfiguration", + "autoscaling:DeleteNotificationConfiguration", + "autoscaling:DetachLoadBalancerTargetGroups", + "autoscaling:AttachLoadBalancerTargetGroups", + "autoscaling:AttachLoadBalancers", + "autoscaling:DetachLoadBalancers", + "autoscaling:AttachTrafficSources", + "autoscaling:DetachTrafficSources", + "autoscaling:DeleteLifecycleHook", + "autoscaling:PutLifecycleHook", + "cloudwatch:PutMetricAlarm", + "ec2:Describe*", + "ec2:Get*", + "ec2:RunInstances", + "elasticloadbalancing:Describe*", + "iam:CreateServiceLinkedRole", + "iam:PassRole", + "managed-fleets:Get*", + "managed-fleets:RegisterAutoScalingGroup", + "managed-fleets:DeregisterAutoScalingGroup", + "managed-fleets:UpdateAutoScalingGroup", + "ssm:Get*" + ], + "timeoutInMinutes": 660 + }, + "list": { + "permissions": [ + "autoscaling:Describe*" + ] + }, + "delete": { + "permissions": [ + "autoscaling:DeleteAutoScalingGroup", + "autoscaling:UpdateAutoScalingGroup", + "autoscaling:Describe*", + "managed-fleets:Get*", + "managed-fleets:DeleteAutoScalingGroup" + ], + "timeoutInMinutes": 180 + } + }, + "writeOnlyProperties": [ + "/properties/InstanceId" + ], + "additionalProperties": false, + "definitions": { + "TagProperty": { + "description": "A structure that specifies a tag for the ``Tags`` property of [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource.\n For more information, see [Tag Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-tagging.html) in the *Amazon EC2 Auto Scaling User Guide*. You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html#aws-resource-autoscaling-autoscalinggroup--examples) section of the ``AWS::AutoScaling::AutoScalingGroup`` resource.\n CloudFormation adds the following tags to all Auto Scaling groups and associated instances: \n + aws:cloudformation:stack-name\n + aws:cloudformation:stack-id\n + aws:cloudformation:logical-id", + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "description": "The tag value.", + "type": "string" + }, + "Key": { + "description": "The tag key.", + "type": "string" + }, + "PropagateAtLaunch": { + "description": "Set to ``true`` if you want CloudFormation to copy the tag to EC2 instances that are launched as part of the Auto Scaling group. Set to ``false`` if you want the tag attached only to the Auto Scaling group and not copied to any instances launched as part of the Auto Scaling group.", + "type": "boolean" + } + }, + "required": [ + "Value", + "Key", + "PropagateAtLaunch" + ] + }, + "LaunchTemplateSpecification": { + "description": "Specifies a launch template to use when provisioning EC2 instances for an Auto Scaling group.\n You must specify the following:\n + The ID or the name of the launch template, but not both.\n + The version of the launch template.\n \n ``LaunchTemplateSpecification`` is property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. It is also a property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) and [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property types.\n For information about creating a launch template, see [AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) and [Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) in the *Amazon EC2 Auto Scaling User Guide*.\n For examples of launch templates, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html) and the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#aws-resource-ec2-launchtemplate--examples) section in the ``AWS::EC2::LaunchTemplate`` resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "LaunchTemplateName": { + "description": "The name of the launch template.\n You must specify the ``LaunchTemplateName`` or the ``LaunchTemplateID``, but not both.", + "type": "string" + }, + "Version": { + "description": "The version number of the launch template.\n Specifying ``$Latest`` or ``$Default`` for the template version number is not supported. However, you can specify ``LatestVersionNumber`` or ``DefaultVersionNumber`` using the ``Fn::GetAtt`` intrinsic function. For more information, see [Fn::GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html).\n For an example of using the ``Fn::GetAtt`` function, see the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html#aws-resource-autoscaling-autoscalinggroup--examples) section of the ``AWS::AutoScaling::AutoScalingGroup`` resource.", + "type": "string" + }, + "LaunchTemplateId": { + "description": "The ID of the launch template.\n You must specify the ``LaunchTemplateID`` or the ``LaunchTemplateName``, but not both.", + "type": "string" + } + }, + "required": [ + "Version" + ] + }, + "InstancesDistribution": { + "description": "Use this structure to specify the distribution of On-Demand Instances and Spot Instances and the allocation strategies used to fulfill On-Demand and Spot capacities for a mixed instances policy.\n For more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide*.\n ``InstancesDistribution`` is a property of the [AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html) property type.", + "additionalProperties": false, + "type": "object", + "properties": { + "OnDemandAllocationStrategy": { + "description": "The allocation strategy to apply to your On-Demand Instances when they are launched. Possible instance types are determined by the launch template overrides that you specify.\n The following lists the valid values:\n + lowest-price Uses price to determine which instance types are the highest priority, launching the lowest priced instance types within an Availability Zone first. This is the default value for Auto Scaling groups that specify InstanceRequirements. + prioritized You set the order of instance types for the launch template overrides from highest to lowest priority (from first to last in the list). Amazon EC2 Auto Scaling launches your highest priority instance types first. If all your On-Demand capacity cannot be fulfilled using your highest priority instance type, then Amazon EC2 Auto Scaling launches the remaining capacity using the second priority instance type, and so on. This is the default value for Auto Scaling groups that don't specify InstanceRequirements and cannot be used for groups that do.", + "type": "string" + }, + "OnDemandBaseCapacity": { + "description": "The minimum amount of the Auto Scaling group's capacity that must be fulfilled by On-Demand Instances. This base portion is launched first as your group scales.\n This number has the same unit of measurement as the group's desired capacity. If you change the default unit of measurement (number of instances) by specifying weighted capacity values in your launch template overrides list, or by changing the default desired capacity type setting of the group, you must specify this number using the same unit of measurement.\n Default: 0\n An update to this setting means a gradual replacement of instances to adjust the current On-Demand Instance levels. When replacing instances, Amazon EC2 Auto Scaling launches new instances before terminating the previous ones.", + "type": "integer" + }, + "OnDemandPercentageAboveBaseCapacity": { + "description": "Controls the percentages of On-Demand Instances and Spot Instances for your additional capacity beyond ``OnDemandBaseCapacity``. Expressed as a number (for example, 20 specifies 20% On-Demand Instances, 80% Spot Instances). If set to 100, only On-Demand Instances are used.\n Default: 100\n An update to this setting means a gradual replacement of instances to adjust the current On-Demand and Spot Instance levels for your additional capacity higher than the base capacity. When replacing instances, Amazon EC2 Auto Scaling launches new instances before terminating the previous ones.", + "type": "integer" + }, + "SpotInstancePools": { + "description": "The number of Spot Instance pools across which to allocate your Spot Instances. The Spot pools are determined from the different instance types in the overrides. Valid only when the ``SpotAllocationStrategy`` is ``lowest-price``. Value must be in the range of 1–20.\n Default: 2", + "type": "integer" + }, + "SpotAllocationStrategy": { + "description": "The allocation strategy to apply to your Spot Instances when they are launched. Possible instance types are determined by the launch template overrides that you specify.\n The following lists the valid values:\n + capacity-optimized Requests Spot Instances using pools that are optimally chosen based on the available Spot capacity. This strategy has the lowest risk of interruption. To give certain instance types a higher chance of launching first, use capacity-optimized-prioritized. + capacity-optimized-prioritized You set the order of instance types for the launch template overrides from highest to lowest priority (from first to last in the list). Amazon EC2 Auto Scaling honors the instance type priorities on a best effort basis but optimizes for capacity first. Note that if the On-Demand allocation strategy is set to prioritized, the same priority is applied when fulfilling On-Demand capacity. This is not a valid value for Auto Scaling groups that specify InstanceRequirements. + lowest-price Requests Spot Instances using the lowest priced pools within an Availability Zone, across the number of Spot pools that you specify for the SpotInstancePools property. To ensure that your desired capacity is met, you might receive Spot Instances from several pools. This is the default value, but it might lead to high interruption rates because this strategy only considers instance price and not available capacity. + price-capacity-optimized (recommended) The price and capacity optimized allocation strategy looks at both price and capacity to select the Spot Instance pools that are the least likely to be interrupted and have the lowest possible price.", + "type": "string" + }, + "SpotMaxPrice": { + "description": "The maximum price per unit hour that you are willing to pay for a Spot Instance. If your maximum price is lower than the Spot price for the instance types that you selected, your Spot Instances are not launched. We do not recommend specifying a maximum price because it can lead to increased interruptions. When Spot Instances launch, you pay the current Spot price. To remove a maximum price that you previously set, include the property but specify an empty string (\"\") for the value.\n If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify one.\n Valid Range: Minimum value of 0.001", + "type": "string" + } + } + }, + "AcceleratorCountRequest": { + "description": "``AcceleratorCountRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of accelerators for an instance type.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum value.", + "type": "integer" + }, + "Max": { + "description": "The maximum value.", + "type": "integer" + } + } + }, + "LifecycleHookSpecification": { + "description": "``LifecycleHookSpecification`` specifies a lifecycle hook for the ``LifecycleHookSpecificationList`` property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. A lifecycle hook specifies actions to perform when Amazon EC2 Auto Scaling launches or terminates instances. \n For more information, see [Amazon EC2 Auto Scaling lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) in the *Amazon EC2 Auto Scaling User Guide*. You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#aws-resource-as-lifecyclehook--examples) section of the ``AWS::AutoScaling::LifecycleHook`` resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "LifecycleHookName": { + "description": "The name of the lifecycle hook.", + "type": "string" + }, + "LifecycleTransition": { + "description": "The lifecycle transition. For Auto Scaling groups, there are two major lifecycle transitions.\n + To create a lifecycle hook for scale-out events, specify ``autoscaling:EC2_INSTANCE_LAUNCHING``.\n + To create a lifecycle hook for scale-in events, specify ``autoscaling:EC2_INSTANCE_TERMINATING``.", + "type": "string" + }, + "HeartbeatTimeout": { + "description": "The maximum time, in seconds, that can elapse before the lifecycle hook times out. The range is from ``30`` to ``7200`` seconds. The default value is ``3600`` seconds (1 hour).", + "type": "integer" + }, + "NotificationMetadata": { + "description": "Additional information that you want to include any time Amazon EC2 Auto Scaling sends a message to the notification target.", + "type": "string" + }, + "DefaultResult": { + "description": "The action the Auto Scaling group takes when the lifecycle hook timeout elapses or if an unexpected failure occurs. The default value is ``ABANDON``.\n Valid values: ``CONTINUE`` | ``ABANDON``", + "type": "string" + }, + "NotificationTargetARN": { + "description": "The Amazon Resource Name (ARN) of the notification target that Amazon EC2 Auto Scaling sends notifications to when an instance is in a wait state for the lifecycle hook. You can specify an Amazon SNS topic or an Amazon SQS queue.", + "type": "string" + }, + "RoleARN": { + "description": "The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target. For information about creating this role, see [Configure a notification target for a lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/prepare-for-lifecycle-notifications.html#lifecycle-hook-notification-target) in the *Amazon EC2 Auto Scaling User Guide*.\n Valid only if the notification target is an Amazon SNS topic or an Amazon SQS queue.", + "type": "string" + } + }, + "required": [ + "LifecycleHookName", + "LifecycleTransition" + ] + }, + "MemoryGiBPerVCpuRequest": { + "description": "``MemoryGiBPerVCpuRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum amount of memory per vCPU for an instance type, in GiB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The memory minimum in GiB.", + "type": "number" + }, + "Max": { + "description": "The memory maximum in GiB.", + "type": "number" + } + } + }, + "NotificationConfiguration": { + "description": "A structure that specifies an Amazon SNS notification configuration for the ``NotificationConfigurations`` property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource.\n For an example template snippet, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html).\n For more information, see [Get Amazon SNS notifications when your Auto Scaling group scales](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ASGettingNotifications.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "TopicARN": { + "description": "The Amazon Resource Name (ARN) of the Amazon SNS topic.", + "type": [ + "string", + "array" + ], + "items": { + "type": "string" + } + }, + "NotificationTypes": { + "uniqueItems": false, + "description": "A list of event types that send a notification. Event types can include any of the following types. \n *Allowed values*:\n + ``autoscaling:EC2_INSTANCE_LAUNCH`` \n + ``autoscaling:EC2_INSTANCE_LAUNCH_ERROR`` \n + ``autoscaling:EC2_INSTANCE_TERMINATE`` \n + ``autoscaling:EC2_INSTANCE_TERMINATE_ERROR`` \n + ``autoscaling:TEST_NOTIFICATION``", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "TopicARN" + ] + }, + "MetricsCollection": { + "description": "``MetricsCollection`` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource that describes the group metrics that an Amazon EC2 Auto Scaling group sends to Amazon CloudWatch. These metrics describe the group rather than any of its instances. \n For more information, see [Monitor CloudWatch metrics for your Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-monitoring.html) in the *Amazon EC2 Auto Scaling User Guide*. You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html#aws-resource-autoscaling-autoscalinggroup--examples) section of the ``AWS::AutoScaling::AutoScalingGroup`` resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "Metrics": { + "uniqueItems": false, + "description": "Identifies the metrics to enable.\n You can specify one or more of the following metrics:\n + ``GroupMinSize`` \n + ``GroupMaxSize`` \n + ``GroupDesiredCapacity`` \n + ``GroupInServiceInstances`` \n + ``GroupPendingInstances`` \n + ``GroupStandbyInstances`` \n + ``GroupTerminatingInstances`` \n + ``GroupTotalInstances`` \n + ``GroupInServiceCapacity`` \n + ``GroupPendingCapacity`` \n + ``GroupStandbyCapacity`` \n + ``GroupTerminatingCapacity`` \n + ``GroupTotalCapacity`` \n + ``WarmPoolDesiredCapacity`` \n + ``WarmPoolWarmedCapacity`` \n + ``WarmPoolPendingCapacity`` \n + ``WarmPoolTerminatingCapacity`` \n + ``WarmPoolTotalCapacity`` \n + ``GroupAndWarmPoolDesiredCapacity`` \n + ``GroupAndWarmPoolTotalCapacity`` \n \n If you specify ``Granularity`` and don't specify any metrics, all metrics are enabled.\n For more information, see [Auto Scaling group metrics](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-cloudwatch-monitoring.html#as-group-metrics) in the *Amazon EC2 Auto Scaling User Guide*.", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "Granularity": { + "description": "The frequency at which Amazon EC2 Auto Scaling sends aggregated data to CloudWatch. The only valid value is ``1Minute``.", + "type": "string" + } + }, + "required": [ + "Granularity" + ] + }, + "TotalLocalStorageGBRequest": { + "description": "``TotalLocalStorageGBRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum total local storage size for an instance type, in GB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The storage minimum in GB.", + "type": "number" + }, + "Max": { + "description": "The storage maximum in GB.", + "type": "number" + } + } + }, + "MemoryMiBRequest": { + "description": "``MemoryMiBRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum instance memory size for an instance type, in MiB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The memory minimum in MiB.", + "type": "integer" + }, + "Max": { + "description": "The memory maximum in MiB.", + "type": "integer" + } + } + }, + "InstanceMaintenancePolicy": { + "description": "``InstanceMaintenancePolicy`` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource.\n For more information, see [Instance maintenance policies](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "MaxHealthyPercentage": { + "description": "Specifies the upper threshold as a percentage of the desired capacity of the Auto Scaling group. It represents the maximum percentage of the group that can be in service and healthy, or pending, to support your workload when replacing instances. Value range is 100 to 200. To clear a previously set value, specify a value of ``-1``.\n Both ``MinHealthyPercentage`` and ``MaxHealthyPercentage`` must be specified, and the difference between them cannot be greater than 100. A large range increases the number of instances that can be replaced at the same time.", + "type": "integer" + }, + "MinHealthyPercentage": { + "description": "Specifies the lower threshold as a percentage of the desired capacity of the Auto Scaling group. It represents the minimum percentage of the group to keep in service, healthy, and ready to use to support your workload when replacing instances. Value range is 0 to 100. To clear a previously set value, specify a value of ``-1``.", + "type": "integer" + } + }, + "dependencies": { + "MaxHealthyPercentage": [ + "MinHealthyPercentage" + ], + "MinHealthyPercentage": [ + "MaxHealthyPercentage" + ] + } + }, + "NetworkBandwidthGbpsRequest": { + "description": "``NetworkBandwidthGbpsRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum network bandwidth for an instance type, in Gbps.\n Setting the minimum bandwidth does not guarantee that your instance will achieve the minimum bandwidth. Amazon EC2 will identify instance types that support the specified minimum bandwidth, but the actual bandwidth of your instance might go below the specified minimum at times. For more information, see [Available instance bandwidth](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth) in the *Amazon EC2 User Guide for Linux Instances*.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum amount of network bandwidth, in gigabits per second (Gbps).", + "type": "number" + }, + "Max": { + "description": "The maximum amount of network bandwidth, in gigabits per second (Gbps).", + "type": "number" + } + } + }, + "BaselineEbsBandwidthMbpsRequest": { + "description": "``BaselineEbsBandwidthMbpsRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum baseline bandwidth performance for an instance type, in Mbps.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum value in Mbps.", + "type": "integer" + }, + "Max": { + "description": "The maximum value in Mbps.", + "type": "integer" + } + } + }, + "NetworkInterfaceCountRequest": { + "description": "``NetworkInterfaceCountRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of network interfaces for an instance type.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum number of network interfaces.", + "type": "integer" + }, + "Max": { + "description": "The maximum number of network interfaces.", + "type": "integer" + } + } + }, + "VCpuCountRequest": { + "description": "``VCpuCountRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of vCPUs for an instance type.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum number of vCPUs.", + "type": "integer" + }, + "Max": { + "description": "The maximum number of vCPUs.", + "type": "integer" + } + } + }, + "LaunchTemplate": { + "description": "Use this structure to specify the launch templates and instance types (overrides) for a mixed instances policy.\n ``LaunchTemplate`` is a property of the [AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html) property type.", + "additionalProperties": false, + "type": "object", + "properties": { + "LaunchTemplateSpecification": { + "description": "The launch template.", + "$ref": "#/definitions/LaunchTemplateSpecification" + }, + "Overrides": { + "uniqueItems": false, + "description": "Any properties that you specify override the same properties in the launch template.", + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/LaunchTemplateOverrides" + } + } + }, + "required": [ + "LaunchTemplateSpecification" + ] + }, + "LaunchTemplateOverrides": { + "description": "Use this structure to let Amazon EC2 Auto Scaling do the following when the Auto Scaling group has a mixed instances policy:\n + Override the instance type that is specified in the launch template.\n + Use multiple instance types.\n \n Specify the instance types that you want, or define your instance requirements instead and let Amazon EC2 Auto Scaling provision the available instance types that meet your requirements. This can provide Amazon EC2 Auto Scaling with a larger selection of instance types to choose from when fulfilling Spot and On-Demand capacities. You can view which instance types are matched before you apply the instance requirements to your Auto Scaling group.\n After you define your instance requirements, you don't have to keep updating these settings to get new EC2 instance types automatically. Amazon EC2 Auto Scaling uses the instance requirements of the Auto Scaling group to determine whether a new EC2 instance type can be used.\n ``LaunchTemplateOverrides`` is a property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) property type.", + "additionalProperties": false, + "type": "object", + "properties": { + "LaunchTemplateSpecification": { + "description": "Provides a launch template for the specified instance type or set of instance requirements. For example, some instance types might require a launch template with a different AMI. If not provided, Amazon EC2 Auto Scaling uses the launch template that's specified in the ``LaunchTemplate`` definition. For more information, see [Specifying a different launch template for an instance type](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups-launch-template-overrides.html) in the *Amazon EC2 Auto Scaling User Guide*. \n You can specify up to 20 launch templates per Auto Scaling group. The launch templates specified in the overrides and in the ``LaunchTemplate`` definition count towards this limit.", + "$ref": "#/definitions/LaunchTemplateSpecification" + }, + "WeightedCapacity": { + "description": "If you provide a list of instance types to use, you can specify the number of capacity units provided by each instance type in terms of virtual CPUs, memory, storage, throughput, or other relative performance characteristic. When a Spot or On-Demand Instance is launched, the capacity units count toward the desired capacity. Amazon EC2 Auto Scaling launches instances until the desired capacity is totally fulfilled, even if this results in an overage. For example, if there are two units remaining to fulfill capacity, and Amazon EC2 Auto Scaling can only launch an instance with a ``WeightedCapacity`` of five units, the instance is launched, and the desired capacity is exceeded by three units. For more information, see [Configure instance weighting for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups-instance-weighting.html) in the *Amazon EC2 Auto Scaling User Guide*. Value must be in the range of 1-999. \n If you specify a value for ``WeightedCapacity`` for one instance type, you must specify a value for ``WeightedCapacity`` for all of them.\n Every Auto Scaling group has three size parameters (``DesiredCapacity``, ``MaxSize``, and ``MinSize``). Usually, you set these sizes based on a specific number of instances. However, if you configure a mixed instances policy that defines weights for the instance types, you must specify these sizes with the same units that you use for weighting instances.", + "type": "string" + }, + "InstanceRequirements": { + "description": "The instance requirements. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types. Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types.\n You can specify up to four separate sets of instance requirements per Auto Scaling group. This is useful for provisioning instances from different Amazon Machine Images (AMIs) in the same Auto Scaling group. To do this, create the AMIs and create a new launch template for each AMI. Then, create a compatible set of instance requirements for each launch template. \n If you specify ``InstanceRequirements``, you can't specify ``InstanceType``.", + "$ref": "#/definitions/InstanceRequirements" + }, + "InstanceType": { + "description": "The instance type, such as ``m3.xlarge``. You must specify an instance type that is supported in your requested Region and Availability Zones. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the *Amazon Elastic Compute Cloud User Guide*.\n You can specify up to 40 instance types per Auto Scaling group.", + "type": "string" + } + } + }, + "AcceleratorTotalMemoryMiBRequest": { + "description": "``AcceleratorTotalMemoryMiBRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum total memory size for the accelerators for an instance type, in MiB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The memory minimum in MiB.", + "type": "integer" + }, + "Max": { + "description": "The memory maximum in MiB.", + "type": "integer" + } + } + }, + "MixedInstancesPolicy": { + "description": "Use this structure to launch multiple instance types and On-Demand Instances and Spot Instances within a single Auto Scaling group.\n A mixed instances policy contains information that Amazon EC2 Auto Scaling can use to launch instances and help optimize your costs. For more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide*.\n You can create a mixed instances policy for new and existing Auto Scaling groups. You must use a launch template to configure the policy. You cannot use a launch configuration.\n There are key differences between Spot Instances and On-Demand Instances:\n + The price for Spot Instances varies based on demand\n + Amazon EC2 can terminate an individual Spot Instance as the availability of, or price for, Spot Instances changes\n \n When a Spot Instance is terminated, Amazon EC2 Auto Scaling group attempts to launch a replacement instance to maintain the desired capacity for the group. \n ``MixedInstancesPolicy`` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "InstancesDistribution": { + "description": "The instances distribution.", + "$ref": "#/definitions/InstancesDistribution" + }, + "LaunchTemplate": { + "description": "One or more launch templates and the instance types (overrides) that are used to launch EC2 instances to fulfill On-Demand and Spot capacities.", + "$ref": "#/definitions/LaunchTemplate" + } + }, + "required": [ + "LaunchTemplate" + ] + }, + "InstanceRequirements": { + "description": "The attributes for the instance types for a mixed instances policy. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types. Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types.\n When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.\n To limit the list of instance types from which Amazon EC2 Auto Scaling can identify matching instance types, you can use one of the following parameters, but not both in the same request:\n + ``AllowedInstanceTypes`` - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.\n + ``ExcludedInstanceTypes`` - The instance types to exclude from the list, even if they match your specified attributes.\n \n You must specify ``VCpuCount`` and ``MemoryMiB``. All other attributes are optional. Any unspecified optional attribute is set to its default.\n For an example template, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html).\n For more information, see [Creating an Auto Scaling group using attribute-based instance type selection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html) in the *Amazon EC2 Auto Scaling User Guide*. For help determining which instance types match your attributes before you apply them to your Auto Scaling group, see [Preview instance types with specified attributes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements) in the *Amazon EC2 User Guide for Linux Instances*.\n ``InstanceRequirements`` is a property of the ``LaunchTemplateOverrides`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) property type.", + "additionalProperties": false, + "type": "object", + "properties": { + "LocalStorageTypes": { + "uniqueItems": true, + "description": "Indicates the type of local storage that is required.\n + For instance types with hard disk drive (HDD) storage, specify ``hdd``.\n + For instance types with solid state drive (SSD) storage, specify ``ssd``.\n \n Default: Any local storage type", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "InstanceGenerations": { + "uniqueItems": true, + "description": "Indicates whether current or previous generation instance types are included.\n + For current generation instance types, specify ``current``. The current generation includes EC2 instance types currently recommended for use. This typically includes the latest two to three generations in each instance family. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the *Amazon EC2 User Guide for Linux Instances*.\n + For previous generation instance types, specify ``previous``.\n \n Default: Any current or previous generation", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "NetworkInterfaceCount": { + "description": "The minimum and maximum number of network interfaces for an instance type.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/NetworkInterfaceCountRequest" + }, + "AcceleratorTypes": { + "uniqueItems": true, + "description": "Lists the accelerator types that must be on an instance type.\n + For instance types with GPU accelerators, specify ``gpu``.\n + For instance types with FPGA accelerators, specify ``fpga``.\n + For instance types with inference accelerators, specify ``inference``.\n \n Default: Any accelerator type", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "MemoryGiBPerVCpu": { + "description": "The minimum and maximum amount of memory per vCPU for an instance type, in GiB.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/MemoryGiBPerVCpuRequest" + }, + "AcceleratorManufacturers": { + "uniqueItems": true, + "description": "Indicates whether instance types must have accelerators by specific manufacturers.\n + For instance types with NVIDIA devices, specify ``nvidia``.\n + For instance types with AMD devices, specify ``amd``.\n + For instance types with AWS devices, specify ``amazon-web-services``.\n + For instance types with Xilinx devices, specify ``xilinx``.\n \n Default: Any manufacturer", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "ExcludedInstanceTypes": { + "uniqueItems": true, + "description": "The instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (``*``), to exclude an instance family, type, size, or generation. The following are examples: ``m5.8xlarge``, ``c5*.*``, ``m5a.*``, ``r*``, ``*3*``. \n For example, if you specify ``c5*``, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify ``m5a.*``, Amazon EC2 Auto Scaling will exclude all the M5a instance types, but not the M5n instance types.\n If you specify ``ExcludedInstanceTypes``, you can't specify ``AllowedInstanceTypes``.\n Default: No excluded instance types", + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "VCpuCount": { + "description": "The minimum and maximum number of vCPUs for an instance type.", + "$ref": "#/definitions/VCpuCountRequest" + }, + "AllowedInstanceTypes": { + "uniqueItems": true, + "description": "The instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes.\n You can use strings with one or more wild cards, represented by an asterisk (``*``), to allow an instance type, size, or generation. The following are examples: ``m5.8xlarge``, ``c5*.*``, ``m5a.*``, ``r*``, ``*3*``.\n For example, if you specify ``c5*``, Amazon EC2 Auto Scaling will allow the entire C5 instance family, which includes all C5a and C5n instance types. If you specify ``m5a.*``, Amazon EC2 Auto Scaling will allow all the M5a instance types, but not the M5n instance types.\n If you specify ``AllowedInstanceTypes``, you can't specify ``ExcludedInstanceTypes``.\n Default: All instance types", + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "LocalStorage": { + "description": "Indicates whether instance types with instance store volumes are included, excluded, or required. For more information, see [Amazon EC2 instance store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) in the *Amazon EC2 User Guide for Linux Instances*.\n Default: ``included``", + "type": "string" + }, + "CpuManufacturers": { + "uniqueItems": true, + "description": "Lists which specific CPU manufacturers to include.\n + For instance types with Intel CPUs, specify ``intel``.\n + For instance types with AMD CPUs, specify ``amd``.\n + For instance types with AWS CPUs, specify ``amazon-web-services``.\n \n Don't confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template. \n Default: Any manufacturer", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "AcceleratorCount": { + "description": "The minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips) for an instance type.\n To exclude accelerator-enabled instance types, set ``Max`` to ``0``.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/AcceleratorCountRequest" + }, + "NetworkBandwidthGbps": { + "description": "The minimum and maximum amount of network bandwidth, in gigabits per second (Gbps).\n Default: No minimum or maximum limits", + "$ref": "#/definitions/NetworkBandwidthGbpsRequest" + }, + "BareMetal": { + "description": "Indicates whether bare metal instance types are included, excluded, or required.\n Default: ``excluded``", + "type": "string" + }, + "RequireHibernateSupport": { + "description": "Indicates whether instance types must provide On-Demand Instance hibernation support.\n Default: ``false``", + "type": "boolean" + }, + "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice": { + "description": "[Price protection] The price protection threshold for Spot Instances, as a percentage of an identified On-Demand price. The identified On-Demand price is the price of the lowest priced current generation C, M, or R instance type with your specified attributes. If no current generation C, M, or R instance type matches your attributes, then the identified price is from either the lowest priced current generation instance types or, failing that, the lowest priced previous generation instance types that match your attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price exceeds your specified threshold.\n The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage.\n To indicate no price protection threshold, specify a high value, such as ``999999``. \n If you set ``DesiredCapacityType`` to ``vcpu`` or ``memory-mib``, the price protection threshold is based on the per-vCPU or per-memory price instead of the per instance price. \n Only one of ``SpotMaxPricePercentageOverLowestPrice`` or ``MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`` can be specified. If you don't specify either, then ``SpotMaxPricePercentageOverLowestPrice`` is used and the value for that parameter defaults to ``100``.", + "type": "integer" + }, + "BaselineEbsBandwidthMbps": { + "description": "The minimum and maximum baseline bandwidth performance for an instance type, in Mbps. For more information, see [Amazon EBS–optimized instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) in the *Amazon EC2 User Guide for Linux Instances*.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/BaselineEbsBandwidthMbpsRequest" + }, + "SpotMaxPricePercentageOverLowestPrice": { + "description": "[Price protection] The price protection threshold for Spot Instances, as a percentage higher than an identified Spot price. The identified Spot price is the price of the lowest priced current generation C, M, or R instance type with your specified attributes. If no current generation C, M, or R instance type matches your attributes, then the identified price is from either the lowest priced current generation instance types or, failing that, the lowest priced previous generation instance types that match your attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price exceeds your specified threshold.\n The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage.\n To turn off price protection, specify a high value, such as ``999999``. \n If you set ``DesiredCapacityType`` to ``vcpu`` or ``memory-mib``, the price protection threshold is based on the per-vCPU or per-memory price instead of the per instance price. \n Only one of ``SpotMaxPricePercentageOverLowestPrice`` or ``MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`` can be specified.\n Default: ``100``", + "type": "integer" + }, + "AcceleratorNames": { + "uniqueItems": true, + "description": "Lists the accelerators that must be on an instance type.\n + For instance types with NVIDIA A100 GPUs, specify ``a100``.\n + For instance types with NVIDIA V100 GPUs, specify ``v100``.\n + For instance types with NVIDIA K80 GPUs, specify ``k80``.\n + For instance types with NVIDIA T4 GPUs, specify ``t4``.\n + For instance types with NVIDIA M60 GPUs, specify ``m60``.\n + For instance types with AMD Radeon Pro V520 GPUs, specify ``radeon-pro-v520``.\n + For instance types with Xilinx VU9P FPGAs, specify ``vu9p``.\n \n Default: Any accelerator", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "AcceleratorTotalMemoryMiB": { + "description": "The minimum and maximum total memory size for the accelerators on an instance type, in MiB.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/AcceleratorTotalMemoryMiBRequest" + }, + "OnDemandMaxPricePercentageOverLowestPrice": { + "description": "[Price protection] The price protection threshold for On-Demand Instances, as a percentage higher than an identified On-Demand price. The identified On-Demand price is the price of the lowest priced current generation C, M, or R instance type with your specified attributes. If no current generation C, M, or R instance type matches your attributes, then the identified price is from either the lowest priced current generation instance types or, failing that, the lowest priced previous generation instance types that match your attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price exceeds your specified threshold. \n The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage.\n To turn off price protection, specify a high value, such as ``999999``. \n If you set ``DesiredCapacityType`` to ``vcpu`` or ``memory-mib``, the price protection threshold is applied based on the per-vCPU or per-memory price instead of the per instance price. \n Default: ``20``", + "type": "integer" + }, + "BurstablePerformance": { + "description": "Indicates whether burstable performance instance types are included, excluded, or required. For more information, see [Burstable performance instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) in the *Amazon EC2 User Guide for Linux Instances*.\n Default: ``excluded``", + "type": "string" + }, + "MemoryMiB": { + "description": "The minimum and maximum instance memory size for an instance type, in MiB.", + "$ref": "#/definitions/MemoryMiBRequest" + }, + "TotalLocalStorageGB": { + "description": "The minimum and maximum total local storage size for an instance type, in GB.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/TotalLocalStorageGBRequest" + } + }, + "required": [ + "MemoryMiB", + "VCpuCount" + ] + } + }, + "properties": { + "LifecycleHookSpecificationList": { + "uniqueItems": false, + "description": "One or more lifecycle hooks to add to the Auto Scaling group before instances are launched.", + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/LifecycleHookSpecification" + } + }, + "LoadBalancerNames": { + "uniqueItems": false, + "description": "A list of Classic Load Balancers associated with this Auto Scaling group. For Application Load Balancers, Network Load Balancers, and Gateway Load Balancers, specify the ``TargetGroupARNs`` property instead.", + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "LaunchConfigurationName": { + "description": "The name of the launch configuration to use to launch instances.\n Required only if you don't specify ``LaunchTemplate``, ``MixedInstancesPolicy``, or ``InstanceId``.", + "type": "string" + }, + "ServiceLinkedRoleARN": { + "description": "The Amazon Resource Name (ARN) of the service-linked role that the Auto Scaling group uses to call other AWS service on your behalf. By default, Amazon EC2 Auto Scaling uses a service-linked role named ``AWSServiceRoleForAutoScaling``, which it creates if it does not exist. For more information, see [Service-linked roles](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "type": "string" + }, + "TargetGroupARNs": { + "uniqueItems": false, + "description": "The Amazon Resource Names (ARN) of the Elastic Load Balancing target groups to associate with the Auto Scaling group. Instances are registered as targets with the target groups. The target groups receive incoming traffic and route requests to one or more registered targets. For more information, see [Use Elastic Load Balancing to distribute traffic across the instances in your Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "Cooldown": { + "description": "*Only needed if you use simple scaling policies.* \n The amount of time, in seconds, between one scaling activity ending and another one starting due to simple scaling policies. For more information, see [Scaling cooldowns for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html) in the *Amazon EC2 Auto Scaling User Guide*.\n Default: ``300`` seconds", + "type": "string" + }, + "NotificationConfigurations": { + "uniqueItems": false, + "description": "Configures an Auto Scaling group to send notifications when specified events take place.", + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/NotificationConfiguration" + } + }, + "DesiredCapacity": { + "pattern": "^[0-9]+$", + "description": "The desired capacity is the initial capacity of the Auto Scaling group at the time of its creation and the capacity it attempts to maintain. It can scale beyond this capacity if you configure automatic scaling.\n The number must be greater than or equal to the minimum size of the group and less than or equal to the maximum size of the group. If you do not specify a desired capacity when creating the stack, the default is the minimum size of the group.\n CloudFormation marks the Auto Scaling group as successful (by setting its status to CREATE_COMPLETE) when the desired capacity is reached. However, if a maximum Spot price is set in the launch template or launch configuration that you specified, then desired capacity is not used as a criteria for success. Whether your request is fulfilled depends on Spot Instance capacity and your maximum price.", + "type": "string" + }, + "HealthCheckGracePeriod": { + "description": "The amount of time, in seconds, that Amazon EC2 Auto Scaling waits before checking the health status of an EC2 instance that has come into service and marking it unhealthy due to a failed health check. This is useful if your instances do not immediately pass their health checks after they enter the ``InService`` state. For more information, see [Set the health check grace period for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/health-check-grace-period.html) in the *Amazon EC2 Auto Scaling User Guide*.\n Default: ``0`` seconds", + "type": "integer" + }, + "DefaultInstanceWarmup": { + "description": "The amount of time, in seconds, until a new instance is considered to have finished initializing and resource consumption to become stable after it enters the ``InService`` state. \n During an instance refresh, Amazon EC2 Auto Scaling waits for the warm-up period after it replaces an instance before it moves on to replacing the next instance. Amazon EC2 Auto Scaling also waits for the warm-up period before aggregating the metrics for new instances with existing instances in the Amazon CloudWatch metrics that are used for scaling, resulting in more reliable usage data. For more information, see [Set the default instance warmup for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-default-instance-warmup.html) in the *Amazon EC2 Auto Scaling User Guide*.\n To manage various warm-up settings at the group level, we recommend that you set the default instance warmup, *even if it is set to 0 seconds*. To remove a value that you previously set, include the property but specify ``-1`` for the value. However, we strongly recommend keeping the default instance warmup enabled by specifying a value of ``0`` or other nominal value.\n Default: None", + "type": "integer" + }, + "NewInstancesProtectedFromScaleIn": { + "description": "Indicates whether newly launched instances are protected from termination by Amazon EC2 Auto Scaling when scaling in. For more information about preventing instances from terminating on scale in, see [Using instance scale-in protection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "type": "boolean" + }, + "LaunchTemplate": { + "description": "Information used to specify the launch template and version to use to launch instances. You can alternatively associate a launch template to the Auto Scaling group by specifying a ``MixedInstancesPolicy``. For more information about creating launch templates, see [Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) in the *Amazon EC2 Auto Scaling User Guide*.\n If you omit this property, you must specify ``MixedInstancesPolicy``, ``LaunchConfigurationName``, or ``InstanceId``.", + "$ref": "#/definitions/LaunchTemplateSpecification" + }, + "MixedInstancesPolicy": { + "description": "An embedded object that specifies a mixed instances policy.\n The policy includes properties that not only define the distribution of On-Demand Instances and Spot Instances, the maximum price to pay for Spot Instances (optional), and how the Auto Scaling group allocates instance types to fulfill On-Demand and Spot capacities, but also the properties that specify the instance configuration information—the launch template and instance types. The policy can also include a weight for each instance type and different launch templates for individual instance types.\n For more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "$ref": "#/definitions/MixedInstancesPolicy" + }, + "VPCZoneIdentifier": { + "uniqueItems": false, + "description": "A list of subnet IDs for a virtual private cloud (VPC) where instances in the Auto Scaling group can be created.\n If this resource specifies public subnets and is also in a VPC that is defined in the same stack template, you must use the [DependsOn attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) to declare a dependency on the [VPC-gateway attachment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html).\n When you update ``VPCZoneIdentifier``, this retains the same Auto Scaling group and replaces old instances with new ones, according to the specified subnets. You can optionally specify how CloudFormation handles these updates by using an [UpdatePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html).\n Required to launch instances into a nondefault VPC. If you specify ``VPCZoneIdentifier`` with ``AvailabilityZones``, the subnets that you specify for this property must reside in those Availability Zones.", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "Tags": { + "description": "One or more tags. You can tag your Auto Scaling group and propagate the tags to the Amazon EC2 instances it launches. Tags are not propagated to Amazon EBS volumes. To add tags to Amazon EBS volumes, specify the tags in a launch template but use caution. If the launch template specifies an instance tag with a key that is also specified for the Auto Scaling group, Amazon EC2 Auto Scaling overrides the value of that instance tag with the value specified by the Auto Scaling group. For more information, see [Tag Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-tagging.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/TagProperty" + } + }, + "Context": { + "description": "Reserved.", + "type": "string" + }, + "CapacityRebalance": { + "description": "Indicates whether Capacity Rebalancing is enabled. Otherwise, Capacity Rebalancing is disabled. When you turn on Capacity Rebalancing, Amazon EC2 Auto Scaling attempts to launch a Spot Instance whenever Amazon EC2 notifies that a Spot Instance is at an elevated risk of interruption. After launching a new instance, it then terminates an old instance. For more information, see [Use Capacity Rebalancing to handle Amazon EC2 Spot Interruptions](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html) in the in the *Amazon EC2 Auto Scaling User Guide*.", + "type": "boolean" + }, + "InstanceId": { + "description": "The ID of the instance used to base the launch configuration on. For more information, see [Create an Auto Scaling group using an EC2 instance](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-from-instance.html) in the *Amazon EC2 Auto Scaling User Guide*.\n If you specify ``LaunchTemplate``, ``MixedInstancesPolicy``, or ``LaunchConfigurationName``, don't specify ``InstanceId``.", + "type": "string" + }, + "AvailabilityZones": { + "uniqueItems": false, + "description": "A list of Availability Zones where instances in the Auto Scaling group can be created. Used for launching into the default VPC subnet in each Availability Zone when not using the ``VPCZoneIdentifier`` property, or for attaching a network interface when an existing network interface ID is specified in a launch template.", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "NotificationConfiguration": { + "description": "", + "$ref": "#/definitions/NotificationConfiguration" + }, + "MetricsCollection": { + "uniqueItems": false, + "description": "Enables the monitoring of group metrics of an Auto Scaling group. By default, these metrics are disabled.", + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/MetricsCollection" + } + }, + "InstanceMaintenancePolicy": { + "description": "An instance maintenance policy. For more information, see [Set instance maintenance policy](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "$ref": "#/definitions/InstanceMaintenancePolicy" + }, + "MaxSize": { + "pattern": "^[0-9]+$", + "description": "The maximum size of the group.\n With a mixed instances policy that uses instance weighting, Amazon EC2 Auto Scaling may need to go above ``MaxSize`` to meet your capacity requirements. In this event, Amazon EC2 Auto Scaling will never go above ``MaxSize`` by more than your largest instance weight (weights that define how many units each instance contributes to the desired capacity of the group).", + "type": "string" + }, + "MinSize": { + "pattern": "^[0-9]+$", + "description": "The minimum size of the group.", + "type": "string" + }, + "TerminationPolicies": { + "uniqueItems": false, + "description": "A policy or a list of policies that are used to select the instance to terminate. These policies are executed in the order that you list them. For more information, see [Work with Amazon EC2 Auto Scaling termination policies](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-termination-policies.html) in the *Amazon EC2 Auto Scaling User Guide*.\n Valid values: ``Default`` | ``AllocationStrategy`` | ``ClosestToNextInstanceHour`` | ``NewestInstance`` | ``OldestInstance`` | ``OldestLaunchConfiguration`` | ``OldestLaunchTemplate`` | ``arn:aws:lambda:region:account-id:function:my-function:my-alias``", + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "AutoScalingGroupName": { + "description": "The name of the Auto Scaling group. This name must be unique per Region per account.\n The name can contain any ASCII character 33 to 126 including most punctuation characters, digits, and upper and lowercased letters.\n You cannot use a colon (:) in the name.", + "type": "string" + }, + "DesiredCapacityType": { + "description": "The unit of measurement for the value specified for desired capacity. Amazon EC2 Auto Scaling supports ``DesiredCapacityType`` for attribute-based instance type selection only. For more information, see [Creating an Auto Scaling group using attribute-based instance type selection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html) in the *Amazon EC2 Auto Scaling User Guide*.\n By default, Amazon EC2 Auto Scaling specifies ``units``, which translates into number of instances.\n Valid values: ``units`` | ``vcpu`` | ``memory-mib``", + "type": "string" + }, + "PlacementGroup": { + "description": "The name of the placement group into which to launch your instances. For more information, see [Placement groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) in the *Amazon EC2 User Guide for Linux Instances*.\n A *cluster* placement group is a logical grouping of instances within a single Availability Zone. You cannot specify multiple Availability Zones and a cluster placement group.", + "type": "string" + }, + "HealthCheckType": { + "description": "A comma-separated value string of one or more health check types.\n The valid values are ``EC2``, ``ELB``, and ``VPC_LATTICE``. ``EC2`` is the default health check and cannot be disabled. For more information, see [Health checks for Auto Scaling instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/healthcheck.html) in the *Amazon EC2 Auto Scaling User Guide*.\n Only specify ``EC2`` if you must clear a value that was previously set.", + "type": "string" + }, + "MaxInstanceLifetime": { + "description": "The maximum amount of time, in seconds, that an instance can be in service. The default is null. If specified, the value must be either 0 or a number equal to or greater than 86,400 seconds (1 day). For more information, see [Replacing Auto Scaling instances based on maximum instance lifetime](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-max-instance-lifetime.html) in the *Amazon EC2 Auto Scaling User Guide*.", + "type": "integer" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/autoscaling/launchconfiguration.json b/internal/aws/cfn/schemas/aws/autoscaling/launchconfiguration.json new file mode 100644 index 00000000..9adfc4b8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/autoscaling/launchconfiguration.json @@ -0,0 +1,241 @@ +{ + "typeName": "AWS::AutoScaling::LaunchConfiguration", + "description": "The AWS::AutoScaling::LaunchConfiguration resource specifies the launch configuration that can be used by an Auto Scaling group to configure Amazon EC2 instances.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "definitions": { + "MetadataOptions": { + "description": "MetadataOptions is a property of AWS::AutoScaling::LaunchConfiguration that describes metadata options for the instances.", + "type": "object", + "additionalProperties": false, + "properties": { + "HttpPutResponseHopLimit": { + "description": "The desired HTTP PUT response hop limit for instance metadata requests.", + "type": "integer" + }, + "HttpTokens": { + "description": "The state of token usage for your instance metadata requests.", + "type": "string" + }, + "HttpEndpoint": { + "description": "This parameter enables or disables the HTTP metadata endpoint on your instances.", + "type": "string" + } + } + }, + "BlockDeviceMapping": { + "description": "BlockDeviceMapping is a property of AWS::AutoScaling::LaunchConfiguration that describes a block device mapping for an Auto Scaling group.", + "type": "object", + "additionalProperties": false, + "properties": { + "NoDevice": { + "description": "Setting this value to true suppresses the specified device included in the block device mapping of the AMI.", + "type": "boolean" + }, + "VirtualName": { + "description": "The name of the virtual device.", + "type": "string" + }, + "Ebs": { + "description": "Parameters used to automatically set up EBS volumes when an instance is launched.", + "$ref": "#/definitions/BlockDevice" + }, + "DeviceName": { + "description": "The device name exposed to the EC2 instance (for example, /dev/sdh or xvdh). ", + "type": "string" + } + }, + "required": [ + "DeviceName" + ] + }, + "BlockDevice": { + "description": "BlockDevice is a subproperty of BlockDeviceMapping that describes an Amazon EBS volume.", + "type": "object", + "additionalProperties": false, + "properties": { + "SnapshotId": { + "description": "The snapshot ID of the volume to use.", + "type": "string" + }, + "VolumeType": { + "description": "The volume type.", + "type": "string" + }, + "Encrypted": { + "description": "Specifies whether the volume should be encrypted. ", + "type": "boolean" + }, + "Iops": { + "description": "The number of input/output (I/O) operations per second (IOPS) to provision for the volume. ", + "type": "integer" + }, + "VolumeSize": { + "description": "The volume size, in GiBs.", + "type": "integer" + }, + "DeleteOnTermination": { + "description": "Indicates whether the volume is deleted on instance termination. ", + "type": "boolean" + }, + "Throughput": { + "description": "The throughput (MiBps) to provision for a gp3 volume.", + "type": "integer" + } + } + } + }, + "properties": { + "AssociatePublicIpAddress": { + "description": "For Auto Scaling groups that are running in a virtual private cloud (VPC), specifies whether to assign a public IP address to the group's instances.", + "type": "boolean" + }, + "BlockDeviceMappings": { + "description": "Specifies how block devices are exposed to the instance. You can specify virtual devices and EBS volumes.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/BlockDeviceMapping" + } + }, + "ClassicLinkVPCId": { + "description": "The ID of a ClassicLink-enabled VPC to link your EC2-Classic instances to.", + "type": "string" + }, + "ClassicLinkVPCSecurityGroups": { + "description": "The IDs of one or more security groups for the VPC that you specified in the ClassicLinkVPCId property.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "EbsOptimized": { + "description": "Specifies whether the launch configuration is optimized for EBS I/O (true) or not (false).", + "type": "boolean" + }, + "IamInstanceProfile": { + "description": "Provides the name or the Amazon Resource Name (ARN) of the instance profile associated with the IAM role for the instance. The instance profile contains the IAM role.", + "type": "string" + }, + "ImageId": { + "description": "Provides the unique ID of the Amazon Machine Image (AMI) that was assigned during registration.", + "type": "string" + }, + "InstanceId": { + "description": "The ID of the Amazon EC2 instance you want to use to create the launch configuration.", + "type": "string" + }, + "InstanceMonitoring": { + "description": "Controls whether instances in this group are launched with detailed (true) or basic (false) monitoring.", + "type": "boolean" + }, + "InstanceType": { + "description": "Specifies the instance type of the EC2 instance.", + "type": "string" + }, + "KernelId": { + "description": "Provides the ID of the kernel associated with the EC2 AMI.", + "type": "string" + }, + "KeyName": { + "description": "Provides the name of the EC2 key pair.", + "type": "string" + }, + "LaunchConfigurationName": { + "description": "The name of the launch configuration. This name must be unique per Region per account.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "MetadataOptions": { + "description": "The metadata options for the instances.", + "$ref": "#/definitions/MetadataOptions" + }, + "PlacementTenancy": { + "description": "The tenancy of the instance, either default or dedicated.", + "type": "string" + }, + "RamDiskId": { + "description": "The ID of the RAM disk to select.", + "type": "string" + }, + "SecurityGroups": { + "description": "A list that contains the security groups to assign to the instances in the Auto Scaling group.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SpotPrice": { + "description": "The maximum hourly price you are willing to pay for any Spot Instances launched to fulfill the request.", + "type": "string" + }, + "UserData": { + "description": "The Base64-encoded user data to make available to the launched EC2 instances.", + "type": "string", + "maxLength": 21847 + } + }, + "additionalProperties": false, + "required": [ + "ImageId", + "InstanceType" + ], + "createOnlyProperties": [ + "/properties/AssociatePublicIpAddress", + "/properties/BlockDeviceMappings", + "/properties/ClassicLinkVPCId", + "/properties/ClassicLinkVPCSecurityGroups", + "/properties/EbsOptimized", + "/properties/IamInstanceProfile", + "/properties/ImageId", + "/properties/InstanceId", + "/properties/InstanceMonitoring", + "/properties/InstanceType", + "/properties/KernelId", + "/properties/KeyName", + "/properties/LaunchConfigurationName", + "/properties/MetadataOptions", + "/properties/PlacementTenancy", + "/properties/RamDiskId", + "/properties/SecurityGroups", + "/properties/SpotPrice", + "/properties/UserData" + ], + "tagging": { + "taggable": false + }, + "primaryIdentifier": [ + "/properties/LaunchConfigurationName" + ], + "writeOnlyProperties": [ + "/properties/InstanceId" + ], + "handlers": { + "create": { + "permissions": [ + "autoscaling:CreateLaunchConfiguration", + "autoscaling:DescribeLaunchConfigurations", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "autoscaling:DescribeLaunchConfigurations" + ] + }, + "delete": { + "permissions": [ + "autoscaling:DeleteLaunchConfiguration", + "autoscaling:DescribeLaunchConfigurations" + ] + }, + "list": { + "permissions": [ + "autoscaling:DescribeLaunchConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/autoscaling/lifecyclehook.json b/internal/aws/cfn/schemas/aws/autoscaling/lifecyclehook.json new file mode 100644 index 00000000..95e84c6e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/autoscaling/lifecyclehook.json @@ -0,0 +1,92 @@ +{ + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json", + "typeName": "AWS::AutoScaling::LifecycleHook", + "description": "Resource Type definition for AWS::AutoScaling::LifecycleHook", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "properties": { + "AutoScalingGroupName": { + "description": "The name of the Auto Scaling group for the lifecycle hook.", + "type": "string" + }, + "DefaultResult": { + "description": "The action the Auto Scaling group takes when the lifecycle hook timeout elapses or if an unexpected failure occurs. The valid values are CONTINUE and ABANDON (default).", + "type": "string" + }, + "HeartbeatTimeout": { + "description": "The maximum time, in seconds, that can elapse before the lifecycle hook times out. The range is from 30 to 7200 seconds. The default value is 3600 seconds (1 hour). If the lifecycle hook times out, Amazon EC2 Auto Scaling performs the action that you specified in the DefaultResult property.", + "type": "integer" + }, + "LifecycleHookName": { + "description": "The name of the lifecycle hook.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "LifecycleTransition": { + "description": "The instance state to which you want to attach the lifecycle hook.", + "type": "string" + }, + "NotificationMetadata": { + "description": "Additional information that is included any time Amazon EC2 Auto Scaling sends a message to the notification target.", + "type": "string", + "minLength": 1, + "maxLength": 1023 + }, + "NotificationTargetARN": { + "description": "The Amazon Resource Name (ARN) of the notification target that Amazon EC2 Auto Scaling uses to notify you when an instance is in the transition state for the lifecycle hook. You can specify an Amazon SQS queue or an Amazon SNS topic. The notification message includes the following information: lifecycle action token, user account ID, Auto Scaling group name, lifecycle hook name, instance ID, lifecycle transition, and notification metadata.", + "type": "string" + }, + "RoleARN": { + "description": "The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target, for example, an Amazon SNS topic or an Amazon SQS queue.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "LifecycleTransition", + "AutoScalingGroupName" + ], + "createOnlyProperties": [ + "/properties/AutoScalingGroupName", + "/properties/LifecycleHookName" + ], + "primaryIdentifier": [ + "/properties/AutoScalingGroupName", + "/properties/LifecycleHookName" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "autoscaling:PutLifecycleHook", + "autoscaling:DescribeLifecycleHooks", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "autoscaling:DescribeLifecycleHooks" + ] + }, + "update": { + "permissions": [ + "autoscaling:PutLifecycleHook", + "autoscaling:DescribeLifecycleHooks", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "autoscaling:DeleteLifecycleHook", + "autoscaling:DescribeLifecycleHooks" + ] + }, + "list": { + "permissions": [ + "autoscaling:DescribeLifecycleHooks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/autoscaling/scalingpolicy.json b/internal/aws/cfn/schemas/aws/autoscaling/scalingpolicy.json new file mode 100644 index 00000000..5f6226a0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/autoscaling/scalingpolicy.json @@ -0,0 +1,441 @@ +{ + "typeName": "AWS::AutoScaling::ScalingPolicy", + "description": "The AWS::AutoScaling::ScalingPolicy resource specifies an Amazon EC2 Auto Scaling scaling policy so that the Auto Scaling group can scale the number of instances available for your application.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "definitions": { + "PredictiveScalingMetricSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomizedCapacityMetricSpecification": { + "$ref": "#/definitions/PredictiveScalingCustomizedCapacityMetric" + }, + "CustomizedLoadMetricSpecification": { + "$ref": "#/definitions/PredictiveScalingCustomizedLoadMetric" + }, + "CustomizedScalingMetricSpecification": { + "$ref": "#/definitions/PredictiveScalingCustomizedScalingMetric" + }, + "PredefinedLoadMetricSpecification": { + "$ref": "#/definitions/PredictiveScalingPredefinedLoadMetric" + }, + "TargetValue": { + "type": "number" + }, + "PredefinedScalingMetricSpecification": { + "$ref": "#/definitions/PredictiveScalingPredefinedScalingMetric" + }, + "PredefinedMetricPairSpecification": { + "$ref": "#/definitions/PredictiveScalingPredefinedMetricPair" + } + }, + "required": [ + "TargetValue" + ] + }, + "PredictiveScalingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricSpecifications": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PredictiveScalingMetricSpecification" + } + }, + "MaxCapacityBreachBehavior": { + "type": "string" + }, + "MaxCapacityBuffer": { + "type": "integer" + }, + "SchedulingBufferTime": { + "type": "integer" + }, + "Mode": { + "type": "string" + } + }, + "required": [ + "MetricSpecifications" + ] + }, + "CustomizedMetricSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricDimension" + } + }, + "Statistic": { + "type": "string" + }, + "Unit": { + "type": "string" + }, + "Namespace": { + "type": "string" + } + }, + "required": [ + "MetricName", + "Statistic", + "Namespace" + ] + }, + "TargetTrackingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomizedMetricSpecification": { + "$ref": "#/definitions/CustomizedMetricSpecification" + }, + "TargetValue": { + "type": "number" + }, + "DisableScaleIn": { + "type": "boolean" + }, + "PredefinedMetricSpecification": { + "$ref": "#/definitions/PredefinedMetricSpecification" + } + }, + "required": [ + "TargetValue" + ] + }, + "PredictiveScalingPredefinedLoadMetric": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceLabel": { + "type": "string" + }, + "PredefinedMetricType": { + "type": "string" + } + }, + "required": [ + "PredefinedMetricType" + ] + }, + "StepAdjustment": { + "type": "object", + "additionalProperties": false, + "insertionOrder": false, + "properties": { + "MetricIntervalUpperBound": { + "type": "number" + }, + "MetricIntervalLowerBound": { + "type": "number" + }, + "ScalingAdjustment": { + "type": "integer" + } + }, + "required": [ + "ScalingAdjustment" + ] + }, + "PredictiveScalingPredefinedMetricPair": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceLabel": { + "type": "string" + }, + "PredefinedMetricType": { + "type": "string" + } + }, + "required": [ + "PredefinedMetricType" + ] + }, + "PredefinedMetricSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceLabel": { + "type": "string" + }, + "PredefinedMetricType": { + "type": "string" + } + }, + "required": [ + "PredefinedMetricType" + ] + }, + "MetricDimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Value", + "Name" + ] + }, + "PredictiveScalingPredefinedScalingMetric": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceLabel": { + "type": "string" + }, + "PredefinedMetricType": { + "type": "string" + } + }, + "required": [ + "PredefinedMetricType" + ] + }, + "PredictiveScalingCustomizedLoadMetric": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricDataQueries": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricDataQuery" + } + } + }, + "required": [ + "MetricDataQueries" + ] + }, + "PredictiveScalingCustomizedCapacityMetric": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricDataQueries": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricDataQuery" + } + } + }, + "required": [ + "MetricDataQueries" + ] + }, + "PredictiveScalingCustomizedScalingMetric": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricDataQueries": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricDataQuery" + } + } + }, + "required": [ + "MetricDataQueries" + ] + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricDimension" + } + }, + "Namespace": { + "type": "string" + } + }, + "required": [ + "MetricName", + "Namespace" + ] + }, + "MetricStat": { + "type": "object", + "additionalProperties": false, + "properties": { + "Metric": { + "$ref": "#/definitions/Metric" + }, + "Stat": { + "type": "string" + }, + "Unit": { + "type": "string" + } + }, + "required": [ + "Stat", + "Metric" + ] + }, + "MetricDataQuery": { + "type": "object", + "additionalProperties": false, + "properties": { + "Label": { + "type": "string" + }, + "MetricStat": { + "$ref": "#/definitions/MetricStat" + }, + "Id": { + "type": "string" + }, + "ReturnData": { + "type": "boolean" + }, + "Expression": { + "type": "string" + } + }, + "required": [ + "Id" + ] + } + }, + "properties": { + "MetricAggregationType": { + "description": "The aggregation type for the CloudWatch metrics. The valid values are Minimum, Maximum, and Average. If the aggregation type is null, the value is treated as Average. Valid only if the policy type is StepScaling.", + "type": "string" + }, + "PolicyName": { + "type": "string" + }, + "PolicyType": { + "description": "One of the following policy types: TargetTrackingScaling, StepScaling, SimpleScaling (default), PredictiveScaling", + "type": "string" + }, + "PredictiveScalingConfiguration": { + "description": "A predictive scaling policy. Includes support for predefined metrics only.", + "$ref": "#/definitions/PredictiveScalingConfiguration" + }, + "ScalingAdjustment": { + "description": "The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a positive value. Required if the policy type is SimpleScaling. (Not used with any other policy type.)", + "type": "integer" + }, + "Cooldown": { + "description": "The duration of the policy's cooldown period, in seconds. When a cooldown period is specified here, it overrides the default cooldown period defined for the Auto Scaling group.", + "type": "string" + }, + "StepAdjustments": { + "description": "A set of adjustments that enable you to scale based on the size of the alarm breach. Required if the policy type is StepScaling. (Not used with any other policy type.)", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/StepAdjustment" + } + }, + "AutoScalingGroupName": { + "description": "The name of the Auto Scaling group.", + "type": "string" + }, + "MinAdjustmentMagnitude": { + "description": "The minimum value to scale by when the adjustment type is PercentChangeInCapacity. For example, suppose that you create a step scaling policy to scale out an Auto Scaling group by 25 percent and you specify a MinAdjustmentMagnitude of 2. If the group has 4 instances and the scaling policy is performed, 25 percent of 4 is 1. However, because you specified a MinAdjustmentMagnitude of 2, Amazon EC2 Auto Scaling scales out the group by 2 instances.", + "type": "integer" + }, + "TargetTrackingConfiguration": { + "description": "A target tracking scaling policy. Includes support for predefined or customized metrics.", + "$ref": "#/definitions/TargetTrackingConfiguration" + }, + "EstimatedInstanceWarmup": { + "description": "The estimated time, in seconds, until a newly launched instance can contribute to the CloudWatch metrics. If not provided, the default is to use the value from the default cooldown period for the Auto Scaling group. Valid only if the policy type is TargetTrackingScaling or StepScaling.", + "type": "integer" + }, + "AdjustmentType": { + "description": "Specifies how the scaling adjustment is interpreted. The valid values are ChangeInCapacity, ExactCapacity, and PercentChangeInCapacity.", + "type": "string" + }, + "Arn": { + "description": "The ARN of the AutoScaling scaling policy", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "AutoScalingGroupName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/PolicyName", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AutoScalingGroupName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "autoscaling:DescribePolicies", + "autoscaling:PutScalingPolicy", + "cloudwatch:GetMetricData" + ] + }, + "read": { + "permissions": [ + "autoscaling:DescribePolicies" + ] + }, + "update": { + "permissions": [ + "autoscaling:DescribePolicies", + "autoscaling:PutScalingPolicy", + "cloudwatch:GetMetricData" + ] + }, + "delete": { + "permissions": [ + "autoscaling:DeletePolicy", + "autoscaling:DescribePolicies" + ] + }, + "list": { + "permissions": [ + "autoscaling:DescribePolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/autoscaling/scheduledaction.json b/internal/aws/cfn/schemas/aws/autoscaling/scheduledaction.json new file mode 100644 index 00000000..12f3cc38 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/autoscaling/scheduledaction.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::AutoScaling::ScheduledAction", + "description": "The AWS::AutoScaling::ScheduledAction resource specifies an Amazon EC2 Auto Scaling scheduled action so that the Auto Scaling group can change the number of instances available for your application in response to predictable load changes.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "ScheduledActionName": { + "description": "Auto-generated unique identifier", + "type": "string" + }, + "MinSize": { + "description": "The minimum size of the Auto Scaling group.", + "type": "integer" + }, + "Recurrence": { + "description": "The recurring schedule for the action, in Unix cron syntax format. When StartTime and EndTime are specified with Recurrence , they form the boundaries of when the recurring action starts and stops.", + "type": "string" + }, + "TimeZone": { + "description": "The time zone for the cron expression.", + "type": "string" + }, + "EndTime": { + "description": "The latest scheduled start time to return. If scheduled action names are provided, this parameter is ignored.", + "type": "string" + }, + "AutoScalingGroupName": { + "description": "The name of the Auto Scaling group.", + "type": "string" + }, + "StartTime": { + "description": "The earliest scheduled start time to return. If scheduled action names are provided, this parameter is ignored.", + "type": "string" + }, + "DesiredCapacity": { + "description": "The desired capacity is the initial capacity of the Auto Scaling group after the scheduled action runs and the capacity it attempts to maintain.", + "type": "integer" + }, + "MaxSize": { + "description": "The minimum size of the Auto Scaling group.", + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "AutoScalingGroupName" + ], + "createOnlyProperties": [ + "/properties/AutoScalingGroupName" + ], + "primaryIdentifier": [ + "/properties/ScheduledActionName", + "/properties/AutoScalingGroupName" + ], + "readOnlyProperties": [ + "/properties/ScheduledActionName" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "autoscaling:PutScheduledUpdateGroupAction", + "autoscaling:DescribeScheduledActions" + ] + }, + "read": { + "permissions": [ + "autoscaling:DescribeScheduledActions" + ] + }, + "update": { + "permissions": [ + "autoscaling:PutScheduledUpdateGroupAction" + ] + }, + "delete": { + "permissions": [ + "autoscaling:DeleteScheduledAction", + "autoscaling:DescribeScheduledActions" + ] + }, + "list": { + "permissions": [ + "autoscaling:DescribeScheduledActions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/autoscaling/warmpool.json b/internal/aws/cfn/schemas/aws/autoscaling/warmpool.json new file mode 100644 index 00000000..8f95f196 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/autoscaling/warmpool.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::AutoScaling::WarmPool", + "description": "Resource schema for AWS::AutoScaling::WarmPool.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling", + "additionalProperties": false, + "definitions": { + "InstanceReusePolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReuseOnScaleIn": { + "type": "boolean" + } + } + } + }, + "properties": { + "AutoScalingGroupName": { + "type": "string" + }, + "MaxGroupPreparedCapacity": { + "type": "integer" + }, + "MinSize": { + "type": "integer" + }, + "PoolState": { + "type": "string" + }, + "InstanceReusePolicy": { + "$ref": "#/definitions/InstanceReusePolicy" + } + }, + "createOnlyProperties": [ + "/properties/AutoScalingGroupName" + ], + "primaryIdentifier": [ + "/properties/AutoScalingGroupName" + ], + "required": [ + "AutoScalingGroupName" + ], + "handlers": { + "create": { + "permissions": [ + "autoscaling:PutWarmPool", + "autoscaling:DescribeWarmPool", + "autoscaling:DescribeAutoScalingGroups" + ] + }, + "delete": { + "permissions": [ + "autoscaling:DeleteWarmPool", + "autoscaling:DescribeWarmPool" + ] + }, + "read": { + "permissions": [ + "autoscaling:DescribeWarmPool" + ] + }, + "update": { + "permissions": [ + "autoscaling:PutWarmPool", + "autoscaling:DescribeWarmPool", + "autoscaling:DescribeAutoScalingGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/autoscalingplans/scalingplan.json b/internal/aws/cfn/schemas/aws/autoscalingplans/scalingplan.json new file mode 100644 index 00000000..b23e6fd9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/autoscalingplans/scalingplan.json @@ -0,0 +1,271 @@ +{ + "typeName": "AWS::AutoScalingPlans::ScalingPlan", + "description": "Resource Type definition for AWS::AutoScalingPlans::ScalingPlan", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ScalingPlanName": { + "type": "string" + }, + "ScalingPlanVersion": { + "type": "string" + }, + "ApplicationSource": { + "$ref": "#/definitions/ApplicationSource" + }, + "ScalingInstructions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ScalingInstruction" + } + } + }, + "definitions": { + "ScalingInstruction": { + "type": "object", + "additionalProperties": false, + "properties": { + "DisableDynamicScaling": { + "type": "boolean" + }, + "ServiceNamespace": { + "type": "string" + }, + "PredictiveScalingMaxCapacityBehavior": { + "type": "string" + }, + "ScalableDimension": { + "type": "string" + }, + "ScalingPolicyUpdateBehavior": { + "type": "string" + }, + "MinCapacity": { + "type": "integer" + }, + "TargetTrackingConfigurations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TargetTrackingConfiguration" + } + }, + "PredictiveScalingMaxCapacityBuffer": { + "type": "integer" + }, + "CustomizedLoadMetricSpecification": { + "$ref": "#/definitions/CustomizedLoadMetricSpecification" + }, + "PredefinedLoadMetricSpecification": { + "$ref": "#/definitions/PredefinedLoadMetricSpecification" + }, + "ResourceId": { + "type": "string" + }, + "ScheduledActionBufferTime": { + "type": "integer" + }, + "MaxCapacity": { + "type": "integer" + }, + "PredictiveScalingMode": { + "type": "string" + } + }, + "required": [ + "ResourceId", + "ServiceNamespace", + "ScalableDimension", + "MinCapacity", + "TargetTrackingConfigurations", + "MaxCapacity" + ] + }, + "ApplicationSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudFormationStackARN": { + "type": "string" + }, + "TagFilters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagFilter" + } + } + } + }, + "TargetTrackingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScaleOutCooldown": { + "type": "integer" + }, + "TargetValue": { + "type": "number" + }, + "PredefinedScalingMetricSpecification": { + "$ref": "#/definitions/PredefinedScalingMetricSpecification" + }, + "DisableScaleIn": { + "type": "boolean" + }, + "ScaleInCooldown": { + "type": "integer" + }, + "EstimatedInstanceWarmup": { + "type": "integer" + }, + "CustomizedScalingMetricSpecification": { + "$ref": "#/definitions/CustomizedScalingMetricSpecification" + } + }, + "required": [ + "TargetValue" + ] + }, + "CustomizedLoadMetricSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "Statistic": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MetricDimension" + } + }, + "Unit": { + "type": "string" + }, + "Namespace": { + "type": "string" + } + }, + "required": [ + "MetricName", + "Statistic", + "Namespace" + ] + }, + "PredefinedLoadMetricSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "PredefinedLoadMetricType": { + "type": "string" + }, + "ResourceLabel": { + "type": "string" + } + }, + "required": [ + "PredefinedLoadMetricType" + ] + }, + "TagFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Key" + ] + }, + "PredefinedScalingMetricSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceLabel": { + "type": "string" + }, + "PredefinedScalingMetricType": { + "type": "string" + } + }, + "required": [ + "PredefinedScalingMetricType" + ] + }, + "CustomizedScalingMetricSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "Statistic": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MetricDimension" + } + }, + "Unit": { + "type": "string" + }, + "Namespace": { + "type": "string" + } + }, + "required": [ + "MetricName", + "Statistic", + "Namespace" + ] + }, + "MetricDimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Value", + "Name" + ] + } + }, + "required": [ + "ScalingInstructions", + "ApplicationSource" + ], + "readOnlyProperties": [ + "/properties/ScalingPlanVersion", + "/properties/ScalingPlanName", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/backup/backupplan.json b/internal/aws/cfn/schemas/aws/backup/backupplan.json new file mode 100644 index 00000000..54d776a1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/backup/backupplan.json @@ -0,0 +1,209 @@ +{ + "typeName": "AWS::Backup::BackupPlan", + "description": "Resource Type definition for AWS::Backup::BackupPlan", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "BackupPlan": { + "$ref": "#/definitions/BackupPlanResourceType" + }, + "BackupPlanTags": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.{1,128}$": { + "type": "string" + } + } + }, + "BackupPlanArn": { + "type": "string" + }, + "BackupPlanId": { + "type": "string" + }, + "VersionId": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "BackupPlan" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/BackupPlanTags" + }, + "readOnlyProperties": [ + "/properties/BackupPlanId", + "/properties/VersionId", + "/properties/BackupPlanArn" + ], + "primaryIdentifier": [ + "/properties/BackupPlanId" + ], + "definitions": { + "BackupPlanResourceType": { + "type": "object", + "additionalProperties": false, + "properties": { + "BackupPlanName": { + "type": "string" + }, + "AdvancedBackupSettings": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AdvancedBackupSettingResourceType" + } + }, + "BackupPlanRule": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/BackupRuleResourceType" + } + } + }, + "required": [ + "BackupPlanName", + "BackupPlanRule" + ] + }, + "BackupRuleResourceType": { + "type": "object", + "additionalProperties": false, + "properties": { + "RuleName": { + "type": "string" + }, + "TargetBackupVault": { + "type": "string" + }, + "StartWindowMinutes": { + "type": "number" + }, + "CompletionWindowMinutes": { + "type": "number" + }, + "ScheduleExpression": { + "type": "string" + }, + "ScheduleExpressionTimezone": { + "type": "string" + }, + "RecoveryPointTags": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.{1,128}$": { + "type": "string" + } + } + }, + "CopyActions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CopyActionResourceType" + } + }, + "Lifecycle": { + "$ref": "#/definitions/LifecycleResourceType" + }, + "EnableContinuousBackup": { + "type": "boolean" + } + }, + "required": [ + "TargetBackupVault", + "RuleName" + ] + }, + "AdvancedBackupSettingResourceType": { + "type": "object", + "additionalProperties": false, + "properties": { + "BackupOptions": { + "type": "object" + }, + "ResourceType": { + "type": "string" + } + }, + "required": [ + "BackupOptions", + "ResourceType" + ] + }, + "CopyActionResourceType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Lifecycle": { + "$ref": "#/definitions/LifecycleResourceType" + }, + "DestinationBackupVaultArn": { + "type": "string" + } + }, + "required": [ + "DestinationBackupVaultArn" + ] + }, + "LifecycleResourceType": { + "type": "object", + "additionalProperties": false, + "properties": { + "MoveToColdStorageAfterDays": { + "type": "number" + }, + "DeleteAfterDays": { + "type": "number" + }, + "OptInToArchiveForSupportedResources": { + "type": "boolean" + } + } + } + }, + "handlers": { + "read": { + "permissions": [ + "backup:GetBackupPlan", + "backup:ListTags" + ] + }, + "create": { + "permissions": [ + "backup:GetBackupPlan", + "backup:TagResource", + "backup:CreateBackupPlan" + ] + }, + "delete": { + "permissions": [ + "backup:GetBackupPlan", + "backup:DeleteBackupPlan" + ] + }, + "update": { + "permissions": [ + "backup:UpdateBackupPlan", + "backup:ListTags", + "backup:TagResource", + "backup:UntagResource" + ] + }, + "list": { + "permissions": [ + "backup:ListBackupPlans" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/backup/backupselection.json b/internal/aws/cfn/schemas/aws/backup/backupselection.json new file mode 100644 index 00000000..97a86cbe --- /dev/null +++ b/internal/aws/cfn/schemas/aws/backup/backupselection.json @@ -0,0 +1,179 @@ +{ + "typeName": "AWS::Backup::BackupSelection", + "description": "Resource Type definition for AWS::Backup::BackupSelection", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Id": { + "type": "string" + }, + "BackupPlanId": { + "type": "string" + }, + "BackupSelection": { + "$ref": "#/definitions/BackupSelectionResourceType" + }, + "SelectionId": { + "type": "string" + } + }, + "required": [ + "BackupSelection", + "BackupPlanId" + ], + "createOnlyProperties": [ + "/properties/BackupSelection", + "/properties/BackupPlanId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/SelectionId", + "/properties/Id" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "definitions": { + "BackupSelectionResourceType": { + "type": "object", + "additionalProperties": false, + "properties": { + "IamRoleArn": { + "type": "string" + }, + "ListOfTags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConditionResourceType" + } + }, + "Resources": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SelectionName": { + "type": "string" + }, + "NotResources": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Conditions": { + "type": "object", + "additionalProperties": false, + "properties": { + "StringEquals": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConditionParameter" + } + }, + "StringNotEquals": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConditionParameter" + } + }, + "StringLike": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConditionParameter" + } + }, + "StringNotLike": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConditionParameter" + } + } + } + } + }, + "required": [ + "SelectionName", + "IamRoleArn" + ] + }, + "ConditionParameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConditionKey": { + "type": "string" + }, + "ConditionValue": { + "type": "string" + } + } + }, + "ConditionResourceType": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConditionKey": { + "type": "string" + }, + "ConditionValue": { + "type": "string" + }, + "ConditionType": { + "type": "string" + } + }, + "required": [ + "ConditionValue", + "ConditionKey", + "ConditionType" + ] + } + }, + "handlers": { + "delete": { + "permissions": [ + "backup:GetBackupSelection", + "backup:DeleteBackupSelection" + ] + }, + "read": { + "permissions": [ + "backup:GetBackupSelection" + ] + }, + "create": { + "permissions": [ + "backup:CreateBackupSelection", + "iam:GetRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole" + ] + }, + "list": { + "permissions": [ + "backup:ListBackupSelections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/backup/backupvault.json b/internal/aws/cfn/schemas/aws/backup/backupvault.json new file mode 100644 index 00000000..0b87e382 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/backup/backupvault.json @@ -0,0 +1,156 @@ +{ + "typeName": "AWS::Backup::BackupVault", + "description": "Resource Type definition for AWS::Backup::BackupVault", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "NotificationObjectType": { + "type": "object", + "additionalProperties": false, + "properties": { + "BackupVaultEvents": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SNSTopicArn": { + "type": "string" + } + }, + "required": [ + "SNSTopicArn", + "BackupVaultEvents" + ] + }, + "LockConfigurationType": { + "type": "object", + "additionalProperties": false, + "properties": { + "MinRetentionDays": { + "type": "integer" + }, + "MaxRetentionDays": { + "type": "integer" + }, + "ChangeableForDays": { + "type": "integer" + } + }, + "required": [ + "MinRetentionDays" + ] + }, + "BackupVaultNamePattern": { + "type": "string", + "pattern": "^[a-zA-Z0-9\\-\\_]{2,50}$" + } + }, + "properties": { + "AccessPolicy": { + "type": [ + "object", + "string" + ] + }, + "BackupVaultName": { + "$ref": "#/definitions/BackupVaultNamePattern" + }, + "BackupVaultTags": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.{1,128}$": { + "type": "string" + } + } + }, + "EncryptionKeyArn": { + "type": "string" + }, + "Notifications": { + "$ref": "#/definitions/NotificationObjectType" + }, + "LockConfiguration": { + "$ref": "#/definitions/LockConfigurationType" + }, + "BackupVaultArn": { + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/BackupVaultTags" + }, + "required": [ + "BackupVaultName" + ], + "createOnlyProperties": [ + "/properties/BackupVaultName", + "/properties/EncryptionKeyArn" + ], + "writeOnlyProperties": [ + "/properties/LockConfiguration/ChangeableForDays" + ], + "readOnlyProperties": [ + "/properties/BackupVaultArn" + ], + "primaryIdentifier": [ + "/properties/BackupVaultName" + ], + "handlers": { + "create": { + "permissions": [ + "backup:TagResource", + "backup:CreateBackupVault", + "backup:PutBackupVaultAccessPolicy", + "backup:PutBackupVaultNotifications", + "backup:PutBackupVaultLockConfiguration", + "backup-storage:Mount", + "backup-storage:MountCapsule", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt", + "kms:RetireGrant", + "kms:DescribeKey" + ] + }, + "read": { + "permissions": [ + "backup:DescribeBackupVault", + "backup:GetBackupVaultNotifications", + "backup:GetBackupVaultAccessPolicy", + "backup:ListTags" + ] + }, + "update": { + "permissions": [ + "backup:DescribeBackupVault", + "backup:DeleteBackupVaultAccessPolicy", + "backup:DeleteBackupVaultNotifications", + "backup:DeleteBackupVaultLockConfiguration", + "backup:ListTags", + "backup:TagResource", + "backup:UntagResource", + "backup:PutBackupVaultAccessPolicy", + "backup:PutBackupVaultNotifications", + "backup:PutBackupVaultLockConfiguration" + ] + }, + "delete": { + "permissions": [ + "backup:DeleteBackupVault" + ] + }, + "list": { + "permissions": [ + "backup:ListBackupVaults" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/backup/framework.json b/internal/aws/cfn/schemas/aws/backup/framework.json new file mode 100644 index 00000000..69f1d8a6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/backup/framework.json @@ -0,0 +1,203 @@ +{ + "typeName": "AWS::Backup::Framework", + "description": "Contains detailed information about a framework. Frameworks contain controls, which evaluate and report on your backup events and resources. Frameworks generate daily compliance results.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "FrameworkName": { + "description": "The unique name of a framework. This name is between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).", + "type": "string", + "pattern": "[a-zA-Z][_a-zA-Z0-9]*", + "minLength": 1, + "maxLength": 256 + }, + "FrameworkDescription": { + "description": "An optional description of the framework with a maximum 1,024 characters.", + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "FrameworkArn": { + "description": "An Amazon Resource Name (ARN) that uniquely identifies Framework as a resource", + "type": "string" + }, + "DeploymentStatus": { + "description": "The deployment status of a framework. The statuses are: `CREATE_IN_PROGRESS | UPDATE_IN_PROGRESS | DELETE_IN_PROGRESS | COMPLETED | FAILED`", + "type": "string" + }, + "CreationTime": { + "description": "The date and time that a framework is created, in ISO 8601 representation. The value of CreationTime is accurate to milliseconds. For example, 2020-07-10T15:00:00.000-08:00 represents the 10th of July 2020 at 3:00 PM 8 hours behind UTC.", + "type": "string" + }, + "FrameworkControls": { + "description": "Contains detailed information about all of the controls of a framework. Each framework must contain at least one control.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/FrameworkControl" + } + }, + "FrameworkStatus": { + "type": "string", + "description": "A framework consists of one or more controls. Each control governs a resource, such as backup plans, backup selections, backup vaults, or recovery points. You can also turn AWS Config recording on or off for each resource. The statuses are:\n\n`ACTIVE` when recording is turned on for all resources governed by the framework.\n\n`PARTIALLY_ACTIVE` when recording is turned off for at least one resource governed by the framework.\n\n`INACTIVE` when recording is turned off for all resources governed by the framework.\n\n`UNAVAILABLE` when AWS Backup is unable to validate recording status at this time." + }, + "FrameworkTags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair." + } + }, + "definitions": { + "FrameworkControl": { + "type": "object", + "additionalProperties": false, + "properties": { + "ControlName": { + "description": "The name of a control. This name is between 1 and 256 characters.", + "type": "string" + }, + "ControlInputParameters": { + "type": "array", + "description": "A list of ParameterName and ParameterValue pairs.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ControlInputParameter" + } + }, + "ControlScope": { + "type": "object", + "description": "The scope of a control. The control scope defines what the control will evaluate. Three examples of control scopes are: a specific backup plan, all backup plans with a specific tag, or all backup plans.", + "additionalProperties": false, + "properties": { + "ComplianceResourceIds": { + "description": "The ID of the only AWS resource that you want your control scope to contain.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "ComplianceResourceTypes": { + "type": "array", + "description": "Describes whether the control scope includes one or more types of resources, such as `EFS` or `RDS`.", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "description": "Describes whether the control scope includes resources with one or more tags. Each tag is a key-value pair.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + } + } + }, + "required": [ + "ControlName" + ] + }, + "ControlInputParameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "ParameterName": { + "type": "string" + }, + "ParameterValue": { + "type": "string" + } + }, + "required": [ + "ParameterName", + "ParameterValue" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/FrameworkTags" + }, + "required": [ + "FrameworkControls" + ], + "readOnlyProperties": [ + "/properties/FrameworkArn", + "/properties/CreationTime", + "/properties/FrameworkStatus", + "/properties/DeploymentStatus" + ], + "createOnlyProperties": [ + "/properties/FrameworkName" + ], + "primaryIdentifier": [ + "/properties/FrameworkArn" + ], + "handlers": { + "create": { + "permissions": [ + "backup:CreateFramework", + "backup:DescribeFramework", + "backup:ListTags", + "backup:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "backup:DescribeFramework", + "backup:ListTags" + ] + }, + "update": { + "permissions": [ + "backup:DescribeFramework", + "backup:UpdateFramework", + "backup:ListTags", + "backup:TagResource", + "backup:UntagResource" + ] + }, + "delete": { + "permissions": [ + "backup:DeleteFramework", + "backup:DescribeFramework" + ] + }, + "list": { + "permissions": [ + "backup:ListFrameworks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/backup/reportplan.json b/internal/aws/cfn/schemas/aws/backup/reportplan.json new file mode 100644 index 00000000..8406f7ba --- /dev/null +++ b/internal/aws/cfn/schemas/aws/backup/reportplan.json @@ -0,0 +1,189 @@ +{ + "typeName": "AWS::Backup::ReportPlan", + "description": "Contains detailed information about a report plan in AWS Backup Audit Manager.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "ReportPlanName": { + "type": "string", + "description": "The unique name of the report plan. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z][_a-zA-Z0-9]*" + }, + "ReportPlanArn": { + "type": "string", + "description": "An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type." + }, + "ReportPlanDescription": { + "type": "string", + "description": "An optional description of the report plan with a maximum of 1,024 characters.", + "minLength": 0, + "maxLength": 1024, + "pattern": ".*\\S.*" + }, + "ReportPlanTags": { + "description": "Metadata that you can assign to help organize the report plans that you create. Each tag is a key-value pair.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ReportDeliveryChannel": { + "type": "object", + "description": "A structure that contains information about where and how to deliver your reports, specifically your Amazon S3 bucket name, S3 key prefix, and the formats of your reports.", + "properties": { + "Formats": { + "type": "array", + "description": "A list of the format of your reports: CSV, JSON, or both. If not specified, the default format is CSV.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "S3BucketName": { + "type": "string", + "description": "The unique name of the S3 bucket that receives your reports." + }, + "S3KeyPrefix": { + "type": "string", + "description": "The prefix for where AWS Backup Audit Manager delivers your reports to Amazon S3. The prefix is this part of the following path: s3://your-bucket-name/prefix/Backup/us-west-2/year/month/day/report-name. If not specified, there is no prefix." + } + }, + "additionalProperties": false, + "required": [ + "S3BucketName" + ] + }, + "ReportSetting": { + "type": "object", + "description": "Identifies the report template for the report. Reports are built using a report template.", + "properties": { + "ReportTemplate": { + "type": "string", + "description": "Identifies the report template for the report. Reports are built using a report template. The report templates are: `BACKUP_JOB_REPORT | COPY_JOB_REPORT | RESTORE_JOB_REPORT`" + }, + "FrameworkArns": { + "type": "array", + "description": "The Amazon Resource Names (ARNs) of the frameworks a report covers.", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Accounts": { + "type": "array", + "description": "The list of AWS accounts that a report covers.", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "OrganizationUnits": { + "type": "array", + "description": "The list of AWS organization units that a report covers.", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Regions": { + "type": "array", + "description": "The list of AWS regions that a report covers.", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "ReportTemplate" + ] + } + }, + "definitions": { + "Tag": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/ReportPlanTags" + }, + "required": [ + "ReportDeliveryChannel", + "ReportSetting" + ], + "readOnlyProperties": [ + "/properties/ReportPlanArn" + ], + "primaryIdentifier": [ + "/properties/ReportPlanArn" + ], + "createOnlyProperties": [ + "/properties/ReportPlanName" + ], + "handlers": { + "create": { + "permissions": [ + "backup:CreateReportPlan", + "backup:DescribeReportPlan", + "backup:ListTags", + "backup:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "backup:DescribeReportPlan", + "backup:ListTags" + ] + }, + "update": { + "permissions": [ + "backup:DescribeReportPlan", + "backup:UpdateReportPlan", + "backup:ListTags", + "backup:UntagResource", + "backup:TagResource" + ] + }, + "delete": { + "permissions": [ + "backup:DeleteReportPlan", + "backup:DescribeReportPlan" + ] + }, + "list": { + "permissions": [ + "backup:ListReportPlans" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/backupgateway/hypervisor.json b/internal/aws/cfn/schemas/aws/backupgateway/hypervisor.json new file mode 100644 index 00000000..042c6717 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/backupgateway/hypervisor.json @@ -0,0 +1,162 @@ +{ + "typeName": "AWS::BackupGateway::Hypervisor", + "description": "Definition of AWS::BackupGateway::Hypervisor Resource Type", + "definitions": { + "HypervisorState": { + "type": "string", + "enum": [ + "PENDING", + "ONLINE", + "OFFLINE", + "ERROR" + ] + }, + "SyncMetadataStatus": { + "type": "string", + "enum": [ + "PENDING", + "IN_PROGRESS", + "FAILED", + "SUCCEEDED" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[^\\x00]*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Host": { + "type": "string", + "maxLength": 128, + "minLength": 3, + "pattern": "^.+$" + }, + "HypervisorArn": { + "type": "string", + "maxLength": 500, + "minLength": 50, + "pattern": "^arn:(aws|aws-cn|aws-us-gov):backup-gateway(:[a-zA-Z-0-9]+){3}\\/[a-zA-Z-0-9]+$" + }, + "KmsKeyArn": { + "type": "string", + "maxLength": 500, + "minLength": 50, + "pattern": "^(^arn:(aws|aws-cn|aws-us-gov):kms:([a-zA-Z0-9-]+):([0-9]+):(key|alias)/(\\S+)$)|(^alias/(\\S+)$)$" + }, + "LogGroupArn": { + "type": "string", + "maxLength": 2048, + "minLength": 0, + "pattern": "^$|^arn:(aws|aws-cn|aws-us-gov):logs:([a-zA-Z0-9-]+):([0-9]+):log-group:[a-zA-Z0-9_\\-\\/\\.]+:\\*$" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "Password": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[ -~]+$" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Username": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[ -\\.0-\\[\\]-~]*[!-\\.0-\\[\\]-~][ -\\.0-\\[\\]-~]*$" + } + }, + "readOnlyProperties": [ + "/properties/HypervisorArn" + ], + "writeOnlyProperties": [ + "/properties/KmsKeyArn", + "/properties/LogGroupArn", + "/properties/Name", + "/properties/Password", + "/properties/Tags", + "/properties/Username" + ], + "createOnlyProperties": [ + "/properties/KmsKeyArn", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/HypervisorArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "backup-gateway:ImportHypervisorConfiguration", + "backup-gateway:GetHypervisor", + "backup-gateway:ListHypervisors", + "backup-gateway:TagResource", + "kms:CreateGrant", + "kms:Encrypt", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "backup-gateway:GetHypervisor", + "backup-gateway:ListHypervisors" + ] + }, + "update": { + "permissions": [ + "backup-gateway:UpdateHypervisor", + "backup-gateway:GetHypervisor", + "backup-gateway:ListHypervisors", + "backup-gateway:ImportHypervisorConfiguration", + "backup-gateway:DeleteHypervisor" + ] + }, + "delete": { + "permissions": [ + "backup-gateway:DeleteHypervisor", + "backup-gateway:GetHypervisor", + "backup-gateway:ListHypervisors" + ] + }, + "list": { + "permissions": [ + "backup-gateway:ListHypervisors" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/batch/computeenvironment.json b/internal/aws/cfn/schemas/aws/batch/computeenvironment.json new file mode 100644 index 00000000..436a9b1b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/batch/computeenvironment.json @@ -0,0 +1,297 @@ +{ + "typeName": "AWS::Batch::ComputeEnvironment", + "description": "Resource Type definition for AWS::Batch::ComputeEnvironment", + "additionalProperties": false, + "properties": { + "ComputeEnvironmentArn": { + "type": "string" + }, + "ComputeEnvironmentName": { + "type": "string" + }, + "ComputeResources": { + "$ref": "#/definitions/ComputeResources" + }, + "ReplaceComputeEnvironment": { + "type": "boolean", + "default": true + }, + "ServiceRole": { + "type": "string" + }, + "State": { + "type": "string" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + ".*": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Type": { + "type": "string" + }, + "UpdatePolicy": { + "$ref": "#/definitions/UpdatePolicy" + }, + "UnmanagedvCpus": { + "type": "integer" + }, + "EksConfiguration": { + "$ref": "#/definitions/EksConfiguration" + } + }, + "definitions": { + "ComputeResources": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllocationStrategy": { + "type": "string" + }, + "BidPercentage": { + "type": "integer" + }, + "DesiredvCpus": { + "type": "integer" + }, + "Ec2Configuration": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Ec2ConfigurationObject" + } + }, + "Ec2KeyPair": { + "type": "string" + }, + "ImageId": { + "type": "string" + }, + "InstanceRole": { + "type": "string" + }, + "InstanceTypes": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "LaunchTemplate": { + "$ref": "#/definitions/LaunchTemplateSpecification" + }, + "MaxvCpus": { + "type": "integer" + }, + "MinvCpus": { + "type": "integer" + }, + "PlacementGroup": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SpotIamFleetRole": { + "type": "string" + }, + "Subnets": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + ".*": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Type": { + "type": "string" + }, + "UpdateToLatestImageVersion": { + "type": "boolean", + "default": false + } + }, + "required": [ + "Subnets", + "Type", + "MaxvCpus" + ] + }, + "Ec2ConfigurationObject": { + "type": "object", + "additionalProperties": false, + "properties": { + "ImageIdOverride": { + "type": "string" + }, + "ImageType": { + "type": "string" + }, + "ImageKubernetesVersion": { + "type": "string" + } + }, + "required": [ + "ImageType" + ] + }, + "LaunchTemplateSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateId": { + "type": "string" + }, + "LaunchTemplateName": { + "type": "string" + }, + "Version": { + "type": "string" + } + } + }, + "UpdatePolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "TerminateJobsOnUpdate": { + "type": "boolean", + "default": false + }, + "JobExecutionTimeoutMinutes": { + "type": "integer", + "default": 30 + } + } + }, + "EksConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "EksClusterArn": { + "type": "string", + "default": false + }, + "KubernetesNamespace": { + "type": "string", + "default": false + } + }, + "required": [ + "EksClusterArn", + "KubernetesNamespace" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Type" + ], + "createOnlyProperties": [ + "/properties/ComputeResources/SpotIamFleetRole", + "/properties/ComputeEnvironmentName", + "/properties/Tags", + "/properties/Type", + "/properties/EksConfiguration" + ], + "conditionalCreateOnlyProperties": [ + "/properties/ComputeResources/AllocationStrategy", + "/properties/ComputeResources/BidPercentage", + "/properties/ComputeResources/Ec2Configuration", + "/properties/ComputeResources/Ec2KeyPair", + "/properties/ComputeResources/ImageId", + "/properties/ComputeResources/InstanceRole", + "/properties/ComputeResources/InstanceTypes", + "/properties/ComputeResources/LaunchTemplate", + "/properties/ComputeResources/PlacementGroup", + "/properties/ComputeResources/SecurityGroupIds", + "/properties/ComputeResources/Subnets", + "/properties/ComputeResources/Tags", + "/properties/ComputeResources/Type" + ], + "writeOnlyProperties": [ + "/properties/ComputeResources/UpdateToLatestImageVersion", + "/properties/ReplaceComputeEnvironment", + "/properties/UpdatePolicy" + ], + "primaryIdentifier": [ + "/properties/ComputeEnvironmentArn" + ], + "readOnlyProperties": [ + "/properties/ComputeEnvironmentArn" + ], + "additionalIdentifiers": [ + [ + "/properties/ComputeEnvironmentName" + ] + ], + "handlers": { + "create": { + "permissions": [ + "Batch:CreateComputeEnvironment", + "Batch:TagResource", + "Batch:DescribeComputeEnvironments", + "iam:CreateServiceLinkedRole", + "Iam:PassRole", + "Eks:DescribeCluster" + ] + }, + "read": { + "permissions": [ + "Batch:DescribeComputeEnvironments" + ] + }, + "update": { + "permissions": [ + "Batch:UpdateComputeEnvironment", + "Batch:DescribeComputeEnvironments", + "Batch:TagResource", + "Batch:UnTagResource", + "Iam:PassRole", + "Eks:DescribeCluster" + ] + }, + "delete": { + "permissions": [ + "Batch:DeleteComputeEnvironment", + "Batch:DescribeComputeEnvironments", + "Batch:UpdateComputeEnvironment", + "Iam:PassRole", + "Eks:DescribeCluster" + ] + }, + "list": { + "permissions": [ + "Batch:DescribeComputeEnvironments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/batch/jobdefinition.json b/internal/aws/cfn/schemas/aws/batch/jobdefinition.json new file mode 100644 index 00000000..3ec485f6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/batch/jobdefinition.json @@ -0,0 +1,947 @@ +{ + "typeName": "AWS::Batch::JobDefinition", + "description": "Resource Type definition for AWS::Batch::JobDefinition", + "additionalProperties": false, + "properties": { + "Parameters": { + "type": "object" + }, + "Timeout": { + "$ref": "#/definitions/Timeout" + }, + "JobDefinitionName": { + "type": "string" + }, + "PropagateTags": { + "type": "boolean" + }, + "PlatformCapabilities": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "EksProperties": { + "$ref": "#/definitions/EksProperties" + }, + "Type": { + "type": "string" + }, + "NodeProperties": { + "$ref": "#/definitions/NodeProperties" + }, + "SchedulingPriority": { + "type": "integer" + }, + "ContainerProperties": { + "$ref": "#/definitions/ContainerProperties" + }, + "EcsProperties": { + "$ref": "#/definitions/EcsProperties" + }, + "Id": { + "type": "string" + }, + "RetryStrategy": { + "$ref": "#/definitions/RetryStrategy" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "NodeRangeProperty": { + "type": "object", + "additionalProperties": false, + "properties": { + "Container": { + "$ref": "#/definitions/ContainerProperties" + }, + "InstanceTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "TargetNodes": { + "type": "string" + }, + "EcsProperties": { + "$ref": "#/definitions/EcsProperties" + } + }, + "required": [ + "TargetNodes" + ] + }, + "Metadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "Labels": { + "type": "object" + } + } + }, + "EksContainerEnvironmentVariable": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "EfsVolumeConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileSystemId": { + "type": "string" + }, + "TransitEncryption": { + "type": "string" + }, + "RootDirectory": { + "type": "string" + }, + "TransitEncryptionPort": { + "type": "integer" + }, + "AuthorizationConfig": { + "$ref": "#/definitions/AuthorizationConfig" + } + }, + "required": [ + "FileSystemId" + ] + }, + "EksEmptyDir": { + "type": "object", + "additionalProperties": false, + "properties": { + "Medium": { + "type": "string" + }, + "SizeLimit": { + "type": "string" + } + } + }, + "LogConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretOptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Secret" + } + }, + "Options": { + "type": "object" + }, + "LogDriver": { + "type": "string" + } + }, + "required": [ + "LogDriver" + ] + }, + "VolumesHost": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourcePath": { + "type": "string" + } + } + }, + "RuntimePlatform": { + "type": "object", + "additionalProperties": false, + "properties": { + "OperatingSystemFamily": { + "type": "string" + }, + "CpuArchitecture": { + "type": "string" + } + } + }, + "Volumes": { + "type": "object", + "additionalProperties": false, + "properties": { + "Host": { + "$ref": "#/definitions/VolumesHost" + }, + "EfsVolumeConfiguration": { + "$ref": "#/definitions/EfsVolumeConfiguration" + }, + "Name": { + "type": "string" + } + } + }, + "NodeProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "MainNode": { + "type": "integer" + }, + "NodeRangeProperties": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/NodeRangeProperty" + } + }, + "NumNodes": { + "type": "integer" + } + }, + "required": [ + "MainNode", + "NodeRangeProperties", + "NumNodes" + ] + }, + "PodProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "InitContainers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EksContainer" + } + }, + "Volumes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EksVolume" + } + }, + "DnsPolicy": { + "type": "string" + }, + "Containers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EksContainer" + } + }, + "Metadata": { + "$ref": "#/definitions/Metadata" + }, + "ServiceAccountName": { + "type": "string" + }, + "HostNetwork": { + "type": "boolean" + }, + "ShareProcessNamespace": { + "type": "boolean" + } + } + }, + "Tmpfs": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContainerPath": { + "type": "string" + }, + "MountOptions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Size": { + "type": "integer" + } + }, + "required": [ + "Size", + "ContainerPath" + ] + }, + "TaskContainerDependency": { + "type": "object", + "additionalProperties": false, + "properties": { + "Condition": { + "type": "string" + }, + "ContainerName": { + "type": "string" + } + }, + "required": [ + "Condition", + "ContainerName" + ] + }, + "ContainerProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "RepositoryCredentials": { + "$ref": "#/definitions/RepositoryCredentials" + }, + "User": { + "type": "string" + }, + "Secrets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Secret" + } + }, + "Memory": { + "type": "integer" + }, + "Privileged": { + "type": "boolean" + }, + "LinuxParameters": { + "$ref": "#/definitions/LinuxParameters" + }, + "FargatePlatformConfiguration": { + "$ref": "#/definitions/FargatePlatformConfiguration" + }, + "JobRoleArn": { + "type": "string" + }, + "ReadonlyRootFilesystem": { + "type": "boolean" + }, + "Vcpus": { + "type": "integer" + }, + "Image": { + "type": "string" + }, + "ResourceRequirements": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ResourceRequirement" + } + }, + "LogConfiguration": { + "$ref": "#/definitions/LogConfiguration" + }, + "MountPoints": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MountPoints" + } + }, + "ExecutionRoleArn": { + "type": "string" + }, + "RuntimePlatform": { + "$ref": "#/definitions/RuntimePlatform" + }, + "Volumes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Volumes" + } + }, + "Command": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Environment": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Environment" + } + }, + "Ulimits": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Ulimit" + } + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + }, + "InstanceType": { + "type": "string" + }, + "EphemeralStorage": { + "$ref": "#/definitions/EphemeralStorage" + } + }, + "required": [ + "Image" + ] + }, + "EcsProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "TaskProperties": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EcsTaskProperties" + } + } + }, + "required": [ + "TaskProperties" + ] + }, + "AuthorizationConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Iam": { + "type": "string" + }, + "AccessPointId": { + "type": "string" + } + } + }, + "EksContainerResourceRequirements": { + "type": "object", + "additionalProperties": false, + "properties": { + "Requests": { + "type": "object" + }, + "Limits": { + "type": "object" + } + } + }, + "NetworkConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AssignPublicIp": { + "type": "string" + } + } + }, + "EcsTaskProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "PlatformVersion": { + "type": "string" + }, + "ExecutionRoleArn": { + "type": "string" + }, + "RuntimePlatform": { + "$ref": "#/definitions/RuntimePlatform" + }, + "TaskRoleArn": { + "type": "string" + }, + "IpcMode": { + "type": "string" + }, + "Volumes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Volumes" + } + }, + "Containers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TaskContainerProperties" + } + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + }, + "PidMode": { + "type": "string" + }, + "EphemeralStorage": { + "$ref": "#/definitions/EphemeralStorage" + } + } + }, + "EksContainerSecurityContext": { + "type": "object", + "additionalProperties": false, + "properties": { + "RunAsUser": { + "type": "integer" + }, + "RunAsGroup": { + "type": "integer" + }, + "RunAsNonRoot": { + "type": "boolean" + }, + "Privileged": { + "type": "boolean" + }, + "ReadOnlyRootFilesystem": { + "type": "boolean" + } + } + }, + "TaskContainerProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "RepositoryCredentials": { + "$ref": "#/definitions/RepositoryCredentials" + }, + "User": { + "type": "string" + }, + "Secrets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Secret" + } + }, + "Privileged": { + "type": "boolean" + }, + "LinuxParameters": { + "$ref": "#/definitions/LinuxParameters" + }, + "ReadonlyRootFilesystem": { + "type": "boolean" + }, + "Image": { + "type": "string" + }, + "LogConfiguration": { + "$ref": "#/definitions/LogConfiguration" + }, + "Essential": { + "type": "boolean" + }, + "ResourceRequirements": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ResourceRequirement" + } + }, + "Name": { + "type": "string" + }, + "MountPoints": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MountPoints" + } + }, + "DependsOn": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TaskContainerDependency" + } + }, + "Command": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Environment": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Environment" + } + }, + "Ulimits": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Ulimit" + } + } + }, + "required": [ + "Image" + ] + }, + "EksSecret": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretName": { + "type": "string" + }, + "Optional": { + "type": "boolean" + } + }, + "required": [ + "SecretName" + ] + }, + "RepositoryCredentials": { + "type": "object", + "additionalProperties": false, + "properties": { + "CredentialsParameter": { + "type": "string" + } + }, + "required": [ + "CredentialsParameter" + ] + }, + "EvaluateOnExit": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "type": "string" + }, + "OnStatusReason": { + "type": "string" + }, + "OnExitCode": { + "type": "string" + }, + "OnReason": { + "type": "string" + } + }, + "required": [ + "Action" + ] + }, + "Timeout": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttemptDurationSeconds": { + "type": "integer" + } + } + }, + "Device": { + "type": "object", + "additionalProperties": false, + "properties": { + "Permissions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "HostPath": { + "type": "string" + }, + "ContainerPath": { + "type": "string" + } + } + }, + "LinuxParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "Swappiness": { + "type": "integer" + }, + "Tmpfs": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tmpfs" + } + }, + "SharedMemorySize": { + "type": "integer" + }, + "Devices": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Device" + } + }, + "InitProcessEnabled": { + "type": "boolean" + }, + "MaxSwap": { + "type": "integer" + } + } + }, + "FargatePlatformConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "PlatformVersion": { + "type": "string" + } + } + }, + "Ulimit": { + "type": "object", + "additionalProperties": false, + "properties": { + "SoftLimit": { + "type": "integer" + }, + "HardLimit": { + "type": "integer" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "SoftLimit", + "HardLimit", + "Name" + ] + }, + "EksVolume": { + "type": "object", + "additionalProperties": false, + "properties": { + "Secret": { + "$ref": "#/definitions/EksSecret" + }, + "EmptyDir": { + "$ref": "#/definitions/EksEmptyDir" + }, + "HostPath": { + "$ref": "#/definitions/EksHostPath" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "EksContainerVolumeMount": { + "type": "object", + "additionalProperties": false, + "properties": { + "MountPath": { + "type": "string" + }, + "ReadOnly": { + "type": "boolean" + }, + "Name": { + "type": "string" + } + } + }, + "EksProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "PodProperties": { + "$ref": "#/definitions/PodProperties" + } + } + }, + "Secret": { + "type": "object", + "additionalProperties": false, + "properties": { + "ValueFrom": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ValueFrom", + "Name" + ] + }, + "MountPoints": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReadOnly": { + "type": "boolean" + }, + "SourceVolume": { + "type": "string" + }, + "ContainerPath": { + "type": "string" + } + } + }, + "EksHostPath": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + } + } + }, + "Environment": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "ResourceRequirement": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Type": { + "type": "string" + } + } + }, + "EphemeralStorage": { + "type": "object", + "additionalProperties": false, + "properties": { + "SizeInGiB": { + "type": "integer" + } + }, + "required": [ + "SizeInGiB" + ] + }, + "RetryStrategy": { + "type": "object", + "additionalProperties": false, + "properties": { + "EvaluateOnExit": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EvaluateOnExit" + } + }, + "Attempts": { + "type": "integer" + } + } + }, + "EksContainer": { + "type": "object", + "additionalProperties": false, + "properties": { + "Args": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "VolumeMounts": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EksContainerVolumeMount" + } + }, + "ImagePullPolicy": { + "type": "string" + }, + "Command": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SecurityContext": { + "$ref": "#/definitions/EksContainerSecurityContext" + }, + "Resources": { + "$ref": "#/definitions/EksContainerResourceRequirements" + }, + "Image": { + "type": "string" + }, + "Env": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EksContainerEnvironmentVariable" + } + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Image" + ] + } + }, + "required": [ + "Type" + ], + "createOnlyProperties": [ + "/properties/Tags", + "/properties/JobDefinitionName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/batch/jobqueue.json b/internal/aws/cfn/schemas/aws/batch/jobqueue.json new file mode 100644 index 00000000..c5e68b90 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/batch/jobqueue.json @@ -0,0 +1,165 @@ +{ + "typeName": "AWS::Batch::JobQueue", + "description": "Resource Type definition for AWS::Batch::JobQueue", + "additionalProperties": false, + "definitions": { + "ResourceArn": { + "type": "string", + "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}" + }, + "ComputeEnvironmentOrder": { + "type": "object", + "additionalProperties": false, + "properties": { + "ComputeEnvironment": { + "type": "string" + }, + "Order": { + "type": "integer" + } + }, + "required": [ + "ComputeEnvironment", + "Order" + ] + }, + "JobStateTimeLimitAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "type": "string", + "enum": [ + "CANCEL" + ] + }, + "MaxTimeSeconds": { + "type": "integer", + "minimum": 600, + "maximum": 86400 + }, + "Reason": { + "type": "string" + }, + "State": { + "type": "string", + "enum": [ + "RUNNABLE" + ] + } + }, + "required": [ + "Action", + "MaxTimeSeconds", + "Reason", + "State" + ] + } + }, + "properties": { + "JobQueueName": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "JobQueueArn": { + "$ref": "#/definitions/ResourceArn" + }, + "ComputeEnvironmentOrder": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ComputeEnvironmentOrder" + } + }, + "JobStateTimeLimitActions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/JobStateTimeLimitAction" + } + }, + "Priority": { + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "State": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "SchedulingPolicyArn": { + "$ref": "#/definitions/ResourceArn" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + ".*": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "ComputeEnvironmentOrder", + "Priority" + ], + "primaryIdentifier": [ + "/properties/JobQueueArn" + ], + "createOnlyProperties": [ + "/properties/Tags", + "/properties/JobQueueName" + ], + "readOnlyProperties": [ + "/properties/JobQueueArn" + ], + "handlers": { + "create": { + "permissions": [ + "Batch:CreateJobQueue", + "Batch:TagResource", + "Batch:DescribeJobQueues" + ] + }, + "read": { + "permissions": [ + "Batch:DescribeJobQueues" + ] + }, + "update": { + "permissions": [ + "Batch:DescribeJobQueues", + "Batch:UpdateJobQueue", + "Batch:TagResource", + "Batch:UnTagResource" + ] + }, + "delete": { + "permissions": [ + "Batch:UpdateJobQueue", + "Batch:DescribeJobQueues", + "Batch:DeleteJobQueue" + ] + }, + "list": { + "permissions": [ + "Batch:DescribeJobQueues" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/batch/schedulingpolicy.json b/internal/aws/cfn/schemas/aws/batch/schedulingpolicy.json new file mode 100644 index 00000000..cda63fba --- /dev/null +++ b/internal/aws/cfn/schemas/aws/batch/schedulingpolicy.json @@ -0,0 +1,125 @@ +{ + "typeName": "AWS::Batch::SchedulingPolicy", + "description": "Resource Type schema for AWS::Batch::SchedulingPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-batch.git", + "definitions": { + "ResourceArn": { + "description": "ARN of the Scheduling Policy.", + "type": "string" + }, + "FairsharePolicy": { + "description": "Fair Share Policy for the Job Queue.", + "type": "object", + "properties": { + "ShareDecaySeconds": { + "type": "number", + "minimum": 0, + "maximum": 604800 + }, + "ComputeReservation": { + "type": "number", + "minimum": 0, + "maximum": 99 + }, + "ShareDistribution": { + "description": "List of Share Attributes", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ShareAttributes" + } + } + }, + "required": [], + "additionalProperties": false + }, + "ShareAttributes": { + "type": "object", + "properties": { + "ShareIdentifier": { + "type": "string" + }, + "WeightFactor": { + "type": "number", + "minimum": 0, + "maximum": 1000 + } + }, + "required": [], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of Scheduling Policy.", + "type": "string", + "pattern": "" + }, + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "FairsharePolicy": { + "$ref": "#/definitions/FairsharePolicy" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + ".*": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "Batch:CreateSchedulingPolicy", + "Batch:TagResource" + ] + }, + "read": { + "permissions": [ + "Batch:DescribeSchedulingPolicies" + ] + }, + "update": { + "permissions": [ + "Batch:UpdateSchedulingPolicy", + "Batch:TagResource", + "Batch:UnTagResource" + ] + }, + "delete": { + "permissions": [ + "Batch:DescribeSchedulingPolicies", + "Batch:DeleteSchedulingPolicy" + ] + }, + "list": { + "permissions": [ + "Batch:ListSchedulingPolicies", + "Batch:DescribeSchedulingPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/billingconductor/billinggroup.json b/internal/aws/cfn/schemas/aws/billingconductor/billinggroup.json new file mode 100644 index 00000000..d370b569 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/billingconductor/billinggroup.json @@ -0,0 +1,199 @@ +{ + "typeName": "AWS::BillingConductor::BillingGroup", + "description": "A billing group is a set of linked account which belong to the same end customer. It can be seen as a virtual consolidated billing family.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-billing-conductor.git", + "definitions": { + "BillingGroupStatus": { + "type": "string", + "enum": [ + "ACTIVE", + "PRIMARY_ACCOUNT_MISSING" + ] + }, + "ComputationPreference": { + "type": "object", + "additionalProperties": false, + "properties": { + "PricingPlanArn": { + "description": "ARN of the attached pricing plan", + "type": "string", + "pattern": "arn:aws(-cn)?:billingconductor::[0-9]{12}:pricingplan/[a-zA-Z0-9]{10}" + } + }, + "required": [ + "PricingPlanArn" + ] + }, + "AccountGrouping": { + "type": "object", + "additionalProperties": false, + "properties": { + "LinkedAccountIds": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "[0-9]{12}" + }, + "minItems": 1 + }, + "AutoAssociate": { + "type": "boolean" + } + }, + "required": [ + "LinkedAccountIds" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "description": "Billing Group ARN", + "type": "string", + "pattern": "arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/?[0-9]{12}" + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_\\+=\\.\\-@]+" + }, + "Description": { + "type": "string", + "maxLength": 1024 + }, + "PrimaryAccountId": { + "description": "This account will act as a virtual payer account of the billing group", + "type": "string", + "pattern": "[0-9]{12}" + }, + "ComputationPreference": { + "$ref": "#/definitions/ComputationPreference" + }, + "AccountGrouping": { + "$ref": "#/definitions/AccountGrouping" + }, + "Size": { + "description": "Number of accounts in the billing group", + "type": "integer" + }, + "Status": { + "$ref": "#/definitions/BillingGroupStatus" + }, + "StatusReason": { + "type": "string" + }, + "CreationTime": { + "description": "Creation timestamp in UNIX epoch time format", + "type": "integer" + }, + "LastModifiedTime": { + "description": "Latest modified timestamp in UNIX epoch time format", + "type": "integer" + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "AccountGrouping", + "PrimaryAccountId", + "ComputationPreference" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Size", + "/properties/Status", + "/properties/StatusReason", + "/properties/CreationTime", + "/properties/LastModifiedTime" + ], + "createOnlyProperties": [ + "/properties/PrimaryAccountId" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "billingconductor:CreateBillingGroup", + "billingconductor:AssociateAccounts", + "billingconductor:ListBillingGroups", + "billingconductor:TagResource", + "billingconductor:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "billingconductor:ListBillingGroups", + "billingconductor:ListAccountAssociations", + "organizations:ListAccounts", + "billingconductor:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "billingconductor:ListBillingGroups", + "billingconductor:ListAccountAssociations", + "organizations:ListAccounts", + "billingconductor:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "billingconductor:UpdateBillingGroup", + "billingconductor:ListAccountAssociations", + "organizations:ListAccounts", + "billingconductor:AssociateAccounts", + "billingconductor:DisassociateAccounts", + "billingconductor:ListBillingGroups", + "billingconductor:TagResource", + "billingconductor:UntagResource" + ] + }, + "delete": { + "permissions": [ + "billingconductor:DeleteBillingGroup", + "billingconductor:ListBillingGroups", + "billingconductor:UntagResource", + "billingconductor:UpdateBillingGroup" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/billingconductor/customlineitem.json b/internal/aws/cfn/schemas/aws/billingconductor/customlineitem.json new file mode 100644 index 00000000..ac986e0f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/billingconductor/customlineitem.json @@ -0,0 +1,298 @@ +{ + "typeName": "AWS::BillingConductor::CustomLineItem", + "description": "A custom line item is an one time charge that is applied to a specific billing group's bill.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-billing-conductor.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "Type": { + "type": "string", + "enum": [ + "FEE", + "CREDIT" + ] + }, + "CustomLineItemPercentageChargeDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "ChildAssociatedResources": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "(arn:aws(-cn)?:billingconductor::[0-9]{12}:(customlineitem|billinggroup)/)?[a-zA-Z0-9]{10,12}" + } + }, + "PercentageValue": { + "type": "number", + "minimum": 0, + "maximum": 10000 + } + }, + "required": [ + "PercentageValue" + ] + }, + "CustomLineItemFlatChargeDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "ChargeValue": { + "type": "number", + "minimum": 0, + "maximum": 1000000 + } + }, + "required": [ + "ChargeValue" + ] + }, + "LineItemFilters": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LineItemFilter" + } + }, + "LineItemFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attribute": { + "type": "string", + "enum": [ + "LINE_ITEM_TYPE" + ] + }, + "MatchOption": { + "type": "string", + "enum": [ + "NOT_EQUAL" + ] + }, + "Values": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LineItemFilterValue" + } + } + }, + "required": [ + "Attribute", + "MatchOption", + "Values" + ] + }, + "LineItemFilterValue": { + "type": "string", + "enum": [ + "SAVINGS_PLAN_NEGATION" + ] + }, + "CustomLineItemChargeDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "Flat": { + "$ref": "#/definitions/CustomLineItemFlatChargeDetails" + }, + "Percentage": { + "$ref": "#/definitions/CustomLineItemPercentageChargeDetails" + }, + "Type": { + "$ref": "#/definitions/Type" + }, + "LineItemFilters": { + "$ref": "#/definitions/LineItemFilters" + } + }, + "required": [ + "Type" + ] + }, + "InclusiveStartBillingPeriod": { + "type": "string", + "pattern": "\\d{4}-(0?[1-9]|1[012])" + }, + "ExclusiveEndBillingPeriod": { + "type": "string", + "pattern": "\\d{4}-(0?[1-9]|1[012])" + }, + "BillingPeriodRange": { + "type": "object", + "additionalProperties": false, + "properties": { + "InclusiveStartBillingPeriod": { + "$ref": "#/definitions/InclusiveStartBillingPeriod" + }, + "ExclusiveEndBillingPeriod": { + "$ref": "#/definitions/ExclusiveEndBillingPeriod" + } + } + } + }, + "properties": { + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_\\+=\\.\\-@]+" + }, + "Description": { + "type": "string", + "maxLength": 255 + }, + "CustomLineItemChargeDetails": { + "$ref": "#/definitions/CustomLineItemChargeDetails" + }, + "BillingGroupArn": { + "description": "Billing Group ARN", + "type": "string", + "pattern": "arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/?[0-9]{12}" + }, + "BillingPeriodRange": { + "$ref": "#/definitions/BillingPeriodRange" + }, + "Arn": { + "description": "ARN", + "type": "string", + "pattern": "(arn:aws(-cn)?:billingconductor::[0-9]{12}:customlineitem/)?[a-zA-Z0-9]{10}" + }, + "CreationTime": { + "description": "Creation timestamp in UNIX epoch time format", + "type": "integer" + }, + "LastModifiedTime": { + "description": "Latest modified timestamp in UNIX epoch time format", + "type": "integer" + }, + "AssociationSize": { + "description": "Number of source values associated to this custom line item", + "type": "integer" + }, + "ProductCode": { + "type": "string", + "minLength": 1, + "maxLength": 29 + }, + "CurrencyCode": { + "type": "string", + "enum": [ + "USD", + "CNY" + ] + }, + "AccountId": { + "type": "string", + "description": "The account which this custom line item will be charged to", + "pattern": "[0-9]{12}" + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "BillingGroupArn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/LastModifiedTime", + "/properties/AssociationSize", + "/properties/CurrencyCode", + "/properties/ProductCode" + ], + "createOnlyProperties": [ + "/properties/BillingGroupArn", + "/properties/AccountId", + "/properties/BillingPeriodRange/InclusiveStartBillingPeriod", + "/properties/BillingPeriodRange/ExclusiveEndBillingPeriod", + "/properties/CustomLineItemChargeDetails/Type" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "billingconductor:CreateCustomLineItem", + "billingconductor:BatchAssociateResourcesToCustomLineItem", + "billingconductor:ListCustomLineItems", + "billingconductor:TagResource", + "billingconductor:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "billingconductor:ListCustomLineItems", + "billingconductor:ListCustomLineItemVersions", + "billingconductor:ListResourcesAssociatedToCustomLineItem", + "billingconductor:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "billingconductor:ListCustomLineItems", + "billingconductor:ListResourcesAssociatedToCustomLineItem", + "billingconductor:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "billingconductor:UpdateCustomLineItem", + "billingconductor:ListCustomLineItems", + "billingconductor:ListResourcesAssociatedToCustomLineItem", + "billingconductor:BatchAssociateResourcesToCustomLineItem", + "billingconductor:BatchDisassociateResourcesFromCustomLineItem", + "billingconductor:TagResource", + "billingconductor:UntagResource" + ] + }, + "delete": { + "permissions": [ + "billingconductor:DeleteCustomLineItem", + "billingconductor:ListCustomLineItems", + "billingconductor:BatchDisassociateResourcesFromCustomLineItem", + "billingconductor:ListResourcesAssociatedToCustomLineItem", + "billingconductor:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/billingconductor/pricingplan.json b/internal/aws/cfn/schemas/aws/billingconductor/pricingplan.json new file mode 100644 index 00000000..03b1ed67 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/billingconductor/pricingplan.json @@ -0,0 +1,139 @@ +{ + "typeName": "AWS::BillingConductor::PricingPlan", + "description": "Pricing Plan enables you to customize your billing details consistent with the usage that accrues in each of your billing groups.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-billing-conductor.git", + "definitions": { + "PricingRuleArn": { + "description": "Pricing Rule ARN", + "type": "string", + "pattern": "arn:aws(-cn)?:billingconductor::[0-9]{12}:pricingrule/[a-zA-Z0-9]{10}" + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "description": "Pricing Plan ARN", + "type": "string", + "pattern": "arn:aws(-cn)?:billingconductor::[0-9]{12}:pricingplan/[a-zA-Z0-9]{10}" + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_\\+=\\.\\-@]+" + }, + "PricingRuleArns": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PricingRuleArn" + } + }, + "Size": { + "type": "integer", + "description": "Number of associated pricing rules" + }, + "Description": { + "type": "string", + "maxLength": 1024 + }, + "CreationTime": { + "description": "Creation timestamp in UNIX epoch time format", + "type": "integer" + }, + "LastModifiedTime": { + "description": "Latest modified timestamp in UNIX epoch time format", + "type": "integer" + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Size", + "/properties/CreationTime", + "/properties/LastModifiedTime" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "billingconductor:CreatePricingPlan", + "billingconductor:AssociatePricingRules", + "billingconductor:ListPricingPlans", + "billingconductor:TagResource", + "billingconductor:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "billingconductor:ListPricingPlans", + "billingconductor:ListPricingRulesAssociatedToPricingPlan", + "billingconductor:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "billingconductor:ListPricingPlans", + "billingconductor:ListPricingRulesAssociatedToPricingPlan", + "billingconductor:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "billingconductor:ListPricingPlans", + "billingconductor:UpdatePricingPlan", + "billingconductor:ListPricingRulesAssociatedToPricingPlan", + "billingconductor:AssociatePricingRules", + "billingconductor:DisassociatePricingRules", + "billingconductor:TagResource", + "billingconductor:UntagResource" + ] + }, + "delete": { + "permissions": [ + "billingconductor:ListPricingPlans", + "billingconductor:DeletePricingPlan", + "billingconductor:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/billingconductor/pricingrule.json b/internal/aws/cfn/schemas/aws/billingconductor/pricingrule.json new file mode 100644 index 00000000..288a15d0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/billingconductor/pricingrule.json @@ -0,0 +1,210 @@ +{ + "typeName": "AWS::BillingConductor::PricingRule", + "description": "A markup/discount that is defined for a specific set of services that can later be associated with a pricing plan.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-billing-conductor.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "FreeTier": { + "description": "The possible customizable free tier configurations.", + "type": "object", + "additionalProperties": false, + "properties": { + "Activated": { + "type": "boolean" + } + }, + "required": [ + "Activated" + ] + } + }, + "properties": { + "Arn": { + "description": "Pricing rule ARN", + "type": "string", + "pattern": "arn:aws(-cn)?:billingconductor::[0-9]{12}:pricingrule/[a-zA-Z0-9]{10}" + }, + "Name": { + "description": "Pricing rule name", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_\\+=\\.\\-@]+" + }, + "Description": { + "description": "Pricing rule description", + "type": "string", + "maxLength": 1024 + }, + "Scope": { + "description": "A term used to categorize the granularity of a Pricing Rule.", + "type": "string", + "enum": [ + "GLOBAL", + "SERVICE", + "BILLING_ENTITY", + "SKU" + ] + }, + "Type": { + "description": "One of MARKUP, DISCOUNT or TIERING that describes the behaviour of the pricing rule.", + "type": "string", + "enum": [ + "MARKUP", + "DISCOUNT", + "TIERING" + ] + }, + "ModifierPercentage": { + "description": "Pricing rule modifier percentage", + "type": "number", + "minimum": 0 + }, + "Service": { + "description": "The service which a pricing rule is applied on", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9\\.\\-]+" + }, + "BillingEntity": { + "description": "The seller of services provided by AWS, their affiliates, or third-party providers selling services via AWS Marketplaces. Supported billing entities are AWS, AWS Marketplace, and AISPL.", + "type": "string", + "enum": [ + "AWS", + "AWS Marketplace", + "AISPL" + ] + }, + "Tiering": { + "description": "The set of tiering configurations for the pricing rule.", + "type": "object", + "additionalProperties": false, + "properties": { + "FreeTier": { + "$ref": "#/definitions/FreeTier" + } + } + }, + "UsageType": { + "description": "The UsageType which a SKU pricing rule is modifying", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^\\S+$" + }, + "Operation": { + "description": "The Operation which a SKU pricing rule is modifying", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^\\S+$" + }, + "AssociatedPricingPlanCount": { + "description": "The number of pricing plans associated with pricing rule", + "type": "integer", + "minimum": 0 + }, + "CreationTime": { + "description": "Creation timestamp in UNIX epoch time format", + "type": "integer" + }, + "LastModifiedTime": { + "description": "Latest modified timestamp in UNIX epoch time format", + "type": "integer" + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "Scope", + "Type" + ], + "createOnlyProperties": [ + "/properties/Scope", + "/properties/Service", + "/properties/BillingEntity", + "/properties/UsageType", + "/properties/Operation" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/AssociatedPricingPlanCount", + "/properties/CreationTime", + "/properties/LastModifiedTime" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "billingconductor:CreatePricingRule", + "billingconductor:ListPricingRules", + "billingconductor:TagResource", + "billingconductor:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "billingconductor:ListPricingRules", + "billingconductor:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "billingconductor:UpdatePricingRule", + "billingconductor:ListPricingRules", + "billingconductor:TagResource", + "billingconductor:UntagResource" + ] + }, + "delete": { + "permissions": [ + "billingconductor:DeletePricingRule", + "billingconductor:ListPricingRules", + "billingconductor:UntagResource" + ] + }, + "list": { + "permissions": [ + "billingconductor:ListPricingRules", + "billingconductor:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/budgets/budget.json b/internal/aws/cfn/schemas/aws/budgets/budget.json new file mode 100644 index 00000000..5b031da5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/budgets/budget.json @@ -0,0 +1,224 @@ +{ + "typeName": "AWS::Budgets::Budget", + "description": "Resource Type definition for AWS::Budgets::Budget", + "additionalProperties": false, + "properties": { + "NotificationsWithSubscribers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/NotificationWithSubscribers" + } + }, + "Budget": { + "$ref": "#/definitions/BudgetData" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "HistoricalOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "BudgetAdjustmentPeriod": { + "type": "integer" + } + }, + "required": [ + "BudgetAdjustmentPeriod" + ] + }, + "Subscriber": { + "type": "object", + "additionalProperties": false, + "properties": { + "Address": { + "type": "string" + }, + "SubscriptionType": { + "type": "string" + } + }, + "required": [ + "SubscriptionType", + "Address" + ] + }, + "BudgetData": { + "type": "object", + "additionalProperties": false, + "properties": { + "BudgetLimit": { + "$ref": "#/definitions/Spend" + }, + "TimePeriod": { + "$ref": "#/definitions/TimePeriod" + }, + "AutoAdjustData": { + "$ref": "#/definitions/AutoAdjustData" + }, + "TimeUnit": { + "type": "string" + }, + "PlannedBudgetLimits": { + "type": "object" + }, + "CostFilters": { + "type": "object" + }, + "BudgetName": { + "type": "string" + }, + "CostTypes": { + "$ref": "#/definitions/CostTypes" + }, + "BudgetType": { + "type": "string" + } + }, + "required": [ + "TimeUnit", + "BudgetType" + ] + }, + "TimePeriod": { + "type": "object", + "additionalProperties": false, + "properties": { + "Start": { + "type": "string" + }, + "End": { + "type": "string" + } + } + }, + "Spend": { + "type": "object", + "additionalProperties": false, + "properties": { + "Unit": { + "type": "string" + }, + "Amount": { + "type": "number" + } + }, + "required": [ + "Amount", + "Unit" + ] + }, + "NotificationWithSubscribers": { + "type": "object", + "additionalProperties": false, + "properties": { + "Subscribers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Subscriber" + } + }, + "Notification": { + "$ref": "#/definitions/Notification" + } + }, + "required": [ + "Subscribers", + "Notification" + ] + }, + "AutoAdjustData": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutoAdjustType": { + "type": "string" + }, + "HistoricalOptions": { + "$ref": "#/definitions/HistoricalOptions" + } + }, + "required": [ + "AutoAdjustType" + ] + }, + "Notification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ComparisonOperator": { + "type": "string" + }, + "NotificationType": { + "type": "string" + }, + "Threshold": { + "type": "number" + }, + "ThresholdType": { + "type": "string" + } + }, + "required": [ + "ComparisonOperator", + "NotificationType", + "Threshold" + ] + }, + "CostTypes": { + "type": "object", + "additionalProperties": false, + "properties": { + "IncludeSupport": { + "type": "boolean" + }, + "IncludeOtherSubscription": { + "type": "boolean" + }, + "IncludeTax": { + "type": "boolean" + }, + "IncludeSubscription": { + "type": "boolean" + }, + "UseBlended": { + "type": "boolean" + }, + "IncludeUpfront": { + "type": "boolean" + }, + "IncludeDiscount": { + "type": "boolean" + }, + "IncludeCredit": { + "type": "boolean" + }, + "IncludeRecurring": { + "type": "boolean" + }, + "UseAmortized": { + "type": "boolean" + }, + "IncludeRefund": { + "type": "boolean" + } + } + } + }, + "required": [ + "Budget" + ], + "createOnlyProperties": [ + "/properties/NotificationsWithSubscribers" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/budgets/budgetsaction.json b/internal/aws/cfn/schemas/aws/budgets/budgetsaction.json new file mode 100644 index 00000000..8859dd60 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/budgets/budgetsaction.json @@ -0,0 +1,246 @@ +{ + "typeName": "AWS::Budgets::BudgetsAction", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Subscriber": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "SNS", + "EMAIL" + ] + }, + "Address": { + "type": "string" + } + }, + "required": [ + "Type", + "Address" + ], + "additionalProperties": false + }, + "ActionThreshold": { + "type": "object", + "properties": { + "Value": { + "type": "number" + }, + "Type": { + "type": "string", + "enum": [ + "PERCENTAGE", + "ABSOLUTE_VALUE" + ] + } + }, + "required": [ + "Value", + "Type" + ], + "additionalProperties": false + }, + "IamActionDefinition": { + "type": "object", + "properties": { + "PolicyArn": { + "type": "string" + }, + "Roles": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 100 + }, + "Groups": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 100 + }, + "Users": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 100 + } + }, + "required": [ + "PolicyArn" + ], + "additionalProperties": false + }, + "ScpActionDefinition": { + "type": "object", + "properties": { + "PolicyId": { + "type": "string" + }, + "TargetIds": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 100 + } + }, + "required": [ + "PolicyId", + "TargetIds" + ], + "additionalProperties": false + }, + "SsmActionDefinition": { + "type": "object", + "properties": { + "Subtype": { + "type": "string", + "enum": [ + "STOP_EC2_INSTANCES", + "STOP_RDS_INSTANCES" + ] + }, + "Region": { + "type": "string" + }, + "InstanceIds": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 100 + } + }, + "required": [ + "Subtype", + "Region", + "InstanceIds" + ], + "additionalProperties": false + }, + "Definition": { + "type": "object", + "properties": { + "IamActionDefinition": { + "$ref": "#/definitions/IamActionDefinition" + }, + "ScpActionDefinition": { + "$ref": "#/definitions/ScpActionDefinition" + }, + "SsmActionDefinition": { + "$ref": "#/definitions/SsmActionDefinition" + } + }, + "additionalProperties": false + } + }, + "properties": { + "ActionId": { + "type": "string" + }, + "BudgetName": { + "type": "string" + }, + "NotificationType": { + "type": "string", + "enum": [ + "ACTUAL", + "FORECASTED" + ] + }, + "ActionType": { + "type": "string", + "enum": [ + "APPLY_IAM_POLICY", + "APPLY_SCP_POLICY", + "RUN_SSM_DOCUMENTS" + ] + }, + "ActionThreshold": { + "$ref": "#/definitions/ActionThreshold" + }, + "ExecutionRoleArn": { + "type": "string" + }, + "ApprovalModel": { + "type": "string", + "enum": [ + "AUTOMATIC", + "MANUAL" + ] + }, + "Subscribers": { + "type": "array", + "items": { + "$ref": "#/definitions/Subscriber" + }, + "maxItems": 11, + "minItems": 1 + }, + "Definition": { + "$ref": "#/definitions/Definition" + } + }, + "additionalProperties": false, + "required": [ + "BudgetName", + "NotificationType", + "ActionType", + "ActionThreshold", + "ExecutionRoleArn", + "Definition", + "Subscribers" + ], + "readOnlyProperties": [ + "/properties/ActionId" + ], + "createOnlyProperties": [ + "/properties/ActionType", + "/properties/BudgetName" + ], + "primaryIdentifier": [ + "/properties/ActionId", + "/properties/BudgetName" + ], + "handlers": { + "create": { + "permissions": [ + "budgets:CreateBudgetAction", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "budgets:DescribeBudgetAction" + ] + }, + "update": { + "permissions": [ + "budgets:UpdateBudgetAction", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "budgets:DeleteBudgetAction" + ] + }, + "list": { + "permissions": [ + "budgets:DescribeBudgetActionsForAccount", + "budgets:DescribeBudgetActionsForBudget" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cassandra/keyspace.json b/internal/aws/cfn/schemas/aws/cassandra/keyspace.json new file mode 100644 index 00000000..267c7e1e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cassandra/keyspace.json @@ -0,0 +1,156 @@ +{ + "typeName": "AWS::Cassandra::Keyspace", + "description": "Resource schema for AWS::Cassandra::Keyspace", + "properties": { + "KeyspaceName": { + "description": "Name for Cassandra keyspace", + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$" + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + }, + "ReplicationSpecification": { + "$ref": "#/definitions/ReplicationSpecification" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ReplicationSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReplicationStrategy": { + "type": "string", + "enum": [ + "SINGLE_REGION", + "MULTI_REGION" + ] + }, + "RegionList": { + "$ref": "#/definitions/RegionList" + } + }, + "default": { + "properties": { + "ReplicationStrategy": { + "type": "string", + "const": "SINGLE_REGION" + } + } + }, + "dependencies": { + "RegionList": [ + "ReplicationStrategy" + ] + } + }, + "RegionList": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ap-northeast-1", + "ap-northeast-2", + "ap-south-1", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "eu-central-1", + "eu-north-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2" + ] + }, + "uniqueItems": true, + "insertionOrder": false, + "minItems": 2, + "maxItems": 6 + } + }, + "additionalProperties": false, + "required": [], + "createOnlyProperties": [ + "/properties/ReplicationSpecification", + "/properties/KeyspaceName" + ], + "primaryIdentifier": [ + "/properties/KeyspaceName" + ], + "handlers": { + "create": { + "permissions": [ + "cassandra:Create", + "cassandra:CreateMultiRegionResource", + "cassandra:Select", + "cassandra:SelectMultiRegionResource", + "cassandra:TagResource", + "cassandra:TagMultiRegionResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "cassandra:Select", + "cassandra:SelectMultiRegionResource" + ] + }, + "update": { + "permissions": [ + "cassandra:Alter", + "cassandra:AlterMultiRegionResource", + "cassandra:Select", + "cassandra:SelectMultiRegionResource", + "cassandra:TagResource", + "cassandra:TagMultiRegionResource", + "cassandra:UntagResource", + "cassandra:UntagMultiRegionResource" + ] + }, + "delete": { + "permissions": [ + "cassandra:Drop", + "cassandra:DropMultiRegionResource", + "cassandra:Select", + "cassandra:SelectMultiRegionResource" + ] + }, + "list": { + "permissions": [ + "cassandra:Select", + "cassandra:SelectMultiRegionResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cassandra/table.json b/internal/aws/cfn/schemas/aws/cassandra/table.json new file mode 100644 index 00000000..4b4dc0b8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cassandra/table.json @@ -0,0 +1,425 @@ +{ + "typeName": "AWS::Cassandra::Table", + "description": "Resource schema for AWS::Cassandra::Table", + "definitions": { + "Column": { + "type": "object", + "properties": { + "ColumnName": { + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$" + }, + "ColumnType": { + "type": "string" + } + }, + "required": [ + "ColumnName", + "ColumnType" + ], + "additionalProperties": false + }, + "ClusteringKeyColumn": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/Column" + }, + "OrderBy": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + } + }, + "additionalProperties": false, + "required": [ + "Column" + ] + }, + "ProvisionedThroughput": { + "description": "Throughput for the specified table, which consists of values for ReadCapacityUnits and WriteCapacityUnits", + "type": "object", + "properties": { + "ReadCapacityUnits": { + "type": "integer", + "minimum": 1 + }, + "WriteCapacityUnits": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false, + "required": [ + "ReadCapacityUnits", + "WriteCapacityUnits" + ] + }, + "Mode": { + "description": "Capacity mode for the specified table", + "type": "string", + "enum": [ + "PROVISIONED", + "ON_DEMAND" + ], + "default": "ON_DEMAND" + }, + "BillingMode": { + "type": "object", + "properties": { + "Mode": { + "$ref": "#/definitions/Mode" + }, + "ProvisionedThroughput": { + "$ref": "#/definitions/ProvisionedThroughput" + } + }, + "required": [ + "Mode" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to apply to the resource", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "EncryptionSpecification": { + "description": "Represents the settings used to enable server-side encryption", + "type": "object", + "properties": { + "EncryptionType": { + "$ref": "#/definitions/EncryptionType" + }, + "KmsKeyIdentifier": { + "$ref": "#/definitions/KmsKeyIdentifier" + } + }, + "required": [ + "EncryptionType" + ], + "additionalProperties": false + }, + "EncryptionType": { + "description": "Server-side encryption type", + "type": "string", + "enum": [ + "AWS_OWNED_KMS_KEY", + "CUSTOMER_MANAGED_KMS_KEY" + ], + "default": "AWS_OWNED_KMS_KEY" + }, + "KmsKeyIdentifier": { + "description": "The AWS KMS customer master key (CMK) that should be used for the AWS KMS encryption. To specify a CMK, use its key ID, Amazon Resource Name (ARN), alias name, or alias ARN. ", + "type": "string" + }, + "AutoScalingSpecification": { + "description": "Represents the read and write settings used for AutoScaling.", + "type": "object", + "properties": { + "WriteCapacityAutoScaling": { + "$ref": "#/definitions/AutoScalingSetting" + }, + "ReadCapacityAutoScaling": { + "$ref": "#/definitions/AutoScalingSetting" + } + }, + "additionalProperties": false + }, + "AutoScalingSetting": { + "description": "Represents configuration for auto scaling.", + "type": "object", + "properties": { + "AutoScalingDisabled": { + "type": "boolean", + "default": false + }, + "MinimumUnits": { + "type": "integer", + "minimum": 1 + }, + "MaximumUnits": { + "type": "integer", + "minimum": 1 + }, + "ScalingPolicy": { + "$ref": "#/definitions/ScalingPolicy" + } + }, + "additionalProperties": false + }, + "ScalingPolicy": { + "description": "Represents scaling policy.", + "type": "object", + "properties": { + "TargetTrackingScalingPolicyConfiguration": { + "$ref": "#/definitions/TargetTrackingScalingPolicyConfiguration" + } + }, + "additionalProperties": false + }, + "TargetTrackingScalingPolicyConfiguration": { + "description": "Represents configuration for target tracking scaling policy.", + "type": "object", + "properties": { + "DisableScaleIn": { + "type": "boolean", + "default": "false" + }, + "ScaleInCooldown": { + "type": "integer", + "default": 0 + }, + "ScaleOutCooldown": { + "type": "integer", + "default": 0 + }, + "TargetValue": { + "type": "integer" + } + }, + "required": [ + "TargetValue" + ], + "additionalProperties": false + }, + "ReplicaSpecification": { + "description": "Represents replica specifications.", + "type": "object", + "properties": { + "Region": { + "type": "string", + "minLength": 2, + "maxLength": 25 + }, + "ReadCapacityUnits": { + "type": "integer" + }, + "ReadCapacityAutoScaling": { + "$ref": "#/definitions/AutoScalingSetting" + } + }, + "required": [ + "Region" + ], + "additionalProperties": false + } + }, + "properties": { + "KeyspaceName": { + "description": "Name for Cassandra keyspace", + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$" + }, + "TableName": { + "description": "Name for Cassandra table", + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$" + }, + "RegularColumns": { + "description": "Non-key columns of the table", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Column" + } + }, + "PartitionKeyColumns": { + "description": "Partition key columns of the table", + "type": "array", + "minItems": 1, + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Column" + } + }, + "ClusteringKeyColumns": { + "description": "Clustering key columns of the table", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ClusteringKeyColumn" + } + }, + "BillingMode": { + "$ref": "#/definitions/BillingMode" + }, + "PointInTimeRecoveryEnabled": { + "description": "Indicates whether point in time recovery is enabled (true) or disabled (false) on the table", + "type": "boolean" + }, + "ClientSideTimestampsEnabled": { + "description": "Indicates whether client side timestamps are enabled (true) or disabled (false) on the table. False by default, once it is enabled it cannot be disabled again.", + "type": "boolean" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + }, + "DefaultTimeToLive": { + "description": "Default TTL (Time To Live) in seconds, where zero is disabled. If the value is greater than zero, TTL is enabled for the entire table and an expiration timestamp is added to each column.", + "type": "integer", + "minimum": 0 + }, + "EncryptionSpecification": { + "$ref": "#/definitions/EncryptionSpecification" + }, + "AutoScalingSpecifications": { + "$ref": "#/definitions/AutoScalingSpecification" + }, + "ReplicaSpecifications": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ReplicaSpecification" + } + } + }, + "additionalProperties": false, + "required": [ + "KeyspaceName", + "PartitionKeyColumns" + ], + "createOnlyProperties": [ + "/properties/KeyspaceName", + "/properties/TableName", + "/properties/PartitionKeyColumns", + "/properties/ClusteringKeyColumns", + "/properties/ClientSideTimestampsEnabled" + ], + "writeOnlyProperties": [ + "/properties/AutoScalingSpecifications", + "/properties/ReplicaSpecifications" + ], + "primaryIdentifier": [ + "/properties/KeyspaceName", + "/properties/TableName" + ], + "handlers": { + "create": { + "permissions": [ + "cassandra:Create", + "cassandra:CreateMultiRegionResource", + "cassandra:Select", + "cassandra:SelectMultiRegionResource", + "cassandra:TagResource", + "cassandra:TagMultiRegionResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:Encrypt", + "kms:Decrypt", + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:RegisterScalableTarget", + "application-autoscaling:PutScalingPolicy", + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms", + "cloudwatch:GetMetricData", + "cloudwatch:PutMetricAlarm" + ] + }, + "read": { + "permissions": [ + "cassandra:Select", + "cassandra:SelectMultiRegionResource", + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:RegisterScalableTarget", + "application-autoscaling:PutScalingPolicy", + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms", + "cloudwatch:GetMetricData", + "cloudwatch:PutMetricAlarm" + ] + }, + "update": { + "permissions": [ + "cassandra:Alter", + "cassandra:AlterMultiRegionResource", + "cassandra:Select", + "cassandra:SelectMultiRegionResource", + "cassandra:TagResource", + "cassandra:TagMultiRegionResource", + "cassandra:UntagResource", + "cassandra:UntagMultiRegionResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:Encrypt", + "kms:Decrypt", + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:RegisterScalableTarget", + "application-autoscaling:PutScalingPolicy", + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms", + "cloudwatch:GetMetricData", + "cloudwatch:PutMetricAlarm" + ] + }, + "delete": { + "permissions": [ + "cassandra:Drop", + "cassandra:DropMultiRegionResource", + "cassandra:Select", + "cassandra:SelectMultiRegionResource", + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:RegisterScalableTarget", + "application-autoscaling:PutScalingPolicy", + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms", + "cloudwatch:GetMetricData", + "cloudwatch:PutMetricAlarm" + ] + }, + "list": { + "permissions": [ + "cassandra:Select", + "cassandra:SelectMultiRegionResource", + "application-autoscaling:DescribeScalableTargets", + "application-autoscaling:DescribeScalingPolicies", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:RegisterScalableTarget", + "application-autoscaling:PutScalingPolicy", + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms", + "cloudwatch:GetMetricData", + "cloudwatch:PutMetricAlarm" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ce/anomalymonitor.json b/internal/aws/cfn/schemas/aws/ce/anomalymonitor.json new file mode 100644 index 00000000..a52ff806 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ce/anomalymonitor.json @@ -0,0 +1,153 @@ +{ + "typeName": "AWS::CE::AnomalyMonitor", + "description": "AWS Cost Anomaly Detection leverages advanced Machine Learning technologies to identify anomalous spend and root causes, so you can quickly take action. You can use Cost Anomaly Detection by creating monitor.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "description": "Monitor ARN", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:[-a-zA-Z0-9/:_]+$" + }, + "ResourceTag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name for the tag.", + "pattern": "^(?!aws:).*$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "MonitorArn": { + "$ref": "#/definitions/Arn" + }, + "MonitorType": { + "type": "string", + "enum": [ + "DIMENSIONAL", + "CUSTOM" + ] + }, + "MonitorName": { + "description": "The name of the monitor.", + "type": "string", + "pattern": "[\\S\\s]*", + "minLength": 0, + "maxLength": 1024 + }, + "CreationDate": { + "description": "The date when the monitor was created. ", + "type": "string", + "minLength": 0, + "maxLength": 40, + "pattern": "(\\d{4}-\\d{2}-\\d{2})(T\\d{2}:\\d{2}:\\d{2}Z)?" + }, + "LastEvaluatedDate": { + "description": "The date when the monitor last evaluated for anomalies.", + "type": "string", + "minLength": 0, + "maxLength": 40, + "pattern": "(\\d{4}-\\d{2}-\\d{2})(T\\d{2}:\\d{2}:\\d{2}Z)?|(NOT_EVALUATED_YET)" + }, + "LastUpdatedDate": { + "description": "The date when the monitor was last updated.", + "type": "string", + "minLength": 0, + "maxLength": 40, + "pattern": "(\\d{4}-\\d{2}-\\d{2})(T\\d{2}:\\d{2}:\\d{2}Z)?" + }, + "MonitorDimension": { + "description": "The dimensions to evaluate", + "type": "string", + "enum": [ + "SERVICE" + ] + }, + "MonitorSpecification": { + "type": "string" + }, + "DimensionalValueCount": { + "description": "The value for evaluated dimensions.", + "type": "integer", + "minimum": 0 + }, + "ResourceTags": { + "type": "array", + "description": "Tags to assign to monitor.", + "items": { + "$ref": "#/definitions/ResourceTag" + }, + "minItems": 0, + "maxItems": 200, + "insertionOrder": false + } + }, + "additionalProperties": false, + "required": [ + "MonitorName", + "MonitorType" + ], + "createOnlyProperties": [ + "/properties/MonitorType", + "/properties/MonitorDimension", + "/properties/MonitorSpecification", + "/properties/ResourceTags" + ], + "readOnlyProperties": [ + "/properties/MonitorArn", + "/properties/CreationDate", + "/properties/LastEvaluatedDate", + "/properties/LastUpdatedDate", + "/properties/DimensionalValueCount" + ], + "writeOnlyProperties": [ + "/properties/ResourceTags" + ], + "primaryIdentifier": [ + "/properties/MonitorArn" + ], + "handlers": { + "create": { + "permissions": [ + "ce:CreateAnomalyMonitor", + "ce:TagResource" + ] + }, + "read": { + "permissions": [ + "ce:GetAnomalyMonitors" + ] + }, + "update": { + "permissions": [ + "ce:UpdateAnomalyMonitor" + ] + }, + "delete": { + "permissions": [ + "ce:DeleteAnomalyMonitor" + ] + }, + "list": { + "permissions": [ + "ce:GetAnomalyMonitors" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ce/anomalysubscription.json b/internal/aws/cfn/schemas/aws/ce/anomalysubscription.json new file mode 100644 index 00000000..3c0d5cf9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ce/anomalysubscription.json @@ -0,0 +1,175 @@ +{ + "typeName": "AWS::CE::AnomalySubscription", + "description": "AWS Cost Anomaly Detection leverages advanced Machine Learning technologies to identify anomalous spend and root causes, so you can quickly take action. Create subscription to be notified", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "description": "Subscription ARN", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:[-a-zA-Z0-9/:_]+$" + }, + "Subscriber": { + "type": "object", + "properties": { + "Address": { + "type": "string", + "pattern": "(^[a-zA-Z0-9.!#$%&'*+=?^_‘{|}~-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$)|(^arn:(aws[a-zA-Z-]*):sns:[a-zA-Z0-9-]+:[0-9]{12}:[a-zA-Z0-9_-]+(\\.fifo)?$)" + }, + "Status": { + "type": "string", + "enum": [ + "CONFIRMED", + "DECLINED" + ] + }, + "Type": { + "type": "string", + "enum": [ + "EMAIL", + "SNS" + ] + } + }, + "required": [ + "Address", + "Type" + ], + "additionalProperties": false + }, + "ResourceTag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name for the tag.", + "pattern": "^(?!aws:).*$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "SubscriptionArn": { + "$ref": "#/definitions/Arn" + }, + "SubscriptionName": { + "description": "The name of the subscription.", + "type": "string", + "pattern": "[\\S\\s]*", + "minLength": 0, + "maxLength": 1024 + }, + "AccountId": { + "description": "The accountId", + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "MonitorArnList": { + "description": "A list of cost anomaly monitors.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Arn" + } + }, + "Subscribers": { + "description": "A list of subscriber", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Subscriber" + } + }, + "Threshold": { + "description": "The dollar value that triggers a notification if the threshold is exceeded. ", + "type": "number", + "minimum": 0 + }, + "ThresholdExpression": { + "description": "An Expression object in JSON String format used to specify the anomalies that you want to generate alerts for.", + "type": "string" + }, + "Frequency": { + "description": "The frequency at which anomaly reports are sent over email. ", + "type": "string", + "enum": [ + "DAILY", + "IMMEDIATE", + "WEEKLY" + ] + }, + "ResourceTags": { + "type": "array", + "description": "Tags to assign to subscription.", + "items": { + "$ref": "#/definitions/ResourceTag" + }, + "minItems": 0, + "maxItems": 200, + "insertionOrder": false + } + }, + "additionalProperties": false, + "required": [ + "MonitorArnList", + "Subscribers", + "Frequency", + "SubscriptionName" + ], + "createOnlyProperties": [ + "/properties/ResourceTags" + ], + "readOnlyProperties": [ + "/properties/SubscriptionArn", + "/properties/AccountId", + "/properties/Subscribers/*/Status" + ], + "writeOnlyProperties": [ + "/properties/ResourceTags" + ], + "primaryIdentifier": [ + "/properties/SubscriptionArn" + ], + "handlers": { + "create": { + "permissions": [ + "ce:CreateAnomalySubscription", + "ce:TagResource" + ] + }, + "read": { + "permissions": [ + "ce:GetAnomalySubscriptions" + ] + }, + "update": { + "permissions": [ + "ce:UpdateAnomalySubscription" + ] + }, + "delete": { + "permissions": [ + "ce:DeleteAnomalySubscription" + ] + }, + "list": { + "permissions": [ + "ce:GetAnomalySubscriptions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ce/costcategory.json b/internal/aws/cfn/schemas/aws/ce/costcategory.json new file mode 100644 index 00000000..d6cc16d7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ce/costcategory.json @@ -0,0 +1,92 @@ +{ + "typeName": "AWS::CE::CostCategory", + "description": "Cost Category enables you to map your cost and usage into meaningful categories. You can use Cost Category to organize your costs using a rule-based engine.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cost-explorer.git", + "definitions": { + "ZonedDateTime": { + "description": "ISO 8601 date time with offset format", + "type": "string", + "pattern": "^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(([+-]\\d\\d:\\d\\d)|Z)$", + "minLength": 20, + "maxLength": 25 + } + }, + "properties": { + "Arn": { + "description": "Cost category ARN", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:[-a-zA-Z0-9/:_]+$" + }, + "EffectiveStart": { + "$ref": "#/definitions/ZonedDateTime" + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "RuleVersion": { + "type": "string", + "enum": [ + "CostCategoryExpression.v1" + ] + }, + "Rules": { + "type": "string", + "description": "JSON array format of Expression in Billing and Cost Management API" + }, + "SplitChargeRules": { + "type": "string", + "description": "Json array format of CostCategorySplitChargeRule in Billing and Cost Management API" + }, + "DefaultValue": { + "type": "string", + "description": "The default value for the cost category", + "minLength": 1, + "maxLength": 50 + } + }, + "additionalProperties": false, + "required": [ + "Name", + "RuleVersion", + "Rules" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/EffectiveStart" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ce:CreateCostCategoryDefinition" + ] + }, + "read": { + "permissions": [ + "ce:DescribeCostCategoryDefinition" + ] + }, + "update": { + "permissions": [ + "ce:UpdateCostCategoryDefinition" + ] + }, + "delete": { + "permissions": [ + "ce:DeleteCostCategoryDefinition" + ] + }, + "list": { + "permissions": [ + "ce:ListCostCategoryDefinitions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/certificatemanager/account.json b/internal/aws/cfn/schemas/aws/certificatemanager/account.json new file mode 100644 index 00000000..153ac223 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/certificatemanager/account.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::CertificateManager::Account", + "description": "Resource schema for AWS::CertificateManager::Account.", + "definitions": { + "ExpiryEventsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DaysBeforeExpiry": { + "type": "integer", + "minimum": 1, + "maximum": 45 + } + } + }, + "AccountId": { + "type": "string" + } + }, + "properties": { + "ExpiryEventsConfiguration": { + "$ref": "#/definitions/ExpiryEventsConfiguration" + }, + "AccountId": { + "$ref": "#/definitions/AccountId" + } + }, + "required": [ + "ExpiryEventsConfiguration" + ], + "readOnlyProperties": [ + "/properties/AccountId" + ], + "primaryIdentifier": [ + "/properties/AccountId" + ], + "handlers": { + "create": { + "permissions": [ + "acm:GetAccountConfiguration", + "acm:PutAccountConfiguration" + ] + }, + "read": { + "permissions": [ + "acm:GetAccountConfiguration" + ] + }, + "update": { + "permissions": [ + "acm:GetAccountConfiguration", + "acm:PutAccountConfiguration" + ] + }, + "delete": { + "permissions": [ + "acm:GetAccountConfiguration", + "acm:PutAccountConfiguration" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/certificatemanager/certificate.json b/internal/aws/cfn/schemas/aws/certificatemanager/certificate.json new file mode 100644 index 00000000..b71159ad --- /dev/null +++ b/internal/aws/cfn/schemas/aws/certificatemanager/certificate.json @@ -0,0 +1,99 @@ +{ + "typeName": "AWS::CertificateManager::Certificate", + "description": "Resource Type definition for AWS::CertificateManager::Certificate", + "additionalProperties": false, + "properties": { + "CertificateAuthorityArn": { + "type": "string" + }, + "DomainValidationOptions": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/DomainValidationOption" + } + }, + "CertificateTransparencyLoggingPreference": { + "type": "string" + }, + "DomainName": { + "type": "string" + }, + "ValidationMethod": { + "type": "string" + }, + "SubjectAlternativeNames": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "KeyAlgorithm": { + "type": "string" + } + }, + "definitions": { + "DomainValidationOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "DomainName": { + "type": "string" + }, + "ValidationDomain": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + } + }, + "required": [ + "DomainName" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "DomainName" + ], + "createOnlyProperties": [ + "/properties/SubjectAlternativeNames", + "/properties/DomainValidationOptions", + "/properties/ValidationMethod", + "/properties/KeyAlgorithm", + "/properties/DomainName", + "/properties/CertificateAuthorityArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/chatbot/microsoftteamschannelconfiguration.json b/internal/aws/cfn/schemas/aws/chatbot/microsoftteamschannelconfiguration.json new file mode 100644 index 00000000..c602d39e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/chatbot/microsoftteamschannelconfiguration.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::Chatbot::MicrosoftTeamsChannelConfiguration", + "description": "Resource schema for AWS::Chatbot::MicrosoftTeamsChannelConfiguration.", + "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-microsoftteamschannelconfiguration.html", + "properties": { + "TeamId": { + "description": "The id of the Microsoft Teams team", + "type": "string", + "pattern": "^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$", + "minLength": 36, + "maxLength": 36 + }, + "TeamsChannelId": { + "description": "The id of the Microsoft Teams channel", + "type": "string", + "pattern": "^([a-zA-Z0-9-_=+/.,])*%3[aA]([a-zA-Z0-9-_=+/.,])*%40([a-zA-Z0-9-_=+/.,])*$", + "minLength": 1, + "maxLength": 256 + }, + "TeamsTenantId": { + "description": "The id of the Microsoft Teams tenant", + "type": "string", + "pattern": "^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$", + "minLength": 36, + "maxLength": 36 + }, + "ConfigurationName": { + "description": "The name of the configuration", + "type": "string", + "pattern": "^[A-Za-z0-9-_]+$", + "minLength": 1, + "maxLength": 128 + }, + "IamRoleArn": { + "description": "The ARN of the IAM role that defines the permissions for AWS Chatbot", + "type": "string", + "pattern": "^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "SnsTopicArns": { + "description": "ARNs of SNS topics which delivers notifications to AWS Chatbot, for example CloudWatch alarm notifications.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + } + }, + "LoggingLevel": { + "description": "Specifies the logging level for this configuration:ERROR,INFO or NONE. This property affects the log entries pushed to Amazon CloudWatch logs", + "type": "string", + "pattern": "^(ERROR|INFO|NONE)$", + "default": "NONE" + }, + "Arn": { + "description": "Amazon Resource Name (ARN) of the configuration", + "type": "string", + "pattern": "^arn:(aws[a-zA-Z-]*)?:chatbot:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "GuardrailPolicies": { + "description": "The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed 'AdministratorAccess' policy is applied as a default if this is not set.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^(^$|arn:aws:iam:[A-Za-z0-9_\\/.-]{0,63}:[A-Za-z0-9_\\/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_\\/+=,@.-]{0,1023})$" + } + }, + "UserRoleRequired": { + "description": "Enables use of a user role requirement in your chat configuration", + "type": "boolean", + "default": false + } + }, + "required": [ + "TeamId", + "TeamsChannelId", + "TeamsTenantId", + "ConfigurationName", + "IamRoleArn" + ], + "createOnlyProperties": [ + "/properties/TeamId", + "/properties/TeamsTenantId", + "/properties/ConfigurationName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "chatbot:CreateMicrosoftTeamsChannelConfiguration", + "iam:PassRole", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "chatbot:GetMicrosoftTeamsChannelConfiguration" + ] + }, + "update": { + "permissions": [ + "chatbot:UpdateMicrosoftTeamsChannelConfiguration", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "chatbot:GetMicrosoftTeamsChannelConfiguration", + "chatbot:DeleteMicrosoftTeamsChannelConfiguration" + ] + }, + "list": { + "permissions": [ + "chatbot:ListMicrosoftTeamsChannelConfigurations" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/chatbot/slackchannelconfiguration.json b/internal/aws/cfn/schemas/aws/chatbot/slackchannelconfiguration.json new file mode 100644 index 00000000..cc2968dd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/chatbot/slackchannelconfiguration.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::Chatbot::SlackChannelConfiguration", + "description": "Resource schema for AWS::Chatbot::SlackChannelConfiguration.", + "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-slackchannelconfiguration.html", + "properties": { + "SlackWorkspaceId": { + "description": "The id of the Slack workspace", + "type": "string", + "pattern": "^[0-9A-Z]{1,255}$", + "minLength": 1, + "maxLength": 256 + }, + "SlackChannelId": { + "description": "The id of the Slack channel", + "type": "string", + "pattern": "^[A-Za-z0-9]+$", + "minLength": 1, + "maxLength": 256 + }, + "ConfigurationName": { + "description": "The name of the configuration", + "type": "string", + "pattern": "^[A-Za-z0-9-_]+$", + "minLength": 1, + "maxLength": 128 + }, + "IamRoleArn": { + "description": "The ARN of the IAM role that defines the permissions for AWS Chatbot", + "type": "string", + "pattern": "^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "SnsTopicArns": { + "description": "ARNs of SNS topics which delivers notifications to AWS Chatbot, for example CloudWatch alarm notifications.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + } + }, + "LoggingLevel": { + "description": "Specifies the logging level for this configuration:ERROR,INFO or NONE. This property affects the log entries pushed to Amazon CloudWatch logs", + "type": "string", + "pattern": "^(ERROR|INFO|NONE)$", + "default": "NONE" + }, + "Arn": { + "description": "Amazon Resource Name (ARN) of the configuration", + "type": "string", + "pattern": "^arn:(aws[a-zA-Z-]*)?:chatbot:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "GuardrailPolicies": { + "description": "The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed 'AdministratorAccess' policy is applied as a default if this is not set.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^(^$|arn:aws:iam:[A-Za-z0-9_\\/.-]{0,63}:[A-Za-z0-9_\\/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_\\/+=,@.-]{0,1023})$" + } + }, + "UserRoleRequired": { + "description": "Enables use of a user role requirement in your chat configuration", + "type": "boolean", + "default": false + } + }, + "required": [ + "SlackWorkspaceId", + "SlackChannelId", + "ConfigurationName", + "IamRoleArn" + ], + "createOnlyProperties": [ + "/properties/SlackWorkspaceId", + "/properties/ConfigurationName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "chatbot:CreateSlackChannelConfiguration", + "iam:PassRole", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "chatbot:DescribeSlackChannelConfigurations" + ] + }, + "update": { + "permissions": [ + "chatbot:UpdateSlackChannelConfiguration", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "chatbot:DeleteSlackChannelConfiguration" + ] + }, + "list": { + "permissions": [ + "chatbot:DescribeSlackChannelConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cleanrooms/analysistemplate.json b/internal/aws/cfn/schemas/aws/cleanrooms/analysistemplate.json new file mode 100644 index 00000000..631c3940 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cleanrooms/analysistemplate.json @@ -0,0 +1,267 @@ +{ + "typeName": "AWS::CleanRooms::AnalysisTemplate", + "description": "Represents a stored analysis within a collaboration", + "definitions": { + "AnalysisParameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultValue": { + "type": "string", + "minLength": 0, + "maxLength": 250 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "[0-9a-zA-Z_]+" + }, + "Type": { + "type": "string", + "enum": [ + "SMALLINT", + "INTEGER", + "BIGINT", + "DECIMAL", + "REAL", + "DOUBLE_PRECISION", + "BOOLEAN", + "CHAR", + "VARCHAR", + "DATE", + "TIMESTAMP", + "TIMESTAMPTZ", + "TIME", + "TIMETZ", + "VARBYTE" + ] + } + }, + "required": [ + "Name", + "Type" + ] + }, + "TableName": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$" + }, + "ReferencedTables": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TableName" + }, + "minItems": 0 + }, + "AnalysisSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReferencedTables": { + "$ref": "#/definitions/ReferencedTables" + } + }, + "required": [ + "ReferencedTables" + ] + }, + "AnalysisSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "Text": { + "type": "string", + "minLength": 0, + "maxLength": 15000 + } + }, + "required": [ + "Text" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 200 + }, + "CollaborationArn": { + "type": "string", + "maxLength": 100 + }, + "CollaborationIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this cleanrooms analysis template.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array" + }, + "AnalysisParameters": { + "description": "The member who can query can provide this placeholder for a literal data value in an analysis template", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AnalysisParameter" + }, + "type": "array", + "minItems": 0, + "maxItems": 10 + }, + "AnalysisTemplateIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "Description": { + "type": "string", + "maxLength": 255, + "pattern": "^[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t\\r\\n]*$" + }, + "MembershipArn": { + "type": "string", + "maxLength": 100 + }, + "MembershipIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "Name": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$" + }, + "Schema": { + "$ref": "#/definitions/AnalysisSchema" + }, + "Source": { + "$ref": "#/definitions/AnalysisSource" + }, + "Format": { + "type": "string", + "enum": [ + "SQL" + ] + } + }, + "required": [ + "Source", + "Format", + "Name", + "MembershipIdentifier" + ], + "readOnlyProperties": [ + "/properties/CollaborationArn", + "/properties/CollaborationIdentifier", + "/properties/AnalysisTemplateIdentifier", + "/properties/Schema", + "/properties/Arn", + "/properties/MembershipArn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/MembershipIdentifier", + "/properties/Source", + "/properties/Source/Text", + "/properties/Format", + "/properties/AnalysisParameters", + "/properties/AnalysisParameters/Name", + "/properties/AnalysisParameters/Type", + "/properties/AnalysisParameters/DefaultValue" + ], + "primaryIdentifier": [ + "/properties/AnalysisTemplateIdentifier", + "/properties/MembershipIdentifier" + ], + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cleanrooms", + "handlers": { + "create": { + "permissions": [ + "cleanrooms:CreateAnalysisTemplate", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:GetAnalysisTemplate", + "cleanrooms:ListAnalysisTemplates" + ] + }, + "read": { + "permissions": [ + "cleanrooms:GetAnalysisTemplate", + "cleanrooms:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "cleanrooms:UpdateAnalysisTemplate", + "cleanrooms:GetAnalysisTemplate", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:UntagResource" + ] + }, + "delete": { + "permissions": [ + "cleanrooms:DeleteAnalysisTemplate", + "cleanrooms:GetAnalysisTemplate", + "cleanrooms:ListAnalysisTemplates", + "cleanrooms:ListTagsForResource", + "cleanrooms:UntagResource" + ] + }, + "list": { + "permissions": [ + "cleanrooms:ListAnalysisTemplates" + ], + "handlerSchema": { + "properties": { + "MembershipIdentifier": { + "$ref": "resource-schema.json#/properties/MembershipIdentifier" + } + }, + "required": [ + "MembershipIdentifier" + ] + } + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cleanrooms/collaboration.json b/internal/aws/cfn/schemas/aws/cleanrooms/collaboration.json new file mode 100644 index 00000000..a1c4c8ef --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cleanrooms/collaboration.json @@ -0,0 +1,271 @@ +{ + "typeName": "AWS::CleanRooms::Collaboration", + "description": "Represents a collaboration between AWS accounts that allows for secure data collaboration", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html", + "definitions": { + "CollaborationQueryLogStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "DataEncryptionMetadata": { + "type": "object", + "properties": { + "AllowCleartext": { + "type": "boolean" + }, + "AllowDuplicates": { + "type": "boolean" + }, + "AllowJoinsOnColumnsWithDifferentNames": { + "type": "boolean" + }, + "PreserveNulls": { + "type": "boolean" + } + }, + "required": [ + "AllowCleartext", + "AllowDuplicates", + "AllowJoinsOnColumnsWithDifferentNames", + "PreserveNulls" + ], + "additionalProperties": false + }, + "MemberAbility": { + "type": "string", + "enum": [ + "CAN_QUERY", + "CAN_RECEIVE_RESULTS" + ] + }, + "MemberAbilities": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MemberAbility" + }, + "uniqueItems": true + }, + "MemberSpecification": { + "type": "object", + "properties": { + "AccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^\\d+$" + }, + "MemberAbilities": { + "$ref": "#/definitions/MemberAbilities" + }, + "DisplayName": { + "$ref": "#/definitions/Name" + }, + "PaymentConfiguration": { + "$ref": "#/definitions/PaymentConfiguration" + } + }, + "required": [ + "AccountId", + "DisplayName", + "MemberAbilities" + ], + "additionalProperties": false + }, + "MemberStatus": { + "type": "string", + "enum": [ + "INVITED", + "ACTIVE", + "LEFT", + "REMOVED" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^(?!\\s*$)[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t]*$" + }, + "PaymentConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "QueryCompute": { + "$ref": "#/definitions/QueryComputePaymentConfig" + } + }, + "required": [ + "QueryCompute" + ] + }, + "QueryComputePaymentConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "IsResponsible": { + "type": "boolean" + } + }, + "required": [ + "IsResponsible" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 100 + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": true, + "type": "array" + }, + "CollaborationIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "CreatorDisplayName": { + "$ref": "#/definitions/Name" + }, + "CreatorMemberAbilities": { + "$ref": "#/definitions/MemberAbilities" + }, + "DataEncryptionMetadata": { + "$ref": "#/definitions/DataEncryptionMetadata" + }, + "Description": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^(?!\\s*$)[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t\\r\\n]*$" + }, + "Members": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MemberSpecification" + }, + "maxItems": 9, + "minItems": 0 + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^(?!\\s*$)[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t]*$" + }, + "QueryLogStatus": { + "$ref": "#/definitions/CollaborationQueryLogStatus" + }, + "CreatorPaymentConfiguration": { + "$ref": "#/definitions/PaymentConfiguration" + } + }, + "required": [ + "CreatorDisplayName", + "CreatorMemberAbilities", + "Members", + "Name", + "Description", + "QueryLogStatus" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CollaborationIdentifier" + ], + "createOnlyProperties": [ + "/properties/CreatorDisplayName", + "/properties/CreatorMemberAbilities", + "/properties/DataEncryptionMetadata", + "/properties/QueryLogStatus", + "/properties/Members", + "/properties/CreatorPaymentConfiguration" + ], + "primaryIdentifier": [ + "/properties/CollaborationIdentifier" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "cleanrooms:CreateCollaboration", + "cleanrooms:GetCollaboration", + "cleanrooms:ListMembers", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:GetCollaboration", + "cleanrooms:ListCollaborations" + ] + }, + "read": { + "permissions": [ + "cleanrooms:GetCollaboration", + "cleanrooms:ListMembers", + "cleanrooms:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "cleanrooms:UpdateCollaboration", + "cleanrooms:GetCollaboration", + "cleanrooms:ListMembers", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:UntagResource" + ] + }, + "delete": { + "permissions": [ + "cleanrooms:DeleteCollaboration", + "cleanrooms:GetCollaboration", + "cleanrooms:ListTagsForResource", + "cleanrooms:UntagResource", + "cleanrooms:ListMembers", + "cleanrooms:ListCollaborations" + ] + }, + "list": { + "permissions": [ + "cleanrooms:ListCollaborations" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cleanrooms/configuredtable.json b/internal/aws/cfn/schemas/aws/cleanrooms/configuredtable.json new file mode 100644 index 00000000..0d3ccb08 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cleanrooms/configuredtable.json @@ -0,0 +1,537 @@ +{ + "typeName": "AWS::CleanRooms::ConfiguredTable", + "description": "Represents a table that can be associated with collaborations", + "definitions": { + "AnalysisRuleColumnName": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^[a-z0-9_](([a-z0-9_ ]+-)*([a-z0-9_ ]+))?$" + }, + "AggregateColumn": { + "type": "object", + "properties": { + "ColumnNames": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AnalysisRuleColumnName" + }, + "minItems": 1 + }, + "Function": { + "$ref": "#/definitions/AggregateFunctionName" + } + }, + "required": [ + "ColumnNames", + "Function" + ], + "additionalProperties": false + }, + "AggregateFunctionName": { + "type": "string", + "enum": [ + "SUM", + "SUM_DISTINCT", + "COUNT", + "COUNT_DISTINCT", + "AVG" + ] + }, + "AggregationConstraint": { + "type": "object", + "properties": { + "ColumnName": { + "$ref": "#/definitions/AnalysisRuleColumnName" + }, + "Minimum": { + "type": "number", + "minimum": 2, + "maximum": 100000 + }, + "Type": { + "$ref": "#/definitions/AggregationType" + } + }, + "required": [ + "ColumnName", + "Minimum", + "Type" + ], + "additionalProperties": false + }, + "AggregationType": { + "type": "string", + "enum": [ + "COUNT_DISTINCT" + ] + }, + "JoinOperator": { + "type": "string", + "enum": [ + "OR", + "AND" + ] + }, + "AnalysisMethod": { + "type": "string", + "enum": [ + "DIRECT_QUERY" + ] + }, + "JoinRequiredOption": { + "type": "string", + "enum": [ + "QUERY_RUNNER" + ] + }, + "ScalarFunctions": { + "type": "string", + "enum": [ + "TRUNC", + "ABS", + "CEILING", + "FLOOR", + "LN", + "LOG", + "ROUND", + "SQRT", + "CAST", + "LOWER", + "RTRIM", + "UPPER", + "COALESCE" + ] + }, + "AnalysisRuleAggregation": { + "type": "object", + "properties": { + "AggregateColumns": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AggregateColumn" + }, + "minItems": 1 + }, + "JoinColumns": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AnalysisRuleColumnName" + } + }, + "AllowedJoinOperators": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/JoinOperator" + }, + "maxItems": 2 + }, + "JoinRequired": { + "$ref": "#/definitions/JoinRequiredOption" + }, + "DimensionColumns": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AnalysisRuleColumnName" + } + }, + "ScalarFunctions": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ScalarFunctions" + } + }, + "OutputConstraints": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AggregationConstraint" + }, + "minItems": 1 + } + }, + "required": [ + "AggregateColumns", + "JoinColumns", + "DimensionColumns", + "ScalarFunctions", + "OutputConstraints" + ], + "additionalProperties": false + }, + "AnalysisRuleList": { + "type": "object", + "properties": { + "JoinColumns": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AnalysisRuleColumnName" + }, + "minItems": 1 + }, + "AllowedJoinOperators": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/JoinOperator" + }, + "maxItems": 2 + }, + "ListColumns": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AnalysisRuleColumnName" + } + } + }, + "required": [ + "JoinColumns", + "ListColumns" + ], + "additionalProperties": false + }, + "AllowedAnalysis": { + "type": "string", + "minLength": 0, + "maxLength": 200, + "pattern": "(ANY_QUERY|arn:[\\w]{3}:cleanrooms:[\\w]{2}-[\\w]{4,9}-[\\d]:[\\d]{12}:membership/[\\d\\w-]+/analysistemplate/[\\d\\w-]+)" + }, + "AllowedAnalyses": { + "type": "array", + "insertionOrder": false, + "minItems": 0, + "items": { + "$ref": "#/definitions/AllowedAnalysis" + } + }, + "AllowedAnalysisProvider": { + "type": "string", + "minLength": 12, + "maxLength": 12, + "pattern": "\\d+" + }, + "AllowedAnalysisProviders": { + "type": "array", + "insertionOrder": false, + "minItems": 0, + "items": { + "$ref": "#/definitions/AllowedAnalysisProvider" + } + }, + "AnalysisRuleCustom": { + "type": "object", + "properties": { + "AllowedAnalyses": { + "$ref": "#/definitions/AllowedAnalyses" + }, + "AllowedAnalysisProviders": { + "$ref": "#/definitions/AllowedAnalysisProviders" + } + }, + "required": [ + "AllowedAnalyses" + ], + "additionalProperties": false + }, + "ConfiguredTableAnalysisRulePolicy": { + "type": "object", + "title": "V1", + "properties": { + "V1": { + "$ref": "#/definitions/ConfiguredTableAnalysisRulePolicyV1" + } + }, + "required": [ + "V1" + ], + "additionalProperties": false + }, + "ConfiguredTableAnalysisRulePolicyV1": { + "oneOf": [ + { + "type": "object", + "title": "List", + "properties": { + "List": { + "$ref": "#/definitions/AnalysisRuleList" + } + }, + "required": [ + "List" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "Aggregation", + "properties": { + "Aggregation": { + "$ref": "#/definitions/AnalysisRuleAggregation" + } + }, + "required": [ + "Aggregation" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "Custom", + "properties": { + "Custom": { + "$ref": "#/definitions/AnalysisRuleCustom" + } + }, + "required": [ + "Custom" + ], + "additionalProperties": false + } + ] + }, + "ConfiguredTableAnalysisRuleType": { + "type": "string", + "enum": [ + "AGGREGATION", + "LIST", + "CUSTOM" + ] + }, + "GlueTableReference": { + "type": "object", + "properties": { + "TableName": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$" + }, + "DatabaseName": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$" + } + }, + "required": [ + "DatabaseName", + "TableName" + ], + "additionalProperties": false + }, + "AnalysisRule": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/ConfiguredTableAnalysisRuleType" + }, + "Policy": { + "$ref": "#/definitions/ConfiguredTableAnalysisRulePolicy" + } + }, + "required": [ + "Type", + "Policy" + ], + "additionalProperties": false + }, + "TableReference": { + "type": "object", + "title": "Glue", + "properties": { + "Glue": { + "$ref": "#/definitions/GlueTableReference" + } + }, + "required": [ + "Glue" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 100 + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": true, + "type": "array" + }, + "AllowedColumns": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-z0-9_](([a-z0-9_ ]+-)*([a-z0-9_ ]+))?$" + }, + "maxItems": 100, + "minItems": 1 + }, + "AnalysisMethod": { + "$ref": "#/definitions/AnalysisMethod" + }, + "ConfiguredTableIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "Description": { + "type": "string", + "maxLength": 255, + "pattern": "^[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t\\r\\n]*$" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^(?!\\s*$)[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t]*$" + }, + "AnalysisRules": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AnalysisRule" + }, + "maxItems": 1, + "minItems": 1 + }, + "TableReference": { + "$ref": "#/definitions/TableReference" + } + }, + "required": [ + "AllowedColumns", + "AnalysisMethod", + "Name", + "TableReference" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/ConfiguredTableIdentifier" + ], + "createOnlyProperties": [ + "/properties/AllowedColumns", + "/properties/AnalysisMethod", + "/properties/TableReference" + ], + "primaryIdentifier": [ + "/properties/ConfiguredTableIdentifier" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "cleanrooms:CreateConfiguredTable", + "cleanrooms:DeleteConfiguredTable", + "cleanrooms:DeleteConfiguredTableAnalysisRule", + "cleanrooms:CreateConfiguredTableAnalysisRule", + "cleanrooms:GetConfiguredTable", + "cleanrooms:GetConfiguredTableAnalysisRule", + "glue:GetDatabase", + "glue:GetDatabases", + "glue:GetTable", + "glue:GetTables", + "glue:GetPartition", + "glue:GetPartitions", + "glue:BatchGetPartition", + "glue:GetSchemaVersion", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:ListConfiguredTables" + ] + }, + "read": { + "permissions": [ + "cleanrooms:GetConfiguredTable", + "cleanrooms:GetConfiguredTableAnalysisRule", + "cleanrooms:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "cleanrooms:UpdateConfiguredTable", + "cleanrooms:GetConfiguredTable", + "cleanrooms:CreateConfiguredTableAnalysisRule", + "cleanrooms:UpdateConfiguredTableAnalysisRule", + "cleanrooms:GetConfiguredTableAnalysisRule", + "cleanrooms:DeleteConfiguredTableAnalysisRule", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:UntagResource", + "glue:GetDatabase", + "glue:GetDatabases", + "glue:GetTable", + "glue:GetTables", + "glue:GetPartition", + "glue:GetPartitions", + "glue:BatchGetPartition", + "glue:GetSchemaVersion" + ] + }, + "delete": { + "permissions": [ + "cleanrooms:DeleteConfiguredTable", + "cleanrooms:GetConfiguredTable", + "cleanrooms:ListConfiguredTables", + "cleanrooms:GetConfiguredTableAnalysisRule", + "cleanrooms:DeleteConfiguredTableAnalysisRule", + "cleanrooms:ListTagsForResource", + "cleanrooms:UntagResource", + "glue:GetDatabase", + "glue:GetDatabases", + "glue:GetTable", + "glue:GetTables", + "glue:GetPartition", + "glue:GetPartitions", + "glue:BatchGetPartition", + "glue:GetSchemaVersion" + ] + }, + "list": { + "permissions": [ + "cleanrooms:ListConfiguredTables" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cleanrooms/configuredtableassociation.json b/internal/aws/cfn/schemas/aws/cleanrooms/configuredtableassociation.json new file mode 100644 index 00000000..2c325381 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cleanrooms/configuredtableassociation.json @@ -0,0 +1,153 @@ +{ + "typeName": "AWS::CleanRooms::ConfiguredTableAssociation", + "description": "Represents a table that can be queried within a collaboration", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 100 + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array" + }, + "ConfiguredTableAssociationIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "ConfiguredTableIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "Description": { + "type": "string", + "maxLength": 255, + "pattern": "^[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t\\r\\n]*$" + }, + "MembershipIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "Name": { + "type": "string", + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$" + }, + "RoleArn": { + "type": "string", + "maxLength": 512, + "minLength": 32 + } + }, + "required": [ + "ConfiguredTableIdentifier", + "Name", + "RoleArn", + "MembershipIdentifier" + ], + "readOnlyProperties": [ + "/properties/ConfiguredTableAssociationIdentifier", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ConfiguredTableIdentifier", + "/properties/Name", + "/properties/MembershipIdentifier" + ], + "primaryIdentifier": [ + "/properties/ConfiguredTableAssociationIdentifier", + "/properties/MembershipIdentifier" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cleanrooms", + "handlers": { + "create": { + "permissions": [ + "cleanrooms:CreateConfiguredTableAssociation", + "iam:PassRole", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:GetConfiguredTableAssociation", + "cleanrooms:ListConfiguredTableAssociations" + ] + }, + "read": { + "permissions": [ + "cleanrooms:GetConfiguredTableAssociation", + "cleanrooms:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "cleanrooms:UpdateConfiguredTableAssociation", + "cleanrooms:GetConfiguredTableAssociation", + "iam:PassRole", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:UntagResource" + ] + }, + "delete": { + "permissions": [ + "cleanrooms:DeleteConfiguredTableAssociation", + "cleanrooms:GetConfiguredTableAssociation", + "cleanrooms:ListConfiguredTableAssociations", + "cleanrooms:ListTagsForResource", + "cleanrooms:UntagResource" + ] + }, + "list": { + "permissions": [ + "cleanrooms:ListConfiguredTableAssociations" + ], + "handlerSchema": { + "properties": { + "MembershipIdentifier": { + "$ref": "resource-schema.json#/properties/MembershipIdentifier" + } + }, + "required": [ + "MembershipIdentifier" + ] + } + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cleanrooms/membership.json b/internal/aws/cfn/schemas/aws/cleanrooms/membership.json new file mode 100644 index 00000000..be8b11f4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cleanrooms/membership.json @@ -0,0 +1,259 @@ +{ + "typeName": "AWS::CleanRooms::Membership", + "description": "Represents an AWS account that is a part of a collaboration", + "definitions": { + "MembershipQueryLogStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "MembershipStatus": { + "type": "string", + "enum": [ + "ACTIVE", + "REMOVED", + "COLLABORATION_DELETED" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ResultFormat": { + "type": "string", + "enum": [ + "CSV", + "PARQUET" + ] + }, + "ProtectedQueryS3OutputConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResultFormat": { + "$ref": "#/definitions/ResultFormat" + }, + "Bucket": { + "type": "string", + "minLength": 3, + "maxLength": 63 + }, + "KeyPrefix": { + "type": "string" + } + }, + "required": [ + "ResultFormat", + "Bucket" + ] + }, + "MembershipProtectedQueryOutputConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3": { + "$ref": "#/definitions/ProtectedQueryS3OutputConfiguration" + } + }, + "required": [ + "S3" + ] + }, + "MembershipProtectedQueryResultConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "OutputConfiguration": { + "$ref": "#/definitions/MembershipProtectedQueryOutputConfiguration" + }, + "RoleArn": { + "type": "string", + "minLength": 32, + "maxLength": 512 + } + }, + "required": [ + "OutputConfiguration" + ] + }, + "MembershipPaymentConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "QueryCompute": { + "$ref": "#/definitions/MembershipQueryComputePaymentConfig" + } + }, + "required": [ + "QueryCompute" + ] + }, + "MembershipQueryComputePaymentConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "IsResponsible": { + "type": "boolean" + } + }, + "required": [ + "IsResponsible" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 100 + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this cleanrooms membership.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": true, + "type": "array" + }, + "CollaborationArn": { + "type": "string", + "maxLength": 100 + }, + "CollaborationCreatorAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^\\d+$" + }, + "CollaborationIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "MembershipIdentifier": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "QueryLogStatus": { + "$ref": "#/definitions/MembershipQueryLogStatus" + }, + "DefaultResultConfiguration": { + "$ref": "#/definitions/MembershipProtectedQueryResultConfiguration" + }, + "PaymentConfiguration": { + "$ref": "#/definitions/MembershipPaymentConfiguration" + } + }, + "required": [ + "CollaborationIdentifier", + "QueryLogStatus" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CollaborationArn", + "/properties/CollaborationCreatorAccountId", + "/properties/MembershipIdentifier" + ], + "createOnlyProperties": [ + "/properties/CollaborationIdentifier" + ], + "primaryIdentifier": [ + "/properties/MembershipIdentifier" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "cleanrooms:CreateMembership", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:DescribeLogGroups", + "logs:DescribeResourcePolicies", + "logs:PutResourcePolicy", + "logs:CreateLogGroup", + "cleanrooms:GetMembership", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:ListMemberships", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "cleanrooms:GetMembership", + "cleanrooms:ListTagsForResource", + "logs:ListLogDeliveries", + "logs:DescribeLogGroups", + "logs:DescribeResourcePolicies", + "logs:GetLogDelivery" + ] + }, + "update": { + "permissions": [ + "cleanrooms:UpdateMembership", + "cleanrooms:GetMembership", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:DescribeLogGroups", + "logs:DescribeResourcePolicies", + "logs:PutResourcePolicy", + "logs:CreateLogGroup", + "cleanrooms:ListTagsForResource", + "cleanrooms:TagResource", + "cleanrooms:UntagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "cleanrooms:DeleteMembership", + "cleanrooms:GetMembership", + "cleanrooms:ListMemberships", + "cleanrooms:ListTagsForResource", + "logs:ListLogDeliveries", + "logs:DescribeLogGroups", + "logs:DescribeResourcePolicies", + "logs:GetLogDelivery" + ] + }, + "list": { + "permissions": [ + "cleanrooms:ListMemberships" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloud9/environmentec2.json b/internal/aws/cfn/schemas/aws/cloud9/environmentec2.json new file mode 100644 index 00000000..a5a93272 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloud9/environmentec2.json @@ -0,0 +1,105 @@ +{ + "typeName": "AWS::Cloud9::EnvironmentEC2", + "description": "Resource Type definition for AWS::Cloud9::EnvironmentEC2", + "additionalProperties": false, + "properties": { + "Repositories": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Repository" + } + }, + "OwnerArn": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ConnectionType": { + "type": "string" + }, + "AutomaticStopTimeMinutes": { + "type": "integer" + }, + "ImageId": { + "type": "string" + }, + "SubnetId": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Repository": { + "type": "object", + "additionalProperties": false, + "properties": { + "RepositoryUrl": { + "type": "string" + }, + "PathComponent": { + "type": "string" + } + }, + "required": [ + "PathComponent", + "RepositoryUrl" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "ImageId", + "InstanceType" + ], + "createOnlyProperties": [ + "/properties/AutomaticStopTimeMinutes", + "/properties/OwnerArn", + "/properties/ConnectionType", + "/properties/InstanceType", + "/properties/ImageId", + "/properties/SubnetId", + "/properties/Repositories" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/customresource.json b/internal/aws/cfn/schemas/aws/cloudformation/customresource.json new file mode 100644 index 00000000..d52326bd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/customresource.json @@ -0,0 +1,25 @@ +{ + "typeName": "AWS::CloudFormation::CustomResource", + "description": "Resource Type definition for AWS::CloudFormation::CustomResource", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ServiceToken": { + "type": "string" + } + }, + "required": [ + "ServiceToken" + ], + "createOnlyProperties": [ + "/properties/ServiceToken" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/hookdefaultversion.json b/internal/aws/cfn/schemas/aws/cloudformation/hookdefaultversion.json new file mode 100644 index 00000000..3f59e9fb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/hookdefaultversion.json @@ -0,0 +1,85 @@ +{ + "typeName": "AWS::CloudFormation::HookDefaultVersion", + "description": "Set a version as default version for a hook in CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "properties": { + "TypeVersionArn": { + "description": "The Amazon Resource Name (ARN) of the type version.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/.+$", + "type": "string" + }, + "TypeName": { + "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.", + "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$", + "type": "string" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the type. This is used to uniquely identify a HookDefaultVersion", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/.+$", + "type": "string" + }, + "VersionId": { + "description": "The ID of an existing version of the hook to set as the default.", + "pattern": "^[A-Za-z0-9-]{1,128}$", + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "TypeVersionArn" + ] + }, + { + "required": [ + "TypeName", + "VersionId" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "cloudformation:SetTypeDefaultVersion" + ] + }, + "read": { + "permissions": [ + "cloudformation:DescribeType" + ] + }, + "update": { + "permissions": [ + "cloudformation:SetTypeDefaultVersion" + ] + }, + "delete": { + "permissions": [] + }, + "list": { + "handlerSchema": { + "properties": { + "TypeName": { + "$ref": "resource-schema.json#/properties/TypeName" + } + } + }, + "permissions": [ + "cloudformation:ListTypes" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/hooktypeconfig.json b/internal/aws/cfn/schemas/aws/cloudformation/hooktypeconfig.json new file mode 100644 index 00000000..8081989d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/hooktypeconfig.json @@ -0,0 +1,104 @@ +{ + "typeName": "AWS::CloudFormation::HookTypeConfig", + "description": "Specifies the configuration data for a registered hook in CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "properties": { + "TypeArn": { + "description": "The Amazon Resource Name (ARN) of the type without version number.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/.+$", + "type": "string" + }, + "TypeName": { + "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.", + "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$", + "type": "string" + }, + "ConfigurationArn": { + "description": "The Amazon Resource Name (ARN) for the configuration data, in this account and region.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type(-configuration)?/hook/.+$", + "type": "string" + }, + "Configuration": { + "description": "The configuration data for the extension, in this account and region.", + "pattern": "[\\s\\S]+", + "type": "string" + }, + "ConfigurationAlias": { + "description": "An alias by which to refer to this extension configuration data.", + "pattern": "^[a-zA-Z0-9]{1,256}$", + "default": "default", + "enum": [ + "default" + ], + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "TypeArn", + "Configuration" + ] + }, + { + "required": [ + "TypeName", + "Configuration" + ] + } + ], + "readOnlyProperties": [ + "/properties/ConfigurationArn" + ], + "createOnlyProperties": [ + "/properties/ConfigurationAlias" + ], + "primaryIdentifier": [ + "/properties/ConfigurationArn" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "cloudformation:SetTypeConfiguration" + ] + }, + "read": { + "permissions": [ + "cloudformation:BatchDescribeTypeConfigurations" + ] + }, + "update": { + "permissions": [ + "cloudformation:SetTypeConfiguration" + ] + }, + "delete": { + "permissions": [ + "cloudformation:SetTypeConfiguration" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "TypeName": { + "$ref": "resource-schema.json#/properties/TypeName" + }, + "TypeArn": { + "$ref": "resource-schema.json#/properties/TypeArn" + } + } + }, + "permissions": [ + "cloudformation:ListTypes", + "cloudformation:BatchDescribeTypeConfigurations" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/hookversion.json b/internal/aws/cfn/schemas/aws/cloudformation/hookversion.json new file mode 100644 index 00000000..0b350065 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/hookversion.json @@ -0,0 +1,145 @@ +{ + "typeName": "AWS::CloudFormation::HookVersion", + "description": "Publishes new or first hook version to AWS CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "definitions": { + "LoggingConfig": { + "type": "object", + "properties": { + "LogGroupName": { + "description": "The Amazon CloudWatch log group to which CloudFormation sends error logging information when invoking the type's handlers.", + "type": "string", + "pattern": "^[\\.\\-_/#A-Za-z0-9]+$", + "minLength": 1, + "maxLength": 512 + }, + "LogRoleArn": { + "description": "The ARN of the role that CloudFormation should assume when sending log entries to CloudWatch logs.", + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the type, here the HookVersion. This is used to uniquely identify a HookVersion resource", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/.+$", + "type": "string" + }, + "TypeArn": { + "description": "The Amazon Resource Name (ARN) of the type without the versionID.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/.+$", + "type": "string" + }, + "ExecutionRoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials.", + "pattern": "arn:.+:iam::[0-9]{12}:role/.+", + "maxLength": 256, + "type": "string" + }, + "IsDefaultVersion": { + "description": "Indicates if this type version is the current default version", + "type": "boolean" + }, + "LoggingConfig": { + "$ref": "#/definitions/LoggingConfig", + "description": "Specifies logging configuration information for a type." + }, + "SchemaHandlerPackage": { + "description": "A url to the S3 bucket containing the schema handler package that contains the schema, event handlers, and associated files for the type you want to register.\n\nFor information on generating a schema handler package for the type you want to register, see submit in the CloudFormation CLI User Guide.", + "maxLength": 4096, + "type": "string" + }, + "TypeName": { + "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.", + "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$", + "type": "string" + }, + "VersionId": { + "description": "The ID of the version of the type represented by this hook instance.", + "pattern": "^[A-Za-z0-9-]{1,128}$", + "type": "string" + }, + "Visibility": { + "description": "The scope at which the type is visible and usable in CloudFormation operations.\n\nValid values include:\n\nPRIVATE: The type is only visible and usable within the account in which it is registered. Currently, AWS CloudFormation marks any types you register as PRIVATE.\n\nPUBLIC: The type is publically visible and usable within any Amazon account.", + "enum": [ + "PUBLIC", + "PRIVATE" + ], + "type": "string" + } + }, + "required": [ + "SchemaHandlerPackage", + "TypeName" + ], + "writeOnlyProperties": [ + "/properties/SchemaHandlerPackage" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/IsDefaultVersion", + "/properties/Visibility", + "/properties/VersionId", + "/properties/TypeArn" + ], + "createOnlyProperties": [ + "/properties/ExecutionRoleArn", + "/properties/LoggingConfig", + "/properties/SchemaHandlerPackage", + "/properties/TypeName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "cloudformation:DescribeType", + "cloudformation:DescribeTypeRegistration", + "cloudformation:RegisterType", + "iam:PassRole", + "s3:GetObject", + "s3:ListBucket", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "cloudformation:DescribeType" + ] + }, + "delete": { + "permissions": [ + "cloudformation:DeregisterType", + "cloudformation:DescribeType" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "TypeName": { + "$ref": "resource-schema.json#/properties/TypeName" + }, + "TypeArn": { + "$ref": "resource-schema.json#/properties/TypeArn" + } + } + }, + "permissions": [ + "cloudformation:ListTypes", + "cloudformation:ListTypeVersions" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/macro.json b/internal/aws/cfn/schemas/aws/cloudformation/macro.json new file mode 100644 index 00000000..a0405699 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/macro.json @@ -0,0 +1,38 @@ +{ + "typeName": "AWS::CloudFormation::Macro", + "description": "Resource Type definition for AWS::CloudFormation::Macro", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "FunctionName": { + "type": "string" + }, + "LogGroupName": { + "type": "string" + }, + "LogRoleARN": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "FunctionName", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/moduledefaultversion.json b/internal/aws/cfn/schemas/aws/cloudformation/moduledefaultversion.json new file mode 100644 index 00000000..cb618140 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/moduledefaultversion.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::CloudFormation::ModuleDefaultVersion", + "description": "A module that has been registered in the CloudFormation registry as the default version", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the module version to set as the default version.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/module/.+/[0-9]{8}$", + "type": "string" + }, + "ModuleName": { + "description": "The name of a module existing in the registry.", + "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::MODULE", + "type": "string" + }, + "VersionId": { + "description": "The ID of an existing version of the named module to set as the default.", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "Arn" + ] + }, + { + "required": [ + "ModuleName", + "VersionId" + ] + } + ], + "createOnlyProperties": [ + "/properties/Arn", + "/properties/ModuleName", + "/properties/VersionId" + ], + "writeOnlyProperties": [ + "/properties/ModuleName", + "/properties/VersionId" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/ModuleName" + ] + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:DescribeType", + "cloudformation:SetTypeDefaultVersion" + ] + }, + "delete": { + "permissions": [] + }, + "read": { + "permissions": [ + "cloudformation:DescribeType" + ] + }, + "list": { + "permissions": [ + "cloudformation:ListTypes" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/moduleversion.json b/internal/aws/cfn/schemas/aws/cloudformation/moduleversion.json new file mode 100644 index 00000000..bb04fb9a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/moduleversion.json @@ -0,0 +1,106 @@ +{ + "typeName": "AWS::CloudFormation::ModuleVersion", + "description": "A module that has been registered in the CloudFormation registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the module.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/module/.+$", + "type": "string" + }, + "Description": { + "description": "The description of the registered module.", + "maxLength": 1024, + "minLength": 1, + "type": "string" + }, + "DocumentationUrl": { + "description": "The URL of a page providing detailed documentation for this module.", + "maxLength": 4096, + "type": "string" + }, + "ModuleName": { + "description": "The name of the module being registered.\n\nRecommended module naming pattern: company_or_organization::service::type::MODULE.", + "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::MODULE", + "type": "string" + }, + "ModulePackage": { + "description": "The url to the S3 bucket containing the schema and template fragment for the module you want to register.", + "type": "string" + }, + "IsDefaultVersion": { + "description": "Indicator of whether this module version is the current default version", + "type": "boolean" + }, + "Schema": { + "description": "The schema defining input parameters to and resources generated by the module.", + "maxLength": 16777216, + "minLength": 1, + "type": "string" + }, + "TimeCreated": { + "description": "The time that the specified module version was registered.", + "type": "string" + }, + "VersionId": { + "description": "The version ID of the module represented by this module instance.", + "pattern": "^[0-9]{8}$", + "type": "string" + }, + "Visibility": { + "description": "The scope at which the type is visible and usable in CloudFormation operations.\n\nThe only allowed value at present is:\n\nPRIVATE: The type is only visible and usable within the account in which it is registered. Currently, AWS CloudFormation marks any types you register as PRIVATE.", + "enum": [ + "PRIVATE" + ], + "type": "string" + } + }, + "required": [ + "ModuleName", + "ModulePackage" + ], + "createOnlyProperties": [ + "/properties/ModuleName", + "/properties/ModulePackage" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Description", + "/properties/DocumentationUrl", + "/properties/IsDefaultVersion", + "/properties/Schema", + "/properties/TimeCreated", + "/properties/VersionId", + "/properties/Visibility" + ], + "writeOnlyProperties": [ + "/properties/ModulePackage" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:DescribeType", + "cloudformation:DescribeTypeRegistration", + "cloudformation:ListTypeVersions", + "cloudformation:RegisterType", + "s3:GetObject", + "s3:ListBucket" + ] + }, + "read": { + "permissions": [ + "cloudformation:DescribeType" + ] + }, + "delete": { + "permissions": [ + "cloudformation:DeregisterType", + "cloudformation:DescribeType" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/publictypeversion.json b/internal/aws/cfn/schemas/aws/cloudformation/publictypeversion.json new file mode 100644 index 00000000..5edb8d9b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/publictypeversion.json @@ -0,0 +1,112 @@ +{ + "typeName": "AWS::CloudFormation::PublicTypeVersion", + "description": "Test and Publish a resource that has been registered in the CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "properties": { + "Arn": { + "description": "The Amazon Resource Number (ARN) of the extension.", + "pattern": "arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:[0-9]{12}:type/.+", + "type": "string" + }, + "TypeVersionArn": { + "description": "The Amazon Resource Number (ARN) of the extension with the versionId.", + "pattern": "arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:[0-9]{12}:type/.+", + "type": "string" + }, + "PublicVersionNumber": { + "description": "The version number of a public third-party extension", + "type": "string", + "minLength": 5, + "maxLength": 64 + }, + "PublisherId": { + "description": "The publisher id assigned by CloudFormation for publishing in this region.", + "pattern": "[0-9a-zA-Z]{40}", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "PublicTypeArn": { + "description": "The Amazon Resource Number (ARN) assigned to the public extension upon publication", + "pattern": "arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/.+", + "type": "string", + "maxLength": 1024 + }, + "TypeName": { + "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.", + "pattern": "[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}", + "type": "string" + }, + "LogDeliveryBucket": { + "description": "A url to the S3 bucket where logs for the testType run will be available", + "type": "string" + }, + "Type": { + "description": "The kind of extension", + "enum": [ + "RESOURCE", + "MODULE", + "HOOK" + ], + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "TypeName", + "Type" + ] + }, + { + "required": [ + "Arn" + ] + } + ], + "readOnlyProperties": [ + "/properties/PublicTypeArn", + "/properties/TypeVersionArn", + "/properties/PublisherId" + ], + "writeOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/LogDeliveryBucket", + "/properties/PublicVersionNumber", + "/properties/TypeName", + "/properties/Type", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/PublicTypeArn" + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:TestType", + "cloudformation:DescribeType", + "cloudformation:PublishType", + "cloudformation:DescribePublisher", + "s3:GetObject", + "s3:PutObject" + ] + }, + "delete": { + "permissions": [] + }, + "read": { + "permissions": [ + "cloudformation:DescribeType", + "cloudformation:DescribePublisher" + ] + }, + "list": { + "permissions": [ + "cloudformation:ListTypes" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/publisher.json b/internal/aws/cfn/schemas/aws/cloudformation/publisher.json new file mode 100644 index 00000000..885aba23 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/publisher.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::CloudFormation::Publisher", + "description": "Register as a publisher in the CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "properties": { + "AcceptTermsAndConditions": { + "description": "Whether you accept the terms and conditions for publishing extensions in the CloudFormation registry. You must accept the terms and conditions in order to publish public extensions to the CloudFormation registry. The terms and conditions can be found at https://cloudformation-registry-documents.s3.amazonaws.com/Terms_and_Conditions_for_AWS_CloudFormation_Registry_Publishers.pdf", + "type": "boolean" + }, + "PublisherId": { + "description": "The publisher id assigned by CloudFormation for publishing in this region.", + "pattern": "[0-9a-zA-Z]{40}", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "ConnectionArn": { + "description": "If you are using a Bitbucket or GitHub account for identity verification, the Amazon Resource Name (ARN) for your connection to that account.", + "type": "string", + "pattern": "arn:aws(-[w]+)*:.+:.+:[0-9]{12}:.+" + }, + "PublisherStatus": { + "description": "Whether the publisher is verified.", + "type": "string", + "enum": [ + "VERIFIED", + "UNVERIFIED" + ] + }, + "PublisherProfile": { + "description": "The URL to the publisher's profile with the identity provider.", + "pattern": "(http:|https:)+[^s]+[w]", + "type": "string", + "maxLength": 1024 + }, + "IdentityProvider": { + "description": "The type of account used as the identity provider when registering this publisher with CloudFormation.", + "type": "string", + "enum": [ + "AWS_Marketplace", + "GitHub", + "Bitbucket" + ] + } + }, + "required": [ + "AcceptTermsAndConditions" + ], + "readOnlyProperties": [ + "/properties/PublisherId", + "/properties/PublisherStatus", + "/properties/PublisherProfile", + "/properties/IdentityProvider" + ], + "createOnlyProperties": [ + "/properties/AcceptTermsAndConditions", + "/properties/ConnectionArn" + ], + "writeOnlyProperties": [ + "/properties/ConnectionArn" + ], + "primaryIdentifier": [ + "/properties/PublisherId" + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:RegisterPublisher", + "cloudformation:DescribePublisher", + "codestar-connections:GetConnection", + "codestar-connections:UseConnection" + ] + }, + "read": { + "permissions": [ + "cloudformation:DescribePublisher" + ] + }, + "delete": { + "permissions": [] + }, + "list": { + "permissions": [ + "cloudformation:DescribePublisher" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/resourcedefaultversion.json b/internal/aws/cfn/schemas/aws/cloudformation/resourcedefaultversion.json new file mode 100644 index 00000000..6e320e89 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/resourcedefaultversion.json @@ -0,0 +1,83 @@ +{ + "typeName": "AWS::CloudFormation::ResourceDefaultVersion", + "description": "The default version of a resource that has been registered in the CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "properties": { + "TypeVersionArn": { + "description": "The Amazon Resource Name (ARN) of the type version.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/resource/.+$", + "type": "string", + "relationshipRef": { + "typeName": "AWS::CloudFormation::ResourceVersion", + "propertyPath": "/properties/Arn" + } + }, + "TypeName": { + "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.", + "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$", + "type": "string" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the type. This is used to uniquely identify a ResourceDefaultVersion", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/resource/.+$", + "type": "string" + }, + "VersionId": { + "description": "The ID of an existing version of the resource to set as the default.", + "pattern": "^[A-Za-z0-9-]{1,128}$", + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "TypeVersionArn" + ] + }, + { + "required": [ + "TypeName", + "VersionId" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/TypeName" + ] + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:SetTypeDefaultVersion" + ] + }, + "read": { + "permissions": [ + "cloudformation:DescribeType" + ] + }, + "update": { + "permissions": [ + "cloudformation:SetTypeDefaultVersion" + ] + }, + "delete": { + "permissions": [ + "" + ] + }, + "list": { + "permissions": [ + "cloudformation:ListTypeVersions" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/resourceversion.json b/internal/aws/cfn/schemas/aws/cloudformation/resourceversion.json new file mode 100644 index 00000000..89bb91a2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/resourceversion.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::CloudFormation::ResourceVersion", + "description": "A resource that has been registered in the CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "definitions": { + "LoggingConfig": { + "type": "object", + "properties": { + "LogGroupName": { + "description": "The Amazon CloudWatch log group to which CloudFormation sends error logging information when invoking the type's handlers.", + "type": "string", + "pattern": "^[\\.\\-_/#A-Za-z0-9]+$", + "minLength": 1, + "maxLength": 512 + }, + "LogRoleArn": { + "description": "The ARN of the role that CloudFormation should assume when sending log entries to CloudWatch logs.", + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the type, here the ResourceVersion. This is used to uniquely identify a ResourceVersion resource", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/resource/.+$", + "type": "string" + }, + "TypeArn": { + "description": "The Amazon Resource Name (ARN) of the type without the versionID.", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/resource/.+$", + "type": "string" + }, + "ExecutionRoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials.", + "type": "string" + }, + "IsDefaultVersion": { + "description": "Indicates if this type version is the current default version", + "type": "boolean" + }, + "LoggingConfig": { + "$ref": "#/definitions/LoggingConfig", + "description": "Specifies logging configuration information for a type." + }, + "ProvisioningType": { + "description": "The provisioning behavior of the type. AWS CloudFormation determines the provisioning type during registration, based on the types of handlers in the schema handler package submitted.", + "enum": [ + "NON_PROVISIONABLE", + "IMMUTABLE", + "FULLY_MUTABLE" + ], + "type": "string" + }, + "SchemaHandlerPackage": { + "description": "A url to the S3 bucket containing the schema handler package that contains the schema, event handlers, and associated files for the type you want to register.\n\nFor information on generating a schema handler package for the type you want to register, see submit in the CloudFormation CLI User Guide.", + "type": "string" + }, + "TypeName": { + "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.", + "pattern": "^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$", + "type": "string" + }, + "VersionId": { + "description": "The ID of the version of the type represented by this resource instance.", + "pattern": "^[A-Za-z0-9-]{1,128}$", + "type": "string" + }, + "Visibility": { + "description": "The scope at which the type is visible and usable in CloudFormation operations.\n\nValid values include:\n\nPRIVATE: The type is only visible and usable within the account in which it is registered. Currently, AWS CloudFormation marks any types you register as PRIVATE.\n\nPUBLIC: The type is publically visible and usable within any Amazon account.", + "enum": [ + "PUBLIC", + "PRIVATE" + ], + "type": "string" + } + }, + "required": [ + "SchemaHandlerPackage", + "TypeName" + ], + "writeOnlyProperties": [ + "/properties/SchemaHandlerPackage" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/IsDefaultVersion", + "/properties/ProvisioningType", + "/properties/Visibility", + "/properties/VersionId", + "/properties/TypeArn" + ], + "createOnlyProperties": [ + "/properties/ExecutionRoleArn", + "/properties/LoggingConfig", + "/properties/SchemaHandlerPackage", + "/properties/TypeName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:DescribeTypeRegistration", + "cloudformation:RegisterType", + "iam:PassRole", + "s3:GetObject", + "s3:ListBucket", + "kms:Decrypt", + "cloudformation:ListTypeVersions", + "cloudformation:DeregisterType", + "cloudformation:DescribeType" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "cloudformation:DescribeType" + ] + }, + "delete": { + "permissions": [ + "cloudformation:DeregisterType", + "cloudformation:DescribeType" + ] + }, + "list": { + "permissions": [ + "cloudformation:ListTypes" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/stack.json b/internal/aws/cfn/schemas/aws/cloudformation/stack.json new file mode 100644 index 00000000..e3208bcb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/stack.json @@ -0,0 +1,243 @@ +{ + "typeName": "AWS::CloudFormation::Stack", + "description": "The AWS::CloudFormation::Stack resource nests a stack as a resource in a top-level template.", + "additionalProperties": false, + "properties": { + "Capabilities": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "CAPABILITY_IAM", + "CAPABILITY_NAMED_IAM", + "CAPABILITY_AUTO_EXPAND" + ] + } + }, + "RoleARN": { + "type": "string" + }, + "Outputs": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Output" + } + }, + "Description": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "DisableRollback": { + "type": "boolean" + }, + "EnableTerminationProtection": { + "type": "boolean" + }, + "NotificationARNs": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "maxItems": 5 + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "ParentId": { + "type": "string" + }, + "RootId": { + "type": "string" + }, + "ChangeSetId": { + "type": "string" + }, + "StackName": { + "type": "string" + }, + "StackId": { + "type": "string" + }, + "StackPolicyBody": { + "type": "object" + }, + "StackPolicyURL": { + "type": "string" + }, + "StackStatus": { + "type": "string", + "enum": [ + "CREATE_IN_PROGRESS", + "CREATE_FAILED", + "CREATE_COMPLETE", + "ROLLBACK_IN_PROGRESS", + "ROLLBACK_FAILED", + "ROLLBACK_COMPLETE", + "DELETE_IN_PROGRESS", + "DELETE_FAILED", + "DELETE_COMPLETE", + "UPDATE_IN_PROGRESS", + "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS", + "UPDATE_COMPLETE", + "UPDATE_FAILED", + "UPDATE_ROLLBACK_IN_PROGRESS", + "UPDATE_ROLLBACK_FAILED", + "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS", + "UPDATE_ROLLBACK_COMPLETE", + "REVIEW_IN_PROGRESS", + "IMPORT_IN_PROGRESS", + "IMPORT_COMPLETE", + "IMPORT_ROLLBACK_IN_PROGRESS", + "IMPORT_ROLLBACK_FAILED", + "IMPORT_ROLLBACK_COMPLETE" + ] + }, + "StackStatusReason": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50 + }, + "TemplateBody": { + "type": "object" + }, + "TemplateURL": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "TimeoutInMinutes": { + "type": "integer", + "minimum": 1 + }, + "LastUpdateTime": { + "type": "string" + }, + "CreationTime": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Output": { + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "ExportName": { + "type": "string" + }, + "OutputKey": { + "type": "string" + }, + "OutputValue": { + "type": "string" + } + } + } + }, + "required": [ + "StackName" + ], + "readOnlyProperties": [ + "/properties/StackId", + "/properties/StackStatus", + "/properties/CreationTime", + "/properties/RootId", + "/properties/ParentId", + "/properties/ChangeSetId", + "/properties/Outputs", + "/properties/LastUpdateTime" + ], + "writeOnlyProperties": [ + "/properties/TemplateURL", + "/properties/StackPolicyURL" + ], + "createOnlyProperties": [ + "/properties/StackName" + ], + "primaryIdentifier": [ + "/properties/StackId" + ], + "additionalIdentifiers": [ + [ + "/properties/StackName" + ] + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "cloudformation:DescribeStacks", + "cloudformation:CreateStack", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "cloudformation:DescribeStacks", + "cloudformation:UpdateStack", + "cloudformation:UpdateTerminationProtection", + "cloudformation:SetStackPolicy", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "cloudformation:DescribeStacks", + "cloudformation:DeleteStack" + ] + }, + "read": { + "permissions": [ + "cloudformation:DescribeStacks", + "cloudformation:GetStackPolicy", + "cloudformation:GetTemplate" + ] + }, + "list": { + "permissions": [ + "cloudformation:ListStacks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/stackset.json b/internal/aws/cfn/schemas/aws/cloudformation/stackset.json new file mode 100644 index 00000000..f68d9258 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/stackset.json @@ -0,0 +1,419 @@ +{ + "typeName": "AWS::CloudFormation::StackSet", + "description": "StackSet as a resource provides one-click experience for provisioning a StackSet and StackInstances", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", + "resourceLink": { + "templateUri": "/cloudformation/home?region=${awsRegion}#/stacksets/${StackSetId}", + "mappings": { + "StackSetId": "/StackSetId" + } + }, + "definitions": { + "Tag": { + "description": "Tag type enables you to specify a key-value pair that can be used to store information about an AWS CloudFormation StackSet.", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag. You can specify a maximum of 127 characters for a tag key.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\:\\_\\.\\/\\=\\+\\-]+$" + }, + "Value": { + "description": "A string containing the value for this tag. You can specify a maximum of 256 characters for a tag value.", + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "AutoDeployment": { + "type": "object", + "properties": { + "Enabled": { + "description": "If set to true, StackSets automatically deploys additional stack instances to AWS Organizations accounts that are added to a target organization or organizational unit (OU) in the specified Regions. If an account is removed from a target organization or OU, StackSets deletes stack instances from the account in the specified Regions.", + "type": "boolean" + }, + "RetainStacksOnAccountRemoval": { + "description": "If set to true, stack resources are retained when an account is removed from a target organization or OU. If set to false, stack resources are deleted. Specify only if Enabled is set to True.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "Account": { + "description": "AWS account that you want to create stack instances in the specified Region(s) for.", + "type": "string", + "pattern": "^[0-9]{12}$" + }, + "Region": { + "type": "string", + "pattern": "^[a-zA-Z0-9-]{1,128}$" + }, + "OrganizationalUnitId": { + "type": "string", + "pattern": "^(ou-[a-z0-9]{4,32}-[a-z0-9]{8,32}|r-[a-z0-9]{4,32})$" + }, + "Capability": { + "type": "string", + "enum": [ + "CAPABILITY_IAM", + "CAPABILITY_NAMED_IAM", + "CAPABILITY_AUTO_EXPAND" + ] + }, + "RegionConcurrencyType": { + "description": "The concurrency type of deploying StackSets operations in regions, could be in parallel or one region at a time", + "type": "string", + "enum": [ + "SEQUENTIAL", + "PARALLEL" + ] + }, + "Active": { + "description": "When true, StackSets performs non-conflicting operations concurrently and queues conflicting operations. After conflicting operations finish, StackSets starts queued operations in request order.", + "type": "boolean" + }, + "OperationPreferences": { + "description": "The user-specified preferences for how AWS CloudFormation performs a stack set operation.", + "type": "object", + "properties": { + "FailureToleranceCount": { + "type": "integer", + "minimum": 0 + }, + "FailureTolerancePercentage": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "MaxConcurrentCount": { + "type": "integer", + "minimum": 1 + }, + "MaxConcurrentPercentage": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "RegionOrder": { + "type": "array", + "items": { + "$ref": "#/definitions/Region" + } + }, + "RegionConcurrencyType": { + "$ref": "#/definitions/RegionConcurrencyType" + } + }, + "additionalProperties": false + }, + "Parameter": { + "type": "object", + "properties": { + "ParameterKey": { + "description": "The key associated with the parameter. If you don't specify a key and value for a particular parameter, AWS CloudFormation uses the default value that is specified in your template.", + "type": "string" + }, + "ParameterValue": { + "description": "The input value associated with the parameter.", + "type": "string" + } + }, + "required": [ + "ParameterKey", + "ParameterValue" + ], + "additionalProperties": false + }, + "DeploymentTargets": { + "description": " The AWS OrganizationalUnitIds or Accounts for which to create stack instances in the specified Regions.", + "type": "object", + "properties": { + "Accounts": { + "description": "AWS accounts that you want to create stack instances in the specified Region(s) for.", + "type": "array", + "minItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Account" + } + }, + "AccountsUrl": { + "description": "Returns the value of the AccountsUrl property.", + "type": "string", + "minLength": 1, + "maxLength": 5120, + "pattern": "(s3://|http(s?)://).+" + }, + "OrganizationalUnitIds": { + "description": "The organization root ID or organizational unit (OU) IDs to which StackSets deploys.", + "type": "array", + "minItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/OrganizationalUnitId" + } + }, + "AccountFilterType": { + "description": "The filter type you want to apply on organizational units and accounts.", + "type": "string", + "enum": [ + "NONE", + "UNION", + "INTERSECTION", + "DIFFERENCE" + ] + } + }, + "additionalProperties": false + }, + "StackInstances": { + "description": "Stack instances in some specific accounts and Regions.", + "type": "object", + "properties": { + "DeploymentTargets": { + "$ref": "#/definitions/DeploymentTargets" + }, + "Regions": { + "description": "The names of one or more Regions where you want to create stack instances using the specified AWS account(s).", + "type": "array", + "minItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Region" + } + }, + "ParameterOverrides": { + "description": "A list of stack set parameters whose values you want to override in the selected stack instances.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Parameter" + } + } + }, + "required": [ + "DeploymentTargets", + "Regions" + ], + "additionalProperties": false + } + }, + "properties": { + "StackSetName": { + "description": "The name to associate with the stack set. The name must be unique in the Region where you create your stack set.", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9\\-]{0,127}$", + "maxLength": 128 + }, + "StackSetId": { + "description": "The ID of the stack set that you're creating.", + "type": "string" + }, + "AdministrationRoleARN": { + "description": "The Amazon Resource Number (ARN) of the IAM role to use to create this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "AutoDeployment": { + "description": "Describes whether StackSets automatically deploys to AWS Organizations accounts that are added to the target organization or organizational unit (OU). Specify only if PermissionModel is SERVICE_MANAGED.", + "$ref": "#/definitions/AutoDeployment" + }, + "Capabilities": { + "description": "In some cases, you must explicitly acknowledge that your stack set template contains certain capabilities in order for AWS CloudFormation to create the stack set and related stack instances.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Capability" + } + }, + "Description": { + "description": "A description of the stack set. You can use the description to identify the stack set's purpose or other important information.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ExecutionRoleName": { + "description": "The name of the IAM execution role to use to create the stack set. If you do not specify an execution role, AWS CloudFormation uses the AWSCloudFormationStackSetExecutionRole role for the stack set operation.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "OperationPreferences": { + "$ref": "#/definitions/OperationPreferences" + }, + "StackInstancesGroup": { + "description": "A group of stack instances with parameters in some specific accounts and regions.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/StackInstances" + } + }, + "Parameters": { + "description": "The input parameters for the stack set template.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Parameter" + } + }, + "PermissionModel": { + "description": "Describes how the IAM roles required for stack set operations are created. By default, SELF-MANAGED is specified.", + "type": "string", + "enum": [ + "SERVICE_MANAGED", + "SELF_MANAGED" + ] + }, + "Tags": { + "description": "The key-value pairs to associate with this stack set and the stacks created from it. AWS CloudFormation also propagates these tags to supported resources that are created in the stacks. A maximum number of 50 tags can be specified.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TemplateBody": { + "description": "The structure that contains the template body, with a minimum length of 1 byte and a maximum length of 51,200 bytes.", + "type": "string", + "minLength": 1, + "maxLength": 51200 + }, + "TemplateURL": { + "description": "Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that is located in an Amazon S3 bucket.", + "type": "string", + "minLength": 1, + "maxLength": 5120 + }, + "CallAs": { + "description": "Specifies the AWS account that you are acting from. By default, SELF is specified. For self-managed permissions, specify SELF; for service-managed permissions, if you are signed in to the organization's management account, specify SELF. If you are signed in to a delegated administrator account, specify DELEGATED_ADMIN.", + "type": "string", + "enum": [ + "SELF", + "DELEGATED_ADMIN" + ] + }, + "ManagedExecution": { + "description": "Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.", + "type": "object", + "properties": { + "Active": { + "$ref": "#/definitions/Active" + } + }, + "additionalProperties": false + } + }, + "required": [ + "StackSetName", + "PermissionModel" + ], + "oneOf": [ + { + "required": [ + "TemplateURL" + ] + }, + { + "required": [ + "TemplateBody" + ] + } + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/PermissionModel", + "/properties/StackSetName" + ], + "writeOnlyProperties": [ + "/properties/TemplateURL", + "/properties/OperationPreferences", + "/properties/StackInstancesGroup", + "/properties/CallAs" + ], + "readOnlyProperties": [ + "/properties/StackSetId" + ], + "primaryIdentifier": [ + "/properties/StackSetId" + ], + "additionalIdentifiers": [ + [ + "/properties/StackSetName" + ] + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:GetTemplateSummary", + "cloudformation:CreateStackSet", + "cloudformation:CreateStackInstances", + "cloudformation:DescribeStackSetOperation", + "cloudformation:ListStackSetOperationResults", + "cloudformation:TagResource", + "iam:PassRole" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "cloudformation:DescribeStackSet", + "cloudformation:ListStackInstances", + "cloudformation:DescribeStackInstance" + ] + }, + "update": { + "permissions": [ + "cloudformation:GetTemplateSummary", + "cloudformation:UpdateStackSet", + "cloudformation:CreateStackInstances", + "cloudformation:DeleteStackInstances", + "cloudformation:UpdateStackInstances", + "cloudformation:DescribeStackSet", + "cloudformation:DescribeStackSetOperation", + "cloudformation:ListStackSetOperationResults", + "cloudformation:TagResource", + "cloudformation:UntagResource", + "iam:PassRole" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "cloudformation:DeleteStackSet", + "cloudformation:DeleteStackInstances", + "cloudformation:DescribeStackSet", + "cloudformation:DescribeStackSetOperation", + "cloudformation:ListStackSetOperationResults", + "cloudformation:UntagResource" + ], + "timeoutInMinutes": 2160 + }, + "list": { + "permissions": [ + "cloudformation:ListStackSets", + "cloudformation:DescribeStackSet", + "cloudformation:ListStackInstances", + "cloudformation:DescribeStackInstance" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/typeactivation.json b/internal/aws/cfn/schemas/aws/cloudformation/typeactivation.json new file mode 100644 index 00000000..893980a3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/typeactivation.json @@ -0,0 +1,157 @@ +{ + "typeName": "AWS::CloudFormation::TypeActivation", + "description": "Enable a resource that has been published in the CloudFormation Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation", + "definitions": { + "LoggingConfig": { + "type": "object", + "properties": { + "LogGroupName": { + "description": "The Amazon CloudWatch log group to which CloudFormation sends error logging information when invoking the type's handlers.", + "type": "string", + "pattern": "^[\\.\\-_/#A-Za-z0-9]+$", + "minLength": 1, + "maxLength": 512 + }, + "LogRoleArn": { + "description": "The ARN of the role that CloudFormation should assume when sending log entries to CloudWatch logs.", + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the extension.", + "pattern": "arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/.+", + "type": "string" + }, + "ExecutionRoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials.", + "type": "string" + }, + "PublisherId": { + "description": "The publisher id assigned by CloudFormation for publishing in this region.", + "pattern": "[0-9a-zA-Z]{40}", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "LoggingConfig": { + "$ref": "#/definitions/LoggingConfig", + "description": "Specifies logging configuration information for a type." + }, + "PublicTypeArn": { + "description": "The Amazon Resource Number (ARN) assigned to the public extension upon publication", + "pattern": "arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/.+", + "type": "string", + "maxLength": 1024 + }, + "AutoUpdate": { + "description": "Whether to automatically update the extension in this account and region when a new minor version is published by the extension publisher. Major versions released by the publisher must be manually updated.", + "type": "boolean" + }, + "TypeNameAlias": { + "description": "An alias to assign to the public extension in this account and region. If you specify an alias for the extension, you must then use the alias to refer to the extension in your templates.", + "pattern": "[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}", + "type": "string", + "minLength": 10, + "maxLength": 204 + }, + "VersionBump": { + "description": "Manually updates a previously-enabled type to a new major or minor version, if available. You can also use this parameter to update the value of AutoUpdateEnabled", + "type": "string", + "enum": [ + "MAJOR", + "MINOR" + ] + }, + "MajorVersion": { + "description": "The Major Version of the type you want to enable", + "type": "string", + "minLength": 1, + "maxLength": 100000 + }, + "TypeName": { + "description": "The name of the type being registered.\n\nWe recommend that type names adhere to the following pattern: company_or_organization::service::type.", + "pattern": "[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}", + "type": "string" + }, + "Type": { + "description": "The kind of extension", + "enum": [ + "RESOURCE", + "MODULE", + "HOOK" + ], + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "TypeName", + "PublisherId", + "Type" + ] + }, + { + "required": [ + "PublicTypeArn" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/LoggingConfig" + ], + "writeOnlyProperties": [ + "/properties/ExecutionRoleArn", + "/properties/Type", + "/properties/LoggingConfig", + "/properties/VersionBump", + "/properties/AutoUpdate", + "/properties/MajorVersion" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:ActivateType", + "cloudformation:DescribeType", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "cloudformation:ActivateType", + "cloudformation:DescribeType", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "cloudformation:DescribeType" + ] + }, + "delete": { + "permissions": [ + "cloudformation:DeactivateType", + "cloudformation:DescribeType" + ] + }, + "list": { + "permissions": [ + "cloudformation:ListTypes" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/waitcondition.json b/internal/aws/cfn/schemas/aws/cloudformation/waitcondition.json new file mode 100644 index 00000000..232d5c01 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/waitcondition.json @@ -0,0 +1,29 @@ +{ + "typeName": "AWS::CloudFormation::WaitCondition", + "description": "Resource Type definition for AWS::CloudFormation::WaitCondition", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Data": { + "type": "object" + }, + "Count": { + "type": "integer" + }, + "Handle": { + "type": "string" + }, + "Timeout": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/Data", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudformation/waitconditionhandle.json b/internal/aws/cfn/schemas/aws/cloudformation/waitconditionhandle.json new file mode 100644 index 00000000..34c317b9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudformation/waitconditionhandle.json @@ -0,0 +1,16 @@ +{ + "typeName": "AWS::CloudFormation::WaitConditionHandle", + "description": "Resource Type definition for AWS::CloudFormation::WaitConditionHandle", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/cachepolicy.json b/internal/aws/cfn/schemas/aws/cloudfront/cachepolicy.json new file mode 100644 index 00000000..d0ff128b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/cachepolicy.json @@ -0,0 +1,187 @@ +{ + "additionalProperties": false, + "definitions": { + "CachePolicyConfig": { + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "DefaultTTL": { + "minimum": 0, + "multipleOf": 1.0, + "type": "number" + }, + "MaxTTL": { + "minimum": 0, + "multipleOf": 1.0, + "type": "number" + }, + "MinTTL": { + "minimum": 0, + "multipleOf": 1.0, + "type": "number" + }, + "Name": { + "type": "string" + }, + "ParametersInCacheKeyAndForwardedToOrigin": { + "$ref": "#/definitions/ParametersInCacheKeyAndForwardedToOrigin" + } + }, + "required": [ + "Name", + "MinTTL", + "MaxTTL", + "DefaultTTL", + "ParametersInCacheKeyAndForwardedToOrigin" + ], + "type": "object" + }, + "CookiesConfig": { + "additionalProperties": false, + "properties": { + "CookieBehavior": { + "pattern": "^(none|whitelist|allExcept|all)$", + "type": "string" + }, + "Cookies": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "CookieBehavior" + ], + "type": "object" + }, + "HeadersConfig": { + "additionalProperties": false, + "properties": { + "HeaderBehavior": { + "pattern": "^(none|whitelist)$", + "type": "string" + }, + "Headers": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "HeaderBehavior" + ], + "type": "object" + }, + "ParametersInCacheKeyAndForwardedToOrigin": { + "additionalProperties": false, + "properties": { + "CookiesConfig": { + "$ref": "#/definitions/CookiesConfig" + }, + "EnableAcceptEncodingBrotli": { + "type": "boolean" + }, + "EnableAcceptEncodingGzip": { + "type": "boolean" + }, + "HeadersConfig": { + "$ref": "#/definitions/HeadersConfig" + }, + "QueryStringsConfig": { + "$ref": "#/definitions/QueryStringsConfig" + } + }, + "required": [ + "EnableAcceptEncodingGzip", + "HeadersConfig", + "CookiesConfig", + "QueryStringsConfig" + ], + "type": "object" + }, + "QueryStringsConfig": { + "additionalProperties": false, + "properties": { + "QueryStringBehavior": { + "pattern": "^(none|whitelist|allExcept|all)$", + "type": "string" + }, + "QueryStrings": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "QueryStringBehavior" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::CachePolicy", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateCachePolicy" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteCachePolicy", + "cloudfront:GetCachePolicy" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListCachePolicies" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetCachePolicy" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateCachePolicy", + "cloudfront:GetCachePolicy" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "CachePolicyConfig": { + "$ref": "#/definitions/CachePolicyConfig" + }, + "Id": { + "type": "string" + }, + "LastModifiedTime": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/LastModifiedTime" + ], + "required": [ + "CachePolicyConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::CachePolicy" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/cloudfrontoriginaccessidentity.json b/internal/aws/cfn/schemas/aws/cloudfront/cloudfrontoriginaccessidentity.json new file mode 100644 index 00000000..a7b30519 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/cloudfrontoriginaccessidentity.json @@ -0,0 +1,75 @@ +{ + "additionalProperties": false, + "definitions": { + "CloudFrontOriginAccessIdentityConfig": { + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + } + }, + "required": [ + "Comment" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::CloudFrontOriginAccessIdentity", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateCloudFrontOriginAccessIdentity" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteCloudFrontOriginAccessIdentity", + "cloudfront:GetCloudFrontOriginAccessIdentity" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListCloudFrontOriginAccessIdentities" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetCloudFrontOriginAccessIdentity" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateCloudFrontOriginAccessIdentity", + "cloudfront:GetCloudFrontOriginAccessIdentity" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "CloudFrontOriginAccessIdentityConfig": { + "$ref": "#/definitions/CloudFrontOriginAccessIdentityConfig" + }, + "Id": { + "type": "string" + }, + "S3CanonicalUserId": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/S3CanonicalUserId" + ], + "required": [ + "CloudFrontOriginAccessIdentityConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::CloudFrontOriginAccessIdentity" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/continuousdeploymentpolicy.json b/internal/aws/cfn/schemas/aws/cloudfront/continuousdeploymentpolicy.json new file mode 100644 index 00000000..5b8765ed --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/continuousdeploymentpolicy.json @@ -0,0 +1,220 @@ +{ + "additionalProperties": false, + "deprecatedProperties": [ + "/definitions/ContinuousDeploymentPolicyConfig/properties/Type", + "/definitions/ContinuousDeploymentPolicyConfig/properties/SingleHeaderPolicyConfig", + "/definitions/ContinuousDeploymentPolicyConfig/properties/SingleWeightPolicyConfig" + ], + "definitions": { + "ContinuousDeploymentPolicyConfig": { + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "SingleHeaderPolicyConfig": { + "additionalProperties": false, + "properties": { + "Header": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "Value": { + "maxLength": 1783, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "Header", + "Value" + ], + "type": "object" + }, + "SingleWeightPolicyConfig": { + "additionalProperties": false, + "properties": { + "SessionStickinessConfig": { + "$ref": "#/definitions/SessionStickinessConfig" + }, + "Weight": { + "maximum": 1, + "minimum": 0, + "multipleOf": 0.01, + "type": "number" + } + }, + "required": [ + "Weight" + ], + "type": "object" + }, + "StagingDistributionDnsNames": { + "insertionOrder": true, + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "TrafficConfig": { + "$ref": "#/definitions/TrafficConfig" + }, + "Type": { + "enum": [ + "SingleWeight", + "SingleHeader" + ], + "type": "string" + } + }, + "required": [ + "Enabled", + "StagingDistributionDnsNames" + ], + "type": "object" + }, + "SessionStickinessConfig": { + "additionalProperties": false, + "properties": { + "IdleTTL": { + "maximum": 3600, + "minimum": 300, + "multipleOf": 1, + "type": "integer" + }, + "MaximumTTL": { + "maximum": 3600, + "minimum": 300, + "multipleOf": 1, + "type": "integer" + } + }, + "required": [ + "IdleTTL", + "MaximumTTL" + ], + "type": "object" + }, + "SingleHeaderConfig": { + "additionalProperties": false, + "properties": { + "Header": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "Value": { + "maxLength": 1783, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "Header", + "Value" + ], + "type": "object" + }, + "SingleWeightConfig": { + "additionalProperties": false, + "properties": { + "SessionStickinessConfig": { + "$ref": "#/definitions/SessionStickinessConfig" + }, + "Weight": { + "maximum": 1, + "minimum": 0, + "multipleOf": 0.01, + "type": "number" + } + }, + "required": [ + "Weight" + ], + "type": "object" + }, + "TrafficConfig": { + "additionalProperties": false, + "properties": { + "SingleHeaderConfig": { + "$ref": "#/definitions/SingleHeaderConfig" + }, + "SingleWeightConfig": { + "$ref": "#/definitions/SingleWeightConfig" + }, + "Type": { + "enum": [ + "SingleWeight", + "SingleHeader" + ], + "type": "string" + } + }, + "required": [ + "Type" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::ContinuousDeploymentPolicy", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateContinuousDeploymentPolicy" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteContinuousDeploymentPolicy", + "cloudfront:GetContinuousDeploymentPolicy" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListContinuousDeploymentPolicies" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetContinuousDeploymentPolicy" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateContinuousDeploymentPolicy", + "cloudfront:GetContinuousDeploymentPolicy" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "ContinuousDeploymentPolicyConfig": { + "$ref": "#/definitions/ContinuousDeploymentPolicyConfig" + }, + "Id": { + "type": "string" + }, + "LastModifiedTime": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/LastModifiedTime" + ], + "required": [ + "ContinuousDeploymentPolicyConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::ContinuousDeploymentPolicy" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/distribution.json b/internal/aws/cfn/schemas/aws/cloudfront/distribution.json new file mode 100644 index 00000000..96a23688 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/distribution.json @@ -0,0 +1,1028 @@ +{ + "additionalProperties": false, + "definitions": { + "CacheBehavior": { + "additionalProperties": false, + "properties": { + "AllowedMethods": { + "default": [ + "GET", + "HEAD" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that controls which HTTP methods CloudFront processes and forwards to your Amazon S3 bucket or your custom origin. There are three choices:\n + CloudFront forwards only ``GET`` and ``HEAD`` requests.\n + CloudFront forwards only ``GET``, ``HEAD``, and ``OPTIONS`` requests.\n + CloudFront forwards ``GET, HEAD, OPTIONS, PUT, PATCH, POST``, and ``DELETE`` requests.\n \n If you pick the third choice, you may need to restrict access to your Amazon S3 bucket or to your custom origin so users can't perform operations that you don't want them to. For example, you might not want users to have permissions to delete objects from your origin." + }, + "CachePolicyId": { + "type": "string", + "description": "The unique identifier of the cache policy that is attached to this cache behavior. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n A ``CacheBehavior`` must include either a ``CachePolicyId`` or ``ForwardedValues``. We recommend that you use a ``CachePolicyId``." + }, + "CachedMethods": { + "default": [ + "GET", + "HEAD" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that controls whether CloudFront caches the response to requests using the specified HTTP methods. There are two choices:\n + CloudFront caches responses to ``GET`` and ``HEAD`` requests.\n + CloudFront caches responses to ``GET``, ``HEAD``, and ``OPTIONS`` requests.\n \n If you pick the second choice for your Amazon S3 Origin, you may need to forward Access-Control-Request-Method, Access-Control-Request-Headers, and Origin headers for the responses to be cached correctly." + }, + "Compress": { + "default": false, + "type": "boolean", + "description": "Whether you want CloudFront to automatically compress certain files for this cache behavior. If so, specify true; if not, specify false. For more information, see [Serving Compressed Files](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html) in the *Amazon CloudFront Developer Guide*." + }, + "DefaultTTL": { + "default": 86400, + "type": "number", + "description": "This field is deprecated. We recommend that you use the ``DefaultTTL`` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as ``Cache-Control max-age``, ``Cache-Control s-maxage``, and ``Expires`` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide" + }, + "FieldLevelEncryptionId": { + "default": "", + "type": "string", + "description": "The value of ``ID`` for the field-level encryption configuration that you want CloudFront to use for encrypting specific fields of data for this cache behavior." + }, + "ForwardedValues": { + "$ref": "#/definitions/ForwardedValues", + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field. For more information, see [Working with policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/working-with-policies.html) in the *Amazon CloudFront Developer Guide*.\n If you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n If you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-r" + }, + "FunctionAssociations": { + "items": { + "$ref": "#/definitions/FunctionAssociation" + }, + "type": "array", + "uniqueItems": false, + "description": "A list of CloudFront functions that are associated with this cache behavior. CloudFront functions must be published to the ``LIVE`` stage to associate them with a cache behavior." + }, + "LambdaFunctionAssociations": { + "items": { + "$ref": "#/definitions/LambdaFunctionAssociation" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that contains zero or more Lambda@Edge function associations for a cache behavior." + }, + "MaxTTL": { + "default": 31536000, + "type": "number", + "description": "This field is deprecated. We recommend that you use the ``MaxTTL`` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as ``Cache-Control max-age``, ``Cache-Control s-maxage``, and ``Expires`` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration." + }, + "MinTTL": { + "default": 0, + "type": "number", + "description": "This field is deprecated. We recommend that you use the ``MinTTL`` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide*.\n You must specify ``0`` for ``MinTTL`` if you configure CloudFront to forward all headers to your origin (under ``He" + }, + "OriginRequestPolicyId": { + "type": "string", + "description": "The unique identifier of the origin request policy that is attached to this cache behavior. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) or [Using the managed origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html) in the *Amazon CloudFront Developer Guide*." + }, + "PathPattern": { + "type": "string", + "description": "The pattern (for example, ``images/*.jpg``) that specifies which requests to apply the behavior to. When CloudFront receives a viewer request, the requested path is compared with path patterns in the order in which cache behaviors are listed in the distribution.\n You can optionally include a slash (``/``) at the beginning of the path pattern. For example, ``/images/*.jpg``. CloudFront behavior is the same with or without the leading ``/``.\n The path pattern for the default cache behavior is ``*`` and cannot be changed. If the request for an object does not match the path pattern for any cache behaviors, CloudFront applies the behavior in the default cache behavior.\n For more information, see [Path Pattern](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesPathPattern) in the *Amazon CloudFront Developer Guide*." + }, + "RealtimeLogConfigArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the real-time log configuration that is attached to this cache behavior. For more information, see [Real-time logs](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html) in the *Amazon CloudFront Developer Guide*." + }, + "ResponseHeadersPolicyId": { + "type": "string", + "description": "The identifier for a response headers policy." + }, + "SmoothStreaming": { + "default": false, + "type": "boolean", + "description": "Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify ``true``; if not, specify ``false``. If you specify ``true`` for ``SmoothStreaming``, you can still distribute other content using this cache behavior if the content matches the value of ``PathPattern``." + }, + "TargetOriginId": { + "type": "string", + "description": "The value of ``ID`` for the origin that you want CloudFront to route requests to when they match this cache behavior." + }, + "TrustedKeyGroups": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A list of key groups that CloudFront can use to validate signed URLs or signed cookies.\n When a cache behavior contains trusted key groups, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with a private key whose corresponding public key is in the key group. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide*." + }, + "TrustedSigners": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "We recommend using ``TrustedKeyGroups`` instead of ``TrustedSigners``.\n A list of AWS-account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.\n When a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in the trusted signer's AWS-account. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide*." + }, + "ViewerProtocolPolicy": { + "type": "string", + "description": "The protocol that viewers can use to access the files in the origin specified by ``TargetOriginId`` when a request matches the path pattern in ``PathPattern``. You can specify the following options:\n + ``allow-all``: Viewers can use HTTP or HTTPS.\n + ``redirect-to-https``: If a viewer submits an HTTP request, CloudFront returns an HTTP status code of 301 (Moved Permanently) to the viewer along with the HTTPS URL. The viewer then resubmits the request using the new URL.\n + ``https-only``: If a viewer sends an HTTP request, CloudFront returns an HTTP status code of 403 (Forbidden).\n \n For more information about requiring the HTTPS protocol, see [Requiring HTTPS Between Viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html) in the *Amazon CloudFront Developer Guide*.\n The only way to guarantee that viewers retrieve an object that was fetched from the origin using HTTPS is never to use any other protocol" + } + }, + "required": [ + "PathPattern", + "TargetOriginId", + "ViewerProtocolPolicy" + ], + "type": "object", + "description": "A complex type that describes how CloudFront processes requests.\n You must create at least as many cache behaviors (including the default cache behavior) as you have origins if you want CloudFront to serve objects from all of the origins. Each cache behavior specifies the one origin from which you want CloudFront to get objects. If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used.\n For the current quota (formerly known as limit) on the number of cache behaviors that you can add to a distribution, see [Quotas](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html) in the *Amazon CloudFront Developer Guide*.\n If you don't want to specify any cache behaviors, include only an empty ``CacheBehaviors`` element. Don't include an empty ``CacheBehavior`` element because this is invalid.\n To delete all cache behaviors in an exist" + }, + "Cookies": { + "additionalProperties": false, + "properties": { + "Forward": { + "type": "string", + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send cookies to the origin but not include them in the cache key, use origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n Specifies which cookies to forward to the origin for this cache behavior: all, none, or the list of cookies specified in the ``WhitelistedNames`` complex type.\n Amazon S3 doesn't process cookies. When the cache behavior is forw" + }, + "WhitelistedNames": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n Required if you specify ``whitelist`` for the value of ``Forward``. A complex type that specifies how many different cookies you want CloudFront to forward to the origin for this cache behavior and, if you want to forward se" + } + }, + "required": [ + "Forward" + ], + "type": "object", + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n A complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see [How CloudFront Forwards, Caches, and Logs C" + }, + "CustomErrorResponse": { + "additionalProperties": false, + "properties": { + "ErrorCachingMinTTL": { + "default": 300, + "type": "number", + "description": "The minimum amount of time, in seconds, that you want CloudFront to cache the HTTP status code specified in ``ErrorCode``. When this time period has elapsed, CloudFront queries your origin to see whether the problem that caused the error has been resolved and the requested object is now available.\n For more information, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide*." + }, + "ErrorCode": { + "type": "integer", + "description": "The HTTP status code for which you want to specify a custom error page and/or a caching duration." + }, + "ResponseCode": { + "type": "integer", + "description": "The HTTP status code that you want CloudFront to return to the viewer along with the custom error page. There are a variety of reasons that you might want CloudFront to return a status code different from the status code that your origin returned to CloudFront, for example:\n + Some Internet devices (some firewalls and corporate proxies, for example) intercept HTTP 4xx and 5xx and prevent the response from being returned to the viewer. If you substitute ``200``, the response typically won't be intercepted.\n + If you don't care about distinguishing among different client errors or server errors, you can specify ``400`` or ``500`` as the ``ResponseCode`` for all 4xx or 5xx errors.\n + You might want to return a ``200`` status code (OK) and static website so your customers don't know that your website is down.\n \n If you specify a value for ``ResponseCode``, you must also specify a value for ``ResponsePagePath``." + }, + "ResponsePagePath": { + "type": "string", + "description": "The path to the custom error page that you want CloudFront to return to a viewer when your origin returns the HTTP status code specified by ``ErrorCode``, for example, ``/4xx-errors/403-forbidden.html``. If you want to store your objects and your custom error pages in different locations, your distribution must include a cache behavior for which the following is true:\n + The value of ``PathPattern`` matches the path to your custom error messages. For example, suppose you saved custom error pages for 4xx errors in an Amazon S3 bucket in a directory named ``/4xx-errors``. Your distribution must include a cache behavior for which the path pattern routes requests for your custom error pages to that location, for example, ``/4xx-errors/*``.\n + The value of ``TargetOriginId`` specifies the value of the ``ID`` element for the origin that contains your custom error pages.\n \n If you specify a value for ``ResponsePagePath``, you must also specify a value for ``ResponseCode``.\n We recommend " + } + }, + "required": [ + "ErrorCode" + ], + "type": "object", + "description": "A complex type that controls:\n + Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer.\n + How long CloudFront caches HTTP status codes in the 4xx and 5xx range.\n \n For more information about custom error pages, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide*." + }, + "CustomOriginConfig": { + "additionalProperties": false, + "properties": { + "HTTPPort": { + "default": 80, + "type": "integer", + "description": "The HTTP port that CloudFront uses to connect to the origin. Specify the HTTP port that the origin listens on." + }, + "HTTPSPort": { + "default": 443, + "type": "integer", + "description": "The HTTPS port that CloudFront uses to connect to the origin. Specify the HTTPS port that the origin listens on." + }, + "OriginKeepaliveTimeout": { + "default": 5, + "type": "integer", + "description": "Specifies how long, in seconds, CloudFront persists its connection to the origin. The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don't specify otherwise) is 5 seconds.\n For more information, see [Origin Keep-alive Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginKeepaliveTimeout) in the *Amazon CloudFront Developer Guide*." + }, + "OriginProtocolPolicy": { + "type": "string", + "description": "Specifies the protocol (HTTP or HTTPS) that CloudFront uses to connect to the origin. Valid values are:\n + ``http-only`` ? CloudFront always uses HTTP to connect to the origin.\n + ``match-viewer`` ? CloudFront connects to the origin using the same protocol that the viewer used to connect to CloudFront.\n + ``https-only`` ? CloudFront always uses HTTPS to connect to the origin." + }, + "OriginReadTimeout": { + "default": 30, + "type": "integer", + "description": "Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the *origin response timeout*. The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don't specify otherwise) is 30 seconds.\n For more information, see [Origin Response Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginResponseTimeout) in the *Amazon CloudFront Developer Guide*." + }, + "OriginSSLProtocols": { + "default": [ + "TLSv1", + "SSLv3" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "Specifies the minimum SSL/TLS protocol that CloudFront uses when connecting to your origin over HTTPS. Valid values include ``SSLv3``, ``TLSv1``, ``TLSv1.1``, and ``TLSv1.2``.\n For more information, see [Minimum Origin SSL Protocol](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginSSLProtocols) in the *Amazon CloudFront Developer Guide*." + } + }, + "required": [ + "OriginProtocolPolicy" + ], + "type": "object", + "description": "A custom origin. A custom origin is any origin that is *not* an Amazon S3 bucket, with one exception. An Amazon S3 bucket that is [configured with static website hosting](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) *is* a custom origin." + }, + "DefaultCacheBehavior": { + "additionalProperties": false, + "properties": { + "AllowedMethods": { + "default": [ + "GET", + "HEAD" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that controls which HTTP methods CloudFront processes and forwards to your Amazon S3 bucket or your custom origin. There are three choices:\n + CloudFront forwards only ``GET`` and ``HEAD`` requests.\n + CloudFront forwards only ``GET``, ``HEAD``, and ``OPTIONS`` requests.\n + CloudFront forwards ``GET, HEAD, OPTIONS, PUT, PATCH, POST``, and ``DELETE`` requests.\n \n If you pick the third choice, you may need to restrict access to your Amazon S3 bucket or to your custom origin so users can't perform operations that you don't want them to. For example, you might not want users to have permissions to delete objects from your origin." + }, + "CachePolicyId": { + "default": "", + "type": "string", + "description": "The unique identifier of the cache policy that is attached to the default cache behavior. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n A ``DefaultCacheBehavior`` must include either a ``CachePolicyId`` or ``ForwardedValues``. We recommend that you use a ``CachePolicyId``." + }, + "CachedMethods": { + "default": [ + "GET", + "HEAD" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that controls whether CloudFront caches the response to requests using the specified HTTP methods. There are two choices:\n + CloudFront caches responses to ``GET`` and ``HEAD`` requests.\n + CloudFront caches responses to ``GET``, ``HEAD``, and ``OPTIONS`` requests.\n \n If you pick the second choice for your Amazon S3 Origin, you may need to forward Access-Control-Request-Method, Access-Control-Request-Headers, and Origin headers for the responses to be cached correctly." + }, + "Compress": { + "default": false, + "type": "boolean", + "description": "Whether you want CloudFront to automatically compress certain files for this cache behavior. If so, specify ``true``; if not, specify ``false``. For more information, see [Serving Compressed Files](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html) in the *Amazon CloudFront Developer Guide*." + }, + "DefaultTTL": { + "default": 86400, + "type": "number", + "description": "This field is deprecated. We recommend that you use the ``DefaultTTL`` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as ``Cache-Control max-age``, ``Cache-Control s-maxage``, and ``Expires`` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide" + }, + "FieldLevelEncryptionId": { + "default": "", + "type": "string", + "description": "The value of ``ID`` for the field-level encryption configuration that you want CloudFront to use for encrypting specific fields of data for the default cache behavior." + }, + "ForwardedValues": { + "$ref": "#/definitions/ForwardedValues", + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field. For more information, see [Working with policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/working-with-policies.html) in the *Amazon CloudFront Developer Guide*.\n If you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n If you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-r" + }, + "FunctionAssociations": { + "items": { + "$ref": "#/definitions/FunctionAssociation" + }, + "type": "array", + "uniqueItems": false, + "description": "A list of CloudFront functions that are associated with this cache behavior. CloudFront functions must be published to the ``LIVE`` stage to associate them with a cache behavior." + }, + "LambdaFunctionAssociations": { + "items": { + "$ref": "#/definitions/LambdaFunctionAssociation" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that contains zero or more Lambda@Edge function associations for a cache behavior." + }, + "MaxTTL": { + "default": 31536000, + "type": "number", + "description": "This field is deprecated. We recommend that you use the ``MaxTTL`` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as ``Cache-Control max-age``, ``Cache-Control s-maxage``, and ``Expires`` to objects. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration." + }, + "MinTTL": { + "default": 0, + "type": "number", + "description": "This field is deprecated. We recommend that you use the ``MinTTL`` field in a cache policy instead of this field. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) or [Using the managed cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html) in the *Amazon CloudFront Developer Guide*.\n The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see [Managing How Long Content Stays in an Edge Cache (Expiration)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) in the *Amazon CloudFront Developer Guide*.\n You must specify ``0`` for ``MinTTL`` if you configure CloudFront to forward all headers to your origin (under ``He" + }, + "OriginRequestPolicyId": { + "default": "", + "type": "string", + "description": "The unique identifier of the origin request policy that is attached to the default cache behavior. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) or [Using the managed origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html) in the *Amazon CloudFront Developer Guide*." + }, + "RealtimeLogConfigArn": { + "default": "", + "type": "string", + "description": "The Amazon Resource Name (ARN) of the real-time log configuration that is attached to this cache behavior. For more information, see [Real-time logs](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html) in the *Amazon CloudFront Developer Guide*." + }, + "ResponseHeadersPolicyId": { + "default": "", + "type": "string", + "description": "The identifier for a response headers policy." + }, + "SmoothStreaming": { + "default": false, + "type": "boolean", + "description": "Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify ``true``; if not, specify ``false``. If you specify ``true`` for ``SmoothStreaming``, you can still distribute other content using this cache behavior if the content matches the value of ``PathPattern``." + }, + "TargetOriginId": { + "type": "string", + "description": "The value of ``ID`` for the origin that you want CloudFront to route requests to when they use the default cache behavior." + }, + "TrustedKeyGroups": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A list of key groups that CloudFront can use to validate signed URLs or signed cookies.\n When a cache behavior contains trusted key groups, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with a private key whose corresponding public key is in the key group. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide*." + }, + "TrustedSigners": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "We recommend using ``TrustedKeyGroups`` instead of ``TrustedSigners``.\n A list of AWS-account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.\n When a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in a trusted signer's AWS-account. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see [Serving private content](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) in the *Amazon CloudFront Developer Guide*." + }, + "ViewerProtocolPolicy": { + "type": "string", + "description": "The protocol that viewers can use to access the files in the origin specified by ``TargetOriginId`` when a request matches the path pattern in ``PathPattern``. You can specify the following options:\n + ``allow-all``: Viewers can use HTTP or HTTPS.\n + ``redirect-to-https``: If a viewer submits an HTTP request, CloudFront returns an HTTP status code of 301 (Moved Permanently) to the viewer along with the HTTPS URL. The viewer then resubmits the request using the new URL.\n + ``https-only``: If a viewer sends an HTTP request, CloudFront returns an HTTP status code of 403 (Forbidden).\n \n For more information about requiring the HTTPS protocol, see [Requiring HTTPS Between Viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html) in the *Amazon CloudFront Developer Guide*.\n The only way to guarantee that viewers retrieve an object that was fetched from the origin using HTTPS is never to use any other protocol" + } + }, + "required": [ + "TargetOriginId", + "ViewerProtocolPolicy" + ], + "type": "object", + "description": "A complex type that describes the default cache behavior if you don't specify a ``CacheBehavior`` element or if request URLs don't match any of the values of ``PathPattern`` in ``CacheBehavior`` elements. You must create exactly one default cache behavior." + }, + "DistributionConfig": { + "additionalProperties": false, + "properties": { + "Aliases": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that contains information about CNAMEs (alternate domain names), if any, for this distribution." + }, + "CNAMEs": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "" + }, + "CacheBehaviors": { + "items": { + "$ref": "#/definitions/CacheBehavior" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that contains zero or more ``CacheBehavior`` elements." + }, + "Comment": { + "default": "", + "type": "string", + "description": "A comment to describe the distribution. The comment cannot be longer than 128 characters." + }, + "ContinuousDeploymentPolicyId": { + "type": "string", + "description": "The identifier of a continuous deployment policy. For more information, see ``CreateContinuousDeploymentPolicy``." + }, + "CustomErrorResponses": { + "items": { + "$ref": "#/definitions/CustomErrorResponse" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that controls the following:\n + Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer.\n + How long CloudFront caches HTTP status codes in the 4xx and 5xx range.\n \n For more information about custom error pages, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide*." + }, + "CustomOrigin": { + "$ref": "#/definitions/LegacyCustomOrigin", + "description": "" + }, + "DefaultCacheBehavior": { + "$ref": "#/definitions/DefaultCacheBehavior", + "description": "A complex type that describes the default cache behavior if you don't specify a ``CacheBehavior`` element or if files don't match any of the values of ``PathPattern`` in ``CacheBehavior`` elements. You must create exactly one default cache behavior." + }, + "DefaultRootObject": { + "default": "", + "type": "string", + "description": "The object that you want CloudFront to request from your origin (for example, ``index.html``) when a viewer requests the root URL for your distribution (``https://www.example.com``) instead of an object in your distribution (``https://www.example.com/product-description.html``). Specifying a default root object avoids exposing the contents of your distribution.\n Specify only the object name, for example, ``index.html``. Don't add a ``/`` before the object name.\n If you don't want to specify a default root object when you create a distribution, include an empty ``DefaultRootObject`` element.\n To delete the default root object from an existing distribution, update the distribution configuration and include an empty ``DefaultRootObject`` element.\n To replace the default root object, update the distribution configuration and specify the new object.\n For more information about the default root object, see [Creating a Default Root Object](https://docs.aws.amazon.com/AmazonCloudFront/latest/D" + }, + "Enabled": { + "type": "boolean", + "description": "From this field, you can enable or disable the selected distribution." + }, + "HttpVersion": { + "default": "http1.1", + "type": "string", + "description": "(Optional) Specify the maximum HTTP version(s) that you want viewers to use to communicate with CF. The default value for new distributions is ``http1.1``.\n For viewers and CF to use HTTP/2, viewers must support TLSv1.2 or later, and must support Server Name Indication (SNI).\n For viewers and CF to use HTTP/3, viewers must support TLSv1.3 and Server Name Indication (SNI). CF supports HTTP/3 connection migration to allow the viewer to switch networks without losing connection. For more information about connection migration, see [Connection Migration](https://docs.aws.amazon.com/https://www.rfc-editor.org/rfc/rfc9000.html#name-connection-migration) at RFC 9000. For more information about supported TLSv1.3 ciphers, see [Supported protocols and ciphers between viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/secure-connections-supported-viewer-protocols-ciphers.html)." + }, + "IPV6Enabled": { + "type": "boolean", + "description": "If you want CloudFront to respond to IPv6 DNS requests with an IPv6 address for your distribution, specify ``true``. If you specify ``false``, CloudFront responds to IPv6 DNS requests with the DNS response code ``NOERROR`` and with no IP addresses. This allows viewers to submit a second request, for an IPv4 address for your distribution.\n In general, you should enable IPv6 if you have users on IPv6 networks who want to access your content. However, if you're using signed URLs or signed cookies to restrict access to your content, and if you're using a custom policy that includes the ``IpAddress`` parameter to restrict the IP addresses that can access your content, don't enable IPv6. If you want to restrict access to some content by IP address and not restrict access to other content (or restrict access but not by IP address), you can create two distributions. For more information, see [Creating a Signed URL Using a Custom Policy](https://docs.aws.amazon.com/AmazonCloudFront/latest/Devel" + }, + "Logging": { + "$ref": "#/definitions/Logging", + "description": "A complex type that controls whether access logs are written for the distribution.\n For more information about logging, see [Access Logs](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html) in the *Amazon CloudFront Developer Guide*." + }, + "OriginGroups": { + "$ref": "#/definitions/OriginGroups", + "description": "A complex type that contains information about origin groups for this distribution." + }, + "Origins": { + "items": { + "$ref": "#/definitions/Origin" + }, + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "description": "A complex type that contains information about origins for this distribution." + }, + "PriceClass": { + "default": "PriceClass_All", + "type": "string", + "description": "The price class that corresponds with the maximum price that you want to pay for CloudFront service. If you specify ``PriceClass_All``, CloudFront responds to requests for your objects from all CloudFront edge locations.\n If you specify a price class other than ``PriceClass_All``, CloudFront serves your objects from the CloudFront edge location that has the lowest latency among the edge locations in your price class. Viewers who are in or near regions that are excluded from your specified price class may encounter slower performance.\n For more information about price classes, see [Choosing the Price Class for a CloudFront Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PriceClass.html) in the *Amazon CloudFront Developer Guide*. For information about CloudFront pricing, including how price classes (such as Price Class 100) map to CloudFront regions, see [Amazon CloudFront Pricing](https://docs.aws.amazon.com/cloudfront/pricing/)." + }, + "Restrictions": { + "$ref": "#/definitions/Restrictions", + "default": { + "GeoRestriction": { + "RestrictionType": "none" + } + }, + "description": "A complex type that identifies ways in which you want to restrict distribution of your content." + }, + "S3Origin": { + "$ref": "#/definitions/LegacyS3Origin", + "description": "" + }, + "Staging": { + "type": "boolean", + "description": "A Boolean that indicates whether this is a staging distribution. When this value is ``true``, this is a staging distribution. When this value is ``false``, this is not a staging distribution." + }, + "ViewerCertificate": { + "$ref": "#/definitions/ViewerCertificate", + "default": { + "CloudFrontDefaultCertificate": true + }, + "description": "A complex type that determines the distribution's SSL/TLS configuration for communicating with viewers." + }, + "WebACLId": { + "default": "", + "type": "string", + "description": "A unique identifier that specifies the WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of WAF, use the ACL ARN, for example ``arn:aws:wafv2:us-east-1:123456789012:global/webacl/ExampleWebACL/473e64fd-f30b-4765-81a0-62ad96dd167a``. To specify a web ACL created using WAF Classic, use the ACL ID, for example ``473e64fd-f30b-4765-81a0-62ad96dd167a``.\n WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to CloudFront, and lets you control access to your content. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, CloudFront responds to requests either with the requested content or with an HTTP 403 status code (Forbidden). You can also configure CloudFront to return a custom error page when a request is blocked. For more information about WAF, see the [Developer Guide](https://docs.aws.amazon.com/waf/latest" + } + }, + "required": [ + "Enabled", + "DefaultCacheBehavior" + ], + "type": "object", + "description": "A distribution configuration." + }, + "ForwardedValues": { + "additionalProperties": false, + "properties": { + "Cookies": { + "$ref": "#/definitions/Cookies", + "default": { + "Forward": "none" + }, + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n A complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see [How CloudFront Forwards, Caches, and Logs C" + }, + "Headers": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include headers in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send headers to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n A complex type that specifies the ``Headers``, if any, that you want CloudFront to forward to the origin for this cache behavior (whitelisted headers). For the headers that you specify, CloudFront also caches separate versio" + }, + "QueryString": { + "type": "boolean", + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include query strings in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send query strings to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n Indicates whether you want CloudFront to forward query strings to the origin that is associated with this cache behavior and cache based on the query string parameters. CloudFront behavior depends on the value of" + }, + "QueryStringCacheKeys": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include query strings in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send query strings to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n A complex type that contains information about the query string parameters that you want CloudFront to use for caching for this cache behavior." + } + }, + "required": [ + "QueryString" + ], + "type": "object", + "description": "This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.\n If you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*.\n If you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*.\n A complex type that specifies how CloudFront handles query strings, cookies, and HTTP headers." + }, + "FunctionAssociation": { + "additionalProperties": false, + "properties": { + "EventType": { + "type": "string", + "description": "The event type of the function, either ``viewer-request`` or ``viewer-response``. You cannot use origin-facing event types (``origin-request`` and ``origin-response``) with a CloudFront function." + }, + "FunctionARN": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the function." + } + }, + "type": "object", + "description": "A CloudFront function that is associated with a cache behavior in a CloudFront distribution." + }, + "GeoRestriction": { + "additionalProperties": false, + "properties": { + "Locations": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that contains a ``Location`` element for each country in which you want CloudFront either to distribute your content (``whitelist``) or not distribute your content (``blacklist``).\n The ``Location`` element is a two-letter, uppercase country code for a country that you want to include in your ``blacklist`` or ``whitelist``. Include one ``Location`` element for each country.\n CloudFront and ``MaxMind`` both use ``ISO 3166`` country codes. For the current list of countries and the corresponding codes, see ``ISO 3166-1-alpha-2`` code on the *International Organization for Standardization* website. You can also refer to the country list on the CloudFront console, which includes both country names and codes." + }, + "RestrictionType": { + "type": "string", + "description": "The method that you want to use to restrict distribution of your content by country:\n + ``none``: No geo restriction is enabled, meaning access to content is not restricted by client geo location.\n + ``blacklist``: The ``Location`` elements specify the countries in which you don't want CloudFront to distribute your content.\n + ``whitelist``: The ``Location`` elements specify the countries in which you want CloudFront to distribute your content." + } + }, + "required": [ + "RestrictionType" + ], + "type": "object", + "description": "A complex type that controls the countries in which your content is distributed. CF determines the location of your users using ``MaxMind`` GeoIP databases. To disable geo restriction, remove the [Restrictions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-restrictions) property from your stack template." + }, + "LambdaFunctionAssociation": { + "additionalProperties": false, + "properties": { + "EventType": { + "type": "string", + "description": "Specifies the event type that triggers a Lambda@Edge function invocation. You can specify the following values:\n + ``viewer-request``: The function executes when CloudFront receives a request from a viewer and before it checks to see whether the requested object is in the edge cache.\n + ``origin-request``: The function executes only when CloudFront sends a request to your origin. When the requested object is in the edge cache, the function doesn't execute.\n + ``origin-response``: The function executes after CloudFront receives a response from the origin and before it caches the object in the response. When the requested object is in the edge cache, the function doesn't execute.\n + ``viewer-response``: The function executes before CloudFront returns the requested object to the viewer. The function executes regardless of whether the object was already in the edge cache.\n If the origin returns an HTTP status code other than HTTP 200 (OK), the function doesn't execute." + }, + "IncludeBody": { + "type": "boolean", + "description": "A flag that allows a Lambda@Edge function to have read access to the body content. For more information, see [Accessing the Request Body by Choosing the Include Body Option](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-include-body-access.html) in the Amazon CloudFront Developer Guide." + }, + "LambdaFunctionARN": { + "type": "string", + "description": "The ARN of the Lambda@Edge function. You must specify the ARN of a function version; you can't specify an alias or $LATEST." + } + }, + "type": "object", + "description": "A complex type that contains a Lambda@Edge function association." + }, + "LegacyCustomOrigin": { + "additionalProperties": false, + "properties": { + "DNSName": { + "type": "string", + "description": "" + }, + "HTTPPort": { + "default": 80, + "type": "integer", + "description": "" + }, + "HTTPSPort": { + "default": 443, + "type": "integer", + "description": "" + }, + "OriginProtocolPolicy": { + "type": "string", + "description": "" + }, + "OriginSSLProtocols": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false, + "description": "" + } + }, + "required": [ + "DNSName", + "OriginProtocolPolicy", + "OriginSSLProtocols" + ], + "type": "object", + "description": "" + }, + "LegacyS3Origin": { + "additionalProperties": false, + "properties": { + "DNSName": { + "type": "string", + "description": "" + }, + "OriginAccessIdentity": { + "default": "", + "type": "string", + "description": "" + } + }, + "required": [ + "DNSName" + ], + "type": "object", + "description": "" + }, + "Logging": { + "additionalProperties": false, + "properties": { + "Bucket": { + "type": "string", + "description": "The Amazon S3 bucket to store the access logs in, for example, ``myawslogbucket.s3.amazonaws.com``." + }, + "IncludeCookies": { + "default": false, + "type": "boolean", + "description": "Specifies whether you want CloudFront to include cookies in access logs, specify ``true`` for ``IncludeCookies``. If you choose to include cookies in logs, CloudFront logs all cookies regardless of how you configure the cache behaviors for this distribution. If you don't want to include cookies when you create a distribution or if you want to disable include cookies for an existing distribution, specify ``false`` for ``IncludeCookies``." + }, + "Prefix": { + "default": "", + "type": "string", + "description": "An optional string that you want CloudFront to prefix to the access log ``filenames`` for this distribution, for example, ``myprefix/``. If you want to enable logging, but you don't want to specify a prefix, you still must include an empty ``Prefix`` element in the ``Logging`` element." + } + }, + "required": [ + "Bucket" + ], + "type": "object", + "description": "A complex type that controls whether access logs are written for the distribution." + }, + "Origin": { + "additionalProperties": false, + "properties": { + "ConnectionAttempts": { + "type": "integer", + "description": "The number of times that CloudFront attempts to connect to the origin. The minimum number is 1, the maximum is 3, and the default (if you don't specify otherwise) is 3.\n For a custom origin (including an Amazon S3 bucket that's configured with static website hosting), this value also specifies the number of times that CloudFront attempts to get a response from the origin, in the case of an [Origin Response Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginResponseTimeout).\n For more information, see [Origin Connection Attempts](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#origin-connection-attempts) in the *Amazon CloudFront Developer Guide*." + }, + "ConnectionTimeout": { + "type": "integer", + "description": "The number of seconds that CloudFront waits when trying to establish a connection to the origin. The minimum timeout is 1 second, the maximum is 10 seconds, and the default (if you don't specify otherwise) is 10 seconds.\n For more information, see [Origin Connection Timeout](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#origin-connection-timeout) in the *Amazon CloudFront Developer Guide*." + }, + "CustomOriginConfig": { + "$ref": "#/definitions/CustomOriginConfig", + "description": "Use this type to specify an origin that is not an Amazon S3 bucket, with one exception. If the Amazon S3 bucket is configured with static website hosting, use this type. If the Amazon S3 bucket is not configured with static website hosting, use the ``S3OriginConfig`` type instead." + }, + "DomainName": { + "type": "string", + "description": "The domain name for the origin.\n For more information, see [Origin Domain Name](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesDomainName) in the *Amazon CloudFront Developer Guide*." + }, + "Id": { + "type": "string", + "description": "A unique identifier for the origin. This value must be unique within the distribution.\n Use this value to specify the ``TargetOriginId`` in a ``CacheBehavior`` or ``DefaultCacheBehavior``." + }, + "OriginAccessControlId": { + "type": "string", + "description": "The unique identifier of an origin access control for this origin.\n For more information, see [Restricting access to an Amazon S3 origin](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html) in the *Amazon CloudFront Developer Guide*." + }, + "OriginCustomHeaders": { + "items": { + "$ref": "#/definitions/OriginCustomHeader" + }, + "type": "array", + "uniqueItems": false, + "description": "A list of HTTP header names and values that CloudFront adds to the requests that it sends to the origin.\n For more information, see [Adding Custom Headers to Origin Requests](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/add-origin-custom-headers.html) in the *Amazon CloudFront Developer Guide*." + }, + "OriginPath": { + "default": "", + "type": "string", + "description": "An optional path that CloudFront appends to the origin domain name when CloudFront requests content from the origin.\n For more information, see [Origin Path](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginPath) in the *Amazon CloudFront Developer Guide*." + }, + "OriginShield": { + "$ref": "#/definitions/OriginShield", + "description": "CloudFront Origin Shield. Using Origin Shield can help reduce the load on your origin.\n For more information, see [Using Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html) in the *Amazon CloudFront Developer Guide*." + }, + "S3OriginConfig": { + "$ref": "#/definitions/S3OriginConfig", + "description": "Use this type to specify an origin that is an Amazon S3 bucket that is not configured with static website hosting. To specify any other type of origin, including an Amazon S3 bucket that is configured with static website hosting, use the ``CustomOriginConfig`` type instead." + } + }, + "required": [ + "DomainName", + "Id" + ], + "type": "object", + "description": "An origin.\n An origin is the location where content is stored, and from which CloudFront gets content to serve to viewers. To specify an origin:\n + Use ``S3OriginConfig`` to specify an Amazon S3 bucket that is not configured with static website hosting.\n + Use ``CustomOriginConfig`` to specify all other kinds of origins, including:\n + An Amazon S3 bucket that is configured with static website hosting\n + An Elastic Load Balancing load balancer\n + An EMPlong endpoint\n + An EMSlong container\n + Any other HTTP server, running on an Amazon EC2 instance or any other kind of host\n \n \n For the current maximum number of origins that you can specify per distribution, see [General Quotas on Web Distributions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html#limits-web-distributions) in the *Amazon CloudFront Developer Guide* (quotas were formerly referred to as limits)." + }, + "OriginCustomHeader": { + "additionalProperties": false, + "properties": { + "HeaderName": { + "type": "string", + "description": "The name of a header that you want CloudFront to send to your origin. For more information, see [Adding Custom Headers to Origin Requests](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html) in the *Amazon CloudFront Developer Guide*." + }, + "HeaderValue": { + "type": "string", + "description": "The value for the header that you specified in the ``HeaderName`` field." + } + }, + "required": [ + "HeaderValue", + "HeaderName" + ], + "type": "object", + "description": "A complex type that contains ``HeaderName`` and ``HeaderValue`` elements, if any, for this distribution." + }, + "OriginGroup": { + "additionalProperties": false, + "properties": { + "FailoverCriteria": { + "$ref": "#/definitions/OriginGroupFailoverCriteria", + "description": "A complex type that contains information about the failover criteria for an origin group." + }, + "Id": { + "type": "string", + "description": "The origin group's ID." + }, + "Members": { + "$ref": "#/definitions/OriginGroupMembers", + "description": "A complex type that contains information about the origins in an origin group." + } + }, + "required": [ + "Id", + "FailoverCriteria", + "Members" + ], + "type": "object", + "description": "An origin group includes two origins (a primary origin and a second origin to failover to) and a failover criteria that you specify. You create an origin group to support origin failover in CloudFront. When you create or update a distribution, you can specify the origin group instead of a single origin, and CloudFront will failover from the primary origin to the second origin under the failover conditions that you've chosen." + }, + "OriginGroupFailoverCriteria": { + "additionalProperties": false, + "properties": { + "StatusCodes": { + "$ref": "#/definitions/StatusCodes", + "description": "The status codes that, when returned from the primary origin, will trigger CloudFront to failover to the second origin." + } + }, + "required": [ + "StatusCodes" + ], + "type": "object", + "description": "A complex data type that includes information about the failover criteria for an origin group, including the status codes for which CloudFront will failover from the primary origin to the second origin." + }, + "OriginGroupMember": { + "additionalProperties": false, + "properties": { + "OriginId": { + "type": "string", + "description": "The ID for an origin in an origin group." + } + }, + "required": [ + "OriginId" + ], + "type": "object", + "description": "An origin in an origin group." + }, + "OriginGroupMembers": { + "additionalProperties": false, + "properties": { + "Items": { + "items": { + "$ref": "#/definitions/OriginGroupMember" + }, + "type": "array", + "uniqueItems": false, + "description": "Items (origins) in an origin group." + }, + "Quantity": { + "type": "integer", + "description": "The number of origins in an origin group." + } + }, + "required": [ + "Quantity", + "Items" + ], + "type": "object", + "description": "A complex data type for the origins included in an origin group." + }, + "OriginGroups": { + "additionalProperties": false, + "properties": { + "Items": { + "items": { + "$ref": "#/definitions/OriginGroup" + }, + "type": "array", + "uniqueItems": false, + "description": "The items (origin groups) in a distribution." + }, + "Quantity": { + "type": "integer", + "description": "The number of origin groups." + } + }, + "required": [ + "Quantity" + ], + "type": "object", + "description": "A complex data type for the origin groups specified for a distribution." + }, + "OriginShield": { + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean", + "description": "A flag that specifies whether Origin Shield is enabled.\n When it's enabled, CloudFront routes all requests through Origin Shield, which can help protect your origin. When it's disabled, CloudFront might send requests directly to your origin from multiple edge locations or regional edge caches." + }, + "OriginShieldRegion": { + "type": "string", + "description": "The AWS-Region for Origin Shield.\n Specify the AWS-Region that has the lowest latency to your origin. To specify a region, use the region code, not the region name. For example, specify the US East (Ohio) region as ``us-east-2``.\n When you enable CloudFront Origin Shield, you must specify the AWS-Region for Origin Shield. For the list of AWS-Regions that you can specify, and for help choosing the best Region for your origin, see [Choosing the for Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html#choose-origin-shield-region) in the *Amazon CloudFront Developer Guide*." + } + }, + "type": "object", + "description": "CloudFront Origin Shield.\n Using Origin Shield can help reduce the load on your origin. For more information, see [Using Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html) in the *Amazon CloudFront Developer Guide*." + }, + "Restrictions": { + "additionalProperties": false, + "properties": { + "GeoRestriction": { + "$ref": "#/definitions/GeoRestriction", + "description": "A complex type that controls the countries in which your content is distributed. CF determines the location of your users using ``MaxMind`` GeoIP databases. To disable geo restriction, remove the [Restrictions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-restrictions) property from your stack template." + } + }, + "required": [ + "GeoRestriction" + ], + "type": "object", + "description": "A complex type that identifies ways in which you want to restrict distribution of your content." + }, + "S3OriginConfig": { + "additionalProperties": false, + "properties": { + "OriginAccessIdentity": { + "default": "", + "type": "string", + "description": "The CloudFront origin access identity to associate with the origin. Use an origin access identity to configure the origin so that viewers can *only* access objects in an Amazon S3 bucket through CloudFront. The format of the value is:\n origin-access-identity/cloudfront/*ID-of-origin-access-identity* \n where ``ID-of-origin-access-identity`` is the value that CloudFront returned in the ``ID`` element when you created the origin access identity.\n If you want viewers to be able to access objects using either the CloudFront URL or the Amazon S3 URL, specify an empty ``OriginAccessIdentity`` element.\n To delete the origin access identity from an existing distribution, update the distribution configuration and include an empty ``OriginAccessIdentity`` element.\n To replace the origin access identity, update the distribution configuration and specify the new origin access identity.\n For more information about the origin access identity, see [Serving Private Content through CloudFront](https://d" + } + }, + "type": "object", + "description": "A complex type that contains information about the Amazon S3 origin. If the origin is a custom origin or an S3 bucket that is configured as a website endpoint, use the ``CustomOriginConfig`` element instead." + }, + "StatusCodes": { + "additionalProperties": false, + "properties": { + "Items": { + "items": { + "type": "integer" + }, + "type": "array", + "uniqueItems": false, + "description": "The items (status codes) for an origin group." + }, + "Quantity": { + "type": "integer", + "description": "The number of status codes." + } + }, + "required": [ + "Quantity", + "Items" + ], + "type": "object", + "description": "A complex data type for the status codes that you specify that, when returned by a primary origin, trigger CloudFront to failover to a second origin." + }, + "Tag": { + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "A string that contains ``Tag`` key.\n The string length should be between 1 and 128 characters. Valid characters include ``a-z``, ``A-Z``, ``0-9``, space, and the special characters ``_ - . : / = + @``." + }, + "Value": { + "type": "string", + "description": "A string that contains an optional ``Tag`` value.\n The string length should be between 0 and 256 characters. Valid characters include ``a-z``, ``A-Z``, ``0-9``, space, and the special characters ``_ - . : / = + @``." + } + }, + "required": [ + "Value", + "Key" + ], + "type": "object", + "description": "A complex type that contains ``Tag`` key and ``Tag`` value." + }, + "ViewerCertificate": { + "additionalProperties": false, + "properties": { + "AcmCertificateArn": { + "type": "string", + "description": "In CloudFormation, this field name is ``AcmCertificateArn``. Note the different capitalization.\n If the distribution uses ``Aliases`` (alternate domain names or CNAMEs) and the SSL/TLS certificate is stored in [(ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html), provide the Amazon Resource Name (ARN) of the ACM certificate. CloudFront only supports ACM certificates in the US East (N. Virginia) Region (``us-east-1``).\n If you specify an ACM certificate ARN, you must also specify values for ``MinimumProtocolVersion`` and ``SSLSupportMethod``. (In CloudFormation, the field name is ``SslSupportMethod``. Note the different capitalization.)" + }, + "CloudFrontDefaultCertificate": { + "type": "boolean", + "description": "If the distribution uses the CloudFront domain name such as ``d111111abcdef8.cloudfront.net``, set this field to ``true``.\n If the distribution uses ``Aliases`` (alternate domain names or CNAMEs), omit this field and specify values for the following fields:\n + ``AcmCertificateArn`` or ``IamCertificateId`` (specify a value for one, not both) \n + ``MinimumProtocolVersion`` \n + ``SslSupportMethod``" + }, + "IamCertificateId": { + "type": "string", + "description": "In CloudFormation, this field name is ``IamCertificateId``. Note the different capitalization.\n If the distribution uses ``Aliases`` (alternate domain names or CNAMEs) and the SSL/TLS certificate is stored in [(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html), provide the ID of the IAM certificate.\n If you specify an IAM certificate ID, you must also specify values for ``MinimumProtocolVersion`` and ``SSLSupportMethod``. (In CloudFormation, the field name is ``SslSupportMethod``. Note the different capitalization.)" + }, + "MinimumProtocolVersion": { + "type": "string", + "description": "If the distribution uses ``Aliases`` (alternate domain names or CNAMEs), specify the security policy that you want CloudFront to use for HTTPS connections with viewers. The security policy determines two settings:\n + The minimum SSL/TLS protocol that CloudFront can use to communicate with viewers.\n + The ciphers that CloudFront can use to encrypt the content that it returns to viewers.\n \n For more information, see [Security Policy](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValues-security-policy) and [Supported Protocols and Ciphers Between Viewers and CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/secure-connections-supported-viewer-protocols-ciphers.html#secure-connections-supported-ciphers) in the *Amazon CloudFront Developer Guide*.\n On the CloudFront console, this setting is called *Security Policy*.\n When you're using SNI only (you set ``SSLSupportMethod`` to ``sni-onl" + }, + "SslSupportMethod": { + "type": "string", + "description": "In CloudFormation, this field name is ``SslSupportMethod``. Note the different capitalization.\n If the distribution uses ``Aliases`` (alternate domain names or CNAMEs), specify which viewers the distribution accepts HTTPS connections from.\n + ``sni-only`` ? The distribution accepts HTTPS connections from only viewers that support [server name indication (SNI)](https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/Server_Name_Indication). This is recommended. Most browsers and clients support SNI.\n + ``vip`` ? The distribution accepts HTTPS connections from all viewers including those that don't support SNI. This is not recommended, and results in additional monthly charges from CloudFront.\n + ``static-ip`` - Do not specify this value unless your distribution has been enabled for this feature by the CloudFront team. If you have a use case that requires static IP addresses for a distribution, contact CloudFront through the [Center](https://docs.aws.amazon.com/support/home)." + } + }, + "type": "object", + "description": "A complex type that determines the distribution's SSL/TLS configuration for communicating with viewers.\n If the distribution doesn't use ``Aliases`` (also known as alternate domain names or CNAMEs)?that is, if the distribution uses the CloudFront domain name such as ``d111111abcdef8.cloudfront.net``?set ``CloudFrontDefaultCertificate`` to ``true`` and leave all other fields empty.\n If the distribution uses ``Aliases`` (alternate domain names or CNAMEs), use the fields in this type to specify the following settings:\n + Which viewers the distribution accepts HTTPS connections from: only viewers that support [server name indication (SNI)](https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/Server_Name_Indication) (recommended), or all viewers including those that don't support SNI.\n + To accept HTTPS connections from only viewers that support SNI, set ``SSLSupportMethod`` to ``sni-only``. This is recommended. Most browsers and clients support SNI. (In CloudFormation, the field n" + } + }, + "deprecatedProperties": [ + "/properties/DistributionConfig/properties/CustomOrigin", + "/properties/DistributionConfig/properties/S3Origin" + ], + "description": "A distribution tells CloudFront where you want content to be delivered from, and the details about how to track and manage content delivery.", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateDistribution", + "cloudfront:CreateDistributionWithTags", + "cloudfront:GetDistribution", + "cloudfront:GetDistributionConfig", + "cloudfront:TagResource" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteDistribution", + "cloudfront:GetDistribution", + "cloudfront:GetDistributionConfig" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListDistributions" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetDistribution", + "cloudfront:GetDistributionConfig" + ] + }, + "update": { + "permissions": [ + "cloudfront:GetDistribution", + "cloudfront:GetDistributionConfig", + "cloudfront:UpdateDistribution", + "cloudfront:UpdateDistributionWithStagingConfig", + "cloudfront:ListTagsForResource", + "cloudfront:TagResource", + "cloudfront:UntagResource" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "DistributionConfig": { + "$ref": "#/definitions/DistributionConfig", + "description": "The distribution's configuration." + }, + "DomainName": { + "type": "string", + "description": "" + }, + "Id": { + "type": "string", + "description": "" + }, + "Tags": { + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array", + "uniqueItems": false, + "description": "A complex type that contains zero or more ``Tag`` elements." + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/DomainName" + ], + "required": [ + "DistributionConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::Distribution" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/function.json b/internal/aws/cfn/schemas/aws/cloudfront/function.json new file mode 100644 index 00000000..75f05a6e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/function.json @@ -0,0 +1,129 @@ +{ + "additionalProperties": false, + "definitions": { + "FunctionConfig": { + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "Runtime": { + "type": "string" + }, + "KeyValueStoreAssociations": { + "items": { + "$ref": "#/definitions/KeyValueStoreAssociation" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "Comment", + "Runtime" + ], + "type": "object" + }, + "FunctionMetadata": { + "additionalProperties": false, + "properties": { + "FunctionARN": { + "type": "string" + } + }, + "type": "object" + }, + "KeyValueStoreAssociation": { + "additionalProperties": false, + "properties": { + "KeyValueStoreARN": { + "type": "string" + } + }, + "required": [ + "KeyValueStoreARN" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::Function", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateFunction", + "cloudfront:PublishFunction", + "cloudfront:DescribeFunction" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteFunction", + "cloudfront:DescribeFunction" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListFunctions" + ] + }, + "read": { + "permissions": [ + "cloudfront:DescribeFunction", + "cloudfront:GetFunction" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateFunction", + "cloudfront:PublishFunction", + "cloudfront:DescribeFunction" + ] + } + }, + "primaryIdentifier": [ + "/properties/FunctionARN" + ], + "properties": { + "AutoPublish": { + "type": "boolean" + }, + "FunctionARN": { + "type": "string" + }, + "FunctionCode": { + "type": "string" + }, + "FunctionConfig": { + "$ref": "#/definitions/FunctionConfig" + }, + "FunctionMetadata": { + "$ref": "#/definitions/FunctionMetadata" + }, + "Name": { + "type": "string" + }, + "Stage": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/FunctionARN", + "/properties/FunctionMetadata/FunctionARN", + "/properties/Stage" + ], + "required": [ + "Name", + "FunctionConfig", + "FunctionCode" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::Function", + "writeOnlyProperties": [ + "/properties/AutoPublish" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/keygroup.json b/internal/aws/cfn/schemas/aws/cloudfront/keygroup.json new file mode 100644 index 00000000..6a5b1ba6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/keygroup.json @@ -0,0 +1,86 @@ +{ + "additionalProperties": false, + "definitions": { + "KeyGroupConfig": { + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "Items": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name", + "Items" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::KeyGroup", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateKeyGroup" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteKeyGroup", + "cloudfront:GetKeyGroup" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListKeyGroups" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetKeyGroup" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateKeyGroup", + "cloudfront:GetKeyGroup" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "Id": { + "type": "string" + }, + "KeyGroupConfig": { + "$ref": "#/definitions/KeyGroupConfig" + }, + "LastModifiedTime": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/LastModifiedTime" + ], + "required": [ + "KeyGroupConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::KeyGroup" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/monitoringsubscription.json b/internal/aws/cfn/schemas/aws/cloudfront/monitoringsubscription.json new file mode 100644 index 00000000..b1acd3f2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/monitoringsubscription.json @@ -0,0 +1,73 @@ +{ + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/DistributionId" + ], + "definitions": { + "MonitoringSubscription": { + "additionalProperties": false, + "properties": { + "RealtimeMetricsSubscriptionConfig": { + "$ref": "#/definitions/RealtimeMetricsSubscriptionConfig" + } + }, + "type": "object" + }, + "RealtimeMetricsSubscriptionConfig": { + "additionalProperties": false, + "properties": { + "RealtimeMetricsSubscriptionStatus": { + "enum": [ + "Enabled", + "Disabled" + ], + "type": "string" + } + }, + "required": [ + "RealtimeMetricsSubscriptionStatus" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::MonitoringSubscription", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateMonitoringSubscription" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteMonitoringSubscription" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetMonitoringSubscription" + ] + } + }, + "primaryIdentifier": [ + "/properties/DistributionId" + ], + "properties": { + "DistributionId": { + "type": "string" + }, + "MonitoringSubscription": { + "$ref": "#/definitions/MonitoringSubscription" + } + }, + "required": [ + "DistributionId", + "MonitoringSubscription" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::MonitoringSubscription" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/originaccesscontrol.json b/internal/aws/cfn/schemas/aws/cloudfront/originaccesscontrol.json new file mode 100644 index 00000000..8f363df3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/originaccesscontrol.json @@ -0,0 +1,89 @@ +{ + "additionalProperties": false, + "definitions": { + "OriginAccessControlConfig": { + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "OriginAccessControlOriginType": { + "pattern": "^(s3|mediastore)$", + "type": "string" + }, + "SigningBehavior": { + "pattern": "^(never|no-override|always)$", + "type": "string" + }, + "SigningProtocol": { + "pattern": "^(sigv4)$", + "type": "string" + } + }, + "required": [ + "Name", + "SigningProtocol", + "SigningBehavior", + "OriginAccessControlOriginType" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::OriginAccessControl", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateOriginAccessControl" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteOriginAccessControl", + "cloudfront:GetOriginAccessControl" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListOriginAccessControls" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetOriginAccessControl" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateOriginAccessControl", + "cloudfront:GetOriginAccessControl" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "Id": { + "type": "string" + }, + "OriginAccessControlConfig": { + "$ref": "#/definitions/OriginAccessControlConfig" + } + }, + "readOnlyProperties": [ + "/properties/Id" + ], + "required": [ + "OriginAccessControlConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::OriginAccessControl" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/originrequestpolicy.json b/internal/aws/cfn/schemas/aws/cloudfront/originrequestpolicy.json new file mode 100644 index 00000000..23d6b564 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/originrequestpolicy.json @@ -0,0 +1,150 @@ +{ + "additionalProperties": false, + "definitions": { + "CookiesConfig": { + "additionalProperties": false, + "properties": { + "CookieBehavior": { + "pattern": "^(none|whitelist|all|allExcept)$", + "type": "string" + }, + "Cookies": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "CookieBehavior" + ], + "type": "object" + }, + "HeadersConfig": { + "additionalProperties": false, + "properties": { + "HeaderBehavior": { + "pattern": "^(none|whitelist|allViewer|allViewerAndWhitelistCloudFront|allExcept)$", + "type": "string" + }, + "Headers": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "HeaderBehavior" + ], + "type": "object" + }, + "OriginRequestPolicyConfig": { + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "CookiesConfig": { + "$ref": "#/definitions/CookiesConfig" + }, + "HeadersConfig": { + "$ref": "#/definitions/HeadersConfig" + }, + "Name": { + "type": "string" + }, + "QueryStringsConfig": { + "$ref": "#/definitions/QueryStringsConfig" + } + }, + "required": [ + "Name", + "HeadersConfig", + "CookiesConfig", + "QueryStringsConfig" + ], + "type": "object" + }, + "QueryStringsConfig": { + "additionalProperties": false, + "properties": { + "QueryStringBehavior": { + "pattern": "^(none|whitelist|all|allExcept)$", + "type": "string" + }, + "QueryStrings": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "QueryStringBehavior" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::OriginRequestPolicy", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateOriginRequestPolicy" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteOriginRequestPolicy", + "cloudfront:GetOriginRequestPolicy" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListOriginRequestPolicies" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetOriginRequestPolicy" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateOriginRequestPolicy", + "cloudfront:GetOriginRequestPolicy" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "Id": { + "type": "string" + }, + "LastModifiedTime": { + "type": "string" + }, + "OriginRequestPolicyConfig": { + "$ref": "#/definitions/OriginRequestPolicyConfig" + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/LastModifiedTime" + ], + "required": [ + "OriginRequestPolicyConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::OriginRequestPolicy" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/publickey.json b/internal/aws/cfn/schemas/aws/cloudfront/publickey.json new file mode 100644 index 00000000..b2e52673 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/publickey.json @@ -0,0 +1,86 @@ +{ + "additionalProperties": false, + "definitions": { + "PublicKeyConfig": { + "additionalProperties": false, + "properties": { + "CallerReference": { + "type": "string" + }, + "Comment": { + "type": "string" + }, + "EncodedKey": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "CallerReference", + "Name", + "EncodedKey" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::PublicKey", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreatePublicKey" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeletePublicKey", + "cloudfront:GetPublicKey" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListPublicKeys" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetPublicKey" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdatePublicKey", + "cloudfront:GetPublicKey" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "CreatedTime": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "PublicKeyConfig": { + "$ref": "#/definitions/PublicKeyConfig" + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/CreatedTime" + ], + "required": [ + "PublicKeyConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::PublicKey" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/realtimelogconfig.json b/internal/aws/cfn/schemas/aws/cloudfront/realtimelogconfig.json new file mode 100644 index 00000000..c31243f1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/realtimelogconfig.json @@ -0,0 +1,121 @@ +{ + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "definitions": { + "EndPoint": { + "additionalProperties": false, + "properties": { + "KinesisStreamConfig": { + "$ref": "#/definitions/KinesisStreamConfig" + }, + "StreamType": { + "type": "string" + } + }, + "required": [ + "KinesisStreamConfig", + "StreamType" + ], + "type": "object" + }, + "KinesisStreamConfig": { + "additionalProperties": false, + "properties": { + "RoleArn": { + "type": "string" + }, + "StreamArn": { + "type": "string" + } + }, + "required": [ + "RoleArn", + "StreamArn" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::RealtimeLogConfig", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateRealtimeLogConfig", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteRealtimeLogConfig", + "cloudfront:GetRealtimeLogConfig" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListRealtimeLogConfigs" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetRealtimeLogConfig" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateRealtimeLogConfig", + "cloudfront:GetRealtimeLogConfig", + "iam:PassRole" + ] + } + }, + "primaryIdentifier": [ + "/properties/Arn" + ], + "properties": { + "Arn": { + "type": "string" + }, + "EndPoints": { + "items": { + "$ref": "#/definitions/EndPoint" + }, + "minItems": 1, + "type": "array", + "uniqueItems": false + }, + "Fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "uniqueItems": false + }, + "Name": { + "type": "string" + }, + "SamplingRate": { + "maximum": 100, + "minimum": 1, + "multipleOf": 1.0, + "type": "number" + } + }, + "readOnlyProperties": [ + "/properties/Arn" + ], + "required": [ + "Name", + "EndPoints", + "Fields", + "SamplingRate" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::RealtimeLogConfig" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/responseheaderspolicy.json b/internal/aws/cfn/schemas/aws/cloudfront/responseheaderspolicy.json new file mode 100644 index 00000000..bb45f473 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/responseheaderspolicy.json @@ -0,0 +1,406 @@ +{ + "additionalProperties": false, + "definitions": { + "AccessControlAllowHeaders": { + "additionalProperties": false, + "properties": { + "Items": { + "insertionOrder": false, + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "Items" + ], + "type": "object" + }, + "AccessControlAllowMethods": { + "additionalProperties": false, + "properties": { + "Items": { + "insertionOrder": false, + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "Items" + ], + "type": "object" + }, + "AccessControlAllowOrigins": { + "additionalProperties": false, + "properties": { + "Items": { + "insertionOrder": false, + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "Items" + ], + "type": "object" + }, + "AccessControlExposeHeaders": { + "additionalProperties": false, + "properties": { + "Items": { + "insertionOrder": false, + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "Items" + ], + "type": "object" + }, + "ContentSecurityPolicy": { + "additionalProperties": false, + "properties": { + "ContentSecurityPolicy": { + "type": "string" + }, + "Override": { + "type": "boolean" + } + }, + "required": [ + "Override", + "ContentSecurityPolicy" + ], + "type": "object" + }, + "ContentTypeOptions": { + "additionalProperties": false, + "properties": { + "Override": { + "type": "boolean" + } + }, + "required": [ + "Override" + ], + "type": "object" + }, + "CorsConfig": { + "additionalProperties": false, + "properties": { + "AccessControlAllowCredentials": { + "type": "boolean" + }, + "AccessControlAllowHeaders": { + "$ref": "#/definitions/AccessControlAllowHeaders" + }, + "AccessControlAllowMethods": { + "$ref": "#/definitions/AccessControlAllowMethods" + }, + "AccessControlAllowOrigins": { + "$ref": "#/definitions/AccessControlAllowOrigins" + }, + "AccessControlExposeHeaders": { + "$ref": "#/definitions/AccessControlExposeHeaders" + }, + "AccessControlMaxAgeSec": { + "type": "integer" + }, + "OriginOverride": { + "type": "boolean" + } + }, + "required": [ + "AccessControlAllowOrigins", + "AccessControlAllowHeaders", + "AccessControlAllowMethods", + "AccessControlAllowCredentials", + "OriginOverride" + ], + "type": "object" + }, + "CustomHeader": { + "additionalProperties": false, + "properties": { + "Header": { + "type": "string" + }, + "Override": { + "type": "boolean" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Header", + "Value", + "Override" + ], + "type": "object" + }, + "CustomHeadersConfig": { + "additionalProperties": false, + "properties": { + "Items": { + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CustomHeader" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "Items" + ], + "type": "object" + }, + "FrameOptions": { + "additionalProperties": false, + "properties": { + "FrameOption": { + "pattern": "^(DENY|SAMEORIGIN)$", + "type": "string" + }, + "Override": { + "type": "boolean" + } + }, + "required": [ + "Override", + "FrameOption" + ], + "type": "object" + }, + "ReferrerPolicy": { + "additionalProperties": false, + "properties": { + "Override": { + "type": "boolean" + }, + "ReferrerPolicy": { + "pattern": "^(no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|same-origin|strict-origin|strict-origin-when-cross-origin|unsafe-url)$", + "type": "string" + } + }, + "required": [ + "Override", + "ReferrerPolicy" + ], + "type": "object" + }, + "RemoveHeader": { + "additionalProperties": false, + "properties": { + "Header": { + "type": "string" + } + }, + "required": [ + "Header" + ], + "type": "object" + }, + "RemoveHeadersConfig": { + "additionalProperties": false, + "properties": { + "Items": { + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RemoveHeader" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "Items" + ], + "type": "object" + }, + "ResponseHeadersPolicyConfig": { + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "CorsConfig": { + "$ref": "#/definitions/CorsConfig" + }, + "CustomHeadersConfig": { + "$ref": "#/definitions/CustomHeadersConfig" + }, + "Name": { + "type": "string" + }, + "RemoveHeadersConfig": { + "$ref": "#/definitions/RemoveHeadersConfig" + }, + "SecurityHeadersConfig": { + "$ref": "#/definitions/SecurityHeadersConfig" + }, + "ServerTimingHeadersConfig": { + "$ref": "#/definitions/ServerTimingHeadersConfig" + } + }, + "required": [ + "Name" + ], + "type": "object" + }, + "SecurityHeadersConfig": { + "additionalProperties": false, + "properties": { + "ContentSecurityPolicy": { + "$ref": "#/definitions/ContentSecurityPolicy" + }, + "ContentTypeOptions": { + "$ref": "#/definitions/ContentTypeOptions" + }, + "FrameOptions": { + "$ref": "#/definitions/FrameOptions" + }, + "ReferrerPolicy": { + "$ref": "#/definitions/ReferrerPolicy" + }, + "StrictTransportSecurity": { + "$ref": "#/definitions/StrictTransportSecurity" + }, + "XSSProtection": { + "$ref": "#/definitions/XSSProtection" + } + }, + "required": [], + "type": "object" + }, + "ServerTimingHeadersConfig": { + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "SamplingRate": { + "maximum": 100, + "minimum": 0, + "multipleOf": 0.0001, + "type": "number" + } + }, + "required": [ + "Enabled" + ], + "type": "object" + }, + "StrictTransportSecurity": { + "additionalProperties": false, + "properties": { + "AccessControlMaxAgeSec": { + "type": "integer" + }, + "IncludeSubdomains": { + "type": "boolean" + }, + "Override": { + "type": "boolean" + }, + "Preload": { + "type": "boolean" + } + }, + "required": [ + "Override", + "AccessControlMaxAgeSec" + ], + "type": "object" + }, + "XSSProtection": { + "additionalProperties": false, + "properties": { + "ModeBlock": { + "type": "boolean" + }, + "Override": { + "type": "boolean" + }, + "Protection": { + "type": "boolean" + }, + "ReportUri": { + "type": "string" + } + }, + "required": [ + "Override", + "Protection" + ], + "type": "object" + } + }, + "description": "Resource Type definition for AWS::CloudFront::ResponseHeadersPolicy", + "handlers": { + "create": { + "permissions": [ + "cloudfront:CreateResponseHeadersPolicy" + ] + }, + "delete": { + "permissions": [ + "cloudfront:DeleteResponseHeadersPolicy", + "cloudfront:GetResponseHeadersPolicy" + ] + }, + "list": { + "permissions": [ + "cloudfront:ListResponseHeadersPolicies" + ] + }, + "read": { + "permissions": [ + "cloudfront:GetResponseHeadersPolicy" + ] + }, + "update": { + "permissions": [ + "cloudfront:UpdateResponseHeadersPolicy", + "cloudfront:GetResponseHeadersPolicy" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "properties": { + "Id": { + "type": "string" + }, + "LastModifiedTime": { + "type": "string" + }, + "ResponseHeadersPolicyConfig": { + "$ref": "#/definitions/ResponseHeadersPolicyConfig" + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/LastModifiedTime" + ], + "required": [ + "ResponseHeadersPolicyConfig" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "typeName": "AWS::CloudFront::ResponseHeadersPolicy" +} diff --git a/internal/aws/cfn/schemas/aws/cloudfront/streamingdistribution.json b/internal/aws/cfn/schemas/aws/cloudfront/streamingdistribution.json new file mode 100644 index 00000000..ab5cd503 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudfront/streamingdistribution.json @@ -0,0 +1,144 @@ +{ + "typeName": "AWS::CloudFront::StreamingDistribution", + "description": "Resource Type definition for AWS::CloudFront::StreamingDistribution", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DomainName": { + "type": "string" + }, + "StreamingDistributionConfig": { + "$ref": "#/definitions/StreamingDistributionConfig" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "StreamingDistributionConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Logging": { + "$ref": "#/definitions/Logging" + }, + "Comment": { + "type": "string" + }, + "PriceClass": { + "type": "string" + }, + "S3Origin": { + "$ref": "#/definitions/S3Origin" + }, + "Enabled": { + "type": "boolean" + }, + "Aliases": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "TrustedSigners": { + "$ref": "#/definitions/TrustedSigners" + } + }, + "required": [ + "Comment", + "Enabled", + "S3Origin", + "TrustedSigners" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "TrustedSigners": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "AwsAccountNumbers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "Enabled" + ] + }, + "Logging": { + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "Prefix": { + "type": "string" + } + }, + "required": [ + "Bucket", + "Enabled", + "Prefix" + ] + }, + "S3Origin": { + "type": "object", + "additionalProperties": false, + "properties": { + "DomainName": { + "type": "string" + }, + "OriginAccessIdentity": { + "type": "string" + } + }, + "required": [ + "DomainName", + "OriginAccessIdentity" + ] + } + }, + "required": [ + "StreamingDistributionConfig", + "Tags" + ], + "readOnlyProperties": [ + "/properties/DomainName", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudtrail/channel.json b/internal/aws/cfn/schemas/aws/cloudtrail/channel.json new file mode 100644 index 00000000..a736a2d3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudtrail/channel.json @@ -0,0 +1,165 @@ +{ + "typeName": "AWS::CloudTrail::Channel", + "description": "A channel receives events from a specific source (such as an on-premises storage solution or application, or a partner event data source), and delivers the events to one or more event data stores. You use channels to ingest events into CloudTrail from sources outside AWS.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudtrail.git", + "definitions": { + "Destination": { + "description": "The resource that receives events arriving from a channel.", + "type": "object", + "properties": { + "Type": { + "description": "The type of destination for events arriving from a channel.", + "type": "string", + "enum": [ + "EVENT_DATA_STORE" + ] + }, + "Location": { + "description": "The ARN of a resource that receives events from a channel.", + "type": "string", + "minLength": 3, + "maxLength": 1024, + "pattern": "(^[a-zA-Z0-9._/\\-:]+$)" + } + }, + "required": [ + "Type", + "Location" + ], + "additionalProperties": false + }, + "UUID": { + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "(^[a-f0-9\\-]+$)" + }, + "Timestamp": { + "type": "string" + }, + "ChannelArn": { + "description": "The Amazon Resource Name (ARN) of a channel.", + "type": "string", + "minLength": 3, + "maxLength": 256, + "pattern": "(^[a-zA-Z0-9._/\\-:]+$)" + }, + "ChannelName": { + "description": "The name of the channel.", + "type": "string", + "minLength": 3, + "maxLength": 128, + "pattern": "(^[a-zA-Z0-9._\\-]+$)" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "$ref": "#/definitions/ChannelName" + }, + "Source": { + "description": "The ARN of an on-premises storage solution or application, or a partner event source.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "(.*)" + }, + "Destinations": { + "description": "One or more resources to which events arriving through a channel are logged and stored.", + "type": "array", + "items": { + "$ref": "#/definitions/Destination" + }, + "maxItems": 10, + "uniqueItems": true, + "insertionOrder": false + }, + "ChannelArn": { + "$ref": "#/definitions/ChannelArn" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/ChannelArn" + ], + "createOnlyProperties": [ + "/properties/Source" + ], + "primaryIdentifier": [ + "/properties/ChannelArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "CloudTrail:CreateChannel", + "CloudTrail:AddTags" + ] + }, + "read": { + "permissions": [ + "CloudTrail:GetChannel", + "CloudTrail:ListChannels" + ] + }, + "update": { + "permissions": [ + "CloudTrail:UpdateChannel", + "CloudTrail:GetChannel", + "CloudTrail:AddTags", + "CloudTrail:RemoveTags" + ] + }, + "delete": { + "permissions": [ + "CloudTrail:DeleteChannel" + ] + }, + "list": { + "permissions": [ + "CloudTrail:ListChannels" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudtrail/eventdatastore.json b/internal/aws/cfn/schemas/aws/cloudtrail/eventdatastore.json new file mode 100644 index 00000000..02d38143 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudtrail/eventdatastore.json @@ -0,0 +1,338 @@ +{ + "typeName": "AWS::CloudTrail::EventDataStore", + "description": "A storage lake of event data against which you can run complex SQL-based queries. An event data store can include events that you have logged on your account from the last 7 to 2557 or 3653 days (about seven or ten years) depending on the selected BillingMode.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudtrail.git", + "definitions": { + "AdvancedFieldSelector": { + "description": "A single selector statement in an advanced event selector.", + "type": "object", + "additionalProperties": false, + "properties": { + "Field": { + "description": "A field in an event record on which to filter events to be logged. Supported fields include readOnly, eventCategory, eventSource (for management events), eventName, resources.type, and resources.ARN.", + "type": "string", + "pattern": "([\\w|\\d|\\.|_]+)", + "minLength": 1, + "maxLength": 1000 + }, + "Equals": { + "description": "An operator that includes events that match the exact value of the event record field specified as the value of Field. This is the only valid operator that you can use with the readOnly, eventCategory, and resources.type fields.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "StartsWith": { + "description": "An operator that includes events that match the first few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "EndsWith": { + "description": "An operator that includes events that match the last few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "NotEquals": { + "description": "An operator that excludes events that match the exact value of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "NotStartsWith": { + "description": "An operator that excludes events that match the first few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "NotEndsWith": { + "description": "An operator that excludes events that match the last few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + } + }, + "required": [ + "Field" + ] + }, + "AdvancedEventSelector": { + "description": "Advanced event selectors let you create fine-grained selectors for the following AWS CloudTrail event record ?elds. They help you control costs by logging only those events that are important to you.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "An optional, descriptive name for an advanced event selector, such as \"Log data events for only two S3 buckets\".", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "FieldSelectors": { + "description": "Contains all selector statements in an advanced event selector.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/AdvancedFieldSelector" + } + } + }, + "required": [ + "FieldSelectors" + ] + }, + "Tag": { + "description": "An arbitrary set of tags (key-value pairs) for this event data store.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "InsightSelector": { + "description": "A string that contains Insights types that are logged on an event data store.", + "type": "object", + "additionalProperties": false, + "properties": { + "InsightType": { + "description": "The type of Insights to log on an event data store.", + "type": "string" + } + } + }, + "Timestamp": { + "type": "string" + } + }, + "properties": { + "AdvancedEventSelectors": { + "description": "The advanced event selectors that were used to select events for the data store.", + "type": "array", + "items": { + "$ref": "#/definitions/AdvancedEventSelector" + }, + "uniqueItems": true, + "insertionOrder": false + }, + "CreatedTimestamp": { + "description": "The timestamp of the event data store's creation.", + "$ref": "#/definitions/Timestamp" + }, + "EventDataStoreArn": { + "description": "The ARN of the event data store.", + "type": "string" + }, + "FederationEnabled": { + "description": "Indicates whether federation is enabled on an event data store.", + "type": "boolean" + }, + "FederationRoleArn": { + "description": "The ARN of the role used for event data store federation.", + "type": "string" + }, + "MultiRegionEnabled": { + "description": "Indicates whether the event data store includes events from all regions, or only from the region in which it was created.", + "type": "boolean" + }, + "Name": { + "description": "The name of the event data store.", + "type": "string" + }, + "OrganizationEnabled": { + "description": "Indicates that an event data store is collecting logged events for an organization.", + "type": "boolean" + }, + "BillingMode": { + "description": "The mode that the event data store will use to charge for event storage.", + "type": "string" + }, + "RetentionPeriod": { + "description": "The retention period, in days.", + "type": "integer" + }, + "Status": { + "description": "The status of an event data store. Values are STARTING_INGESTION, ENABLED, STOPPING_INGESTION, STOPPED_INGESTION and PENDING_DELETION.", + "type": "string" + }, + "TerminationProtectionEnabled": { + "description": "Indicates whether the event data store is protected from termination.", + "type": "boolean" + }, + "UpdatedTimestamp": { + "description": "The timestamp showing when an event data store was updated, if applicable. UpdatedTimestamp is always either the same or newer than the time shown in CreatedTimestamp.", + "$ref": "#/definitions/Timestamp" + }, + "KmsKeyId": { + "description": "Specifies the KMS key ID to use to encrypt the events delivered by CloudTrail. The value can be an alias name prefixed by 'alias/', a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier.", + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "InsightSelectors": { + "description": "Lets you enable Insights event logging by specifying the Insights selectors that you want to enable on an existing event data store. Both InsightSelectors and InsightsDestination need to have a value in order to enable Insights events on an event data store.", + "type": "array", + "items": { + "$ref": "#/definitions/InsightSelector" + }, + "uniqueItems": true, + "insertionOrder": false + }, + "InsightsDestination": { + "description": "Specifies the ARN of the event data store that will collect Insights events. Both InsightSelectors and InsightsDestination need to have a value in order to enable Insights events on an event data store", + "type": "string" + }, + "IngestionEnabled": { + "description": "Indicates whether the event data store is ingesting events.", + "type": "boolean" + } + }, + "required": [], + "readOnlyProperties": [ + "/properties/EventDataStoreArn", + "/properties/CreatedTimestamp", + "/properties/UpdatedTimestamp", + "/properties/Status", + "/properties/FederationStatus" + ], + "primaryIdentifier": [ + "/properties/EventDataStoreArn" + ], + "propertyTransform": { + "/properties/KmsKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", KmsKeyId])" + }, + "handlers": { + "create": { + "permissions": [ + "CloudTrail:CreateEventDataStore", + "CloudTrail:AddTags", + "CloudTrail:PutInsightSelectors", + "CloudTrail:EnableFederation", + "CloudTrail:GetEventDataStore", + "iam:PassRole", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "organizations:DescribeOrganization", + "organizations:ListAWSServiceAccessForOrganization", + "kms:GenerateDataKey", + "kms:Decrypt", + "glue:CreateDatabase", + "glue:CreateTable", + "glue:PassConnection", + "lakeformation:RegisterResource" + ] + }, + "read": { + "permissions": [ + "CloudTrail:GetEventDataStore", + "CloudTrail:ListEventDataStores", + "CloudTrail:GetInsightSelectors", + "CloudTrail:ListTags" + ] + }, + "update": { + "permissions": [ + "CloudTrail:UpdateEventDataStore", + "CloudTrail:RestoreEventDataStore", + "CloudTrail:AddTags", + "CloudTrail:RemoveTags", + "CloudTrail:StartEventDataStoreIngestion", + "CloudTrail:StopEventDataStoreIngestion", + "CloudTrail:GetEventDataStore", + "CloudTrail:PutInsightSelectors", + "CloudTrail:GetInsightSelectors", + "CloudTrail:EnableFederation", + "CloudTrail:DisableFederation", + "iam:PassRole", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "organizations:DescribeOrganization", + "organizations:ListAWSServiceAccessForOrganization", + "glue:CreateDatabase", + "glue:CreateTable", + "glue:PassConnection", + "lakeformation:RegisterResource", + "glue:DeleteTable", + "lakeformation:DeregisterResource", + "kms:DescribeKey" + ] + }, + "delete": { + "permissions": [ + "CloudTrail:DeleteEventDataStore", + "CloudTrail:GetEventDataStore", + "CloudTrail:DisableFederation", + "glue:DeleteTable", + "lakeformation:DeregisterResource" + ] + }, + "list": { + "permissions": [ + "CloudTrail:ListEventDataStores", + "CloudTrail:GetEventDataStore", + "CloudTrail:GetInsightSelectors", + "CloudTrail:ListTags" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/cloudtrail/resourcepolicy.json b/internal/aws/cfn/schemas/aws/cloudtrail/resourcepolicy.json new file mode 100644 index 00000000..74a36bf4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudtrail/resourcepolicy.json @@ -0,0 +1,56 @@ +{ + "typeName": "AWS::CloudTrail::ResourcePolicy", + "description": "Resource Type definition for AWS::CloudTrail::ResourcePolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudtrail.git", + "properties": { + "ResourceArn": { + "description": "The ARN of the AWS CloudTrail resource to which the policy applies.", + "type": "string" + }, + "ResourcePolicy": { + "description": "A policy document containing permissions to add to the specified resource. In IAM, you must provide policy documents in JSON format. However, in CloudFormation you can provide the policy in JSON or YAML format because CloudFormation converts YAML to JSON before submitting it to IAM.", + "type": [ + "object", + "string" + ] + } + }, + "additionalProperties": false, + "required": [ + "ResourceArn", + "ResourcePolicy" + ], + "tagging": { + "taggable": false + }, + "primaryIdentifier": [ + "/properties/ResourceArn" + ], + "createOnlyProperties": [ + "/properties/ResourceArn" + ], + "handlers": { + "create": { + "permissions": [ + "CloudTrail:PutResourcePolicy", + "CloudTrail:GetResourcePolicy" + ] + }, + "read": { + "permissions": [ + "CloudTrail:GetResourcePolicy" + ] + }, + "update": { + "permissions": [ + "CloudTrail:PutResourcePolicy", + "CloudTrail:GetResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "CloudTrail:DeleteResourcePolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cloudtrail/trail.json b/internal/aws/cfn/schemas/aws/cloudtrail/trail.json new file mode 100644 index 00000000..c8e6cdbd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudtrail/trail.json @@ -0,0 +1,398 @@ +{ + "typeName": "AWS::CloudTrail::Trail", + "description": "Creates a trail that specifies the settings for delivery of log data to an Amazon S3 bucket. A maximum of five trails can exist in a region, irrespective of the region in which they were created.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudtrail.git", + "definitions": { + "DataResource": { + "description": "CloudTrail supports data event logging for Amazon S3 objects and AWS Lambda functions. You can specify up to 250 resources for an individual event selector, but the total number of data resources cannot exceed 250 across all event selectors in a trail. This limit does not apply if you configure resource logging for all data events.", + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "description": "The resource type in which you want to log data events. You can specify AWS::S3::Object or AWS::Lambda::Function resources.", + "type": "string" + }, + "Values": { + "description": "An array of Amazon Resource Name (ARN) strings or partial ARN strings for the specified objects.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "Type" + ] + }, + "AdvancedFieldSelector": { + "description": "A single selector statement in an advanced event selector.", + "type": "object", + "additionalProperties": false, + "properties": { + "Field": { + "description": "A field in an event record on which to filter events to be logged. Supported fields include readOnly, eventCategory, eventSource (for management events), eventName, resources.type, and resources.ARN.", + "type": "string", + "pattern": "([\\w|\\d|\\.|_]+)", + "minLength": 1, + "maxLength": 1000 + }, + "Equals": { + "description": "An operator that includes events that match the exact value of the event record field specified as the value of Field. This is the only valid operator that you can use with the readOnly, eventCategory, and resources.type fields.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "StartsWith": { + "description": "An operator that includes events that match the first few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "EndsWith": { + "description": "An operator that includes events that match the last few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "NotEquals": { + "description": "An operator that excludes events that match the exact value of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "NotStartsWith": { + "description": "An operator that excludes events that match the first few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + }, + "NotEndsWith": { + "description": "An operator that excludes events that match the last few characters of the event record field specified as the value of Field.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "pattern": "(.+)", + "minLength": 1, + "maxLength": 2048 + } + } + }, + "required": [ + "Field" + ] + }, + "AdvancedEventSelector": { + "description": "Advanced event selectors let you create fine-grained selectors for the following AWS CloudTrail event record ?elds. They help you control costs by logging only those events that are important to you.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "An optional, descriptive name for an advanced event selector, such as \"Log data events for only two S3 buckets\".", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "FieldSelectors": { + "description": "Contains all selector statements in an advanced event selector.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/AdvancedFieldSelector" + } + } + }, + "required": [ + "FieldSelectors" + ] + }, + "EventSelector": { + "description": "The type of email sending events to publish to the event destination.", + "type": "object", + "additionalProperties": false, + "properties": { + "DataResources": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DataResource" + } + }, + "IncludeManagementEvents": { + "description": "Specify if you want your event selector to include management events for your trail.", + "type": "boolean" + }, + "ReadWriteType": { + "description": "Specify if you want your trail to log read-only events, write-only events, or all. For example, the EC2 GetConsoleOutput is a read-only API operation and RunInstances is a write-only API operation.", + "type": "string", + "enum": [ + "All", + "ReadOnly", + "WriteOnly" + ] + }, + "ExcludeManagementEventSources": { + "description": "An optional list of service event sources from which you do not want management events to be logged on your trail. In this release, the list can be empty (disables the filter), or it can filter out AWS Key Management Service events by containing \"kms.amazonaws.com\". By default, ExcludeManagementEventSources is empty, and AWS KMS events are included in events that are logged to your trail.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + } + } + }, + "Tag": { + "description": "An arbitrary set of tags (key-value pairs) for this trail.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "InsightSelector": { + "description": "A string that contains insight types that are logged on a trail.", + "type": "object", + "additionalProperties": false, + "properties": { + "InsightType": { + "description": "The type of insight to log on a trail.", + "type": "string" + } + } + } + }, + "properties": { + "CloudWatchLogsLogGroupArn": { + "description": "Specifies a log group name using an Amazon Resource Name (ARN), a unique identifier that represents the log group to which CloudTrail logs will be delivered. Not required unless you specify CloudWatchLogsRoleArn.", + "type": "string" + }, + "CloudWatchLogsRoleArn": { + "description": "Specifies the role for the CloudWatch Logs endpoint to assume to write to a user's log group.", + "type": "string" + }, + "EnableLogFileValidation": { + "description": "Specifies whether log file validation is enabled. The default is false.", + "type": "boolean" + }, + "AdvancedEventSelectors": { + "description": "The advanced event selectors that were used to select events for the data store.", + "type": "array", + "items": { + "$ref": "#/definitions/AdvancedEventSelector" + }, + "uniqueItems": true, + "insertionOrder": false + }, + "EventSelectors": { + "description": "Use event selectors to further specify the management and data event settings for your trail. By default, trails created without specific event selectors will be configured to log all read and write management events, and no data events. When an event occurs in your account, CloudTrail evaluates the event selector for all trails. For each trail, if the event matches any event selector, the trail processes and logs the event. If the event doesn't match any event selector, the trail doesn't log the event. You can configure up to five event selectors for a trail.", + "type": "array", + "items": { + "$ref": "#/definitions/EventSelector" + }, + "maxItems": 5, + "uniqueItems": true, + "insertionOrder": false + }, + "IncludeGlobalServiceEvents": { + "description": "Specifies whether the trail is publishing events from global services such as IAM to the log files.", + "type": "boolean" + }, + "IsLogging": { + "description": "Whether the CloudTrail is currently logging AWS API calls.", + "type": "boolean" + }, + "IsMultiRegionTrail": { + "description": "Specifies whether the trail applies only to the current region or to all regions. The default is false. If the trail exists only in the current region and this value is set to true, shadow trails (replications of the trail) will be created in the other regions. If the trail exists in all regions and this value is set to false, the trail will remain in the region where it was created, and its shadow trails in other regions will be deleted. As a best practice, consider using trails that log events in all regions.", + "type": "boolean" + }, + "IsOrganizationTrail": { + "description": "Specifies whether the trail is created for all accounts in an organization in AWS Organizations, or only for the current AWS account. The default is false, and cannot be true unless the call is made on behalf of an AWS account that is the master account for an organization in AWS Organizations.", + "type": "boolean" + }, + "KMSKeyId": { + "description": "Specifies the KMS key ID to use to encrypt the logs delivered by CloudTrail. The value can be an alias name prefixed by 'alias/', a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier.", + "type": "string" + }, + "S3BucketName": { + "description": "Specifies the name of the Amazon S3 bucket designated for publishing log files. See Amazon S3 Bucket Naming Requirements.", + "type": "string" + }, + "S3KeyPrefix": { + "description": "Specifies the Amazon S3 key prefix that comes after the name of the bucket you have designated for log file delivery. For more information, see Finding Your CloudTrail Log Files. The maximum length is 200 characters.", + "type": "string", + "maxLength": 200 + }, + "SnsTopicName": { + "description": "Specifies the name of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters.", + "type": "string", + "maxLength": 256 + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TrailName": { + "type": "string", + "pattern": "(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9]([a-zA-Z0-9\\._-])*[a-zA-Z0-9]$)", + "minLength": 3, + "maxLength": 128 + }, + "Arn": { + "type": "string" + }, + "SnsTopicArn": { + "type": "string" + }, + "InsightSelectors": { + "description": "Lets you enable Insights event logging by specifying the Insights selectors that you want to enable on an existing trail.", + "type": "array", + "items": { + "$ref": "#/definitions/InsightSelector" + }, + "uniqueItems": true, + "insertionOrder": false + } + }, + "required": [ + "S3BucketName", + "IsLogging" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/SnsTopicArn" + ], + "createOnlyProperties": [ + "/properties/TrailName" + ], + "primaryIdentifier": [ + "/properties/TrailName" + ], + "propertyTransform": { + "/properties/KMSKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", KMSKeyId])" + }, + "handlers": { + "create": { + "permissions": [ + "CloudTrail:CreateTrail", + "CloudTrail:StartLogging", + "CloudTrail:AddTags", + "CloudTrail:PutEventSelectors", + "CloudTrail:PutInsightSelectors", + "iam:GetRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "organizations:DescribeOrganization", + "organizations:ListAWSServiceAccessForOrganization" + ] + }, + "read": { + "permissions": [ + "CloudTrail:GetTrail", + "CloudTrail:GetTrailStatus", + "CloudTrail:ListTags", + "CloudTrail:GetEventSelectors", + "CloudTrail:GetInsightSelectors", + "CloudTrail:DescribeTrails" + ] + }, + "update": { + "permissions": [ + "CloudTrail:UpdateTrail", + "CloudTrail:StartLogging", + "CloudTrail:StopLogging", + "CloudTrail:AddTags", + "CloudTrail:RemoveTags", + "CloudTrail:PutEventSelectors", + "CloudTrail:PutInsightSelectors", + "iam:GetRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "organizations:DescribeOrganization", + "organizations:ListAWSServiceAccessForOrganization", + "CloudTrail:GetTrail", + "CloudTrail:DescribeTrails" + ] + }, + "delete": { + "permissions": [ + "CloudTrail:DeleteTrail" + ] + }, + "list": { + "permissions": [ + "CloudTrail:ListTrails", + "CloudTrail:GetTrail", + "CloudTrail:GetTrailStatus", + "CloudTrail:ListTags", + "CloudTrail:GetEventSelectors", + "CloudTrail:GetInsightSelectors", + "CloudTrail:DescribeTrails" + ] + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/cloudwatch/alarm.json b/internal/aws/cfn/schemas/aws/cloudwatch/alarm.json new file mode 100644 index 00000000..2e05086b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudwatch/alarm.json @@ -0,0 +1,275 @@ +{ + "typeName": "AWS::CloudWatch::Alarm", + "description": "Resource Type definition for AWS::CloudWatch::Alarm", + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "properties": { + "ThresholdMetricId": { + "description": "In an alarm based on an anomaly detection model, this is the ID of the ANOMALY_DETECTION_BAND function used as the threshold for the alarm.", + "type": "string" + }, + "EvaluateLowSampleCountPercentile": { + "description": "Used only for alarms based on percentiles.", + "type": "string" + }, + "ExtendedStatistic": { + "description": "The percentile statistic for the metric associated with the alarm. Specify a value between p0.0 and p100.", + "type": "string" + }, + "ComparisonOperator": { + "description": "The arithmetic operation to use when comparing the specified statistic and threshold.", + "type": "string" + }, + "TreatMissingData": { + "description": "Sets how this alarm is to handle missing data points. Valid values are breaching, notBreaching, ignore, and missing.", + "type": "string" + }, + "Dimensions": { + "description": "The dimensions for the metric associated with the alarm. For an alarm based on a math expression, you can't specify Dimensions. Instead, you use Metrics.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Dimension" + } + }, + "Period": { + "description": "The period in seconds, over which the statistic is applied.", + "type": "integer" + }, + "EvaluationPeriods": { + "description": "The number of periods over which data is compared to the specified threshold.", + "type": "integer" + }, + "Unit": { + "description": "The unit of the metric associated with the alarm.", + "type": "string" + }, + "Namespace": { + "description": "The namespace of the metric associated with the alarm.", + "type": "string" + }, + "OKActions": { + "description": "The actions to execute when this alarm transitions to the OK state from any other state.", + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AlarmActions": { + "description": "The list of actions to execute when this alarm transitions into an ALARM state from any other state.", + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MetricName": { + "description": "The name of the metric associated with the alarm.", + "type": "string" + }, + "ActionsEnabled": { + "description": "Indicates whether actions should be executed during any changes to the alarm state. The default is TRUE.", + "type": "boolean", + "default": true + }, + "Metrics": { + "description": "An array that enables you to create an alarm based on the result of a metric math expression.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricDataQuery" + } + }, + "AlarmDescription": { + "description": "The description of the alarm.", + "type": "string" + }, + "AlarmName": { + "description": "The name of the alarm.", + "type": "string" + }, + "Statistic": { + "description": "The statistic for the metric associated with the alarm, other than percentile.", + "type": "string" + }, + "InsufficientDataActions": { + "description": "The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state.", + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Arn": { + "description": "Amazon Resource Name is a unique name for each resource.", + "type": "string" + }, + "DatapointsToAlarm": { + "description": "The number of datapoints that must be breaching to trigger the alarm.", + "type": "integer" + }, + "Threshold": { + "description": "In an alarm based on an anomaly detection model, this is the ID of the ANOMALY_DETECTION_BAND function used as the threshold for the alarm.", + "type": "number" + } + }, + "definitions": { + "MetricStat": { + "description": "This structure defines the metric to be returned, along with the statistics, period, and units.", + "type": "object", + "additionalProperties": false, + "properties": { + "Period": { + "description": "The granularity, in seconds, of the returned data points.", + "type": "integer" + }, + "Metric": { + "description": "The metric to return, including the metric name, namespace, and dimensions.", + "$ref": "#/definitions/Metric" + }, + "Stat": { + "description": "The statistic to return.", + "type": "string" + }, + "Unit": { + "description": "The unit to use for the returned data points.", + "type": "string" + } + }, + "required": [ + "Stat", + "Period", + "Metric" + ] + }, + "Metric": { + "description": "The Metric property type represents a specific metric.", + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "description": "The name of the metric.", + "type": "string" + }, + "Dimensions": { + "description": "The dimensions for the metric.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Dimension" + } + }, + "Namespace": { + "description": "The namespace of the metric.", + "type": "string" + } + } + }, + "Dimension": { + "description": "Dimensions are arbitrary name/value pairs that can be associated with a CloudWatch metric.", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The value for the dimension.", + "type": "string" + }, + "Name": { + "description": "The name of the dimension.", + "type": "string" + } + }, + "required": [ + "Value", + "Name" + ] + }, + "MetricDataQuery": { + "description": "This property type specifies the metric data to return, and whether this call is just retrieving a batch set of data for one metric, or is performing a math expression on metric data.", + "type": "object", + "additionalProperties": false, + "properties": { + "Label": { + "description": "A human-readable label for this metric or expression.", + "type": "string" + }, + "MetricStat": { + "description": "The metric to be returned, along with statistics, period, and units.", + "$ref": "#/definitions/MetricStat" + }, + "Id": { + "description": "A short name used to tie this object to the results in the response.", + "type": "string" + }, + "ReturnData": { + "description": "This option indicates whether to return the timestamps and raw data values of this metric.", + "type": "boolean" + }, + "Expression": { + "description": "The math expression to be performed on the returned data.", + "type": "string" + }, + "Period": { + "description": "The period in seconds, over which the statistic is applied.", + "type": "integer" + }, + "AccountId": { + "description": "The ID of the account where the metrics are located, if this is a cross-account alarm.", + "type": "string" + } + }, + "required": [ + "Id" + ] + } + }, + "required": [ + "ComparisonOperator", + "EvaluationPeriods" + ], + "handlers": { + "create": { + "permissions": [ + "cloudwatch:PutMetricAlarm", + "cloudwatch:DescribeAlarms" + ] + }, + "update": { + "permissions": [ + "cloudwatch:PutMetricAlarm", + "cloudwatch:DescribeAlarms" + ] + }, + "delete": { + "permissions": [ + "cloudwatch:DeleteAlarms", + "cloudwatch:DescribeAlarms" + ] + }, + "list": { + "permissions": [ + "cloudwatch:DescribeAlarms" + ] + }, + "read": { + "permissions": [ + "cloudwatch:DescribeAlarms" + ] + } + }, + "createOnlyProperties": [ + "/properties/AlarmName" + ], + "primaryIdentifier": [ + "/properties/AlarmName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/cloudwatch/anomalydetector.json b/internal/aws/cfn/schemas/aws/cloudwatch/anomalydetector.json new file mode 100644 index 00000000..1e8ec580 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudwatch/anomalydetector.json @@ -0,0 +1,210 @@ +{ + "typeName": "AWS::CloudWatch::AnomalyDetector", + "description": "Resource Type definition for AWS::CloudWatch::AnomalyDetector", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "Stat": { + "type": "string" + }, + "Configuration": { + "$ref": "#/definitions/Configuration" + }, + "MetricMathAnomalyDetector": { + "$ref": "#/definitions/MetricMathAnomalyDetector" + }, + "Dimensions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Dimension" + } + }, + "Id": { + "type": "string" + }, + "Namespace": { + "type": "string" + }, + "SingleMetricAnomalyDetector": { + "$ref": "#/definitions/SingleMetricAnomalyDetector" + } + }, + "definitions": { + "MetricMathAnomalyDetector": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricDataQueries": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MetricDataQuery" + } + } + } + }, + "Configuration": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricTimeZone": { + "type": "string" + }, + "ExcludedTimeRanges": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Range" + } + } + } + }, + "MetricStat": { + "type": "object", + "additionalProperties": false, + "properties": { + "Period": { + "type": "integer" + }, + "Metric": { + "$ref": "#/definitions/Metric" + }, + "Stat": { + "type": "string" + }, + "Unit": { + "type": "string" + } + }, + "required": [ + "Stat", + "Period", + "Metric" + ] + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Dimension" + } + }, + "Namespace": { + "type": "string" + } + }, + "required": [ + "MetricName", + "Namespace" + ] + }, + "Dimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Value", + "Name" + ] + }, + "MetricDataQuery": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccountId": { + "type": "string" + }, + "ReturnData": { + "type": "boolean" + }, + "Expression": { + "type": "string" + }, + "MetricStat": { + "$ref": "#/definitions/MetricStat" + }, + "Label": { + "type": "string" + }, + "Period": { + "type": "integer" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "Id" + ] + }, + "Range": { + "type": "object", + "additionalProperties": false, + "properties": { + "EndTime": { + "type": "string" + }, + "StartTime": { + "type": "string" + } + }, + "required": [ + "EndTime", + "StartTime" + ] + }, + "SingleMetricAnomalyDetector": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Dimension" + } + }, + "Stat": { + "type": "string" + }, + "Namespace": { + "type": "string" + } + } + } + }, + "createOnlyProperties": [ + "/properties/Dimensions", + "/properties/MetricName", + "/properties/Namespace", + "/properties/SingleMetricAnomalyDetector", + "/properties/MetricMathAnomalyDetector", + "/properties/Stat" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudwatch/compositealarm.json b/internal/aws/cfn/schemas/aws/cloudwatch/compositealarm.json new file mode 100644 index 00000000..36464ecf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudwatch/compositealarm.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::CloudWatch::CompositeAlarm", + "description": "The AWS::CloudWatch::CompositeAlarm type specifies an alarm which aggregates the states of other Alarms (Metric or Composite Alarms) as defined by the AlarmRule expression", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "properties": { + "Arn": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the alarm", + "minLength": 1, + "maxLength": 1600 + }, + "AlarmName": { + "description": "The name of the Composite Alarm", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "AlarmRule": { + "type": "string", + "description": "Expression which aggregates the state of other Alarms (Metric or Composite Alarms)", + "minLength": 1, + "maxLength": 10240 + }, + "AlarmDescription": { + "type": "string", + "description": "The description of the alarm", + "minLength": 0, + "maxLength": 1024 + }, + "ActionsEnabled": { + "description": "Indicates whether actions should be executed during any changes to the alarm state. The default is TRUE.", + "type": "boolean" + }, + "OKActions": { + "type": "array", + "items": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the action", + "minLength": 1, + "maxLength": 1024 + }, + "description": "The actions to execute when this alarm transitions to the OK state from any other state. Each action is specified as an Amazon Resource Name (ARN).", + "maxItems": 5 + }, + "AlarmActions": { + "type": "array", + "items": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the action", + "minLength": 1, + "maxLength": 1024 + }, + "description": "The list of actions to execute when this alarm transitions into an ALARM state from any other state. Specify each action as an Amazon Resource Name (ARN).", + "maxItems": 5 + }, + "InsufficientDataActions": { + "type": "array", + "items": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the action", + "minLength": 1, + "maxLength": 1024 + }, + "description": "The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state. Each action is specified as an Amazon Resource Name (ARN).", + "maxItems": 5 + }, + "ActionsSuppressor": { + "description": "Actions will be suppressed if the suppressor alarm is in the ALARM state. ActionsSuppressor can be an AlarmName or an Amazon Resource Name (ARN) from an existing alarm. ", + "type": "string", + "minLength": 1, + "maxLength": 1600 + }, + "ActionsSuppressorWaitPeriod": { + "description": "Actions will be suppressed if ExtensionPeriod is active. The length of time that actions are suppressed is in seconds.", + "type": "integer", + "minimum": 0 + }, + "ActionsSuppressorExtensionPeriod": { + "description": "Actions will be suppressed if WaitPeriod is active. The length of time that actions are suppressed is in seconds.", + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "AlarmRule" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AlarmName" + ], + "primaryIdentifier": [ + "/properties/AlarmName" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "cloudwatch:DescribeAlarms", + "cloudwatch:PutCompositeAlarm" + ] + }, + "read": { + "permissions": [ + "cloudwatch:DescribeAlarms" + ] + }, + "update": { + "permissions": [ + "cloudwatch:DescribeAlarms", + "cloudwatch:PutCompositeAlarm" + ] + }, + "delete": { + "permissions": [ + "cloudwatch:DescribeAlarms", + "cloudwatch:DeleteAlarms" + ] + }, + "list": { + "permissions": [ + "cloudwatch:DescribeAlarms" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/cloudwatch/dashboard.json b/internal/aws/cfn/schemas/aws/cloudwatch/dashboard.json new file mode 100644 index 00000000..0a228d34 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudwatch/dashboard.json @@ -0,0 +1,28 @@ +{ + "typeName": "AWS::CloudWatch::Dashboard", + "description": "Resource Type definition for AWS::CloudWatch::Dashboard", + "additionalProperties": false, + "properties": { + "DashboardName": { + "type": "string" + }, + "DashboardBody": { + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "DashboardBody" + ], + "createOnlyProperties": [ + "/properties/DashboardName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudwatch/insightrule.json b/internal/aws/cfn/schemas/aws/cloudwatch/insightrule.json new file mode 100644 index 00000000..23582d31 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudwatch/insightrule.json @@ -0,0 +1,46 @@ +{ + "typeName": "AWS::CloudWatch::InsightRule", + "description": "Resource Type definition for AWS::CloudWatch::InsightRule", + "additionalProperties": false, + "properties": { + "RuleState": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "RuleBody": { + "type": "string" + }, + "RuleName": { + "type": "string" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "definitions": { + "Tags": { + "type": "object", + "additionalProperties": false + } + }, + "required": [ + "RuleState", + "RuleBody", + "RuleName" + ], + "createOnlyProperties": [ + "/properties/RuleName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cloudwatch/metricstream.json b/internal/aws/cfn/schemas/aws/cloudwatch/metricstream.json new file mode 100644 index 00000000..b910064a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cloudwatch/metricstream.json @@ -0,0 +1,301 @@ +{ + "typeName": "AWS::CloudWatch::MetricStream", + "description": "Resource Type definition for Metric Stream", + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "taggable": true, + "properties": { + "Arn": { + "description": "Amazon Resource Name of the metric stream.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "CreationDate": { + "description": "The date of creation of the metric stream.", + "type": "string", + "anyOf": [ + { + "format": "date-time" + }, + { + "format": "timestamp" + } + ] + }, + "ExcludeFilters": { + "description": "Define which metrics will be not streamed. Metrics matched by multiple instances of MetricStreamFilter are joined with an OR operation by default. If both IncludeFilters and ExcludeFilters are omitted, all metrics in the account will be streamed. IncludeFilters and ExcludeFilters are mutually exclusive. Default to null.", + "type": "array", + "maxItems": 1000, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricStreamFilter" + } + }, + "FirehoseArn": { + "description": "The ARN of the Kinesis Firehose where to stream the data.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "IncludeFilters": { + "description": "Define which metrics will be streamed. Metrics matched by multiple instances of MetricStreamFilter are joined with an OR operation by default. If both IncludeFilters and ExcludeFilters are omitted, all metrics in the account will be streamed. IncludeFilters and ExcludeFilters are mutually exclusive. Default to null.", + "type": "array", + "maxItems": 1000, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricStreamFilter" + } + }, + "LastUpdateDate": { + "description": "The date of the last update of the metric stream.", + "type": "string", + "anyOf": [ + { + "format": "date-time" + }, + { + "format": "timestamp" + } + ] + }, + "Name": { + "description": "Name of the metric stream.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "RoleArn": { + "description": "The ARN of the role that provides access to the Kinesis Firehose.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "State": { + "description": "Displays the state of the Metric Stream.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "OutputFormat": { + "description": "The output format of the data streamed to the Kinesis Firehose.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "StatisticsConfigurations": { + "description": "By default, a metric stream always sends the MAX, MIN, SUM, and SAMPLECOUNT statistics for each metric that is streamed. You can use this parameter to have the metric stream also send additional statistics in the stream. This array can have up to 100 members.", + "type": "array", + "maxItems": 100, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricStreamStatisticsConfiguration" + } + }, + "Tags": { + "description": "A set of tags to assign to the delivery stream.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "IncludeLinkedAccountsMetrics": { + "description": "If you are creating a metric stream in a monitoring account, specify true to include metrics from source accounts that are linked to this monitoring account, in the metric stream. The default is false.", + "type": "boolean" + } + }, + "definitions": { + "MetricStreamFilter": { + "description": "This structure defines the metrics that will be streamed.", + "type": "object", + "additionalProperties": false, + "properties": { + "Namespace": { + "description": "Only metrics with Namespace matching this value will be streamed.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "MetricNames": { + "description": "Only metrics with MetricNames matching these values will be streamed. Must be set together with Namespace.", + "type": "array", + "maxItems": 999, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + } + }, + "required": [ + "Namespace" + ] + }, + "MetricStreamStatisticsConfiguration": { + "description": "This structure specifies a list of additional statistics to stream, and the metrics to stream those additional statistics for. All metrics that match the combination of metric name and namespace will be streamed with the extended statistics, no matter their dimensions.", + "type": "object", + "additionalProperties": false, + "properties": { + "AdditionalStatistics": { + "description": "The additional statistics to stream for the metrics listed in IncludeMetrics.", + "type": "array", + "maxItems": 20, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "IncludeMetrics": { + "description": "An array that defines the metrics that are to have additional statistics streamed.", + "type": "array", + "maxItems": 100, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricStreamStatisticsMetric" + } + } + }, + "required": [ + "AdditionalStatistics", + "IncludeMetrics" + ] + }, + "MetricStreamStatisticsMetric": { + "description": "A structure that specifies the metric name and namespace for one metric that is going to have additional statistics included in the stream.", + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "description": "The name of the metric.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Namespace": { + "description": "The namespace of the metric.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "MetricName", + "Namespace" + ] + }, + "Tag": { + "description": "Metadata that you can assign to a Metric Stream, consisting of a key-value pair.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "A unique identifier for the tag.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "String which you can use to describe or define the tag.", + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "handlers": { + "create": { + "permissions": [ + "cloudwatch:PutMetricStream", + "cloudwatch:GetMetricStream", + "cloudwatch:TagResource", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "cloudwatch:PutMetricStream", + "cloudwatch:GetMetricStream", + "cloudwatch:TagResource", + "cloudwatch:UntagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "cloudwatch:DeleteMetricStream", + "cloudwatch:GetMetricStream" + ] + }, + "list": { + "permissions": [ + "cloudwatch:ListMetricStreams" + ] + }, + "read": { + "permissions": [ + "cloudwatch:GetMetricStream" + ] + } + }, + "required": [ + "FirehoseArn", + "RoleArn", + "OutputFormat" + ], + "anyOf": [ + { + "required": [ + "FirehoseArn", + "RoleArn", + "OutputFormat" + ] + }, + { + "allOf": [ + { + "required": [ + "FirehoseArn", + "RoleArn", + "OutputFormat" + ] + } + ] + }, + { + "oneOf": [ + { + "required": [ + "IncludeFilters" + ] + }, + { + "required": [ + "ExcludeFilters" + ] + } + ] + } + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationDate", + "/properties/LastUpdateDate", + "/properties/State" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codeartifact/domain.json b/internal/aws/cfn/schemas/aws/codeartifact/domain.json new file mode 100644 index 00000000..305eb4ef --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codeartifact/domain.json @@ -0,0 +1,136 @@ +{ + "typeName": "AWS::CodeArtifact::Domain", + "description": "The resource schema to create a CodeArtifact domain.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codeartifact", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "DomainName": { + "description": "The name of the domain.", + "type": "string", + "pattern": "^([a-z][a-z0-9\\-]{0,48}[a-z0-9])$", + "minLength": 2, + "maxLength": 50 + }, + "Name": { + "description": "The name of the domain. This field is used for GetAtt", + "type": "string", + "pattern": "^([a-z][a-z0-9\\-]{0,48}[a-z0-9])$", + "minLength": 2, + "maxLength": 50 + }, + "Owner": { + "description": "The 12-digit account ID of the AWS account that owns the domain. This field is used for GetAtt", + "pattern": "[0-9]{12}", + "type": "string" + }, + "EncryptionKey": { + "description": "The ARN of an AWS Key Management Service (AWS KMS) key associated with a domain.", + "type": "string" + }, + "PermissionsPolicyDocument": { + "description": "The access control resource policy on the provided domain.", + "type": "object", + "minLength": 2, + "maxLength": 5120 + }, + "Tags": { + "type": "array", + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "The ARN of the domain.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "additionalProperties": false, + "required": [ + "DomainName" + ], + "createOnlyProperties": [ + "/properties/DomainName", + "/properties/EncryptionKey" + ], + "readOnlyProperties": [ + "/properties/Owner", + "/properties/Name", + "/properties/EncryptionKey", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "codeartifact:CreateDomain", + "codeartifact:DescribeDomain", + "codeartifact:PutDomainPermissionsPolicy", + "codeartifact:GetDomainPermissionsPolicy", + "codeartifact:TagResource" + ] + }, + "read": { + "permissions": [ + "codeartifact:DescribeDomain", + "codeartifact:GetDomainPermissionsPolicy", + "codeartifact:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "codeartifact:PutDomainPermissionsPolicy", + "codeartifact:DeleteDomainPermissionsPolicy", + "codeartifact:GetDomainPermissionsPolicy", + "codeartifact:TagResource", + "codeartifact:UntagResource" + ] + }, + "delete": { + "permissions": [ + "codeartifact:DeleteDomain", + "codeartifact:DescribeDomain" + ] + }, + "list": { + "permissions": [ + "codeartifact:ListDomains" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/codeartifact/repository.json b/internal/aws/cfn/schemas/aws/codeartifact/repository.json new file mode 100644 index 00000000..7d2ab097 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codeartifact/repository.json @@ -0,0 +1,164 @@ +{ + "typeName": "AWS::CodeArtifact::Repository", + "description": "The resource schema to create a CodeArtifact repository.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codeartifact", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "RepositoryName": { + "description": "The name of the repository.", + "type": "string", + "pattern": "^([A-Za-z0-9][A-Za-z0-9._\\-]{1,99})$", + "minLength": 2, + "maxLength": 100 + }, + "Name": { + "description": "The name of the repository. This is used for GetAtt", + "type": "string", + "pattern": "^([A-Za-z0-9][A-Za-z0-9._\\-]{1,99})$", + "minLength": 2, + "maxLength": 100 + }, + "DomainName": { + "description": "The name of the domain that contains the repository.", + "type": "string", + "pattern": "^([a-z][a-z0-9\\-]{0,48}[a-z0-9])$", + "minLength": 2, + "maxLength": 50 + }, + "DomainOwner": { + "description": "The 12-digit account ID of the AWS account that owns the domain.", + "pattern": "[0-9]{12}", + "type": "string" + }, + "Description": { + "description": "A text description of the repository.", + "type": "string", + "maxLength": 1000 + }, + "Arn": { + "description": "The ARN of the repository.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "ExternalConnections": { + "description": "A list of external connections associated with the repository.", + "type": "array", + "items": { + "type": "string" + } + }, + "Upstreams": { + "description": "A list of upstream repositories associated with the repository.", + "type": "array", + "items": { + "type": "string" + } + }, + "PermissionsPolicyDocument": { + "description": "The access control resource policy on the provided repository.", + "type": "object", + "minLength": 2, + "maxLength": 5120 + }, + "Tags": { + "type": "array", + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "RepositoryName", + "DomainName" + ], + "createOnlyProperties": [ + "/properties/RepositoryName", + "/properties/DomainName", + "/properties/DomainOwner" + ], + "readOnlyProperties": [ + "/properties/Name", + "/properties/DomainOwner", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "codeartifact:CreateRepository", + "codeartifact:DescribeRepository", + "codeartifact:PutRepositoryPermissionsPolicy", + "codeartifact:AssociateExternalConnection", + "codeartifact:AssociateWithDownstreamRepository", + "codeartifact:TagResource" + ] + }, + "read": { + "permissions": [ + "codeartifact:DescribeRepository", + "codeartifact:GetRepositoryPermissionsPolicy", + "codeartifact:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "codeartifact:PutRepositoryPermissionsPolicy", + "codeartifact:DeleteRepositoryPermissionsPolicy", + "codeartifact:AssociateExternalConnection", + "codeartifact:DisassociateExternalConnection", + "codeartifact:UpdateRepository", + "codeartifact:DescribeRepository", + "codeartifact:AssociateWithDownstreamRepository", + "codeartifact:TagResource", + "codeartifact:UntagResource" + ] + }, + "delete": { + "permissions": [ + "codeartifact:DeleteRepository", + "codeartifact:DescribeRepository" + ] + }, + "list": { + "permissions": [ + "codeartifact:ListRepositories" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/codebuild/project.json b/internal/aws/cfn/schemas/aws/codebuild/project.json new file mode 100644 index 00000000..d6bb94c3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codebuild/project.json @@ -0,0 +1,534 @@ +{ + "typeName": "AWS::CodeBuild::Project", + "description": "Resource Type definition for AWS::CodeBuild::Project", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "ResourceAccessRole": { + "type": "string" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + }, + "SecondarySources": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Source" + } + }, + "EncryptionKey": { + "type": "string" + }, + "SecondaryArtifacts": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Artifacts" + } + }, + "Source": { + "$ref": "#/definitions/Source" + }, + "Name": { + "type": "string" + }, + "LogsConfig": { + "$ref": "#/definitions/LogsConfig" + }, + "ServiceRole": { + "type": "string" + }, + "QueuedTimeoutInMinutes": { + "type": "integer" + }, + "SecondarySourceVersions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ProjectSourceVersion" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SourceVersion": { + "type": "string" + }, + "Triggers": { + "$ref": "#/definitions/ProjectTriggers" + }, + "Artifacts": { + "$ref": "#/definitions/Artifacts" + }, + "BadgeEnabled": { + "type": "boolean" + }, + "FileSystemLocations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ProjectFileSystemLocation" + } + }, + "Environment": { + "$ref": "#/definitions/Environment" + }, + "ConcurrentBuildLimit": { + "type": "integer" + }, + "Visibility": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "BuildBatchConfig": { + "$ref": "#/definitions/ProjectBuildBatchConfig" + }, + "TimeoutInMinutes": { + "type": "integer" + }, + "Cache": { + "$ref": "#/definitions/ProjectCache" + } + }, + "definitions": { + "ProjectSourceVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourceIdentifier": { + "type": "string" + }, + "SourceVersion": { + "type": "string" + } + }, + "required": [ + "SourceIdentifier" + ] + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Subnets": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "VpcId": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "SourceAuth": { + "type": "object", + "additionalProperties": false, + "properties": { + "Resource": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "RegistryCredential": { + "type": "object", + "additionalProperties": false, + "properties": { + "Credential": { + "type": "string" + }, + "CredentialProvider": { + "type": "string" + } + }, + "required": [ + "Credential", + "CredentialProvider" + ] + }, + "FilterGroup": { + "type": "object", + "additionalProperties": false + }, + "Source": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "ReportBuildStatus": { + "type": "boolean" + }, + "Auth": { + "$ref": "#/definitions/SourceAuth" + }, + "SourceIdentifier": { + "type": "string" + }, + "BuildSpec": { + "type": "string" + }, + "GitCloneDepth": { + "type": "integer" + }, + "BuildStatusConfig": { + "$ref": "#/definitions/BuildStatusConfig" + }, + "GitSubmodulesConfig": { + "$ref": "#/definitions/GitSubmodulesConfig" + }, + "InsecureSsl": { + "type": "boolean" + }, + "Location": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "ProjectCache": { + "type": "object", + "additionalProperties": false, + "properties": { + "Modes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Type": { + "type": "string" + }, + "Location": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "Artifacts": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "ArtifactIdentifier": { + "type": "string" + }, + "OverrideArtifactName": { + "type": "boolean" + }, + "Packaging": { + "type": "string" + }, + "EncryptionDisabled": { + "type": "boolean" + }, + "Location": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "NamespaceType": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "LogsConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogs": { + "$ref": "#/definitions/CloudWatchLogsConfig" + }, + "S3Logs": { + "$ref": "#/definitions/S3LogsConfig" + } + } + }, + "BatchRestrictions": { + "type": "object", + "additionalProperties": false, + "properties": { + "ComputeTypesAllowed": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MaximumBuildsAllowed": { + "type": "integer" + } + } + }, + "ProjectBuildBatchConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "CombineArtifacts": { + "type": "boolean" + }, + "ServiceRole": { + "type": "string" + }, + "BatchReportMode": { + "type": "string" + }, + "TimeoutInMins": { + "type": "integer" + }, + "Restrictions": { + "$ref": "#/definitions/BatchRestrictions" + } + } + }, + "CloudWatchLogsConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string" + }, + "GroupName": { + "type": "string" + }, + "StreamName": { + "type": "string" + } + }, + "required": [ + "Status" + ] + }, + "Environment": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "EnvironmentVariables": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + }, + "Fleet": { + "$ref": "#/definitions/ProjectFleet" + }, + "PrivilegedMode": { + "type": "boolean" + }, + "ImagePullCredentialsType": { + "type": "string" + }, + "Image": { + "type": "string" + }, + "RegistryCredential": { + "$ref": "#/definitions/RegistryCredential" + }, + "ComputeType": { + "type": "string" + }, + "Certificate": { + "type": "string" + } + }, + "required": [ + "Type", + "Image", + "ComputeType" + ] + }, + "EnvironmentVariable": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Value", + "Name" + ] + }, + "ProjectFileSystemLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "MountPoint": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Identifier": { + "type": "string" + }, + "MountOptions": { + "type": "string" + }, + "Location": { + "type": "string" + } + }, + "required": [ + "MountPoint", + "Type", + "Identifier", + "Location" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ProjectTriggers": { + "type": "object", + "additionalProperties": false, + "properties": { + "BuildType": { + "type": "string" + }, + "FilterGroups": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/FilterGroup" + } + }, + "Webhook": { + "type": "boolean" + } + } + }, + "BuildStatusConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Context": { + "type": "string" + }, + "TargetUrl": { + "type": "string" + } + } + }, + "GitSubmodulesConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "FetchSubmodules": { + "type": "boolean" + } + }, + "required": [ + "FetchSubmodules" + ] + }, + "S3LogsConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string" + }, + "EncryptionDisabled": { + "type": "boolean" + }, + "Location": { + "type": "string" + } + }, + "required": [ + "Status" + ] + }, + "ProjectFleet": { + "type": "object", + "additionalProperties": false, + "properties": { + "FleetArn": { + "type": "string" + } + } + } + }, + "required": [ + "Artifacts", + "ServiceRole", + "Environment", + "Source" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codebuild/reportgroup.json b/internal/aws/cfn/schemas/aws/codebuild/reportgroup.json new file mode 100644 index 00000000..9a561671 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codebuild/reportgroup.json @@ -0,0 +1,107 @@ +{ + "typeName": "AWS::CodeBuild::ReportGroup", + "description": "Resource Type definition for AWS::CodeBuild::ReportGroup", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "ExportConfig": { + "$ref": "#/definitions/ReportExportConfig" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "DeleteReports": { + "type": "boolean" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "S3ReportExportConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + }, + "Bucket": { + "type": "string" + }, + "Packaging": { + "type": "string" + }, + "EncryptionKey": { + "type": "string" + }, + "BucketOwner": { + "type": "string" + }, + "EncryptionDisabled": { + "type": "boolean" + } + }, + "required": [ + "Bucket" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ReportExportConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Destination": { + "$ref": "#/definitions/S3ReportExportConfig" + }, + "ExportConfigType": { + "type": "string" + } + }, + "required": [ + "ExportConfigType" + ] + } + }, + "required": [ + "Type", + "ExportConfig" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codebuild/sourcecredential.json b/internal/aws/cfn/schemas/aws/codebuild/sourcecredential.json new file mode 100644 index 00000000..5fca8e43 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codebuild/sourcecredential.json @@ -0,0 +1,36 @@ +{ + "typeName": "AWS::CodeBuild::SourceCredential", + "description": "Resource Type definition for AWS::CodeBuild::SourceCredential", + "additionalProperties": false, + "properties": { + "ServerType": { + "type": "string" + }, + "Token": { + "type": "string" + }, + "AuthType": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Username": { + "type": "string" + } + }, + "required": [ + "ServerType", + "Token", + "AuthType" + ], + "createOnlyProperties": [ + "/properties/ServerType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codecommit/repository.json b/internal/aws/cfn/schemas/aws/codecommit/repository.json new file mode 100644 index 00000000..b899e6c5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codecommit/repository.json @@ -0,0 +1,147 @@ +{ + "typeName": "AWS::CodeCommit::Repository", + "description": "Resource Type definition for AWS::CodeCommit::Repository", + "additionalProperties": false, + "properties": { + "CloneUrlHttp": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "CloneUrlSsh": { + "type": "string" + }, + "RepositoryName": { + "type": "string" + }, + "Triggers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/RepositoryTrigger" + } + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Code": { + "$ref": "#/definitions/Code" + }, + "RepositoryDescription": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "S3": { + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectVersion": { + "type": "string" + }, + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Bucket", + "Key" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "RepositoryTrigger": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomData": { + "type": "string" + }, + "Events": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Branches": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DestinationArn": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Events", + "DestinationArn", + "Name" + ] + }, + "Code": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3": { + "$ref": "#/definitions/S3" + }, + "BranchName": { + "type": "string" + } + }, + "required": [ + "S3" + ] + } + }, + "required": [ + "RepositoryName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/CloneUrlHttp", + "/properties/Id", + "/properties/Name", + "/properties/CloneUrlSsh", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codedeploy/application.json b/internal/aws/cfn/schemas/aws/codedeploy/application.json new file mode 100644 index 00000000..e1125c22 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codedeploy/application.json @@ -0,0 +1,88 @@ +{ + "typeName": "AWS::CodeDeploy::Application", + "description": "The AWS::CodeDeploy::Application resource creates an AWS CodeDeploy application", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "ApplicationName": { + "description": "A name for the application. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the application name.", + "type": "string" + }, + "ComputePlatform": { + "description": "The compute platform that CodeDeploy deploys the application to.", + "type": "string" + }, + "Tags": { + "description": "The metadata that you apply to CodeDeploy applications to help you organize and categorize them. Each tag consists of a key and an optional value, both of which you define. ", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": false + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/ApplicationName", + "/properties/ComputePlatform" + ], + "primaryIdentifier": [ + "/properties/ApplicationName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "codedeploy:CreateApplication", + "codedeploy:TagResource" + ] + }, + "read": { + "permissions": [ + "codedeploy:GetApplication", + "codedeploy:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "codedeploy:GetApplication", + "codedeploy:DeleteApplication" + ] + }, + "update": { + "permissions": [ + "codedeploy:TagResource", + "codedeploy:UntagResource" + ] + }, + "list": { + "permissions": [ + "codedeploy:ListApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/codedeploy/deploymentconfig.json b/internal/aws/cfn/schemas/aws/codedeploy/deploymentconfig.json new file mode 100644 index 00000000..63a72700 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codedeploy/deploymentconfig.json @@ -0,0 +1,169 @@ +{ + "typeName": "AWS::CodeDeploy::DeploymentConfig", + "description": "Resource Type definition for AWS::CodeDeploy::DeploymentConfig", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codedeploy", + "definitions": { + "TimeBasedLinear": { + "type": "object", + "additionalProperties": false, + "properties": { + "LinearInterval": { + "type": "integer" + }, + "LinearPercentage": { + "type": "integer" + } + }, + "required": [ + "LinearInterval", + "LinearPercentage" + ] + }, + "TimeBasedCanary": { + "type": "object", + "additionalProperties": false, + "properties": { + "CanaryPercentage": { + "type": "integer" + }, + "CanaryInterval": { + "type": "integer" + } + }, + "required": [ + "CanaryPercentage", + "CanaryInterval" + ] + }, + "TrafficRoutingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "TimeBasedLinear": { + "$ref": "#/definitions/TimeBasedLinear" + }, + "TimeBasedCanary": { + "$ref": "#/definitions/TimeBasedCanary" + } + }, + "required": [ + "Type" + ] + }, + "MinimumHealthyHostsPerZone": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "integer" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type", + "Value" + ] + }, + "ZonalConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "FirstZoneMonitorDurationInSeconds": { + "type": "integer", + "format": "int64" + }, + "MonitorDurationInSeconds": { + "type": "integer", + "format": "int64" + }, + "MinimumHealthyHostsPerZone": { + "$ref": "#/definitions/MinimumHealthyHostsPerZone" + } + }, + "required": [] + }, + "MinimumHealthyHosts": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "integer" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type", + "Value" + ] + } + }, + "properties": { + "ComputePlatform": { + "description": "The destination platform type for the deployment (Lambda, Server, or ECS).", + "type": "string" + }, + "DeploymentConfigName": { + "description": "A name for the deployment configuration. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the deployment configuration name. For more information, see Name Type.", + "type": "string" + }, + "MinimumHealthyHosts": { + "description": "The minimum number of healthy instances that should be available at any time during the deployment. There are two parameters expected in the input: type and value.", + "$ref": "#/definitions/MinimumHealthyHosts" + }, + "ZonalConfig": { + "description": "The zonal deployment config that specifies how the zonal deployment behaves", + "$ref": "#/definitions/ZonalConfig" + }, + "TrafficRoutingConfig": { + "description": "The configuration that specifies how the deployment traffic is routed.", + "$ref": "#/definitions/TrafficRoutingConfig" + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/DeploymentConfigName", + "/properties/MinimumHealthyHosts", + "/properties/ComputePlatform", + "/properties/ZonalConfig", + "/properties/TrafficRoutingConfig" + ], + "primaryIdentifier": [ + "/properties/DeploymentConfigName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "codedeploy:CreateDeploymentConfig" + ] + }, + "read": { + "permissions": [ + "codedeploy:GetDeploymentConfig" + ] + }, + "delete": { + "permissions": [ + "codedeploy:GetDeploymentConfig", + "codedeploy:DeleteDeploymentConfig" + ] + }, + "list": { + "permissions": [ + "codedeploy:ListDeploymentConfigs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/codedeploy/deploymentgroup.json b/internal/aws/cfn/schemas/aws/codedeploy/deploymentgroup.json new file mode 100644 index 00000000..782c2cfd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codedeploy/deploymentgroup.json @@ -0,0 +1,498 @@ +{ + "typeName": "AWS::CodeDeploy::DeploymentGroup", + "description": "Resource Type definition for AWS::CodeDeploy::DeploymentGroup", + "additionalProperties": false, + "properties": { + "OnPremisesTagSet": { + "$ref": "#/definitions/OnPremisesTagSet" + }, + "ApplicationName": { + "type": "string" + }, + "DeploymentStyle": { + "$ref": "#/definitions/DeploymentStyle" + }, + "ServiceRoleArn": { + "type": "string" + }, + "BlueGreenDeploymentConfiguration": { + "$ref": "#/definitions/BlueGreenDeploymentConfiguration" + }, + "AutoScalingGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Ec2TagSet": { + "$ref": "#/definitions/EC2TagSet" + }, + "OutdatedInstancesStrategy": { + "type": "string" + }, + "TriggerConfigurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TriggerConfig" + } + }, + "Deployment": { + "$ref": "#/definitions/Deployment" + }, + "DeploymentConfigName": { + "type": "string" + }, + "AlarmConfiguration": { + "$ref": "#/definitions/AlarmConfiguration" + }, + "Ec2TagFilters": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EC2TagFilter" + } + }, + "TerminationHookEnabled": { + "type": "boolean" + }, + "ECSServices": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ECSService" + } + }, + "AutoRollbackConfiguration": { + "$ref": "#/definitions/AutoRollbackConfiguration" + }, + "LoadBalancerInfo": { + "$ref": "#/definitions/LoadBalancerInfo" + }, + "Id": { + "type": "string" + }, + "DeploymentGroupName": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "OnPremisesInstanceTagFilters": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TagFilter" + } + } + }, + "definitions": { + "OnPremisesTagSet": { + "type": "object", + "additionalProperties": false, + "properties": { + "OnPremisesTagSetList": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/OnPremisesTagSetListObject" + } + } + } + }, + "DeploymentStyle": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeploymentOption": { + "type": "string" + }, + "DeploymentType": { + "type": "string" + } + } + }, + "BlueGreenDeploymentConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "GreenFleetProvisioningOption": { + "$ref": "#/definitions/GreenFleetProvisioningOption" + }, + "DeploymentReadyOption": { + "$ref": "#/definitions/DeploymentReadyOption" + }, + "TerminateBlueInstancesOnDeploymentSuccess": { + "$ref": "#/definitions/BlueInstanceTerminationOption" + } + } + }, + "TagFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + }, + "TriggerConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TriggerTargetArn": { + "type": "string" + }, + "TriggerName": { + "type": "string" + }, + "TriggerEvents": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "GitHubLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "Repository": { + "type": "string" + }, + "CommitId": { + "type": "string" + } + }, + "required": [ + "Repository", + "CommitId" + ] + }, + "Deployment": { + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "Revision": { + "$ref": "#/definitions/RevisionLocation" + }, + "IgnoreApplicationStopFailures": { + "type": "boolean" + } + }, + "required": [ + "Revision" + ] + }, + "ELBInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + } + } + }, + "EC2TagSetListObject": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ec2TagGroup": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EC2TagFilter" + } + } + } + }, + "S3Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "BundleType": { + "type": "string" + }, + "Bucket": { + "type": "string" + }, + "ETag": { + "type": "string" + }, + "Version": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Bucket", + "Key" + ] + }, + "AutoRollbackConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Events": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Enabled": { + "type": "boolean" + } + } + }, + "DeploymentReadyOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "WaitTimeInMinutes": { + "type": "integer" + }, + "ActionOnTimeout": { + "type": "string" + } + } + }, + "EC2TagFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + }, + "RevisionLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Location": { + "$ref": "#/definitions/S3Location" + }, + "GitHubLocation": { + "$ref": "#/definitions/GitHubLocation" + }, + "RevisionType": { + "type": "string" + } + } + }, + "GreenFleetProvisioningOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "type": "string" + } + } + }, + "LoadBalancerInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetGroupInfoList": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TargetGroupInfo" + } + }, + "ElbInfoList": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ELBInfo" + } + }, + "TargetGroupPairInfoList": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TargetGroupPairInfo" + } + } + } + }, + "AlarmConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Alarms": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Alarm" + } + }, + "IgnorePollAlarmFailure": { + "type": "boolean" + }, + "Enabled": { + "type": "boolean" + } + } + }, + "EC2TagSet": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ec2TagSetList": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EC2TagSetListObject" + } + } + } + }, + "TrafficRoute": { + "type": "object", + "additionalProperties": false, + "properties": { + "ListenerArns": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "ECSService": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceName": { + "type": "string" + }, + "ClusterName": { + "type": "string" + } + }, + "required": [ + "ServiceName", + "ClusterName" + ] + }, + "TargetGroupPairInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "ProdTrafficRoute": { + "$ref": "#/definitions/TrafficRoute" + }, + "TestTrafficRoute": { + "$ref": "#/definitions/TrafficRoute" + }, + "TargetGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TargetGroupInfo" + } + } + } + }, + "Alarm": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + } + } + }, + "TargetGroupInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + } + } + }, + "OnPremisesTagSetListObject": { + "type": "object", + "additionalProperties": false, + "properties": { + "OnPremisesTagGroup": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TagFilter" + } + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "BlueInstanceTerminationOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "TerminationWaitTimeInMinutes": { + "type": "integer" + }, + "Action": { + "type": "string" + } + } + } + }, + "required": [ + "ApplicationName", + "ServiceRoleArn" + ], + "createOnlyProperties": [ + "/properties/DeploymentGroupName", + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codeguruprofiler/profilinggroup.json b/internal/aws/cfn/schemas/aws/codeguruprofiler/profilinggroup.json new file mode 100644 index 00000000..71bdfdd8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codeguruprofiler/profilinggroup.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::CodeGuruProfiler::ProfilingGroup", + "description": "This resource schema represents the Profiling Group resource in the Amazon CodeGuru Profiler service.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codeguru-profiler", + "definitions": { + "ProfilingGroupArn": { + "type": "string", + "pattern": "^arn:aws([-\\w]*):codeguru-profiler:(([a-z]+-)+[0-9]+):([0-9]{12}):profilingGroup/[^.]+$" + }, + "IamArn": { + "type": "string", + "pattern": "^arn:aws([-\\w]*):iam::([0-9]{12}):[\\S]+$" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. The allowed characters across services are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. The allowed characters across services are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ChannelId": { + "description": "Unique identifier for each Channel in the notification configuration of a Profiling Group", + "type": "string", + "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "ChannelUri": { + "description": "Unique arn of the resource to be used for notifications. We support a valid SNS topic arn as a channel uri.", + "type": "string", + "pattern": "^arn:aws([-\\w]*):[a-z-]+:(([a-z]+-)+[0-9]+)?:([0-9]{12}):[^.]+$" + }, + "Channel": { + "description": "Notification medium for users to get alerted for events that occur in application profile. We support SNS topic as a notification channel.", + "type": "object", + "required": [ + "channelUri" + ], + "properties": { + "channelId": { + "$ref": "#/definitions/ChannelId" + }, + "channelUri": { + "$ref": "#/definitions/ChannelUri" + } + } + } + }, + "properties": { + "ProfilingGroupName": { + "description": "The name of the profiling group.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[\\w-]+$" + }, + "ComputePlatform": { + "description": "The compute platform of the profiling group.", + "type": "string", + "enum": [ + "Default", + "AWSLambda" + ] + }, + "AgentPermissions": { + "description": "The agent permissions attached to this profiling group.", + "type": "object", + "additionalProperties": false, + "required": [ + "Principals" + ], + "properties": { + "Principals": { + "description": "The principals for the agent permissions.", + "type": "array", + "items": { + "$ref": "#/definitions/IamArn" + } + } + } + }, + "AnomalyDetectionNotificationConfiguration": { + "description": "Configuration for Notification Channels for Anomaly Detection feature in CodeGuru Profiler which enables customers to detect anomalies in the application profile for those methods that represent the highest proportion of CPU time or latency", + "type": "array", + "items": { + "$ref": "#/definitions/Channel" + } + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the specified profiling group.", + "$ref": "#/definitions/ProfilingGroupArn", + "examples": [ + "arn:aws:codeguru-profiler:us-east-1:000000000000:profilingGroup/My-example-profiling-group" + ] + }, + "Tags": { + "description": "The tags associated with a profiling group.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50, + "uniqueItems": true + } + }, + "additionalProperties": false, + "required": [ + "ProfilingGroupName" + ], + "primaryIdentifier": [ + "/properties/ProfilingGroupName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ProfilingGroupName", + "/properties/ComputePlatform" + ], + "handlers": { + "create": { + "permissions": [ + "sns:Publish", + "codeguru-profiler:AddNotificationChannels", + "codeguru-profiler:CreateProfilingGroup", + "codeguru-profiler:PutPermission", + "codeguru-profiler:TagResource" + ] + }, + "read": { + "permissions": [ + "codeguru-profiler:DescribeProfilingGroup", + "codeguru-profiler:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "sns:Publish", + "codeguru-profiler:AddNotificationChannels", + "codeguru-profiler:GetNotificationConfiguration", + "codeguru-profiler:RemoveNotificationChannel", + "codeguru-profiler:PutPermission", + "codeguru-profiler:RemovePermission", + "codeguru-profiler:GetPolicy", + "codeguru-profiler:TagResource", + "codeguru-profiler:UntagResource", + "codeguru-profiler:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "codeguru-profiler:DeleteProfilingGroup" + ] + }, + "list": { + "permissions": [ + "codeguru-profiler:ListProfilingGroups", + "codeguru-profiler:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/codegurureviewer/repositoryassociation.json b/internal/aws/cfn/schemas/aws/codegurureviewer/repositoryassociation.json new file mode 100644 index 00000000..2be9909b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codegurureviewer/repositoryassociation.json @@ -0,0 +1,149 @@ +{ + "typeName": "AWS::CodeGuruReviewer::RepositoryAssociation", + "description": "This resource schema represents the RepositoryAssociation resource in the Amazon CodeGuru Reviewer service.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codegurureviewer", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. The allowed characters across services are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. The allowed characters across services are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Name": { + "description": "Name of the repository to be associated.", + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "^\\S[\\w.-]*$" + }, + "Type": { + "description": "The type of repository to be associated.", + "type": "string", + "enum": [ + "CodeCommit", + "Bitbucket", + "GitHubEnterpriseServer", + "S3Bucket" + ] + }, + "Owner": { + "description": "The owner of the repository. For a Bitbucket repository, this is the username for the account that owns the repository.", + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "^\\S(.*\\S)?$" + }, + "BucketName": { + "description": "The name of the S3 bucket associated with an associated S3 repository. It must start with `codeguru-reviewer-`.", + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "^\\S(.*\\S)?$" + }, + "ConnectionArn": { + "description": "The Amazon Resource Name (ARN) of an AWS CodeStar Connections connection.", + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "arn:aws(-[\\w]+)*:.+:.+:[0-9]{12}:.+" + }, + "AssociationArn": { + "description": "The Amazon Resource Name (ARN) of the repository association.", + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "arn:aws(-[\\w]+)*:.+:.+:[0-9]{12}:.+" + }, + "Tags": { + "description": "The tags associated with a repository association.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50, + "uniqueItems": false + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Type" + ], + "readOnlyProperties": [ + "/properties/AssociationArn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type", + "/properties/Tags", + "/properties/BucketName", + "/properties/Owner", + "/properties/ConnectionArn" + ], + "primaryIdentifier": [ + "/properties/AssociationArn" + ], + "handlers": { + "create": { + "permissions": [ + "codeguru-reviewer:DescribeRepositoryAssociation", + "codeguru-reviewer:AssociateRepository", + "codeguru-reviewer:TagResource", + "iam:CreateServiceLinkedRole", + "codecommit:TagResource", + "codecommit:GitPull", + "codecommit:TagResource", + "events:PutRule", + "events:PutTargets", + "codestar-connections:ListBranches", + "codestar-connections:ListRepositories", + "codestar-connections:ListTagsForResource", + "codestar-connections:PassConnection", + "codestar-connections:TagResource", + "codestar-connections:UseConnection", + "s3:ListBucket" + ] + }, + "read": { + "permissions": [ + "codeguru-reviewer:DescribeRepositoryAssociation", + "codeguru-reviewer:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "codeguru-reviewer:DescribeRepositoryAssociation", + "codeguru-reviewer:DisassociateRepository", + "codecommit:UntagResource", + "events:DeleteRule", + "events:RemoveTargets", + "codestar-connections:UntagResource", + "codestar-connections:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "codeguru-reviewer:ListRepositoryAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/codepipeline/customactiontype.json b/internal/aws/cfn/schemas/aws/codepipeline/customactiontype.json new file mode 100644 index 00000000..217fadf2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codepipeline/customactiontype.json @@ -0,0 +1,221 @@ +{ + "typeName": "AWS::CodePipeline::CustomActionType", + "description": "The AWS::CodePipeline::CustomActionType resource creates a custom action for activities that aren't included in the CodePipeline default actions, such as running an internally developed build process or a test suite. You can use these custom actions in the stage of a pipeline.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline.git", + "additionalProperties": false, + "properties": { + "Category": { + "description": "The category of the custom action, such as a build action or a test action.", + "type": "string" + }, + "ConfigurationProperties": { + "description": "The configuration properties for the custom action.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConfigurationProperties" + } + }, + "InputArtifactDetails": { + "description": "The details of the input artifact for the action, such as its commit ID.", + "$ref": "#/definitions/ArtifactDetails" + }, + "OutputArtifactDetails": { + "description": "The details of the output artifact of the action, such as its commit ID.", + "$ref": "#/definitions/ArtifactDetails" + }, + "Provider": { + "description": "The provider of the service used in the custom action, such as AWS CodeDeploy.", + "type": "string" + }, + "Settings": { + "description": "URLs that provide users information about this custom action.", + "$ref": "#/definitions/Settings" + }, + "Tags": { + "description": "Any tags assigned to the custom action.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Version": { + "description": "The version identifier of the custom action.", + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "ConfigurationProperties": { + "additionalProperties": false, + "description": "The configuration properties for the custom action.", + "type": "object", + "properties": { + "Description": { + "description": "The description of the action configuration property that is displayed to users. ", + "type": "string" + }, + "Key": { + "description": "Whether the configuration property is a key.", + "type": "boolean" + }, + "Name": { + "description": "The name of the action configuration property.", + "type": "string" + }, + "Queryable": { + "description": "Indicates that the property is used with PollForJobs. When creating a custom action, an action can have up to one queryable property. If it has one, that property must be both required and not secret.If you create a pipeline with a custom action type, and that custom action contains a queryable property, the value for that configuration property is subject to other restrictions. The value must be less than or equal to twenty (20) characters. The value can contain only alphanumeric characters, underscores, and hyphens. ", + "type": "boolean" + }, + "Required": { + "description": "Whether the configuration property is a required value.", + "type": "boolean" + }, + "Secret": { + "description": "Whether the configuration property is secret. Secrets are hidden from all calls except for GetJobDetails, GetThirdPartyJobDetails, PollForJobs, and PollForThirdPartyJobs.", + "type": "boolean" + }, + "Type": { + "description": "The type of the configuration property.", + "type": "string" + } + }, + "required": [ + "Key", + "Name", + "Required", + "Secret" + ] + }, + "ArtifactDetails": { + "additionalProperties": false, + "description": "Returns information about the details of an artifact.", + "type": "object", + "properties": { + "MaximumCount": { + "description": "The maximum number of artifacts allowed for the action type.", + "type": "integer" + }, + "MinimumCount": { + "description": "The minimum number of artifacts allowed for the action type.", + "type": "integer" + } + }, + "required": [ + "MaximumCount", + "MinimumCount" + ] + }, + "Settings": { + "additionalProperties": false, + "description": "Settings is a property of the AWS::CodePipeline::CustomActionType resource that provides URLs that users can access to view information about the CodePipeline custom action. ", + "type": "object", + "properties": { + "EntityUrlTemplate": { + "description": "The URL returned to the AWS CodePipeline console that provides a deep link to the resources of the external system, such as the configuration page for an AWS CodeDeploy deployment group. This link is provided as part of the action display in the pipeline. ", + "type": "string" + }, + "ExecutionUrlTemplate": { + "description": "The URL returned to the AWS CodePipeline console that contains a link to the top-level landing page for the external system, such as the console page for AWS CodeDeploy. This link is shown on the pipeline view page in the AWS CodePipeline console and provides a link to the execution entity of the external action. ", + "type": "string" + }, + "RevisionUrlTemplate": { + "description": "The URL returned to the AWS CodePipeline console that contains a link to the page where customers can update or change the configuration of the external action. ", + "type": "string" + }, + "ThirdPartyConfigurationUrl": { + "description": "The URL of a sign-up page where users can sign up for an external service and perform initial configuration of the action provided by that service.", + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Category", + "InputArtifactDetails", + "OutputArtifactDetails", + "Provider", + "Version" + ], + "createOnlyProperties": [ + "/properties/Category", + "/properties/ConfigurationProperties", + "/properties/InputArtifactDetails", + "/properties/OutputArtifactDetails", + "/properties/Provider", + "/properties/Settings", + "/properties/Version" + ], + "writeOnlyProperties": [ + "/properties/ConfigurationProperties/*/Type" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Category", + "/properties/Provider", + "/properties/Version" + ], + "handlers": { + "create": { + "permissions": [ + "codepipeline:CreateCustomActionType", + "codepipeline:TagResource", + "codepipeline:ListActionTypes" + ] + }, + "read": { + "permissions": [ + "codepipeline:ListActionTypes", + "codepipeline:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "codepipeline:ListActionTypes", + "codepipeline:TagResource", + "codepipeline:UntagResource" + ] + }, + "delete": { + "permissions": [ + "codepipeline:DeleteCustomActionType", + "codepipeline:ListActionTypes" + ] + }, + "list": { + "permissions": [ + "codepipeline:ListActionTypes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/codepipeline/pipeline.json b/internal/aws/cfn/schemas/aws/codepipeline/pipeline.json new file mode 100644 index 00000000..65bec6e6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codepipeline/pipeline.json @@ -0,0 +1,464 @@ +{ + "typeName": "AWS::CodePipeline::Pipeline", + "description": "Resource Type definition for AWS::CodePipeline::Pipeline", + "additionalProperties": false, + "properties": { + "ArtifactStores": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ArtifactStoreMap" + } + }, + "DisableInboundStageTransitions": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/StageTransition" + } + }, + "Stages": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/StageDeclaration" + } + }, + "ExecutionMode": { + "type": "string" + }, + "RestartExecutionOnUpdate": { + "type": "boolean" + }, + "Triggers": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/PipelineTriggerDeclaration" + } + }, + "RoleArn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Variables": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/VariableDeclaration" + } + }, + "Version": { + "type": "string" + }, + "ArtifactStore": { + "$ref": "#/definitions/ArtifactStore" + }, + "PipelineType": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "BlockerDeclaration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Type", + "Name" + ] + }, + "GitConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Push": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/GitPushFilter" + } + }, + "SourceActionName": { + "type": "string" + }, + "PullRequest": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/GitPullRequestFilter" + } + } + }, + "required": [ + "SourceActionName" + ] + }, + "ActionTypeId": { + "type": "object", + "additionalProperties": false, + "properties": { + "Owner": { + "type": "string" + }, + "Category": { + "type": "string" + }, + "Version": { + "type": "string" + }, + "Provider": { + "type": "string" + } + }, + "required": [ + "Owner", + "Category", + "Version", + "Provider" + ] + }, + "ArtifactStoreMap": { + "type": "object", + "additionalProperties": false, + "properties": { + "ArtifactStore": { + "$ref": "#/definitions/ArtifactStore" + }, + "Region": { + "type": "string" + } + }, + "required": [ + "ArtifactStore", + "Region" + ] + }, + "PipelineTriggerDeclaration": { + "type": "object", + "additionalProperties": false, + "properties": { + "GitConfiguration": { + "$ref": "#/definitions/GitConfiguration" + }, + "ProviderType": { + "type": "string" + } + }, + "required": [ + "ProviderType" + ] + }, + "EncryptionKey": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "Type", + "Id" + ] + }, + "GitPullRequestFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "FilePaths": { + "$ref": "#/definitions/GitFilePathFilterCriteria" + }, + "Events": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Branches": { + "$ref": "#/definitions/GitBranchFilterCriteria" + } + } + }, + "GitPushFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "FilePaths": { + "$ref": "#/definitions/GitFilePathFilterCriteria" + }, + "Branches": { + "$ref": "#/definitions/GitBranchFilterCriteria" + }, + "Tags": { + "$ref": "#/definitions/GitTagFilterCriteria" + } + } + }, + "ActionDeclaration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ActionTypeId": { + "$ref": "#/definitions/ActionTypeId" + }, + "Configuration": { + "type": "object" + }, + "InputArtifacts": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InputArtifact" + } + }, + "OutputArtifacts": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/OutputArtifact" + } + }, + "Region": { + "type": "string" + }, + "Namespace": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "RunOrder": { + "type": "integer" + }, + "Name": { + "type": "string" + }, + "TimeoutInMinutes": { + "type": "integer" + } + }, + "required": [ + "ActionTypeId", + "Name" + ] + }, + "GitFilePathFilterCriteria": { + "type": "object", + "additionalProperties": false, + "properties": { + "Includes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Excludes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "StageDeclaration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Blockers": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/BlockerDeclaration" + } + }, + "Actions": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ActionDeclaration" + } + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Actions", + "Name" + ] + }, + "InputArtifact": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "ArtifactStore": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "EncryptionKey": { + "$ref": "#/definitions/EncryptionKey" + }, + "Location": { + "type": "string" + } + }, + "required": [ + "Type", + "Location" + ] + }, + "VariableDeclaration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultValue": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "StageTransition": { + "type": "object", + "additionalProperties": false, + "properties": { + "StageName": { + "type": "string" + }, + "Reason": { + "type": "string" + } + }, + "required": [ + "StageName", + "Reason" + ] + }, + "GitTagFilterCriteria": { + "type": "object", + "additionalProperties": false, + "properties": { + "Includes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Excludes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "GitBranchFilterCriteria": { + "type": "object", + "additionalProperties": false, + "properties": { + "Includes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Excludes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "OutputArtifact": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + } + }, + "required": [ + "Stages", + "RoleArn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Version" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codepipeline/webhook.json b/internal/aws/cfn/schemas/aws/codepipeline/webhook.json new file mode 100644 index 00000000..4bd0a7fe --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codepipeline/webhook.json @@ -0,0 +1,88 @@ +{ + "typeName": "AWS::CodePipeline::Webhook", + "description": "Resource Type definition for AWS::CodePipeline::Webhook", + "additionalProperties": false, + "properties": { + "AuthenticationConfiguration": { + "$ref": "#/definitions/WebhookAuthConfiguration" + }, + "Filters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/WebhookFilterRule" + } + }, + "Authentication": { + "type": "string" + }, + "TargetPipeline": { + "type": "string" + }, + "TargetAction": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Url": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "TargetPipelineVersion": { + "type": "integer" + }, + "RegisterWithThirdParty": { + "type": "boolean" + } + }, + "definitions": { + "WebhookFilterRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "JsonPath": { + "type": "string" + }, + "MatchEquals": { + "type": "string" + } + }, + "required": [ + "JsonPath" + ] + }, + "WebhookAuthConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllowedIPRange": { + "type": "string" + }, + "SecretToken": { + "type": "string" + } + } + } + }, + "required": [ + "AuthenticationConfiguration", + "Filters", + "Authentication", + "TargetPipeline", + "TargetAction", + "TargetPipelineVersion" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Url" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codestar/githubrepository.json b/internal/aws/cfn/schemas/aws/codestar/githubrepository.json new file mode 100644 index 00000000..91826cc9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codestar/githubrepository.json @@ -0,0 +1,77 @@ +{ + "typeName": "AWS::CodeStar::GitHubRepository", + "description": "Resource Type definition for AWS::CodeStar::GitHubRepository", + "additionalProperties": false, + "properties": { + "EnableIssues": { + "type": "boolean" + }, + "ConnectionArn": { + "type": "string" + }, + "RepositoryName": { + "type": "string" + }, + "RepositoryAccessToken": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "RepositoryOwner": { + "type": "string" + }, + "IsPrivate": { + "type": "boolean" + }, + "Code": { + "$ref": "#/definitions/Code" + }, + "RepositoryDescription": { + "type": "string" + } + }, + "definitions": { + "S3": { + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectVersion": { + "type": "string" + }, + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Bucket", + "Key" + ] + }, + "Code": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3": { + "$ref": "#/definitions/S3" + } + }, + "required": [ + "S3" + ] + } + }, + "required": [ + "RepositoryName", + "RepositoryOwner" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/codestarconnections/connection.json b/internal/aws/cfn/schemas/aws/codestarconnections/connection.json new file mode 100644 index 00000000..6d602c81 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codestarconnections/connection.json @@ -0,0 +1,131 @@ +{ + "typeName": "AWS::CodeStarConnections::Connection", + "description": "Schema for AWS::CodeStarConnections::Connection resource which can be used to connect external source providers with AWS CodePipeline", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codestarconnections.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "ConnectionArn": { + "description": "The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between AWS services.", + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "arn:aws(-[\\w]+)*:.+:.+:[0-9]{12}:.+" + }, + "ConnectionName": { + "description": "The name of the connection. Connection names must be unique in an AWS user account.", + "type": "string", + "minLength": 1, + "maxLength": 32 + }, + "ConnectionStatus": { + "description": "The current status of the connection.", + "type": "string" + }, + "OwnerAccountId": { + "description": "The name of the external provider where your third-party code repository is configured. For Bitbucket, this is the account ID of the owner of the Bitbucket repository.", + "type": "string", + "minLength": 12, + "maxLength": 12, + "pattern": "[0-9]{12}" + }, + "ProviderType": { + "description": "The name of the external provider where your third-party code repository is configured. You must specify either a ProviderType or a HostArn.", + "type": "string" + }, + "HostArn": { + "description": "The host arn configured to represent the infrastructure where your third-party provider is installed. You must specify either a ProviderType or a HostArn.", + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "arn:aws(-[\\w]+)*:.+:.+:[0-9]{12}:.+" + }, + "Tags": { + "description": "Specifies the tags applied to a connection.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false + } + }, + "required": [ + "ConnectionName" + ], + "createOnlyProperties": [ + "/properties/ConnectionName", + "/properties/ProviderType", + "/properties/HostArn" + ], + "readOnlyProperties": [ + "/properties/ConnectionArn", + "/properties/ConnectionStatus", + "/properties/OwnerAccountId" + ], + "primaryIdentifier": [ + "/properties/ConnectionArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "codestar-connections:CreateConnection", + "codestar-connections:TagResource" + ] + }, + "read": { + "permissions": [ + "codestar-connections:GetConnection", + "codestar-connections:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "codestar-connections:ListTagsForResource", + "codestar-connections:TagResource", + "codestar-connections:UntagResource" + ] + }, + "delete": { + "permissions": [ + "codestar-connections:DeleteConnection" + ] + }, + "list": { + "permissions": [ + "codestar-connections:ListConnections", + "codestar-connections:ListTagsForResource" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/codestarnotifications/notificationrule.json b/internal/aws/cfn/schemas/aws/codestarnotifications/notificationrule.json new file mode 100644 index 00000000..73a79e15 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/codestarnotifications/notificationrule.json @@ -0,0 +1,144 @@ +{ + "typeName": "AWS::CodeStarNotifications::NotificationRule", + "description": "Resource Type definition for AWS::CodeStarNotifications::NotificationRule", + "additionalProperties": false, + "properties": { + "EventTypeId": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "CreatedBy": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "TargetAddress": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "EventTypeIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 200 + } + }, + "Status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "DetailType": { + "type": "string", + "enum": [ + "BASIC", + "FULL" + ] + }, + "Resource": { + "type": "string", + "pattern": "^arn:aws[^:\\s]*:[^:\\s]*:[^:\\s]*:[0-9]{12}:[^\\s]+$" + }, + "Targets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Target" + }, + "maxItems": 10 + }, + "Tags": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".*": { + "type": "string" + } + } + }, + "Name": { + "type": "string", + "pattern": "[A-Za-z0-9\\-_ ]+$", + "minLength": 1, + "maxLength": 64 + }, + "Arn": { + "type": "string", + "pattern": "^arn:aws[^:\\s]*:codestar-notifications:[^:\\s]+:\\d{12}:notificationrule\\/(.*\\S)?$" + } + }, + "definitions": { + "Target": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetType": { + "type": "string" + }, + "TargetAddress": { + "type": "string" + } + }, + "required": [ + "TargetType", + "TargetAddress" + ] + } + }, + "required": [ + "EventTypeIds", + "Resource", + "DetailType", + "Targets", + "Name" + ], + "createOnlyProperties": [ + "/properties/Resource" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/EventTypeId", + "/properties/TargetAddress" + ], + "handlers": { + "create": { + "permissions": [ + "codestar-notifications:createNotificationRule" + ] + }, + "list": { + "permissions": [ + "codestar-notifications:listNotificationRules" + ] + }, + "read": { + "permissions": [ + "codestar-notifications:describeNotificationRule" + ] + }, + "delete": { + "permissions": [ + "codestar-notifications:deleteNotificationRule", + "codestar-notifications:describeNotificationRule" + ] + }, + "update": { + "permissions": [ + "codestar-notifications:updateNotificationRule", + "codestar-notifications:TagResource", + "codestar-notifications:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/identitypool.json b/internal/aws/cfn/schemas/aws/cognito/identitypool.json new file mode 100644 index 00000000..fc3bed1c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/identitypool.json @@ -0,0 +1,170 @@ +{ + "typeName": "AWS::Cognito::IdentityPool", + "description": "Resource Type definition for AWS::Cognito::IdentityPool", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "definitions": { + "PushSync": { + "type": "object", + "additionalProperties": false, + "properties": { + "ApplicationArns": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "RoleArn": { + "type": "string" + } + } + }, + "CognitoIdentityProvider": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServerSideTokenCheck": { + "type": "boolean" + }, + "ProviderName": { + "type": "string" + }, + "ClientId": { + "type": "string" + } + }, + "required": [ + "ProviderName", + "ClientId" + ] + }, + "CognitoStreams": { + "type": "object", + "additionalProperties": false, + "properties": { + "StreamingStatus": { + "type": "string" + }, + "StreamName": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + } + } + }, + "properties": { + "PushSync": { + "$ref": "#/definitions/PushSync" + }, + "CognitoIdentityProviders": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CognitoIdentityProvider" + } + }, + "DeveloperProviderName": { + "type": "string" + }, + "CognitoStreams": { + "$ref": "#/definitions/CognitoStreams" + }, + "SupportedLoginProviders": { + "type": "object" + }, + "Name": { + "type": "string" + }, + "CognitoEvents": { + "type": "object" + }, + "Id": { + "type": "string" + }, + "IdentityPoolName": { + "type": "string" + }, + "AllowUnauthenticatedIdentities": { + "type": "boolean" + }, + "SamlProviderARNs": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "OpenIdConnectProviderARNs": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "AllowClassicFlow": { + "type": "boolean" + } + }, + "required": [ + "AllowUnauthenticatedIdentities" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/PushSync", + "/properties/CognitoStreams", + "/properties/CognitoEvents" + ], + "handlers": { + "create": { + "permissions": [ + "cognito-identity:CreateIdentityPool", + "cognito-sync:SetIdentityPoolConfiguration", + "cognito-sync:SetCognitoEvents", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "cognito-identity:DescribeIdentityPool" + ] + }, + "update": { + "permissions": [ + "cognito-identity:UpdateIdentityPool", + "cognito-identity:DescribeIdentityPool", + "cognito-sync:SetIdentityPoolConfiguration", + "cognito-sync:SetCognitoEvents", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "cognito-identity:DeleteIdentityPool" + ] + }, + "list": { + "permissions": [ + "cognito-identity:ListIdentityPools" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/identitypoolprincipaltag.json b/internal/aws/cfn/schemas/aws/cognito/identitypoolprincipaltag.json new file mode 100644 index 00000000..786439e1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/identitypoolprincipaltag.json @@ -0,0 +1,82 @@ +{ + "typeName": "AWS::Cognito::IdentityPoolPrincipalTag", + "description": "Resource Type definition for AWS::Cognito::IdentityPoolPrincipalTag", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "IdentityPoolId": { + "type": "string" + }, + "IdentityProviderName": { + "type": "string" + }, + "UseDefaults": { + "type": "boolean" + }, + "PrincipalTags": { + "type": "object" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "IdentityPoolId", + "IdentityProviderName" + ], + "createOnlyProperties": [ + "/properties/IdentityPoolId", + "/properties/IdentityProviderName" + ], + "primaryIdentifier": [ + "/properties/IdentityPoolId", + "/properties/IdentityProviderName" + ], + "handlers": { + "create": { + "permissions": [ + "cognito-identity:GetPrincipalTagAttributeMap", + "cognito-identity:SetPrincipalTagAttributeMap" + ] + }, + "read": { + "permissions": [ + "cognito-identity:GetPrincipalTagAttributeMap" + ] + }, + "update": { + "permissions": [ + "cognito-identity:GetPrincipalTagAttributeMap", + "cognito-identity:SetPrincipalTagAttributeMap" + ] + }, + "delete": { + "permissions": [ + "cognito-identity:GetPrincipalTagAttributeMap", + "cognito-identity:SetPrincipalTagAttributeMap" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "IdentityPoolId": { + "$ref": "resource-schema.json#/properties/IdentityPoolId" + }, + "IdentityProviderName": { + "$ref": "resource-schema.json#/properties/IdentityProviderName" + } + }, + "required": [ + "IdentityPoolId", + "IdentityProviderName" + ] + }, + "permissions": [ + "cognito-identity:GetPrincipalTagAttributeMap" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/identitypoolroleattachment.json b/internal/aws/cfn/schemas/aws/cognito/identitypoolroleattachment.json new file mode 100644 index 00000000..6eea76c5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/identitypoolroleattachment.json @@ -0,0 +1,159 @@ +{ + "typeName": "AWS::Cognito::IdentityPoolRoleAttachment", + "description": "Resource Type definition for AWS::Cognito::IdentityPoolRoleAttachment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "definitions": { + "MappingRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Claim": { + "type": "string" + }, + "MatchType": { + "type": "string" + }, + "RoleARN": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Claim", + "MatchType", + "RoleARN", + "Value" + ] + }, + "RulesConfigurationType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rules": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MappingRule" + } + } + }, + "required": [ + "Rules" + ] + }, + "RoleMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "AmbiguousRoleResolution": { + "type": "string" + }, + "RulesConfiguration": { + "$ref": "#/definitions/RulesConfigurationType" + }, + "IdentityProvider": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "properties": { + "IdentityPoolId": { + "type": "string" + }, + "Roles": { + "patternProperties": { + "^.+$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Id": { + "type": "string" + }, + "RoleMappings": { + "patternProperties": { + "^.+$": { + "$ref": "#/definitions/RoleMapping" + } + }, + "additionalProperties": false + } + }, + "required": [ + "IdentityPoolId" + ], + "createOnlyProperties": [ + "/properties/IdentityPoolId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/IdentityPoolId" + ] + ], + "handlers": { + "create": { + "permissions": [ + "cognito-identity:GetIdentityPoolRoles", + "cognito-identity:SetIdentityPoolRoles", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "cognito-identity:GetIdentityPoolRoles" + ] + }, + "update": { + "permissions": [ + "cognito-identity:GetIdentityPoolRoles", + "cognito-identity:SetIdentityPoolRoles", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "cognito-identity:GetIdentityPoolRoles", + "cognito-identity:SetIdentityPoolRoles" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "IdentityPoolId": { + "$ref": "resource-schema.json#/properties/IdentityPoolId" + } + }, + "required": [ + "IdentityPoolId" + ] + }, + "permissions": [ + "cognito-identity:GetIdentityPoolRoles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpool.json b/internal/aws/cfn/schemas/aws/cognito/userpool.json new file mode 100644 index 00000000..a6e326c8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpool.json @@ -0,0 +1,516 @@ +{ + "typeName": "AWS::Cognito::UserPool", + "description": "Resource Type definition for AWS::Cognito::UserPool", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/UserPoolTags" + }, + "definitions": { + "PasswordPolicy": { + "type": "object", + "properties": { + "MinimumLength": { + "type": "integer" + }, + "RequireLowercase": { + "type": "boolean" + }, + "RequireNumbers": { + "type": "boolean" + }, + "RequireSymbols": { + "type": "boolean" + }, + "RequireUppercase": { + "type": "boolean" + }, + "TemporaryPasswordValidityDays": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "Policies": { + "type": "object", + "properties": { + "PasswordPolicy": { + "$ref": "#/definitions/PasswordPolicy" + } + }, + "additionalProperties": false + }, + "InviteMessageTemplate": { + "type": "object", + "properties": { + "EmailMessage": { + "type": "string" + }, + "EmailSubject": { + "type": "string" + }, + "SMSMessage": { + "type": "string" + } + }, + "additionalProperties": false + }, + "RecoveryOption": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Priority": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "AccountRecoverySetting": { + "type": "object", + "properties": { + "RecoveryMechanisms": { + "type": "array", + "items": { + "$ref": "#/definitions/RecoveryOption" + } + } + }, + "additionalProperties": false + }, + "AdminCreateUserConfig": { + "type": "object", + "properties": { + "AllowAdminCreateUserOnly": { + "type": "boolean" + }, + "InviteMessageTemplate": { + "$ref": "#/definitions/InviteMessageTemplate" + }, + "UnusedAccountValidityDays": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "DeviceConfiguration": { + "type": "object", + "properties": { + "ChallengeRequiredOnNewDevice": { + "type": "boolean" + }, + "DeviceOnlyRememberedOnUserPrompt": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "EmailConfiguration": { + "type": "object", + "properties": { + "ReplyToEmailAddress": { + "type": "string" + }, + "SourceArn": { + "type": "string" + }, + "From": { + "type": "string" + }, + "ConfigurationSet": { + "type": "string" + }, + "EmailSendingAccount": { + "type": "string" + } + }, + "additionalProperties": false + }, + "CustomEmailSender": { + "type": "object", + "properties": { + "LambdaVersion": { + "type": "string" + }, + "LambdaArn": { + "type": "string" + } + }, + "additionalProperties": false + }, + "CustomSMSSender": { + "type": "object", + "properties": { + "LambdaVersion": { + "type": "string" + }, + "LambdaArn": { + "type": "string" + } + }, + "additionalProperties": false + }, + "PreTokenGenerationConfig": { + "type": "object", + "properties": { + "LambdaVersion": { + "type": "string" + }, + "LambdaArn": { + "type": "string" + } + }, + "additionalProperties": false + }, + "LambdaConfig": { + "type": "object", + "properties": { + "CreateAuthChallenge": { + "type": "string" + }, + "CustomMessage": { + "type": "string" + }, + "DefineAuthChallenge": { + "type": "string" + }, + "PostAuthentication": { + "type": "string" + }, + "PostConfirmation": { + "type": "string" + }, + "PreAuthentication": { + "type": "string" + }, + "PreSignUp": { + "type": "string" + }, + "VerifyAuthChallengeResponse": { + "type": "string" + }, + "UserMigration": { + "type": "string" + }, + "PreTokenGeneration": { + "type": "string" + }, + "CustomEmailSender": { + "$ref": "#/definitions/CustomEmailSender" + }, + "CustomSMSSender": { + "$ref": "#/definitions/CustomSMSSender" + }, + "KMSKeyID": { + "type": "string" + }, + "PreTokenGenerationConfig": { + "$ref": "#/definitions/PreTokenGenerationConfig" + } + }, + "additionalProperties": false + }, + "SmsConfiguration": { + "type": "object", + "properties": { + "ExternalId": { + "type": "string" + }, + "SnsCallerArn": { + "type": "string" + }, + "SnsRegion": { + "type": "string" + } + }, + "additionalProperties": false + }, + "StringAttributeConstraints": { + "type": "object", + "properties": { + "MaxLength": { + "type": "string" + }, + "MinLength": { + "type": "string" + } + }, + "additionalProperties": false + }, + "NumberAttributeConstraints": { + "type": "object", + "properties": { + "MaxValue": { + "type": "string" + }, + "MinValue": { + "type": "string" + } + }, + "additionalProperties": false + }, + "SchemaAttribute": { + "type": "object", + "properties": { + "AttributeDataType": { + "type": "string" + }, + "DeveloperOnlyAttribute": { + "type": "boolean" + }, + "Mutable": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "NumberAttributeConstraints": { + "$ref": "#/definitions/NumberAttributeConstraints" + }, + "StringAttributeConstraints": { + "$ref": "#/definitions/StringAttributeConstraints" + }, + "Required": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "UsernameConfiguration": { + "type": "object", + "properties": { + "CaseSensitive": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "UserAttributeUpdateSettings": { + "type": "object", + "properties": { + "AttributesRequireVerificationBeforeUpdate": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "AttributesRequireVerificationBeforeUpdate" + ], + "additionalProperties": false + }, + "VerificationMessageTemplate": { + "type": "object", + "properties": { + "DefaultEmailOption": { + "type": "string" + }, + "EmailMessage": { + "type": "string" + }, + "EmailMessageByLink": { + "type": "string" + }, + "EmailSubject": { + "type": "string" + }, + "EmailSubjectByLink": { + "type": "string" + }, + "SmsMessage": { + "type": "string" + } + }, + "additionalProperties": false + }, + "UserPoolAddOns": { + "type": "object", + "properties": { + "AdvancedSecurityMode": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "UserPoolName": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Policies": { + "$ref": "#/definitions/Policies" + }, + "AccountRecoverySetting": { + "$ref": "#/definitions/AccountRecoverySetting" + }, + "AdminCreateUserConfig": { + "$ref": "#/definitions/AdminCreateUserConfig" + }, + "AliasAttributes": { + "type": "array", + "items": { + "type": "string" + } + }, + "UsernameAttributes": { + "type": "array", + "items": { + "type": "string" + } + }, + "AutoVerifiedAttributes": { + "type": "array", + "items": { + "type": "string" + } + }, + "DeviceConfiguration": { + "$ref": "#/definitions/DeviceConfiguration" + }, + "EmailConfiguration": { + "$ref": "#/definitions/EmailConfiguration" + }, + "EmailVerificationMessage": { + "type": "string", + "minLength": 6, + "maxLength": 20000 + }, + "EmailVerificationSubject": { + "type": "string", + "minLength": 1, + "maxLength": 140 + }, + "DeletionProtection": { + "type": "string" + }, + "LambdaConfig": { + "$ref": "#/definitions/LambdaConfig" + }, + "MfaConfiguration": { + "type": "string" + }, + "EnabledMfas": { + "type": "array", + "items": { + "type": "string" + } + }, + "SmsAuthenticationMessage": { + "type": "string", + "minLength": 6, + "maxLength": 140 + }, + "SmsConfiguration": { + "$ref": "#/definitions/SmsConfiguration" + }, + "SmsVerificationMessage": { + "type": "string", + "minLength": 6, + "maxLength": 140 + }, + "Schema": { + "type": "array", + "items": { + "$ref": "#/definitions/SchemaAttribute" + } + }, + "UsernameConfiguration": { + "$ref": "#/definitions/UsernameConfiguration" + }, + "UserAttributeUpdateSettings": { + "$ref": "#/definitions/UserAttributeUpdateSettings" + }, + "UserPoolTags": { + "type": "object", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "VerificationMessageTemplate": { + "$ref": "#/definitions/VerificationMessageTemplate" + }, + "UserPoolAddOns": { + "$ref": "#/definitions/UserPoolAddOns" + }, + "ProviderName": { + "type": "string" + }, + "ProviderURL": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/UserPoolId" + ], + "readOnlyProperties": [ + "/properties/ProviderName", + "/properties/UserPoolId", + "/properties/ProviderURL", + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/EnabledMfas" + ], + "propertyTransform": { + "/properties/Schema/*/Name": "'custom:' & '' & Name" + }, + "handlers": { + "create": { + "permissions": [ + "cognito-idp:CreateUserPool", + "iam:PassRole", + "cognito-idp:SetUserPoolMfaConfig", + "cognito-idp:DescribeUserPool", + "kms:CreateGrant", + "iam:CreateServiceLinkedRole" + ], + "timeoutInMinutes": 2 + }, + "read": { + "permissions": [ + "cognito-idp:DescribeUserPool" + ] + }, + "update": { + "permissions": [ + "cognito-idp:UpdateUserPool", + "cognito-idp:ListTagsForResource", + "cognito-idp:UntagResource", + "cognito-idp:TagResource", + "cognito-idp:SetUserPoolMfaConfig", + "cognito-idp:AddCustomAttributes", + "cognito-idp:DescribeUserPool", + "iam:PassRole" + ], + "timeoutInMinutes": 2 + }, + "delete": { + "permissions": [ + "cognito-idp:DeleteUserPool" + ], + "timeoutInMinutes": 2 + }, + "list": { + "permissions": [ + "cognito-idp:ListUserPools" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpoolclient.json b/internal/aws/cfn/schemas/aws/cognito/userpoolclient.json new file mode 100644 index 00000000..1a45d9ac --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpoolclient.json @@ -0,0 +1,224 @@ +{ + "typeName": "AWS::Cognito::UserPoolClient", + "description": "Resource Type definition for AWS::Cognito::UserPoolClient", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AnalyticsConfiguration": { + "type": "object", + "properties": { + "ApplicationArn": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "ExternalId": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "UserDataShared": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "TokenValidityUnits": { + "type": "object", + "properties": { + "AccessToken": { + "type": "string" + }, + "IdToken": { + "type": "string" + }, + "RefreshToken": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "ClientName": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "ExplicitAuthFlows": { + "type": "array", + "items": { + "type": "string" + } + }, + "GenerateSecret": { + "type": "boolean" + }, + "ReadAttributes": { + "type": "array", + "items": { + "type": "string" + } + }, + "AuthSessionValidity": { + "type": "integer", + "minimum": 3, + "maximum": 15 + }, + "RefreshTokenValidity": { + "type": "integer", + "minimum": 1, + "maximum": 315360000 + }, + "AccessTokenValidity": { + "type": "integer", + "minimum": 1, + "maximum": 86400 + }, + "IdTokenValidity": { + "type": "integer", + "minimum": 1, + "maximum": 86400 + }, + "TokenValidityUnits": { + "$ref": "#/definitions/TokenValidityUnits" + }, + "UserPoolId": { + "type": "string" + }, + "WriteAttributes": { + "type": "array", + "items": { + "type": "string" + } + }, + "AllowedOAuthFlows": { + "type": "array", + "items": { + "type": "string" + } + }, + "AllowedOAuthFlowsUserPoolClient": { + "type": "boolean" + }, + "AllowedOAuthScopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "CallbackURLs": { + "type": "array", + "items": { + "type": "string" + } + }, + "DefaultRedirectURI": { + "type": "string" + }, + "LogoutURLs": { + "type": "array", + "items": { + "type": "string" + } + }, + "SupportedIdentityProviders": { + "type": "array", + "items": { + "type": "string" + } + }, + "AnalyticsConfiguration": { + "$ref": "#/definitions/AnalyticsConfiguration" + }, + "PreventUserExistenceErrors": { + "type": "string" + }, + "EnableTokenRevocation": { + "type": "boolean" + }, + "EnablePropagateAdditionalUserContextData": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "ClientSecret": { + "type": "string" + }, + "ClientId": { + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "UserPoolId" + ], + "readOnlyProperties": [ + "/properties/ClientSecret", + "/properties/Name", + "/properties/ClientId" + ], + "primaryIdentifier": [ + "/properties/UserPoolId", + "/properties/ClientId" + ], + "createOnlyProperties": [ + "/properties/GenerateSecret", + "/properties/UserPoolId" + ], + "handlers": { + "create": { + "permissions": [ + "cognito-idp:CreateUserPoolClient", + "iam:PassRole", + "iam:PutRolePolicy", + "iam:CreateServiceLinkedRole" + ], + "timeoutInMinutes": 2 + }, + "read": { + "permissions": [ + "cognito-idp:DescribeUserPoolClient" + ] + }, + "update": { + "permissions": [ + "cognito-idp:UpdateUserPoolClient", + "iam:PassRole", + "iam:PutRolePolicy" + ], + "timeoutInMinutes": 2 + }, + "delete": { + "permissions": [ + "cognito-idp:DeleteUserPoolClient", + "iam:PutRolePolicy", + "iam:DeleteRolePolicy" + ], + "timeoutInMinutes": 2 + }, + "list": { + "handlerSchema": { + "properties": { + "UserPoolId": { + "$ref": "resource-schema.json#/properties/UserPoolId" + } + }, + "required": [ + "UserPoolId" + ] + }, + "permissions": [ + "cognito-idp:ListUserPoolClients" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpooldomain.json b/internal/aws/cfn/schemas/aws/cognito/userpooldomain.json new file mode 100644 index 00000000..7f87e454 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpooldomain.json @@ -0,0 +1,48 @@ +{ + "typeName": "AWS::Cognito::UserPoolDomain", + "description": "Resource Type definition for AWS::Cognito::UserPoolDomain", + "additionalProperties": false, + "properties": { + "CloudFrontDistribution": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Domain": { + "type": "string" + }, + "CustomDomainConfig": { + "$ref": "#/definitions/CustomDomainConfigType" + } + }, + "definitions": { + "CustomDomainConfigType": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateArn": { + "type": "string" + } + } + } + }, + "required": [ + "UserPoolId", + "Domain" + ], + "createOnlyProperties": [ + "/properties/UserPoolId", + "/properties/Domain" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/CloudFrontDistribution" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpoolgroup.json b/internal/aws/cfn/schemas/aws/cognito/userpoolgroup.json new file mode 100644 index 00000000..a1ad92a1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpoolgroup.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::Cognito::UserPoolGroup", + "description": "Resource Type definition for AWS::Cognito::UserPoolGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Description": { + "type": "string", + "maxLength": 2048 + }, + "GroupName": { + "type": "string" + }, + "Precedence": { + "type": "integer", + "minimum": 0 + }, + "RoleArn": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "UserPoolId" + ], + "createOnlyProperties": [ + "/properties/UserPoolId", + "/properties/GroupName" + ], + "primaryIdentifier": [ + "/properties/UserPoolId", + "/properties/GroupName" + ], + "handlers": { + "create": { + "permissions": [ + "cognito-idp:CreateGroup", + "iam:PassRole", + "iam:PutRolePolicy", + "cognito-idp:GetGroup" + ], + "timeoutInMinutes": 5 + }, + "read": { + "permissions": [ + "cognito-idp:GetGroup" + ] + }, + "update": { + "permissions": [ + "cognito-idp:UpdateGroup", + "iam:PassRole", + "iam:PutRolePolicy" + ], + "timeoutInMinutes": 5 + }, + "delete": { + "permissions": [ + "cognito-idp:DeleteGroup", + "cognito-idp:GetGroup", + "iam:PutRolePolicy" + ], + "timeoutInMinutes": 5 + }, + "list": { + "handlerSchema": { + "properties": { + "UserPoolId": { + "$ref": "resource-schema.json#/properties/UserPoolId" + } + }, + "required": [ + "UserPoolId" + ] + }, + "permissions": [ + "cognito-idp:ListGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpoolidentityprovider.json b/internal/aws/cfn/schemas/aws/cognito/userpoolidentityprovider.json new file mode 100644 index 00000000..3cf24ea2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpoolidentityprovider.json @@ -0,0 +1,48 @@ +{ + "typeName": "AWS::Cognito::UserPoolIdentityProvider", + "description": "Resource Type definition for AWS::Cognito::UserPoolIdentityProvider", + "additionalProperties": false, + "properties": { + "ProviderName": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "AttributeMapping": { + "type": "object" + }, + "ProviderDetails": { + "type": "object" + }, + "ProviderType": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "IdpIdentifiers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "ProviderName", + "UserPoolId", + "ProviderType" + ], + "createOnlyProperties": [ + "/properties/UserPoolId", + "/properties/ProviderName", + "/properties/ProviderType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpoolresourceserver.json b/internal/aws/cfn/schemas/aws/cognito/userpoolresourceserver.json new file mode 100644 index 00000000..92587b0a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpoolresourceserver.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::Cognito::UserPoolResourceServer", + "description": "Resource Type definition for AWS::Cognito::UserPoolResourceServer", + "additionalProperties": false, + "properties": { + "UserPoolId": { + "type": "string" + }, + "Identifier": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Scopes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ResourceServerScopeType" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "ResourceServerScopeType": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScopeName": { + "type": "string" + }, + "ScopeDescription": { + "type": "string" + } + }, + "required": [ + "ScopeName", + "ScopeDescription" + ] + } + }, + "required": [ + "UserPoolId", + "Identifier", + "Name" + ], + "createOnlyProperties": [ + "/properties/Identifier", + "/properties/UserPoolId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpoolriskconfigurationattachment.json b/internal/aws/cfn/schemas/aws/cognito/userpoolriskconfigurationattachment.json new file mode 100644 index 00000000..52c05c4e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpoolriskconfigurationattachment.json @@ -0,0 +1,215 @@ +{ + "typeName": "AWS::Cognito::UserPoolRiskConfigurationAttachment", + "description": "Resource Type definition for AWS::Cognito::UserPoolRiskConfigurationAttachment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "RiskExceptionConfigurationType": { + "type": "object", + "properties": { + "BlockedIPRangeList": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "SkippedIPRangeList": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "CompromisedCredentialsActionsType": { + "type": "object", + "properties": { + "EventAction": { + "type": "string" + } + }, + "required": [ + "EventAction" + ], + "additionalProperties": false + }, + "CompromisedCredentialsRiskConfigurationType": { + "type": "object", + "properties": { + "Actions": { + "$ref": "#/definitions/CompromisedCredentialsActionsType" + }, + "EventFilter": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "Actions" + ], + "additionalProperties": false + }, + "AccountTakeoverActionType": { + "type": "object", + "properties": { + "EventAction": { + "type": "string" + }, + "Notify": { + "type": "boolean" + } + }, + "required": [ + "EventAction", + "Notify" + ], + "additionalProperties": false + }, + "AccountTakeoverActionsType": { + "type": "object", + "properties": { + "HighAction": { + "$ref": "#/definitions/AccountTakeoverActionType" + }, + "LowAction": { + "$ref": "#/definitions/AccountTakeoverActionType" + }, + "MediumAction": { + "$ref": "#/definitions/AccountTakeoverActionType" + } + }, + "additionalProperties": false + }, + "NotifyEmailType": { + "type": "object", + "properties": { + "HtmlBody": { + "type": "string" + }, + "Subject": { + "type": "string" + }, + "TextBody": { + "type": "string" + } + }, + "required": [ + "Subject" + ], + "additionalProperties": false + }, + "NotifyConfigurationType": { + "type": "object", + "properties": { + "BlockEmail": { + "$ref": "#/definitions/NotifyEmailType" + }, + "MfaEmail": { + "$ref": "#/definitions/NotifyEmailType" + }, + "NoActionEmail": { + "$ref": "#/definitions/NotifyEmailType" + }, + "From": { + "type": "string" + }, + "ReplyTo": { + "type": "string" + }, + "SourceArn": { + "type": "string" + } + }, + "required": [ + "SourceArn" + ], + "additionalProperties": false + }, + "AccountTakeoverRiskConfigurationType": { + "type": "object", + "properties": { + "Actions": { + "$ref": "#/definitions/AccountTakeoverActionsType" + }, + "NotifyConfiguration": { + "$ref": "#/definitions/NotifyConfigurationType" + } + }, + "required": [ + "Actions" + ], + "additionalProperties": false + } + }, + "properties": { + "UserPoolId": { + "type": "string" + }, + "ClientId": { + "type": "string" + }, + "RiskExceptionConfiguration": { + "$ref": "#/definitions/RiskExceptionConfigurationType" + }, + "CompromisedCredentialsRiskConfiguration": { + "$ref": "#/definitions/CompromisedCredentialsRiskConfigurationType" + }, + "AccountTakeoverRiskConfiguration": { + "$ref": "#/definitions/AccountTakeoverRiskConfigurationType" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "UserPoolId", + "ClientId" + ], + "createOnlyProperties": [ + "/properties/UserPoolId", + "/properties/ClientId" + ], + "primaryIdentifier": [ + "/properties/UserPoolId", + "/properties/ClientId" + ], + "handlers": { + "create": { + "permissions": [ + "cognito-idp:SetRiskConfiguration", + "cognito-idp:DescribeRiskConfiguration", + "iam:PassRole" + ], + "timeoutInMinutes": 2 + }, + "read": { + "permissions": [ + "cognito-idp:DescribeRiskConfiguration" + ] + }, + "update": { + "permissions": [ + "cognito-idp:SetRiskConfiguration", + "cognito-idp:DescribeRiskConfiguration", + "iam:PassRole" + ], + "timeoutInMinutes": 2 + }, + "delete": { + "permissions": [ + "cognito-idp:SetRiskConfiguration", + "cognito-idp:DescribeRiskConfiguration" + ], + "timeoutInMinutes": 2 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpooluicustomizationattachment.json b/internal/aws/cfn/schemas/aws/cognito/userpooluicustomizationattachment.json new file mode 100644 index 00000000..344db319 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpooluicustomizationattachment.json @@ -0,0 +1,33 @@ +{ + "typeName": "AWS::Cognito::UserPoolUICustomizationAttachment", + "description": "Resource Type definition for AWS::Cognito::UserPoolUICustomizationAttachment", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "CSS": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "ClientId": { + "type": "string" + } + }, + "required": [ + "ClientId", + "UserPoolId" + ], + "createOnlyProperties": [ + "/properties/UserPoolId", + "/properties/ClientId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpooluser.json b/internal/aws/cfn/schemas/aws/cognito/userpooluser.json new file mode 100644 index 00000000..7e3cf5a9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpooluser.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::Cognito::UserPoolUser", + "description": "Resource Type definition for AWS::Cognito::UserPoolUser", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "definitions": { + "AttributeType": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "DesiredDeliveryMediums": { + "type": "array", + "items": { + "type": "string" + } + }, + "ForceAliasCreation": { + "type": "boolean" + }, + "UserAttributes": { + "type": "array", + "items": { + "$ref": "#/definitions/AttributeType" + } + }, + "MessageAction": { + "type": "string" + }, + "Username": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "ValidationData": { + "type": "array", + "items": { + "$ref": "#/definitions/AttributeType" + } + }, + "ClientMetadata": { + "type": "object", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "UserPoolId" + ], + "primaryIdentifier": [ + "/properties/UserPoolId", + "/properties/Username" + ], + "createOnlyProperties": [ + "/properties/DesiredDeliveryMediums", + "/properties/ForceAliasCreation", + "/properties/UserAttributes", + "/properties/Username", + "/properties/UserPoolId", + "/properties/ValidationData", + "/properties/ClientMetadata", + "/properties/MessageAction" + ], + "writeOnlyProperties": [ + "/properties/DesiredDeliveryMediums", + "/properties/ForceAliasCreation", + "/properties/ValidationData", + "/properties/ClientMetadata", + "/properties/MessageAction" + ], + "handlers": { + "create": { + "permissions": [ + "cognito-idp:AdminCreateUser", + "cognito-idp:AdminGetUser", + "iam:PassRole" + ], + "timeoutInMinutes": 2 + }, + "read": { + "permissions": [ + "cognito-idp:AdminGetUser" + ] + }, + "delete": { + "permissions": [ + "cognito-idp:AdminDeleteUser" + ], + "timeoutInMinutes": 2 + }, + "list": { + "handlerSchema": { + "properties": { + "UserPoolId": { + "$ref": "resource-schema.json#/properties/UserPoolId" + } + }, + "required": [ + "UserPoolId" + ] + }, + "permissions": [ + "cognito-idp:ListUsers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/cognito/userpoolusertogroupattachment.json b/internal/aws/cfn/schemas/aws/cognito/userpoolusertogroupattachment.json new file mode 100644 index 00000000..bcc4405f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cognito/userpoolusertogroupattachment.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::Cognito::UserPoolUserToGroupAttachment", + "description": "Resource Type definition for AWS::Cognito::UserPoolUserToGroupAttachment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "UserPoolId": { + "type": "string" + }, + "Username": { + "type": "string" + }, + "GroupName": { + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "UserPoolId", + "Username", + "GroupName" + ], + "createOnlyProperties": [ + "/properties/UserPoolId", + "/properties/GroupName", + "/properties/Username" + ], + "primaryIdentifier": [ + "/properties/UserPoolId", + "/properties/GroupName", + "/properties/Username" + ], + "handlers": { + "create": { + "permissions": [ + "cognito-idp:AdminAddUserToGroup", + "cognito-idp:AdminListGroupsForUser" + ], + "timeoutInMinutes": 2 + }, + "delete": { + "permissions": [ + "cognito-idp:AdminRemoveUserFromGroup", + "cognito-idp:AdminListGroupsForUser" + ], + "timeoutInMinutes": 2 + }, + "read": { + "permissions": [ + "cognito-idp:AdminListGroupsForUser" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/comprehend/documentclassifier.json b/internal/aws/cfn/schemas/aws/comprehend/documentclassifier.json new file mode 100644 index 00000000..78463c32 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/comprehend/documentclassifier.json @@ -0,0 +1,365 @@ +{ + "typeName": "AWS::Comprehend::DocumentClassifier", + "description": "Document Classifier enables training document classifier models.", + "additionalProperties": false, + "properties": { + "DataAccessRoleArn": { + "type": "string", + "pattern": "arn:aws(-[^:]+)?:iam::[0-9]{12}:role/.+", + "minLength": 20, + "maxLength": 2048 + }, + "InputDataConfig": { + "$ref": "#/definitions/DocumentClassifierInputDataConfig" + }, + "OutputDataConfig": { + "$ref": "#/definitions/DocumentClassifierOutputDataConfig" + }, + "LanguageCode": { + "type": "string", + "enum": [ + "en", + "es", + "fr", + "it", + "de", + "pt" + ] + }, + "ModelKmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + }, + "ModelPolicy": { + "type": "string", + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+", + "minLength": 1, + "maxLength": 20000 + }, + "DocumentClassifierName": { + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "Mode": { + "type": "string", + "enum": [ + "MULTI_CLASS", + "MULTI_LABEL" + ] + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true + }, + "VersionName": { + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "VolumeKmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + }, + "Arn": { + "type": "string", + "pattern": "arn:aws(-[^:]+)?:comprehend:[a-zA-Z0-9-]*:[0-9]{12}:document-classifier/[a-zA-Z0-9](-*[a-zA-Z0-9])*(/version/[a-zA-Z0-9](-*[a-zA-Z0-9])*)?", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "DocumentClassifierName", + "DataAccessRoleArn", + "InputDataConfig", + "LanguageCode" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/DataAccessRoleArn", + "/properties/InputDataConfig", + "/properties/OutputDataConfig", + "/properties/LanguageCode", + "/properties/ModelKmsKeyId", + "/properties/DocumentClassifierName", + "/properties/VersionName", + "/properties/Mode", + "/properties/VolumeKmsKeyId", + "/properties/VpcConfig" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "DocumentClassifierInputDataConfig": { + "type": "object", + "properties": { + "AugmentedManifests": { + "type": "array", + "items": { + "$ref": "#/definitions/AugmentedManifestsListItem" + }, + "insertionOrder": false, + "uniqueItems": true + }, + "DataFormat": { + "type": "string", + "enum": [ + "COMPREHEND_CSV", + "AUGMENTED_MANIFEST" + ] + }, + "LabelDelimiter": { + "type": "string", + "pattern": "^[ ~!@#$%^*\\-_+=|\\\\:;\\t>?/]$", + "minLength": 1, + "maxLength": 1 + }, + "DocumentType": { + "type": "string", + "enum": [ + "PLAIN_TEXT_DOCUMENT", + "SEMI_STRUCTURED_DOCUMENT" + ] + }, + "Documents": { + "$ref": "#/definitions/DocumentClassifierDocuments" + }, + "DocumentReaderConfig": { + "$ref": "#/definitions/DocumentReaderConfig" + }, + "S3Uri": { + "$ref": "#/definitions/S3Uri" + }, + "TestS3Uri": { + "$ref": "#/definitions/S3Uri" + } + }, + "required": [], + "additionalProperties": false + }, + "AugmentedManifestsListItem": { + "type": "object", + "properties": { + "AttributeNames": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*" + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 63 + }, + "S3Uri": { + "$ref": "#/definitions/S3Uri" + }, + "Split": { + "type": "string", + "enum": [ + "TRAIN", + "TEST" + ] + } + }, + "required": [ + "AttributeNames", + "S3Uri" + ], + "additionalProperties": false + }, + "DocumentClassifierDocuments": { + "type": "object", + "properties": { + "S3Uri": { + "$ref": "#/definitions/S3Uri" + }, + "TestS3Uri": { + "$ref": "#/definitions/S3Uri" + } + }, + "required": [ + "S3Uri" + ], + "additionalProperties": false + }, + "DocumentReaderConfig": { + "type": "object", + "properties": { + "DocumentReadAction": { + "type": "string", + "enum": [ + "TEXTRACT_DETECT_DOCUMENT_TEXT", + "TEXTRACT_ANALYZE_DOCUMENT" + ] + }, + "DocumentReadMode": { + "type": "string", + "enum": [ + "SERVICE_DEFAULT", + "FORCE_DOCUMENT_READ_ACTION" + ] + }, + "FeatureTypes": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "TABLES", + "FORMS" + ] + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 2 + } + }, + "required": [ + "DocumentReadAction" + ], + "additionalProperties": false + }, + "DocumentClassifierOutputDataConfig": { + "type": "object", + "properties": { + "KmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + }, + "S3Uri": { + "$ref": "#/definitions/S3Uri" + } + }, + "required": [], + "additionalProperties": false + }, + "VpcConfig": { + "type": "object", + "properties": { + "SecurityGroupIds": { + "type": "array", + "items": { + "type": "string", + "pattern": "[-0-9a-zA-Z]+", + "minLength": 1, + "maxLength": 32 + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 5 + }, + "Subnets": { + "type": "array", + "items": { + "type": "string", + "pattern": "[-0-9a-zA-Z]+", + "minLength": 1, + "maxLength": 32 + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 16 + } + }, + "required": [ + "SecurityGroupIds", + "Subnets" + ], + "additionalProperties": false + }, + "S3Uri": { + "type": "string", + "pattern": "s3://[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9](/.*)?", + "maxLength": 1024 + }, + "KmsKeyId": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "comprehend:CreateDocumentClassifier", + "comprehend:DescribeDocumentClassifier", + "comprehend:DescribeResourcePolicy", + "comprehend:ListTagsForResource", + "textract:DetectDocumentText" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "comprehend:DescribeDocumentClassifier", + "comprehend:DescribeResourcePolicy", + "comprehend:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "comprehend:PutResourcePolicy", + "comprehend:DeleteResourcePolicy", + "comprehend:DescribeResourcePolicy", + "comprehend:DescribeDocumentClassifier", + "comprehend:ListTagsForResource", + "comprehend:TagResource", + "comprehend:UntagResource" + ], + "timeoutInMinutes": 10 + }, + "delete": { + "permissions": [ + "comprehend:DescribeDocumentClassifier", + "comprehend:DeleteDocumentClassifier" + ], + "timeoutInMinutes": 120 + }, + "list": { + "permissions": [ + "comprehend:ListDocumentClassifiers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/comprehend/flywheel.json b/internal/aws/cfn/schemas/aws/comprehend/flywheel.json new file mode 100644 index 00000000..8801684d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/comprehend/flywheel.json @@ -0,0 +1,285 @@ +{ + "typeName": "AWS::Comprehend::Flywheel", + "description": "The AWS::Comprehend::Flywheel resource creates an Amazon Comprehend Flywheel that enables customer to train their model.", + "additionalProperties": false, + "properties": { + "ActiveModelArn": { + "type": "string", + "pattern": "arn:aws(-[^:]+)?:comprehend:[a-zA-Z0-9-]*:[0-9]{12}:(document-classifier|entity-recognizer)/[a-zA-Z0-9](-*[a-zA-Z0-9])*(/version/[a-zA-Z0-9](-*[a-zA-Z0-9])*)?", + "maxLength": 256 + }, + "DataAccessRoleArn": { + "type": "string", + "pattern": "arn:aws(-[^:]+)?:iam::[0-9]{12}:role/.+", + "minLength": 20, + "maxLength": 2048 + }, + "DataLakeS3Uri": { + "type": "string", + "pattern": "s3://[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9](/.*)?", + "maxLength": 512 + }, + "DataSecurityConfig": { + "$ref": "#/definitions/DataSecurityConfig" + }, + "FlywheelName": { + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "ModelType": { + "type": "string", + "enum": [ + "DOCUMENT_CLASSIFIER", + "ENTITY_RECOGNIZER" + ] + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true + }, + "TaskConfig": { + "$ref": "#/definitions/TaskConfig" + }, + "Arn": { + "type": "string", + "pattern": "arn:aws(-[^:]+)?:comprehend:[a-zA-Z0-9-]*:[0-9]{12}:flywheel/[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "FlywheelName", + "DataAccessRoleArn", + "DataLakeS3Uri" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/FlywheelName", + "/properties/ModelType", + "/properties/DataLakeS3Uri", + "/properties/TaskConfig" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "TaskConfig": { + "type": "object", + "properties": { + "LanguageCode": { + "type": "string", + "enum": [ + "en", + "es", + "fr", + "it", + "de", + "pt" + ] + }, + "DocumentClassificationConfig": { + "$ref": "#/definitions/DocumentClassificationConfig" + }, + "EntityRecognitionConfig": { + "$ref": "#/definitions/EntityRecognitionConfig" + } + }, + "required": [ + "LanguageCode" + ], + "additionalProperties": false + }, + "DataSecurityConfig": { + "type": "object", + "properties": { + "ModelKmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + }, + "VolumeKmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + }, + "DataLakeKmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + } + }, + "required": [], + "additionalProperties": false + }, + "VpcConfig": { + "type": "object", + "properties": { + "SecurityGroupIds": { + "type": "array", + "items": { + "type": "string", + "pattern": "[-0-9a-zA-Z]+", + "minLength": 1, + "maxLength": 32 + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 5 + }, + "Subnets": { + "type": "array", + "items": { + "type": "string", + "pattern": "[-0-9a-zA-Z]+", + "minLength": 1, + "maxLength": 32 + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 16 + } + }, + "required": [ + "SecurityGroupIds", + "Subnets" + ], + "additionalProperties": false + }, + "KmsKeyId": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "EntityTypesListItem": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "pattern": "^(?![^\\n\\r\\t,]*\\\\n|\\\\r|\\\\t)[^\\n\\r\\t,]+$", + "minLength": 1, + "maxLength": 64 + } + }, + "additionalProperties": false, + "required": [ + "Type" + ] + }, + "EntityRecognitionConfig": { + "type": "object", + "properties": { + "EntityTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/EntityTypesListItem" + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 25 + } + }, + "additionalProperties": false + }, + "DocumentClassificationConfig": { + "type": "object", + "properties": { + "Mode": { + "type": "string", + "enum": [ + "MULTI_CLASS", + "MULTI_LABEL" + ] + }, + "Labels": { + "type": "array", + "items": { + "type": "string", + "maxLength": 5000 + }, + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 1000 + } + }, + "additionalProperties": false, + "required": [ + "Mode" + ] + } + }, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "comprehend:CreateFlywheel", + "comprehend:DescribeFlywheel", + "comprehend:ListTagsForResource" + ], + "timeoutInMinutes": 240 + }, + "read": { + "permissions": [ + "comprehend:DescribeFlywheel", + "comprehend:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "comprehend:DescribeFlywheel", + "comprehend:UpdateFlywheel", + "comprehend:ListTagsForResource", + "comprehend:TagResource", + "comprehend:UntagResource" + ], + "timeoutInMinutes": 10 + }, + "delete": { + "permissions": [ + "comprehend:DeleteFlywheel", + "comprehend:DescribeFlywheel" + ], + "timeoutInMinutes": 120 + }, + "list": { + "permissions": [ + "comprehend:ListFlywheels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/config/aggregationauthorization.json b/internal/aws/cfn/schemas/aws/config/aggregationauthorization.json new file mode 100644 index 00000000..99e54159 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/aggregationauthorization.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::Config::AggregationAuthorization", + "description": "Resource Type definition for AWS::Config::AggregationAuthorization", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "additionalProperties": false, + "properties": { + "AuthorizedAccountId": { + "description": "The 12-digit account ID of the account authorized to aggregate data.", + "type": "string", + "pattern": "^\\d{12}$" + }, + "AuthorizedAwsRegion": { + "description": "The region authorized to collect aggregated data.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "AggregationAuthorizationArn": { + "description": "The ARN of the AggregationAuthorization.", + "type": "string" + }, + "Tags": { + "description": "The tags for the AggregationAuthorization.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "AuthorizedAccountId", + "AuthorizedAwsRegion" + ], + "readOnlyProperties": [ + "/properties/AggregationAuthorizationArn" + ], + "createOnlyProperties": [ + "/properties/AuthorizedAccountId", + "/properties/AuthorizedAwsRegion" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/AuthorizedAccountId", + "/properties/AuthorizedAwsRegion" + ], + "handlers": { + "create": { + "permissions": [ + "config:DescribeAggregationAuthorizations", + "config:PutAggregationAuthorization", + "config:TagResource" + ] + }, + "update": { + "permissions": [ + "config:DescribeAggregationAuthorizations", + "config:TagResource", + "config:UntagResource", + "config:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "config:DescribeAggregationAuthorizations", + "config:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "config:DescribeAggregationAuthorizations", + "config:DeleteAggregationAuthorization", + "config:UntagResource" + ] + }, + "list": { + "permissions": [ + "config:DescribeAggregationAuthorizations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/config/configrule.json b/internal/aws/cfn/schemas/aws/config/configrule.json new file mode 100644 index 00000000..acc23132 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/configrule.json @@ -0,0 +1,230 @@ +{ + "typeName": "AWS::Config::ConfigRule", + "description": "You must first create and start the CC configuration recorder in order to create CC managed rules with CFNlong. For more information, see [Managing the Configuration Recorder](https://docs.aws.amazon.com/config/latest/developerguide/stop-start-recorder.html).\n Adds or updates an CC rule to evaluate if your AWS resources comply with your desired configurations. For information on how many CC rules you can have per account, see [Service Limits](https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html) in the *Developer Guide*.\n There are two types of rules: *Managed Rules* and *Custom Rules*. You can use the ``ConfigRule`` resource to create both CC Managed Rules and CC Custom Rules.\n CC Managed Rules are predefined, customizable rules created by CC. For a list of managed rules, see [List of Managed Rules](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html). If you are adding an CC managed rule, you must specify the rule's identifier for the ``SourceIdentifier`` key.\n CC Custom Rules are rules that you create from scratch. There are two ways to create CC custom rules: with Lambda functions ([Developer Guide](https://docs.aws.amazon.com/config/latest/developerguide/gettingstarted-concepts.html#gettingstarted-concepts-function)) and with CFNGUARDshort ([Guard GitHub Repository](https://docs.aws.amazon.com/https://github.com/aws-cloudformation/cloudformation-guard)), a policy-as-code language. CC custom rules created with LAMlong are called *Custom Lambda Rules* and CC custom rules created with CFNGUARDshort are called *Custom Policy Rules*.\n If you are adding a new CC Custom LAM rule, you first need to create an LAMlong function that the rule invokes to evaluate your resources. When you use the ``ConfigRule`` resource to add a Custom LAM rule to CC, you must specify the Amazon Resource Name (ARN) that LAMlong assigns to the function. You specify the ARN in the ``SourceIdentifier`` key. This key is part of the ``Source`` object, which is part of the ``ConfigRule`` object. \n For any new CC rule that you add, specify the ``ConfigRuleName`` in the ``ConfigRule`` object. Do not specify the ``ConfigRuleArn`` or the ``ConfigRuleId``. These values are generated by CC for new rules.\n If you are updating a rule that you added previously, you can specify the rule by ``ConfigRuleName``, ``ConfigRuleId``, or ``ConfigRuleArn`` in the ``ConfigRule`` data type that you use in this request.\n For more information about developing and using CC rules, see [Evaluating Resources with Rules](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html) in the *Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "definitions": { + "Scope": { + "type": "object", + "description": "Defines which resources trigger an evaluation for an CC rule. The scope can include one or more resource types, a combination of a tag key and value, or a combination of one resource type and one resource ID. Specify a scope to constrain which resources trigger an evaluation for a rule. Otherwise, evaluations for the rule are triggered when any resource in your recording group changes in configuration.", + "additionalProperties": false, + "properties": { + "TagKey": { + "type": "string", + "description": "The tag key that is applied to only those AWS resources that you want to trigger an evaluation for the rule." + }, + "ComplianceResourceTypes": { + "type": "array", + "description": "The resource types of only those AWS resources that you want to trigger an evaluation for the rule. You can only specify one type if you also specify a resource ID for ``ComplianceResourceId``.", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "TagValue": { + "type": "string", + "description": "The tag value applied to only those AWS resources that you want to trigger an evaluation for the rule. If you specify a value for ``TagValue``, you must also specify a value for ``TagKey``." + }, + "ComplianceResourceId": { + "type": "string", + "description": "The ID of the only AWS resource that you want to trigger an evaluation for the rule. If you specify a resource ID, you must specify one resource type for ``ComplianceResourceTypes``." + } + } + }, + "CustomPolicyDetails": { + "type": "object", + "description": "Provides the CustomPolicyDetails, the rule owner (```` for managed rules, ``CUSTOM_POLICY`` for Custom Policy rules, and ``CUSTOM_LAMBDA`` for Custom Lambda rules), the rule identifier, and the events that cause the evaluation of your AWS resources.", + "additionalProperties": false, + "properties": { + "EnableDebugLogDelivery": { + "type": "boolean", + "description": "The boolean expression for enabling debug logging for your CC Custom Policy rule. The default value is ``false``." + }, + "PolicyText": { + "type": "string", + "description": "The policy definition containing the logic for your CC Custom Policy rule." + }, + "PolicyRuntime": { + "type": "string", + "description": "The runtime system for your CC Custom Policy rule. Guard is a policy-as-code language that allows you to write policies that are enforced by CC Custom Policy rules. For more information about Guard, see the [Guard GitHub Repository](https://docs.aws.amazon.com/https://github.com/aws-cloudformation/cloudformation-guard)." + } + } + }, + "SourceDetail": { + "type": "object", + "description": "Provides the source and the message types that trigger CC to evaluate your AWS resources against a rule. It also provides the frequency with which you want CC to run evaluations for the rule if the trigger type is periodic. You can specify the parameter values for ``SourceDetail`` only for custom rules.", + "additionalProperties": false, + "properties": { + "EventSource": { + "type": "string", + "description": "The source of the event, such as an AWS service, that triggers CC to evaluate your AWS resources." + }, + "MaximumExecutionFrequency": { + "type": "string", + "description": "The frequency at which you want CC to run evaluations for a custom rule with a periodic trigger. If you specify a value for ``MaximumExecutionFrequency``, then ``MessageType`` must use the ``ScheduledNotification`` value.\n By default, rules with a periodic trigger are evaluated every 24 hours. To change the frequency, specify a valid value for the ``MaximumExecutionFrequency`` parameter.\n Based on the valid value you choose, CC runs evaluations once for each valid value. For example, if you choose ``Three_Hours``, CC runs evaluations once every three hours. In this case, ``Three_Hours`` is the frequency of this rule." + }, + "MessageType": { + "type": "string", + "description": "The type of notification that triggers CC to run an evaluation for a rule. You can specify the following notification types:\n + ``ConfigurationItemChangeNotification`` - Triggers an evaluation when CC delivers a configuration item as a result of a resource change.\n + ``OversizedConfigurationItemChangeNotification`` - Triggers an evaluation when CC delivers an oversized configuration item. CC may generate this notification type when a resource changes and the notification exceeds the maximum size allowed by Amazon SNS.\n + ``ScheduledNotification`` - Triggers a periodic evaluation at the frequency specified for ``MaximumExecutionFrequency``.\n + ``ConfigurationSnapshotDeliveryCompleted`` - Triggers a periodic evaluation when CC delivers a configuration snapshot.\n \n If you want your custom rule to be triggered by configuration changes, specify two SourceDetail objects, one for ``ConfigurationItemChangeNotification`` and one for ``OversizedConfigurationItemChangeNotification``." + } + }, + "required": [ + "EventSource", + "MessageType" + ] + }, + "Source": { + "type": "object", + "description": "Provides the CustomPolicyDetails, the rule owner (```` for managed rules, ``CUSTOM_POLICY`` for Custom Policy rules, and ``CUSTOM_LAMBDA`` for Custom Lambda rules), the rule identifier, and the events that cause the evaluation of your AWS resources.", + "additionalProperties": false, + "properties": { + "CustomPolicyDetails": { + "description": "Provides the runtime system, policy definition, and whether debug logging is enabled. Required when owner is set to ``CUSTOM_POLICY``.", + "$ref": "#/definitions/CustomPolicyDetails" + }, + "SourceIdentifier": { + "type": "string", + "description": "For CC Managed rules, a predefined identifier from a list. For example, ``IAM_PASSWORD_POLICY`` is a managed rule. To reference a managed rule, see [List of Managed Rules](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html).\n For CC Custom Lambda rules, the identifier is the Amazon Resource Name (ARN) of the rule's LAMlong function, such as ``arn:aws:lambda:us-east-2:123456789012:function:custom_rule_name``.\n For CC Custom Policy rules, this field will be ignored." + }, + "Owner": { + "type": "string", + "description": "Indicates whether AWS or the customer owns and manages the CC rule.\n CC Managed Rules are predefined rules owned by AWS. For more information, see [Managed Rules](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html) in the *developer guide*.\n CC Custom Rules are rules that you can develop either with Guard (``CUSTOM_POLICY``) or LAMlong (``CUSTOM_LAMBDA``). For more information, see [Custom Rules](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html) in the *developer guide*." + }, + "SourceDetails": { + "type": "array", + "description": "Provides the source and the message types that cause CC to evaluate your AWS resources against a rule. It also provides the frequency with which you want CC to run evaluations for the rule if the trigger type is periodic.\n If the owner is set to ``CUSTOM_POLICY``, the only acceptable values for the CC rule trigger message type are ``ConfigurationItemChangeNotification`` and ``OversizedConfigurationItemChangeNotification``.", + "uniqueItems": true, + "items": { + "description": "Source and message type that can trigger the rule", + "$ref": "#/definitions/SourceDetail" + } + } + }, + "required": [ + "Owner" + ] + }, + "EvaluationModeConfiguration": { + "type": "object", + "description": "The configuration object for CC rule evaluation mode. The supported valid values are Detective or Proactive.", + "additionalProperties": false, + "properties": { + "Mode": { + "type": "string", + "description": "The mode of an evaluation. The valid values are Detective or Proactive." + } + } + } + }, + "properties": { + "ConfigRuleId": { + "type": "string", + "description": "" + }, + "Description": { + "type": "string", + "description": "The description that you provide for the CC rule." + }, + "Scope": { + "description": "Defines which resources can trigger an evaluation for the rule. The scope can include one or more resource types, a combination of one resource type and one resource ID, or a combination of a tag key and value. Specify a scope to constrain the resources that can trigger an evaluation for the rule. If you do not specify a scope, evaluations are triggered when any resource in the recording group changes.\n The scope can be empty.", + "$ref": "#/definitions/Scope" + }, + "ConfigRuleName": { + "type": "string", + "description": "A name for the CC rule. If you don't specify a name, CFN generates a unique physical ID and uses that ID for the rule name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html)." + }, + "Arn": { + "type": "string", + "description": "" + }, + "Compliance": { + "type": "object", + "description": "Indicates whether an AWS resource or CC rule is compliant and provides the number of contributors that affect the compliance.", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string", + "description": "Compliance type determined by the Config rule" + } + } + }, + "MaximumExecutionFrequency": { + "type": "string", + "description": "The maximum frequency with which CC runs evaluations for a rule. You can specify a value for ``MaximumExecutionFrequency`` when:\n + You are using an AWS managed rule that is triggered at a periodic frequency.\n + Your custom rule is triggered when CC delivers the configuration snapshot. For more information, see [ConfigSnapshotDeliveryProperties](https://docs.aws.amazon.com/config/latest/APIReference/API_ConfigSnapshotDeliveryProperties.html).\n \n By default, rules with a periodic trigger are evaluated every 24 hours. To change the frequency, specify a valid value for the ``MaximumExecutionFrequency`` parameter." + }, + "Source": { + "description": "Provides the rule owner (```` for managed rules, ``CUSTOM_POLICY`` for Custom Policy rules, and ``CUSTOM_LAMBDA`` for Custom Lambda rules), the rule identifier, and the notifications that cause the function to evaluate your AWS resources.", + "$ref": "#/definitions/Source" + }, + "InputParameters": { + "type": [ + "string", + "object" + ], + "description": "A string, in JSON format, that is passed to the CC rule Lambda function." + }, + "EvaluationModes": { + "type": "array", + "description": "The modes the CC rule can be evaluated in. The valid values are distinct objects. By default, the value is Detective evaluation mode only.", + "uniqueItems": false, + "items": { + "description": "Mode of evaluation of AWS Config rule", + "$ref": "#/definitions/EvaluationModeConfiguration" + } + } + }, + "propertyTransform": { + "/properties/Source": "Source.Owner=\"CUSTOM_LAMBDA\" ? ($count(Source.SourceDetails[MessageType=\"ConfigurationItemChangeNotification\"]) > 0 and $count(Source.SourceDetails[MessageType=\"OversizedConfigurationItemChangeNotification\"]) = 0) ? $ ~> | $.Source | {\"SourceDetails\" : [SourceDetails, {\"EventSource\": \"aws.config\", \"MessageType\": \"OversizedConfigurationItemChangeNotification\"}]} | : ($count(Source.SourceDetails[MessageType=\"ConfigurationItemChangeNotification\"]) = 0 and $count(Source.SourceDetails[MessageType=\"OversizedConfigurationItemChangeNotification\"]) > 0) ? $ ~> | $.Source | {\"SourceDetails\" : [SourceDetails, {\"EventSource\": \"aws.config\", \"MessageType\": \"ConfigurationItemChangeNotification\" }]} | : $ : $" + }, + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "required": [ + "Source" + ], + "createOnlyProperties": [ + "/properties/ConfigRuleName" + ], + "primaryIdentifier": [ + "/properties/ConfigRuleName" + ], + "readOnlyProperties": [ + "/properties/ConfigRuleId", + "/properties/Compliance/Type", + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/Source/CustomPolicyDetails/PolicyText" + ], + "handlers": { + "create": { + "permissions": [ + "config:PutConfigRule", + "config:DescribeConfigRules" + ] + }, + "read": { + "permissions": [ + "config:DescribeConfigRules", + "config:DescribeComplianceByConfigRule" + ] + }, + "delete": { + "permissions": [ + "config:DeleteConfigRule", + "config:DescribeConfigRules" + ] + }, + "list": { + "permissions": [ + "config:DescribeConfigRules" + ] + }, + "update": { + "permissions": [ + "config:PutConfigRule", + "config:DescribeConfigRules" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/config/configurationaggregator.json b/internal/aws/cfn/schemas/aws/config/configurationaggregator.json new file mode 100644 index 00000000..478c1443 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/configurationaggregator.json @@ -0,0 +1,168 @@ +{ + "typeName": "AWS::Config::ConfigurationAggregator", + "description": "Resource Type definition for AWS::Config::ConfigurationAggregator", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "additionalProperties": false, + "properties": { + "AccountAggregationSources": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AccountAggregationSource" + } + }, + "ConfigurationAggregatorName": { + "description": "The name of the aggregator.", + "type": "string", + "pattern": "[\\w\\-]+", + "minLength": 1, + "maxLength": 256 + }, + "ConfigurationAggregatorArn": { + "description": "The Amazon Resource Name (ARN) of the aggregator.", + "type": "string" + }, + "OrganizationAggregationSource": { + "$ref": "#/definitions/OrganizationAggregationSource" + }, + "Tags": { + "description": "The tags for the configuration aggregator.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "AccountAggregationSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllAwsRegions": { + "type": "boolean" + }, + "AwsRegions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AccountIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "AccountIds" + ] + }, + "OrganizationAggregationSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllAwsRegions": { + "type": "boolean" + }, + "AwsRegions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "RoleArn" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "readOnlyProperties": [ + "/properties/ConfigurationAggregatorArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/ConfigurationAggregatorName" + ], + "primaryIdentifier": [ + "/properties/ConfigurationAggregatorName" + ], + "handlers": { + "create": { + "permissions": [ + "config:PutConfigurationAggregator", + "config:DescribeConfigurationAggregators", + "config:TagResource", + "iam:PassRole", + "organizations:EnableAWSServiceAccess", + "organizations:ListDelegatedAdministrators" + ] + }, + "read": { + "permissions": [ + "config:DescribeConfigurationAggregators", + "config:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "config:PutConfigurationAggregator", + "config:DescribeConfigurationAggregators", + "config:TagResource", + "config:UntagResource", + "config:ListTagsForResource", + "iam:PassRole", + "organizations:EnableAWSServiceAccess", + "organizations:ListDelegatedAdministrators" + ] + }, + "delete": { + "permissions": [ + "config:DeleteConfigurationAggregator", + "config:UntagResource" + ] + }, + "list": { + "permissions": [ + "config:DescribeConfigurationAggregators" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/config/configurationrecorder.json b/internal/aws/cfn/schemas/aws/config/configurationrecorder.json new file mode 100644 index 00000000..12c66eb2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/configurationrecorder.json @@ -0,0 +1,131 @@ +{ + "typeName": "AWS::Config::ConfigurationRecorder", + "description": "Resource Type definition for AWS::Config::ConfigurationRecorder", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "RecordingGroup": { + "$ref": "#/definitions/RecordingGroup" + }, + "RecordingMode": { + "$ref": "#/definitions/RecordingMode" + }, + "RoleARN": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "RecordingStrategy": { + "type": "object", + "additionalProperties": false, + "properties": { + "UseOnly": { + "type": "string" + } + }, + "required": [ + "UseOnly" + ] + }, + "ExclusionByResourceTypes": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceTypes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "ResourceTypes" + ] + }, + "RecordingModeOverride": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceTypes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "RecordingFrequency": { + "type": "string" + }, + "Description": { + "type": "string" + } + }, + "required": [ + "ResourceTypes", + "RecordingFrequency" + ] + }, + "RecordingGroup": { + "type": "object", + "additionalProperties": false, + "properties": { + "IncludeGlobalResourceTypes": { + "type": "boolean" + }, + "ResourceTypes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "RecordingStrategy": { + "$ref": "#/definitions/RecordingStrategy" + }, + "ExclusionByResourceTypes": { + "$ref": "#/definitions/ExclusionByResourceTypes" + }, + "AllSupported": { + "type": "boolean" + } + } + }, + "RecordingMode": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordingModeOverrides": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/RecordingModeOverride" + } + }, + "RecordingFrequency": { + "type": "string" + } + }, + "required": [ + "RecordingFrequency" + ] + } + }, + "required": [ + "RoleARN" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/config/conformancepack.json b/internal/aws/cfn/schemas/aws/config/conformancepack.json new file mode 100644 index 00000000..a8a06f7c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/conformancepack.json @@ -0,0 +1,151 @@ +{ + "typeName": "AWS::Config::ConformancePack", + "description": "A conformance pack is a collection of AWS Config rules and remediation actions that can be easily deployed as a single entity in an account and a region or across an entire AWS Organization.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "documentationUrl": "https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html", + "definitions": { + "ParameterName": { + "description": "Key part of key-value pair with value being parameter value", + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "ParameterValue": { + "description": "Value part of key-value pair with key being parameter Name", + "type": "string", + "minLength": 0, + "maxLength": 4096 + }, + "ConformancePackInputParameter": { + "description": "Input parameters in the form of key-value pairs for the conformance pack.", + "type": "object", + "additionalProperties": false, + "properties": { + "ParameterName": { + "$ref": "#/definitions/ParameterName" + }, + "ParameterValue": { + "$ref": "#/definitions/ParameterValue" + } + }, + "required": [ + "ParameterName", + "ParameterValue" + ] + } + }, + "properties": { + "ConformancePackName": { + "description": "Name of the conformance pack which will be assigned as the unique identifier.", + "type": "string", + "pattern": "[a-zA-Z][-a-zA-Z0-9]*", + "minLength": 1, + "maxLength": 256 + }, + "DeliveryS3Bucket": { + "description": "AWS Config stores intermediate files while processing conformance pack template.", + "type": "string", + "minLength": 0, + "maxLength": 63 + }, + "DeliveryS3KeyPrefix": { + "description": "The prefix for delivery S3 bucket.", + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "TemplateBody": { + "description": "A string containing full conformance pack template body. You can only specify one of the template body or template S3Uri fields.", + "type": "string", + "minLength": 1, + "maxLength": 51200 + }, + "TemplateS3Uri": { + "description": "Location of file containing the template body which points to the conformance pack template that is located in an Amazon S3 bucket. You can only specify one of the template body or template S3Uri fields.", + "type": "string", + "pattern": "s3://.*", + "minLength": 1, + "maxLength": 1024 + }, + "TemplateSSMDocumentDetails": { + "description": "The TemplateSSMDocumentDetails object contains the name of the SSM document and the version of the SSM document.", + "type": "object", + "additionalProperties": false, + "properties": { + "DocumentName": { + "type": "string", + "minLength": 3, + "maxLength": 128 + }, + "DocumentVersion": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + } + }, + "ConformancePackInputParameters": { + "description": "A list of ConformancePackInputParameter objects.", + "type": "array", + "items": { + "$ref": "#/definitions/ConformancePackInputParameter" + }, + "minItems": 0, + "maxItems": 60 + } + }, + "additionalProperties": false, + "required": [ + "ConformancePackName" + ], + "writeOnlyProperties": [ + "/properties/TemplateBody", + "/properties/TemplateS3Uri", + "/properties/TemplateSSMDocumentDetails" + ], + "createOnlyProperties": [ + "/properties/ConformancePackName" + ], + "primaryIdentifier": [ + "/properties/ConformancePackName" + ], + "handlers": { + "create": { + "permissions": [ + "config:PutConformancePack", + "config:DescribeConformancePackStatus", + "config:DescribeConformancePacks", + "s3:GetObject", + "s3:GetBucketAcl", + "iam:CreateServiceLinkedRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "config:DescribeConformancePacks" + ] + }, + "update": { + "permissions": [ + "config:PutConformancePack", + "config:DescribeConformancePackStatus", + "s3:GetObject", + "s3:GetBucketAcl", + "iam:CreateServiceLinkedRole", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "config:DeleteConformancePack", + "config:DescribeConformancePackStatus" + ] + }, + "list": { + "permissions": [ + "config:DescribeConformancePacks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/config/deliverychannel.json b/internal/aws/cfn/schemas/aws/config/deliverychannel.json new file mode 100644 index 00000000..7ae91187 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/deliverychannel.json @@ -0,0 +1,51 @@ +{ + "typeName": "AWS::Config::DeliveryChannel", + "description": "Resource Type definition for AWS::Config::DeliveryChannel", + "additionalProperties": false, + "properties": { + "S3KeyPrefix": { + "type": "string" + }, + "ConfigSnapshotDeliveryProperties": { + "$ref": "#/definitions/ConfigSnapshotDeliveryProperties" + }, + "S3BucketName": { + "type": "string" + }, + "SnsTopicARN": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "S3KmsKeyArn": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "ConfigSnapshotDeliveryProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeliveryFrequency": { + "type": "string" + } + } + } + }, + "required": [ + "S3BucketName" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/config/organizationconfigrule.json b/internal/aws/cfn/schemas/aws/config/organizationconfigrule.json new file mode 100644 index 00000000..3b9c7e34 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/organizationconfigrule.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::Config::OrganizationConfigRule", + "description": "Resource Type definition for AWS::Config::OrganizationConfigRule", + "additionalProperties": false, + "properties": { + "OrganizationCustomRuleMetadata": { + "$ref": "#/definitions/OrganizationCustomRuleMetadata" + }, + "OrganizationManagedRuleMetadata": { + "$ref": "#/definitions/OrganizationManagedRuleMetadata" + }, + "ExcludedAccounts": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "OrganizationConfigRuleName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "OrganizationCustomPolicyRuleMetadata": { + "$ref": "#/definitions/OrganizationCustomPolicyRuleMetadata" + } + }, + "definitions": { + "OrganizationManagedRuleMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "TagKeyScope": { + "type": "string" + }, + "TagValueScope": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ResourceIdScope": { + "type": "string" + }, + "RuleIdentifier": { + "type": "string" + }, + "ResourceTypesScope": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MaximumExecutionFrequency": { + "type": "string" + }, + "InputParameters": { + "type": "string" + } + }, + "required": [ + "RuleIdentifier" + ] + }, + "OrganizationCustomRuleMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "TagKeyScope": { + "type": "string" + }, + "TagValueScope": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ResourceIdScope": { + "type": "string" + }, + "LambdaFunctionArn": { + "type": "string" + }, + "OrganizationConfigRuleTriggerTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ResourceTypesScope": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MaximumExecutionFrequency": { + "type": "string" + }, + "InputParameters": { + "type": "string" + } + }, + "required": [ + "LambdaFunctionArn", + "OrganizationConfigRuleTriggerTypes" + ] + }, + "OrganizationCustomPolicyRuleMetadata": { + "type": "object", + "additionalProperties": false, + "properties": { + "TagKeyScope": { + "type": "string" + }, + "TagValueScope": { + "type": "string" + }, + "Runtime": { + "type": "string" + }, + "PolicyText": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ResourceIdScope": { + "type": "string" + }, + "OrganizationConfigRuleTriggerTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DebugLogDeliveryAccounts": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ResourceTypesScope": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MaximumExecutionFrequency": { + "type": "string" + }, + "InputParameters": { + "type": "string" + } + }, + "required": [ + "Runtime", + "PolicyText" + ] + } + }, + "required": [ + "OrganizationConfigRuleName" + ], + "createOnlyProperties": [ + "/properties/OrganizationConfigRuleName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/config/organizationconformancepack.json b/internal/aws/cfn/schemas/aws/config/organizationconformancepack.json new file mode 100644 index 00000000..1513516a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/organizationconformancepack.json @@ -0,0 +1,153 @@ +{ + "typeName": "AWS::Config::OrganizationConformancePack", + "description": "Resource schema for AWS::Config::OrganizationConformancePack.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "documentationUrl": "https://docs.aws.amazon.com/config/latest/developerguide/conformance-pack-organization-apis.html", + "definitions": { + "ConformancePackInputParameter": { + "description": "Input parameters in the form of key-value pairs for the conformance pack.", + "type": "object", + "properties": { + "ParameterName": { + "$ref": "#/definitions/ParameterName" + }, + "ParameterValue": { + "$ref": "#/definitions/ParameterValue" + } + }, + "required": [ + "ParameterName", + "ParameterValue" + ] + }, + "ParameterName": { + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "ParameterValue": { + "type": "string", + "minLength": 0, + "maxLength": 4096 + }, + "AccountId": { + "type": "string" + } + }, + "properties": { + "OrganizationConformancePackName": { + "description": "The name of the organization conformance pack.", + "type": "string", + "pattern": "[a-zA-Z][-a-zA-Z0-9]*", + "minLength": 1, + "maxLength": 128 + }, + "TemplateS3Uri": { + "description": "Location of file containing the template body.", + "type": "string", + "pattern": "s3://.*", + "minLength": 1, + "maxLength": 1024 + }, + "TemplateBody": { + "description": "A string containing full conformance pack template body.", + "type": "string", + "minLength": 1, + "maxLength": 51200 + }, + "DeliveryS3Bucket": { + "description": "AWS Config stores intermediate files while processing conformance pack template.", + "type": "string", + "minLength": 0, + "maxLength": 63 + }, + "DeliveryS3KeyPrefix": { + "description": "The prefix for the delivery S3 bucket.", + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "ConformancePackInputParameters": { + "description": "A list of ConformancePackInputParameter objects.", + "type": "array", + "items": { + "$ref": "#/definitions/ConformancePackInputParameter" + }, + "minItems": 0, + "maxItems": 60 + }, + "ExcludedAccounts": { + "description": "A list of AWS accounts to be excluded from an organization conformance pack while deploying a conformance pack.", + "type": "array", + "items": { + "$ref": "#/definitions/AccountId" + }, + "minItems": 0, + "maxItems": 1000 + } + }, + "required": [ + "OrganizationConformancePackName" + ], + "writeOnlyProperties": [ + "/properties/TemplateBody", + "/properties/TemplateS3Uri" + ], + "createOnlyProperties": [ + "/properties/OrganizationConformancePackName" + ], + "primaryIdentifier": [ + "/properties/OrganizationConformancePackName" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "config:PutOrganizationConformancePack", + "config:DescribeOrganizationConformancePackStatuses", + "config:GetOrganizationConformancePackDetailedStatus", + "config:DescribeOrganizationConformancePacks", + "s3:GetObject", + "s3:GetBucketAcl", + "iam:CreateServiceLinkedRole", + "iam:PassRole", + "organizations:ListDelegatedAdministrators", + "organizations:EnableAWSServiceAccess" + ], + "timeoutInMinutes": 706 + }, + "read": { + "permissions": [ + "config:DescribeOrganizationConformancePacks" + ] + }, + "delete": { + "permissions": [ + "config:DeleteOrganizationConformancePack", + "config:DescribeOrganizationConformancePackStatuses", + "config:GetOrganizationConformancePackDetailedStatus", + "organizations:ListDelegatedAdministrators" + ], + "timeoutInMinutes": 706 + }, + "update": { + "permissions": [ + "config:PutOrganizationConformancePack", + "config:DescribeOrganizationConformancePackStatuses", + "config:GetOrganizationConformancePackDetailedStatus", + "s3:GetObject", + "s3:GetBucketAcl", + "iam:CreateServiceLinkedRole", + "iam:PassRole", + "organizations:ListDelegatedAdministrators", + "organizations:EnableAWSServiceAccess" + ], + "timeoutInMinutes": 706 + }, + "list": { + "permissions": [ + "config:DescribeOrganizationConformancePacks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/config/remediationconfiguration.json b/internal/aws/cfn/schemas/aws/config/remediationconfiguration.json new file mode 100644 index 00000000..46ece8bb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/remediationconfiguration.json @@ -0,0 +1,77 @@ +{ + "typeName": "AWS::Config::RemediationConfiguration", + "description": "Resource Type definition for AWS::Config::RemediationConfiguration", + "additionalProperties": false, + "properties": { + "TargetVersion": { + "type": "string" + }, + "ExecutionControls": { + "$ref": "#/definitions/ExecutionControls" + }, + "Parameters": { + "type": "object" + }, + "TargetType": { + "type": "string" + }, + "ConfigRuleName": { + "type": "string" + }, + "ResourceType": { + "type": "string" + }, + "RetryAttemptSeconds": { + "type": "integer" + }, + "MaximumAutomaticAttempts": { + "type": "integer" + }, + "Id": { + "type": "string" + }, + "TargetId": { + "type": "string" + }, + "Automatic": { + "type": "boolean" + } + }, + "definitions": { + "ExecutionControls": { + "type": "object", + "additionalProperties": false, + "properties": { + "SsmControls": { + "$ref": "#/definitions/SsmControls" + } + } + }, + "SsmControls": { + "type": "object", + "additionalProperties": false, + "properties": { + "ErrorPercentage": { + "type": "integer" + }, + "ConcurrentExecutionRatePercentage": { + "type": "integer" + } + } + } + }, + "required": [ + "TargetType", + "ConfigRuleName", + "TargetId" + ], + "createOnlyProperties": [ + "/properties/ConfigRuleName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/config/storedquery.json b/internal/aws/cfn/schemas/aws/config/storedquery.json new file mode 100644 index 00000000..4109208c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/config/storedquery.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::Config::StoredQuery", + "description": "Resource Type definition for AWS::Config::StoredQuery", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "additionalProperties": false, + "properties": { + "QueryArn": { + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "QueryId": { + "type": "string", + "minLength": 1, + "maxLength": 36, + "pattern": "^\\S+$" + }, + "QueryName": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-zA-Z0-9-_]+$" + }, + "QueryDescription": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "[\\s\\S]*" + }, + "QueryExpression": { + "type": "string", + "minLength": 1, + "maxLength": 4096, + "pattern": "[\\s\\S]*" + }, + "Tags": { + "description": "The tags for the stored query.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "QueryName", + "QueryExpression" + ], + "readOnlyProperties": [ + "/properties/QueryId", + "/properties/QueryArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/QueryName" + ], + "primaryIdentifier": [ + "/properties/QueryName" + ], + "handlers": { + "create": { + "permissions": [ + "config:PutStoredQuery", + "config:GetStoredQuery", + "config:TagResource" + ] + }, + "read": { + "permissions": [ + "config:GetStoredQuery", + "config:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "config:PutStoredQuery", + "config:GetStoredQuery", + "config:TagResource", + "config:UntagResource", + "config:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "config:DeleteStoredQuery", + "config:UntagResource" + ] + }, + "list": { + "permissions": [ + "config:ListStoredQueries" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/approvedorigin.json b/internal/aws/cfn/schemas/aws/connect/approvedorigin.json new file mode 100644 index 00000000..c8abc1fd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/approvedorigin.json @@ -0,0 +1,73 @@ +{ + "typeName": "AWS::Connect::ApprovedOrigin", + "description": "Resource Type definition for AWS::Connect::ApprovedOrigin", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Origin": { + "description": "Domain name to be added to the allowlist of instance", + "type": "string", + "maxLength": 267 + }, + "InstanceId": { + "description": "Amazon Connect instance identifier", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 100 + } + }, + "properties": { + "Origin": { + "$ref": "#/definitions/Origin" + }, + "InstanceId": { + "$ref": "#/definitions/InstanceId" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "Origin", + "InstanceId" + ], + "createOnlyProperties": [ + "/properties/InstanceId", + "/properties/Origin" + ], + "primaryIdentifier": [ + "/properties/InstanceId", + "/properties/Origin" + ], + "handlers": { + "create": { + "permissions": [ + "connect:AssociateApprovedOrigin", + "connect:ListApprovedOrigins" + ] + }, + "read": { + "permissions": [ + "connect:ListApprovedOrigins" + ] + }, + "update": { + "permissions": [] + }, + "delete": { + "permissions": [ + "connect:DisassociateApprovedOrigin", + "connect:ListApprovedOrigins" + ] + }, + "list": { + "permissions": [ + "connect:ListApprovedOrigins" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/contactflow.json b/internal/aws/cfn/schemas/aws/connect/contactflow.json new file mode 100644 index 00000000..de56f75b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/contactflow.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::Connect::ContactFlow", + "description": "Resource Type definition for AWS::Connect::ContactFlow", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. . You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance (ARN).", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 256 + }, + "ContactFlowArn": { + "description": "The identifier of the contact flow (ARN).", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 500 + }, + "Name": { + "description": "The name of the contact flow.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Content": { + "description": "The content of the contact flow in JSON format.", + "type": "string", + "minLength": 1, + "maxLength": 256000 + }, + "Description": { + "description": "The description of the contact flow.", + "type": "string", + "maxLength": 500 + }, + "State": { + "type": "string", + "description": "The state of the contact flow.", + "enum": [ + "ACTIVE", + "ARCHIVED" + ] + }, + "Type": { + "description": "The type of the contact flow.", + "type": "string", + "enum": [ + "CONTACT_FLOW", + "CUSTOMER_QUEUE", + "CUSTOMER_HOLD", + "CUSTOMER_WHISPER", + "AGENT_HOLD", + "AGENT_WHISPER", + "OUTBOUND_WHISPER", + "AGENT_TRANSFER", + "QUEUE_TRANSFER" + ] + }, + "Tags": { + "description": "One or more tags.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "InstanceArn", + "Content", + "Name", + "Type" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateContactFlow", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeContactFlow" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteContactFlow", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateContactFlowMetadata", + "connect:UpdateContactFlowContent", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListContactFlows" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ContactFlowArn" + ], + "readOnlyProperties": [ + "/properties/ContactFlowArn" + ], + "createOnlyProperties": [ + "/properties/Type" + ] +} diff --git a/internal/aws/cfn/schemas/aws/connect/contactflowmodule.json b/internal/aws/cfn/schemas/aws/connect/contactflowmodule.json new file mode 100644 index 00000000..f35cc78d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/contactflowmodule.json @@ -0,0 +1,147 @@ +{ + "typeName": "AWS::Connect::ContactFlowModule", + "description": "Resource Type definition for AWS::Connect::ContactFlowModule.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance (ARN).", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 256 + }, + "ContactFlowModuleArn": { + "description": "The identifier of the contact flow module (ARN).", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/flow-module/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 256 + }, + "Name": { + "description": "The name of the contact flow module.", + "type": "string", + "minLength": 1, + "maxLength": 127, + "pattern": ".*\\S.*" + }, + "Content": { + "description": "The content of the contact flow module in JSON format.", + "type": "string", + "minLength": 1, + "maxLength": 256000 + }, + "Description": { + "description": "The description of the contact flow module.", + "type": "string", + "maxLength": 500, + "pattern": ".*\\S.*" + }, + "State": { + "type": "string", + "description": "The state of the contact flow module.", + "maxLength": 500 + }, + "Status": { + "type": "string", + "description": "The status of the contact flow module.", + "maxLength": 500 + }, + "Tags": { + "description": "One or more tags.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "InstanceArn", + "Name", + "Content" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateContactFlowModule", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeContactFlowModule" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteContactFlowModule", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateContactFlowModuleMetadata", + "connect:UpdateContactFlowModuleContent", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListContactFlowModules" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ContactFlowModuleArn" + ], + "readOnlyProperties": [ + "/properties/ContactFlowModuleArn", + "/properties/Status" + ] +} diff --git a/internal/aws/cfn/schemas/aws/connect/evaluationform.json b/internal/aws/cfn/schemas/aws/connect/evaluationform.json new file mode 100644 index 00000000..f7d897df --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/evaluationform.json @@ -0,0 +1,545 @@ +{ + "typeName": "AWS::Connect::EvaluationForm", + "description": "Resource Type definition for AWS::Connect::EvaluationForm", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "RefId": { + "description": "The identifier to reference the item.", + "type": "string", + "pattern": "^[a-zA-Z0-9._-]{1,40}$" + }, + "Weight": { + "description": "The item weight used for scoring.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "Score": { + "description": "The score of an answer option.", + "type": "integer", + "minimum": 0, + "maximum": 10 + }, + "EvaluationFormBaseItem": { + "description": "The evaluation form base item.", + "type": "object", + "additionalProperties": false, + "properties": { + "Section": { + "description": "The evaluation form section item", + "$ref": "#/definitions/EvaluationFormSection" + } + }, + "required": [ + "Section" + ] + }, + "EvaluationFormItem": { + "description": "The evaluation form item.", + "type": "object", + "additionalProperties": false, + "properties": { + "Section": { + "description": "The evaluation form section item", + "$ref": "#/definitions/EvaluationFormSection" + }, + "Question": { + "description": "The evaluation form question item", + "$ref": "#/definitions/EvaluationFormQuestion" + } + } + }, + "EvaluationFormSection": { + "description": "The evaluation form section.", + "type": "object", + "additionalProperties": false, + "properties": { + "Title": { + "description": "The title of the section.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Instructions": { + "description": "The instructions for the section.", + "type": "string", + "maxLength": 1024 + }, + "RefId": { + "description": "The identifier to reference the section.", + "$ref": "#/definitions/RefId" + }, + "Items": { + "description": "The list of section items.", + "type": "array", + "insertionOrder": true, + "minItems": 1, + "maxItems": 200, + "items": { + "$ref": "#/definitions/EvaluationFormItem" + } + }, + "Weight": { + "description": "The item weight used for scoring.", + "$ref": "#/definitions/Weight" + } + }, + "required": [ + "RefId", + "Title" + ] + }, + "EvaluationFormNumericQuestionOption": { + "description": "The option ranges used for scoring in numeric questions.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinValue": { + "description": "The minimum value of the option range.", + "type": "integer" + }, + "MaxValue": { + "description": "The maximum value of the option range.", + "type": "integer" + }, + "Score": { + "description": "The score of the option range.", + "$ref": "#/definitions/Score" + }, + "AutomaticFail": { + "description": "The flag to mark the option as automatic fail.", + "type": "boolean" + } + }, + "required": [ + "MinValue", + "MaxValue" + ] + }, + "NumericQuestionPropertyValueAutomation": { + "description": "The automation property name of the question.", + "type": "object", + "additionalProperties": false, + "properties": { + "Label": { + "description": "The automation property label.", + "type": "string", + "enum": [ + "OVERALL_CUSTOMER_SENTIMENT_SCORE", + "OVERALL_AGENT_SENTIMENT_SCORE", + "NON_TALK_TIME", + "NON_TALK_TIME_PERCENTAGE", + "NUMBER_OF_INTERRUPTIONS", + "CONTACT_DURATION", + "AGENT_INTERACTION_DURATION", + "CUSTOMER_HOLD_TIME" + ] + } + }, + "required": [ + "Label" + ] + }, + "EvaluationFormNumericQuestionAutomation": { + "description": "The automation properties for the numeric question.", + "type": "object", + "additionalProperties": false, + "properties": { + "PropertyValue": { + "description": "The automation property name of the question.", + "$ref": "#/definitions/NumericQuestionPropertyValueAutomation" + } + }, + "required": [ + "PropertyValue" + ] + }, + "EvaluationFormNumericQuestionProperties": { + "description": "The properties of the numeric question.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinValue": { + "description": "The minimum value for answers of the question.", + "type": "integer" + }, + "MaxValue": { + "description": "The maximum value for answers of the question.", + "type": "integer" + }, + "Options": { + "description": "The list of option ranges used for scoring.", + "type": "array", + "insertionOrder": true, + "minItems": 1, + "maxItems": 10, + "items": { + "$ref": "#/definitions/EvaluationFormNumericQuestionOption" + } + }, + "Automation": { + "description": "The automation properties for the numeric question.", + "$ref": "#/definitions/EvaluationFormNumericQuestionAutomation" + } + }, + "required": [ + "MinValue", + "MaxValue" + ] + }, + "EvaluationFormSingleSelectQuestionAutomationOption": { + "description": "The automation option for the single-select question.", + "type": "object", + "additionalProperties": false, + "properties": { + "RuleCategory": { + "description": "The automation option based on Rules categories.", + "$ref": "#/definitions/SingleSelectQuestionRuleCategoryAutomation" + } + }, + "required": [ + "RuleCategory" + ] + }, + "SingleSelectQuestionRuleCategoryAutomation": { + "description": "The automation option based on Rules categories.", + "type": "object", + "additionalProperties": false, + "properties": { + "Category": { + "description": "The category name as defined in Rules.", + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "Condition": { + "description": "The automation condition applied on contact categories.", + "type": "string", + "enum": [ + "PRESENT", + "NOT_PRESENT" + ] + }, + "OptionRefId": { + "description": "The option identifier referencing the option to be selected when the automation option is triggered.", + "$ref": "#/definitions/RefId" + } + }, + "required": [ + "Category", + "Condition", + "OptionRefId" + ] + }, + "EvaluationFormSingleSelectQuestionAutomation": { + "description": "The automation properties for the single-select question.", + "type": "object", + "additionalProperties": false, + "properties": { + "Options": { + "description": "The answer options for the automation.", + "type": "array", + "insertionOrder": true, + "minItems": 1, + "maxItems": 20, + "items": { + "$ref": "#/definitions/EvaluationFormSingleSelectQuestionAutomationOption" + } + }, + "DefaultOptionRefId": { + "description": "The option reference identifier of the default answer.", + "$ref": "#/definitions/RefId" + } + }, + "required": [ + "Options" + ] + }, + "EvaluationFormSingleSelectQuestionOption": { + "description": "The option for a question.", + "type": "object", + "additionalProperties": false, + "properties": { + "RefId": { + "description": "The identifier used to reference the option.", + "$ref": "#/definitions/RefId" + }, + "Text": { + "description": "The title of the option.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Score": { + "description": "The score of the option.", + "$ref": "#/definitions/Score" + }, + "AutomaticFail": { + "description": "The flag to mark the option as automatic fail.", + "type": "boolean" + } + }, + "required": [ + "RefId", + "Text" + ] + }, + "EvaluationFormSingleSelectQuestionProperties": { + "description": "The properties of the single-select question.", + "type": "object", + "additionalProperties": false, + "properties": { + "Options": { + "description": "The list of options for the question.", + "type": "array", + "insertionOrder": true, + "minItems": 2, + "maxItems": 256, + "items": { + "$ref": "#/definitions/EvaluationFormSingleSelectQuestionOption" + } + }, + "DisplayAs": { + "description": "The display mode of the single-select question.", + "type": "string", + "enum": [ + "DROPDOWN", + "RADIO" + ] + }, + "Automation": { + "description": "The automation properties for the single-select question.", + "$ref": "#/definitions/EvaluationFormSingleSelectQuestionAutomation" + } + }, + "required": [ + "Options" + ] + }, + "EvaluationFormQuestionTypeProperties": { + "description": "The properties of the question.", + "type": "object", + "additionalProperties": false, + "properties": { + "Numeric": { + "description": "The properties of the numeric question.", + "$ref": "#/definitions/EvaluationFormNumericQuestionProperties" + }, + "SingleSelect": { + "description": "The properties of the single-select question.", + "$ref": "#/definitions/EvaluationFormSingleSelectQuestionProperties" + } + } + }, + "EvaluationFormQuestion": { + "description": "The evaluation form question.", + "type": "object", + "additionalProperties": false, + "properties": { + "Title": { + "description": "The title of the question.", + "type": "string", + "minLength": 1, + "maxLength": 350 + }, + "Instructions": { + "description": "The instructions for the question.", + "type": "string", + "maxLength": 1024 + }, + "RefId": { + "description": "The identifier used to reference the question.", + "$ref": "#/definitions/RefId" + }, + "NotApplicableEnabled": { + "description": "The flag to enable not applicable answers to the question.", + "type": "boolean" + }, + "QuestionType": { + "description": "The type of the question.", + "type": "string", + "enum": [ + "NUMERIC", + "SINGLESELECT", + "TEXT" + ] + }, + "QuestionTypeProperties": { + "description": "The properties of the question", + "$ref": "#/definitions/EvaluationFormQuestionTypeProperties" + }, + "Weight": { + "description": "The question weight used for scoring.", + "$ref": "#/definitions/Weight" + } + }, + "required": [ + "RefId", + "Title", + "QuestionType" + ] + }, + "ScoringStrategy": { + "description": "The scoring strategy.", + "type": "object", + "additionalProperties": false, + "properties": { + "Mode": { + "description": "The scoring mode.", + "type": "string", + "enum": [ + "QUESTION_ONLY", + "SECTION_ONLY" + ] + }, + "Status": { + "description": "The scoring status.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + } + }, + "required": [ + "Mode", + "Status" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that's 1 to 256 characters in length.", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Title": { + "description": "The title of the evaluation form.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Description": { + "description": "The description of the evaluation form.", + "type": "string", + "maxLength": 1024 + }, + "EvaluationFormArn": { + "description": "The Amazon Resource Name (ARN) for the evaluation form.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/evaluation-form/[-a-zA-Z0-9]*$" + }, + "InstanceArn": { + "description": "The Amazon Resource Name (ARN) of the instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "Items": { + "description": "The list of evaluation form items.", + "type": "array", + "insertionOrder": true, + "minItems": 1, + "maxItems": 200, + "items": { + "$ref": "#/definitions/EvaluationFormBaseItem" + } + }, + "ScoringStrategy": { + "description": "The scoring strategy.", + "$ref": "#/definitions/ScoringStrategy" + }, + "Status": { + "description": "The status of the evaluation form.", + "type": "string", + "default": "DRAFT", + "enum": [ + "DRAFT", + "ACTIVE" + ] + }, + "Tags": { + "description": "One or more tags.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Title", + "InstanceArn", + "Items", + "Status" + ], + "readOnlyProperties": [ + "/properties/EvaluationFormArn" + ], + "primaryIdentifier": [ + "/properties/EvaluationFormArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": false, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateEvaluationForm", + "connect:ActivateEvaluationForm", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeEvaluationForm", + "connect:ListEvaluationFormVersions" + ] + }, + "list": { + "permissions": [ + "connect:ListEvaluationForms" + ] + }, + "update": { + "permissions": [ + "connect:UpdateEvaluationForm", + "connect:ListEvaluationFormVersions", + "connect:ActivateEvaluationForm", + "connect:DeactivateEvaluationForm", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteEvaluationForm", + "connect:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/hoursofoperation.json b/internal/aws/cfn/schemas/aws/connect/hoursofoperation.json new file mode 100644 index 00000000..12d100b3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/hoursofoperation.json @@ -0,0 +1,195 @@ +{ + "typeName": "AWS::Connect::HoursOfOperation", + "description": "Resource Type definition for AWS::Connect::HoursOfOperation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "HoursOfOperationTimeSlice": { + "description": "The start time or end time for an hours of operation.", + "type": "object", + "additionalProperties": false, + "properties": { + "Hours": { + "type": "integer", + "description": "The hours.", + "minimum": 0, + "maximum": 23 + }, + "Minutes": { + "type": "integer", + "description": "The minutes.", + "minimum": 0, + "maximum": 59 + } + }, + "required": [ + "Hours", + "Minutes" + ] + }, + "HoursOfOperationConfig": { + "description": "Contains information about the hours of operation.", + "type": "object", + "additionalProperties": false, + "properties": { + "Day": { + "type": "string", + "description": "The day that the hours of operation applies to.", + "enum": [ + "SUNDAY", + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY" + ] + }, + "StartTime": { + "description": "The start time that your contact center opens.", + "$ref": "#/definitions/HoursOfOperationTimeSlice" + }, + "EndTime": { + "description": "The end time that your contact center closes.", + "$ref": "#/definitions/HoursOfOperationTimeSlice" + } + }, + "required": [ + "Day", + "StartTime", + "EndTime" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "Name": { + "description": "The name of the hours of operation.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "description": "The description of the hours of operation.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "TimeZone": { + "description": "The time zone of the hours of operation.", + "type": "string" + }, + "Config": { + "description": "Configuration information for the hours of operation: day, start time, and end time.", + "type": "array", + "maxItems": 100, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/HoursOfOperationConfig" + } + }, + "HoursOfOperationArn": { + "description": "The Amazon Resource Name (ARN) for the hours of operation.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/operating-hours/[-a-zA-Z0-9]*$" + }, + "Tags": { + "description": "One or more tags.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "InstanceArn", + "Name", + "TimeZone", + "Config" + ], + "handlers": { + "create": { + "permissions": [ + "connect:CreateHoursOfOperation", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeHoursOfOperation" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteHoursOfOperation", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateHoursOfOperation", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListHoursOfOperations" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/HoursOfOperationArn" + ], + "readOnlyProperties": [ + "/properties/HoursOfOperationArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/instance.json b/internal/aws/cfn/schemas/aws/connect/instance.json new file mode 100644 index 00000000..6adefdb8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/instance.json @@ -0,0 +1,238 @@ +{ + "typeName": "AWS::Connect::Instance", + "description": "Resource Type definition for AWS::Connect::Instance", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "InboundCalls": { + "description": "Mandatory element which enables inbound calls on new instance.", + "type": "boolean" + }, + "OutboundCalls": { + "description": "Mandatory element which enables outbound calls on new instance.", + "type": "boolean" + }, + "ContactflowLogs": { + "description": "Boolean flag which enables CONTACTFLOW_LOGS on an instance.", + "type": "boolean" + }, + "ContactLens": { + "description": "Boolean flag which enables CONTACT_LENS on an instance.", + "type": "boolean" + }, + "AutoResolveBestVoices": { + "description": "Boolean flag which enables AUTO_RESOLVE_BEST_VOICES on an instance.", + "type": "boolean" + }, + "UseCustomTTSVoices": { + "description": "Boolean flag which enables USE_CUSTOM_TTS_VOICES on an instance.", + "type": "boolean" + }, + "EarlyMedia": { + "description": "Boolean flag which enables EARLY_MEDIA on an instance.", + "type": "boolean" + }, + "Attributes": { + "type": "object", + "additionalProperties": false, + "properties": { + "InboundCalls": { + "$ref": "#/definitions/InboundCalls" + }, + "OutboundCalls": { + "$ref": "#/definitions/OutboundCalls" + }, + "ContactflowLogs": { + "$ref": "#/definitions/ContactflowLogs" + }, + "ContactLens": { + "$ref": "#/definitions/ContactLens" + }, + "AutoResolveBestVoices": { + "$ref": "#/definitions/AutoResolveBestVoices" + }, + "UseCustomTTSVoices": { + "$ref": "#/definitions/UseCustomTTSVoices" + }, + "EarlyMedia": { + "$ref": "#/definitions/EarlyMedia" + } + }, + "required": [ + "InboundCalls", + "OutboundCalls" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Id": { + "description": "An instanceId is automatically generated on creation and assigned as the unique identifier.", + "type": "string" + }, + "Arn": { + "description": "An instanceArn is automatically generated on creation based on instanceId.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "IdentityManagementType": { + "description": "Specifies the type of directory integration for new instance.", + "type": "string", + "enum": [ + "SAML", + "CONNECT_MANAGED", + "EXISTING_DIRECTORY" + ] + }, + "InstanceAlias": { + "description": "Alias of the new directory created as part of new instance creation.", + "type": "string", + "pattern": "^(?!d-)([\\da-zA-Z]+)([-]*[\\da-zA-Z])*$", + "minLength": 1, + "maxLength": 62 + }, + "CreatedTime": { + "description": "Timestamp of instance creation logged as part of instance creation.", + "type": "string", + "format": "date-time" + }, + "ServiceRole": { + "description": "Service linked role created as part of instance creation.", + "type": "string" + }, + "InstanceStatus": { + "description": "Specifies the creation status of new instance.", + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "CREATION_FAILED", + "ACTIVE" + ] + }, + "DirectoryId": { + "description": "Existing directoryId user wants to map to the new Connect instance.", + "type": "string", + "pattern": "^d-[0-9a-f]{10}$", + "minLength": 12, + "maxLength": 12 + }, + "Attributes": { + "description": "The attributes for the instance.", + "$ref": "#/definitions/Attributes" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "IdentityManagementType", + "Attributes" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/ServiceRole", + "/properties/CreatedTime", + "/properties/InstanceStatus" + ], + "createOnlyProperties": [ + "/properties/DirectoryId", + "/properties/InstanceAlias", + "/properties/IdentityManagementType" + ], + "writeOnlyProperties": [ + "/properties/DirectoryId" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateInstance", + "connect:DescribeInstance", + "connect:UpdateInstanceAttribute", + "connect:TagResource", + "ds:CheckAlias", + "ds:CreateAlias", + "ds:AuthorizeApplication", + "ds:UnauthorizeApplication", + "ds:CreateIdentityPoolDirectory", + "ds:CreateDirectory", + "ds:DescribeDirectories", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy", + "logs:CreateLogGroup" + ] + }, + "read": { + "permissions": [ + "connect:DescribeInstance", + "connect:ListInstanceAttributes", + "ds:DescribeDirectories" + ] + }, + "update": { + "permissions": [ + "connect:ListInstanceAttributes", + "connect:UpdateInstanceAttribute", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteInstance", + "connect:DescribeInstance", + "connect:UntagResource", + "ds:DeleteDirectory", + "ds:UnauthorizeApplication", + "ds:DescribeDirectories" + ] + }, + "list": { + "permissions": [ + "connect:ListInstances", + "connect:ListInstanceAttributes", + "ds:DescribeDirectories" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/instancestorageconfig.json b/internal/aws/cfn/schemas/aws/connect/instancestorageconfig.json new file mode 100644 index 00000000..05c37f52 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/instancestorageconfig.json @@ -0,0 +1,262 @@ +{ + "typeName": "AWS::Connect::InstanceStorageConfig", + "description": "Resource Type definition for AWS::Connect::InstanceStorageConfig", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "KinesisStreamArn": { + "description": "An ARN is a unique AWS resource identifier.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:kinesis:[-a-z0-9]*:[0-9]{12}:stream/[-a-zA-Z0-9_.]*$" + }, + "FirehoseDeliveryStreamArn": { + "description": "An ARN is a unique AWS resource identifier.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:firehose:[-a-z0-9]*:[0-9]{12}:deliverystream/[-a-zA-Z0-9_.]*$" + }, + "AssociationId": { + "description": "An associationID is automatically generated when a storage config is associated with an instance", + "type": "string", + "pattern": "^[-a-z0-9]*$", + "minLength": 1, + "maxLength": 100 + }, + "InstanceStorageResourceType": { + "description": "Specifies the type of storage resource available for the instance", + "type": "string", + "enum": [ + "CHAT_TRANSCRIPTS", + "CALL_RECORDINGS", + "SCHEDULED_REPORTS", + "MEDIA_STREAMS", + "CONTACT_TRACE_RECORDS", + "AGENT_EVENTS" + ] + }, + "StorageType": { + "description": "Specifies the storage type to be associated with the instance", + "type": "string", + "enum": [ + "S3", + "KINESIS_VIDEO_STREAM", + "KINESIS_STREAM", + "KINESIS_FIREHOSE" + ] + }, + "BucketName": { + "description": "A name for the S3 Bucket", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Hours": { + "description": "Number of hours", + "type": "number" + }, + "Prefix": { + "description": "Prefixes are used to infer logical hierarchy", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "EncryptionType": { + "description": "Specifies default encryption using AWS KMS-Managed Keys", + "type": "string", + "enum": [ + "KMS" + ] + }, + "KeyId": { + "description": "Specifies the encryption key id", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "EncryptionConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "EncryptionType": { + "$ref": "#/definitions/EncryptionType" + }, + "KeyId": { + "$ref": "#/definitions/KeyId" + } + }, + "required": [ + "EncryptionType", + "KeyId" + ] + }, + "S3Config": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketName": { + "$ref": "#/definitions/BucketName" + }, + "BucketPrefix": { + "$ref": "#/definitions/Prefix" + }, + "EncryptionConfig": { + "$ref": "#/definitions/EncryptionConfig" + } + }, + "required": [ + "BucketName", + "BucketPrefix" + ] + }, + "KinesisVideoStreamConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Prefix": { + "$ref": "#/definitions/Prefix" + }, + "RetentionPeriodHours": { + "$ref": "#/definitions/Hours" + }, + "EncryptionConfig": { + "$ref": "#/definitions/EncryptionConfig" + } + }, + "required": [ + "Prefix", + "RetentionPeriodHours", + "EncryptionConfig" + ] + }, + "KinesisStreamConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "StreamArn": { + "$ref": "#/definitions/KinesisStreamArn" + } + }, + "required": [ + "StreamArn" + ] + }, + "KinesisFirehoseConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "FirehoseArn": { + "$ref": "#/definitions/FirehoseDeliveryStreamArn" + } + }, + "required": [ + "FirehoseArn" + ] + } + }, + "properties": { + "InstanceArn": { + "description": "Connect Instance ID with which the storage config will be associated", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "ResourceType": { + "$ref": "#/definitions/InstanceStorageResourceType" + }, + "AssociationId": { + "$ref": "#/definitions/AssociationId" + }, + "StorageType": { + "$ref": "#/definitions/StorageType" + }, + "S3Config": { + "$ref": "#/definitions/S3Config" + }, + "KinesisVideoStreamConfig": { + "$ref": "#/definitions/KinesisVideoStreamConfig" + }, + "KinesisStreamConfig": { + "$ref": "#/definitions/KinesisStreamConfig" + }, + "KinesisFirehoseConfig": { + "$ref": "#/definitions/KinesisFirehoseConfig" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "InstanceArn", + "ResourceType", + "StorageType" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/AssociationId" + ], + "createOnlyProperties": [ + "/properties/InstanceArn", + "/properties/ResourceType" + ], + "primaryIdentifier": [ + "/properties/InstanceArn", + "/properties/AssociationId", + "/properties/ResourceType" + ], + "handlers": { + "create": { + "permissions": [ + "connect:AssociateInstanceStorageConfig", + "connect:DescribeInstance", + "ds:DescribeDirectories", + "s3:GetBucketAcl", + "s3:GetBucketLocation", + "iam:PutRolePolicy", + "kinesis:DescribeStream", + "kms:DescribeKey", + "kms:CreateGrant", + "firehose:DescribeDeliveryStream" + ] + }, + "read": { + "permissions": [ + "connect:DescribeInstanceStorageConfig", + "connect:ListInstanceStorageConfigs", + "connect:DescribeInstance", + "ds:DescribeDirectories", + "s3:GetBucketAcl", + "s3:GetBucketLocation" + ] + }, + "update": { + "permissions": [ + "connect:UpdateInstanceStorageConfig", + "ds:DescribeDirectories", + "s3:GetBucketAcl", + "s3:GetBucketLocation", + "kinesis:DescribeStream", + "iam:PutRolePolicy", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:RetireGrant", + "firehose:DescribeDeliveryStream" + ] + }, + "delete": { + "permissions": [ + "connect:DisassociateInstanceStorageConfig", + "connect:DescribeInstance", + "s3:GetBucketAcl", + "s3:GetBucketLocation", + "kms:RetireGrant" + ] + }, + "list": { + "permissions": [ + "connect:DescribeInstance", + "connect:ListInstanceStorageConfigs", + "ds:DescribeDirectories" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/integrationassociation.json b/internal/aws/cfn/schemas/aws/connect/integrationassociation.json new file mode 100644 index 00000000..acc7a596 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/integrationassociation.json @@ -0,0 +1,147 @@ +{ + "typeName": "AWS::Connect::IntegrationAssociation", + "description": "Resource Type definition for AWS::Connect::IntegrationAssociation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "IntegrationArn": { + "description": "ARN of Integration being associated with the instance", + "type": "string", + "minLength": 1, + "maxLength": 140 + }, + "IntegrationType": { + "description": "Specifies the integration type to be associated with the instance", + "type": "string", + "enum": [ + "LEX_BOT", + "LAMBDA_FUNCTION", + "APPLICATION" + ] + }, + "InstanceId": { + "description": "Amazon Connect instance identifier", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 100 + }, + "IntegrationAssociationId": { + "description": "Identifier of the association with Connect Instance", + "type": "string", + "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9])*$" + } + }, + "properties": { + "IntegrationAssociationId": { + "$ref": "#/definitions/IntegrationAssociationId" + }, + "InstanceId": { + "$ref": "#/definitions/InstanceId" + }, + "IntegrationArn": { + "$ref": "#/definitions/IntegrationArn" + }, + "IntegrationType": { + "$ref": "#/definitions/IntegrationType" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "InstanceId", + "IntegrationType", + "IntegrationArn" + ], + "readOnlyProperties": [ + "/properties/IntegrationAssociationId" + ], + "createOnlyProperties": [ + "/properties/InstanceId", + "/properties/IntegrationArn", + "/properties/IntegrationType" + ], + "primaryIdentifier": [ + "/properties/InstanceId", + "/properties/IntegrationType", + "/properties/IntegrationArn" + ], + "handlers": { + "create": { + "permissions": [ + "connect:DescribeInstance", + "ds:DescribeDirectories", + "app-integrations:CreateEventIntegrationAssociation", + "mobiletargeting:GetApp", + "cases:GetDomain", + "wisdom:GetAssistant", + "wisdom:GetKnowledgeBase", + "wisdom:TagResource", + "voiceid:DescribeDomain", + "events:PutTargets", + "events:PutRule", + "connect:AssociateBot", + "connect:AssociateLambdaFunction", + "connect:CreateIntegrationAssociation", + "connect:ListBots", + "connect:ListLambdaFunctions", + "connect:ListIntegrationAssociations", + "lambda:addPermission", + "lex:GetBot", + "lex:DescribeBotAlias", + "lex:CreateResourcePolicy", + "lex:UpdateResourcePolicy", + "lex:CreateResourcePolicyStatement", + "lambda:AddPermission", + "app-integrations:GetApplication", + "iam:AttachRolePolicy", + "iam:CreateServiceLinkedRole", + "iam:GetRolePolicy", + "iam:PutRolePolicy" + ] + }, + "read": { + "permissions": [ + "connect:ListBots", + "connect:ListLambdaFunctions", + "connect:ListIntegrationAssociations" + ] + }, + "update": { + "permissions": [] + }, + "delete": { + "permissions": [ + "connect:DescribeInstance", + "ds:DescribeDirectories", + "app-integrations:DeleteEventIntegrationAssociation", + "events:ListTargetsByRule", + "events:RemoveTargets", + "events:DeleteRule", + "connect:DisassociateBot", + "connect:DisassociateLambdaFunction", + "connect:DeleteIntegrationAssociation", + "connect:ListBots", + "connect:ListLambdaFunctions", + "connect:ListIntegrationAssociations", + "lex:DeleteResourcePolicy", + "lex:DeleteResourcePolicyStatement", + "lambda:RemovePermission", + "iam:GetRolePolicy", + "iam:DeleteRolePolicy", + "iam:PutRolePolicy" + ] + }, + "list": { + "permissions": [ + "connect:ListBots", + "connect:ListLambdaFunctions", + "connect:ListIntegrationAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/phonenumber.json b/internal/aws/cfn/schemas/aws/connect/phonenumber.json new file mode 100644 index 00000000..74c850d6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/phonenumber.json @@ -0,0 +1,156 @@ +{ + "typeName": "AWS::Connect::PhoneNumber", + "description": "Resource Type definition for AWS::Connect::PhoneNumber", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "TargetArn": { + "description": "The ARN of the target the phone number is claimed to.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:(instance|traffic-distribution-group)/[-a-zA-Z0-9]*$" + }, + "PhoneNumberArn": { + "description": "The phone number ARN", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:phone-number/[-a-zA-Z0-9]*$" + }, + "Description": { + "description": "The description of the phone number.", + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "Type": { + "description": "The phone number type", + "type": "string", + "pattern": "TOLL_FREE|DID|UIFN|SHARED|THIRD_PARTY_DID|THIRD_PARTY_TF|SHORT_CODE" + }, + "CountryCode": { + "description": "The phone number country code.", + "type": "string", + "pattern": "^[A-Z]{2}" + }, + "Prefix": { + "description": "The phone number prefix.", + "type": "string", + "pattern": "^\\+[0-9]{1,15}" + }, + "Address": { + "description": "The phone number e164 address.", + "type": "string", + "pattern": "^\\+[0-9]{2,15}" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "One or more tags.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SourcePhoneNumberArn": { + "description": "The source phone number arn.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "TargetArn" + ], + "handlers": { + "create": { + "permissions": [ + "connect:ClaimPhoneNumber", + "connect:SearchAvailablePhoneNumbers", + "connect:DescribePhoneNumber", + "connect:TagResource", + "connect:ImportPhoneNumber", + "sms-voice:DescribePhoneNumbers" + ] + }, + "read": { + "permissions": [ + "connect:DescribePhoneNumber" + ] + }, + "delete": { + "permissions": [ + "connect:ReleasePhoneNumber", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdatePhoneNumber", + "connect:UpdatePhoneNumberMetadata", + "connect:DescribePhoneNumber", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "TargetArn": { + "$ref": "resource-schema.json#/properties/TargetArn" + } + }, + "required": [ + "TargetArn" + ] + }, + "permissions": [ + "connect:ListPhoneNumbersV2" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/PhoneNumberArn" + ], + "readOnlyProperties": [ + "/properties/PhoneNumberArn", + "/properties/Address" + ], + "writeOnlyProperties": [ + "/properties/Prefix" + ], + "createOnlyProperties": [ + "/properties/Type", + "/properties/CountryCode", + "/properties/Prefix", + "/properties/SourcePhoneNumberArn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/connect/prompt.json b/internal/aws/cfn/schemas/aws/connect/prompt.json new file mode 100644 index 00000000..60820049 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/prompt.json @@ -0,0 +1,134 @@ +{ + "typeName": "AWS::Connect::Prompt", + "description": "Resource Type definition for AWS::Connect::Prompt", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "Name": { + "description": "The name of the prompt.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "description": "The description of the prompt.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "S3Uri": { + "description": "S3 URI of the customer's audio file for creating prompts resource..", + "type": "string", + "minLength": 1, + "maxLength": 2000, + "pattern": "s3://\\S+/.+|https://\\S+\\.s3(\\.\\S+)?\\.amazonaws\\.com/\\S+" + }, + "PromptArn": { + "description": "The Amazon Resource Name (ARN) for the prompt.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/prompt/[-a-zA-Z0-9]*$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "InstanceArn", + "Name" + ], + "readOnlyProperties": [ + "/properties/PromptArn" + ], + "primaryIdentifier": [ + "/properties/PromptArn" + ], + "writeOnlyProperties": [ + "/properties/S3Uri" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreatePrompt", + "connect:TagResource", + "s3:GetObject", + "kms:Decrypt", + "s3:GetObjectAcl" + ] + }, + "read": { + "permissions": [ + "connect:DescribePrompt" + ] + }, + "update": { + "permissions": [ + "connect:UpdatePrompt", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "delete": { + "permissions": [ + "connect:DeletePrompt" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListPrompts" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/queue.json b/internal/aws/cfn/schemas/aws/connect/queue.json new file mode 100644 index 00000000..1e94f9f8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/queue.json @@ -0,0 +1,219 @@ +{ + "typeName": "AWS::Connect::Queue", + "description": "Resource Type definition for AWS::Connect::Queue", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "OutboundCallerIdName": { + "description": "The caller ID name.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "OutboundCallerIdNumberArn": { + "description": "The caller ID number.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:phone-number/[-a-zA-Z0-9]*$" + }, + "OutboundFlowArn": { + "description": "The outbound whisper flow to be used during an outbound call.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 500 + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "$ref": "#/definitions/Key" + }, + "Value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + }, + "OutboundCallerConfig": { + "description": "The outbound caller ID name, number, and outbound whisper flow.", + "type": "object", + "additionalProperties": false, + "properties": { + "OutboundCallerIdName": { + "$ref": "#/definitions/OutboundCallerIdName" + }, + "OutboundCallerIdNumberArn": { + "$ref": "#/definitions/OutboundCallerIdNumberArn" + }, + "OutboundFlowArn": { + "$ref": "#/definitions/OutboundFlowArn" + } + } + }, + "QuickConnectArn": { + "description": "The Amazon Resource Name (ARN) for the quick connect.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/transfer-destination/[-a-zA-Z0-9]*$" + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "Description": { + "description": "The description of the queue.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "HoursOfOperationArn": { + "description": "The identifier for the hours of operation.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/operating-hours/[-a-zA-Z0-9]*$" + }, + "MaxContacts": { + "description": "The maximum number of contacts that can be in the queue before it is considered full.", + "type": "integer", + "minimum": 0 + }, + "Name": { + "description": "The name of the queue.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "OutboundCallerConfig": { + "description": "The outbound caller ID name, number, and outbound whisper flow.", + "$ref": "#/definitions/OutboundCallerConfig" + }, + "QueueArn": { + "description": "The Amazon Resource Name (ARN) for the queue.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$" + }, + "Status": { + "description": "The status of the queue.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "QuickConnectArns": { + "description": "The quick connects available to agents who are working the queue.", + "type": "array", + "minItems": 1, + "maxItems": 50, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/QuickConnectArn" + } + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Type": { + "type": "string", + "description": "The type of queue.", + "enum": [ + "STANDARD", + "AGENT" + ] + } + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateQueue", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeQueue", + "connect:ListQueueQuickConnects" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteQueue", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateQueueHoursOfOperation", + "connect:UpdateQueueMaxContacts", + "connect:UpdateQueueName", + "connect:UpdateQueueOutboundCallerConfig", + "connect:UpdateQueueStatus", + "connect:AssociateQueueQuickConnects", + "connect:DisassociateQueueQuickConnects", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListQueues", + "connect:ListQueueQuickConnects" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/QueueArn" + ], + "readOnlyProperties": [ + "/properties/QueueArn", + "/properties/Type" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "InstanceArn", + "HoursOfOperationArn", + "Name" + ] +} diff --git a/internal/aws/cfn/schemas/aws/connect/quickconnect.json b/internal/aws/cfn/schemas/aws/connect/quickconnect.json new file mode 100644 index 00000000..68176af4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/quickconnect.json @@ -0,0 +1,237 @@ +{ + "typeName": "AWS::Connect::QuickConnect", + "description": "Resource Type definition for AWS::Connect::QuickConnect", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "PhoneNumber": { + "description": "The phone number in E.164 format.", + "type": "string", + "pattern": "^\\+[1-9]\\d{1,14}$" + }, + "ContactFlowArn": { + "description": "The identifier of the contact flow.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$" + }, + "QueueArn": { + "description": "The identifier for the queue.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$" + }, + "UserArn": { + "description": "The identifier of the user.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent/[-a-zA-Z0-9]*$" + }, + "PhoneNumberQuickConnectConfig": { + "description": "The phone configuration. This is required only if QuickConnectType is PHONE_NUMBER.", + "type": "object", + "additionalProperties": false, + "properties": { + "PhoneNumber": { + "$ref": "#/definitions/PhoneNumber" + } + }, + "required": [ + "PhoneNumber" + ] + }, + "QueueQuickConnectConfig": { + "description": "The queue configuration. This is required only if QuickConnectType is QUEUE.", + "type": "object", + "additionalProperties": false, + "properties": { + "ContactFlowArn": { + "$ref": "#/definitions/ContactFlowArn" + }, + "QueueArn": { + "$ref": "#/definitions/QueueArn" + } + }, + "required": [ + "ContactFlowArn", + "QueueArn" + ] + }, + "UserQuickConnectConfig": { + "description": "The user configuration. This is required only if QuickConnectType is USER.", + "type": "object", + "additionalProperties": false, + "properties": { + "ContactFlowArn": { + "$ref": "#/definitions/ContactFlowArn" + }, + "UserArn": { + "$ref": "#/definitions/UserArn" + } + }, + "required": [ + "ContactFlowArn", + "UserArn" + ] + }, + "QuickConnectConfig": { + "description": "Configuration settings for the quick connect.", + "type": "object", + "additionalProperties": false, + "properties": { + "QuickConnectType": { + "$ref": "#/definitions/QuickConnectType" + }, + "PhoneConfig": { + "$ref": "#/definitions/PhoneNumberQuickConnectConfig" + }, + "QueueConfig": { + "$ref": "#/definitions/QueueQuickConnectConfig" + }, + "UserConfig": { + "$ref": "#/definitions/UserQuickConnectConfig" + } + }, + "required": [ + "QuickConnectType" + ] + }, + "QuickConnectType": { + "description": "The type of quick connect. In the Amazon Connect console, when you create a quick connect, you are prompted to assign one of the following types: Agent (USER), External (PHONE_NUMBER), or Queue (QUEUE).", + "type": "string", + "enum": [ + "PHONE_NUMBER", + "QUEUE", + "USER" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "Name": { + "description": "The name of the quick connect.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "description": "The description of the quick connect.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "QuickConnectConfig": { + "description": "Configuration settings for the quick connect.", + "$ref": "#/definitions/QuickConnectConfig" + }, + "QuickConnectArn": { + "description": "The Amazon Resource Name (ARN) for the quick connect.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/transfer-destination/[-a-zA-Z0-9]*$" + }, + "Tags": { + "type": "array", + "maxItems": 200, + "uniqueItems": true, + "insertionOrder": false, + "description": "One or more tags.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "QuickConnectType": { + "description": "The type of quick connect. In the Amazon Connect console, when you create a quick connect, you are prompted to assign one of the following types: Agent (USER), External (PHONE_NUMBER), or Queue (QUEUE).", + "type": "string", + "enum": [ + "PHONE_NUMBER", + "QUEUE", + "USER" + ] + } + }, + "required": [ + "Name", + "InstanceArn", + "QuickConnectConfig" + ], + "handlers": { + "create": { + "permissions": [ + "connect:CreateQuickConnect", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeQuickConnect" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteQuickConnect", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateQuickConnectName", + "connect:UpdateQuickConnectConfig", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListQuickConnects" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/QuickConnectArn" + ], + "readOnlyProperties": [ + "/properties/QuickConnectArn", + "/properties/QuickConnectType" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/routingprofile.json b/internal/aws/cfn/schemas/aws/connect/routingprofile.json new file mode 100644 index 00000000..e58af0fb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/routingprofile.json @@ -0,0 +1,277 @@ +{ + "typeName": "AWS::Connect::RoutingProfile", + "description": "Resource Type definition for AWS::Connect::RoutingProfile", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Channel": { + "description": "The channels that agents can handle in the Contact Control Panel (CCP).", + "type": "string", + "enum": [ + "VOICE", + "CHAT", + "TASK" + ] + }, + "Concurrency": { + "description": "The number of contacts an agent can have on a channel simultaneously.", + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "BehaviorType": { + "description": "Specifies the other channels that can be routed to an agent handling their current channel.", + "type": "string", + "enum": [ + "ROUTE_CURRENT_CHANNEL_ONLY", + "ROUTE_ANY_CHANNEL" + ] + }, + "CrossChannelBehavior": { + "description": "Defines the cross-channel routing behavior that allows an agent working on a contact in one channel to be offered a contact from a different channel.", + "type": "object", + "additionalProperties": false, + "properties": { + "BehaviorType": { + "$ref": "#/definitions/BehaviorType" + } + }, + "required": [ + "BehaviorType" + ] + }, + "MediaConcurrency": { + "description": "Contains information about which channels are supported, and how many contacts an agent can have on a channel simultaneously.", + "type": "object", + "additionalProperties": false, + "properties": { + "Channel": { + "$ref": "#/definitions/Channel" + }, + "Concurrency": { + "$ref": "#/definitions/Concurrency" + }, + "CrossChannelBehavior": { + "$ref": "#/definitions/CrossChannelBehavior" + } + }, + "required": [ + "Channel", + "Concurrency" + ] + }, + "Delay": { + "description": "The delay, in seconds, a contact should wait in the queue before they are routed to an available agent.", + "type": "integer", + "minimum": 0, + "maximum": 9999 + }, + "Priority": { + "description": "The order in which contacts are to be handled for the queue.", + "type": "integer", + "minimum": 1, + "maximum": 99 + }, + "QueueArn": { + "description": "The Amazon Resource Name (ARN) for the queue.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$" + }, + "RoutingProfileQueueReference": { + "description": "Contains the channel and queue identifier for a routing profile.", + "type": "object", + "additionalProperties": false, + "properties": { + "Channel": { + "$ref": "#/definitions/Channel" + }, + "QueueArn": { + "$ref": "#/definitions/QueueArn" + } + }, + "required": [ + "Channel", + "QueueArn" + ] + }, + "RoutingProfileQueueConfig": { + "description": "Contains information about the queue and channel for which priority and delay can be set.", + "type": "object", + "additionalProperties": false, + "properties": { + "Delay": { + "$ref": "#/definitions/Delay" + }, + "Priority": { + "$ref": "#/definitions/Priority" + }, + "QueueReference": { + "$ref": "#/definitions/RoutingProfileQueueReference" + } + }, + "required": [ + "Delay", + "Priority", + "QueueReference" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "Name": { + "description": "The name of the routing profile.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "description": "The description of the routing profile.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "MediaConcurrencies": { + "description": "The channels agents can handle in the Contact Control Panel (CCP) for this routing profile.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MediaConcurrency" + } + }, + "DefaultOutboundQueueArn": { + "description": "The identifier of the default outbound queue for this routing profile.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$" + }, + "RoutingProfileArn": { + "description": "The Amazon Resource Name (ARN) of the routing profile.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/routing-profile/[-a-zA-Z0-9]*$" + }, + "QueueConfigs": { + "description": "The queues to associate with this routing profile.", + "type": "array", + "minItems": 1, + "maxItems": 10, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RoutingProfileQueueConfig" + } + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AgentAvailabilityTimer": { + "type": "string", + "description": "Whether agents with this routing profile will have their routing order calculated based on longest idle time or time since their last inbound contact.", + "enum": [ + "TIME_SINCE_LAST_ACTIVITY", + "TIME_SINCE_LAST_INBOUND" + ] + } + }, + "required": [ + "InstanceArn", + "Name", + "Description", + "MediaConcurrencies", + "DefaultOutboundQueueArn" + ], + "handlers": { + "create": { + "permissions": [ + "connect:CreateRoutingProfile", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeRoutingProfile", + "connect:ListRoutingProfileQueues" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteRoutingProfile", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:AssociateRoutingProfileQueues", + "connect:DisassociateRoutingProfileQueues", + "connect:UpdateRoutingProfileConcurrency", + "connect:UpdateRoutingProfileName", + "connect:UpdateRoutingProfileDefaultOutboundQueue", + "connect:UpdateRoutingProfileQueues", + "connect:TagResource", + "connect:UntagResource", + "connect:ListRoutingProfileQueues", + "connect:UpdateRoutingProfileAgentAvailabilityTimer" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListRoutingProfiles", + "connect:ListRoutingProfileQueues" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/RoutingProfileArn" + ], + "readOnlyProperties": [ + "/properties/RoutingProfileArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/rule.json b/internal/aws/cfn/schemas/aws/connect/rule.json new file mode 100644 index 00000000..d729daa4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/rule.json @@ -0,0 +1,515 @@ +{ + "typeName": "AWS::Connect::Rule", + "description": "Resource Type definition for AWS:Connect::Rule", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "FieldValue": { + "description": "The value of the field.", + "type": "object", + "properties": { + "StringValue": { + "type": "string" + }, + "BooleanValue": { + "type": "boolean" + }, + "DoubleValue": { + "type": "number" + }, + "EmptyValue": { + "type": "object" + } + }, + "additionalProperties": false + }, + "Field": { + "description": "The field of the case.", + "type": "object", + "properties": { + "Id": { + "description": "The Id of the field", + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "Value": { + "$ref": "#/definitions/FieldValue" + } + }, + "required": [ + "Id", + "Value" + ], + "additionalProperties": false + }, + "Fields": { + "description": "An array of case fields", + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Field" + }, + "minItems": 1, + "maxItems": 100 + }, + "UserArn": { + "description": "The Amazon Resource Name (ARN) of the user.", + "type": "string", + "pattern": "^$|arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent/[-a-zA-Z0-9]*$" + }, + "NotificationRecipientType": { + "description": "The type of notification recipient.", + "type": "object", + "properties": { + "UserTags": { + "description": "The collection of recipients who are identified by user tags", + "patternProperties": { + "^(?=.{1,128}$).+$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "UserArns": { + "description": "The list of recipients by user arns.", + "type": "array", + "minItems": 1, + "maxItems": 5, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/UserArn" + } + } + }, + "additionalProperties": false + }, + "Reference": { + "description": "A contact reference.", + "type": "object", + "properties": { + "Value": { + "type": "string", + "pattern": "^(/|https:)" + }, + "Type": { + "type": "string", + "enum": [ + "URL", + "ATTACHMENT", + "NUMBER", + "STRING", + "DATE", + "EMAIL" + ] + } + }, + "required": [ + "Value", + "Type" + ], + "additionalProperties": false + }, + "TaskAction": { + "description": "The definition of task action.", + "type": "object", + "properties": { + "Name": { + "description": "The name which appears in the agent's Contact Control Panel (CCP).", + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "Description": { + "description": "The description which appears in the agent's Contact Control Panel (CCP).", + "type": "string", + "minLength": 0, + "maxLength": 4096 + }, + "ContactFlowArn": { + "description": "The Amazon Resource Name (ARN) of the contact flow.", + "type": "string", + "pattern": "^$|arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$" + }, + "References": { + "description": "A formatted URL that is shown to an agent in the Contact Control Panel (CCP).", + "patternProperties": { + "^(?=.{1,4096}$).+$": { + "$ref": "#/definitions/Reference" + } + }, + "additionalProperties": false + } + }, + "required": [ + "Name", + "ContactFlowArn" + ], + "additionalProperties": false + }, + "EventBridgeAction": { + "description": "The definition for event bridge action.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the event bridge action.", + "type": "string", + "pattern": "^[a-zA-Z0-9._-]{1,100}$" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "AssignContactCategoryAction": { + "description": "The definition for assigning contact category action.", + "type": "object" + }, + "SendNotificationAction": { + "description": "The definition for sending notification action.", + "type": "object", + "properties": { + "DeliveryMethod": { + "description": "The means of delivery.", + "type": "string", + "enum": [ + "EMAIL" + ] + }, + "Subject": { + "description": "The subject of notification.", + "type": "string", + "minLength": 1, + "maxLength": 200 + }, + "Content": { + "description": "The content of notification.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ContentType": { + "description": "The type of content.", + "type": "string", + "enum": [ + "PLAIN_TEXT" + ] + }, + "Recipient": { + "$ref": "#/definitions/NotificationRecipientType" + } + }, + "required": [ + "DeliveryMethod", + "Content", + "Recipient", + "ContentType" + ], + "additionalProperties": false + }, + "CreateCaseAction": { + "description": "The definition for create case action.", + "type": "object", + "properties": { + "Fields": { + "$ref": "#/definitions/Fields" + }, + "TemplateId": { + "description": "The Id of template.", + "type": "string", + "minLength": 1, + "maxLength": 500 + } + }, + "required": [ + "Fields", + "TemplateId" + ], + "additionalProperties": false + }, + "UpdateCaseAction": { + "description": "The definition for update case action.", + "type": "object", + "properties": { + "Fields": { + "$ref": "#/definitions/Fields" + } + }, + "required": [ + "Fields" + ], + "additionalProperties": false + }, + "EndAssociatedTasksAction": { + "description": "The definition for ending associated task action.", + "type": "object" + }, + "AssignContactCategoryActions": { + "description": "This action will assign contact category when a rule is triggered.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AssignContactCategoryAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "EventBridgeActions": { + "description": "This action will send event bridge notification when a rule is triggered.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EventBridgeAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "RuleTriggerEventSource": { + "description": "The event source that will trigger the rule.", + "type": "object", + "properties": { + "EventSourceName": { + "description": "The name of event source.", + "type": "string", + "enum": [ + "OnContactEvaluationSubmit", + "OnPostCallAnalysisAvailable", + "OnRealTimeCallAnalysisAvailable", + "OnRealTimeChatAnalysisAvailable", + "OnPostChatAnalysisAvailable", + "OnZendeskTicketCreate", + "OnZendeskTicketStatusUpdate", + "OnSalesforceCaseCreate", + "OnMetricDataUpdate", + "OnCaseCreate", + "OnCaseUpdate" + ] + }, + "IntegrationAssociationArn": { + "description": "The Amazon Resource Name (ARN) for the AppIntegration association.", + "type": "string", + "pattern": "^$|arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/integration-association/[-a-zA-Z0-9]*$" + } + }, + "required": [ + "EventSourceName" + ], + "additionalProperties": false + }, + "TaskActions": { + "description": "This action will generate a task when a rule is triggered.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TaskAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "SendNotificationActions": { + "description": "The action will send notification when a rule is triggered.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SendNotificationAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "CreateCaseActions": { + "description": "This action will create a case when a rule is triggered.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/CreateCaseAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "UpdateCaseActions": { + "description": "This action will update a case when a rule is triggered.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/UpdateCaseAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "EndAssociatedTasksActions": { + "description": "This action will end associated tasks when a rule is triggered.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EndAssociatedTasksAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "Actions": { + "description": "The list of actions that will be executed when a rule is triggered.", + "type": "object", + "properties": { + "AssignContactCategoryActions": { + "$ref": "#/definitions/AssignContactCategoryActions" + }, + "EventBridgeActions": { + "$ref": "#/definitions/EventBridgeActions" + }, + "TaskActions": { + "$ref": "#/definitions/TaskActions" + }, + "SendNotificationActions": { + "$ref": "#/definitions/SendNotificationActions" + }, + "CreateCaseActions": { + "$ref": "#/definitions/CreateCaseActions" + }, + "UpdateCaseActions": { + "$ref": "#/definitions/UpdateCaseActions" + }, + "EndAssociatedTasksActions": { + "$ref": "#/definitions/EndAssociatedTasksActions" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that's 1 to 256 characters in length.", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Name": { + "description": "The name of the rule.", + "type": "string", + "pattern": "^[a-zA-Z0-9._-]{1,200}$" + }, + "RuleArn": { + "description": "The Amazon Resource Name (ARN) of the rule.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/rule/[-a-zA-Z0-9]*$" + }, + "InstanceArn": { + "description": "The Amazon Resource Name (ARN) of the instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "TriggerEventSource": { + "description": "The event source that triggers the rule.", + "$ref": "#/definitions/RuleTriggerEventSource" + }, + "Function": { + "description": "The conditions of a rule.", + "type": "string" + }, + "Actions": { + "description": "The list of actions that will be executed when a rule is triggered.", + "$ref": "#/definitions/Actions" + }, + "PublishStatus": { + "description": "The publish status of a rule, either draft or published.", + "type": "string", + "enum": [ + "DRAFT", + "PUBLISHED" + ] + }, + "Tags": { + "description": "One or more tags.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "Name", + "InstanceArn", + "TriggerEventSource", + "Function", + "Actions", + "PublishStatus" + ], + "tagging": { + "taggable": true, + "tagOnCreate": false, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateRule", + "cases:GetTemplate", + "cases:ListFields", + "cases:ListFieldOptions" + ] + }, + "read": { + "permissions": [ + "connect:DescribeRule" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteRule", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateRule", + "cases:GetTemplate", + "cases:ListFields", + "cases:ListFieldOptions", + "connect:TagResource", + "connect:UntagResource" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/RuleArn" + ], + "readOnlyProperties": [ + "/properties/RuleArn" + ], + "createOnlyProperties": [ + "/properties/TriggerEventSource", + "/properties/InstanceArn" + ], + "replacementStrategy": "delete_then_create" +} diff --git a/internal/aws/cfn/schemas/aws/connect/securitykey.json b/internal/aws/cfn/schemas/aws/connect/securitykey.json new file mode 100644 index 00000000..ebc60e62 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/securitykey.json @@ -0,0 +1,85 @@ +{ + "typeName": "AWS::Connect::SecurityKey", + "description": "Resource Type definition for AWS::Connect::SecurityKey", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Key": { + "description": "A valid security key in PEM format.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "InstanceId": { + "description": "Amazon Connect instance identifier", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 100 + }, + "AssociationId": { + "description": "An associationID is automatically generated when a storage config is associated with an instance", + "type": "string", + "pattern": "^[-a-z0-9]*$", + "minLength": 1, + "maxLength": 100 + } + }, + "properties": { + "Key": { + "$ref": "#/definitions/Key" + }, + "InstanceId": { + "$ref": "#/definitions/InstanceId" + }, + "AssociationId": { + "$ref": "#/definitions/AssociationId" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "Key", + "InstanceId" + ], + "readOnlyProperties": [ + "/properties/AssociationId" + ], + "createOnlyProperties": [ + "/properties/InstanceId", + "/properties/Key" + ], + "primaryIdentifier": [ + "/properties/InstanceId", + "/properties/AssociationId" + ], + "handlers": { + "create": { + "permissions": [ + "connect:AssociateSecurityKey" + ] + }, + "read": { + "permissions": [ + "connect:ListSecurityKeys" + ] + }, + "update": { + "permissions": [] + }, + "delete": { + "permissions": [ + "connect:DisassociateSecurityKey" + ] + }, + "list": { + "permissions": [ + "connect:ListSecurityKeys" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/tasktemplate.json b/internal/aws/cfn/schemas/aws/connect/tasktemplate.json new file mode 100644 index 00000000..891d65c2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/tasktemplate.json @@ -0,0 +1,337 @@ +{ + "typeName": "AWS::Connect::TaskTemplate", + "description": "Resource Type definition for AWS::Connect::TaskTemplate.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Status": { + "description": "The status of the task template", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "FieldType": { + "description": "The type of the task template's field", + "type": "string", + "enum": [ + "NAME", + "DESCRIPTION", + "SCHEDULED_TIME", + "QUICK_CONNECT", + "URL", + "NUMBER", + "TEXT", + "TEXT_AREA", + "DATE_TIME", + "BOOLEAN", + "SINGLE_SELECT", + "EMAIL" + ] + }, + "FieldIdentifier": { + "description": "the identifier (name) for the task template field", + "type": "object", + "properties": { + "Name": { + "description": "The name of the task template field", + "type": "string", + "minLength": 1, + "maxLength": 100 + } + }, + "additionalProperties": false, + "required": [ + "Name" + ] + }, + "FieldOption": { + "description": "Single select field identifier", + "type": "string", + "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9_.,\\s-]*[A-Za-z0-9_.,-])?$", + "minLength": 1, + "maxLength": 100 + }, + "Field": { + "description": "A task template field object.", + "type": "object", + "properties": { + "Id": { + "$ref": "#/definitions/FieldIdentifier" + }, + "Description": { + "description": "The description of the task template's field", + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "Type": { + "$ref": "#/definitions/FieldType" + }, + "SingleSelectOptions": { + "description": "list of field options to be used with single select", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/FieldOption" + } + } + }, + "additionalProperties": false, + "required": [ + "Id", + "Type" + ] + }, + "InvisibleFieldInfo": { + "description": "Invisible field info", + "type": "object", + "properties": { + "Id": { + "$ref": "#/definitions/FieldIdentifier" + } + }, + "additionalProperties": false, + "required": [ + "Id" + ] + }, + "InvisibleTaskTemplateFields": { + "description": "The list of the task template's invisible fields", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/InvisibleFieldInfo" + } + }, + "ReadOnlyFieldInfo": { + "description": "ReadOnly field info", + "type": "object", + "properties": { + "Id": { + "$ref": "#/definitions/FieldIdentifier" + } + }, + "additionalProperties": false, + "required": [ + "Id" + ] + }, + "ReadOnlyTaskTemplateFields": { + "description": "The list of the task template's read only fields", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/ReadOnlyFieldInfo" + } + }, + "RequiredFieldInfo": { + "description": "Required field info", + "type": "object", + "properties": { + "Id": { + "$ref": "#/definitions/FieldIdentifier" + } + }, + "additionalProperties": false, + "required": [ + "Id" + ] + }, + "RequiredTaskTemplateFields": { + "description": "The list of the task template's required fields", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/RequiredFieldInfo" + } + }, + "FieldValue": { + "description": "the default value for the task template's field", + "type": "string", + "minLength": 1, + "maxLength": 4096 + }, + "DefaultFieldValue": { + "description": "the default value for the task template's field", + "type": "object", + "properties": { + "Id": { + "$ref": "#/definitions/FieldIdentifier" + }, + "DefaultValue": { + "$ref": "#/definitions/FieldValue" + } + }, + "additionalProperties": false, + "required": [ + "Id", + "DefaultValue" + ] + }, + "ClientToken": { + "description": "the client token string in uuid format", + "type": "string", + "pattern": "^$|[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. . You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "description": "The identifier (arn) of the task template.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/task-template/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$" + }, + "InstanceArn": { + "description": "The identifier (arn) of the instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "Name": { + "description": "The name of the task template.", + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "Description": { + "description": "The description of the task template.", + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "ContactFlowArn": { + "description": "The identifier of the contact flow.", + "type": "string", + "pattern": "^$|arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$" + }, + "Constraints": { + "description": "The constraints for the task template", + "type": "object", + "additionalProperties": false, + "properties": { + "InvisibleFields": { + "$ref": "#/definitions/InvisibleTaskTemplateFields" + }, + "RequiredFields": { + "$ref": "#/definitions/RequiredTaskTemplateFields" + }, + "ReadOnlyFields": { + "$ref": "#/definitions/ReadOnlyTaskTemplateFields" + } + } + }, + "Defaults": { + "description": "", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/DefaultFieldValue" + } + }, + "Fields": { + "description": "The list of task template's fields", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/Field" + } + }, + "Status": { + "$ref": "#/definitions/Status" + }, + "ClientToken": { + "$ref": "#/definitions/ClientToken" + }, + "Tags": { + "description": "One or more tags.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "InstanceArn" + ], + "handlers": { + "create": { + "permissions": [ + "connect:CreateTaskTemplate", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:GetTaskTemplate" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListTaskTemplates" + ] + }, + "update": { + "permissions": [ + "connect:UpdateTaskTemplate", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteTaskTemplate", + "connect:UntagResource", + "connect:GetTaskTemplate" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": false, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/trafficdistributiongroup.json b/internal/aws/cfn/schemas/aws/connect/trafficdistributiongroup.json new file mode 100644 index 00000000..85c86dc7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/trafficdistributiongroup.json @@ -0,0 +1,140 @@ +{ + "typeName": "AWS::Connect::TrafficDistributionGroup", + "description": "Resource Type definition for AWS::Connect::TrafficDistributionGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance that has been replicated.", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov):connect:[a-z]{2}-[a-z]+-[0-9]{1}:[0-9]{1,20}:instance/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$", + "minLength": 1, + "maxLength": 250 + }, + "TrafficDistributionGroupArn": { + "description": "The identifier of the traffic distribution group.", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov):connect:[a-z]{2}-[a-z]+-[0-9]{1}:[0-9]{1,20}:traffic-distribution-group/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + }, + "Description": { + "description": "A description for the traffic distribution group.", + "type": "string", + "pattern": "(^[\\S].*[\\S]$)|(^[\\S]$)", + "minLength": 1, + "maxLength": 250 + }, + "Name": { + "description": "The name for the traffic distribution group.", + "type": "string", + "pattern": "(^[\\S].*[\\S]$)|(^[\\S]$)", + "minLength": 1, + "maxLength": 128 + }, + "Status": { + "description": "The status of the traffic distribution group.", + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "ACTIVE", + "CREATION_FAILED", + "PENDING_DELETION", + "DELETION_FAILED", + "UPDATE_IN_PROGRESS" + ] + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "One or more tags.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "IsDefault": { + "description": "If this is the default traffic distribution group.", + "type": "boolean" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "InstanceArn", + "Name" + ], + "readOnlyProperties": [ + "/properties/TrafficDistributionGroupArn", + "/properties/Status", + "/properties/IsDefault" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/TrafficDistributionGroupArn" + ], + "handlers": { + "create": { + "permissions": [ + "connect:CreateTrafficDistributionGroup", + "connect:DescribeTrafficDistributionGroup", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeTrafficDistributionGroup" + ] + }, + "update": { + "permissions": [ + "connect:TagResource", + "connect:UntagResource" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteTrafficDistributionGroup", + "connect:DescribeTrafficDistributionGroup", + "connect:UntagResource" + ] + }, + "list": { + "permissions": [ + "connect:ListTrafficDistributionGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/user.json b/internal/aws/cfn/schemas/aws/connect/user.json new file mode 100644 index 00000000..5a2dc22d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/user.json @@ -0,0 +1,310 @@ +{ + "typeName": "AWS::Connect::User", + "description": "Resource Type definition for AWS::Connect::User", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "FirstName": { + "description": "The first name. This is required if you are using Amazon Connect or SAML for identity management.", + "type": "string" + }, + "LastName": { + "description": "The last name. This is required if you are using Amazon Connect or SAML for identity management.", + "type": "string" + }, + "Email": { + "description": "The email address. If you are using SAML for identity management and include this parameter, an error is returned.", + "type": "string" + }, + "SecondaryEmail": { + "description": "The secondary email address. If you provide a secondary email, the user receives email notifications -- other than password reset notifications -- to this email address instead of to their primary email address.", + "type": "string", + "pattern": "(?=^.{0,265}$)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,63}" + }, + "Mobile": { + "description": "The mobile phone number.", + "type": "string", + "pattern": "^\\+[1-9]\\d{1,14}$" + }, + "SecurityProfileArn": { + "description": "The identifier of the security profile for the user.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/security-profile/[-a-zA-Z0-9]*$" + }, + "AfterContactWorkTimeLimit": { + "description": "The After Call Work (ACW) timeout setting, in seconds.", + "type": "integer", + "minimum": 0 + }, + "AutoAccept": { + "description": "The Auto accept setting.", + "type": "boolean" + }, + "DeskPhoneNumber": { + "description": "The phone number for the user's desk phone.", + "type": "string" + }, + "PhoneType": { + "description": "The phone type.", + "type": "string", + "enum": [ + "SOFT_PHONE", + "DESK_PHONE" + ] + }, + "UserIdentityInfo": { + "description": "Contains information about the identity of a user.", + "type": "object", + "additionalProperties": false, + "properties": { + "FirstName": { + "$ref": "#/definitions/FirstName" + }, + "LastName": { + "$ref": "#/definitions/LastName" + }, + "Email": { + "$ref": "#/definitions/Email" + }, + "SecondaryEmail": { + "$ref": "#/definitions/SecondaryEmail" + }, + "Mobile": { + "$ref": "#/definitions/Mobile" + } + } + }, + "UserPhoneConfig": { + "description": "Contains information about the phone configuration settings for a user.", + "type": "object", + "additionalProperties": false, + "properties": { + "AfterContactWorkTimeLimit": { + "$ref": "#/definitions/AfterContactWorkTimeLimit" + }, + "AutoAccept": { + "$ref": "#/definitions/AutoAccept" + }, + "DeskPhoneNumber": { + "$ref": "#/definitions/DeskPhoneNumber" + }, + "PhoneType": { + "$ref": "#/definitions/PhoneType" + } + }, + "required": [ + "PhoneType" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "UserProficiency": { + "description": "Proficiency of a user.", + "type": "object", + "additionalProperties": false, + "properties": { + "AttributeName": { + "$ref": "#/definitions/AttributeName" + }, + "AttributeValue": { + "$ref": "#/definitions/AttributeValue" + }, + "Level": { + "$ref": "#/definitions/Level" + } + }, + "required": [ + "AttributeName", + "AttributeValue", + "Level" + ] + }, + "AttributeName": { + "description": "The name of user's proficiency. You must use name of predefined attribute present in the Amazon Connect instance.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "AttributeValue": { + "description": "The value of user's proficiency. You must use value of predefined attribute present in the Amazon Connect instance.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Level": { + "description": "The level of the proficiency. The valid values are 1, 2, 3, 4 and 5.", + "type": "number", + "minimum": 1.0, + "maximum": 5.0 + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "DirectoryUserId": { + "description": "The identifier of the user account in the directory used for identity management.", + "type": "string" + }, + "HierarchyGroupArn": { + "description": "The identifier of the hierarchy group for the user.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent-group/[-a-zA-Z0-9]*$" + }, + "Username": { + "description": "The user name for the account.", + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "[a-zA-Z0-9\\_\\-\\.\\@]+" + }, + "Password": { + "description": "The password for the user account. A password is required if you are using Amazon Connect for identity management. Otherwise, it is an error to include a password.", + "type": "string", + "pattern": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d\\S]{8,64}$" + }, + "RoutingProfileArn": { + "description": "The identifier of the routing profile for the user.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/routing-profile/[-a-zA-Z0-9]*$" + }, + "IdentityInfo": { + "description": "The information about the identity of the user.", + "$ref": "#/definitions/UserIdentityInfo" + }, + "PhoneConfig": { + "description": "The phone settings for the user.", + "$ref": "#/definitions/UserPhoneConfig" + }, + "SecurityProfileArns": { + "type": "array", + "minItems": 1, + "maxItems": 10, + "uniqueItems": true, + "insertionOrder": false, + "description": "One or more security profile arns for the user", + "items": { + "$ref": "#/definitions/SecurityProfileArn" + } + }, + "UserArn": { + "description": "The Amazon Resource Name (ARN) for the user.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent/[-a-zA-Z0-9]*$" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "One or more tags.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UserProficiencies": { + "description": "One or more predefined attributes assigned to a user, with a level that indicates how skilled they are.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/UserProficiency" + } + } + }, + "required": [ + "InstanceArn", + "PhoneConfig", + "RoutingProfileArn", + "SecurityProfileArns", + "Username" + ], + "handlers": { + "create": { + "permissions": [ + "connect:CreateUser", + "connect:TagResource", + "connect:AssociateUserProficiencies" + ] + }, + "read": { + "permissions": [ + "connect:DescribeUser", + "connect:ListUserProficiencies" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteUser", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateUserIdentityInfo", + "connect:UpdateUserPhoneConfig", + "connect:UpdateUserRoutingProfile", + "connect:UpdateUserSecurityProfiles", + "connect:UpdateUserHierarchy", + "connect:TagResource", + "connect:UntagResource", + "connect:AssociateUserProficiencies", + "connect:DisassociateUserProficiencies", + "connect:UpdateUserProficiencies" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListUsers" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/UserArn" + ], + "readOnlyProperties": [ + "/properties/UserArn" + ], + "writeOnlyProperties": [ + "/properties/Password" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/userhierarchygroup.json b/internal/aws/cfn/schemas/aws/connect/userhierarchygroup.json new file mode 100644 index 00000000..c2d92586 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/userhierarchygroup.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::Connect::UserHierarchyGroup", + "description": "Resource Type definition for AWS::Connect::UserHierarchyGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "UserHierarchyGroupArn": { + "description": "The Amazon Resource Name (ARN) for the user hierarchy group.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent-group/[-a-zA-Z0-9]*$" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is maximum of 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "InstanceArn": { + "description": "The identifier of the Amazon Connect instance.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "UserHierarchyGroupArn": { + "description": "The Amazon Resource Name (ARN) for the user hierarchy group.", + "$ref": "#/definitions/UserHierarchyGroupArn" + }, + "ParentGroupArn": { + "description": "The Amazon Resource Name (ARN) for the parent user hierarchy group.", + "$ref": "#/definitions/UserHierarchyGroupArn" + }, + "Name": { + "description": "The name of the user hierarchy group.", + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "One or more tags.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "Name", + "InstanceArn" + ], + "handlers": { + "create": { + "permissions": [ + "connect:CreateUserHierarchyGroup", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeUserHierarchyGroup" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteUserHierarchyGroup", + "connect:UntagResource" + ] + }, + "update": { + "permissions": [ + "connect:UpdateUserHierarchyGroupName", + "connect:TagResource", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListUserHierarchyGroups" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/UserHierarchyGroupArn" + ], + "readOnlyProperties": [ + "/properties/UserHierarchyGroupArn" + ], + "createOnlyProperties": [ + "/properties/ParentGroupArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/connect/view.json b/internal/aws/cfn/schemas/aws/connect/view.json new file mode 100644 index 00000000..235ef312 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/view.json @@ -0,0 +1,162 @@ +{ + "typeName": "AWS::Connect::View", + "description": "Resource Type definition for AWS::Connect::View", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. . You can specify a value that is maximum of 256 Unicode characters", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "InstanceArn": { + "description": "The Amazon Resource Name (ARN) of the instance.", + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "ViewArn": { + "description": "The Amazon Resource Name (ARN) of the view.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/view/[-:$a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 255 + }, + "ViewId": { + "description": "The view id of the view.", + "type": "string", + "minLength": 1, + "maxLength": 500, + "pattern": "^[a-zA-Z0-9\\_\\-:\\/$]+$" + }, + "Name": { + "description": "The name of the view.", + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^([\\p{L}\\p{N}_.:\\/=+\\-@]+[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)$" + }, + "Description": { + "description": "The description of the view.", + "type": "string", + "minLength": 0, + "maxLength": 4096, + "pattern": "^([\\p{L}\\p{N}_.:\\/=+\\-@,]+[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@,]*)$" + }, + "Template": { + "description": "The template of the view as JSON.", + "type": "object" + }, + "Actions": { + "description": "The actions of the view in an array.", + "type": "array", + "insertionOrder": false, + "maxItems": 1000, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^([\\p{L}\\p{N}_.:\\/=+\\-@]+[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)$" + } + }, + "ViewContentSha256": { + "description": "The view content hash.", + "type": "string", + "pattern": "^[a-zA-Z0-9]{64}$" + }, + "Tags": { + "description": "One or more tags.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "InstanceArn", + "Template", + "Actions", + "Name" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateView", + "connect:TagResource" + ] + }, + "read": { + "permissions": [ + "connect:DescribeView" + ] + }, + "delete": { + "permissions": [ + "connect:DeleteView", + "connect:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "InstanceArn": { + "$ref": "resource-schema.json#/properties/InstanceArn" + } + }, + "required": [ + "InstanceArn" + ] + }, + "permissions": [ + "connect:ListViews" + ] + }, + "update": { + "permissions": [ + "connect:UpdateViewMetadata", + "connect:UpdateViewContent", + "connect:TagResource", + "connect:UntagResource" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ViewArn" + ], + "readOnlyProperties": [ + "/properties/ViewArn", + "/properties/ViewId", + "/properties/ViewContentSha256" + ] +} diff --git a/internal/aws/cfn/schemas/aws/connect/viewversion.json b/internal/aws/cfn/schemas/aws/connect/viewversion.json new file mode 100644 index 00000000..c3253c7a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connect/viewversion.json @@ -0,0 +1,99 @@ +{ + "typeName": "AWS::Connect::ViewVersion", + "description": "Resource Type definition for AWS::Connect::ViewVersion", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-connect", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "ViewArn": { + "description": "The Amazon Resource Name (ARN) of the view for which a version is being created.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/view/[-:a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 255 + }, + "ViewVersionArn": { + "description": "The Amazon Resource Name (ARN) of the created view version.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/view/[-:a-zA-Z0-9]*$", + "minLength": 1, + "maxLength": 255 + }, + "VersionDescription": { + "description": "The description for the view version.", + "type": "string", + "minLength": 1, + "maxLength": 4096, + "pattern": "^([\\p{L}\\p{N}_.:\\/=+\\-@,]+[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@,]*)$" + }, + "ViewContentSha256": { + "description": "The view content hash to be checked.", + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-zA-Z0-9]{64}$" + }, + "Version": { + "description": "The version of the view.", + "type": "integer" + } + }, + "required": [ + "ViewArn" + ], + "propertyTransform": { + "/properties/ViewArn": "$join([\"^\", ViewArn, \":[0-9]*$\"])" + }, + "handlers": { + "create": { + "permissions": [ + "connect:CreateViewVersion" + ] + }, + "read": { + "permissions": [ + "connect:DescribeView" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ViewArn": { + "$ref": "resource-schema.json#/properties/ViewArn" + } + }, + "required": [ + "ViewArn" + ] + }, + "permissions": [ + "connect:ListViewVersions" + ] + }, + "update": { + "permissions": [] + }, + "delete": { + "permissions": [ + "connect:DeleteViewVersion" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ViewVersionArn" + ], + "readOnlyProperties": [ + "/properties/ViewVersionArn", + "/properties/Version" + ], + "createOnlyProperties": [ + "/properties/ViewArn", + "/properties/VersionDescription", + "/properties/ViewContentSha256" + ] +} diff --git a/internal/aws/cfn/schemas/aws/connectcampaigns/campaign.json b/internal/aws/cfn/schemas/aws/connectcampaigns/campaign.json new file mode 100644 index 00000000..37611fb7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/connectcampaigns/campaign.json @@ -0,0 +1,263 @@ +{ + "typeName": "AWS::ConnectCampaigns::Campaign", + "description": "Definition of AWS::ConnectCampaigns::Campaign Resource Type", + "definitions": { + "DialerConfig": { + "type": "object", + "description": "The possible types of dialer config parameters", + "properties": { + "ProgressiveDialerConfig": { + "$ref": "#/definitions/ProgressiveDialerConfig" + }, + "PredictiveDialerConfig": { + "$ref": "#/definitions/PredictiveDialerConfig" + }, + "AgentlessDialerConfig": { + "$ref": "#/definitions/AgentlessDialerConfig" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "ProgressiveDialerConfig" + ] + }, + { + "required": [ + "PredictiveDialerConfig" + ] + }, + { + "required": [ + "AgentlessDialerConfig" + ] + } + ] + }, + "OutboundCallConfig": { + "type": "object", + "description": "The configuration used for outbound calls.", + "properties": { + "ConnectContactFlowArn": { + "type": "string", + "maxLength": 500, + "description": "The identifier of the contact flow for the outbound call.", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$" + }, + "ConnectSourcePhoneNumber": { + "type": "string", + "maxLength": 100, + "description": "The phone number associated with the Amazon Connect instance, in E.164 format. If you do not specify a source phone number, you must specify a queue." + }, + "ConnectQueueArn": { + "type": "string", + "maxLength": 500, + "description": "The queue for the call. If you specify a queue, the phone displayed for caller ID is the phone number specified in the queue. If you do not specify a queue, the queue defined in the contact flow is used. If you do not specify a queue, you must specify a source phone number.", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$" + }, + "AnswerMachineDetectionConfig": { + "$ref": "#/definitions/AnswerMachineDetectionConfig" + } + }, + "required": [ + "ConnectContactFlowArn" + ], + "additionalProperties": false + }, + "PredictiveDialerConfig": { + "type": "object", + "description": "Predictive Dialer config", + "properties": { + "BandwidthAllocation": { + "type": "number", + "maximum": 1, + "minimum": 0, + "description": "The bandwidth allocation of a queue resource." + }, + "DialingCapacity": { + "type": "number", + "maximum": 1, + "minimum": 0.01, + "description": "Allocates dialing capacity for this campaign between multiple active campaigns." + } + }, + "required": [ + "BandwidthAllocation" + ], + "additionalProperties": false + }, + "ProgressiveDialerConfig": { + "type": "object", + "description": "Progressive Dialer config", + "properties": { + "BandwidthAllocation": { + "type": "number", + "maximum": 1, + "minimum": 0, + "description": "The bandwidth allocation of a queue resource." + }, + "DialingCapacity": { + "type": "number", + "maximum": 1, + "minimum": 0.01, + "description": "Allocates dialing capacity for this campaign between multiple active campaigns." + } + }, + "required": [ + "BandwidthAllocation" + ], + "additionalProperties": false + }, + "AgentlessDialerConfig": { + "type": "object", + "description": "Agentless Dialer config", + "properties": { + "DialingCapacity": { + "type": "number", + "maximum": 1, + "minimum": 0.01, + "description": "Allocates dialing capacity for this campaign between multiple active campaigns." + } + }, + "required": [], + "additionalProperties": false + }, + "AnswerMachineDetectionConfig": { + "type": "object", + "description": "The configuration used for answering machine detection during outbound calls", + "properties": { + "EnableAnswerMachineDetection": { + "type": "boolean", + "description": "Flag to decided whether outbound calls should have answering machine detection enabled or not" + } + }, + "required": [ + "EnableAnswerMachineDetection" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that's 1 to 256 characters in length.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "ConnectInstanceArn": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "Amazon Connect Instance Arn", + "pattern": "^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$" + }, + "DialerConfig": { + "$ref": "#/definitions/DialerConfig" + }, + "Arn": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "Amazon Connect Campaign Arn", + "pattern": "^arn:aws[-a-z0-9]*:connect-campaigns:[-a-z0-9]*:[0-9]{12}:campaign/[-a-zA-Z0-9]*$" + }, + "Name": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "description": "Amazon Connect Campaign Name" + }, + "OutboundCallConfig": { + "$ref": "#/definitions/OutboundCallConfig" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "One or more tags.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "ConnectInstanceArn", + "DialerConfig", + "Name", + "OutboundCallConfig" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ConnectInstanceArn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "connect-campaigns:CreateCampaign", + "connect-campaigns:DescribeCampaign", + "connect-campaigns:TagResource", + "connect:DescribeContactFlow", + "connect:DescribeInstance", + "connect:DescribeQueue" + ] + }, + "read": { + "permissions": [ + "connect-campaigns:DescribeCampaign" + ] + }, + "delete": { + "permissions": [ + "connect-campaigns:DeleteCampaign" + ] + }, + "list": { + "permissions": [ + "connect-campaigns:ListCampaigns" + ] + }, + "update": { + "permissions": [ + "connect-campaigns:UpdateCampaignDialerConfig", + "connect-campaigns:UpdateCampaignName", + "connect-campaigns:UpdateCampaignOutboundCallConfig", + "connect-campaigns:TagResource", + "connect-campaigns:UntagResource", + "connect-campaigns:DescribeCampaign" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/controltower/enabledcontrol.json b/internal/aws/cfn/schemas/aws/controltower/enabledcontrol.json new file mode 100644 index 00000000..86845c2e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/controltower/enabledcontrol.json @@ -0,0 +1,206 @@ +{ + "typeName": "AWS::ControlTower::EnabledControl", + "description": "Enables a control on a specified target.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-controltower", + "properties": { + "ControlIdentifier": { + "description": "Arn of the control.", + "type": "string", + "pattern": "^arn:aws[0-9a-zA-Z_\\-:\\/]+$", + "minLength": 20, + "maxLength": 2048 + }, + "TargetIdentifier": { + "description": "Arn for Organizational unit to which the control needs to be applied", + "type": "string", + "pattern": "^arn:aws[0-9a-zA-Z_\\-:\\/]+$", + "minLength": 20, + "maxLength": 2048 + }, + "Parameters": { + "description": "Parameters to configure the enabled control behavior.", + "type": "array", + "items": { + "$ref": "#/definitions/EnabledControlParameter" + }, + "minItems": 1, + "insertionOrder": false + }, + "Tags": { + "description": "A set of tags to assign to the enabled control.", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1, + "insertionOrder": false + } + }, + "definitions": { + "EnabledControlParameter": { + "type": "object", + "properties": { + "Value": { + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "object" + }, + { + "type": "boolean" + } + ] + }, + "minItems": 1, + "insertionOrder": false + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "object" + }, + { + "type": "boolean" + } + ] + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "required": [ + "TargetIdentifier", + "ControlIdentifier" + ], + "handlers": { + "create": { + "permissions": [ + "controltower:ListEnabledControls", + "controltower:GetEnabledControl", + "controltower:GetControlOperation", + "controltower:EnableControl", + "controltower:TagResource", + "organizations:UpdatePolicy", + "organizations:CreatePolicy", + "organizations:AttachPolicy", + "organizations:DetachPolicy", + "organizations:ListPoliciesForTarget", + "organizations:ListTargetsForPolicy", + "organizations:DescribePolicy" + ] + }, + "update": { + "permissions": [ + "controltower:ListEnabledControls", + "controltower:GetEnabledControl", + "controltower:GetControlOperation", + "controltower:UpdateEnabledControl", + "controltower:UntagResource", + "controltower:TagResource", + "organizations:UpdatePolicy", + "organizations:CreatePolicy", + "organizations:AttachPolicy", + "organizations:DetachPolicy", + "organizations:ListPoliciesForTarget", + "organizations:ListTargetsForPolicy", + "organizations:DescribePolicy" + ] + }, + "delete": { + "permissions": [ + "controltower:GetControlOperation", + "controltower:DisableControl", + "organizations:UpdatePolicy", + "organizations:DeletePolicy", + "organizations:CreatePolicy", + "organizations:AttachPolicy", + "organizations:DetachPolicy", + "organizations:ListPoliciesForTarget", + "organizations:ListTargetsForPolicy", + "organizations:DescribePolicy" + ] + }, + "read": { + "permissions": [ + "controltower:ListEnabledControls", + "controltower:GetEnabledControl", + "controltower:ListTagsForResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "TargetIdentifier": { + "$ref": "resource-schema.json#/properties/TargetIdentifier" + } + }, + "required": [ + "TargetIdentifier" + ] + }, + "permissions": [ + "controltower:ListEnabledControls" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/TargetIdentifier", + "/properties/ControlIdentifier" + ], + "createOnlyProperties": [ + "/properties/TargetIdentifier", + "/properties/ControlIdentifier" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/cur/reportdefinition.json b/internal/aws/cfn/schemas/aws/cur/reportdefinition.json new file mode 100644 index 00000000..61d126ee --- /dev/null +++ b/internal/aws/cfn/schemas/aws/cur/reportdefinition.json @@ -0,0 +1,155 @@ +{ + "typeName": "AWS::CUR::ReportDefinition", + "description": "The AWS::CUR::ReportDefinition resource creates a Cost & Usage Report with user-defined settings. You can use this resource to define settings like time granularity (hourly, daily, monthly), file format (Parquet, CSV), and S3 bucket for delivery of these reports.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cur.git", + "properties": { + "ReportName": { + "description": "The name of the report that you want to create. The name must be unique, is case sensitive, and can't include spaces.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[0-9A-Za-z!\\-_.*\\'()]+" + }, + "TimeUnit": { + "description": "The granularity of the line items in the report.", + "type": "string", + "enum": [ + "HOURLY", + "DAILY", + "MONTHLY" + ] + }, + "Format": { + "description": "The format that AWS saves the report in.", + "type": "string", + "enum": [ + "textORcsv", + "Parquet" + ] + }, + "Compression": { + "description": "The compression format that AWS uses for the report.", + "type": "string", + "enum": [ + "ZIP", + "GZIP", + "Parquet" + ] + }, + "AdditionalSchemaElements": { + "description": "A list of strings that indicate additional content that Amazon Web Services includes in the report, such as individual resource IDs.", + "type": "array", + "default": [], + "items": { + "description": "Whether or not AWS includes resource IDs in the report.", + "type": "string", + "enum": [ + "RESOURCES" + ] + } + }, + "S3Bucket": { + "description": "The S3 bucket where AWS delivers the report.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[A-Za-z0-9_\\.\\-]+" + }, + "S3Prefix": { + "description": "The prefix that AWS adds to the report name when AWS delivers the report. Your prefix can't include spaces.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[0-9A-Za-z!\\-_.*\\'()/]*" + }, + "S3Region": { + "description": "The region of the S3 bucket that AWS delivers the report into.", + "type": "string" + }, + "AdditionalArtifacts": { + "description": "A list of manifests that you want Amazon Web Services to create for this report.", + "type": "array", + "default": [], + "items": { + "description": "The types of manifest that you want AWS to create for this report.", + "type": "string", + "enum": [ + "REDSHIFT", + "QUICKSIGHT", + "ATHENA" + ] + } + }, + "RefreshClosedReports": { + "description": "Whether you want Amazon Web Services to update your reports after they have been finalized if Amazon Web Services detects charges related to previous months. These charges can include refunds, credits, or support fees.", + "type": "boolean" + }, + "ReportVersioning": { + "description": "Whether you want Amazon Web Services to overwrite the previous version of each report or to deliver the report in addition to the previous versions.", + "type": "string", + "enum": [ + "CREATE_NEW_REPORT", + "OVERWRITE_REPORT" + ] + }, + "BillingViewArn": { + "description": "The Amazon resource name of the billing view. You can get this value by using the billing view service public APIs.", + "type": "string", + "default": null, + "pattern": "(arn:aws(-cn)?:billing::[0-9]{12}:billingview/)?[a-zA-Z0-9_\\+=\\.\\-@].{1,30}", + "minLength": 1, + "maxLength": 128 + } + }, + "additionalProperties": false, + "required": [ + "ReportName", + "TimeUnit", + "Format", + "Compression", + "S3Bucket", + "S3Prefix", + "S3Region", + "RefreshClosedReports", + "ReportVersioning" + ], + "createOnlyProperties": [ + "/properties/ReportName", + "/properties/AdditionalSchemaElements", + "/properties/TimeUnit", + "/properties/ReportVersioning", + "/properties/BillingViewArn" + ], + "primaryIdentifier": [ + "/properties/ReportName" + ], + "handlers": { + "create": { + "permissions": [ + "cur:PutReportDefinition" + ] + }, + "read": { + "permissions": [ + "cur:DescribeReportDefinitions" + ] + }, + "update": { + "permissions": [ + "cur:DescribeReportDefinitions", + "cur:ModifyReportDefinition" + ] + }, + "delete": { + "permissions": [ + "cur:DescribeReportDefinitions", + "cur:DeleteReportDefinition" + ] + }, + "list": { + "permissions": [ + "cur:DescribeReportDefinitions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/customerprofiles/calculatedattributedefinition.json b/internal/aws/cfn/schemas/aws/customerprofiles/calculatedattributedefinition.json new file mode 100644 index 00000000..33c29284 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/customerprofiles/calculatedattributedefinition.json @@ -0,0 +1,322 @@ +{ + "typeName": "AWS::CustomerProfiles::CalculatedAttributeDefinition", + "description": "A calculated attribute definition for Customer Profiles", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles", + "definitions": { + "DomainName": { + "description": "The unique name of the domain.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "CalculatedAttributeName": { + "description": "The unique name of the calculated attribute.", + "type": "string", + "pattern": "^[a-zA-Z_][a-zA-Z_0-9-]*$", + "minLength": 1, + "maxLength": 255 + }, + "DisplayName": { + "description": "The display name of the calculated attribute.", + "type": "string", + "pattern": "^[a-zA-Z_][a-zA-Z_0-9-\\s]*$", + "minLength": 1, + "maxLength": 255 + }, + "Description": { + "description": "The description of the calculated attribute.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "AttributeName": { + "description": "The name of an attribute defined in a profile object type.", + "type": "string", + "pattern": "^[a-zA-Z0-9_.-]+$", + "minLength": 1, + "maxLength": 64 + }, + "AttributeItem": { + "description": "The details of a single attribute item specified in the mathematical expression.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/AttributeName" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "AttributeList": { + "description": "A list of attribute items specified in the mathematical expression.", + "type": "array", + "items": { + "$ref": "#/definitions/AttributeItem" + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 2 + }, + "Expression": { + "description": "Mathematical expression that is performed on attribute items provided in the attribute list. Each element in the expression should follow the structure of \"{ObjectTypeName.AttributeName}\".", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "AttributeDetails": { + "description": "Mathematical expression and a list of attribute items specified in that expression.", + "type": "object", + "properties": { + "Attributes": { + "$ref": "#/definitions/AttributeList" + }, + "Expression": { + "$ref": "#/definitions/Expression" + } + }, + "required": [ + "Attributes", + "Expression" + ], + "additionalProperties": false + }, + "RangeUnit": { + "description": "The unit of time.", + "type": "string", + "enum": [ + "DAYS" + ] + }, + "RangeValue": { + "description": "The amount of time of the specified unit.", + "type": "integer", + "minimum": 1, + "maximum": 366 + }, + "Range": { + "description": "The relative time period over which data is included in the aggregation.", + "type": "object", + "properties": { + "Value": { + "$ref": "#/definitions/RangeValue" + }, + "Unit": { + "$ref": "#/definitions/RangeUnit" + } + }, + "required": [ + "Value", + "Unit" + ], + "additionalProperties": false + }, + "ObjectCount": { + "description": "The number of profile objects used for the calculated attribute.", + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "ThresholdValue": { + "description": "The value of the threshold.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "ThresholdOperator": { + "description": "The operator of the threshold.", + "type": "string", + "enum": [ + "EQUAL_TO", + "GREATER_THAN", + "LESS_THAN", + "NOT_EQUAL_TO" + ] + }, + "Threshold": { + "description": "The threshold for the calculated attribute.", + "type": "object", + "properties": { + "Value": { + "$ref": "#/definitions/ThresholdValue" + }, + "Operator": { + "$ref": "#/definitions/ThresholdOperator" + } + }, + "required": [ + "Value", + "Operator" + ], + "additionalProperties": false + }, + "Conditions": { + "description": "The conditions including range, object count, and threshold for the calculated attribute.", + "type": "object", + "properties": { + "Range": { + "$ref": "#/definitions/Range" + }, + "ObjectCount": { + "$ref": "#/definitions/ObjectCount" + }, + "Threshold": { + "$ref": "#/definitions/Threshold" + } + }, + "additionalProperties": false + }, + "Statistic": { + "description": "The aggregation operation to perform for the calculated attribute.", + "type": "string", + "enum": [ + "FIRST_OCCURRENCE", + "LAST_OCCURRENCE", + "COUNT", + "SUM", + "MINIMUM", + "MAXIMUM", + "AVERAGE", + "MAX_OCCURRENCE" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + } + }, + "properties": { + "DomainName": { + "$ref": "#/definitions/DomainName" + }, + "CalculatedAttributeName": { + "$ref": "#/definitions/CalculatedAttributeName" + }, + "DisplayName": { + "$ref": "#/definitions/DisplayName" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "AttributeDetails": { + "$ref": "#/definitions/AttributeDetails" + }, + "Conditions": { + "$ref": "#/definitions/Conditions" + }, + "Statistic": { + "$ref": "#/definitions/Statistic" + }, + "CreatedAt": { + "description": "The timestamp of when the calculated attribute definition was created.", + "type": "string" + }, + "LastUpdatedAt": { + "description": "The timestamp of when the calculated attribute definition was most recently edited.", + "type": "string" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "additionalProperties": false, + "required": [ + "DomainName", + "CalculatedAttributeName", + "AttributeDetails", + "Statistic" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/DomainName", + "/properties/CalculatedAttributeName" + ], + "readOnlyProperties": [ + "/properties/CreatedAt", + "/properties/LastUpdatedAt" + ], + "primaryIdentifier": [ + "/properties/DomainName", + "/properties/CalculatedAttributeName" + ], + "handlers": { + "create": { + "permissions": [ + "profile:CreateCalculatedAttributeDefinition", + "profile:TagResource" + ] + }, + "read": { + "permissions": [ + "profile:GetCalculatedAttributeDefinition" + ] + }, + "update": { + "permissions": [ + "profile:GetCalculatedAttributeDefinition", + "profile:UpdateCalculatedAttributeDefinition", + "profile:UntagResource", + "profile:TagResource" + ] + }, + "delete": { + "permissions": [ + "profile:DeleteCalculatedAttributeDefinition" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DomainName": { + "$ref": "resource-schema.json#/properties/DomainName" + } + }, + "required": [ + "DomainName" + ] + }, + "permissions": [ + "profile:ListCalculatedAttributeDefinitions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/customerprofiles/domain.json b/internal/aws/cfn/schemas/aws/customerprofiles/domain.json new file mode 100644 index 00000000..e4f95365 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/customerprofiles/domain.json @@ -0,0 +1,463 @@ +{ + "typeName": "AWS::CustomerProfiles::Domain", + "description": "A domain defined for 3rd party data source in Profile Service", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "DomainStats": { + "type": "object", + "description": "Usage-specific statistics about the domain.", + "properties": { + "MeteringProfileCount": { + "description": "The number of profiles that you are currently paying for in the domain. If you have more than 100 objects associated with a single profile, that profile counts as two profiles. If you have more than 200 objects, that profile counts as three, and so on.", + "type": "number" + }, + "ObjectCount": { + "description": "The total number of objects in domain.", + "type": "number" + }, + "ProfileCount": { + "description": "The total number of profiles currently in the domain.", + "type": "number" + }, + "TotalSize": { + "description": "The total size, in bytes, of all objects in the domain.", + "type": "number" + } + }, + "additionalProperties": false + }, + "S3ExportingConfig": { + "type": "object", + "description": "The S3 location where Identity Resolution Jobs write result files.", + "properties": { + "S3BucketName": { + "description": "The name of the S3 bucket where Identity Resolution Jobs write result files.", + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "^[a-z0-9.-]+$" + }, + "S3KeyName": { + "description": "The S3 key name of the location where Identity Resolution Jobs write result files.", + "type": "string", + "minLength": 1, + "maxLength": 800, + "pattern": ".*" + } + }, + "required": [ + "S3BucketName" + ], + "additionalProperties": false + }, + "ExportingConfig": { + "type": "object", + "description": "Configuration information for exporting Identity Resolution results, for example, to an S3 bucket.", + "properties": { + "S3Exporting": { + "$ref": "#/definitions/S3ExportingConfig" + } + }, + "additionalProperties": false + }, + "JobSchedule": { + "type": "object", + "description": "The day and time when do you want to start the Identity Resolution Job every week.", + "properties": { + "DayOfTheWeek": { + "description": "The day when the Identity Resolution Job should run every week.", + "type": "string", + "enum": [ + "SUNDAY", + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY" + ] + }, + "Time": { + "description": "The time when the Identity Resolution Job should run every week.", + "type": "string", + "minLength": 3, + "maxLength": 5, + "pattern": "^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" + } + }, + "required": [ + "DayOfTheWeek", + "Time" + ], + "additionalProperties": false + }, + "ConflictResolution": { + "type": "object", + "description": "How the auto-merging process should resolve conflicts between different profiles. For example, if Profile A and Profile B have the same FirstName and LastName (and that is the matching criteria), which EmailAddress should be used? ", + "properties": { + "ConflictResolvingModel": { + "description": "How the auto-merging process should resolve conflicts between different profiles.", + "type": "string", + "enum": [ + "RECENCY", + "SOURCE" + ] + }, + "SourceName": { + "description": "The ObjectType name that is used to resolve profile merging conflicts when choosing SOURCE as the ConflictResolvingModel.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "ConflictResolvingModel" + ], + "additionalProperties": false + }, + "MatchingAttributes": { + "type": "array", + "minItems": 1, + "maxItems": 20, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "Consolidation": { + "description": "A list of matching attributes that represent matching criteria. If two profiles meet at least one of the requirements in the matching attributes list, they will be merged.", + "type": "object", + "properties": { + "MatchingAttributesList": { + "description": "A list of matching criteria.", + "type": "array", + "minItems": 1, + "maxItems": 10, + "items": { + "$ref": "#/definitions/MatchingAttributes" + } + } + }, + "required": [ + "MatchingAttributesList" + ], + "additionalProperties": false + }, + "AutoMerging": { + "type": "object", + "description": "Configuration information about the auto-merging process.", + "properties": { + "Enabled": { + "description": "The flag that enables the auto-merging of duplicate profiles.", + "type": "boolean" + }, + "ConflictResolution": { + "$ref": "#/definitions/ConflictResolution" + }, + "Consolidation": { + "$ref": "#/definitions/Consolidation" + }, + "MinAllowedConfidenceScoreForMerging": { + "description": "A number between 0 and 1 that represents the minimum confidence score required for profiles within a matching group to be merged during the auto-merge process. A higher score means higher similarity required to merge profiles.", + "type": "number", + "minimum": 0.0, + "maximum": 1.0 + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false + }, + "MatchingRuleAttributeList": { + "description": "A single rule level of the MatchRules. Configures how the rule-based matching process should match profiles.", + "type": "array", + "minItems": 1, + "maxItems": 15, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "MatchingRule": { + "description": "Specifies how does the rule-based matching process should match profiles.", + "type": "object", + "properties": { + "Rule": { + "$ref": "#/definitions/MatchingRuleAttributeList" + } + }, + "required": [ + "Rule" + ], + "additionalProperties": false + }, + "AttributeTypesSelector": { + "description": "Configures information about the AttributeTypesSelector where the rule-based identity resolution uses to match profiles.", + "type": "object", + "properties": { + "AttributeMatchingModel": { + "description": "Configures the AttributeMatchingModel, you can either choose ONE_TO_ONE or MANY_TO_MANY.", + "type": "string", + "enum": [ + "ONE_TO_ONE", + "MANY_TO_MANY" + ] + }, + "Address": { + "description": "The Address type. You can choose from Address, BusinessAddress, MaillingAddress, and ShippingAddress. You only can use the Address type in the MatchingRule. For example, if you want to match profile based on BusinessAddress.City or MaillingAddress.City, you need to choose the BusinessAddress and the MaillingAddress to represent the Address type and specify the Address.City on the matching rule.", + "type": "array", + "minItems": 1, + "maxItems": 4, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "EmailAddress": { + "description": "The Email type. You can choose from EmailAddress, BusinessEmailAddress and PersonalEmailAddress. You only can use the EmailAddress type in the MatchingRule. For example, if you want to match profile based on PersonalEmailAddress or BusinessEmailAddress, you need to choose the PersonalEmailAddress and the BusinessEmailAddress to represent the EmailAddress type and only specify the EmailAddress on the matching rule.", + "type": "array", + "minItems": 1, + "maxItems": 3, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "PhoneNumber": { + "description": "The PhoneNumber type. You can choose from PhoneNumber, HomePhoneNumber, and MobilePhoneNumber. You only can use the PhoneNumber type in the MatchingRule. For example, if you want to match a profile based on Phone or HomePhone, you need to choose the Phone and the HomePhone to represent the PhoneNumber type and only specify the PhoneNumber on the matching rule.", + "type": "array", + "minItems": 1, + "maxItems": 4, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + } + }, + "required": [ + "AttributeMatchingModel" + ], + "additionalProperties": false + }, + "Matching": { + "description": "The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the GetMatches API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3.", + "type": "object", + "properties": { + "Enabled": { + "description": "The flag that enables the matching process of duplicate profiles.", + "type": "boolean" + }, + "AutoMerging": { + "$ref": "#/definitions/AutoMerging" + }, + "ExportingConfig": { + "$ref": "#/definitions/ExportingConfig" + }, + "JobSchedule": { + "$ref": "#/definitions/JobSchedule" + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false + }, + "RuleBasedMatching": { + "description": "The process of matching duplicate profiles using the Rule-Based matching. If RuleBasedMatching = true, Amazon Connect Customer Profiles will start to match and merge your profiles according to your configuration in the RuleBasedMatchingRequest. You can use the ListRuleBasedMatches and GetSimilarProfiles API to return and review the results. Also, if you have configured ExportingConfig in the RuleBasedMatchingRequest, you can download the results from S3.", + "type": "object", + "properties": { + "Enabled": { + "description": "The flag that enables the rule-based matching process of duplicate profiles.", + "type": "boolean" + }, + "AttributeTypesSelector": { + "$ref": "#/definitions/AttributeTypesSelector" + }, + "ConflictResolution": { + "$ref": "#/definitions/ConflictResolution" + }, + "ExportingConfig": { + "$ref": "#/definitions/ExportingConfig" + }, + "MatchingRules": { + "description": "Configures how the rule-based matching process should match profiles. You can have up to 15 MatchingRule in the MatchingRules.", + "type": "array", + "minItems": 1, + "maxItems": 15, + "items": { + "$ref": "#/definitions/MatchingRule" + } + }, + "MaxAllowedRuleLevelForMatching": { + "description": "Indicates the maximum allowed rule level for matching.", + "type": "integer", + "minimum": 1, + "maximum": 15 + }, + "MaxAllowedRuleLevelForMerging": { + "description": "Indicates the maximum allowed rule level for merging.", + "type": "integer", + "minimum": 1, + "maximum": 15 + }, + "Status": { + "type": "string", + "enum": [ + "PENDING", + "IN_PROGRESS", + "ACTIVE" + ] + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false + } + }, + "properties": { + "DomainName": { + "description": "The unique name of the domain.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "DeadLetterQueueUrl": { + "description": "The URL of the SQS dead letter queue", + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "DefaultEncryptionKey": { + "description": "The default encryption key", + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "DefaultExpirationDays": { + "description": "The default number of days until the data within the domain expires.", + "type": "integer", + "minimum": 1, + "maximum": 1098 + }, + "Matching": { + "$ref": "#/definitions/Matching" + }, + "RuleBasedMatching": { + "$ref": "#/definitions/RuleBasedMatching" + }, + "Stats": { + "$ref": "#/definitions/DomainStats" + }, + "Tags": { + "description": "The tags (keys and values) associated with the domain", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + }, + "CreatedAt": { + "description": "The time of this integration got created", + "type": "string" + }, + "LastUpdatedAt": { + "description": "The time of this integration got last updated at", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "DomainName", + "DefaultExpirationDays" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/LastUpdatedAt", + "/properties/CreatedAt", + "/properties/RuleBasedMatching/Status", + "/properties/Stats" + ], + "createOnlyProperties": [ + "/properties/DomainName" + ], + "primaryIdentifier": [ + "/properties/DomainName" + ], + "handlers": { + "create": { + "permissions": [ + "profile:CreateDomain", + "profile:TagResource" + ] + }, + "read": { + "permissions": [ + "profile:GetDomain" + ] + }, + "update": { + "permissions": [ + "profile:GetDomain", + "profile:UpdateDomain", + "profile:UntagResource", + "profile:TagResource" + ] + }, + "delete": { + "permissions": [ + "profile:DeleteDomain" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DomainName": { + "$ref": "resource-schema.json#/properties/DomainName" + } + }, + "required": [ + "DomainName" + ] + }, + "permissions": [ + "profile:ListDomains" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/customerprofiles/eventstream.json b/internal/aws/cfn/schemas/aws/customerprofiles/eventstream.json new file mode 100644 index 00000000..7f6fc5fe --- /dev/null +++ b/internal/aws/cfn/schemas/aws/customerprofiles/eventstream.json @@ -0,0 +1,183 @@ +{ + "typeName": "AWS::CustomerProfiles::EventStream", + "description": "An Event Stream resource of Amazon Connect Customer Profiles", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles", + "definitions": { + "Uri": { + "description": "The StreamARN of the destination to deliver profile events to. For example, arn:aws:kinesis:region:account-id:stream/stream-name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Status": { + "description": "The status of enabling the Kinesis stream as a destination for export.", + "type": "string", + "enum": [ + "HEALTHY", + "UNHEALTHY" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "DomainName": { + "description": "The unique name of the domain.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "EventStreamName": { + "description": "The name of the event stream.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 255 + }, + "Uri": { + "$ref": "#/definitions/Uri" + }, + "EventStreamArn": { + "description": "A unique identifier for the event stream.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Tags": { + "description": "The tags used to organize, track, or control access for this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + }, + "CreatedAt": { + "description": "The timestamp of when the export was created.", + "type": "string" + }, + "State": { + "description": "The operational state of destination stream for export.", + "type": "string", + "enum": [ + "RUNNING", + "STOPPED" + ] + }, + "DestinationDetails": { + "description": "Details regarding the Kinesis stream.", + "type": "object", + "properties": { + "Uri": { + "$ref": "#/definitions/Uri" + }, + "Status": { + "$ref": "#/definitions/Status" + } + }, + "required": [ + "Uri", + "Status" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "DomainName", + "EventStreamName", + "Uri" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/DomainName", + "/properties/EventStreamName", + "/properties/Uri" + ], + "readOnlyProperties": [ + "/properties/DestinationDetails", + "/properties/CreatedAt", + "/properties/State", + "/properties/EventStreamArn" + ], + "primaryIdentifier": [ + "/properties/DomainName", + "/properties/EventStreamName" + ], + "handlers": { + "create": { + "permissions": [ + "profile:CreateEventStream", + "iam:PutRolePolicy", + "kinesis:DescribeStreamSummary", + "profile:TagResource" + ] + }, + "read": { + "permissions": [ + "profile:GetEventStream", + "kinesis:DescribeStreamSummary" + ] + }, + "update": { + "permissions": [ + "kinesis:DescribeStreamSummary", + "profile:GetEventStream", + "profile:UntagResource", + "profile:TagResource" + ] + }, + "delete": { + "permissions": [ + "profile:DeleteEventStream", + "iam:DeleteRolePolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DomainName": { + "$ref": "resource-schema.json#/properties/DomainName" + } + }, + "required": [ + "DomainName" + ] + }, + "permissions": [ + "profile:ListEventStreams" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/customerprofiles/integration.json b/internal/aws/cfn/schemas/aws/customerprofiles/integration.json new file mode 100644 index 00000000..d472f406 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/customerprofiles/integration.json @@ -0,0 +1,702 @@ +{ + "typeName": "AWS::CustomerProfiles::Integration", + "description": "The resource schema for creating an Amazon Connect Customer Profiles Integration.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "Object": { + "type": "string", + "maxLength": 512, + "pattern": "\\S+", + "additionalProperties": false + }, + "MarketoSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "S3SourceProperties": { + "type": "object", + "properties": { + "BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "\\S+" + }, + "BucketPrefix": { + "type": "string", + "maxLength": 512, + "pattern": ".*" + } + }, + "required": [ + "BucketName" + ], + "additionalProperties": false + }, + "SalesforceSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + }, + "EnableDynamicFieldUpdate": { + "type": "boolean" + }, + "IncludeDeletedRecords": { + "type": "boolean" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "ServiceNowSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "ZendeskSourceProperties": { + "type": "object", + "properties": { + "Object": { + "$ref": "#/definitions/Object" + } + }, + "required": [ + "Object" + ], + "additionalProperties": false + }, + "SourceConnectorProperties": { + "type": "object", + "properties": { + "Marketo": { + "$ref": "#/definitions/MarketoSourceProperties" + }, + "S3": { + "$ref": "#/definitions/S3SourceProperties" + }, + "Salesforce": { + "$ref": "#/definitions/SalesforceSourceProperties" + }, + "ServiceNow": { + "$ref": "#/definitions/ServiceNowSourceProperties" + }, + "Zendesk": { + "$ref": "#/definitions/ZendeskSourceProperties" + } + }, + "additionalProperties": false + }, + "ConnectorType": { + "type": "string", + "enum": [ + "Salesforce", + "Marketo", + "ServiceNow", + "Zendesk", + "S3" + ] + }, + "IncrementalPullConfig": { + "type": "object", + "properties": { + "DatetimeTypeFieldName": { + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "SourceFlowConfig": { + "type": "object", + "properties": { + "ConnectorType": { + "$ref": "#/definitions/ConnectorType" + }, + "ConnectorProfileName": { + "type": "string", + "maxLength": 256, + "pattern": "[\\w/!@#+=.-]+" + }, + "IncrementalPullConfig": { + "$ref": "#/definitions/IncrementalPullConfig" + }, + "SourceConnectorProperties": { + "$ref": "#/definitions/SourceConnectorProperties" + } + }, + "required": [ + "ConnectorType", + "SourceConnectorProperties" + ], + "additionalProperties": false + }, + "ConnectorOperator": { + "type": "object", + "properties": { + "Marketo": { + "$ref": "#/definitions/MarketoConnectorOperator" + }, + "S3": { + "$ref": "#/definitions/S3ConnectorOperator" + }, + "Salesforce": { + "$ref": "#/definitions/SalesforceConnectorOperator" + }, + "ServiceNow": { + "$ref": "#/definitions/ServiceNowConnectorOperator" + }, + "Zendesk": { + "$ref": "#/definitions/ZendeskConnectorOperator" + } + }, + "additionalProperties": false + }, + "Operator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "CONTAINS", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "MarketoConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "BETWEEN", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "S3ConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "SalesforceConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "CONTAINS", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "ServiceNowConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "LESS_THAN", + "GREATER_THAN", + "CONTAINS", + "BETWEEN", + "LESS_THAN_OR_EQUAL_TO", + "GREATER_THAN_OR_EQUAL_TO", + "EQUAL_TO", + "NOT_EQUAL_TO", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "ZendeskConnectorOperator": { + "type": "string", + "enum": [ + "PROJECTION", + "GREATER_THAN", + "ADDITION", + "MULTIPLICATION", + "DIVISION", + "SUBTRACTION", + "MASK_ALL", + "MASK_FIRST_N", + "MASK_LAST_N", + "VALIDATE_NON_NULL", + "VALIDATE_NON_ZERO", + "VALIDATE_NON_NEGATIVE", + "VALIDATE_NUMERIC", + "NO_OP" + ] + }, + "OperatorPropertiesKeys": { + "type": "string", + "enum": [ + "VALUE", + "VALUES", + "DATA_TYPE", + "UPPER_BOUND", + "LOWER_BOUND", + "SOURCE_DATA_TYPE", + "DESTINATION_DATA_TYPE", + "VALIDATION_ACTION", + "MASK_VALUE", + "MASK_LENGTH", + "TRUNCATE_LENGTH", + "MATH_OPERATION_FIELDS_ORDER", + "CONCAT_FORMAT", + "SUBFIELD_CATEGORY_MAP" + ] + }, + "DestinationField": { + "type": "string", + "maxLength": 256, + "pattern": ".*" + }, + "TaskType": { + "type": "string", + "enum": [ + "Arithmetic", + "Filter", + "Map", + "Mask", + "Merge", + "Truncate", + "Validate" + ] + }, + "TaskPropertiesMap": { + "type": "object", + "properties": { + "OperatorPropertyKey": { + "$ref": "#/definitions/OperatorPropertiesKeys" + }, + "Property": { + "type": "string", + "maxLength": 2048, + "pattern": ".+" + } + }, + "required": [ + "OperatorPropertyKey", + "Property" + ], + "additionalProperties": false + }, + "Task": { + "type": "object", + "properties": { + "ConnectorOperator": { + "$ref": "#/definitions/ConnectorOperator" + }, + "SourceFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 2048, + "pattern": ".*" + } + }, + "DestinationField": { + "$ref": "#/definitions/DestinationField" + }, + "TaskType": { + "$ref": "#/definitions/TaskType" + }, + "TaskProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/TaskPropertiesMap" + } + } + }, + "required": [ + "SourceFields", + "TaskType" + ], + "additionalProperties": false + }, + "TriggerType": { + "type": "string", + "enum": [ + "Scheduled", + "Event", + "OnDemand" + ] + }, + "Date": { + "type": "number" + }, + "ScheduledTriggerProperties": { + "type": "object", + "properties": { + "ScheduleExpression": { + "type": "string", + "maxLength": 256, + "pattern": ".*" + }, + "DataPullMode": { + "type": "string", + "enum": [ + "Incremental", + "Complete" + ] + }, + "ScheduleStartTime": { + "$ref": "#/definitions/Date" + }, + "ScheduleEndTime": { + "$ref": "#/definitions/Date" + }, + "Timezone": { + "type": "string", + "maxLength": 256, + "pattern": ".*" + }, + "ScheduleOffset": { + "type": "integer", + "minimum": 0, + "maximum": 36000 + }, + "FirstExecutionFrom": { + "$ref": "#/definitions/Date" + } + }, + "required": [ + "ScheduleExpression" + ], + "additionalProperties": false + }, + "TriggerProperties": { + "type": "object", + "properties": { + "Scheduled": { + "$ref": "#/definitions/ScheduledTriggerProperties" + } + }, + "additionalProperties": false + }, + "TriggerConfig": { + "type": "object", + "properties": { + "TriggerType": { + "$ref": "#/definitions/TriggerType" + }, + "TriggerProperties": { + "$ref": "#/definitions/TriggerProperties" + } + }, + "required": [ + "TriggerType" + ], + "additionalProperties": false + }, + "FlowDefinition": { + "type": "object", + "properties": { + "FlowName": { + "type": "string", + "pattern": "[a-zA-Z0-9][\\w!@#.-]+", + "maxLength": 256 + }, + "Description": { + "type": "string", + "pattern": "[\\w!@#\\-.?,\\s]*", + "maxLength": 2048 + }, + "KmsArn": { + "type": "string", + "pattern": "arn:aws:kms:.*:[0-9]+:.*", + "minLength": 20, + "maxLength": 2048 + }, + "Tasks": { + "type": "array", + "items": { + "$ref": "#/definitions/Task" + } + }, + "TriggerConfig": { + "$ref": "#/definitions/TriggerConfig" + }, + "SourceFlowConfig": { + "$ref": "#/definitions/SourceFlowConfig" + } + }, + "required": [ + "FlowName", + "KmsArn", + "Tasks", + "TriggerConfig", + "SourceFlowConfig" + ], + "additionalProperties": false + }, + "ObjectTypeMapping": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Value": { + "type": "string", + "pattern": "^[a-zA-Z_][a-zA-Z_0-9-]*$", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "DomainName": { + "description": "The unique name of the domain.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "Uri": { + "description": "The URI of the S3 bucket or any other type of data source.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "FlowDefinition": { + "$ref": "#/definitions/FlowDefinition" + }, + "ObjectTypeName": { + "description": "The name of the ObjectType defined for the 3rd party data in Profile Service", + "type": "string", + "pattern": "^[a-zA-Z_][a-zA-Z_0-9-]*$", + "minLength": 1, + "maxLength": 255 + }, + "CreatedAt": { + "description": "The time of this integration got created", + "type": "string" + }, + "LastUpdatedAt": { + "description": "The time of this integration got last updated at", + "type": "string" + }, + "Tags": { + "description": "The tags (keys and values) associated with the integration", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + }, + "ObjectTypeNames": { + "description": "The mapping between 3rd party event types and ObjectType names", + "type": "array", + "items": { + "$ref": "#/definitions/ObjectTypeMapping" + } + } + }, + "required": [ + "DomainName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "profile:GetIntegration", + "profile:PutIntegration", + "appflow:CreateFlow", + "app-integrations:CreateEventIntegrationAssociation", + "app-integrations:GetEventIntegration", + "events:ListTargetsByRule", + "events:PutRule", + "events:PutTargets", + "events:PutEvents", + "profile:TagResource" + ] + }, + "read": { + "permissions": [ + "profile:GetIntegration" + ] + }, + "delete": { + "permissions": [ + "profile:DeleteIntegration", + "appflow:DeleteFlow", + "app-integrations:ListEventIntegrationAssociations", + "app-integrations:DeleteEventIntegrationAssociation", + "events:RemoveTargets", + "events:ListTargetsByRule", + "events:DeleteRule" + ] + }, + "update": { + "permissions": [ + "profile:PutIntegration", + "profile:GetIntegration", + "appflow:CreateFlow", + "app-integrations:GetEventIntegration", + "app-integrations:CreateEventIntegrationAssociation", + "app-integrations:ListEventIntegrationAssociations", + "app-integrations:DeleteEventIntegrationAssociation", + "events:ListTargetsByRule", + "events:RemoveTargets", + "events:DeleteRule", + "events:PutRule", + "events:PutTargets", + "events:PutEvents", + "profile:UntagResource", + "profile:TagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DomainName": { + "$ref": "resource-schema.json#/properties/DomainName" + } + }, + "required": [ + "DomainName" + ] + }, + "permissions": [ + "profile:ListIntegrations" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/DomainName", + "/properties/Uri" + ], + "createOnlyProperties": [ + "/properties/DomainName", + "/properties/Uri" + ], + "readOnlyProperties": [ + "/properties/LastUpdatedAt", + "/properties/CreatedAt" + ], + "writeOnlyProperties": [ + "/properties/FlowDefinition" + ] +} diff --git a/internal/aws/cfn/schemas/aws/customerprofiles/objecttype.json b/internal/aws/cfn/schemas/aws/customerprofiles/objecttype.json new file mode 100644 index 00000000..573a2d25 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/customerprofiles/objecttype.json @@ -0,0 +1,277 @@ +{ + "typeName": "AWS::CustomerProfiles::ObjectType", + "description": "An ObjectType resource of Amazon Connect Customer Profiles", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-customer-profiles.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "FieldMap": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "ObjectTypeField": { + "$ref": "#/definitions/ObjectTypeField" + } + }, + "additionalProperties": false + }, + "ObjectTypeField": { + "description": "Represents a field in a ProfileObjectType.", + "type": "object", + "properties": { + "Source": { + "description": "A field of a ProfileObject. For example: _source.FirstName, where \"_source\" is a ProfileObjectType of a Zendesk user and \"FirstName\" is a field in that ObjectType.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "Target": { + "description": "The location of the data in the standard ProfileObject model. For example: _profile.Address.PostalCode.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "ContentType": { + "description": "The content type of the field. Used for determining equality when searching.", + "type": "string", + "enum": [ + "STRING", + "NUMBER", + "PHONE_NUMBER", + "EMAIL_ADDRESS", + "NAME" + ] + } + }, + "additionalProperties": false + }, + "KeyMap": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "ObjectTypeKeyList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ObjectTypeKey" + } + } + }, + "additionalProperties": false + }, + "ObjectTypeKey": { + "description": "An object that defines the Key element of a ProfileObject. A Key is a special element that can be used to search for a customer profile.", + "type": "object", + "properties": { + "FieldNames": { + "description": "The reference for the key name of the fields map. ", + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + } + }, + "StandardIdentifiers": { + "description": "The types of keys that a ProfileObject can have. Each ProfileObject can have only 1 UNIQUE key but multiple PROFILE keys. PROFILE means that this key can be used to tie an object to a PROFILE. UNIQUE means that it can be used to uniquely identify an object. If a key a is marked as SECONDARY, it will be used to search for profiles after all other PROFILE keys have been searched. A LOOKUP_ONLY key is only used to match a profile but is not persisted to be used for searching of the profile. A NEW_ONLY key is only used if the profile does not already exist before the object is ingested, otherwise it is only used for matching objects to profiles.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "PROFILE", + "UNIQUE", + "SECONDARY", + "LOOKUP_ONLY", + "NEW_ONLY", + "ASSET", + "CASE", + "ORDER" + ] + } + } + }, + "additionalProperties": false + } + }, + "properties": { + "DomainName": { + "description": "The unique name of the domain.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "ObjectTypeName": { + "description": "The name of the profile object type.", + "type": "string", + "pattern": "^[a-zA-Z_][a-zA-Z_0-9-]*$", + "minLength": 1, + "maxLength": 255 + }, + "AllowProfileCreation": { + "description": "Indicates whether a profile should be created when data is received.", + "type": "boolean" + }, + "Description": { + "description": "Description of the profile object type.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "EncryptionKey": { + "description": "The default encryption key", + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "ExpirationDays": { + "description": "The default number of days until the data within the domain expires.", + "type": "integer", + "minimum": 1, + "maximum": 1098 + }, + "Fields": { + "description": "A list of the name and ObjectType field.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/FieldMap" + } + }, + "Keys": { + "description": "A list of unique keys that can be used to map data to the profile.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/KeyMap" + } + }, + "CreatedAt": { + "description": "The time of this integration got created.", + "type": "string" + }, + "LastUpdatedAt": { + "description": "The time of this integration got last updated at.", + "type": "string" + }, + "SourceLastUpdatedTimestampFormat": { + "description": "The format of your sourceLastUpdatedTimestamp that was previously set up.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Tags": { + "description": "The tags (keys and values) associated with the integration.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + }, + "TemplateId": { + "description": "A unique identifier for the object template.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "minLength": 1, + "maxLength": 64 + } + }, + "additionalProperties": false, + "required": [ + "DomainName", + "ObjectTypeName", + "Description" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/DomainName", + "/properties/ObjectTypeName" + ], + "readOnlyProperties": [ + "/properties/LastUpdatedAt", + "/properties/CreatedAt" + ], + "primaryIdentifier": [ + "/properties/DomainName", + "/properties/ObjectTypeName" + ], + "handlers": { + "create": { + "permissions": [ + "profile:GetProfileObjectType", + "profile:PutProfileObjectType", + "profile:TagResource" + ] + }, + "read": { + "permissions": [ + "profile:GetProfileObjectType" + ] + }, + "update": { + "permissions": [ + "profile:GetProfileObjectType", + "profile:PutProfileObjectType", + "profile:UntagResource", + "profile:TagResource" + ] + }, + "delete": { + "permissions": [ + "profile:DeleteProfileObjectType" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DomainName": { + "$ref": "resource-schema.json#/properties/DomainName" + } + }, + "required": [ + "DomainName" + ] + }, + "permissions": [ + "profile:ListProfileObjectTypes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/databrew/dataset.json b/internal/aws/cfn/schemas/aws/databrew/dataset.json new file mode 100644 index 00000000..9ce7c0d2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/databrew/dataset.json @@ -0,0 +1,467 @@ +{ + "typeName": "AWS::DataBrew::Dataset", + "description": "Resource schema for AWS::DataBrew::Dataset.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git", + "taggable": true, + "properties": { + "Name": { + "description": "Dataset name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Format": { + "description": "Dataset format", + "enum": [ + "CSV", + "JSON", + "PARQUET", + "EXCEL", + "ORC" + ], + "type": "string" + }, + "FormatOptions": { + "description": "Format options for dataset", + "$ref": "#/definitions/FormatOptions" + }, + "Input": { + "description": "Input", + "$ref": "#/definitions/Input" + }, + "PathOptions": { + "description": "PathOptions", + "$ref": "#/definitions/PathOptions" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "JsonOptions": { + "description": "Json options", + "type": "object", + "properties": { + "MultiLine": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "ExcelOptions": { + "type": "object", + "properties": { + "SheetNames": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 1 + }, + "SheetIndexes": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "integer" + }, + "minItems": 1, + "maxItems": 1 + }, + "HeaderRow": { + "type": "boolean" + } + }, + "oneOf": [ + { + "required": [ + "SheetNames" + ] + }, + { + "required": [ + "SheetIndexes" + ] + } + ], + "additionalProperties": false + }, + "CsvOptions": { + "description": "Csv options", + "type": "object", + "properties": { + "Delimiter": { + "type": "string", + "minLength": 1, + "maxLength": 1 + }, + "HeaderRow": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "FormatOptions": { + "description": "Format options for dataset", + "type": "object", + "properties": { + "Json": { + "$ref": "#/definitions/JsonOptions" + }, + "Excel": { + "$ref": "#/definitions/ExcelOptions" + }, + "Csv": { + "$ref": "#/definitions/CsvOptions" + } + }, + "additionalProperties": false + }, + "Input": { + "description": "Input", + "type": "object", + "properties": { + "S3InputDefinition": { + "$ref": "#/definitions/S3Location" + }, + "DataCatalogInputDefinition": { + "$ref": "#/definitions/DataCatalogInputDefinition" + }, + "DatabaseInputDefinition": { + "$ref": "#/definitions/DatabaseInputDefinition" + }, + "Metadata": { + "$ref": "#/definitions/Metadata" + } + }, + "additionalProperties": false + }, + "S3Location": { + "description": "Input location", + "type": "object", + "properties": { + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Bucket" + ] + }, + "DataCatalogInputDefinition": { + "type": "object", + "properties": { + "CatalogId": { + "description": "Catalog id", + "type": "string" + }, + "DatabaseName": { + "description": "Database name", + "type": "string" + }, + "TableName": { + "description": "Table name", + "type": "string" + }, + "TempDirectory": { + "$ref": "#/definitions/S3Location" + } + }, + "additionalProperties": false + }, + "DatabaseInputDefinition": { + "type": "object", + "properties": { + "GlueConnectionName": { + "description": "Glue connection name", + "type": "string" + }, + "DatabaseTableName": { + "description": "Database table name", + "type": "string" + }, + "TempDirectory": { + "$ref": "#/definitions/S3Location" + }, + "QueryString": { + "description": "Custom SQL to run against the provided AWS Glue connection. This SQL will be used as the input for DataBrew projects and jobs.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "GlueConnectionName" + ] + }, + "Metadata": { + "type": "object", + "properties": { + "SourceArn": { + "description": "Arn of the source of the dataset. For e.g.: AppFlow Flow ARN.", + "type": "string" + } + }, + "additionalProperties": false + }, + "PathOptions": { + "description": "Path options for dataset", + "type": "object", + "properties": { + "FilesLimit": { + "$ref": "#/definitions/FilesLimit" + }, + "LastModifiedDateCondition": { + "$ref": "#/definitions/FilterExpression" + }, + "Parameters": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/PathParameter" + } + } + }, + "additionalProperties": false + }, + "FilesLimit": { + "type": "object", + "properties": { + "MaxFiles": { + "description": "Maximum number of files", + "type": "integer" + }, + "OrderedBy": { + "description": "Ordered by", + "enum": [ + "LAST_MODIFIED_DATE" + ], + "type": "string" + }, + "Order": { + "description": "Order", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "MaxFiles" + ] + }, + "PathParameter": { + "description": "A key-value pair to associate dataset parameter name with its definition.", + "type": "object", + "properties": { + "PathParameterName": { + "$ref": "#/definitions/PathParameterName" + }, + "DatasetParameter": { + "$ref": "#/definitions/DatasetParameter" + } + }, + "additionalProperties": false, + "required": [ + "PathParameterName", + "DatasetParameter" + ] + }, + "PathParameterName": { + "description": "Parameter name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "DatasetParameter": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/PathParameterName" + }, + "Type": { + "description": "Parameter type", + "enum": [ + "String", + "Number", + "Datetime" + ], + "type": "string" + }, + "DatetimeOptions": { + "$ref": "#/definitions/DatetimeOptions" + }, + "CreateColumn": { + "description": "Add the value of this parameter as a column in a dataset.", + "type": "boolean" + }, + "Filter": { + "$ref": "#/definitions/FilterExpression" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Type" + ] + }, + "DatetimeOptions": { + "type": "object", + "properties": { + "Format": { + "description": "Date/time format of a date parameter", + "type": "string", + "minLength": 2, + "maxLength": 100 + }, + "TimezoneOffset": { + "description": "Timezone offset", + "type": "string", + "minLength": 1, + "maxLength": 6, + "pattern": "^(Z|[-+](\\d|\\d{2}|\\d{2}:?\\d{2}))$" + }, + "LocaleCode": { + "description": "Locale code for a date parameter", + "type": "string", + "minLength": 2, + "maxLength": 100, + "pattern": "^[A-Za-z0-9_\\.#@\\-]+$" + } + }, + "additionalProperties": false, + "required": [ + "Format" + ] + }, + "FilterExpression": { + "type": "object", + "properties": { + "Expression": { + "description": "Filtering expression for a parameter", + "type": "string", + "minLength": 4, + "maxLength": 1024, + "pattern": "^[><0-9A-Za-z_.,:)(!= ]+$" + }, + "ValuesMap": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/FilterValue" + } + } + }, + "additionalProperties": false, + "required": [ + "Expression", + "ValuesMap" + ] + }, + "FilterValue": { + "description": "A key-value pair to associate expression variable names with their values", + "type": "object", + "properties": { + "ValueReference": { + "description": "Variable name", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "^:[A-Za-z0-9_]+$" + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + }, + "additionalProperties": false, + "required": [ + "ValueReference", + "Value" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Input" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "databrew:CreateDataset", + "databrew:TagResource", + "databrew:UntagResource", + "glue:GetConnection", + "glue:GetTable", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "databrew:DescribeDataset", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + }, + "update": { + "permissions": [ + "databrew:UpdateDataset", + "glue:GetConnection", + "glue:GetTable" + ] + }, + "delete": { + "permissions": [ + "databrew:DeleteDataset" + ] + }, + "list": { + "permissions": [ + "databrew:ListDatasets", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/databrew/job.json b/internal/aws/cfn/schemas/aws/databrew/job.json new file mode 100644 index 00000000..ed3ad769 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/databrew/job.json @@ -0,0 +1,632 @@ +{ + "typeName": "AWS::DataBrew::Job", + "description": "Resource schema for AWS::DataBrew::Job.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git", + "taggable": true, + "properties": { + "DatasetName": { + "description": "Dataset name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "EncryptionKeyArn": { + "description": "Encryption Key Arn", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "EncryptionMode": { + "description": "Encryption mode", + "enum": [ + "SSE-KMS", + "SSE-S3" + ], + "type": "string" + }, + "Name": { + "description": "Job name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Type": { + "description": "Job type", + "enum": [ + "PROFILE", + "RECIPE" + ], + "type": "string" + }, + "LogSubscription": { + "description": "Log subscription", + "enum": [ + "ENABLE", + "DISABLE" + ], + "type": "string" + }, + "MaxCapacity": { + "description": "Max capacity", + "type": "integer" + }, + "MaxRetries": { + "description": "Max retries", + "type": "integer" + }, + "Outputs": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Output" + } + }, + "DataCatalogOutputs": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/DataCatalogOutput" + } + }, + "DatabaseOutputs": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/DatabaseOutput" + } + }, + "OutputLocation": { + "description": "Output location", + "$ref": "#/definitions/OutputLocation" + }, + "ProjectName": { + "description": "Project name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Recipe": { + "$ref": "#/definitions/Recipe" + }, + "RoleArn": { + "description": "Role arn", + "type": "string" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Timeout": { + "description": "Timeout", + "type": "integer" + }, + "JobSample": { + "description": "Job Sample", + "$ref": "#/definitions/JobSample" + }, + "ProfileConfiguration": { + "description": "Profile Job configuration", + "$ref": "#/definitions/ProfileConfiguration" + }, + "ValidationConfigurations": { + "description": "Data quality rules configuration", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ValidationConfiguration" + } + } + }, + "definitions": { + "S3Location": { + "description": "S3 Output location", + "type": "object", + "properties": { + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + }, + "BucketOwner": { + "type": "string", + "minLength": 12, + "maxLength": 12 + } + }, + "additionalProperties": false, + "required": [ + "Bucket" + ] + }, + "CsvOutputOptions": { + "description": "Output Csv options", + "type": "object", + "properties": { + "Delimiter": { + "type": "string", + "minLength": 1, + "maxLength": 1 + } + }, + "additionalProperties": false + }, + "OutputFormatOptions": { + "description": "Format options for job Output", + "type": "object", + "properties": { + "Csv": { + "$ref": "#/definitions/CsvOutputOptions" + } + }, + "additionalProperties": false + }, + "OutputLocation": { + "description": "Output location", + "type": "object", + "properties": { + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + }, + "BucketOwner": { + "type": "string", + "minLength": 12, + "maxLength": 12 + } + }, + "additionalProperties": false, + "required": [ + "Bucket" + ] + }, + "Output": { + "type": "object", + "properties": { + "CompressionFormat": { + "enum": [ + "GZIP", + "LZ4", + "SNAPPY", + "BZIP2", + "DEFLATE", + "LZO", + "BROTLI", + "ZSTD", + "ZLIB" + ], + "type": "string" + }, + "Format": { + "enum": [ + "CSV", + "JSON", + "PARQUET", + "GLUEPARQUET", + "AVRO", + "ORC", + "XML", + "TABLEAUHYPER" + ], + "type": "string" + }, + "FormatOptions": { + "$ref": "#/definitions/OutputFormatOptions" + }, + "PartitionColumns": { + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Location": { + "$ref": "#/definitions/S3Location" + }, + "Overwrite": { + "type": "boolean" + }, + "MaxOutputFiles": { + "type": "integer", + "minimum": 1, + "maximum": 999 + } + }, + "additionalProperties": false, + "required": [ + "Location" + ] + }, + "DataCatalogOutput": { + "type": "object", + "properties": { + "CatalogId": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "DatabaseName": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "TableName": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "S3Options": { + "$ref": "#/definitions/S3TableOutputOptions" + }, + "DatabaseOptions": { + "$ref": "#/definitions/DatabaseTableOutputOptions" + }, + "Overwrite": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "DatabaseName", + "TableName" + ] + }, + "S3TableOutputOptions": { + "type": "object", + "properties": { + "Location": { + "$ref": "#/definitions/S3Location" + } + }, + "additionalProperties": false, + "required": [ + "Location" + ] + }, + "DatabaseTableOutputOptions": { + "type": "object", + "properties": { + "TempDirectory": { + "$ref": "#/definitions/S3Location" + }, + "TableName": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false, + "required": [ + "TableName" + ] + }, + "DatabaseOutput": { + "type": "object", + "properties": { + "GlueConnectionName": { + "description": "Glue connection name", + "type": "string" + }, + "DatabaseOutputMode": { + "description": "Database table name", + "enum": [ + "NEW_TABLE" + ], + "type": "string" + }, + "DatabaseOptions": { + "$ref": "#/definitions/DatabaseTableOutputOptions" + } + }, + "additionalProperties": false, + "required": [ + "GlueConnectionName", + "DatabaseOptions" + ] + }, + "Recipe": { + "type": "object", + "properties": { + "Name": { + "description": "Recipe name", + "type": "string" + }, + "Version": { + "description": "Recipe version", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Name" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Key" + ] + }, + "SampleMode": { + "description": "Sample configuration mode for profile jobs.", + "enum": [ + "FULL_DATASET", + "CUSTOM_ROWS" + ], + "type": "string" + }, + "JobSize": { + "description": "Sample configuration size for profile jobs.", + "format": "int64", + "type": "integer" + }, + "JobSample": { + "description": "Job Sample", + "type": "object", + "properties": { + "Mode": { + "$ref": "#/definitions/SampleMode" + }, + "Size": { + "$ref": "#/definitions/JobSize" + } + }, + "additionalProperties": false + }, + "ProfileConfiguration": { + "type": "object", + "properties": { + "DatasetStatisticsConfiguration": { + "$ref": "#/definitions/StatisticsConfiguration" + }, + "ProfileColumns": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ColumnSelector" + }, + "minItems": 1 + }, + "ColumnStatisticsConfigurations": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ColumnStatisticsConfiguration" + }, + "minItems": 1 + }, + "EntityDetectorConfiguration": { + "$ref": "#/definitions/EntityDetectorConfiguration" + } + }, + "additionalProperties": false + }, + "EntityDetectorConfiguration": { + "type": "object", + "additionalProperties": false, + "required": [ + "EntityTypes" + ], + "properties": { + "EntityTypes": { + "type": "array", + "insertionOrder": true, + "minItems": 1, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[A-Z_][A-Z\\\\d_]*$" + } + }, + "AllowedStatistics": { + "$ref": "#/definitions/AllowedStatistics" + } + } + }, + "AllowedStatistics": { + "type": "object", + "additionalProperties": false, + "required": [ + "Statistics" + ], + "properties": { + "Statistics": { + "type": "array", + "insertionOrder": true, + "minItems": 1, + "items": { + "$ref": "#/definitions/Statistic" + } + } + } + }, + "ColumnStatisticsConfiguration": { + "type": "object", + "properties": { + "Selectors": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ColumnSelector" + }, + "minItems": 1 + }, + "Statistics": { + "$ref": "#/definitions/StatisticsConfiguration" + } + }, + "required": [ + "Statistics" + ], + "additionalProperties": false + }, + "StatisticsConfiguration": { + "type": "object", + "properties": { + "IncludedStatistics": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Statistic" + }, + "minItems": 1 + }, + "Overrides": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/StatisticOverride" + }, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "ColumnSelector": { + "type": "object", + "properties": { + "Regex": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false + }, + "Statistic": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[A-Z\\_]+$" + }, + "StatisticOverride": { + "type": "object", + "properties": { + "Statistic": { + "$ref": "#/definitions/Statistic" + }, + "Parameters": { + "$ref": "#/definitions/ParameterMap" + } + }, + "required": [ + "Statistic", + "Parameters" + ], + "additionalProperties": false + }, + "ParameterMap": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[A-Za-z0-9]{1,128}$": { + "type": "string" + } + } + }, + "ValidationMode": { + "type": "string", + "enum": [ + "CHECK_ALL" + ] + }, + "ValidationConfiguration": { + "description": "Configuration to attach Rulesets to the job", + "type": "object", + "additionalProperties": false, + "properties": { + "RulesetArn": { + "description": "Arn of the Ruleset", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "ValidationMode": { + "$ref": "#/definitions/ValidationMode" + } + }, + "required": [ + "RulesetArn" + ] + } + }, + "additionalProperties": false, + "required": [ + "Name", + "RoleArn", + "Type" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "databrew:CreateProfileJob", + "databrew:CreateRecipeJob", + "databrew:TagResource", + "databrew:UntagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "databrew:DescribeJob", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + }, + "update": { + "permissions": [ + "databrew:UpdateProfileJob", + "databrew:UpdateRecipeJob", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "databrew:DeleteJob" + ] + }, + "list": { + "permissions": [ + "databrew:ListJobs", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/databrew/project.json b/internal/aws/cfn/schemas/aws/databrew/project.json new file mode 100644 index 00000000..16b86bac --- /dev/null +++ b/internal/aws/cfn/schemas/aws/databrew/project.json @@ -0,0 +1,137 @@ +{ + "typeName": "AWS::DataBrew::Project", + "description": "Resource schema for AWS::DataBrew::Project.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git", + "taggable": true, + "properties": { + "DatasetName": { + "description": "Dataset name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Name": { + "description": "Project name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "RecipeName": { + "description": "Recipe name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "RoleArn": { + "description": "Role arn", + "type": "string" + }, + "Sample": { + "description": "Sample", + "$ref": "#/definitions/Sample" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Sample": { + "type": "object", + "properties": { + "Size": { + "description": "Sample size", + "minimum": 1, + "type": "integer" + }, + "Type": { + "description": "Sample type", + "enum": [ + "FIRST_N", + "LAST_N", + "RANDOM" + ], + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Type" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "DatasetName", + "Name", + "RecipeName", + "RoleArn" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "databrew:CreateProject", + "databrew:TagResource", + "databrew:UntagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "databrew:DescribeProject", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + }, + "update": { + "permissions": [ + "databrew:UpdateProject", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "databrew:DeleteProject" + ] + }, + "list": { + "permissions": [ + "databrew:ListProjects", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/databrew/recipe.json b/internal/aws/cfn/schemas/aws/databrew/recipe.json new file mode 100644 index 00000000..75372cdf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/databrew/recipe.json @@ -0,0 +1,589 @@ +{ + "typeName": "AWS::DataBrew::Recipe", + "description": "Resource schema for AWS::DataBrew::Recipe.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git", + "taggable": true, + "properties": { + "Description": { + "description": "Description of the recipe", + "minLength": 0, + "maxLength": 1024, + "type": "string" + }, + "Name": { + "description": "Recipe name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Steps": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "object", + "$ref": "#/definitions/RecipeStep" + } + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "SecondaryInput": { + "description": "Secondary input", + "type": "object", + "properties": { + "S3InputDefinition": { + "$ref": "#/definitions/S3Location" + }, + "DataCatalogInputDefinition": { + "$ref": "#/definitions/DataCatalogInputDefinition" + } + }, + "oneOf": [ + { + "required": [ + "S3InputDefinition" + ] + }, + { + "required": [ + "DataCatalogInputDefinition" + ] + } + ], + "additionalProperties": false + }, + "S3Location": { + "description": "Input location", + "type": "object", + "properties": { + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Bucket" + ] + }, + "DataCatalogInputDefinition": { + "type": "object", + "properties": { + "CatalogId": { + "description": "Catalog id", + "type": "string" + }, + "DatabaseName": { + "description": "Database name", + "type": "string" + }, + "TableName": { + "description": "Table name", + "type": "string" + }, + "TempDirectory": { + "$ref": "#/definitions/S3Location" + } + }, + "additionalProperties": false + }, + "RecipeStep": { + "type": "object", + "properties": { + "Action": { + "$ref": "#/definitions/Action" + }, + "ConditionExpressions": { + "description": "Condition expressions applied to the step action", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ConditionExpression" + } + } + }, + "additionalProperties": false, + "required": [ + "Action" + ] + }, + "Action": { + "type": "object", + "properties": { + "Operation": { + "description": "Step action operation", + "type": "string" + }, + "Parameters": { + "anyOf": [ + { + "$ref": "#/definitions/RecipeParameters" + }, + { + "$ref": "#/definitions/ParameterMap" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "Operation" + ] + }, + "ConditionExpression": { + "description": "Condition expressions applied to the step action", + "type": "object", + "properties": { + "Condition": { + "description": "Input condition to be applied to the target column", + "type": "string" + }, + "Value": { + "description": "Value of the condition", + "type": "string" + }, + "TargetColumn": { + "description": "Name of the target column", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Condition", + "TargetColumn" + ] + }, + "RecipeParameters": { + "additionalProperties": false, + "properties": { + "AggregateFunction": { + "type": "string" + }, + "Base": { + "type": "string" + }, + "CaseStatement": { + "type": "string" + }, + "CategoryMap": { + "type": "string" + }, + "CharsToRemove": { + "type": "string" + }, + "CollapseConsecutiveWhitespace": { + "type": "string" + }, + "ColumnDataType": { + "type": "string" + }, + "ColumnRange": { + "type": "string" + }, + "Count": { + "type": "string" + }, + "CustomCharacters": { + "type": "string" + }, + "CustomStopWords": { + "type": "string" + }, + "CustomValue": { + "type": "string" + }, + "DatasetsColumns": { + "type": "string" + }, + "DateAddValue": { + "type": "string" + }, + "DateTimeFormat": { + "type": "string" + }, + "DateTimeParameters": { + "type": "string" + }, + "DeleteOtherRows": { + "type": "string" + }, + "Delimiter": { + "type": "string" + }, + "EndPattern": { + "type": "string" + }, + "EndPosition": { + "type": "string" + }, + "EndValue": { + "type": "string" + }, + "ExpandContractions": { + "type": "string" + }, + "Exponent": { + "type": "string" + }, + "FalseString": { + "type": "string" + }, + "GroupByAggFunctionOptions": { + "type": "string" + }, + "GroupByColumns": { + "type": "string" + }, + "HiddenColumns": { + "type": "string" + }, + "IgnoreCase": { + "type": "string" + }, + "IncludeInSplit": { + "type": "string" + }, + "Interval": { + "type": "string" + }, + "IsText": { + "type": "string" + }, + "JoinKeys": { + "type": "string" + }, + "JoinType": { + "type": "string" + }, + "LeftColumns": { + "type": "string" + }, + "Limit": { + "type": "string" + }, + "LowerBound": { + "type": "string" + }, + "MapType": { + "type": "string" + }, + "ModeType": { + "type": "string" + }, + "MultiLine": { + "type": "boolean" + }, + "NumRows": { + "type": "string" + }, + "NumRowsAfter": { + "type": "string" + }, + "NumRowsBefore": { + "type": "string" + }, + "OrderByColumn": { + "type": "string" + }, + "OrderByColumns": { + "type": "string" + }, + "Other": { + "type": "string" + }, + "Pattern": { + "type": "string" + }, + "PatternOption1": { + "type": "string" + }, + "PatternOption2": { + "type": "string" + }, + "PatternOptions": { + "type": "string" + }, + "Period": { + "type": "string" + }, + "Position": { + "type": "string" + }, + "RemoveAllPunctuation": { + "type": "string" + }, + "RemoveAllQuotes": { + "type": "string" + }, + "RemoveAllWhitespace": { + "type": "string" + }, + "RemoveCustomCharacters": { + "type": "string" + }, + "RemoveCustomValue": { + "type": "string" + }, + "RemoveLeadingAndTrailingPunctuation": { + "type": "string" + }, + "RemoveLeadingAndTrailingQuotes": { + "type": "string" + }, + "RemoveLeadingAndTrailingWhitespace": { + "type": "string" + }, + "RemoveLetters": { + "type": "string" + }, + "RemoveNumbers": { + "type": "string" + }, + "RemoveSourceColumn": { + "type": "string" + }, + "RemoveSpecialCharacters": { + "type": "string" + }, + "RightColumns": { + "type": "string" + }, + "SampleSize": { + "type": "string" + }, + "SampleType": { + "type": "string" + }, + "SecondInput": { + "type": "string" + }, + "SecondaryInputs": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SecondaryInput" + } + }, + "SourceColumn": { + "type": "string" + }, + "SourceColumn1": { + "type": "string" + }, + "SourceColumn2": { + "type": "string" + }, + "SourceColumns": { + "type": "string" + }, + "StartColumnIndex": { + "type": "string" + }, + "StartPattern": { + "type": "string" + }, + "StartPosition": { + "type": "string" + }, + "StartValue": { + "type": "string" + }, + "StemmingMode": { + "type": "string" + }, + "StepCount": { + "type": "string" + }, + "StepIndex": { + "type": "string" + }, + "StopWordsMode": { + "type": "string" + }, + "Strategy": { + "type": "string" + }, + "SheetNames": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 1 + }, + "SheetIndexes": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "integer" + }, + "minItems": 1, + "maxItems": 1 + }, + "TargetColumn": { + "type": "string" + }, + "TargetColumnNames": { + "type": "string" + }, + "TargetDateFormat": { + "type": "string" + }, + "TargetIndex": { + "type": "string" + }, + "TimeZone": { + "type": "string" + }, + "TokenizerPattern": { + "type": "string" + }, + "TrueString": { + "type": "string" + }, + "UdfLang": { + "type": "string" + }, + "Units": { + "type": "string" + }, + "UnpivotColumn": { + "type": "string" + }, + "UpperBound": { + "type": "string" + }, + "UseNewDataFrame": { + "type": "string" + }, + "Value": { + "type": "string" + }, + "Value1": { + "type": "string" + }, + "Value2": { + "type": "string" + }, + "ValueColumn": { + "type": "string" + }, + "ViewFrame": { + "type": "string" + }, + "Input": { + "description": "Input", + "type": "object", + "properties": { + "S3InputDefinition": { + "$ref": "#/definitions/S3Location" + }, + "DataCatalogInputDefinition": { + "$ref": "#/definitions/DataCatalogInputDefinition" + } + }, + "oneOf": [ + { + "required": [ + "S3InputDefinition" + ] + }, + { + "required": [ + "DataCatalogInputDefinition" + ] + } + ], + "additionalProperties": false + } + } + }, + "ParameterMap": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[A-Za-z0-9]{1,128}$": { + "type": "string" + } + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Steps" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "databrew:CreateRecipe", + "databrew:TagResource", + "databrew:UntagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "databrew:DescribeRecipe", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + }, + "delete": { + "permissions": [ + "databrew:DeleteRecipeVersion" + ] + }, + "list": { + "permissions": [ + "databrew:ListRecipes", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + }, + "update": { + "permissions": [ + "databrew:UpdateRecipe" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/databrew/ruleset.json b/internal/aws/cfn/schemas/aws/databrew/ruleset.json new file mode 100644 index 00000000..f8f3a056 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/databrew/ruleset.json @@ -0,0 +1,250 @@ +{ + "typeName": "AWS::DataBrew::Ruleset", + "description": "Resource schema for AWS::DataBrew::Ruleset.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git", + "taggable": true, + "definitions": { + "Expression": { + "description": "Expression with rule conditions", + "type": "string", + "minLength": 4, + "maxLength": 1024, + "pattern": "^[><0-9A-Za-z_.,:)(!= ]+$" + }, + "SubstitutionValue": { + "description": "A key-value pair to associate expression's substitution variable names with their values", + "type": "object", + "properties": { + "ValueReference": { + "description": "Variable name", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "^:[A-Za-z0-9_]+$" + }, + "Value": { + "description": "Value or column name", + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + }, + "additionalProperties": false, + "required": [ + "ValueReference", + "Value" + ] + }, + "ValuesMap": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/SubstitutionValue" + } + }, + "ThresholdValue": { + "description": "Threshold value for a rule", + "type": "number" + }, + "ThresholdType": { + "description": "Threshold type for a rule", + "enum": [ + "GREATER_THAN_OR_EQUAL", + "LESS_THAN_OR_EQUAL", + "GREATER_THAN", + "LESS_THAN" + ], + "type": "string" + }, + "ThresholdUnit": { + "description": "Threshold unit for a rule", + "enum": [ + "COUNT", + "PERCENTAGE" + ], + "type": "string" + }, + "Threshold": { + "type": "object", + "properties": { + "Value": { + "$ref": "#/definitions/ThresholdValue" + }, + "Type": { + "$ref": "#/definitions/ThresholdType" + }, + "Unit": { + "$ref": "#/definitions/ThresholdUnit" + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "ColumnSelector": { + "description": "Selector of a column from a dataset for profile job configuration. One selector includes either a column name or a regular expression", + "type": "object", + "properties": { + "Regex": { + "description": "A regular expression for selecting a column from a dataset", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Name": { + "description": "The name of a column from a dataset", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false + }, + "Disabled": { + "description": "Boolean value to disable/enable a rule", + "type": "boolean" + }, + "Rule": { + "description": "Data quality rule for a target resource (dataset)", + "type": "object", + "properties": { + "Name": { + "description": "Name of the rule", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Disabled": { + "$ref": "#/definitions/Disabled" + }, + "CheckExpression": { + "$ref": "#/definitions/Expression" + }, + "SubstitutionMap": { + "$ref": "#/definitions/ValuesMap" + }, + "Threshold": { + "$ref": "#/definitions/Threshold" + }, + "ColumnSelectors": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ColumnSelector" + }, + "minItems": 1 + } + }, + "required": [ + "Name", + "CheckExpression" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Name": { + "description": "Name of the Ruleset", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Description": { + "description": "Description of the Ruleset", + "type": "string", + "maxLength": 1024 + }, + "TargetArn": { + "description": "Arn of the target resource (dataset) to apply the ruleset to", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Rules": { + "description": "List of the data quality rules in the ruleset", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Rule" + }, + "minItems": 1 + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "TargetArn", + "Rules" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/TargetArn" + ], + "handlers": { + "create": { + "permissions": [ + "databrew:CreateRuleset", + "databrew:TagResource", + "databrew:UntagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "databrew:DescribeRuleset", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + }, + "update": { + "permissions": [ + "databrew:UpdateRuleset" + ] + }, + "delete": { + "permissions": [ + "databrew:DeleteRuleset" + ] + }, + "list": { + "permissions": [ + "databrew:ListRulesets", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/databrew/schedule.json b/internal/aws/cfn/schemas/aws/databrew/schedule.json new file mode 100644 index 00000000..2a5f8b78 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/databrew/schedule.json @@ -0,0 +1,111 @@ +{ + "typeName": "AWS::DataBrew::Schedule", + "description": "Resource schema for AWS::DataBrew::Schedule.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-databrew.git", + "taggable": true, + "properties": { + "JobNames": { + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/JobName" + } + }, + "CronExpression": { + "description": "Schedule cron", + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "Name": { + "description": "Schedule Name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "JobName": { + "description": "Job name", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "Name", + "CronExpression" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "databrew:CreateSchedule", + "databrew:TagResource", + "databrew:UntagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "databrew:DescribeSchedule", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + }, + "update": { + "permissions": [ + "databrew:UpdateSchedule" + ] + }, + "delete": { + "permissions": [ + "databrew:DeleteSchedule" + ] + }, + "list": { + "permissions": [ + "databrew:ListSchedules", + "databrew:ListTagsForResource", + "iam:ListRoles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datapipeline/pipeline.json b/internal/aws/cfn/schemas/aws/datapipeline/pipeline.json new file mode 100644 index 00000000..a5cba1e9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datapipeline/pipeline.json @@ -0,0 +1,255 @@ +{ + "typeName": "AWS::DataPipeline::Pipeline", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datapipeline", + "properties": { + "Activate": { + "description": "Indicates whether to validate and start the pipeline or stop an active pipeline. By default, the value is set to true.", + "type": "boolean" + }, + "Description": { + "description": "A description of the pipeline.", + "type": "string" + }, + "Name": { + "description": "The name of the pipeline.", + "type": "string" + }, + "ParameterObjects": { + "description": "The parameter objects used with the pipeline.", + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ParameterObject" + } + }, + "ParameterValues": { + "description": "The parameter values used with the pipeline.", + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ParameterValue" + } + }, + "PipelineObjects": { + "description": "The objects that define the pipeline. These objects overwrite the existing pipeline definition. Not all objects, fields, and values can be updated. For information about restrictions, see Editing Your Pipeline in the AWS Data Pipeline Developer Guide.", + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/PipelineObject" + } + }, + "PipelineTags": { + "description": "A list of arbitrary tags (key-value pairs) to associate with the pipeline, which you can use to control permissions. For more information, see Controlling Access to Pipelines and Resources in the AWS Data Pipeline Developer Guide.", + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/PipelineTag" + } + }, + "PipelineId": { + "type": "string" + } + }, + "definitions": { + "ParameterObject": { + "type": "object", + "properties": { + "Attributes": { + "description": "The attributes of the parameter object.", + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ParameterAttribute" + } + }, + "Id": { + "description": "The ID of the parameter object.", + "type": "string" + } + }, + "required": [ + "Attributes", + "Id" + ], + "additionalProperties": false + }, + "ParameterAttribute": { + "type": "object", + "properties": { + "Key": { + "description": "The field identifier.", + "type": "string" + }, + "StringValue": { + "description": "The field value, expressed as a String.", + "type": "string" + } + }, + "required": [ + "Key", + "StringValue" + ], + "additionalProperties": false + }, + "ParameterValue": { + "type": "object", + "properties": { + "Id": { + "description": "The ID of the parameter value.", + "type": "string" + }, + "StringValue": { + "description": "The field value, expressed as a String.", + "type": "string" + } + }, + "required": [ + "Id", + "StringValue" + ], + "additionalProperties": false + }, + "Field": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "Specifies the name of a field for a particular object. To view valid values for a particular field, see Pipeline Object Reference in the AWS Data Pipeline Developer Guide.", + "type": "string" + }, + "RefValue": { + "description": "A field value that you specify as an identifier of another object in the same pipeline definition.", + "type": "string" + }, + "StringValue": { + "description": "A field value that you specify as a string. To view valid values for a particular field, see Pipeline Object Reference in the AWS Data Pipeline Developer Guide.", + "type": "string" + } + }, + "required": [ + "Key" + ] + }, + "PipelineObject": { + "type": "object", + "additionalProperties": false, + "properties": { + "Fields": { + "description": "Key-value pairs that define the properties of the object.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Field" + } + }, + "Id": { + "description": "The ID of the object.", + "type": "string" + }, + "Name": { + "description": "The name of the object.", + "type": "string" + } + }, + "required": [ + "Fields", + "Id", + "Name" + ] + }, + "PipelineTag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of a tag.", + "type": "string" + }, + "Value": { + "description": "The value to associate with the key name.", + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/PipelineTags" + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/PipelineId" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/PipelineId" + ], + "handlers": { + "create": { + "permissions": [ + "datapipeline:CreatePipeline", + "datapipeline:PutPipelineDefinition", + "datapipeline:GetPipelineDefinition", + "datapipeline:DescribePipelines", + "datapipeline:ValidatePipelineDefinition", + "datapipeline:ActivatePipeline", + "datapipeline:AddTags", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "datapipeline:GetPipelineDefinition", + "datapipeline:DescribePipelines" + ] + }, + "update": { + "permissions": [ + "datapipeline:PutPipelineDefinition", + "datapipeline:AddTags", + "datapipeline:RemoveTags", + "datapipeline:DeactivatePipeline", + "datapipeline:GetPipelineDefinition", + "datapipeline:ActivatePipeline", + "datapipeline:ValidatePipelineDefinition", + "datapipeline:DescribePipelines", + "datapipeline:AddTags", + "datapipeline:RemoveTags", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "datapipeline:DeletePipeline", + "datapipeline:DescribePipelines", + "datapipeline:GetPipelineDefinition", + "datapipeline:RemoveTags" + ] + }, + "list": { + "permissions": [ + "datapipeline:ListPipelines" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/agent.json b/internal/aws/cfn/schemas/aws/datasync/agent.json new file mode 100644 index 00000000..a9cf531e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/agent.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::DataSync::Agent", + "description": "Resource schema for AWS::DataSync::Agent.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "AgentName": { + "description": "The name configured for the agent. Text reference used to identify the agent in the console.", + "type": "string", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "ActivationKey": { + "description": "Activation key of the Agent.", + "type": "string", + "pattern": "[A-Z0-9]{5}(-[A-Z0-9]{5}){4}", + "maxLength": 29 + }, + "SecurityGroupArns": { + "description": "The ARNs of the security group used to protect your data transfer task subnets.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/.*$", + "maxLength": 128 + } + }, + "SubnetArns": { + "description": "The ARNs of the subnets in which DataSync will create elastic network interfaces for each data transfer task.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:subnet/.*$", + "maxLength": 128 + } + }, + "VpcEndpointId": { + "description": "The ID of the VPC endpoint that the agent has access to.", + "type": "string", + "pattern": "^vpce-[0-9a-f]{17}$" + }, + "EndpointType": { + "description": "The service endpoints that the agent will connect to.", + "type": "string", + "enum": [ + "FIPS", + "PUBLIC", + "PRIVATE_LINK" + ] + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AgentArn": { + "description": "The DataSync Agent ARN.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$", + "maxLength": 128 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [], + "readOnlyProperties": [ + "/properties/AgentArn", + "/properties/EndpointType" + ], + "primaryIdentifier": [ + "/properties/AgentArn" + ], + "createOnlyProperties": [ + "/properties/ActivationKey", + "/properties/SecurityGroupArns", + "/properties/SubnetArns", + "/properties/VpcEndpointId" + ], + "writeOnlyProperties": [ + "/properties/ActivationKey" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateAgent", + "datasync:TagResource", + "datasync:DescribeAgent", + "datasync:ListTagsForResource", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcEndpoints" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeAgent", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:UpdateAgent", + "datasync:DescribeAgent", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteAgent" + ] + }, + "list": { + "permissions": [ + "datasync:ListAgents" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationazureblob.json b/internal/aws/cfn/schemas/aws/datasync/locationazureblob.json new file mode 100644 index 00000000..7742c2dc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationazureblob.json @@ -0,0 +1,188 @@ +{ + "typeName": "AWS::DataSync::LocationAzureBlob", + "description": "Resource schema for AWS::DataSync::LocationAzureBlob.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "AzureBlobSasConfiguration": { + "additionalProperties": false, + "description": "Specifies the shared access signature (SAS) that DataSync uses to access your Azure Blob Storage container.", + "type": "object", + "properties": { + "AzureBlobSasToken": { + "description": "Specifies the shared access signature (SAS) token, which indicates the permissions DataSync needs to access your Azure Blob Storage container.", + "type": "string", + "pattern": "(^.+$)", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "AzureBlobSasToken" + ] + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "AgentArns": { + "description": "The Amazon Resource Names (ARNs) of agents to use for an Azure Blob Location.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$", + "maxLength": 128 + }, + "minItems": 1, + "maxItems": 4, + "insertionOrder": false + }, + "AzureBlobAuthenticationType": { + "description": "The specific authentication type that you want DataSync to use to access your Azure Blob Container.", + "type": "string", + "enum": [ + "SAS" + ], + "default": "SAS" + }, + "AzureBlobSasConfiguration": { + "$ref": "#/definitions/AzureBlobSasConfiguration" + }, + "AzureBlobContainerUrl": { + "description": "The URL of the Azure Blob container that was described.", + "type": "string", + "pattern": "^https://[A-Za-z0-9]((.|-+)?[A-Za-z0-9]){0,252}/[a-z0-9](-?[a-z0-9]){2,62}$", + "maxLength": 325 + }, + "AzureBlobType": { + "description": "Specifies a blob type for the objects you're transferring into your Azure Blob Storage container.", + "type": "string", + "enum": [ + "BLOCK" + ], + "default": "BLOCK" + }, + "AzureAccessTier": { + "description": "Specifies an access tier for the objects you're transferring into your Azure Blob Storage container.", + "type": "string", + "enum": [ + "HOT", + "COOL", + "ARCHIVE" + ], + "default": "HOT" + }, + "Subdirectory": { + "description": "The subdirectory in the Azure Blob Container that is used to read data from the Azure Blob Source Location.", + "type": "string", + "maxLength": 1024, + "pattern": "^[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}\\p{C}]*$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the Azure Blob Location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the Azure Blob Location that was described.", + "type": "string", + "pattern": "^(azure-blob)://[a-zA-Z0-9./\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "AzureBlobAuthenticationType", + "AgentArns" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "writeOnlyProperties": [ + "/properties/Subdirectory", + "/properties/AzureBlobSasConfiguration", + "/properties/AzureBlobContainerUrl" + ], + "createOnlyProperties": [ + "/properties/AzureBlobContainerUrl" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationAzureBlob", + "datasync:DescribeLocationAzureBlob", + "datasync:TagResource", + "datasync:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationAzureBlob", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationAzureBlob", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource", + "datasync:UpdateLocationAzureBlob" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationefs.json b/internal/aws/cfn/schemas/aws/datasync/locationefs.json new file mode 100644 index 00000000..3205b070 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationefs.json @@ -0,0 +1,190 @@ +{ + "typeName": "AWS::DataSync::LocationEFS", + "description": "Resource schema for AWS::DataSync::LocationEFS.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "Ec2Config": { + "additionalProperties": false, + "description": "The subnet and security group that DataSync uses to access target EFS file system.", + "type": "object", + "properties": { + "SecurityGroupArns": { + "description": "The Amazon Resource Names (ARNs) of the security groups that are configured for the Amazon EC2 resource.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/.*$", + "maxLength": 128 + }, + "minItems": 1, + "maxItems": 5, + "insertionOrder": false + }, + "SubnetArn": { + "description": "The ARN of the subnet that DataSync uses to access the target EFS file system.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:subnet/.*$", + "maxLength": 128 + } + }, + "required": [ + "SecurityGroupArns", + "SubnetArn" + ] + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Ec2Config": { + "$ref": "#/definitions/Ec2Config" + }, + "EfsFilesystemArn": { + "description": "The Amazon Resource Name (ARN) for the Amazon EFS file system.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):elasticfilesystem:[a-z\\-0-9]*:[0-9]{12}:file-system/fs-.*$", + "maxLength": 128 + }, + "AccessPointArn": { + "description": "The Amazon Resource Name (ARN) for the Amazon EFS Access point that DataSync uses when accessing the EFS file system.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):elasticfilesystem:[a-z\\-0-9]+:[0-9]{12}:access-point/fsap-[0-9a-f]{8,40}$", + "maxLength": 128 + }, + "FileSystemAccessRoleArn": { + "description": "The Amazon Resource Name (ARN) of the AWS IAM role that the DataSync will assume when mounting the EFS file system.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$", + "maxLength": 128 + }, + "InTransitEncryption": { + "description": "Protocol that is used for encrypting the traffic exchanged between the DataSync Agent and the EFS file system.", + "type": "string", + "enum": [ + "NONE", + "TLS1_2" + ] + }, + "Subdirectory": { + "description": "A subdirectory in the location's path. This subdirectory in the EFS file system is used to read data from the EFS source location or write data to the EFS destination.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon EFS file system location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the EFS location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9.\\-/]+$", + "maxLength": 4356 + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Ec2Config" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/Ec2Config", + "/properties/EfsFilesystemArn", + "/properties/Subdirectory", + "/properties/FileSystemAccessRoleArn", + "/properties/InTransitEncryption", + "/properties/AccessPointArn" + ], + "writeOnlyProperties": [ + "/properties/EfsFilesystemArn", + "/properties/Subdirectory" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationEfs", + "datasync:DescribeLocationEfs", + "datasync:ListTagsForResource", + "datasync:TagResource", + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:DescribeMountTargets", + "elasticfilesystem:DescribeAccessPoints", + "iam:PassRole", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationEfs", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationEfs", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationfsxlustre.json b/internal/aws/cfn/schemas/aws/datasync/locationfsxlustre.json new file mode 100644 index 00000000..389b0f01 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationfsxlustre.json @@ -0,0 +1,146 @@ +{ + "typeName": "AWS::DataSync::LocationFSxLustre", + "description": "Resource schema for AWS::DataSync::LocationFSxLustre.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "FsxFilesystemArn": { + "description": "The Amazon Resource Name (ARN) for the FSx for Lustre file system.", + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\\-0-9]+:[0-9]{12}:file-system/fs-[0-9a-f]+$" + }, + "SecurityGroupArns": { + "description": "The ARNs of the security groups that are to use to configure the FSx for Lustre file system.", + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/sg-[a-f0-9]+$" + }, + "maxItems": 5, + "minItems": 1, + "insertionOrder": false + }, + "Subdirectory": { + "description": "A subdirectory in the location's path.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "minItems": 0, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon FSx for Lustre file system location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the FSx for Lustre location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw|hdfs|fsxl)://[a-zA-Z0-9.:/\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "SecurityGroupArns" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "writeOnlyProperties": [ + "/properties/Subdirectory", + "/properties/FsxFilesystemArn" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/FsxFilesystemArn", + "/properties/SecurityGroupArns", + "/properties/Subdirectory" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationFsxLustre", + "datasync:DescribeLocationFsxLustre", + "datasync:ListTagsForResource", + "datasync:TagResource", + "fsx:DescribeFileSystems", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationFsxLustre", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationFsxLustre", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationfsxontap.json b/internal/aws/cfn/schemas/aws/datasync/locationfsxontap.json new file mode 100644 index 00000000..a7c637c8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationfsxontap.json @@ -0,0 +1,251 @@ +{ + "typeName": "AWS::DataSync::LocationFSxONTAP", + "description": "Resource schema for AWS::DataSync::LocationFSxONTAP.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "Protocol": { + "additionalProperties": false, + "description": "Configuration settings for NFS or SMB protocol.", + "type": "object", + "properties": { + "NFS": { + "$ref": "#/definitions/NFS" + }, + "SMB": { + "$ref": "#/definitions/SMB" + } + } + }, + "NFS": { + "additionalProperties": false, + "description": "NFS protocol configuration for FSx ONTAP file system.", + "type": "object", + "properties": { + "MountOptions": { + "$ref": "#/definitions/NfsMountOptions" + } + }, + "required": [ + "MountOptions" + ] + }, + "SMB": { + "additionalProperties": false, + "description": "SMB protocol configuration for FSx ONTAP file system.", + "type": "object", + "properties": { + "MountOptions": { + "$ref": "#/definitions/SmbMountOptions" + }, + "Domain": { + "description": "The name of the Windows domain that the SMB server belongs to.", + "type": "string", + "maxLength": 253, + "pattern": "^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$" + }, + "Password": { + "description": "The password of the user who can mount the share and has the permissions to access files and folders in the SMB share.", + "type": "string", + "maxLength": 104, + "pattern": "^.{0,104}$" + }, + "User": { + "description": "The user who can mount the share, has the permissions to access files and folders in the SMB share.", + "type": "string", + "maxLength": 104, + "pattern": "^[^\\x5B\\x5D\\\\/:;|=,+*?]{1,104}$" + } + }, + "required": [ + "User", + "Password", + "MountOptions" + ] + }, + "NfsMountOptions": { + "additionalProperties": false, + "description": "The NFS mount options that DataSync can use to mount your NFS share.", + "type": "object", + "properties": { + "Version": { + "description": "The specific NFS version that you want DataSync to use to mount your NFS share.", + "type": "string", + "enum": [ + "AUTOMATIC", + "NFS3", + "NFS4_0", + "NFS4_1" + ] + } + } + }, + "SmbMountOptions": { + "additionalProperties": false, + "description": "The mount options used by DataSync to access the SMB server.", + "type": "object", + "properties": { + "Version": { + "description": "The specific SMB version that you want DataSync to use to mount your SMB share.", + "type": "string", + "enum": [ + "AUTOMATIC", + "SMB2", + "SMB3" + ] + } + } + } + }, + "properties": { + "StorageVirtualMachineArn": { + "description": "The Amazon Resource Name (ARN) for the FSx ONTAP SVM.", + "type": "string", + "maxLength": 162, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\\-0-9]+:[0-9]{12}:storage-virtual-machine/fs-[0-9a-f]+/svm-[0-9a-f]{17,}$" + }, + "FsxFilesystemArn": { + "description": "The Amazon Resource Name (ARN) for the FSx ONAP file system.", + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\\-0-9]+:[0-9]{12}:file-system/fs-[0-9a-f]+$" + }, + "SecurityGroupArns": { + "description": "The ARNs of the security groups that are to use to configure the FSx ONTAP file system.", + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/sg-[a-f0-9]+$" + }, + "maxItems": 5, + "minItems": 1, + "insertionOrder": false + }, + "Protocol": { + "$ref": "#/definitions/Protocol" + }, + "Subdirectory": { + "description": "A subdirectory in the location's path.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "minItems": 0, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon FSx ONTAP file system location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the FSx ONTAP file system that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|hdfs|fsx[a-z0-9-]+)://[a-zA-Z0-9.:/\\-]+$", + "maxLength": 4360 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "SecurityGroupArns", + "StorageVirtualMachineArn" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri", + "/properties/FsxFilesystemArn" + ], + "writeOnlyProperties": [ + "/properties/Protocol", + "/properties/Subdirectory" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/StorageVirtualMachineArn", + "/properties/SecurityGroupArns", + "/properties/Protocol", + "/properties/Subdirectory" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationFsxOntap", + "datasync:DescribeLocationFsxOntap", + "datasync:ListTagsForResource", + "datasync:TagResource", + "fsx:DescribeStorageVirtualMachines", + "fsx:DescribeFileSystems", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationFsxOntap", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationFsxOntap", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationfsxopenzfs.json b/internal/aws/cfn/schemas/aws/datasync/locationfsxopenzfs.json new file mode 100644 index 00000000..2ce5ab02 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationfsxopenzfs.json @@ -0,0 +1,191 @@ +{ + "typeName": "AWS::DataSync::LocationFSxOpenZFS", + "description": "Resource schema for AWS::DataSync::LocationFSxOpenZFS.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "Protocol": { + "additionalProperties": false, + "description": "Configuration settings for an NFS or SMB protocol, currently only support NFS", + "type": "object", + "properties": { + "NFS": { + "$ref": "#/definitions/NFS" + } + } + }, + "NFS": { + "additionalProperties": false, + "description": "FSx OpenZFS file system NFS protocol information", + "type": "object", + "properties": { + "MountOptions": { + "$ref": "#/definitions/MountOptions" + } + }, + "required": [ + "MountOptions" + ] + }, + "MountOptions": { + "additionalProperties": false, + "description": "The NFS mount options that DataSync can use to mount your NFS share.", + "type": "object", + "properties": { + "Version": { + "description": "The specific NFS version that you want DataSync to use to mount your NFS share.", + "type": "string", + "enum": [ + "AUTOMATIC", + "NFS3", + "NFS4_0", + "NFS4_1" + ] + } + } + } + }, + "properties": { + "FsxFilesystemArn": { + "description": "The Amazon Resource Name (ARN) for the FSx OpenZFS file system.", + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\\-0-9]+:[0-9]{12}:file-system/fs-[0-9a-f]+$" + }, + "SecurityGroupArns": { + "description": "The ARNs of the security groups that are to use to configure the FSx OpenZFS file system.", + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/sg-[a-f0-9]+$" + }, + "maxItems": 5, + "minItems": 1, + "insertionOrder": false + }, + "Protocol": { + "$ref": "#/definitions/Protocol" + }, + "Subdirectory": { + "description": "A subdirectory in the location's path.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "minItems": 0, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon FSx OpenZFS file system location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the FSx OpenZFS that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw|hdfs|fsxl|fsxz)://[a-zA-Z0-9.:/\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "SecurityGroupArns", + "Protocol" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "writeOnlyProperties": [ + "/properties/Subdirectory", + "/properties/FsxFilesystemArn" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/FsxFilesystemArn", + "/properties/SecurityGroupArns", + "/properties/Protocol", + "/properties/Subdirectory" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationFsxOpenZfs", + "datasync:DescribeLocationFsxOpenZfs", + "datasync:ListTagsForResource", + "datasync:TagResource", + "fsx:DescribeFileSystems", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationFsxOpenZfs", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationFsxOpenZfs", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationfsxwindows.json b/internal/aws/cfn/schemas/aws/datasync/locationfsxwindows.json new file mode 100644 index 00000000..4f4f7810 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationfsxwindows.json @@ -0,0 +1,166 @@ +{ + "typeName": "AWS::DataSync::LocationFSxWindows", + "description": "Resource schema for AWS::DataSync::LocationFSxWindows.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Domain": { + "description": "The name of the Windows domain that the FSx for Windows server belongs to.", + "type": "string", + "maxLength": 253, + "pattern": "^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$" + }, + "FsxFilesystemArn": { + "description": "The Amazon Resource Name (ARN) for the FSx for Windows file system.", + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\\-0-9]*:[0-9]{12}:file-system/fs-.*$" + }, + "Password": { + "description": "The password of the user who has the permissions to access files and folders in the FSx for Windows file system.", + "type": "string", + "maxLength": 104, + "pattern": "^.{0,104}$" + }, + "SecurityGroupArns": { + "description": "The ARNs of the security groups that are to use to configure the FSx for Windows file system.", + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\\-0-9]*:[0-9]{12}:security-group/.*$" + }, + "insertionOrder": false + }, + "Subdirectory": { + "description": "A subdirectory in the location's path.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "User": { + "description": "The user who has the permissions to access files and folders in the FSx for Windows file system.", + "type": "string", + "maxLength": 104, + "pattern": "^[^\\x5B\\x5D\\\\/:;|=,+*?]{1,104}$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon FSx for Windows file system location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the FSx for Windows location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9./\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "User", + "SecurityGroupArns" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "writeOnlyProperties": [ + "/properties/Password", + "/properties/Subdirectory", + "/properties/FsxFilesystemArn" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/Domain", + "/properties/FsxFilesystemArn", + "/properties/Password", + "/properties/SecurityGroupArns", + "/properties/Subdirectory", + "/properties/User" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationFsxWindows", + "datasync:DescribeLocationFsxWindows", + "datasync:ListTagsForResource", + "datasync:TagResource", + "fsx:DescribeFileSystems", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationFsxWindows", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationFsxWindows", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationhdfs.json b/internal/aws/cfn/schemas/aws/datasync/locationhdfs.json new file mode 100644 index 00000000..ad1cab8a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationhdfs.json @@ -0,0 +1,250 @@ +{ + "typeName": "AWS::DataSync::LocationHDFS", + "description": "Resource schema for AWS::DataSync::LocationHDFS.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "NameNode": { + "additionalProperties": false, + "description": "HDFS Name Node IP and port information.", + "type": "object", + "properties": { + "Hostname": { + "description": "The DNS name or IP address of the Name Node in the customer's on premises HDFS cluster.", + "type": "string", + "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$", + "maxLength": 255 + }, + "Port": { + "description": "The port on which the Name Node is listening on for client requests.", + "type": "integer", + "minimum": 1, + "maximum": 65536 + } + }, + "required": [ + "Hostname", + "Port" + ] + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "QopConfiguration": { + "additionalProperties": false, + "description": "Configuration information for RPC Protection and Data Transfer Protection. These parameters can be set to AUTHENTICATION, INTEGRITY, or PRIVACY. The default value is PRIVACY.", + "type": "object", + "properties": { + "RpcProtection": { + "type": "string", + "description": "Configuration for RPC Protection.", + "enum": [ + "AUTHENTICATION", + "INTEGRITY", + "PRIVACY", + "DISABLED" + ], + "default": "PRIVACY" + }, + "DataTransferProtection": { + "type": "string", + "description": "Configuration for Data Transfer Protection.", + "enum": [ + "AUTHENTICATION", + "INTEGRITY", + "PRIVACY", + "DISABLED" + ], + "default": "PRIVACY" + } + } + } + }, + "properties": { + "NameNodes": { + "description": "An array of Name Node(s) of the HDFS location.", + "type": "array", + "items": { + "$ref": "#/definitions/NameNode" + }, + "minItems": 1, + "insertionOrder": false + }, + "BlockSize": { + "description": "Size of chunks (blocks) in bytes that the data is divided into when stored in the HDFS cluster.", + "type": "integer", + "format": "int64", + "minimum": 1048576, + "maximum": 1073741824 + }, + "ReplicationFactor": { + "description": "Number of copies of each block that exists inside the HDFS cluster.", + "type": "integer", + "format": "int64", + "default": 3, + "minimum": 1, + "maximum": 512 + }, + "KmsKeyProviderUri": { + "description": "The identifier for the Key Management Server where the encryption keys that encrypt data inside HDFS clusters are stored.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^kms:\\/\\/http[s]?@(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])(;(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9]))*:[0-9]{1,5}\\/kms$" + }, + "QopConfiguration": { + "$ref": "#/definitions/QopConfiguration" + }, + "AuthenticationType": { + "description": "The authentication mode used to determine identity of user.", + "type": "string", + "enum": [ + "SIMPLE", + "KERBEROS" + ] + }, + "SimpleUser": { + "description": "The user name that has read and write permissions on the specified HDFS cluster.", + "type": "string", + "pattern": "^[_.A-Za-z0-9][-_.A-Za-z0-9]*$", + "minLength": 1, + "maxLength": 256 + }, + "KerberosPrincipal": { + "description": "The unique identity, or principal, to which Kerberos can assign tickets.", + "type": "string", + "pattern": "^.+$", + "minLength": 1, + "maxLength": 256 + }, + "KerberosKeytab": { + "description": "The Base64 string representation of the Keytab file.", + "type": "string", + "maxLength": 87384 + }, + "KerberosKrb5Conf": { + "description": "The string representation of the Krb5Conf file, or the presigned URL to access the Krb5.conf file within an S3 bucket.", + "type": "string", + "maxLength": 174764 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AgentArns": { + "description": "ARN(s) of the agent(s) to use for an HDFS location.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$", + "maxLength": 128 + }, + "minItems": 1, + "maxItems": 4, + "insertionOrder": false + }, + "Subdirectory": { + "description": "The subdirectory in HDFS that is used to read data from the HDFS source location or write data to the HDFS destination.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the HDFS location.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the HDFS location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw|hdfs)://[a-zA-Z0-9.:/\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "NameNodes", + "AuthenticationType", + "AgentArns" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "writeOnlyProperties": [ + "/properties/Subdirectory", + "/properties/KerberosKeytab", + "/properties/KerberosKrb5Conf" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationHdfs", + "datasync:DescribeLocationHdfs", + "datasync:TagResource", + "datasync:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationHdfs", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:UpdateLocationHdfs", + "datasync:DescribeLocationHdfs", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationnfs.json b/internal/aws/cfn/schemas/aws/datasync/locationnfs.json new file mode 100644 index 00000000..cf833375 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationnfs.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::DataSync::LocationNFS", + "description": "Resource schema for AWS::DataSync::LocationNFS", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "MountOptions": { + "additionalProperties": false, + "description": "The NFS mount options that DataSync can use to mount your NFS share.", + "type": "object", + "properties": { + "Version": { + "description": "The specific NFS version that you want DataSync to use to mount your NFS share.", + "type": "string", + "enum": [ + "AUTOMATIC", + "NFS3", + "NFS4_0", + "NFS4_1" + ] + } + } + }, + "OnPremConfig": { + "additionalProperties": false, + "description": "Contains a list of Amazon Resource Names (ARNs) of agents that are used to connect an NFS server.", + "type": "object", + "properties": { + "AgentArns": { + "description": "ARN(s) of the agent(s) to use for an NFS location.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$", + "maxLength": 128 + }, + "minItems": 1, + "maxItems": 4, + "insertionOrder": false + } + }, + "required": [ + "AgentArns" + ] + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "MountOptions": { + "$ref": "#/definitions/MountOptions", + "default": { + "Version": "AUTOMATIC" + } + }, + "OnPremConfig": { + "$ref": "#/definitions/OnPremConfig" + }, + "ServerHostname": { + "description": "The name of the NFS server. This value is the IP address or DNS name of the NFS server.", + "type": "string", + "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$", + "maxLength": 255 + }, + "Subdirectory": { + "description": "The subdirectory in the NFS file system that is used to read data from the NFS source location or write data to the NFS destination.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the NFS location.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the NFS location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9./\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "OnPremConfig" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/ServerHostname" + ], + "writeOnlyProperties": [ + "/properties/ServerHostname", + "/properties/Subdirectory" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationNfs", + "datasync:DescribeLocationNfs", + "datasync:ListTagsForResource", + "datasync:TagResource" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationNfs", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationNfs", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource", + "datasync:UpdateLocationNfs" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationobjectstorage.json b/internal/aws/cfn/schemas/aws/datasync/locationobjectstorage.json new file mode 100644 index 00000000..ccfb6e6e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationobjectstorage.json @@ -0,0 +1,183 @@ +{ + "typeName": "AWS::DataSync::LocationObjectStorage", + "description": "Resource schema for AWS::DataSync::LocationObjectStorage.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "AccessKey": { + "description": "Optional. The access key is used if credentials are required to access the self-managed object storage server.", + "type": "string", + "minLength": 1, + "maxLength": 200, + "pattern": "^.+$" + }, + "AgentArns": { + "description": "The Amazon Resource Name (ARN) of the agents associated with the self-managed object storage server location.", + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$" + }, + "minItems": 1, + "maxItems": 4, + "insertionOrder": false + }, + "BucketName": { + "description": "The name of the bucket on the self-managed object storage server.", + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "SecretKey": { + "description": "Optional. The secret key is used if credentials are required to access the self-managed object storage server.", + "type": "string", + "minLength": 8, + "maxLength": 200, + "pattern": "^.+$" + }, + "ServerCertificate": { + "description": "X.509 PEM content containing a certificate authority or chain to trust.", + "type": "string", + "maxLength": 32768 + }, + "ServerHostname": { + "description": "The name of the self-managed object storage server. This value is the IP address or Domain Name Service (DNS) name of the object storage server.", + "type": "string", + "maxLength": 255, + "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$" + }, + "ServerPort": { + "description": "The port that your self-managed server accepts inbound network traffic on.", + "type": "integer", + "minimum": 1, + "maximum": 65536 + }, + "ServerProtocol": { + "description": "The protocol that the object storage server uses to communicate.", + "type": "string", + "enum": [ + "HTTPS", + "HTTP" + ] + }, + "Subdirectory": { + "description": "The subdirectory in the self-managed object storage server that is used to read data from.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\p{Zs}]*$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the object storage location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw|object-storage)://[a-zA-Z0-9./\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "AgentArns" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "writeOnlyProperties": [ + "/properties/SecretKey", + "/properties/BucketName", + "/properties/ServerHostname", + "/properties/Subdirectory" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/BucketName", + "/properties/ServerHostname" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationObjectStorage", + "datasync:DescribeLocationObjectStorage", + "datasync:ListTagsForResource", + "datasync:TagResource" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationObjectStorage", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationObjectStorage", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource", + "datasync:UpdateLocationObjectStorage" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locations3.json b/internal/aws/cfn/schemas/aws/datasync/locations3.json new file mode 100644 index 00000000..32c71f24 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locations3.json @@ -0,0 +1,167 @@ +{ + "typeName": "AWS::DataSync::LocationS3", + "description": "Resource schema for AWS::DataSync::LocationS3", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "S3Config": { + "additionalProperties": false, + "description": "The Amazon Resource Name (ARN) of the AWS IAM role that is used to access an Amazon S3 bucket.", + "type": "object", + "properties": { + "BucketAccessRoleArn": { + "description": "The ARN of the IAM role of the Amazon S3 bucket.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$", + "maxLength": 2048 + } + }, + "required": [ + "BucketAccessRoleArn" + ] + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "S3Config": { + "$ref": "#/definitions/S3Config" + }, + "S3BucketArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon S3 bucket.", + "type": "string", + "maxLength": 156, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):s3:[a-z\\-0-9]*:[0-9]*:.*$" + }, + "Subdirectory": { + "description": "A subdirectory in the Amazon S3 bucket. This subdirectory in Amazon S3 is used to read data from the S3 source location or write data to the S3 destination.", + "type": "string", + "maxLength": 1024, + "pattern": "^[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}\\p{C}]*$" + }, + "S3StorageClass": { + "description": "The Amazon S3 storage class you want to store your files in when this location is used as a task destination.", + "type": "string", + "enum": [ + "STANDARD", + "STANDARD_IA", + "ONEZONE_IA", + "INTELLIGENT_TIERING", + "GLACIER", + "GLACIER_INSTANT_RETRIEVAL", + "DEEP_ARCHIVE" + ], + "default": "STANDARD" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon S3 bucket location.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the S3 location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9.\\-/]+$", + "maxLength": 4356 + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "S3Config" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "createOnlyProperties": [ + "/properties/S3Config", + "/properties/S3StorageClass", + "/properties/Subdirectory", + "/properties/S3BucketArn" + ], + "writeOnlyProperties": [ + "/properties/Subdirectory", + "/properties/S3BucketArn" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationS3", + "datasync:DescribeLocationS3", + "datasync:ListTagsForResource", + "datasync:TagResource", + "s3:ListAllMyBuckets", + "s3:ListBucket", + "iam:GetRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationS3", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationS3", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/locationsmb.json b/internal/aws/cfn/schemas/aws/datasync/locationsmb.json new file mode 100644 index 00000000..7a9ba536 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/locationsmb.json @@ -0,0 +1,184 @@ +{ + "typeName": "AWS::DataSync::LocationSMB", + "description": "Resource schema for AWS::DataSync::LocationSMB.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "MountOptions": { + "additionalProperties": false, + "description": "The mount options used by DataSync to access the SMB server.", + "type": "object", + "properties": { + "Version": { + "description": "The specific SMB version that you want DataSync to use to mount your SMB share.", + "type": "string", + "enum": [ + "AUTOMATIC", + "SMB1", + "SMB2_0", + "SMB2", + "SMB3" + ] + } + } + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "AgentArns": { + "description": "The Amazon Resource Names (ARNs) of agents to use for a Simple Message Block (SMB) location.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$", + "maxLength": 128 + }, + "minItems": 1, + "maxItems": 4, + "insertionOrder": false + }, + "Domain": { + "description": "The name of the Windows domain that the SMB server belongs to.", + "type": "string", + "maxLength": 253, + "pattern": "^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$" + }, + "MountOptions": { + "$ref": "#/definitions/MountOptions", + "default": { + "Version": "AUTOMATIC" + } + }, + "Password": { + "description": "The password of the user who can mount the share and has the permissions to access files and folders in the SMB share.", + "type": "string", + "maxLength": 104, + "pattern": "^.{0,104}$" + }, + "ServerHostname": { + "description": "The name of the SMB server. This value is the IP address or Domain Name Service (DNS) name of the SMB server.", + "type": "string", + "maxLength": 255, + "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$" + }, + "Subdirectory": { + "description": "The subdirectory in the SMB file system that is used to read data from the SMB source location or write data to the SMB destination", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$" + }, + "User": { + "description": "The user who can mount the share, has the permissions to access files and folders in the SMB share.", + "type": "string", + "maxLength": 104, + "pattern": "^[^\\x5B\\x5D\\\\/:;|=,+*?]{1,104}$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LocationArn": { + "description": "The Amazon Resource Name (ARN) of the SMB location that is created.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$", + "maxLength": 128 + }, + "LocationUri": { + "description": "The URL of the SMB location that was described.", + "type": "string", + "pattern": "^(efs|nfs|s3|smb|fsxw)://[a-zA-Z0-9./\\-]+$", + "maxLength": 4356 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "User", + "AgentArns" + ], + "readOnlyProperties": [ + "/properties/LocationArn", + "/properties/LocationUri" + ], + "primaryIdentifier": [ + "/properties/LocationArn" + ], + "writeOnlyProperties": [ + "/properties/Password", + "/properties/Subdirectory", + "/properties/ServerHostname" + ], + "createOnlyProperties": [ + "/properties/ServerHostname" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateLocationSmb", + "datasync:DescribeLocationSmb", + "datasync:ListTagsForResource", + "datasync:TagResource" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeLocationSmb", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:DescribeLocationSmb", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource", + "datasync:UpdateLocationSmb" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "datasync:ListLocations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/storagesystem.json b/internal/aws/cfn/schemas/aws/datasync/storagesystem.json new file mode 100644 index 00000000..8204c576 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/storagesystem.json @@ -0,0 +1,214 @@ +{ + "typeName": "AWS::DataSync::StorageSystem", + "description": "Resource schema for AWS::DataSync::StorageSystem.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "ServerConfiguration": { + "additionalProperties": false, + "description": "The server name and network port required to connect with the management interface of the on-premises storage system.", + "type": "object", + "properties": { + "ServerHostname": { + "type": "string", + "description": "The domain name or IP address of the storage system's management interface.", + "pattern": "^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$", + "maxLength": 255 + }, + "ServerPort": { + "type": "integer", + "description": "The network port needed to access the system's management interface", + "minimum": 1, + "maximum": 65535 + } + }, + "required": [ + "ServerHostname" + ] + }, + "ServerCredentials": { + "additionalProperties": false, + "description": "The username and password for accessing your on-premises storage system's management interface.", + "type": "object", + "properties": { + "Username": { + "type": "string", + "description": "The username for your storage system's management interface.", + "maxLength": 1024 + }, + "Password": { + "type": "string", + "description": "The password for your storage system's management interface", + "maxLength": 1024 + } + }, + "required": [ + "Username", + "Password" + ] + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "ServerConfiguration": { + "$ref": "#/definitions/ServerConfiguration" + }, + "ServerCredentials": { + "$ref": "#/definitions/ServerCredentials" + }, + "SecretsManagerArn": { + "description": "The ARN of a secret stored by AWS Secrets Manager.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):secretsmanager:[a-z\\-0-9]+:[0-9]{12}:secret:.*", + "maxLength": 2048 + }, + "SystemType": { + "description": "The type of on-premises storage system that DataSync Discovery will analyze.", + "type": "string", + "enum": [ + "NetAppONTAP" + ] + }, + "AgentArns": { + "description": "The ARN of the DataSync agent that connects to and reads from the on-premises storage system's management interface.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:agent/agent-[0-9a-z]{17}$", + "maxLength": 128 + }, + "minItems": 1, + "maxItems": 1, + "insertionOrder": false + }, + "CloudWatchLogGroupArn": { + "description": "The ARN of the Amazon CloudWatch log group used to monitor and log discovery job events.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):logs:[a-z\\-0-9]+:[0-9]{12}:log-group:([^:\\*]*)(:\\*)?$", + "maxLength": 562 + }, + "Name": { + "description": "A familiar name for the on-premises storage system.", + "type": "string", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "StorageSystemArn": { + "description": "The ARN of the on-premises storage system added to DataSync Discovery.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:system/storage-system-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$", + "maxLength": 128 + }, + "ConnectivityStatus": { + "description": "Indicates whether the DataSync agent can access the on-premises storage system.", + "type": "string", + "enum": [ + "PASS", + "FAIL", + "UNKNOWN" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "ServerConfiguration", + "SystemType", + "AgentArns" + ], + "primaryIdentifier": [ + "/properties/StorageSystemArn" + ], + "writeOnlyProperties": [ + "/properties/ServerCredentials" + ], + "readOnlyProperties": [ + "/properties/StorageSystemArn", + "/properties/ConnectivityStatus", + "/properties/SecretsManagerArn" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:AddStorageSystem", + "datasync:DescribeStorageSystem", + "datasync:ListTagsForResource", + "datasync:TagResource", + "secretsmanager:CreateSecret", + "secretsmanager:DescribeSecret", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeStorageSystem", + "datasync:ListTagsForResource", + "secretsmanager:DescribeSecret" + ] + }, + "update": { + "permissions": [ + "datasync:UpdateStorageSystem", + "datasync:DescribeStorageSystem", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource", + "secretsmanager:DescribeSecret", + "secretsmanager:PutSecretValue" + ] + }, + "delete": { + "permissions": [ + "datasync:DescribeStorageSystem", + "datasync:RemoveStorageSystem", + "secretsmanager:DescribeSecret", + "secretsmanager:DeleteSecret" + ] + }, + "list": { + "permissions": [ + "datasync:ListStorageSystems" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/datasync/task.json b/internal/aws/cfn/schemas/aws/datasync/task.json new file mode 100644 index 00000000..297b4487 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/datasync/task.json @@ -0,0 +1,601 @@ +{ + "typeName": "AWS::DataSync::Task", + "description": "Resource schema for AWS::DataSync::Task.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "definitions": { + "FilterRule": { + "additionalProperties": false, + "description": "Specifies which files folders and objects to include or exclude when transferring files from source to destination.", + "type": "object", + "properties": { + "FilterType": { + "description": "The type of filter rule to apply. AWS DataSync only supports the SIMPLE_PATTERN rule type.", + "type": "string", + "enum": [ + "SIMPLE_PATTERN" + ], + "pattern": "^[A-Z0-9_]+$", + "maxLength": 128 + }, + "Value": { + "description": "A single filter string that consists of the patterns to include or exclude. The patterns are delimited by \"|\".", + "type": "string", + "pattern": "^[^\\x00]+$", + "maxLength": 409600 + } + } + }, + "Tag": { + "additionalProperties": false, + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:/-]+$", + "maxLength": 256, + "minLength": 1 + }, + "Value": { + "type": "string", + "description": "The value for an AWS resource tag.", + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "TaskReportConfig": { + "additionalProperties": false, + "description": "Specifies how you want to configure a task report, which provides detailed information about for your Datasync transfer.", + "type": "object", + "properties": { + "Destination": { + "additionalProperties": false, + "description": "Specifies where DataSync uploads your task report.", + "type": "object", + "properties": { + "S3": { + "$ref": "#/definitions/TaskReportConfigDestinationS3" + } + } + }, + "OutputType": { + "description": "Specifies the type of task report that you want.", + "type": "string", + "enum": [ + "SUMMARY_ONLY", + "STANDARD" + ] + }, + "ReportLevel": { + "description": "Specifies whether you want your task report to include only what went wrong with your transfer or a list of what succeeded and didn't.", + "type": "string", + "enum": [ + "ERRORS_ONLY", + "SUCCESSES_AND_ERRORS" + ] + }, + "ObjectVersionIds": { + "description": "Specifies whether your task report includes the new version of each object transferred into an S3 bucket, this only applies if you enable versioning on your bucket.", + "type": "string", + "enum": [ + "INCLUDE", + "NONE" + ] + }, + "Overrides": { + "additionalProperties": false, + "description": "Customizes the reporting level for aspects of your task report. For example, your report might generally only include errors, but you could specify that you want a list of successes and errors just for the files that Datasync attempted to delete in your destination location.", + "type": "object", + "properties": { + "Transferred": { + "additionalProperties": false, + "description": "Specifies the level of reporting for the files, objects, and directories that Datasync attempted to transfer.", + "type": "object", + "properties": { + "ReportLevel": { + "description": "Specifies whether you want your task report to include only what went wrong with your transfer or a list of what succeeded and didn't.", + "type": "string", + "enum": [ + "ERRORS_ONLY", + "SUCCESSES_AND_ERRORS" + ] + } + } + }, + "Verified": { + "additionalProperties": false, + "description": "Specifies the level of reporting for the files, objects, and directories that Datasync attempted to verify at the end of your transfer. This only applies if you configure your task to verify data during and after the transfer (which Datasync does by default)", + "type": "object", + "properties": { + "ReportLevel": { + "description": "Specifies whether you want your task report to include only what went wrong with your transfer or a list of what succeeded and didn't.", + "type": "string", + "enum": [ + "ERRORS_ONLY", + "SUCCESSES_AND_ERRORS" + ] + } + } + }, + "Deleted": { + "additionalProperties": false, + "description": "Specifies the level of reporting for the files, objects, and directories that Datasync attempted to delete in your destination location. This only applies if you configure your task to delete data in the destination that isn't in the source.", + "type": "object", + "properties": { + "ReportLevel": { + "description": "Specifies whether you want your task report to include only what went wrong with your transfer or a list of what succeeded and didn't.", + "type": "string", + "enum": [ + "ERRORS_ONLY", + "SUCCESSES_AND_ERRORS" + ] + } + } + }, + "Skipped": { + "additionalProperties": false, + "description": "Specifies the level of reporting for the files, objects, and directories that Datasync attempted to skip during your transfer.", + "type": "object", + "properties": { + "ReportLevel": { + "description": "Specifies whether you want your task report to include only what went wrong with your transfer or a list of what succeeded and didn't.", + "type": "string", + "enum": [ + "ERRORS_ONLY", + "SUCCESSES_AND_ERRORS" + ] + } + } + } + } + } + }, + "required": [ + "Destination", + "OutputType" + ] + }, + "TaskReportConfigDestinationS3": { + "additionalProperties": false, + "description": "Specifies the Amazon S3 bucket where DataSync uploads your task report.", + "type": "object", + "properties": { + "Subdirectory": { + "description": "Specifies a bucket prefix for your report.", + "type": "string", + "maxLength": 4096, + "pattern": "^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\p{Zs}]*$" + }, + "BucketAccessRoleArn": { + "description": "Specifies the Amazon Resource Name (ARN) of the IAM policy that allows Datasync to upload a task report to your S3 bucket.", + "type": "string", + "maxLength": 2048, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$" + }, + "S3BucketArn": { + "description": "Specifies the ARN of the S3 bucket where Datasync uploads your report.", + "type": "string", + "maxLength": 156, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):(s3|s3-outposts):[a-z\\-0-9]*:[0-9]*:.*$" + } + } + }, + "ManifestConfig": { + "additionalProperties": false, + "description": "Configures a manifest, which is a list of files or objects that you want DataSync to transfer.", + "type": "object", + "properties": { + "Action": { + "description": "Specifies what DataSync uses the manifest for.", + "type": "string", + "enum": [ + "TRANSFER" + ] + }, + "Format": { + "description": "Specifies the file format of your manifest.", + "type": "string", + "enum": [ + "CSV" + ] + }, + "Source": { + "additionalProperties": false, + "description": "Specifies the manifest that you want DataSync to use and where it's hosted.", + "type": "object", + "properties": { + "S3": { + "$ref": "#/definitions/ManifestConfigSourceS3" + } + } + } + }, + "required": [ + "Source" + ] + }, + "ManifestConfigSourceS3": { + "additionalProperties": false, + "description": "Specifies the S3 bucket where you're hosting the manifest that you want AWS DataSync to use.", + "type": "object", + "properties": { + "ManifestObjectPath": { + "description": "Specifies the Amazon S3 object key of your manifest.", + "type": "string", + "maxLength": 1024, + "pattern": "^[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}\\p{C}]*$" + }, + "BucketAccessRoleArn": { + "description": "Specifies the AWS Identity and Access Management (IAM) role that allows DataSync to access your manifest.", + "type": "string", + "maxLength": 2048, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$" + }, + "S3BucketArn": { + "description": "Specifies the Amazon Resource Name (ARN) of the S3 bucket where you're hosting your manifest.", + "type": "string", + "maxLength": 156, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):(s3|s3-outposts):[a-z\\-0-9]*:[0-9]*:.*$" + }, + "ManifestObjectVersionId": { + "description": "Specifies the object version ID of the manifest that you want DataSync to use.", + "type": "string", + "maxLength": 100, + "pattern": "^.+$" + } + } + }, + "TaskSchedule": { + "additionalProperties": false, + "description": "Specifies the schedule you want your task to use for repeated executions.", + "type": "object", + "properties": { + "ScheduleExpression": { + "description": "A cron expression that specifies when AWS DataSync initiates a scheduled transfer from a source to a destination location", + "type": "string", + "maxLength": 256, + "pattern": "^[a-zA-Z0-9\\ \\_\\*\\?\\,\\|\\^\\-\\/\\#\\s\\(\\)\\+]*$" + } + }, + "required": [ + "ScheduleExpression" + ] + }, + "Options": { + "additionalProperties": false, + "description": "Represents the options that are available to control the behavior of a StartTaskExecution operation.", + "type": "object", + "properties": { + "Atime": { + "description": "A file metadata value that shows the last time a file was accessed (that is, when the file was read or written to).", + "type": "string", + "enum": [ + "NONE", + "BEST_EFFORT" + ] + }, + "BytesPerSecond": { + "description": "A value that limits the bandwidth used by AWS DataSync.", + "type": "integer", + "format": "int64", + "minimum": -1 + }, + "Gid": { + "description": "The group ID (GID) of the file's owners.", + "type": "string", + "enum": [ + "NONE", + "INT_VALUE", + "NAME", + "BOTH" + ] + }, + "LogLevel": { + "description": "A value that determines the types of logs that DataSync publishes to a log stream in the Amazon CloudWatch log group that you provide.", + "type": "string", + "enum": [ + "OFF", + "BASIC", + "TRANSFER" + ] + }, + "Mtime": { + "description": "A value that indicates the last time that a file was modified (that is, a file was written to) before the PREPARING phase.", + "type": "string", + "enum": [ + "NONE", + "PRESERVE" + ] + }, + "OverwriteMode": { + "description": "A value that determines whether files at the destination should be overwritten or preserved when copying files.", + "type": "string", + "enum": [ + "ALWAYS", + "NEVER" + ] + }, + "PosixPermissions": { + "description": "A value that determines which users or groups can access a file for a specific purpose such as reading, writing, or execution of the file.", + "type": "string", + "enum": [ + "NONE", + "PRESERVE" + ] + }, + "PreserveDeletedFiles": { + "description": "A value that specifies whether files in the destination that don't exist in the source file system should be preserved.", + "type": "string", + "enum": [ + "PRESERVE", + "REMOVE" + ] + }, + "PreserveDevices": { + "description": "A value that determines whether AWS DataSync should preserve the metadata of block and character devices in the source file system, and recreate the files with that device name and metadata on the destination.", + "type": "string", + "enum": [ + "NONE", + "PRESERVE" + ] + }, + "SecurityDescriptorCopyFlags": { + "description": "A value that determines which components of the SMB security descriptor are copied during transfer.", + "type": "string", + "enum": [ + "NONE", + "OWNER_DACL", + "OWNER_DACL_SACL" + ] + }, + "TaskQueueing": { + "description": "A value that determines whether tasks should be queued before executing the tasks.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "TransferMode": { + "description": "A value that determines whether DataSync transfers only the data and metadata that differ between the source and the destination location, or whether DataSync transfers all the content from the source, without comparing to the destination location.", + "type": "string", + "enum": [ + "CHANGED", + "ALL" + ] + }, + "Uid": { + "description": "The user ID (UID) of the file's owner.", + "type": "string", + "enum": [ + "NONE", + "INT_VALUE", + "NAME", + "BOTH" + ] + }, + "VerifyMode": { + "description": "A value that determines whether a data integrity verification should be performed at the end of a task execution after all data and metadata have been transferred.", + "type": "string", + "enum": [ + "POINT_IN_TIME_CONSISTENT", + "ONLY_FILES_TRANSFERRED", + "NONE" + ] + }, + "ObjectTags": { + "description": "A value that determines whether object tags should be read from the source object store and written to the destination object store.", + "type": "string", + "enum": [ + "PRESERVE", + "NONE" + ] + } + } + }, + "SourceNetworkInterfaceArns": { + "description": "The Amazon Resource Names (ARNs) of the source ENIs (Elastic Network Interfaces) that were created for your subnet.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:aws[\\-a-z]{0,}:ec2:[a-z\\-0-9]*:[0-9]{12}:network-interface/eni-[0-9a-f]+$" + }, + "maxItems": 128, + "insertionOrder": false + }, + "DestinationNetworkInterfaceArns": { + "description": "The Amazon Resource Names (ARNs) of the destination ENIs (Elastic Network Interfaces) that were created for your subnet.", + "type": "array", + "items": { + "type": "string", + "pattern": "^arn:aws[\\-a-z]{0,}:ec2:[a-z\\-0-9]*:[0-9]{12}:network-interface/eni-[0-9a-f]+$" + }, + "maxItems": 128, + "insertionOrder": false + } + }, + "properties": { + "Excludes": { + "type": "array", + "minItems": 0, + "maxItems": 1, + "items": { + "$ref": "#/definitions/FilterRule" + }, + "insertionOrder": false + }, + "Includes": { + "type": "array", + "minItems": 0, + "maxItems": 1, + "items": { + "$ref": "#/definitions/FilterRule" + }, + "insertionOrder": false + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CloudWatchLogGroupArn": { + "description": "The ARN of the Amazon CloudWatch log group that is used to monitor and log events in the task.", + "type": "string", + "maxLength": 562, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):logs:[a-z\\-0-9]*:[0-9]{12}:log-group:([^:\\*]*)(:\\*)?$" + }, + "DestinationLocationArn": { + "description": "The ARN of an AWS storage resource's location.", + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$" + }, + "Name": { + "description": "The name of a task. This value is a text reference that is used to identify the task in the console.", + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\s+=._:@/-]+$" + }, + "Options": { + "$ref": "#/definitions/Options" + }, + "TaskReportConfig": { + "$ref": "#/definitions/TaskReportConfig" + }, + "ManifestConfig": { + "$ref": "#/definitions/ManifestConfig" + }, + "Schedule": { + "$ref": "#/definitions/TaskSchedule" + }, + "SourceLocationArn": { + "description": "The ARN of the source location for the task.", + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$" + }, + "TaskArn": { + "description": "The ARN of the task.", + "type": "string", + "maxLength": 128, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]*:[0-9]{12}:task/task-[0-9a-f]{17}$" + }, + "Status": { + "description": "The status of the task that was described.", + "type": "string", + "enum": [ + "AVAILABLE", + "CREATING", + "QUEUED", + "RUNNING", + "UNAVAILABLE" + ] + }, + "SourceNetworkInterfaceArns": { + "$ref": "#/definitions/SourceNetworkInterfaceArns" + }, + "DestinationNetworkInterfaceArns": { + "$ref": "#/definitions/DestinationNetworkInterfaceArns" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "DestinationLocationArn", + "SourceLocationArn" + ], + "readOnlyProperties": [ + "/properties/TaskArn", + "/properties/Status", + "/properties/SourceNetworkInterfaceArns", + "/properties/DestinationNetworkInterfaceArns" + ], + "primaryIdentifier": [ + "/properties/TaskArn" + ], + "createOnlyProperties": [ + "/properties/DestinationLocationArn", + "/properties/SourceLocationArn" + ], + "handlers": { + "create": { + "permissions": [ + "datasync:CreateTask", + "datasync:DescribeTask", + "datasync:ListTagsForResource", + "datasync:TagResource", + "s3:ListAllMyBuckets", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion", + "ec2:DescribeNetworkInterfaces", + "ec2:CreateNetworkInterface", + "ec2:DeleteNetworkInterface", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:CreateNetworkInterfacePermission", + "fsx:DescribeFileSystems", + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:DescribeMountTargets", + "logs:DescribeLogGroups", + "iam:GetRole", + "iam:PassRole", + "iam:AssumeRole" + ] + }, + "read": { + "permissions": [ + "datasync:DescribeTask", + "datasync:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "datasync:UpdateTask", + "datasync:DescribeTask", + "datasync:ListTagsForResource", + "datasync:TagResource", + "datasync:UntagResource", + "logs:DescribeLogGroups", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "datasync:DeleteTask", + "ec2:DescribeNetworkInterfaces", + "ec2:DeleteNetworkInterface", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "fsx:DescribeFileSystems", + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:DescribeMountTargets", + "iam:GetRole" + ] + }, + "list": { + "permissions": [ + "datasync:ListTasks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/dax/cluster.json b/internal/aws/cfn/schemas/aws/dax/cluster.json new file mode 100644 index 00000000..d4a45253 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dax/cluster.json @@ -0,0 +1,102 @@ +{ + "typeName": "AWS::DAX::Cluster", + "description": "Resource Type definition for AWS::DAX::Cluster", + "additionalProperties": false, + "properties": { + "SSESpecification": { + "$ref": "#/definitions/SSESpecification" + }, + "ClusterDiscoveryEndpointURL": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ReplicationFactor": { + "type": "integer" + }, + "ParameterGroupName": { + "type": "string" + }, + "AvailabilityZones": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "IAMRoleARN": { + "type": "string" + }, + "SubnetGroupName": { + "type": "string" + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "ClusterEndpointEncryptionType": { + "type": "string" + }, + "NotificationTopicARN": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "NodeType": { + "type": "string" + }, + "ClusterName": { + "type": "string" + }, + "ClusterDiscoveryEndpoint": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "SSESpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "SSEEnabled": { + "type": "boolean" + } + } + } + }, + "required": [ + "ReplicationFactor", + "IAMRoleARN", + "NodeType" + ], + "createOnlyProperties": [ + "/properties/IAMRoleARN", + "/properties/SSESpecification", + "/properties/ClusterEndpointEncryptionType", + "/properties/ClusterName", + "/properties/NodeType", + "/properties/SubnetGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ClusterDiscoveryEndpoint", + "/properties/Arn", + "/properties/ClusterDiscoveryEndpointURL" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dax/parametergroup.json b/internal/aws/cfn/schemas/aws/dax/parametergroup.json new file mode 100644 index 00000000..c81269a9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dax/parametergroup.json @@ -0,0 +1,28 @@ +{ + "typeName": "AWS::DAX::ParameterGroup", + "description": "Resource Type definition for AWS::DAX::ParameterGroup", + "additionalProperties": false, + "properties": { + "ParameterNameValues": { + "type": "object" + }, + "Description": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "ParameterGroupName": { + "type": "string" + } + }, + "createOnlyProperties": [ + "/properties/ParameterGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dax/subnetgroup.json b/internal/aws/cfn/schemas/aws/dax/subnetgroup.json new file mode 100644 index 00000000..59b66635 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dax/subnetgroup.json @@ -0,0 +1,35 @@ +{ + "typeName": "AWS::DAX::SubnetGroup", + "description": "Resource Type definition for AWS::DAX::SubnetGroup", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SubnetGroupName": { + "type": "string" + } + }, + "required": [ + "SubnetIds" + ], + "createOnlyProperties": [ + "/properties/SubnetGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/detective/graph.json b/internal/aws/cfn/schemas/aws/detective/graph.json new file mode 100644 index 00000000..173d1f20 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/detective/graph.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::Detective::Graph", + "description": "Resource schema for AWS::Detective::Graph", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-detective.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. Valid characters are Unicode letters, digits, white space, and any of the following symbols: _ . : / = + - @ ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. Valid characters are Unicode letters, digits, white space, and any of the following symbols: _ . : / = + - @ ", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "description": "The Detective graph ARN" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AutoEnableMembers": { + "type": "boolean", + "default": false, + "description": "Indicates whether to automatically enable new organization accounts as member accounts in the organization behavior graph." + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "detective:CreateGraph", + "detective:UpdateOrganizationConfiguration", + "organizations:DescribeOrganization" + ] + }, + "update": { + "permissions": [ + "detective:UntagResource", + "detective:TagResource", + "detective:ListTagsForResource", + "detective:UpdateOrganizationConfiguration", + "organizations:DescribeOrganization" + ] + }, + "read": { + "permissions": [ + "detective:ListGraphs", + "detective:ListTagsForResource", + "detective:DescribeOrganizationConfiguration", + "organizations:DescribeOrganization" + ] + }, + "delete": { + "permissions": [ + "detective:DeleteGraph" + ] + }, + "list": { + "permissions": [ + "detective:ListGraphs", + "detective:ListTagsForResource", + "detective:DescribeOrganizationConfiguration", + "organizations:DescribeOrganization" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/detective/memberinvitation.json b/internal/aws/cfn/schemas/aws/detective/memberinvitation.json new file mode 100644 index 00000000..fce5833c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/detective/memberinvitation.json @@ -0,0 +1,78 @@ +{ + "typeName": "AWS::Detective::MemberInvitation", + "description": "Resource schema for AWS::Detective::MemberInvitation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-detective.git", + "properties": { + "GraphArn": { + "description": "The ARN of the graph to which the member account will be invited", + "type": "string", + "pattern": "arn:aws(-[\\w]+)*:detective:(([a-z]+-)+[0-9]+):[0-9]{12}:graph:[0-9a-f]{32}" + }, + "MemberId": { + "description": "The AWS account ID to be invited to join the graph as a member", + "type": "string", + "pattern": "[0-9]{12}" + }, + "MemberEmailAddress": { + "description": "The root email address for the account to be invited, for validation. Updating this field has no effect.", + "type": "string", + "pattern": ".*@.*" + }, + "DisableEmailNotification": { + "description": "When set to true, invitation emails are not sent to the member accounts. Member accounts must still accept the invitation before they are added to the behavior graph. Updating this field has no effect.", + "type": "boolean", + "default": false + }, + "Message": { + "description": "A message to be included in the email invitation sent to the invited account. Updating this field has no effect.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + } + }, + "additionalProperties": false, + "required": [ + "GraphArn", + "MemberId", + "MemberEmailAddress" + ], + "primaryIdentifier": [ + "/properties/GraphArn", + "/properties/MemberId" + ], + "createOnlyProperties": [ + "/properties/GraphArn", + "/properties/MemberId" + ], + "writeOnlyProperties": [ + "/properties/Message", + "/properties/DisableEmailNotification" + ], + "handlers": { + "create": { + "permissions": [ + "detective:CreateMembers", + "detective:GetMembers" + ] + }, + "read": { + "permissions": [ + "detective:GetMembers" + ] + }, + "update": { + "permissions": [] + }, + "delete": { + "permissions": [ + "detective:DeleteMembers" + ] + }, + "list": { + "permissions": [ + "detective:ListGraphs", + "detective:ListMembers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/detective/organizationadmin.json b/internal/aws/cfn/schemas/aws/detective/organizationadmin.json new file mode 100644 index 00000000..eee45ea3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/detective/organizationadmin.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::Detective::OrganizationAdmin", + "description": "Resource schema for AWS::Detective::OrganizationAdmin", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-detective.git", + "properties": { + "AccountId": { + "description": "The account ID of the account that should be registered as your Organization's delegated administrator for Detective", + "type": "string", + "pattern": "[0-9]{12}" + }, + "GraphArn": { + "type": "string", + "description": "The Detective graph ARN" + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/GraphArn" + ], + "required": [ + "AccountId" + ], + "primaryIdentifier": [ + "/properties/AccountId" + ], + "createOnlyProperties": [ + "/properties/AccountId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "detective:EnableOrganizationAdminAccount", + "detective:ListOrganizationAdminAccount", + "iam:CreateServiceLinkedRole", + "organizations:RegisterDelegatedAdministrator", + "organizations:DescribeOrganization", + "organizations:EnableAWSServiceAccess", + "organizations:ListAccounts" + ] + }, + "read": { + "permissions": [ + "detective:ListOrganizationAdminAccount", + "organizations:DescribeOrganization" + ] + }, + "update": { + "permissions": [] + }, + "delete": { + "permissions": [ + "detective:DisableOrganizationAdminAccount", + "detective:ListOrganizationAdminAccount", + "organizations:DescribeOrganization" + ] + }, + "list": { + "permissions": [ + "detective:ListOrganizationAdminAccount", + "organizations:DescribeOrganization" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/devopsguru/loganomalydetectionintegration.json b/internal/aws/cfn/schemas/aws/devopsguru/loganomalydetectionintegration.json new file mode 100644 index 00000000..a6cf023c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/devopsguru/loganomalydetectionintegration.json @@ -0,0 +1,62 @@ +{ + "typeName": "AWS::DevOpsGuru::LogAnomalyDetectionIntegration", + "description": "This resource schema represents the LogAnomalyDetectionIntegration resource in the Amazon DevOps Guru.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AccountId": { + "description": "User account id, used as the primary identifier for the resource", + "type": "string", + "pattern": "^\\d{12}$" + } + }, + "tagging": { + "taggable": false + }, + "properties": { + "AccountId": { + "$ref": "#/definitions/AccountId" + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/AccountId" + ], + "primaryIdentifier": [ + "/properties/AccountId" + ], + "handlers": { + "create": { + "permissions": [ + "devops-guru:DescribeServiceIntegration", + "devops-guru:UpdateServiceIntegration", + "logs:TagLogGroup", + "logs:UntagLogGroup" + ] + }, + "read": { + "permissions": [ + "devops-guru:DescribeServiceIntegration" + ] + }, + "update": { + "permissions": [ + "devops-guru:UpdateServiceIntegration", + "logs:TagLogGroup", + "logs:UntagLogGroup" + ] + }, + "delete": { + "permissions": [ + "devops-guru:DescribeServiceIntegration", + "devops-guru:UpdateServiceIntegration", + "logs:TagLogGroup", + "logs:UntagLogGroup" + ] + }, + "list": { + "permissions": [ + "devops-guru:DescribeServiceIntegration" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/devopsguru/notificationchannel.json b/internal/aws/cfn/schemas/aws/devopsguru/notificationchannel.json new file mode 100644 index 00000000..065c91e7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/devopsguru/notificationchannel.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::DevOpsGuru::NotificationChannel", + "description": "This resource schema represents the NotificationChannel resource in the Amazon DevOps Guru.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-devops-guru", + "definitions": { + "NotificationChannelConfig": { + "description": "Information about notification channels you have configured with DevOps Guru.", + "type": "object", + "properties": { + "Sns": { + "$ref": "#/definitions/SnsChannelConfig" + }, + "Filters": { + "$ref": "#/definitions/NotificationFilterConfig" + } + }, + "additionalProperties": false + }, + "SnsChannelConfig": { + "description": "Information about a notification channel configured in DevOps Guru to send notifications when insights are created.", + "type": "object", + "properties": { + "TopicArn": { + "type": "string", + "minLength": 36, + "maxLength": 1024, + "pattern": "^arn:aws[a-z0-9-]*:sns:[a-z0-9-]+:\\d{12}:[^:]+$" + } + }, + "additionalProperties": false + }, + "NotificationFilterConfig": { + "description": "Information about filters of a notification channel configured in DevOpsGuru to filter for insights.", + "type": "object", + "properties": { + "Severities": { + "$ref": "#/definitions/InsightSeveritiesFilterList" + }, + "MessageTypes": { + "$ref": "#/definitions/NotificationMessageTypesFilterList" + } + }, + "additionalProperties": false + }, + "InsightSeverity": { + "description": "DevOps Guru Insight Severity Enum", + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ] + }, + "NotificationMessageType": { + "description": "DevOps Guru NotificationMessageType Enum", + "type": "string", + "enum": [ + "NEW_INSIGHT", + "CLOSED_INSIGHT", + "NEW_ASSOCIATION", + "SEVERITY_UPGRADED", + "NEW_RECOMMENDATION" + ] + }, + "InsightSeveritiesFilterList": { + "description": "DevOps Guru insight severities to filter for", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/InsightSeverity" + }, + "maxItems": 3, + "minItems": 1 + }, + "NotificationMessageTypesFilterList": { + "description": "DevOps Guru message types to filter for", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/NotificationMessageType" + }, + "maxItems": 5, + "minItems": 1 + } + }, + "properties": { + "Config": { + "$ref": "#/definitions/NotificationChannelConfig" + }, + "Id": { + "description": "The ID of a notification channel.", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + } + }, + "additionalProperties": false, + "required": [ + "Config" + ], + "createOnlyProperties": [ + "/properties/Config" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "devops-guru:AddNotificationChannel", + "devops-guru:ListNotificationChannels", + "sns:Publish", + "sns:GetTopicAttributes", + "sns:SetTopicAttributes" + ] + }, + "list": { + "permissions": [ + "devops-guru:ListNotificationChannels" + ] + }, + "delete": { + "permissions": [ + "devops-guru:RemoveNotificationChannel", + "devops-guru:ListNotificationChannels" + ] + }, + "read": { + "permissions": [ + "devops-guru:ListNotificationChannels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/devopsguru/resourcecollection.json b/internal/aws/cfn/schemas/aws/devopsguru/resourcecollection.json new file mode 100644 index 00000000..5a582c68 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/devopsguru/resourcecollection.json @@ -0,0 +1,129 @@ +{ + "typeName": "AWS::DevOpsGuru::ResourceCollection", + "description": "This resource schema represents the ResourceCollection resource in the Amazon DevOps Guru.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-devops-guru", + "definitions": { + "ResourceCollectionFilter": { + "description": "Information about a filter used to specify which AWS resources are analyzed for anomalous behavior by DevOps Guru.", + "type": "object", + "properties": { + "CloudFormation": { + "$ref": "#/definitions/CloudFormationCollectionFilter" + }, + "Tags": { + "$ref": "#/definitions/TagCollections" + } + }, + "additionalProperties": false + }, + "CloudFormationCollectionFilter": { + "description": "CloudFormation resource for DevOps Guru to monitor", + "type": "object", + "properties": { + "StackNames": { + "description": "An array of CloudFormation stack names.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z*]+[a-zA-Z0-9-]*$" + }, + "minItems": 1, + "maxItems": 1000, + "insertionOrder": false + } + }, + "additionalProperties": false + }, + "TagCollections": { + "description": "Tagged resources for DevOps Guru to monitor", + "type": "array", + "items": { + "$ref": "#/definitions/TagCollection" + }, + "insertionOrder": false + }, + "TagCollection": { + "description": "Tagged resource for DevOps Guru to monitor", + "type": "object", + "properties": { + "AppBoundaryKey": { + "description": "A Tag key for DevOps Guru app boundary.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "TagValues": { + "description": "Tag values of DevOps Guru app boundary.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "minItems": 1, + "maxItems": 1000, + "insertionOrder": false + } + }, + "additionalProperties": false + } + }, + "properties": { + "ResourceCollectionFilter": { + "$ref": "#/definitions/ResourceCollectionFilter" + }, + "ResourceCollectionType": { + "description": "The type of ResourceCollection", + "type": "string", + "enum": [ + "AWS_CLOUD_FORMATION", + "AWS_TAGS" + ] + } + }, + "additionalProperties": false, + "required": [ + "ResourceCollectionFilter" + ], + "readOnlyProperties": [ + "/properties/ResourceCollectionType" + ], + "primaryIdentifier": [ + "/properties/ResourceCollectionType" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "devops-guru:UpdateResourceCollection", + "devops-guru:GetResourceCollection" + ] + }, + "read": { + "permissions": [ + "devops-guru:GetResourceCollection" + ] + }, + "delete": { + "permissions": [ + "devops-guru:UpdateResourceCollection", + "devops-guru:GetResourceCollection" + ] + }, + "list": { + "permissions": [ + "devops-guru:GetResourceCollection" + ] + }, + "update": { + "permissions": [ + "devops-guru:UpdateResourceCollection", + "devops-guru:GetResourceCollection" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/directoryservice/microsoftad.json b/internal/aws/cfn/schemas/aws/directoryservice/microsoftad.json new file mode 100644 index 00000000..9813d3a1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/directoryservice/microsoftad.json @@ -0,0 +1,84 @@ +{ + "typeName": "AWS::DirectoryService::MicrosoftAD", + "description": "Resource Type definition for AWS::DirectoryService::MicrosoftAD", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Alias": { + "type": "string" + }, + "DnsIpAddresses": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "CreateAlias": { + "type": "boolean" + }, + "Edition": { + "type": "string" + }, + "EnableSso": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Password": { + "type": "string" + }, + "ShortName": { + "type": "string" + }, + "VpcSettings": { + "$ref": "#/definitions/VpcSettings" + } + }, + "definitions": { + "VpcSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubnetIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "VpcId": { + "type": "string" + } + }, + "required": [ + "VpcId", + "SubnetIds" + ] + } + }, + "required": [ + "VpcSettings", + "Name", + "Password" + ], + "readOnlyProperties": [ + "/properties/Alias", + "/properties/DnsIpAddresses", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/VpcSettings", + "/properties/Edition", + "/properties/Name", + "/properties/Password", + "/properties/ShortName", + "/properties/CreateAlias" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/directoryservice/simplead.json b/internal/aws/cfn/schemas/aws/directoryservice/simplead.json new file mode 100644 index 00000000..717eaf04 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/directoryservice/simplead.json @@ -0,0 +1,163 @@ +{ + "typeName": "AWS::DirectoryService::SimpleAD", + "description": "Resource Type definition for AWS::DirectoryService::SimpleAD", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-directoryservice-simplead.html", + "additionalProperties": false, + "definitions": { + "VpcSettings": { + "$comment": "Contains VPC information", + "type": "object", + "additionalProperties": false, + "properties": { + "SubnetIds": { + "description": "The identifiers of the subnets for the directory servers. The two subnets must be in different Availability Zones. AWS Directory Service specifies a directory server and a DNS server in each of these subnets.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "VpcId": { + "description": "The identifier of the VPC in which to create the directory.", + "type": "string" + } + }, + "required": [ + "VpcId", + "SubnetIds" + ] + } + }, + "properties": { + "DirectoryId": { + "description": "The unique identifier for a directory.", + "type": "string" + }, + "Alias": { + "description": "The alias for a directory.", + "type": "string" + }, + "DnsIpAddresses": { + "description": "The IP addresses of the DNS servers for the directory, such as [ \"172.31.3.154\", \"172.31.63.203\" ].", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "CreateAlias": { + "description": "The name of the configuration set.", + "type": "boolean" + }, + "Description": { + "description": "Description for the directory.", + "type": "string" + }, + "EnableSso": { + "description": "Whether to enable single sign-on for a Simple Active Directory in AWS.", + "type": "boolean" + }, + "Name": { + "description": "The fully qualified domain name for the AWS Managed Simple AD directory.", + "type": "string" + }, + "Password": { + "description": "The password for the default administrative user named Admin.", + "type": "string" + }, + "ShortName": { + "description": "The NetBIOS name for your domain.", + "type": "string" + }, + "Size": { + "description": "The size of the directory.", + "type": "string" + }, + "VpcSettings": { + "description": "VPC settings of the Simple AD directory server in AWS.", + "$ref": "#/definitions/VpcSettings" + } + }, + "required": [ + "VpcSettings", + "Size", + "Name" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "readOnlyProperties": [ + "/properties/Alias", + "/properties/DnsIpAddresses", + "/properties/DirectoryId" + ], + "createOnlyProperties": [ + "/properties/Size", + "/properties/VpcSettings", + "/properties/Name", + "/properties/Password", + "/properties/ShortName", + "/properties/Description", + "/properties/CreateAlias" + ], + "writeOnlyProperties": [ + "/properties/Password" + ], + "primaryIdentifier": [ + "/properties/DirectoryId" + ], + "handlers": { + "create": { + "permissions": [ + "ds:CreateDirectory", + "ds:CreateAlias", + "ds:EnableSso", + "ds:DescribeDirectories", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "ec2:CreateSecurityGroup", + "ec2:CreateNetworkInterface", + "ec2:DescribeNetworkInterfaces", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:AuthorizeSecurityGroupEgress", + "ec2:CreateTags" + ], + "timeoutInMinutes": 60 + }, + "read": { + "permissions": [ + "ds:DescribeDirectories" + ] + }, + "update": { + "permissions": [ + "ds:EnableSso", + "ds:DisableSso", + "ds:DescribeDirectories" + ] + }, + "delete": { + "permissions": [ + "ds:DeleteDirectory", + "ds:DescribeDirectories", + "ec2:DescribeNetworkInterfaces", + "ec2:DeleteSecurityGroup", + "ec2:DeleteNetworkInterface", + "ec2:RevokeSecurityGroupIngress", + "ec2:RevokeSecurityGroupEgress", + "ec2:DeleteTags" + ], + "timeoutInMinutes": 100 + }, + "list": { + "permissions": [ + "ds:DescribeDirectories" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/dlm/lifecyclepolicy.json b/internal/aws/cfn/schemas/aws/dlm/lifecyclepolicy.json new file mode 100644 index 00000000..174530bf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dlm/lifecyclepolicy.json @@ -0,0 +1,577 @@ +{ + "typeName": "AWS::DLM::LifecyclePolicy", + "description": "Resource Type definition for AWS::DLM::LifecyclePolicy", + "additionalProperties": false, + "properties": { + "CreateInterval": { + "type": "integer" + }, + "Description": { + "type": "string" + }, + "ExtendDeletion": { + "type": "boolean" + }, + "Exclusions": { + "$ref": "#/definitions/Exclusions" + }, + "RetainInterval": { + "type": "integer" + }, + "ExecutionRoleArn": { + "type": "string" + }, + "DefaultPolicy": { + "type": "string" + }, + "State": { + "type": "string" + }, + "CrossRegionCopyTargets": { + "$ref": "#/definitions/CrossRegionCopyTargets" + }, + "PolicyDetails": { + "$ref": "#/definitions/PolicyDetails" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CopyTags": { + "type": "boolean" + } + }, + "definitions": { + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "CrossRegionCopy": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CrossRegionCopyAction" + } + }, + "Name": { + "type": "string" + } + }, + "required": [ + "CrossRegionCopy", + "Name" + ] + }, + "Exclusions": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExcludeTags": { + "$ref": "#/definitions/ExcludeTags" + }, + "ExcludeVolumeTypes": { + "$ref": "#/definitions/ExcludeVolumeTypesList" + }, + "ExcludeBootVolumes": { + "type": "boolean" + } + } + }, + "ArchiveRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "RetainRule": { + "$ref": "#/definitions/ArchiveRetainRule" + } + }, + "required": [ + "RetainRule" + ] + }, + "ExcludeVolumeTypesList": { + "type": "object", + "additionalProperties": false + }, + "DeprecateRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalUnit": { + "type": "string" + }, + "Count": { + "type": "integer" + }, + "Interval": { + "type": "integer" + } + } + }, + "CrossRegionCopyDeprecateRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalUnit": { + "type": "string" + }, + "Interval": { + "type": "integer" + } + }, + "required": [ + "IntervalUnit", + "Interval" + ] + }, + "CreateRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalUnit": { + "type": "string" + }, + "Scripts": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Script" + } + }, + "Times": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "CronExpression": { + "type": "string" + }, + "Interval": { + "type": "integer" + }, + "Location": { + "type": "string" + } + } + }, + "PolicyDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "PolicyLanguage": { + "type": "string" + }, + "ResourceTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Schedules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Schedule" + } + }, + "PolicyType": { + "type": "string" + }, + "CreateInterval": { + "type": "integer" + }, + "Parameters": { + "$ref": "#/definitions/Parameters" + }, + "ExtendDeletion": { + "type": "boolean" + }, + "Exclusions": { + "$ref": "#/definitions/Exclusions" + }, + "Actions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Action" + } + }, + "ResourceType": { + "type": "string" + }, + "RetainInterval": { + "type": "integer" + }, + "EventSource": { + "$ref": "#/definitions/EventSource" + }, + "CrossRegionCopyTargets": { + "$ref": "#/definitions/CrossRegionCopyTargets" + }, + "TargetTags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ResourceLocations": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "CopyTags": { + "type": "boolean" + } + } + }, + "Script": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExecutionHandlerService": { + "type": "string" + }, + "ExecutionTimeout": { + "type": "integer" + }, + "Stages": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ExecutionHandler": { + "type": "string" + }, + "MaximumRetryCount": { + "type": "integer" + }, + "ExecuteOperationOnScriptFailure": { + "type": "boolean" + } + } + }, + "Parameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExcludeBootVolume": { + "type": "boolean" + }, + "NoReboot": { + "type": "boolean" + }, + "ExcludeDataVolumeTags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + } + }, + "CrossRegionCopyRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetRegion": { + "type": "string" + }, + "Target": { + "type": "string" + }, + "DeprecateRule": { + "$ref": "#/definitions/CrossRegionCopyDeprecateRule" + }, + "Encrypted": { + "type": "boolean" + }, + "CmkArn": { + "type": "string" + }, + "RetainRule": { + "$ref": "#/definitions/CrossRegionCopyRetainRule" + }, + "CopyTags": { + "type": "boolean" + } + }, + "required": [ + "Encrypted" + ] + }, + "EncryptionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Encrypted": { + "type": "boolean" + }, + "CmkArn": { + "type": "string" + } + }, + "required": [ + "Encrypted" + ] + }, + "CrossRegionCopyRetainRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalUnit": { + "type": "string" + }, + "Interval": { + "type": "integer" + } + }, + "required": [ + "IntervalUnit", + "Interval" + ] + }, + "ExcludeTags": { + "type": "object", + "additionalProperties": false + }, + "EventParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "DescriptionRegex": { + "type": "string" + }, + "EventType": { + "type": "string" + }, + "SnapshotOwner": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "EventType", + "SnapshotOwner" + ] + }, + "RetainRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalUnit": { + "type": "string" + }, + "Count": { + "type": "integer" + }, + "Interval": { + "type": "integer" + } + } + }, + "CrossRegionCopyAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Target": { + "type": "string" + }, + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration" + }, + "RetainRule": { + "$ref": "#/definitions/CrossRegionCopyRetainRule" + } + }, + "required": [ + "Target", + "EncryptionConfiguration" + ] + }, + "EventSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Parameters": { + "$ref": "#/definitions/EventParameters" + } + }, + "required": [ + "Type" + ] + }, + "ArchiveRetainRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "RetentionArchiveTier": { + "$ref": "#/definitions/RetentionArchiveTier" + } + }, + "required": [ + "RetentionArchiveTier" + ] + }, + "CrossRegionCopyTargets": { + "type": "object", + "additionalProperties": false + }, + "Schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "ShareRules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ShareRule" + } + }, + "DeprecateRule": { + "$ref": "#/definitions/DeprecateRule" + }, + "TagsToAdd": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreateRule": { + "$ref": "#/definitions/CreateRule" + }, + "VariableTags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "FastRestoreRule": { + "$ref": "#/definitions/FastRestoreRule" + }, + "ArchiveRule": { + "$ref": "#/definitions/ArchiveRule" + }, + "RetainRule": { + "$ref": "#/definitions/RetainRule" + }, + "CrossRegionCopyRules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CrossRegionCopyRule" + } + }, + "Name": { + "type": "string" + }, + "CopyTags": { + "type": "boolean" + } + } + }, + "FastRestoreRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalUnit": { + "type": "string" + }, + "Count": { + "type": "integer" + }, + "AvailabilityZones": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Interval": { + "type": "integer" + } + } + }, + "RetentionArchiveTier": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalUnit": { + "type": "string" + }, + "Count": { + "type": "integer" + }, + "Interval": { + "type": "integer" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ShareRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetAccounts": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "UnshareIntervalUnit": { + "type": "string" + }, + "UnshareInterval": { + "type": "integer" + } + } + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dms/certificate.json b/internal/aws/cfn/schemas/aws/dms/certificate.json new file mode 100644 index 00000000..5bc5ee48 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dms/certificate.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::DMS::Certificate", + "description": "Resource Type definition for AWS::DMS::Certificate", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "CertificateIdentifier": { + "type": "string" + }, + "CertificatePem": { + "type": "string" + }, + "CertificateWallet": { + "type": "string" + } + }, + "createOnlyProperties": [ + "/properties/CertificateIdentifier", + "/properties/CertificatePem", + "/properties/CertificateWallet" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dms/endpoint.json b/internal/aws/cfn/schemas/aws/dms/endpoint.json new file mode 100644 index 00000000..abfdea61 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dms/endpoint.json @@ -0,0 +1,948 @@ +{ + "typeName": "AWS::DMS::Endpoint", + "description": "Resource Type definition for AWS::DMS::Endpoint", + "additionalProperties": false, + "properties": { + "SybaseSettings": { + "$ref": "#/definitions/SybaseSettings" + }, + "RedisSettings": { + "$ref": "#/definitions/RedisSettings" + }, + "OracleSettings": { + "$ref": "#/definitions/OracleSettings" + }, + "KafkaSettings": { + "$ref": "#/definitions/KafkaSettings" + }, + "Port": { + "type": "integer" + }, + "MySqlSettings": { + "$ref": "#/definitions/MySqlSettings" + }, + "S3Settings": { + "$ref": "#/definitions/S3Settings" + }, + "ResourceIdentifier": { + "type": "string" + }, + "KinesisSettings": { + "$ref": "#/definitions/KinesisSettings" + }, + "SslMode": { + "type": "string" + }, + "RedshiftSettings": { + "$ref": "#/definitions/RedshiftSettings" + }, + "EndpointType": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Password": { + "type": "string" + }, + "MongoDbSettings": { + "$ref": "#/definitions/MongoDbSettings" + }, + "IbmDb2Settings": { + "$ref": "#/definitions/IbmDb2Settings" + }, + "KmsKeyId": { + "type": "string" + }, + "ExternalId": { + "type": "string" + }, + "DatabaseName": { + "type": "string" + }, + "NeptuneSettings": { + "$ref": "#/definitions/NeptuneSettings" + }, + "ElasticsearchSettings": { + "$ref": "#/definitions/ElasticsearchSettings" + }, + "EngineName": { + "type": "string" + }, + "DocDbSettings": { + "$ref": "#/definitions/DocDbSettings" + }, + "DynamoDbSettings": { + "$ref": "#/definitions/DynamoDbSettings" + }, + "Username": { + "type": "string" + }, + "MicrosoftSqlServerSettings": { + "$ref": "#/definitions/MicrosoftSqlServerSettings" + }, + "GcpMySQLSettings": { + "$ref": "#/definitions/GcpMySQLSettings" + }, + "ServerName": { + "type": "string" + }, + "ExtraConnectionAttributes": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "EndpointIdentifier": { + "type": "string" + }, + "CertificateArn": { + "type": "string" + }, + "PostgreSqlSettings": { + "$ref": "#/definitions/PostgreSqlSettings" + } + }, + "definitions": { + "RedisSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SslSecurityProtocol": { + "type": "string" + }, + "AuthUserName": { + "type": "string" + }, + "ServerName": { + "type": "string" + }, + "Port": { + "type": "number" + }, + "SslCaCertificateArn": { + "type": "string" + }, + "AuthPassword": { + "type": "string" + }, + "AuthType": { + "type": "string" + } + } + }, + "SybaseSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "SecretsManagerSecretId": { + "type": "string" + } + } + }, + "IbmDb2Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "LoadTimeout": { + "type": "integer" + }, + "SetDataCaptureChanges": { + "type": "boolean" + }, + "MaxFileSize": { + "type": "integer" + }, + "KeepCsvFiles": { + "type": "boolean" + }, + "CurrentLsn": { + "type": "string" + }, + "MaxKBytesPerRead": { + "type": "integer" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "WriteBufferSize": { + "type": "integer" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + } + } + }, + "OracleSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AsmPassword": { + "type": "string" + }, + "DirectPathParallelLoad": { + "type": "boolean" + }, + "AdditionalArchivedLogDestId": { + "type": "integer" + }, + "SpatialDataOptionToGeoJsonFunctionName": { + "type": "string" + }, + "ReplacePathPrefix": { + "type": "boolean" + }, + "FailTasksOnLobTruncation": { + "type": "boolean" + }, + "AsmServer": { + "type": "string" + }, + "SecretsManagerOracleAsmAccessRoleArn": { + "type": "string" + }, + "OraclePathPrefix": { + "type": "string" + }, + "ReadAheadBlocks": { + "type": "integer" + }, + "StandbyDelayTime": { + "type": "integer" + }, + "AllowSelectNestedTables": { + "type": "boolean" + }, + "AddSupplementalLogging": { + "type": "boolean" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "UseBFile": { + "type": "boolean" + }, + "EnableHomogenousTablespace": { + "type": "boolean" + }, + "AsmUser": { + "type": "string" + }, + "UseDirectPathFullLoad": { + "type": "boolean" + }, + "SecurityDbEncryption": { + "type": "string" + }, + "ParallelAsmReadThreads": { + "type": "integer" + }, + "ArchivedLogDestId": { + "type": "integer" + }, + "UsePathPrefix": { + "type": "string" + }, + "UseLogminerReader": { + "type": "boolean" + }, + "SecurityDbEncryptionName": { + "type": "string" + }, + "DirectPathNoLog": { + "type": "boolean" + }, + "SecretsManagerOracleAsmSecretId": { + "type": "string" + }, + "CharLengthSemantics": { + "type": "string" + }, + "NumberDatatypeScale": { + "type": "integer" + }, + "ReadTableSpaceName": { + "type": "boolean" + }, + "AccessAlternateDirectly": { + "type": "boolean" + }, + "UseAlternateFolderForOnline": { + "type": "boolean" + }, + "ArchivedLogsOnly": { + "type": "boolean" + }, + "ExtraArchivedLogDestIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "integer" + } + }, + "RetryInterval": { + "type": "integer" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + } + } + }, + "KafkaSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Broker": { + "type": "string" + }, + "SaslPassword": { + "type": "string" + }, + "MessageFormat": { + "type": "string" + }, + "SslClientCertificateArn": { + "type": "string" + }, + "IncludeTransactionDetails": { + "type": "boolean" + }, + "SecurityProtocol": { + "type": "string" + }, + "IncludeTableAlterOperations": { + "type": "boolean" + }, + "SslCaCertificateArn": { + "type": "string" + }, + "IncludeControlDetails": { + "type": "boolean" + }, + "IncludePartitionValue": { + "type": "boolean" + }, + "NoHexPrefix": { + "type": "boolean" + }, + "SslClientKeyArn": { + "type": "string" + }, + "SslClientKeyPassword": { + "type": "string" + }, + "SaslUserName": { + "type": "string" + }, + "MessageMaxBytes": { + "type": "integer" + }, + "Topic": { + "type": "string" + }, + "PartitionIncludeSchemaTable": { + "type": "boolean" + }, + "IncludeNullAndEmpty": { + "type": "boolean" + } + } + }, + "MySqlSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServerTimezone": { + "type": "string" + }, + "EventsPollInterval": { + "type": "integer" + }, + "ParallelLoadThreads": { + "type": "integer" + }, + "AfterConnectScript": { + "type": "string" + }, + "MaxFileSize": { + "type": "integer" + }, + "TargetDbType": { + "type": "string" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "CleanSourceMetadataOnMismatch": { + "type": "boolean" + } + } + }, + "NeptuneSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxRetryCount": { + "type": "integer" + }, + "MaxFileSize": { + "type": "integer" + }, + "S3BucketFolder": { + "type": "string" + }, + "ErrorRetryDuration": { + "type": "integer" + }, + "IamAuthEnabled": { + "type": "boolean" + }, + "S3BucketName": { + "type": "string" + }, + "ServiceAccessRoleArn": { + "type": "string" + } + } + }, + "ElasticsearchSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "EndpointUri": { + "type": "string" + }, + "ErrorRetryDuration": { + "type": "integer" + }, + "FullLoadErrorPercentage": { + "type": "integer" + }, + "ServiceAccessRoleArn": { + "type": "string" + } + } + }, + "S3Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimestampColumnName": { + "type": "string" + }, + "EnableStatistics": { + "type": "boolean" + }, + "DatePartitionSequence": { + "type": "string" + }, + "CsvNullValue": { + "type": "string" + }, + "IncludeOpForFullLoad": { + "type": "boolean" + }, + "CdcInsertsAndUpdates": { + "type": "boolean" + }, + "BucketName": { + "type": "string" + }, + "ServerSideEncryptionKmsKeyId": { + "type": "string" + }, + "UseTaskStartTimeForFullLoadTimestamp": { + "type": "boolean" + }, + "GlueCatalogGeneration": { + "type": "boolean" + }, + "DataFormat": { + "type": "string" + }, + "CsvDelimiter": { + "type": "string" + }, + "AddTrailingPaddingCharacter": { + "type": "boolean" + }, + "IgnoreHeaderRows": { + "type": "integer" + }, + "CannedAclForObjects": { + "type": "string" + }, + "Rfc4180": { + "type": "boolean" + }, + "ServiceAccessRoleArn": { + "type": "string" + }, + "ParquetTimestampInMillisecond": { + "type": "boolean" + }, + "PreserveTransactions": { + "type": "boolean" + }, + "BucketFolder": { + "type": "string" + }, + "DatePartitionDelimiter": { + "type": "string" + }, + "EncodingType": { + "type": "string" + }, + "AddColumnName": { + "type": "boolean" + }, + "CdcMinFileSize": { + "type": "integer" + }, + "ParquetVersion": { + "type": "string" + }, + "ExternalTableDefinition": { + "type": "string" + }, + "UseCsvNoSupValue": { + "type": "boolean" + }, + "MaxFileSize": { + "type": "integer" + }, + "CdcPath": { + "type": "string" + }, + "CsvNoSupValue": { + "type": "string" + }, + "CdcMaxBatchInterval": { + "type": "integer" + }, + "CsvRowDelimiter": { + "type": "string" + }, + "RowGroupLength": { + "type": "integer" + }, + "DataPageSize": { + "type": "integer" + }, + "DatePartitionEnabled": { + "type": "boolean" + }, + "DictPageSizeLimit": { + "type": "integer" + }, + "CompressionType": { + "type": "string" + }, + "DatePartitionTimezone": { + "type": "string" + }, + "CdcInsertsOnly": { + "type": "boolean" + }, + "ExpectedBucketOwner": { + "type": "string" + }, + "EncryptionMode": { + "type": "string" + } + } + }, + "DocDbSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretsManagerSecretId": { + "type": "string" + }, + "DocsToInvestigate": { + "type": "integer" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "ExtractDocId": { + "type": "boolean" + }, + "NestingLevel": { + "type": "string" + } + } + }, + "DynamoDbSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceAccessRoleArn": { + "type": "string" + } + } + }, + "KinesisSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "MessageFormat": { + "type": "string" + }, + "IncludeTransactionDetails": { + "type": "boolean" + }, + "IncludeTableAlterOperations": { + "type": "boolean" + }, + "IncludeControlDetails": { + "type": "boolean" + }, + "IncludePartitionValue": { + "type": "boolean" + }, + "StreamArn": { + "type": "string" + }, + "ServiceAccessRoleArn": { + "type": "string" + }, + "NoHexPrefix": { + "type": "boolean" + }, + "PartitionIncludeSchemaTable": { + "type": "boolean" + }, + "IncludeNullAndEmpty": { + "type": "boolean" + } + } + }, + "GcpMySQLSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AfterConnectScript": { + "type": "string" + }, + "Port": { + "type": "integer" + }, + "DatabaseName": { + "type": "string" + }, + "CleanSourceMetadataOnMismatch": { + "type": "boolean" + }, + "ServerTimezone": { + "type": "string" + }, + "EventsPollInterval": { + "type": "integer" + }, + "ParallelLoadThreads": { + "type": "integer" + }, + "Username": { + "type": "string" + }, + "MaxFileSize": { + "type": "integer" + }, + "ServerName": { + "type": "string" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "Password": { + "type": "string" + } + } + }, + "MicrosoftSqlServerSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReadBackupOnly": { + "type": "boolean" + }, + "TlogAccessMode": { + "type": "string" + }, + "BcpPacketSize": { + "type": "integer" + }, + "Port": { + "type": "integer" + }, + "SafeguardPolicy": { + "type": "string" + }, + "UseThirdPartyBackupDevice": { + "type": "boolean" + }, + "DatabaseName": { + "type": "string" + }, + "UseBcpFullLoad": { + "type": "boolean" + }, + "Username": { + "type": "string" + }, + "QuerySingleAlwaysOnNode": { + "type": "boolean" + }, + "ServerName": { + "type": "string" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "ControlTablesFileGroup": { + "type": "string" + }, + "ForceLobLookup": { + "type": "boolean" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "TrimSpaceInChar": { + "type": "boolean" + }, + "Password": { + "type": "string" + } + } + }, + "RedshiftSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionTimeout": { + "type": "integer" + }, + "MapBooleanAsBoolean": { + "type": "boolean" + }, + "AfterConnectScript": { + "type": "string" + }, + "FileTransferUploadStreams": { + "type": "integer" + }, + "BucketName": { + "type": "string" + }, + "ServerSideEncryptionKmsKeyId": { + "type": "string" + }, + "ExplicitIds": { + "type": "boolean" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "TruncateColumns": { + "type": "boolean" + }, + "ServiceAccessRoleArn": { + "type": "string" + }, + "ReplaceChars": { + "type": "string" + }, + "TimeFormat": { + "type": "string" + }, + "BucketFolder": { + "type": "string" + }, + "ReplaceInvalidChars": { + "type": "string" + }, + "RemoveQuotes": { + "type": "boolean" + }, + "LoadTimeout": { + "type": "integer" + }, + "MaxFileSize": { + "type": "integer" + }, + "TrimBlanks": { + "type": "boolean" + }, + "DateFormat": { + "type": "string" + }, + "CompUpdate": { + "type": "boolean" + }, + "AcceptAnyDate": { + "type": "boolean" + }, + "WriteBufferSize": { + "type": "integer" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "CaseSensitiveNames": { + "type": "boolean" + }, + "EmptyAsNull": { + "type": "boolean" + }, + "EncryptionMode": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "MongoDbSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Port": { + "type": "integer" + }, + "ExtractDocId": { + "type": "string" + }, + "DatabaseName": { + "type": "string" + }, + "AuthSource": { + "type": "string" + }, + "AuthMechanism": { + "type": "string" + }, + "Username": { + "type": "string" + }, + "DocsToInvestigate": { + "type": "string" + }, + "ServerName": { + "type": "string" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "AuthType": { + "type": "string" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "Password": { + "type": "string" + }, + "NestingLevel": { + "type": "string" + } + } + }, + "PostgreSqlSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "PluginName": { + "type": "string" + }, + "MapBooleanAsBoolean": { + "type": "boolean" + }, + "AfterConnectScript": { + "type": "string" + }, + "ExecuteTimeout": { + "type": "integer" + }, + "DdlArtifactsSchema": { + "type": "string" + }, + "FailTasksOnLobTruncation": { + "type": "boolean" + }, + "HeartbeatEnable": { + "type": "boolean" + }, + "BabelfishDatabaseName": { + "type": "string" + }, + "DatabaseMode": { + "type": "string" + }, + "CaptureDdls": { + "type": "boolean" + }, + "MaxFileSize": { + "type": "integer" + }, + "HeartbeatFrequency": { + "type": "integer" + }, + "SecretsManagerSecretId": { + "type": "string" + }, + "SecretsManagerAccessRoleArn": { + "type": "string" + }, + "HeartbeatSchema": { + "type": "string" + }, + "SlotName": { + "type": "string" + } + } + } + }, + "required": [ + "EndpointType", + "EngineName" + ], + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/ResourceIdentifier" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/ExternalId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dms/eventsubscription.json b/internal/aws/cfn/schemas/aws/dms/eventsubscription.json new file mode 100644 index 00000000..625203f3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dms/eventsubscription.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::DMS::EventSubscription", + "description": "Resource Type definition for AWS::DMS::EventSubscription", + "additionalProperties": false, + "properties": { + "SourceType": { + "type": "string" + }, + "EventCategories": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Enabled": { + "type": "boolean" + }, + "SubscriptionName": { + "type": "string" + }, + "SnsTopicArn": { + "type": "string" + }, + "SourceIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "SnsTopicArn" + ], + "createOnlyProperties": [ + "/properties/SubscriptionName", + "/properties/SourceIds" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dms/replicationconfig.json b/internal/aws/cfn/schemas/aws/dms/replicationconfig.json new file mode 100644 index 00000000..ecb77c4a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dms/replicationconfig.json @@ -0,0 +1,194 @@ +{ + "typeName": "AWS::DMS::ReplicationConfig", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-dms", + "description": "A replication configuration that you later provide to configure and start a AWS DMS Serverless replication", + "definitions": { + "ComputeConfig": { + "description": "Configuration parameters for provisioning a AWS DMS Serverless replication", + "type": "object", + "properties": { + "AvailabilityZone": { + "type": "string" + }, + "DnsNameServers": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "MaxCapacityUnits": { + "type": "integer" + }, + "MinCapacityUnits": { + "type": "integer" + }, + "MultiAZ": { + "type": "boolean" + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "ReplicationSubnetGroupId": { + "type": "string" + }, + "VpcSecurityGroupIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "MaxCapacityUnits" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "description": "

The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.

", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Tag key.

" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Tag value.

" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "ReplicationConfigIdentifier": { + "description": "A unique identifier of replication configuration", + "type": "string" + }, + "ReplicationConfigArn": { + "description": "The Amazon Resource Name (ARN) of the Replication Config", + "type": "string" + }, + "SourceEndpointArn": { + "description": "The Amazon Resource Name (ARN) of the source endpoint for this AWS DMS Serverless replication configuration", + "type": "string" + }, + "TargetEndpointArn": { + "description": "The Amazon Resource Name (ARN) of the target endpoint for this AWS DMS Serverless replication configuration", + "type": "string" + }, + "ReplicationType": { + "description": "The type of AWS DMS Serverless replication to provision using this replication configuration", + "type": "string", + "enum": [ + "full-load", + "full-load-and-cdc", + "cdc" + ] + }, + "ComputeConfig": { + "$ref": "#/definitions/ComputeConfig" + }, + "ReplicationSettings": { + "description": "JSON settings for Servereless replications that are provisioned using this replication configuration", + "type": "object" + }, + "SupplementalSettings": { + "description": "JSON settings for specifying supplemental data", + "type": "object" + }, + "ResourceIdentifier": { + "description": "A unique value or name that you get set for a given resource that can be used to construct an Amazon Resource Name (ARN) for that resource", + "type": "string" + }, + "TableMappings": { + "description": "JSON table mappings for AWS DMS Serverless replications that are provisioned using this replication configuration", + "type": "object" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1, + "description": "

Contains a map of the key-value pairs for the resource tag or tags assigned to the dataset.

" + } + }, + "createOnlyProperties": [ + "/properties/ResourceIdentifier" + ], + "readOnlyProperties": [ + "/Properties/ReplicationConfigArn" + ], + "primaryIdentifier": [ + "/properties/ReplicationConfigArn" + ], + "additionalIdentifiers": [ + [ + "/properties/ReplicationConfigIdentifier" + ] + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "dms:CreateReplicationConfig", + "dms:AddTagsToResource", + "dms:ListTagsForResource", + "iam:CreateServiceLinkedRole", + "iam:AttachRolePolicy", + "iam:PutRolePolicy", + "iam:UpdateRoleDescription" + ] + }, + "read": { + "permissions": [ + "dms:DescribeReplicationConfigs", + "dms:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "dms:ModifyReplicationConfig", + "dms:AddTagsToResource", + "dms:RemoveTagsToResource", + "dms:ListTagsForResource", + "iam:CreateServiceLinkedRole", + "iam:AttachRolePolicy", + "iam:PutRolePolicy", + "iam:UpdateRoleDescription" + ] + }, + "list": { + "permissions": [ + "dms:DescribeReplicationConfigs", + "dms:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "dms:DescribeReplicationConfigs", + "dms:DeleteReplicationConfig", + "dms:ListTagsForResource", + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/dms/replicationinstance.json b/internal/aws/cfn/schemas/aws/dms/replicationinstance.json new file mode 100644 index 00000000..7e761fc0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dms/replicationinstance.json @@ -0,0 +1,104 @@ +{ + "typeName": "AWS::DMS::ReplicationInstance", + "description": "Resource Type definition for AWS::DMS::ReplicationInstance", + "additionalProperties": false, + "properties": { + "ReplicationInstanceIdentifier": { + "type": "string" + }, + "EngineVersion": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "AvailabilityZone": { + "type": "string" + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "AutoMinorVersionUpgrade": { + "type": "boolean" + }, + "ReplicationSubnetGroupIdentifier": { + "type": "string" + }, + "ReplicationInstancePrivateIpAddresses": { + "type": "string" + }, + "AllocatedStorage": { + "type": "integer" + }, + "ResourceIdentifier": { + "type": "string" + }, + "VpcSecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AllowMajorVersionUpgrade": { + "type": "boolean" + }, + "ReplicationInstanceClass": { + "type": "string" + }, + "PubliclyAccessible": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "MultiAZ": { + "type": "boolean" + }, + "ReplicationInstancePublicIpAddresses": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "ReplicationInstanceClass" + ], + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/ResourceIdentifier", + "/properties/ReplicationSubnetGroupIdentifier", + "/properties/PubliclyAccessible" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/ReplicationInstancePublicIpAddresses", + "/properties/Id", + "/properties/ReplicationInstancePrivateIpAddresses" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dms/replicationsubnetgroup.json b/internal/aws/cfn/schemas/aws/dms/replicationsubnetgroup.json new file mode 100644 index 00000000..52e06067 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dms/replicationsubnetgroup.json @@ -0,0 +1,61 @@ +{ + "typeName": "AWS::DMS::ReplicationSubnetGroup", + "description": "Resource Type definition for AWS::DMS::ReplicationSubnetGroup", + "additionalProperties": false, + "properties": { + "ReplicationSubnetGroupDescription": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "ReplicationSubnetGroupIdentifier": { + "type": "string" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "ReplicationSubnetGroupDescription", + "SubnetIds" + ], + "createOnlyProperties": [ + "/properties/ReplicationSubnetGroupIdentifier" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/dms/replicationtask.json b/internal/aws/cfn/schemas/aws/dms/replicationtask.json new file mode 100644 index 00000000..25f3a87b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dms/replicationtask.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::DMS::ReplicationTask", + "description": "Resource Type definition for AWS::DMS::ReplicationTask", + "additionalProperties": false, + "properties": { + "ReplicationTaskSettings": { + "type": "string" + }, + "CdcStartPosition": { + "type": "string" + }, + "CdcStopPosition": { + "type": "string" + }, + "MigrationType": { + "type": "string" + }, + "TargetEndpointArn": { + "type": "string" + }, + "ReplicationInstanceArn": { + "type": "string" + }, + "TaskData": { + "type": "string" + }, + "CdcStartTime": { + "type": "number" + }, + "ResourceIdentifier": { + "type": "string" + }, + "TableMappings": { + "type": "string" + }, + "ReplicationTaskIdentifier": { + "type": "string" + }, + "SourceEndpointArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "TableMappings", + "SourceEndpointArn", + "MigrationType", + "TargetEndpointArn", + "ReplicationInstanceArn" + ], + "createOnlyProperties": [ + "/properties/ResourceIdentifier", + "/properties/TargetEndpointArn", + "/properties/ReplicationInstanceArn", + "/properties/SourceEndpointArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/docdb/dbcluster.json b/internal/aws/cfn/schemas/aws/docdb/dbcluster.json new file mode 100644 index 00000000..d17dcfdb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/docdb/dbcluster.json @@ -0,0 +1,144 @@ +{ + "typeName": "AWS::DocDB::DBCluster", + "description": "Resource Type definition for AWS::DocDB::DBCluster", + "additionalProperties": false, + "properties": { + "StorageEncrypted": { + "type": "boolean" + }, + "RestoreToTime": { + "type": "string" + }, + "SnapshotIdentifier": { + "type": "string" + }, + "Port": { + "type": "integer" + }, + "DBClusterIdentifier": { + "type": "string" + }, + "PreferredBackupWindow": { + "type": "string" + }, + "ClusterResourceId": { + "type": "string" + }, + "Endpoint": { + "type": "string" + }, + "VpcSecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "CopyTagsToSnapshot": { + "type": "boolean" + }, + "RestoreType": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "EngineVersion": { + "type": "string" + }, + "StorageType": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "AvailabilityZones": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "DBSubnetGroupName": { + "type": "string" + }, + "DeletionProtection": { + "type": "boolean" + }, + "UseLatestRestorableTime": { + "type": "boolean" + }, + "MasterUserPassword": { + "type": "string" + }, + "SourceDBClusterIdentifier": { + "type": "string" + }, + "MasterUsername": { + "type": "string" + }, + "ReadEndpoint": { + "type": "string" + }, + "DBClusterParameterGroupName": { + "type": "string" + }, + "BackupRetentionPeriod": { + "type": "integer" + }, + "Id": { + "type": "string" + }, + "EnableCloudwatchLogsExports": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/SnapshotIdentifier", + "/properties/MasterUsername", + "/properties/SourceDBClusterIdentifier", + "/properties/DBClusterIdentifier", + "/properties/AvailabilityZones", + "/properties/DBSubnetGroupName", + "/properties/StorageEncrypted" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/ReadEndpoint", + "/properties/Id", + "/properties/Endpoint", + "/properties/ClusterResourceId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/docdb/dbclusterparametergroup.json b/internal/aws/cfn/schemas/aws/docdb/dbclusterparametergroup.json new file mode 100644 index 00000000..6da5b163 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/docdb/dbclusterparametergroup.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::DocDB::DBClusterParameterGroup", + "description": "Resource Type definition for AWS::DocDB::DBClusterParameterGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "Family": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Family", + "Description", + "Parameters" + ], + "createOnlyProperties": [ + "/properties/Family", + "/properties/Description", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/docdb/dbinstance.json b/internal/aws/cfn/schemas/aws/docdb/dbinstance.json new file mode 100644 index 00000000..a0bf16dd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/docdb/dbinstance.json @@ -0,0 +1,85 @@ +{ + "typeName": "AWS::DocDB::DBInstance", + "description": "Resource Type definition for AWS::DocDB::DBInstance", + "additionalProperties": false, + "properties": { + "DBInstanceClass": { + "type": "string" + }, + "Port": { + "type": "string" + }, + "DBClusterIdentifier": { + "type": "string" + }, + "AvailabilityZone": { + "type": "string" + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "EnablePerformanceInsights": { + "type": "boolean" + }, + "AutoMinorVersionUpgrade": { + "type": "boolean" + }, + "DBInstanceIdentifier": { + "type": "string" + }, + "CACertificateIdentifier": { + "type": "string" + }, + "CertificateRotationRestart": { + "type": "boolean" + }, + "Endpoint": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "DBInstanceClass", + "DBClusterIdentifier" + ], + "createOnlyProperties": [ + "/properties/DBClusterIdentifier", + "/properties/AvailabilityZone", + "/properties/DBInstanceIdentifier" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Port", + "/properties/Id", + "/properties/Endpoint" + ] +} diff --git a/internal/aws/cfn/schemas/aws/docdb/dbsubnetgroup.json b/internal/aws/cfn/schemas/aws/docdb/dbsubnetgroup.json new file mode 100644 index 00000000..95645cf6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/docdb/dbsubnetgroup.json @@ -0,0 +1,61 @@ +{ + "typeName": "AWS::DocDB::DBSubnetGroup", + "description": "Resource Type definition for AWS::DocDB::DBSubnetGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DBSubnetGroupName": { + "type": "string" + }, + "DBSubnetGroupDescription": { + "type": "string" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "DBSubnetGroupDescription", + "SubnetIds" + ], + "createOnlyProperties": [ + "/properties/DBSubnetGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/docdbelastic/cluster.json b/internal/aws/cfn/schemas/aws/docdbelastic/cluster.json new file mode 100644 index 00000000..224ec63b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/docdbelastic/cluster.json @@ -0,0 +1,195 @@ +{ + "typeName": "AWS::DocDBElastic::Cluster", + "description": "The AWS::DocDBElastic::Cluster Amazon DocumentDB (with MongoDB compatibility) Elastic Scale resource describes a Cluster", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-docdbelastic/", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "ClusterName": { + "type": "string", + "pattern": "[a-zA-z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*", + "maxLength": 50, + "minLength": 1 + }, + "ClusterArn": { + "type": "string" + }, + "ClusterEndpoint": { + "type": "string" + }, + "AdminUserName": { + "type": "string" + }, + "AdminUserPassword": { + "type": "string" + }, + "ShardCapacity": { + "type": "integer" + }, + "ShardCount": { + "type": "integer" + }, + "VpcSecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 50, + "minItems": 0 + }, + "AuthType": { + "type": "string" + } + }, + "required": [ + "ClusterName", + "AdminUserName", + "ShardCapacity", + "ShardCount", + "AuthType" + ], + "primaryIdentifier": [ + "/properties/ClusterArn" + ], + "readOnlyProperties": [ + "/properties/ClusterArn", + "/properties/ClusterEndpoint" + ], + "createOnlyProperties": [ + "/properties/AdminUserName", + "/properties/AuthType", + "/properties/ClusterName", + "/properties/KmsKeyId" + ], + "writeOnlyProperties": [ + "/properties/AdminUserPassword" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "docdb-elastic:CreateCluster", + "ec2:CreateVpcEndpoint", + "ec2:DescribeVpcEndpoints", + "ec2:DeleteVpcEndpoints", + "ec2:ModifyVpcEndpoint", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "ec2:DescribeAvailabilityZones", + "secretsmanager:ListSecrets", + "secretsmanager:ListSecretVersionIds", + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:GetResourcePolicy", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "docdb-elastic:GetCluster", + "docdb-elastic:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "docdb-elastic:UpdateCluster", + "docdb-elastic:TagResource", + "docdb-elastic:UntagResource", + "ec2:CreateVpcEndpoint", + "ec2:DescribeVpcEndpoints", + "ec2:DeleteVpcEndpoints", + "ec2:ModifyVpcEndpoint", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "ec2:DescribeAvailabilityZones", + "secretsmanager:ListSecrets", + "secretsmanager:ListSecretVersionIds", + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:GetResourcePolicy", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "delete": { + "permissions": [ + "docdb-elastic:DeleteCluster", + "ec2:DescribeVpcEndpoints", + "ec2:DeleteVpcEndpoints", + "ec2:ModifyVpcEndpoint", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "ec2:DescribeAvailabilityZones" + ] + }, + "list": { + "permissions": [ + "docdb-elastic:ListClusters" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/dynamodb/globaltable.json b/internal/aws/cfn/schemas/aws/dynamodb/globaltable.json new file mode 100644 index 00000000..38867ac6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dynamodb/globaltable.json @@ -0,0 +1,593 @@ +{ + "handlers": { + "read": { + "permissions": [ + "dynamodb:Describe*", + "dynamodb:GetResourcePolicy", + "application-autoscaling:Describe*", + "cloudwatch:PutMetricData", + "dynamodb:ListTagsOfResource", + "kms:DescribeKey" + ] + }, + "create": { + "permissions": [ + "dynamodb:CreateTable", + "dynamodb:CreateTableReplica", + "dynamodb:Describe*", + "dynamodb:UpdateTimeToLive", + "dynamodb:UpdateContributorInsights", + "dynamodb:UpdateContinuousBackups", + "dynamodb:ListTagsOfResource", + "dynamodb:Query", + "dynamodb:Scan", + "dynamodb:UpdateItem", + "dynamodb:PutItem", + "dynamodb:GetItem", + "dynamodb:DeleteItem", + "dynamodb:BatchWriteItem", + "dynamodb:TagResource", + "dynamodb:EnableKinesisStreamingDestination", + "dynamodb:DisableKinesisStreamingDestination", + "dynamodb:UpdateTableReplicaAutoScaling", + "dynamodb:TagResource", + "dynamodb:GetResourcePolicy", + "dynamodb:PutResourcePolicy", + "application-autoscaling:DeleteScalingPolicy", + "application-autoscaling:DeleteScheduledAction", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:Describe*", + "application-autoscaling:PutScalingPolicy", + "application-autoscaling:PutScheduledAction", + "application-autoscaling:RegisterScalableTarget", + "kinesis:ListStreams", + "kinesis:DescribeStream", + "kinesis:PutRecords", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:ListAliases", + "kms:Decrypt", + "kms:RevokeGrant", + "cloudwatch:PutMetricData", + "iam:CreateServiceLinkedRole" + ] + }, + "update": { + "permissions": [ + "dynamodb:Describe*", + "dynamodb:CreateTableReplica", + "dynamodb:UpdateTable", + "dynamodb:UpdateTimeToLive", + "dynamodb:UpdateContinuousBackups", + "dynamodb:UpdateContributorInsights", + "dynamodb:ListTagsOfResource", + "dynamodb:Query", + "dynamodb:Scan", + "dynamodb:UpdateItem", + "dynamodb:PutItem", + "dynamodb:GetItem", + "dynamodb:DeleteItem", + "dynamodb:BatchWriteItem", + "dynamodb:DeleteTable", + "dynamodb:DeleteTableReplica", + "dynamodb:UpdateItem", + "dynamodb:TagResource", + "dynamodb:UntagResource", + "dynamodb:EnableKinesisStreamingDestination", + "dynamodb:DisableKinesisStreamingDestination", + "dynamodb:UpdateTableReplicaAutoScaling", + "dynamodb:UpdateKinesisStreamingDestination", + "dynamodb:GetResourcePolicy", + "dynamodb:PutResourcePolicy", + "dynamodb:DeleteResourcePolicy", + "application-autoscaling:DeleteScalingPolicy", + "application-autoscaling:DeleteScheduledAction", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:Describe*", + "application-autoscaling:PutScalingPolicy", + "application-autoscaling:PutScheduledAction", + "application-autoscaling:RegisterScalableTarget", + "kinesis:ListStreams", + "kinesis:DescribeStream", + "kinesis:PutRecords", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:ListAliases", + "kms:RevokeGrant", + "cloudwatch:PutMetricData" + ], + "timeoutInMinutes": 1200 + }, + "list": { + "permissions": [ + "dynamodb:ListTables", + "cloudwatch:PutMetricData" + ] + }, + "delete": { + "permissions": [ + "dynamodb:Describe*", + "dynamodb:DeleteTable", + "application-autoscaling:DeleteScalingPolicy", + "application-autoscaling:DeleteScheduledAction", + "application-autoscaling:DeregisterScalableTarget", + "application-autoscaling:Describe*", + "application-autoscaling:PutScalingPolicy", + "application-autoscaling:PutScheduledAction", + "application-autoscaling:RegisterScalableTarget" + ] + } + }, + "typeName": "AWS::DynamoDB::GlobalTable", + "readOnlyProperties": [ + "/properties/Arn", + "/properties/StreamArn", + "/properties/TableId" + ], + "description": "Version: None. Resource Type definition for AWS::DynamoDB::GlobalTable", + "additionalIdentifiers": [ + [ + "/properties/Arn" + ], + [ + "/properties/StreamArn" + ] + ], + "writeOnlyProperties": [ + "/properties/Replicas/*/ReadProvisionedThroughputSettings/ReadCapacityAutoScalingSettings/SeedCapacity", + "/properties/Replicas/*/GlobalSecondaryIndexes/*/ReadProvisionedThroughputSettings/ReadCapacityAutoScalingSettings/SeedCapacity", + "/properties/WriteProvisionedThroughputSettings/WriteCapacityAutoScalingSettings/SeedCapacity", + "/properties/GlobalSecondaryIndexes/*/WriteProvisionedThroughputSettings/WriteCapacityAutoScalingSettings/SeedCapacity" + ], + "createOnlyProperties": [ + "/properties/LocalSecondaryIndexes", + "/properties/TableName", + "/properties/KeySchema" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/TableName" + ], + "definitions": { + "LocalSecondaryIndex": { + "additionalProperties": false, + "type": "object", + "properties": { + "IndexName": { + "minLength": 3, + "type": "string", + "maxLength": 255 + }, + "Projection": { + "$ref": "#/definitions/Projection" + }, + "KeySchema": { + "maxItems": 2, + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/definitions/KeySchema" + } + } + }, + "required": [ + "IndexName", + "Projection", + "KeySchema" + ] + }, + "SSESpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "SSEEnabled": { + "type": "boolean" + }, + "SSEType": { + "type": "string" + } + }, + "required": [ + "SSEEnabled" + ] + }, + "KinesisStreamSpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "ApproximateCreationDateTimePrecision": { + "type": "string", + "enum": [ + "MICROSECOND", + "MILLISECOND" + ] + }, + "StreamArn": { + "type": "string" + } + }, + "required": [ + "StreamArn" + ] + }, + "StreamSpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "StreamViewType": { + "type": "string" + } + }, + "required": [ + "StreamViewType" + ] + }, + "ContributorInsightsSpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "ReplicaSpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "SSESpecification": { + "$ref": "#/definitions/ReplicaSSESpecification" + }, + "KinesisStreamSpecification": { + "$ref": "#/definitions/KinesisStreamSpecification" + }, + "ContributorInsightsSpecification": { + "$ref": "#/definitions/ContributorInsightsSpecification" + }, + "GlobalSecondaryIndexes": { + "uniqueItems": true, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ReplicaGlobalSecondaryIndexSpecification" + } + }, + "Region": { + "type": "string" + }, + "PointInTimeRecoverySpecification": { + "$ref": "#/definitions/PointInTimeRecoverySpecification" + }, + "ReadProvisionedThroughputSettings": { + "$ref": "#/definitions/ReadProvisionedThroughputSettings" + }, + "TableClass": { + "type": "string" + }, + "DeletionProtectionEnabled": { + "type": "boolean" + }, + "Tags": { + "uniqueItems": true, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "Region" + ] + }, + "CapacityAutoScalingSettings": { + "additionalProperties": false, + "type": "object", + "properties": { + "MinCapacity": { + "type": "integer", + "minimum": 1 + }, + "SeedCapacity": { + "type": "integer", + "minimum": 1 + }, + "TargetTrackingScalingPolicyConfiguration": { + "$ref": "#/definitions/TargetTrackingScalingPolicyConfiguration" + }, + "MaxCapacity": { + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "MinCapacity", + "MaxCapacity", + "TargetTrackingScalingPolicyConfiguration" + ] + }, + "AttributeDefinition": { + "additionalProperties": false, + "type": "object", + "properties": { + "AttributeType": { + "type": "string" + }, + "AttributeName": { + "minLength": 1, + "type": "string", + "maxLength": 255 + } + }, + "required": [ + "AttributeName", + "AttributeType" + ] + }, + "Projection": { + "additionalProperties": false, + "type": "object", + "properties": { + "NonKeyAttributes": { + "maxItems": 20, + "uniqueItems": true, + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "ProjectionType": { + "type": "string" + } + } + }, + "PointInTimeRecoverySpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "PointInTimeRecoveryEnabled": { + "type": "boolean" + } + } + }, + "ReplicaGlobalSecondaryIndexSpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "IndexName": { + "minLength": 3, + "type": "string", + "maxLength": 255 + }, + "ContributorInsightsSpecification": { + "$ref": "#/definitions/ContributorInsightsSpecification" + }, + "ReadProvisionedThroughputSettings": { + "$ref": "#/definitions/ReadProvisionedThroughputSettings" + } + }, + "required": [ + "IndexName" + ] + }, + "TargetTrackingScalingPolicyConfiguration": { + "additionalProperties": false, + "type": "object", + "properties": { + "ScaleOutCooldown": { + "type": "integer", + "minimum": 0 + }, + "TargetValue": { + "format": "double", + "type": "number" + }, + "DisableScaleIn": { + "type": "boolean" + }, + "ScaleInCooldown": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "TargetValue" + ] + }, + "GlobalSecondaryIndex": { + "additionalProperties": false, + "type": "object", + "properties": { + "IndexName": { + "minLength": 3, + "type": "string", + "maxLength": 255 + }, + "Projection": { + "$ref": "#/definitions/Projection" + }, + "KeySchema": { + "minItems": 1, + "maxItems": 2, + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/definitions/KeySchema" + } + }, + "WriteProvisionedThroughputSettings": { + "$ref": "#/definitions/WriteProvisionedThroughputSettings" + } + }, + "required": [ + "IndexName", + "Projection", + "KeySchema" + ] + }, + "WriteProvisionedThroughputSettings": { + "additionalProperties": false, + "type": "object", + "properties": { + "WriteCapacityAutoScalingSettings": { + "$ref": "#/definitions/CapacityAutoScalingSettings" + } + } + }, + "ReplicaSSESpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "KMSMasterKeyId": { + "type": "string" + } + }, + "required": [ + "KMSMasterKeyId" + ] + }, + "KeySchema": { + "additionalProperties": false, + "type": "object", + "properties": { + "KeyType": { + "type": "string" + }, + "AttributeName": { + "minLength": 1, + "type": "string", + "maxLength": 255 + } + }, + "required": [ + "KeyType", + "AttributeName" + ] + }, + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ReadProvisionedThroughputSettings": { + "additionalProperties": false, + "type": "object", + "properties": { + "ReadCapacityUnits": { + "type": "integer", + "minimum": 1 + }, + "ReadCapacityAutoScalingSettings": { + "$ref": "#/definitions/CapacityAutoScalingSettings" + } + } + }, + "TimeToLiveSpecification": { + "additionalProperties": false, + "type": "object", + "properties": { + "Enabled": { + "type": "boolean" + }, + "AttributeName": { + "type": "string" + } + }, + "required": [ + "Enabled" + ] + } + }, + "required": [ + "KeySchema", + "AttributeDefinitions", + "Replicas" + ], + "properties": { + "TableId": { + "type": "string" + }, + "SSESpecification": { + "$ref": "#/definitions/SSESpecification" + }, + "StreamSpecification": { + "$ref": "#/definitions/StreamSpecification" + }, + "Replicas": { + "minItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ReplicaSpecification" + } + }, + "WriteProvisionedThroughputSettings": { + "$ref": "#/definitions/WriteProvisionedThroughputSettings" + }, + "TableName": { + "type": "string" + }, + "AttributeDefinitions": { + "minItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/AttributeDefinition" + } + }, + "BillingMode": { + "type": "string" + }, + "GlobalSecondaryIndexes": { + "uniqueItems": true, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/GlobalSecondaryIndex" + } + }, + "KeySchema": { + "minItems": 1, + "maxItems": 2, + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/definitions/KeySchema" + } + }, + "LocalSecondaryIndexes": { + "uniqueItems": true, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/LocalSecondaryIndex" + } + }, + "Arn": { + "type": "string" + }, + "StreamArn": { + "type": "string" + }, + "TimeToLiveSpecification": { + "$ref": "#/definitions/TimeToLiveSpecification" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/dynamodb/table.json b/internal/aws/cfn/schemas/aws/dynamodb/table.json new file mode 100644 index 00000000..4bed9ec7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/dynamodb/table.json @@ -0,0 +1,603 @@ +{ + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": false + }, + "typeName": "AWS::DynamoDB::Table", + "readOnlyProperties": [ + "/properties/Arn", + "/properties/StreamArn" + ], + "description": "The ``AWS::DynamoDB::Table`` resource creates a DDB table. For more information, see [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) in the *API Reference*.\n You should be aware of the following behaviors when working with DDB tables:\n + CFNlong typically creates DDB tables in parallel. However, if your template includes multiple DDB tables with indexes, you must declare dependencies so that the tables are created sequentially. DDBlong limits the number of tables with secondary indexes that are in the creating state. If you create multiple tables with indexes at the same time, DDB returns an error and the stack operation fails. For an example, see [DynamoDB Table with a DependsOn Attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#aws-resource-dynamodb-table--examples--DynamoDB_Table_with_a_DependsOn_Attribute).\n \n Our guidance is to use the latest schema documented here for your CFNlong templates. This schema supports the provisioning of all table settings below. When using this schema in your CFNlong templates, please ensure that your Identity and Access Management (IAM) policies are updated with appropriate permissions to allow for the authorization of these setting changes.", + "createOnlyProperties": [ + "/properties/TableName", + "/properties/ImportSourceSpecification" + ], + "primaryIdentifier": [ + "/properties/TableName" + ], + "required": [ + "KeySchema" + ], + "propertyTransform": { + "/properties/SSESpecification/KMSMasterKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,3}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,4}[-]{1}[1-4]{1}:[0-9]{12}[:]{1}key\\/\", SSESpecification.KMSMasterKeyId]) $OR $join([\"arn:(aws)[-]{0,1}[a-z]{0,3}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,4}[-]{1}[1-4]{1}:[0-9]{12}[:]{1}key\\/\", KMSMasterKeyId])" + }, + "handlers": { + "read": { + "permissions": [ + "dynamodb:DescribeTable", + "dynamodb:DescribeContinuousBackups", + "dynamodb:DescribeContributorInsights", + "dynamodb:DescribeKinesisStreamingDestination", + "dynamodb:ListTagsOfResource", + "dynamodb:GetResourcePolicy" + ] + }, + "create": { + "permissions": [ + "dynamodb:CreateTable", + "dynamodb:DescribeImport", + "dynamodb:DescribeTable", + "dynamodb:DescribeTimeToLive", + "dynamodb:UpdateTimeToLive", + "dynamodb:UpdateContributorInsights", + "dynamodb:UpdateContinuousBackups", + "dynamodb:DescribeContinuousBackups", + "dynamodb:DescribeContributorInsights", + "dynamodb:EnableKinesisStreamingDestination", + "dynamodb:DisableKinesisStreamingDestination", + "dynamodb:DescribeKinesisStreamingDestination", + "dynamodb:ImportTable", + "dynamodb:ListTagsOfResource", + "dynamodb:TagResource", + "dynamodb:UpdateTable", + "dynamodb:GetResourcePolicy", + "dynamodb:PutResourcePolicy", + "kinesis:DescribeStream", + "kinesis:PutRecords", + "iam:CreateServiceLinkedRole", + "kms:CreateGrant", + "kms:Decrypt", + "kms:DescribeKey", + "kms:ListAliases", + "kms:Encrypt", + "kms:RevokeGrant", + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:DescribeLogGroups", + "logs:DescribeLogStreams", + "logs:PutLogEvents", + "logs:PutRetentionPolicy", + "s3:GetObject", + "s3:GetObjectMetadata", + "s3:ListBucket" + ], + "timeoutInMinutes": 720 + }, + "update": { + "permissions": [ + "dynamodb:UpdateTable", + "dynamodb:DescribeTable", + "dynamodb:DescribeTimeToLive", + "dynamodb:UpdateTimeToLive", + "dynamodb:UpdateContinuousBackups", + "dynamodb:UpdateContributorInsights", + "dynamodb:UpdateKinesisStreamingDestination", + "dynamodb:DescribeContinuousBackups", + "dynamodb:DescribeKinesisStreamingDestination", + "dynamodb:ListTagsOfResource", + "dynamodb:TagResource", + "dynamodb:UntagResource", + "dynamodb:DescribeContributorInsights", + "dynamodb:EnableKinesisStreamingDestination", + "dynamodb:DisableKinesisStreamingDestination", + "dynamodb:GetResourcePolicy", + "dynamodb:PutResourcePolicy", + "dynamodb:DeleteResourcePolicy", + "kinesis:DescribeStream", + "kinesis:PutRecords", + "iam:CreateServiceLinkedRole", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:ListAliases", + "kms:RevokeGrant" + ], + "timeoutInMinutes": 720 + }, + "list": { + "permissions": [ + "dynamodb:ListTables" + ] + }, + "delete": { + "permissions": [ + "dynamodb:DeleteTable", + "dynamodb:DescribeTable" + ], + "timeoutInMinutes": 720 + } + }, + "writeOnlyProperties": [ + "/properties/ImportSourceSpecification" + ], + "additionalProperties": false, + "definitions": { + "LocalSecondaryIndex": { + "description": "Represents the properties of a local secondary index. A local secondary index can only be created when its parent table is created.", + "additionalProperties": false, + "type": "object", + "properties": { + "IndexName": { + "description": "The name of the local secondary index. The name must be unique among all other indexes on this table.", + "type": "string" + }, + "Projection": { + "description": "Represents attributes that are copied (projected) from the table into the local secondary index. These are in addition to the primary key attributes and index key attributes, which are automatically projected.", + "$ref": "#/definitions/Projection" + }, + "KeySchema": { + "uniqueItems": true, + "description": "The complete key schema for the local secondary index, consisting of one or more pairs of attribute names and key types:\n + ``HASH`` - partition key\n + ``RANGE`` - sort key\n \n The partition key of an item is also known as its *hash attribute*. The term \"hash attribute\" derives from DynamoDB's usage of an internal hash function to evenly distribute data items across partitions, based on their partition key values.\n The sort key of an item is also known as its *range attribute*. The term \"range attribute\" derives from the way DynamoDB stores items with the same partition key physically close together, in sorted order by the sort key value.", + "type": "array", + "items": { + "$ref": "#/definitions/KeySchema" + } + } + }, + "required": [ + "IndexName", + "Projection", + "KeySchema" + ] + }, + "SSESpecification": { + "description": "Represents the settings used to enable server-side encryption.", + "additionalProperties": false, + "type": "object", + "properties": { + "SSEEnabled": { + "description": "Indicates whether server-side encryption is done using an AWS managed key or an AWS owned key. If enabled (true), server-side encryption type is set to ``KMS`` and an AWS managed key is used (KMS charges apply). If disabled (false) or not specified, server-side encryption is set to AWS owned key.", + "type": "boolean" + }, + "SSEType": { + "description": "Server-side encryption type. The only supported value is:\n + ``KMS`` - Server-side encryption that uses KMSlong. The key is stored in your account and is managed by KMS (KMS charges apply).", + "type": "string" + }, + "KMSMasterKeyId": { + "description": "The KMS key that should be used for the KMS encryption. To specify a key, use its key ID, Amazon Resource Name (ARN), alias name, or alias ARN. Note that you should only provide this parameter if the key is different from the default DynamoDB key ``alias/aws/dynamodb``.", + "type": "string" + } + }, + "required": [ + "SSEEnabled" + ] + }, + "KinesisStreamSpecification": { + "description": "The Kinesis Data Streams configuration for the specified table.", + "additionalProperties": false, + "type": "object", + "properties": { + "ApproximateCreationDateTimePrecision": { + "description": "The precision for the time and date that the stream was created.", + "type": "string", + "enum": [ + "MICROSECOND", + "MILLISECOND" + ] + }, + "StreamArn": { + "description": "The ARN for a specific Kinesis data stream.\n Length Constraints: Minimum length of 37. Maximum length of 1024.", + "type": "string" + } + }, + "required": [ + "StreamArn" + ] + }, + "StreamSpecification": { + "description": "Represents the DynamoDB Streams configuration for a table in DynamoDB.", + "additionalProperties": false, + "type": "object", + "properties": { + "StreamViewType": { + "description": "When an item in the table is modified, ``StreamViewType`` determines what information is written to the stream for this table. Valid values for ``StreamViewType`` are:\n + ``KEYS_ONLY`` - Only the key attributes of the modified item are written to the stream.\n + ``NEW_IMAGE`` - The entire item, as it appears after it was modified, is written to the stream.\n + ``OLD_IMAGE`` - The entire item, as it appeared before it was modified, is written to the stream.\n + ``NEW_AND_OLD_IMAGES`` - Both the new and the old item images of the item are written to the stream.", + "type": "string" + } + }, + "required": [ + "StreamViewType" + ] + }, + "ContributorInsightsSpecification": { + "description": "The settings used to enable or disable CloudWatch Contributor Insights.", + "additionalProperties": false, + "type": "object", + "properties": { + "Enabled": { + "description": "Indicates whether CloudWatch Contributor Insights are to be enabled (true) or disabled (false).", + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "InputFormatOptions": { + "description": "The format options for the data that was imported into the target table. There is one value, CsvOption.", + "additionalProperties": false, + "type": "object", + "properties": { + "Csv": { + "description": "The options for imported source files in CSV format. The values are Delimiter and HeaderList.", + "$ref": "#/definitions/Csv" + } + } + }, + "Csv": { + "description": "The options for imported source files in CSV format. The values are Delimiter and HeaderList.", + "additionalProperties": false, + "type": "object", + "properties": { + "Delimiter": { + "description": "The delimiter used for separating items in the CSV file being imported.", + "type": "string" + }, + "HeaderList": { + "uniqueItems": true, + "description": "List of the headers used to specify a common header for all source CSV files being imported. If this field is specified then the first line of each CSV file is treated as data instead of the header. If this field is not specified the the first line of each CSV file is treated as the header.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ImportSourceSpecification": { + "description": "Specifies the properties of data being imported from the S3 bucket source to the table.", + "additionalProperties": false, + "type": "object", + "properties": { + "S3BucketSource": { + "description": "The S3 bucket that provides the source for the import.", + "$ref": "#/definitions/S3BucketSource" + }, + "InputFormat": { + "description": "The format of the source data. Valid values for ``ImportFormat`` are ``CSV``, ``DYNAMODB_JSON`` or ``ION``.", + "type": "string" + }, + "InputFormatOptions": { + "description": "Additional properties that specify how the input is formatted,", + "$ref": "#/definitions/InputFormatOptions" + }, + "InputCompressionType": { + "description": "Type of compression to be used on the input coming from the imported table.", + "type": "string" + } + }, + "required": [ + "S3BucketSource", + "InputFormat" + ] + }, + "AttributeDefinition": { + "description": "Represents an attribute for describing the schema for the table and indexes.", + "additionalProperties": false, + "type": "object", + "properties": { + "AttributeType": { + "description": "The data type for the attribute, where:\n + ``S`` - the attribute is of type String\n + ``N`` - the attribute is of type Number\n + ``B`` - the attribute is of type Binary", + "type": "string" + }, + "AttributeName": { + "description": "A name for the attribute.", + "type": "string" + } + }, + "required": [ + "AttributeName", + "AttributeType" + ] + }, + "Projection": { + "description": "Represents attributes that are copied (projected) from the table into an index. These are in addition to the primary key attributes and index key attributes, which are automatically projected.", + "additionalProperties": false, + "type": "object", + "properties": { + "NonKeyAttributes": { + "uniqueItems": false, + "description": "Represents the non-key attribute names which will be projected into the index.\n For local secondary indexes, the total count of ``NonKeyAttributes`` summed across all of the local secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.", + "type": "array", + "items": { + "type": "string" + } + }, + "ProjectionType": { + "description": "The set of attributes that are projected into the index:\n + ``KEYS_ONLY`` - Only the index and primary keys are projected into the index.\n + ``INCLUDE`` - In addition to the attributes described in ``KEYS_ONLY``, the secondary index will include other non-key attributes that you specify.\n + ``ALL`` - All of the table attributes are projected into the index.\n \n When using the DynamoDB console, ``ALL`` is selected by default.", + "type": "string" + } + } + }, + "PointInTimeRecoverySpecification": { + "description": "The settings used to enable point in time recovery.", + "additionalProperties": false, + "type": "object", + "properties": { + "PointInTimeRecoveryEnabled": { + "description": "Indicates whether point in time recovery is enabled (true) or disabled (false) on the table.", + "type": "boolean" + } + } + }, + "ProvisionedThroughput": { + "description": "Throughput for the specified table, which consists of values for ``ReadCapacityUnits`` and ``WriteCapacityUnits``. For more information about the contents of a provisioned throughput structure, see [Table ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "WriteCapacityUnits": { + "description": "The maximum number of writes consumed per second before DynamoDB returns a ``ThrottlingException``. For more information, see [Specifying Read and Write Requirements](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html) in the *Amazon DynamoDB Developer Guide*.\n If read/write capacity mode is ``PAY_PER_REQUEST`` the value is set to 0.", + "type": "integer" + }, + "ReadCapacityUnits": { + "description": "The maximum number of strongly consistent reads consumed per second before DynamoDB returns a ``ThrottlingException``. For more information, see [Specifying Read and Write Requirements](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html) in the *Amazon DynamoDB Developer Guide*.\n If read/write capacity mode is ``PAY_PER_REQUEST`` the value is set to 0.", + "type": "integer" + } + }, + "required": [ + "WriteCapacityUnits", + "ReadCapacityUnits" + ] + }, + "GlobalSecondaryIndex": { + "description": "Represents the properties of a global secondary index.", + "additionalProperties": false, + "type": "object", + "properties": { + "IndexName": { + "description": "The name of the global secondary index. The name must be unique among all other indexes on this table.", + "type": "string" + }, + "ContributorInsightsSpecification": { + "description": "The settings used to enable or disable CloudWatch Contributor Insights for the specified global secondary index.", + "$ref": "#/definitions/ContributorInsightsSpecification" + }, + "Projection": { + "description": "Represents attributes that are copied (projected) from the table into the global secondary index. These are in addition to the primary key attributes and index key attributes, which are automatically projected.", + "$ref": "#/definitions/Projection" + }, + "ProvisionedThroughput": { + "description": "Represents the provisioned throughput settings for the specified global secondary index.\n For current minimum and maximum provisioned throughput values, see [Service, Account, and Table Quotas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the *Amazon DynamoDB Developer Guide*.", + "$ref": "#/definitions/ProvisionedThroughput" + }, + "KeySchema": { + "uniqueItems": true, + "description": "The complete key schema for a global secondary index, which consists of one or more pairs of attribute names and key types:\n + ``HASH`` - partition key\n + ``RANGE`` - sort key\n \n The partition key of an item is also known as its *hash attribute*. The term \"hash attribute\" derives from DynamoDB's usage of an internal hash function to evenly distribute data items across partitions, based on their partition key values.\n The sort key of an item is also known as its *range attribute*. The term \"range attribute\" derives from the way DynamoDB stores items with the same partition key physically close together, in sorted order by the sort key value.", + "type": "array", + "items": { + "$ref": "#/definitions/KeySchema" + } + } + }, + "required": [ + "IndexName", + "Projection", + "KeySchema" + ] + }, + "S3BucketSource": { + "description": "The S3 bucket that is being imported from.", + "additionalProperties": false, + "type": "object", + "properties": { + "S3Bucket": { + "description": "The S3 bucket that is being imported from.", + "type": "string" + }, + "S3KeyPrefix": { + "description": "The key prefix shared by all S3 Objects that are being imported.", + "type": "string" + }, + "S3BucketOwner": { + "description": "The account number of the S3 bucket that is being imported from. If the bucket is owned by the requester this is optional.", + "type": "string" + } + }, + "required": [ + "S3Bucket" + ] + }, + "DeprecatedKeySchema": { + "description": "", + "additionalProperties": false, + "type": "object", + "properties": { + "HashKeyElement": { + "$ref": "#/definitions/DeprecatedHashKeyElement" + } + }, + "required": [ + "HashKeyElement" + ] + }, + "KeySchema": { + "description": "Represents *a single element* of a key schema. A key schema specifies the attributes that make up the primary key of a table, or the key attributes of an index.\n A ``KeySchemaElement`` represents exactly one attribute of the primary key. For example, a simple primary key would be represented by one ``KeySchemaElement`` (for the partition key). A composite primary key would require one ``KeySchemaElement`` for the partition key, and another ``KeySchemaElement`` for the sort key.\n A ``KeySchemaElement`` must be a scalar, top-level attribute (not a nested attribute). The data type must be one of String, Number, or Binary. The attribute cannot be nested within a List or a Map.", + "additionalProperties": false, + "type": "object", + "properties": { + "KeyType": { + "description": "The role that this key attribute will assume:\n + ``HASH`` - partition key\n + ``RANGE`` - sort key\n \n The partition key of an item is also known as its *hash attribute*. The term \"hash attribute\" derives from DynamoDB's usage of an internal hash function to evenly distribute data items across partitions, based on their partition key values.\n The sort key of an item is also known as its *range attribute*. The term \"range attribute\" derives from the way DynamoDB stores items with the same partition key physically close together, in sorted order by the sort key value.", + "type": "string" + }, + "AttributeName": { + "description": "The name of a key attribute.", + "type": "string" + } + }, + "required": [ + "KeyType", + "AttributeName" + ] + }, + "Tag": { + "description": "Describes a tag. A tag is a key-value pair. You can add up to 50 tags to a single DynamoDB table. \n AWS-assigned tag names and values are automatically assigned the ``aws:`` prefix, which the user cannot assign. AWS-assigned tag names do not count towards the tag limit of 50. User-assigned tag names have the prefix ``user:`` in the Cost Allocation Report. You cannot backdate the application of a tag.\n For an overview on tagging DynamoDB resources, see [Tagging for DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html) in the *Amazon DynamoDB Developer Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "description": "The value of the tag. Tag values are case-sensitive and can be null.", + "type": "string" + }, + "Key": { + "description": "The key of the tag. Tag keys are case sensitive. Each DynamoDB table can only have up to one tag with the same key. If you try to add an existing tag (same key), the existing tag value will be updated to the new value.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DeprecatedHashKeyElement": { + "description": "", + "additionalProperties": false, + "type": "object", + "properties": { + "AttributeType": { + "type": "string" + }, + "AttributeName": { + "type": "string" + } + }, + "required": [ + "AttributeType", + "AttributeName" + ] + }, + "TimeToLiveSpecification": { + "description": "Represents the settings used to enable or disable Time to Live (TTL) for the specified table.", + "additionalProperties": false, + "type": "object", + "properties": { + "Enabled": { + "description": "Indicates whether TTL is to be enabled (true) or disabled (false) on the table.", + "type": "boolean" + }, + "AttributeName": { + "description": "The name of the TTL attribute used to store the expiration time for items in the table.\n + The ``AttributeName`` property is required when enabling the TTL, or when TTL is already enabled.\n + To update this property, you must first disable TTL and then enable TTL with the new attribute name.", + "type": "string" + } + }, + "required": [ + "Enabled" + ] + } + }, + "properties": { + "SSESpecification": { + "description": "Specifies the settings to enable server-side encryption.", + "$ref": "#/definitions/SSESpecification" + }, + "KinesisStreamSpecification": { + "description": "The Kinesis Data Streams configuration for the specified table.", + "$ref": "#/definitions/KinesisStreamSpecification" + }, + "StreamSpecification": { + "description": "The settings for the DDB table stream, which capture changes to items stored in the table.", + "$ref": "#/definitions/StreamSpecification" + }, + "ContributorInsightsSpecification": { + "description": "The settings used to enable or disable CloudWatch Contributor Insights for the specified table.", + "$ref": "#/definitions/ContributorInsightsSpecification" + }, + "ImportSourceSpecification": { + "description": "Specifies the properties of data being imported from the S3 bucket source to the table.\n If you specify the ``ImportSourceSpecification`` property, and also specify either the ``StreamSpecification``, the ``TableClass`` property, or the ``DeletionProtectionEnabled`` property, the IAM entity creating/updating stack must have ``UpdateTable`` permission.", + "$ref": "#/definitions/ImportSourceSpecification" + }, + "PointInTimeRecoverySpecification": { + "description": "The settings used to enable point in time recovery.", + "$ref": "#/definitions/PointInTimeRecoverySpecification" + }, + "ProvisionedThroughput": { + "description": "Throughput for the specified table, which consists of values for ``ReadCapacityUnits`` and ``WriteCapacityUnits``. For more information about the contents of a provisioned throughput structure, see [Amazon DynamoDB Table ProvisionedThroughput](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughput.html). \n If you set ``BillingMode`` as ``PROVISIONED``, you must specify this property. If you set ``BillingMode`` as ``PAY_PER_REQUEST``, you cannot specify this property.", + "$ref": "#/definitions/ProvisionedThroughput" + }, + "TableName": { + "description": "A name for the table. If you don't specify a name, CFNlong generates a unique physical ID and uses that ID for the table name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html).\n If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.", + "type": "string" + }, + "AttributeDefinitions": { + "uniqueItems": true, + "description": "A list of attributes that describe the key schema for the table and indexes.\n This property is required to create a DDB table.\n Update requires: [Some interruptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-some-interrupt). Replacement if you edit an existing AttributeDefinition.", + "type": "array", + "items": { + "$ref": "#/definitions/AttributeDefinition" + } + }, + "BillingMode": { + "description": "Specify how you are charged for read and write throughput and how you manage capacity.\n Valid values include:\n + ``PROVISIONED`` - We recommend using ``PROVISIONED`` for predictable workloads. ``PROVISIONED`` sets the billing mode to [Provisioned Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual).\n + ``PAY_PER_REQUEST`` - We recommend using ``PAY_PER_REQUEST`` for unpredictable workloads. ``PAY_PER_REQUEST`` sets the billing mode to [On-Demand Mode](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand).\n \n If not specified, the default is ``PROVISIONED``.", + "type": "string" + }, + "GlobalSecondaryIndexes": { + "uniqueItems": false, + "description": "Global secondary indexes to be created on the table. You can create up to 20 global secondary indexes.\n If you update a table to include a new global secondary index, CFNlong initiates the index creation and then proceeds with the stack update. CFNlong doesn't wait for the index to complete creation because the backfilling phase can take a long time, depending on the size of the table. You can't use the index or update the table until the index's status is ``ACTIVE``. You can track its status by using the DynamoDB [DescribeTable](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html) command.\n If you add or delete an index during an update, we recommend that you don't update any other resources. If your stack fails to update and is rolled back while adding a new index, you must manually delete the index. \n Updates are not supported. The following are exceptions:\n + If you update either the contributor insights specification or the provisioned throughput values of global secondary indexes, you can update the table without interruption.\n + You can delete or add one global secondary index without interruption. If you do both in the same update (for example, by changing the index's logical ID), the update fails.", + "type": "array", + "items": { + "$ref": "#/definitions/GlobalSecondaryIndex" + } + }, + "KeySchema": { + "oneOf": [ + { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/definitions/KeySchema" + } + }, + { + "type": "object" + } + ], + "description": "Specifies the attributes that make up the primary key for the table. The attributes in the ``KeySchema`` property must also be defined in the ``AttributeDefinitions`` property." + }, + "LocalSecondaryIndexes": { + "uniqueItems": false, + "description": "Local secondary indexes to be created on the table. You can create up to 5 local secondary indexes. Each index is scoped to a given hash key value. The size of each hash key can be up to 10 gigabytes.", + "type": "array", + "items": { + "$ref": "#/definitions/LocalSecondaryIndex" + } + }, + "Arn": { + "description": "", + "type": "string" + }, + "StreamArn": { + "description": "", + "type": "string" + }, + "DeletionProtectionEnabled": { + "description": "Determines if a table is protected from deletion. When enabled, the table cannot be deleted by any user or process. This setting is disabled by default. For more information, see [Using deletion protection](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html#WorkingWithTables.Basics.DeletionProtection) in the *Developer Guide*.", + "type": "boolean" + }, + "TableClass": { + "description": "The table class of the new table. Valid values are ``STANDARD`` and ``STANDARD_INFREQUENT_ACCESS``.", + "type": "string" + }, + "Tags": { + "uniqueItems": false, + "description": "An array of key-value pairs to apply to this resource.\n For more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TimeToLiveSpecification": { + "description": "Specifies the Time to Live (TTL) settings for the table.\n For detailed information about the limits in DynamoDB, see [Limits in Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html) in the Amazon DynamoDB Developer Guide.", + "$ref": "#/definitions/TimeToLiveSpecification" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/capacityreservation.json b/internal/aws/cfn/schemas/aws/ec2/capacityreservation.json new file mode 100644 index 00000000..1dfe2997 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/capacityreservation.json @@ -0,0 +1,159 @@ +{ + "typeName": "AWS::EC2::CapacityReservation", + "description": "Resource Type definition for AWS::EC2::CapacityReservation", + "additionalProperties": false, + "properties": { + "Tenancy": { + "type": "string" + }, + "EndDateType": { + "type": "string" + }, + "TagSpecifications": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagSpecification" + } + }, + "AvailabilityZone": { + "type": "string" + }, + "TotalInstanceCount": { + "type": "integer" + }, + "EndDate": { + "type": "string" + }, + "EbsOptimized": { + "type": "boolean" + }, + "OutPostArn": { + "type": "string" + }, + "InstanceCount": { + "type": "integer" + }, + "PlacementGroupArn": { + "type": "string" + }, + "AvailableInstanceCount": { + "type": "integer" + }, + "InstancePlatform": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "EphemeralStorage": { + "type": "boolean" + }, + "InstanceMatchCriteria": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "TagSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceType": { + "type": "string" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + } + } + }, + "required": [ + "InstanceCount", + "AvailabilityZone", + "InstancePlatform", + "InstanceType" + ], + "createOnlyProperties": [ + "/properties/Tenancy", + "/properties/InstanceMatchCriteria", + "/properties/InstancePlatform", + "/properties/InstanceType", + "/properties/AvailabilityZone", + "/properties/TagSpecifications", + "/properties/OutPostArn", + "/properties/EphemeralStorage", + "/properties/EbsOptimized", + "/properties/PlacementGroupArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/AvailableInstanceCount", + "/properties/TotalInstanceCount" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateCapacityReservation", + "ec2:DescribeCapacityReservations", + "ec2:CancelCapacityReservation", + "ec2:CreateTags" + ] + }, + "delete": { + "permissions": [ + "ec2:CreateCapacityReservation", + "ec2:DescribeCapacityReservations", + "ec2:CancelCapacityReservation", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeCapacityReservations" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeCapacityReservations" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyCapacityReservation", + "ec2:CreateCapacityReservation", + "ec2:DescribeCapacityReservations", + "ec2:CancelCapacityReservation", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/capacityreservationfleet.json b/internal/aws/cfn/schemas/aws/ec2/capacityreservationfleet.json new file mode 100644 index 00000000..5e65cfcc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/capacityreservationfleet.json @@ -0,0 +1,191 @@ +{ + "typeName": "AWS::EC2::CapacityReservationFleet", + "description": "Resource Type definition for AWS::EC2::CapacityReservationFleet", + "additionalProperties": false, + "taggable": true, + "properties": { + "AllocationStrategy": { + "type": "string" + }, + "TagSpecifications": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagSpecification" + } + }, + "InstanceTypeSpecifications": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 50, + "items": { + "$ref": "#/definitions/InstanceTypeSpecification" + } + }, + "TotalTargetCapacity": { + "type": "integer", + "minimum": 1, + "maximum": 25000 + }, + "EndDate": { + "type": "string" + }, + "InstanceMatchCriteria": { + "type": "string", + "enum": [ + "open" + ] + }, + "CapacityReservationFleetId": { + "type": "string" + }, + "Tenancy": { + "type": "string", + "enum": [ + "default" + ] + }, + "RemoveEndDate": { + "type": "boolean" + }, + "NoRemoveEndDate": { + "type": "boolean" + } + }, + "definitions": { + "InstanceTypeSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceType": { + "type": "string" + }, + "InstancePlatform": { + "type": "string" + }, + "Weight": { + "type": "number" + }, + "AvailabilityZone": { + "type": "string" + }, + "AvailabilityZoneId": { + "type": "string" + }, + "EbsOptimized": { + "type": "boolean" + }, + "Priority": { + "type": "integer", + "minimum": 0, + "maximum": 999 + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "TagSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceType": { + "type": "string" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + } + } + }, + "createOnlyProperties": [ + "/properties/InstanceTypeSpecifications", + "/properties/AllocationStrategy", + "/properties/TagSpecifications", + "/properties/EndDate", + "/properties/Tenancy", + "/properties/InstanceMatchCriteria" + ], + "primaryIdentifier": [ + "/properties/CapacityReservationFleetId" + ], + "readOnlyProperties": [ + "/properties/CapacityReservationFleetId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateCapacityReservationFleet", + "ec2:ModifyCapacityReservationFleet", + "ec2:DescribeCapacityReservationFleets", + "ec2:CancelCapacityReservationFleets", + "ec2:CreateCapacityReservation", + "ec2:DescribeCapacityReservations", + "ec2:CancelCapacityReservation", + "ec2:DescribeInstances", + "ec2:CreateTags", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "ec2:CreateCapacityReservationFleet", + "ec2:ModifyCapacityReservationFleet", + "ec2:DescribeCapacityReservationFleets", + "ec2:CancelCapacityReservationFleets", + "ec2:CreateCapacityReservation", + "ec2:DescribeCapacityReservations", + "ec2:CancelCapacityReservation", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeCapacityReservationFleets", + "ec2:DescribeCapacityReservations", + "ec2:DescribeInstances" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeCapacityReservationFleets", + "ec2:DescribeInstances", + "ec2:DescribeCapacityReservations" + ] + }, + "update": { + "permissions": [ + "ec2:CreateCapacityReservationFleet", + "ec2:ModifyCapacityReservationFleet", + "ec2:DescribeCapacityReservationFleets", + "ec2:CancelCapacityReservationFleets", + "ec2:CreateCapacityReservation", + "ec2:ModifyCapacityReservation", + "ec2:DescribeCapacityReservations", + "ec2:CancelCapacityReservation", + "ec2:DescribeInstances", + "ec2:DeleteTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/carriergateway.json b/internal/aws/cfn/schemas/aws/ec2/carriergateway.json new file mode 100644 index 00000000..e0543282 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/carriergateway.json @@ -0,0 +1,102 @@ +{ + "typeName": "AWS::EC2::CarrierGateway", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127, + "pattern": "^(?!aws:.*)" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^(?!aws:.*)" + } + }, + "additionalProperties": false + } + }, + "properties": { + "CarrierGatewayId": { + "description": "The ID of the carrier gateway.", + "type": "string" + }, + "State": { + "description": "The state of the carrier gateway.", + "type": "string" + }, + "VpcId": { + "description": "The ID of the VPC.", + "type": "string" + }, + "OwnerId": { + "description": "The ID of the owner.", + "type": "string" + }, + "Tags": { + "description": "The tags for the carrier gateway.", + "$ref": "#/definitions/Tags" + } + }, + "required": [ + "VpcId" + ], + "createOnlyProperties": [ + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/CarrierGatewayId", + "/properties/OwnerId", + "/properties/State" + ], + "primaryIdentifier": [ + "/properties/CarrierGatewayId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateCarrierGateway", + "ec2:DescribeCarrierGateways", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeCarrierGateways" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeCarrierGateways", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteCarrierGateway", + "ec2:DescribeCarrierGateways" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeCarrierGateways" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ec2/clientvpnauthorizationrule.json b/internal/aws/cfn/schemas/aws/ec2/clientvpnauthorizationrule.json new file mode 100644 index 00000000..87c19045 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/clientvpnauthorizationrule.json @@ -0,0 +1,42 @@ +{ + "typeName": "AWS::EC2::ClientVpnAuthorizationRule", + "description": "Resource Type definition for AWS::EC2::ClientVpnAuthorizationRule", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ClientVpnEndpointId": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AccessGroupId": { + "type": "string" + }, + "TargetNetworkCidr": { + "type": "string" + }, + "AuthorizeAllGroups": { + "type": "boolean" + } + }, + "required": [ + "ClientVpnEndpointId", + "TargetNetworkCidr" + ], + "createOnlyProperties": [ + "/properties/ClientVpnEndpointId", + "/properties/AuthorizeAllGroups", + "/properties/Description", + "/properties/AccessGroupId", + "/properties/TargetNetworkCidr" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/clientvpnendpoint.json b/internal/aws/cfn/schemas/aws/ec2/clientvpnendpoint.json new file mode 100644 index 00000000..261b8ba4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/clientvpnendpoint.json @@ -0,0 +1,238 @@ +{ + "typeName": "AWS::EC2::ClientVpnEndpoint", + "description": "Resource Type definition for AWS::EC2::ClientVpnEndpoint", + "additionalProperties": false, + "properties": { + "ClientCidrBlock": { + "type": "string" + }, + "ClientConnectOptions": { + "$ref": "#/definitions/ClientConnectOptions" + }, + "Description": { + "type": "string" + }, + "TagSpecifications": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagSpecification" + } + }, + "AuthenticationOptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ClientAuthenticationRequest" + } + }, + "ServerCertificateArn": { + "type": "string" + }, + "SessionTimeoutHours": { + "type": "integer" + }, + "DnsServers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ConnectionLogOptions": { + "$ref": "#/definitions/ConnectionLogOptions" + }, + "SplitTunnel": { + "type": "boolean" + }, + "ClientLoginBannerOptions": { + "$ref": "#/definitions/ClientLoginBannerOptions" + }, + "VpcId": { + "type": "string" + }, + "SelfServicePortal": { + "type": "string" + }, + "TransportProtocol": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "VpnPort": { + "type": "integer" + } + }, + "definitions": { + "ConnectionLogOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "CloudwatchLogGroup": { + "type": "string" + }, + "CloudwatchLogStream": { + "type": "string" + } + }, + "required": [ + "Enabled" + ] + }, + "ClientConnectOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "LambdaFunctionArn": { + "type": "string" + } + }, + "required": [ + "Enabled" + ] + }, + "FederatedAuthenticationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "SAMLProviderArn": { + "type": "string" + }, + "SelfServiceSAMLProviderArn": { + "type": "string" + } + }, + "required": [ + "SAMLProviderArn" + ] + }, + "ClientLoginBannerOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "BannerText": { + "type": "string" + } + }, + "required": [ + "Enabled" + ] + }, + "DirectoryServiceAuthenticationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "DirectoryId": { + "type": "string" + } + }, + "required": [ + "DirectoryId" + ] + }, + "CertificateAuthenticationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientRootCertificateChainArn": { + "type": "string" + } + }, + "required": [ + "ClientRootCertificateChainArn" + ] + }, + "ClientAuthenticationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "MutualAuthentication": { + "$ref": "#/definitions/CertificateAuthenticationRequest" + }, + "Type": { + "type": "string" + }, + "ActiveDirectory": { + "$ref": "#/definitions/DirectoryServiceAuthenticationRequest" + }, + "FederatedAuthentication": { + "$ref": "#/definitions/FederatedAuthenticationRequest" + } + }, + "required": [ + "Type" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "TagSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceType": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "ResourceType", + "Tags" + ] + } + }, + "required": [ + "ClientCidrBlock", + "ConnectionLogOptions", + "AuthenticationOptions", + "ServerCertificateArn" + ], + "createOnlyProperties": [ + "/properties/TransportProtocol", + "/properties/ClientCidrBlock", + "/properties/TagSpecifications", + "/properties/AuthenticationOptions" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/clientvpnroute.json b/internal/aws/cfn/schemas/aws/ec2/clientvpnroute.json new file mode 100644 index 00000000..b2519a21 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/clientvpnroute.json @@ -0,0 +1,39 @@ +{ + "typeName": "AWS::EC2::ClientVpnRoute", + "description": "Resource Type definition for AWS::EC2::ClientVpnRoute", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ClientVpnEndpointId": { + "type": "string" + }, + "TargetVpcSubnetId": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "DestinationCidrBlock": { + "type": "string" + } + }, + "required": [ + "ClientVpnEndpointId", + "TargetVpcSubnetId", + "DestinationCidrBlock" + ], + "createOnlyProperties": [ + "/properties/ClientVpnEndpointId", + "/properties/DestinationCidrBlock", + "/properties/Description", + "/properties/TargetVpcSubnetId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/clientvpntargetnetworkassociation.json b/internal/aws/cfn/schemas/aws/ec2/clientvpntargetnetworkassociation.json new file mode 100644 index 00000000..8f158863 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/clientvpntargetnetworkassociation.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::EC2::ClientVpnTargetNetworkAssociation", + "description": "Resource Type definition for AWS::EC2::ClientVpnTargetNetworkAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ClientVpnEndpointId": { + "type": "string" + }, + "SubnetId": { + "type": "string" + } + }, + "required": [ + "ClientVpnEndpointId", + "SubnetId" + ], + "createOnlyProperties": [ + "/properties/ClientVpnEndpointId", + "/properties/SubnetId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/customergateway.json b/internal/aws/cfn/schemas/aws/ec2/customergateway.json new file mode 100644 index 00000000..d10edcba --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/customergateway.json @@ -0,0 +1,109 @@ +{ + "typeName": "AWS::EC2::CustomerGateway", + "description": "Resource Type definition for AWS::EC2::CustomerGateway", + "additionalProperties": false, + "properties": { + "CustomerGatewayId": { + "type": "string", + "description": "CustomerGateway ID generated after customer gateway is created. Each customer gateway has a unique ID." + }, + "BgpAsn": { + "type": "integer", + "default": 65000, + "description": "For devices that support BGP, the customer gateway's BGP ASN." + }, + "IpAddress": { + "type": "string", + "description": "The internet-routable IP address for the customer gateway's outside interface. The address must be static." + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "One or more tags for the customer gateway." + }, + "Type": { + "type": "string", + "description": "The type of VPN connection that this customer gateway supports." + }, + "DeviceName": { + "type": "string", + "description": "A name for the customer gateway device." + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "BgpAsn", + "IpAddress", + "Type" + ], + "createOnlyProperties": [ + "/properties/BgpAsn", + "/properties/Type", + "/properties/IpAddress", + "/properties/DeviceName" + ], + "readOnlyProperties": [ + "/properties/CustomerGatewayId" + ], + "primaryIdentifier": [ + "/properties/CustomerGatewayId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateCustomerGateway", + "ec2:DescribeCustomerGateways" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeCustomerGateways" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteCustomerGateway", + "ec2:DescribeCustomerGateways" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeCustomerGateways" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/dhcpoptions.json b/internal/aws/cfn/schemas/aws/ec2/dhcpoptions.json new file mode 100644 index 00000000..9af5edff --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/dhcpoptions.json @@ -0,0 +1,132 @@ +{ + "typeName": "AWS::EC2::DHCPOptions", + "description": "Resource Type definition for AWS::EC2::DHCPOptions", + "additionalProperties": false, + "properties": { + "DhcpOptionsId": { + "type": "string" + }, + "DomainName": { + "type": "string", + "description": "This value is used to complete unqualified DNS hostnames." + }, + "DomainNameServers": { + "type": "array", + "description": "The IPv4 addresses of up to four domain name servers, or AmazonProvidedDNS.", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "NetbiosNameServers": { + "type": "array", + "description": "The IPv4 addresses of up to four NetBIOS name servers.", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "NetbiosNodeType": { + "type": "integer", + "description": "The NetBIOS node type (1, 2, 4, or 8)." + }, + "NtpServers": { + "type": "array", + "description": "The IPv4 addresses of up to four Network Time Protocol (NTP) servers.", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Ipv6AddressPreferredLeaseTime": { + "type": "integer", + "description": "The preferred Lease Time for ipV6 address in seconds." + }, + "Tags": { + "type": "array", + "description": "Any tags assigned to the DHCP options set.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/NetbiosNameServers", + "/properties/NetbiosNodeType", + "/properties/NtpServers", + "/properties/DomainName", + "/properties/DomainNameServers", + "/properties/Ipv6AddressPreferredLeaseTime" + ], + "readOnlyProperties": [ + "/properties/DhcpOptionsId" + ], + "primaryIdentifier": [ + "/properties/DhcpOptionsId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateDhcpOptions", + "ec2:DescribeDhcpOptions", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeDhcpOptions", + "ec2:DescribeTags" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:DescribeDhcpOptions", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteDhcpOptions", + "ec2:DeleteTags", + "ec2:DescribeDhcpOptions" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeDhcpOptions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ec2fleet.json b/internal/aws/cfn/schemas/aws/ec2/ec2fleet.json new file mode 100644 index 00000000..84ef13f1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ec2fleet.json @@ -0,0 +1,713 @@ +{ + "typeName": "AWS::EC2::EC2Fleet", + "description": "Resource Type definition for AWS::EC2::EC2Fleet", + "additionalProperties": false, + "properties": { + "TargetCapacitySpecification": { + "$ref": "#/definitions/TargetCapacitySpecificationRequest" + }, + "OnDemandOptions": { + "$ref": "#/definitions/OnDemandOptionsRequest" + }, + "Type": { + "type": "string", + "enum": [ + "maintain", + "request", + "instant" + ] + }, + "ExcessCapacityTerminationPolicy": { + "type": "string", + "enum": [ + "termination", + "no-termination" + ] + }, + "TagSpecifications": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagSpecification" + } + }, + "SpotOptions": { + "$ref": "#/definitions/SpotOptionsRequest" + }, + "ValidFrom": { + "type": "string" + }, + "ReplaceUnhealthyInstances": { + "type": "boolean" + }, + "LaunchTemplateConfigs": { + "type": "array", + "uniqueItems": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/FleetLaunchTemplateConfigRequest" + } + }, + "FleetId": { + "type": "string" + }, + "TerminateInstancesWithExpiration": { + "type": "boolean" + }, + "ValidUntil": { + "type": "string" + }, + "Context": { + "type": "string" + } + }, + "definitions": { + "OnDemandOptionsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "SingleAvailabilityZone": { + "type": "boolean" + }, + "AllocationStrategy": { + "type": "string" + }, + "SingleInstanceType": { + "type": "boolean" + }, + "MinTargetCapacity": { + "type": "integer" + }, + "MaxTotalPrice": { + "type": "string" + }, + "CapacityReservationOptions": { + "$ref": "#/definitions/CapacityReservationOptionsRequest" + } + } + }, + "SpotOptionsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaintenanceStrategies": { + "$ref": "#/definitions/MaintenanceStrategies" + }, + "SingleAvailabilityZone": { + "type": "boolean" + }, + "AllocationStrategy": { + "type": "string", + "enum": [ + "lowest-price", + "lowestPrice", + "diversified", + "capacityOptimized", + "capacity-optimized", + "capacityOptimizedPrioritized", + "capacity-optimized-prioritized", + "priceCapacityOptimized", + "price-capacity-optimized" + ] + }, + "SingleInstanceType": { + "type": "boolean" + }, + "MinTargetCapacity": { + "type": "integer" + }, + "MaxTotalPrice": { + "type": "string" + }, + "InstanceInterruptionBehavior": { + "type": "string", + "enum": [ + "hibernate", + "stop", + "terminate" + ] + }, + "InstancePoolsToUseCount": { + "type": "integer" + } + } + }, + "TargetCapacitySpecificationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultTargetCapacityType": { + "type": "string", + "enum": [ + "on-demand", + "spot" + ] + }, + "TargetCapacityUnitType": { + "type": "string", + "enum": [ + "vcpu", + "memory-mib", + "units" + ] + }, + "TotalTargetCapacity": { + "type": "integer" + }, + "OnDemandTargetCapacity": { + "type": "integer" + }, + "SpotTargetCapacity": { + "type": "integer" + } + }, + "required": [ + "TotalTargetCapacity" + ] + }, + "FleetLaunchTemplateSpecificationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateName": { + "type": "string", + "minLength": 3, + "maxLength": 128, + "pattern": "[a-zA-Z0-9\\(\\)\\.\\-/_]+" + }, + "LaunchTemplateId": { + "type": "string" + }, + "Version": { + "type": "string" + } + }, + "required": [ + "Version" + ] + }, + "Placement": { + "type": "object", + "additionalProperties": false, + "properties": { + "GroupName": { + "type": "string" + }, + "Tenancy": { + "type": "string" + }, + "SpreadDomain": { + "type": "string" + }, + "PartitionNumber": { + "type": "integer" + }, + "AvailabilityZone": { + "type": "string" + }, + "Affinity": { + "type": "string" + }, + "HostId": { + "type": "string" + }, + "HostResourceGroupArn": { + "type": "string" + } + } + }, + "FleetLaunchTemplateConfigRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateSpecification": { + "$ref": "#/definitions/FleetLaunchTemplateSpecificationRequest" + }, + "Overrides": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/FleetLaunchTemplateOverridesRequest" + } + } + } + }, + "CapacityReservationOptionsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "UsageStrategy": { + "type": "string", + "enum": [ + "use-capacity-reservations-first" + ] + } + } + }, + "FleetLaunchTemplateOverridesRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "WeightedCapacity": { + "type": "number" + }, + "Placement": { + "$ref": "#/definitions/Placement" + }, + "Priority": { + "type": "number" + }, + "AvailabilityZone": { + "type": "string" + }, + "SubnetId": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "InstanceRequirements": { + "$ref": "#/definitions/InstanceRequirementsRequest" + }, + "MaxPrice": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "TagSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceType": { + "type": "string", + "enum": [ + "client-vpn-endpoint", + "customer-gateway", + "dedicated-host", + "dhcp-options", + "egress-only-internet-gateway", + "elastic-gpu", + "elastic-ip", + "export-image-task", + "export-instance-task", + "fleet", + "fpga-image", + "host-reservation", + "image", + "import-image-task", + "import-snapshot-task", + "instance", + "internet-gateway", + "key-pair", + "launch-template", + "local-gateway-route-table-vpc-association", + "natgateway", + "network-acl", + "network-insights-analysis", + "network-insights-path", + "network-interface", + "placement-group", + "reserved-instances", + "route-table", + "security-group", + "snapshot", + "spot-fleet-request", + "spot-instances-request", + "subnet", + "traffic-mirror-filter", + "traffic-mirror-session", + "traffic-mirror-target", + "transit-gateway", + "transit-gateway-attachment", + "transit-gateway-connect-peer", + "transit-gateway-multicast-domain", + "transit-gateway-route-table", + "volume", + "vpc", + "vpc-flow-log", + "vpc-peering-connection", + "vpn-connection", + "vpn-gateway" + ] + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + } + }, + "InstanceRequirementsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "VCpuCount": { + "$ref": "#/definitions/VCpuCountRangeRequest" + }, + "MemoryMiB": { + "$ref": "#/definitions/MemoryMiBRequest" + }, + "CpuManufacturers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "intel", + "amd", + "amazon-web-services" + ] + } + }, + "MemoryGiBPerVCpu": { + "$ref": "#/definitions/MemoryGiBPerVCpuRequest" + }, + "AllowedInstanceTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 30, + "pattern": "[a-zA-Z0-9\\.\\*]+" + } + }, + "ExcludedInstanceTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 30, + "pattern": "[a-zA-Z0-9\\.\\*]+" + } + }, + "InstanceGenerations": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "current", + "previous" + ] + } + }, + "SpotMaxPricePercentageOverLowestPrice": { + "type": "integer" + }, + "OnDemandMaxPricePercentageOverLowestPrice": { + "type": "integer" + }, + "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice": { + "type": "integer" + }, + "BareMetal": { + "type": "string", + "enum": [ + "included", + "required", + "excluded" + ] + }, + "BurstablePerformance": { + "type": "string", + "enum": [ + "included", + "required", + "excluded" + ] + }, + "RequireHibernateSupport": { + "type": "boolean" + }, + "NetworkBandwidthGbps": { + "$ref": "#/definitions/NetworkBandwidthGbpsRequest" + }, + "NetworkInterfaceCount": { + "$ref": "#/definitions/NetworkInterfaceCountRequest" + }, + "LocalStorage": { + "type": "string", + "enum": [ + "included", + "required", + "excluded" + ] + }, + "LocalStorageTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "hdd", + "ssd" + ] + } + }, + "TotalLocalStorageGB": { + "$ref": "#/definitions/TotalLocalStorageGBRequest" + }, + "BaselineEbsBandwidthMbps": { + "$ref": "#/definitions/BaselineEbsBandwidthMbpsRequest" + }, + "AcceleratorTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "gpu", + "fpga", + "inference" + ] + } + }, + "AcceleratorCount": { + "$ref": "#/definitions/AcceleratorCountRequest" + }, + "AcceleratorManufacturers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "amazon-web-services", + "amd", + "habana", + "nvidia", + "xilinx" + ] + } + }, + "AcceleratorNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "a10g", + "a100", + "h100", + "inferentia", + "k520", + "k80", + "m60", + "radeon-pro-v520", + "t4", + "t4g", + "vu9p", + "v100" + ] + } + }, + "AcceleratorTotalMemoryMiB": { + "$ref": "#/definitions/AcceleratorTotalMemoryMiBRequest" + } + } + }, + "VCpuCountRangeRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "MemoryMiBRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "MemoryGiBPerVCpuRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + } + } + }, + "NetworkBandwidthGbpsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + } + } + }, + "NetworkInterfaceCountRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "TotalLocalStorageGBRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + } + } + }, + "BaselineEbsBandwidthMbpsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "AcceleratorCountRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "AcceleratorTotalMemoryMiBRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "MaintenanceStrategies": { + "type": "object", + "additionalProperties": false, + "properties": { + "CapacityRebalance": { + "$ref": "#/definitions/CapacityRebalance" + } + } + }, + "CapacityRebalance": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReplacementStrategy": { + "type": "string", + "enum": [ + "launch", + "launch-before-terminate" + ] + }, + "TerminationDelay": { + "type": "integer" + } + } + } + }, + "required": [ + "TargetCapacitySpecification", + "LaunchTemplateConfigs" + ], + "createOnlyProperties": [ + "/properties/LaunchTemplateConfigs", + "/properties/OnDemandOptions", + "/properties/ReplaceUnhealthyInstances", + "/properties/SpotOptions", + "/properties/TagSpecifications", + "/properties/TerminateInstancesWithExpiration", + "/properties/Type", + "/properties/ValidFrom", + "/properties/ValidUntil" + ], + "primaryIdentifier": [ + "/properties/FleetId" + ], + "readOnlyProperties": [ + "/properties/FleetId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateFleet", + "ec2:DescribeFleets" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeFleets", + "ec2:DeleteFleets" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeFleets" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeFleets" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyFleet", + "ec2:DescribeFleets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/egressonlyinternetgateway.json b/internal/aws/cfn/schemas/aws/ec2/egressonlyinternetgateway.json new file mode 100644 index 00000000..fa23b302 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/egressonlyinternetgateway.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::EC2::EgressOnlyInternetGateway", + "description": "Resource Type definition for AWS::EC2::EgressOnlyInternetGateway", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "additionalProperties": false, + "properties": { + "Id": { + "description": "Service Generated ID of the EgressOnlyInternetGateway", + "type": "string" + }, + "VpcId": { + "description": "The ID of the VPC for which to create the egress-only internet gateway.", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "VpcId" + ], + "createOnlyProperties": [ + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateEgressOnlyInternetGateway", + "ec2:DescribeEgressOnlyInternetGateways" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeEgressOnlyInternetGateways" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteEgressOnlyInternetGateway", + "ec2:DescribeEgressOnlyInternetGateways", + "ec2:DescribeVpcs" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeEgressOnlyInternetGateways" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/eip.json b/internal/aws/cfn/schemas/aws/ec2/eip.json new file mode 100644 index 00000000..567cbdaf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/eip.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::EC2::EIP", + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/blob/master/src/main/resources/schema/provider.definition.schema.v1.json", + "description": "Specifies an Elastic IP (EIP) address and can, optionally, associate it with an Amazon EC2 instance.\n You can allocate an Elastic IP address from an address pool owned by AWS or from an address pool created from a public IPv4 address range that you have brought to AWS for use with your AWS resources using bring your own IP addresses (BYOIP). For more information, see [Bring Your Own IP Addresses (BYOIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) in the *Amazon EC2 User Guide*.\n For more information, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) in the *Amazon EC2 User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The tag key." + }, + "Value": { + "type": "string", + "description": "The tag value." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "properties": { + "PublicIp": { + "description": "", + "type": "string" + }, + "AllocationId": { + "description": "", + "type": "string" + }, + "Domain": { + "description": "The network (``vpc``).\n If you define an Elastic IP address and associate it with a VPC that is defined in the same template, you must declare a dependency on the VPC-gateway attachment by using the [DependsOn Attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) on this resource.", + "type": "string" + }, + "NetworkBorderGroup": { + "description": "A unique set of Availability Zones, Local Zones, or Wavelength Zones from which AWS advertises IP addresses. Use this parameter to limit the IP address to this location. IP addresses cannot move between network border groups.\n Use [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html) to view the network border groups.", + "type": "string" + }, + "TransferAddress": { + "description": "The Elastic IP address you are accepting for transfer. You can only accept one transferred address. For more information on Elastic IP address transfers, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro) in the *Amazon Virtual Private Cloud User Guide*.", + "type": "string" + }, + "InstanceId": { + "description": "The ID of the instance.\n Updates to the ``InstanceId`` property may require *some interruptions*. Updates on an EIP reassociates the address on its associated resource.", + "type": "string" + }, + "PublicIpv4Pool": { + "description": "The ID of an address pool that you own. Use this parameter to let Amazon EC2 select an address from the address pool.\n Updates to the ``PublicIpv4Pool`` property may require *some interruptions*. Updates on an EIP reassociates the address on its associated resource.", + "type": "string" + }, + "Tags": { + "description": "Any tags assigned to the Elastic IP address.\n Updates to the ``Tags`` property may require *some interruptions*. Updates on an EIP reassociates the address on its associated resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "handlers": { + "create": { + "permissions": [ + "ec2:AllocateAddress", + "ec2:AcceptAddressTransfer", + "ec2:DescribeAddresses", + "ec2:AssociateAddress", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeAddresses" + ] + }, + "delete": { + "permissions": [ + "ec2:ReleaseAddress", + "ec2:DescribeAddresses", + "ec2:DisassociateAddress" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeAddresses", + "ec2:DisassociateAddress", + "ec2:DeleteTags", + "ec2:CreateTags", + "ec2:AssociateAddress" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeAddresses" + ] + } + }, + "createOnlyProperties": [ + "/properties/Domain", + "/properties/NetworkBorderGroup", + "/properties/TransferAddress" + ], + "writeOnlyProperties": [ + "/properties/TransferAddress" + ], + "readOnlyProperties": [ + "/properties/PublicIp", + "/properties/AllocationId" + ], + "primaryIdentifier": [ + "/properties/PublicIp", + "/properties/AllocationId" + ], + "additionalProperties": false, + "propertyTransform": { + "/properties/Domain": "\"vpc\"" + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/eipassociation.json b/internal/aws/cfn/schemas/aws/ec2/eipassociation.json new file mode 100644 index 00000000..2f3d719b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/eipassociation.json @@ -0,0 +1,76 @@ +{ + "typeName": "AWS::EC2::EIPAssociation", + "description": "Resource schema for EC2 EIP association.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", + "properties": { + "Id": { + "description": "Composite ID of non-empty properties, to determine the identification.", + "type": "string" + }, + "AllocationId": { + "description": "The allocation ID. This is required for EC2-VPC.", + "type": "string" + }, + "NetworkInterfaceId": { + "description": "The ID of the network interface.", + "type": "string" + }, + "InstanceId": { + "description": "The ID of the instance.", + "type": "string" + }, + "PrivateIpAddress": { + "description": "The primary or secondary private IP address to associate with the Elastic IP address.", + "type": "string" + }, + "EIP": { + "description": "The Elastic IP address to associate with the instance.", + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "readOnlyProperties": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/AllocationId", + "/properties/NetworkInterfaceId", + "/properties/InstanceId", + "/properties/PrivateIpAddress", + "/properties/EIP" + ], + "replacementStrategy": "delete_then_create", + "primaryIdentifier": [ + "/properties/Id" + ], + "deprecatedProperties": [ + "/properties/EIP" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeAddresses", + "ec2:AssociateAddress" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeAddresses" + ] + }, + "delete": { + "permissions": [ + "ec2:DisassociateAddress", + "ec2:DescribeAddresses" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeAddresses" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/enclavecertificateiamroleassociation.json b/internal/aws/cfn/schemas/aws/ec2/enclavecertificateiamroleassociation.json new file mode 100644 index 00000000..65397083 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/enclavecertificateiamroleassociation.json @@ -0,0 +1,73 @@ +{ + "typeName": "AWS::EC2::EnclaveCertificateIamRoleAssociation", + "description": "Associates an AWS Identity and Access Management (IAM) role with an AWS Certificate Manager (ACM) certificate. This association is based on Amazon Resource Names and it enables the certificate to be used by the ACM for Nitro Enclaves application inside an enclave.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-acmcerts.git", + "properties": { + "CertificateArn": { + "description": "The Amazon Resource Name (ARN) of the ACM certificate with which to associate the IAM role.", + "type": "string", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:acm:[A-Za-z0-9-]{1,64}:([0-9]{12})?:certificate/.+$", + "minLength": 1, + "maxLength": 1283 + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role to associate with the ACM certificate. You can associate up to 16 IAM roles with an ACM certificate.", + "type": "string", + "pattern": "^arn:aws[A-Za-z0-9-]{0,64}:iam:.*:([0-9]{12})?:role/.+$", + "minLength": 1, + "maxLength": 1283 + }, + "CertificateS3BucketName": { + "description": "The name of the Amazon S3 bucket to which the certificate was uploaded.", + "type": "string" + }, + "CertificateS3ObjectKey": { + "description": "The Amazon S3 object key where the certificate, certificate chain, and encrypted private key bundle are stored.", + "type": "string" + }, + "EncryptionKmsKeyId": { + "description": "The ID of the AWS KMS CMK used to encrypt the private key of the certificate.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "CertificateArn", + "RoleArn" + ], + "primaryIdentifier": [ + "/properties/CertificateArn", + "/properties/RoleArn" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AssociateEnclaveCertificateIamRole" + ] + }, + "read": { + "permissions": [ + "ec2:GetAssociatedEnclaveCertificateIamRoles" + ] + }, + "delete": { + "permissions": [ + "ec2:DisassociateEnclaveCertificateIamRole" + ] + }, + "list": { + "permissions": [ + "ec2:GetAssociatedEnclaveCertificateIamRoles" + ] + } + }, + "readOnlyProperties": [ + "/properties/CertificateS3BucketName", + "/properties/CertificateS3ObjectKey", + "/properties/EncryptionKmsKeyId" + ], + "createOnlyProperties": [ + "/properties/CertificateArn", + "/properties/RoleArn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/flowlog.json b/internal/aws/cfn/schemas/aws/ec2/flowlog.json new file mode 100644 index 00000000..195e22bd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/flowlog.json @@ -0,0 +1,186 @@ +{ + "typeName": "AWS::EC2::FlowLog", + "description": "Specifies a VPC flow log, which enables you to capture IP traffic for a specific network interface, subnet, or VPC.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-flowlog.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Id": { + "description": "The Flow Log ID", + "type": "string" + }, + "DeliverCrossAccountRole": { + "description": "The ARN of the IAM role that allows Amazon EC2 to publish flow logs across accounts.", + "type": "string" + }, + "DeliverLogsPermissionArn": { + "description": "The ARN for the IAM role that permits Amazon EC2 to publish flow logs to a CloudWatch Logs log group in your account. If you specify LogDestinationType as s3 or kinesis-data-firehose, do not specify DeliverLogsPermissionArn or LogGroupName.", + "type": "string" + }, + "LogDestination": { + "description": "Specifies the destination to which the flow log data is to be published. Flow log data can be published to a CloudWatch Logs log group, an Amazon S3 bucket, or a Kinesis Firehose stream. The value specified for this parameter depends on the value specified for LogDestinationType.", + "type": "string" + }, + "LogDestinationType": { + "description": "Specifies the type of destination to which the flow log data is to be published. Flow log data can be published to CloudWatch Logs or Amazon S3.", + "type": "string", + "enum": [ + "cloud-watch-logs", + "s3", + "kinesis-data-firehose" + ] + }, + "LogFormat": { + "description": "The fields to include in the flow log record, in the order in which they should appear.", + "type": "string" + }, + "LogGroupName": { + "description": "The name of a new or existing CloudWatch Logs log group where Amazon EC2 publishes your flow logs. If you specify LogDestinationType as s3 or kinesis-data-firehose, do not specify DeliverLogsPermissionArn or LogGroupName.", + "type": "string" + }, + "MaxAggregationInterval": { + "description": "The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. You can specify 60 seconds (1 minute) or 600 seconds (10 minutes).", + "type": "integer" + }, + "ResourceId": { + "description": "The ID of the subnet, network interface, or VPC for which you want to create a flow log.", + "type": "string" + }, + "ResourceType": { + "description": "The type of resource for which to create the flow log. For example, if you specified a VPC ID for the ResourceId property, specify VPC for this property.", + "type": "string", + "enum": [ + "NetworkInterface", + "Subnet", + "VPC", + "TransitGateway", + "TransitGatewayAttachment" + ] + }, + "Tags": { + "description": "The tags to apply to the flow logs.", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TrafficType": { + "description": "The type of traffic to log. You can log traffic that the resource accepts or rejects, or all traffic.", + "type": "string", + "enum": [ + "ACCEPT", + "ALL", + "REJECT" + ] + }, + "DestinationOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileFormat": { + "type": "string", + "enum": [ + "plain-text", + "parquet" + ] + }, + "HiveCompatiblePartitions": { + "type": "boolean" + }, + "PerHourPartition": { + "type": "boolean" + } + }, + "required": [ + "FileFormat", + "HiveCompatiblePartitions", + "PerHourPartition" + ] + } + }, + "required": [ + "ResourceType", + "ResourceId" + ], + "createOnlyProperties": [ + "/properties/DeliverCrossAccountRole", + "/properties/DeliverLogsPermissionArn", + "/properties/LogGroupName", + "/properties/LogDestination", + "/properties/ResourceId", + "/properties/TrafficType", + "/properties/LogDestinationType", + "/properties/ResourceType", + "/properties/LogFormat", + "/properties/MaxAggregationInterval", + "/properties/DestinationOptions" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateFlowLogs", + "ec2:DescribeFlowLogs", + "ec2:CreateTags", + "iam:PassRole", + "logs:CreateLogDelivery", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeFlowLogs" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeFlowLogs" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteFlowLogs", + "ec2:DescribeFlowLogs", + "logs:DeleteLogDelivery" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeFlowLogs" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ec2/gatewayroutetableassociation.json b/internal/aws/cfn/schemas/aws/ec2/gatewayroutetableassociation.json new file mode 100644 index 00000000..b648ea08 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/gatewayroutetableassociation.json @@ -0,0 +1,64 @@ +{ + "typeName": "AWS::EC2::GatewayRouteTableAssociation", + "description": "Associates a gateway with a route table. The gateway and route table must be in the same VPC. This association causes the incoming traffic to the gateway to be routed according to the routes in the route table.", + "sourceUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-gatewayroutetableassociation.html", + "properties": { + "RouteTableId": { + "description": "The ID of the route table.", + "type": "string" + }, + "GatewayId": { + "description": "The ID of the gateway.", + "type": "string" + }, + "AssociationId": { + "description": "The route table association ID.", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "RouteTableId", + "GatewayId" + ], + "primaryIdentifier": [ + "/properties/GatewayId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeRouteTables", + "ec2:AssociateRouteTable" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeRouteTables" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeRouteTables", + "ec2:ReplaceRouteTableAssociation" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeRouteTables", + "ec2:DisassociateRouteTable" + ] + } + }, + "createOnlyProperties": [ + "/properties/GatewayId" + ], + "readOnlyProperties": [ + "/properties/AssociationId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/host.json b/internal/aws/cfn/schemas/aws/ec2/host.json new file mode 100644 index 00000000..6ff00e57 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/host.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::EC2::Host", + "description": "Resource Type definition for AWS::EC2::Host", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "additionalProperties": false, + "properties": { + "HostId": { + "description": "ID of the host created.", + "type": "string" + }, + "AutoPlacement": { + "description": "Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID.", + "type": "string" + }, + "AvailabilityZone": { + "description": "The Availability Zone in which to allocate the Dedicated Host.", + "type": "string" + }, + "HostRecovery": { + "description": "Indicates whether to enable or disable host recovery for the Dedicated Host. Host recovery is disabled by default.", + "type": "string" + }, + "InstanceType": { + "description": "Specifies the instance type to be supported by the Dedicated Hosts. If you specify an instance type, the Dedicated Hosts support instances of the specified instance type only.", + "type": "string" + }, + "InstanceFamily": { + "description": "Specifies the instance family to be supported by the Dedicated Hosts. If you specify an instance family, the Dedicated Hosts support multiple instance types within that instance family.", + "type": "string" + }, + "OutpostArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on which to allocate the Dedicated Host.", + "type": "string" + }, + "HostMaintenance": { + "description": "Automatically allocates a new dedicated host and moves your instances on to it if a degradation is detected on your current host.", + "type": "string" + }, + "AssetId": { + "description": "The ID of the Outpost hardware asset.", + "type": "string" + } + }, + "required": [ + "AvailabilityZone" + ], + "createOnlyProperties": [ + "/properties/AvailabilityZone", + "/properties/InstanceType", + "/properties/InstanceFamily", + "/properties/OutpostArn", + "/properties/AssetId" + ], + "primaryIdentifier": [ + "/properties/HostId" + ], + "readOnlyProperties": [ + "/properties/HostId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AllocateHosts", + "ec2:DescribeHosts" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeHosts" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyHosts", + "ec2:DescribeHosts" + ] + }, + "delete": { + "permissions": [ + "ec2:ReleaseHosts", + "ec2:DescribeHosts" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeHosts" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/instance.json b/internal/aws/cfn/schemas/aws/ec2/instance.json new file mode 100644 index 00000000..85ff4e3f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/instance.json @@ -0,0 +1,540 @@ +{ + "typeName": "AWS::EC2::Instance", + "description": "Resource Type definition for AWS::EC2::Instance", + "additionalProperties": false, + "properties": { + "Tenancy": { + "type": "string" + }, + "SecurityGroups": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "PrivateDnsName": { + "type": "string" + }, + "PrivateIpAddress": { + "type": "string" + }, + "UserData": { + "type": "string" + }, + "BlockDeviceMappings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/BlockDeviceMapping" + } + }, + "IamInstanceProfile": { + "type": "string" + }, + "Ipv6Addresses": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InstanceIpv6Address" + } + }, + "KernelId": { + "type": "string" + }, + "SubnetId": { + "type": "string" + }, + "EbsOptimized": { + "type": "boolean" + }, + "PropagateTagsToVolumeOnCreation": { + "type": "boolean" + }, + "ElasticGpuSpecifications": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ElasticGpuSpecification" + } + }, + "ElasticInferenceAccelerators": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ElasticInferenceAccelerator" + } + }, + "Volumes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Volume" + } + }, + "PrivateIp": { + "type": "string" + }, + "Ipv6AddressCount": { + "type": "integer" + }, + "LaunchTemplate": { + "$ref": "#/definitions/LaunchTemplateSpecification" + }, + "EnclaveOptions": { + "$ref": "#/definitions/EnclaveOptions" + }, + "NetworkInterfaces": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/NetworkInterface" + } + }, + "ImageId": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "Monitoring": { + "type": "boolean" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AdditionalInfo": { + "type": "string" + }, + "HibernationOptions": { + "$ref": "#/definitions/HibernationOptions" + }, + "LicenseSpecifications": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LicenseSpecification" + } + }, + "PublicIp": { + "type": "string" + }, + "InstanceInitiatedShutdownBehavior": { + "type": "string" + }, + "CpuOptions": { + "$ref": "#/definitions/CpuOptions" + }, + "AvailabilityZone": { + "type": "string" + }, + "PrivateDnsNameOptions": { + "$ref": "#/definitions/PrivateDnsNameOptions" + }, + "HostId": { + "type": "string" + }, + "HostResourceGroupArn": { + "type": "string" + }, + "PublicDnsName": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DisableApiTermination": { + "type": "boolean" + }, + "KeyName": { + "type": "string" + }, + "RamdiskId": { + "type": "string" + }, + "SourceDestCheck": { + "type": "boolean" + }, + "PlacementGroupName": { + "type": "string" + }, + "SsmAssociations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SsmAssociation" + } + }, + "Affinity": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "CreditSpecification": { + "$ref": "#/definitions/CreditSpecification" + } + }, + "definitions": { + "LaunchTemplateSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateName": { + "type": "string" + }, + "LaunchTemplateId": { + "type": "string" + }, + "Version": { + "type": "string" + } + }, + "required": [ + "Version" + ] + }, + "HibernationOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Configured": { + "type": "boolean" + } + } + }, + "LicenseSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "LicenseConfigurationArn": { + "type": "string" + } + }, + "required": [ + "LicenseConfigurationArn" + ] + }, + "CpuOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "ThreadsPerCore": { + "type": "integer" + }, + "CoreCount": { + "type": "integer" + } + } + }, + "NoDevice": { + "type": "object", + "additionalProperties": false + }, + "InstanceIpv6Address": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ipv6Address": { + "type": "string" + } + }, + "required": [ + "Ipv6Address" + ] + }, + "NetworkInterface": { + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "PrivateIpAddress": { + "type": "string" + }, + "PrivateIpAddresses": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/PrivateIpAddressSpecification" + } + }, + "SecondaryPrivateIpAddressCount": { + "type": "integer" + }, + "DeviceIndex": { + "type": "string" + }, + "GroupSet": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Ipv6Addresses": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InstanceIpv6Address" + } + }, + "SubnetId": { + "type": "string" + }, + "AssociatePublicIpAddress": { + "type": "boolean" + }, + "NetworkInterfaceId": { + "type": "string" + }, + "AssociateCarrierIpAddress": { + "type": "boolean" + }, + "Ipv6AddressCount": { + "type": "integer" + }, + "DeleteOnTermination": { + "type": "boolean" + } + }, + "required": [ + "DeviceIndex" + ] + }, + "PrivateDnsNameOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "HostnameType": { + "type": "string" + }, + "EnableResourceNameDnsAAAARecord": { + "type": "boolean" + }, + "EnableResourceNameDnsARecord": { + "type": "boolean" + } + } + }, + "ElasticGpuSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "ElasticInferenceAccelerator": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Count": { + "type": "integer" + } + }, + "required": [ + "Type" + ] + }, + "SsmAssociation": { + "type": "object", + "additionalProperties": false, + "properties": { + "AssociationParameters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AssociationParameter" + } + }, + "DocumentName": { + "type": "string" + } + }, + "required": [ + "DocumentName" + ] + }, + "AssociationParameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "PrivateIpAddressSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "PrivateIpAddress": { + "type": "string" + }, + "Primary": { + "type": "boolean" + } + }, + "required": [ + "PrivateIpAddress", + "Primary" + ] + }, + "Volume": { + "type": "object", + "additionalProperties": false, + "properties": { + "VolumeId": { + "type": "string" + }, + "Device": { + "type": "string" + } + }, + "required": [ + "VolumeId", + "Device" + ] + }, + "EnclaveOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + } + }, + "Ebs": { + "type": "object", + "additionalProperties": false, + "properties": { + "SnapshotId": { + "type": "string" + }, + "VolumeType": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "Encrypted": { + "type": "boolean" + }, + "Iops": { + "type": "integer" + }, + "VolumeSize": { + "type": "integer" + }, + "DeleteOnTermination": { + "type": "boolean" + } + } + }, + "BlockDeviceMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "NoDevice": { + "$ref": "#/definitions/NoDevice" + }, + "VirtualName": { + "type": "string" + }, + "Ebs": { + "$ref": "#/definitions/Ebs" + }, + "DeviceName": { + "type": "string" + } + }, + "required": [ + "DeviceName" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "CreditSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "CPUCredits": { + "type": "string" + } + } + } + }, + "createOnlyProperties": [ + "/properties/ElasticGpuSpecifications", + "/properties/Ipv6Addresses", + "/properties/PlacementGroupName", + "/properties/HostResourceGroupArn", + "/properties/ImageId", + "/properties/CpuOptions", + "/properties/PrivateIpAddress", + "/properties/ElasticInferenceAccelerators", + "/properties/EnclaveOptions", + "/properties/HibernationOptions", + "/properties/KeyName", + "/properties/LicenseSpecifications", + "/properties/NetworkInterfaces", + "/properties/AvailabilityZone", + "/properties/SubnetId", + "/properties/LaunchTemplate", + "/properties/SecurityGroups", + "/properties/Ipv6AddressCount" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/PublicIp", + "/properties/Id", + "/properties/PublicDnsName", + "/properties/PrivateDnsName", + "/properties/PrivateIp" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/instanceconnectendpoint.json b/internal/aws/cfn/schemas/aws/ec2/instanceconnectendpoint.json new file mode 100644 index 00000000..9a1cf7e2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/instanceconnectendpoint.json @@ -0,0 +1,124 @@ +{ + "typeName": "AWS::EC2::InstanceConnectEndpoint", + "description": "Resource Type definition for AWS::EC2::InstanceConnectEndpoint", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "SecurityGroupId": { + "description": "A key-value pair to associate with a resource.", + "type": "string" + } + }, + "properties": { + "Id": { + "description": "The id of the instance connect endpoint", + "type": "string" + }, + "SubnetId": { + "description": "The subnet id of the instance connect endpoint", + "type": "string" + }, + "ClientToken": { + "description": "The client token of the instance connect endpoint.", + "type": "string" + }, + "PreserveClientIp": { + "description": "If true, the address of the instance connect endpoint client is preserved when connecting to the end resource", + "type": "boolean" + }, + "Tags": { + "description": "The tags of the instance connect endpoint.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SecurityGroupIds": { + "description": "The security group IDs of the instance connect endpoint.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SecurityGroupId" + } + } + }, + "additionalProperties": false, + "required": [ + "SubnetId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/SubnetId", + "/properties/ClientToken", + "/properties/PreserveClientIp", + "/properties/SecurityGroupIds" + ], + "writeOnlyProperties": [ + "/properties/ClientToken" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateInstanceConnectEndpoint", + "ec2:DescribeInstanceConnectEndpoints", + "ec2:CreateTags", + "ec2:CreateNetworkInterface", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeInstanceConnectEndpoints" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeInstanceConnectEndpoints", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteInstanceConnectEndpoint", + "ec2:DescribeInstanceConnectEndpoints" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeInstanceConnectEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/internetgateway.json b/internal/aws/cfn/schemas/aws/ec2/internetgateway.json new file mode 100644 index 00000000..48cf8fc2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/internetgateway.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::EC2::InternetGateway", + "description": "Allocates an internet gateway for use with a VPC. After creating the Internet gateway, you then attach it to a VPC.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "description": "The tag key." + }, + "Value": { + "type": "string", + "maxLength": 256, + "description": "The tag value." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "properties": { + "InternetGatewayId": { + "description": "", + "type": "string" + }, + "Tags": { + "description": "Any tags to assign to the internet gateway.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/InternetGatewayId" + ], + "primaryIdentifier": [ + "/properties/InternetGatewayId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateInternetGateway", + "ec2:CreateTags", + "ec2:DescribeInternetGateways" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeInternetGateways" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteInternetGateway", + "ec2:DescribeInternetGateways" + ] + }, + "update": { + "permissions": [ + "ec2:DeleteTags", + "ec2:CreateTags", + "ec2:DescribeInternetGateways" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeInternetGateways" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ipam.json b/internal/aws/cfn/schemas/aws/ec2/ipam.json new file mode 100644 index 00000000..a5d13159 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ipam.json @@ -0,0 +1,165 @@ +{ + "typeName": "AWS::EC2::IPAM", + "description": "Resource Schema of AWS::EC2::IPAM Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git", + "definitions": { + "IpamOperatingRegion": { + "description": "The regions IPAM is enabled for. Allows pools to be created in these regions, as well as enabling monitoring", + "type": "object", + "properties": { + "RegionName": { + "type": "string", + "description": "The name of the region." + } + }, + "required": [ + "RegionName" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "IpamId": { + "description": "Id of the IPAM.", + "type": "string" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the IPAM.", + "type": "string" + }, + "DefaultResourceDiscoveryId": { + "description": "The Id of the default resource discovery, created with this IPAM.", + "type": "string" + }, + "DefaultResourceDiscoveryAssociationId": { + "description": "The Id of the default association to the default resource discovery, created with this IPAM.", + "type": "string" + }, + "ResourceDiscoveryAssociationCount": { + "description": "The count of resource discoveries associated with this IPAM.", + "type": "integer" + }, + "Description": { + "type": "string" + }, + "PublicDefaultScopeId": { + "description": "The Id of the default scope for publicly routable IP space, created with this IPAM.", + "type": "string", + "maxLength": 255 + }, + "PrivateDefaultScopeId": { + "description": "The Id of the default scope for publicly routable IP space, created with this IPAM.", + "type": "string" + }, + "ScopeCount": { + "description": "The number of scopes that currently exist in this IPAM.", + "type": "integer" + }, + "OperatingRegions": { + "description": "The regions IPAM is enabled for. Allows pools to be created in these regions, as well as enabling monitoring", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/IpamOperatingRegion" + } + }, + "Tier": { + "description": "The tier of the IPAM.", + "type": "string", + "enum": [ + "free", + "advanced" + ] + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [], + "primaryIdentifier": [ + "/properties/IpamId" + ], + "readOnlyProperties": [ + "/properties/IpamId", + "/properties/Arn", + "/properties/PublicDefaultScopeId", + "/properties/PrivateDefaultScopeId", + "/properties/ScopeCount", + "/properties/ResourceDiscoveryAssociationCount", + "/properties/DefaultResourceDiscoveryId", + "/properties/DefaultResourceDiscoveryAssociationId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateIpam", + "iam:CreateServiceLinkedRole", + "ec2:CreateTags", + "ec2:DescribeIpams" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeIpams" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyIpam", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeIpams" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteIpam", + "ec2:DeleteTags", + "ec2:DescribeIpams" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeIpams" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ipamallocation.json b/internal/aws/cfn/schemas/aws/ec2/ipamallocation.json new file mode 100644 index 00000000..c63cd147 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ipamallocation.json @@ -0,0 +1,91 @@ +{ + "typeName": "AWS::EC2::IPAMAllocation", + "description": "Resource Schema of AWS::EC2::IPAMAllocation Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Cidr": { + "description": "Represents an IPAM custom allocation of a single IPv4 or IPv6 CIDR", + "type": "string" + } + }, + "properties": { + "IpamPoolAllocationId": { + "description": "Id of the allocation.", + "type": "string" + }, + "IpamPoolId": { + "description": "Id of the IPAM Pool.", + "type": "string" + }, + "Cidr": { + "$ref": "#/definitions/Cidr" + }, + "NetmaskLength": { + "description": "The desired netmask length of the allocation. If set, IPAM will choose a block of free space with this size and return the CIDR representing it.", + "type": "integer" + }, + "Description": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "IpamPoolId" + ], + "primaryIdentifier": [ + "/properties/IpamPoolId", + "/properties/IpamPoolAllocationId", + "/properties/Cidr" + ], + "createOnlyProperties": [ + "/properties/IpamPoolId", + "/properties/Cidr", + "/properties/Description", + "/properties/NetmaskLength" + ], + "readOnlyProperties": [ + "/properties/IpamPoolAllocationId" + ], + "writeOnlyProperties": [ + "/properties/NetmaskLength" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AllocateIpamPoolCidr", + "ec2:GetIpamPoolAllocations" + ] + }, + "read": { + "permissions": [ + "ec2:GetIpamPoolAllocations" + ] + }, + "delete": { + "permissions": [ + "ec2:ReleaseIpamPoolAllocation" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "IpamPoolId": { + "$ref": "resource-schema.json#/properties/IpamPoolId" + } + }, + "required": [ + "IpamPoolId" + ] + }, + "permissions": [ + "ec2:GetIpamPoolAllocations" + ] + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ipampool.json b/internal/aws/cfn/schemas/aws/ec2/ipampool.json new file mode 100644 index 00000000..c39dde6d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ipampool.json @@ -0,0 +1,282 @@ +{ + "typeName": "AWS::EC2::IPAMPool", + "description": "Resource Schema of AWS::EC2::IPAMPool Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git", + "definitions": { + "Cidr": { + "description": "Represents a single IPv4 or IPv6 CIDR", + "type": "string" + }, + "ProvisionedCidr": { + "description": "An address space to be inserted into this pool. All allocations must be made from this address space.", + "type": "object", + "properties": { + "Cidr": { + "$ref": "#/definitions/Cidr" + } + }, + "required": [ + "Cidr" + ], + "additionalProperties": false + }, + "SourceResource": { + "description": "The resource associated with this pool's space. Depending on the ResourceType, setting a SourceResource changes which space can be provisioned in this pool and which types of resources can receive allocations", + "type": "object", + "properties": { + "ResourceId": { + "type": "string" + }, + "ResourceType": { + "type": "string" + }, + "ResourceRegion": { + "type": "string" + }, + "ResourceOwner": { + "type": "string" + } + }, + "required": [ + "ResourceId", + "ResourceType", + "ResourceRegion", + "ResourceOwner" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "IpamPoolId": { + "description": "Id of the IPAM Pool.", + "type": "string" + }, + "AddressFamily": { + "description": "The address family of the address space in this pool. Either IPv4 or IPv6.", + "type": "string" + }, + "AllocationMinNetmaskLength": { + "description": "The minimum allowed netmask length for allocations made from this pool.", + "type": "integer" + }, + "AllocationDefaultNetmaskLength": { + "description": "The default netmask length for allocations made from this pool. This value is used when the netmask length of an allocation isn't specified.", + "type": "integer" + }, + "AllocationMaxNetmaskLength": { + "description": "The maximum allowed netmask length for allocations made from this pool.", + "type": "integer" + }, + "AllocationResourceTags": { + "description": "When specified, an allocation will not be allowed unless a resource has a matching set of tags.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the IPAM Pool.", + "type": "string" + }, + "AutoImport": { + "description": "Determines what to do if IPAM discovers resources that haven't been assigned an allocation. If set to true, an allocation will be made automatically.", + "type": "boolean" + }, + "AwsService": { + "description": "Limits which service in Amazon Web Services that the pool can be used in.", + "type": "string", + "enum": [ + "ec2" + ] + }, + "Description": { + "type": "string" + }, + "IpamScopeId": { + "description": "The Id of the scope this pool is a part of.", + "type": "string" + }, + "IpamScopeArn": { + "description": "The Amazon Resource Name (ARN) of the scope this pool is a part of.", + "type": "string" + }, + "IpamScopeType": { + "description": "Determines whether this scope contains publicly routable space or space for a private network", + "type": "string", + "enum": [ + "public", + "private" + ] + }, + "IpamArn": { + "description": "The Amazon Resource Name (ARN) of the IPAM this pool is a part of.", + "type": "string" + }, + "Locale": { + "description": "The region of this pool. If not set, this will default to \"None\" which will disable non-custom allocations. If the locale has been specified for the source pool, this value must match.", + "type": "string" + }, + "PoolDepth": { + "description": "The depth of this pool in the source pool hierarchy.", + "type": "integer" + }, + "ProvisionedCidrs": { + "description": "A list of cidrs representing the address space available for allocation in this pool.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ProvisionedCidr" + } + }, + "PublicIpSource": { + "description": "The IP address source for pools in the public scope. Only used for provisioning IP address CIDRs to pools in the public scope. Default is `byoip`.", + "type": "string", + "enum": [ + "byoip", + "amazon" + ] + }, + "PubliclyAdvertisable": { + "description": "Determines whether or not address space from this pool is publicly advertised. Must be set if and only if the pool is IPv6.", + "type": "boolean" + }, + "SourceIpamPoolId": { + "description": "The Id of this pool's source. If set, all space provisioned in this pool must be free space provisioned in the parent pool.", + "type": "string" + }, + "SourceResource": { + "$ref": "#/definitions/SourceResource" + }, + "State": { + "description": "The state of this pool. This can be one of the following values: \"create-in-progress\", \"create-complete\", \"modify-in-progress\", \"modify-complete\", \"delete-in-progress\", or \"delete-complete\"", + "type": "string", + "enum": [ + "create-in-progress", + "create-complete", + "modify-in-progress", + "modify-complete", + "delete-in-progress", + "delete-complete" + ] + }, + "StateMessage": { + "description": "An explanation of how the pool arrived at it current state.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/AddressFamily": "$lowercase(AddressFamily)" + }, + "required": [ + "IpamScopeId", + "AddressFamily" + ], + "primaryIdentifier": [ + "/properties/IpamPoolId" + ], + "readOnlyProperties": [ + "/properties/IpamPoolId", + "/properties/Arn", + "/properties/IpamScopeArn", + "/properties/IpamScopeType", + "/properties/IpamArn", + "/properties/PoolDepth", + "/properties/State", + "/properties/StateMessage" + ], + "createOnlyProperties": [ + "/properties/IpamScopeId", + "/properties/SourceIpamPoolId", + "/properties/Locale", + "/properties/AddressFamily", + "/properties/PubliclyAdvertisable", + "/properties/PublicIpSource", + "/properties/AwsService", + "/properties/SourceResource" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateIpamPool", + "ec2:DescribeIpamPools", + "ec2:ProvisionIpamPoolCidr", + "ec2:GetIpamPoolCidrs", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeIpamPools", + "ec2:GetIpamPoolCidrs" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyIpamPool", + "ec2:DescribeIpamPools", + "ec2:GetIpamPoolCidrs", + "ec2:ProvisionIpamPoolCidr", + "ec2:DeprovisionIpamPoolCidr", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteIpamPool", + "ec2:DescribeIpamPools", + "ec2:GetIpamPoolCidrs", + "ec2:DeprovisionIpamPoolCidr", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeIpamPools" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ipampoolcidr.json b/internal/aws/cfn/schemas/aws/ec2/ipampoolcidr.json new file mode 100644 index 00000000..d6a6f00c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ipampoolcidr.json @@ -0,0 +1,84 @@ +{ + "typeName": "AWS::EC2::IPAMPoolCidr", + "description": "Resource Schema of AWS::EC2::IPAMPoolCidr Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "IpamPoolCidrId": { + "description": "Id of the IPAM Pool Cidr.", + "type": "string" + }, + "IpamPoolId": { + "description": "Id of the IPAM Pool.", + "type": "string" + }, + "Cidr": { + "description": "Represents a single IPv4 or IPv6 CIDR", + "type": "string" + }, + "NetmaskLength": { + "description": "The desired netmask length of the provision. If set, IPAM will choose a block of free space with this size and return the CIDR representing it.", + "type": "integer" + }, + "State": { + "description": "Provisioned state of the cidr.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "IpamPoolId" + ], + "primaryIdentifier": [ + "/properties/IpamPoolId", + "/properties/IpamPoolCidrId" + ], + "createOnlyProperties": [ + "/properties/IpamPoolId", + "/properties/Cidr", + "/properties/NetmaskLength" + ], + "readOnlyProperties": [ + "/properties/IpamPoolCidrId", + "/properties/State" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:ProvisionIpamPoolCidr", + "ec2:GetIpamPoolCidrs" + ] + }, + "read": { + "permissions": [ + "ec2:GetIpamPoolCidrs" + ] + }, + "delete": { + "permissions": [ + "ec2:DeprovisionIpamPoolCidr", + "ec2:GetIpamPoolCidrs" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "IpamPoolId": { + "$ref": "resource-schema.json#/properties/IpamPoolId" + } + }, + "required": [ + "IpamPoolId" + ] + }, + "permissions": [ + "ec2:GetIpamPoolCidrs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ipamresourcediscovery.json b/internal/aws/cfn/schemas/aws/ec2/ipamresourcediscovery.json new file mode 100644 index 00000000..4570357c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ipamresourcediscovery.json @@ -0,0 +1,146 @@ +{ + "typeName": "AWS::EC2::IPAMResourceDiscovery", + "description": "Resource Schema of AWS::EC2::IPAMResourceDiscovery Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git", + "definitions": { + "IpamOperatingRegion": { + "description": "The regions IPAM Resource Discovery is enabled for. Allows for monitoring.", + "type": "object", + "properties": { + "RegionName": { + "type": "string", + "description": "The name of the region." + } + }, + "required": [ + "RegionName" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "IpamResourceDiscoveryId": { + "description": "Id of the IPAM Pool.", + "type": "string" + }, + "OwnerId": { + "description": "Owner Account ID of the Resource Discovery", + "type": "string" + }, + "OperatingRegions": { + "description": "The regions Resource Discovery is enabled for. Allows resource discoveries to be created in these regions, as well as enabling monitoring", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/IpamOperatingRegion" + } + }, + "IpamResourceDiscoveryRegion": { + "description": "The region the resource discovery is setup in. ", + "type": "string" + }, + "Description": { + "type": "string" + }, + "IsDefault": { + "description": "Determines whether or not address space from this pool is publicly advertised. Must be set if and only if the pool is IPv6.", + "type": "boolean" + }, + "IpamResourceDiscoveryArn": { + "description": "Amazon Resource Name (Arn) for the Resource Discovery.", + "type": "string" + }, + "State": { + "description": "The state of this Resource Discovery.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "propertyTransform": {}, + "required": [], + "primaryIdentifier": [ + "/properties/IpamResourceDiscoveryId" + ], + "readOnlyProperties": [ + "/properties/IpamResourceDiscoveryId", + "/properties/IpamResourceDiscoveryArn", + "/properties/OwnerId", + "/properties/IpamResourceDiscoveryRegion", + "/properties/IsDefault", + "/properties/State" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateIpamResourceDiscovery", + "ec2:DescribeIpamResourceDiscoveries", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeIpamResourceDiscoveries" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyIpamResourceDiscovery", + "ec2:DescribeIpamResourceDiscoveries", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteIpamResourceDiscovery", + "ec2:DescribeIpamResourceDiscoveries", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeIpamResourceDiscoveries" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ipamresourcediscoveryassociation.json b/internal/aws/cfn/schemas/aws/ec2/ipamresourcediscoveryassociation.json new file mode 100644 index 00000000..38008e62 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ipamresourcediscoveryassociation.json @@ -0,0 +1,143 @@ +{ + "typeName": "AWS::EC2::IPAMResourceDiscoveryAssociation", + "description": "Resource Schema of AWS::EC2::IPAMResourceDiscoveryAssociation Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "IpamArn": { + "description": "Arn of the IPAM.", + "type": "string" + }, + "IpamRegion": { + "description": "The home region of the IPAM.", + "type": "string" + }, + "IpamResourceDiscoveryAssociationId": { + "description": "Id of the IPAM Resource Discovery Association.", + "type": "string" + }, + "IpamResourceDiscoveryId": { + "description": "The Amazon Resource Name (ARN) of the IPAM Resource Discovery Association.", + "type": "string" + }, + "IpamId": { + "description": "The Id of the IPAM this Resource Discovery is associated to.", + "type": "string" + }, + "IpamResourceDiscoveryAssociationArn": { + "description": "The Amazon Resource Name (ARN) of the resource discovery association is a part of.", + "type": "string" + }, + "IsDefault": { + "description": "If the Resource Discovery Association exists due as part of CreateIpam.", + "type": "boolean" + }, + "OwnerId": { + "description": "The AWS Account ID for the account where the shared IPAM exists.", + "type": "string" + }, + "State": { + "description": "The operational state of the Resource Discovery Association. Related to Create/Delete activities.", + "type": "string" + }, + "ResourceDiscoveryStatus": { + "description": "The status of the resource discovery.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "IpamId", + "IpamResourceDiscoveryId" + ], + "primaryIdentifier": [ + "/properties/IpamResourceDiscoveryAssociationId" + ], + "readOnlyProperties": [ + "/properties/IpamArn", + "/properties/IpamRegion", + "/properties/IpamResourceDiscoveryAssociationId", + "/properties/IpamResourceDiscoveryAssociationArn", + "/properties/IsDefault", + "/properties/ResourceDiscoveryStatus", + "/properties/State", + "/properties/OwnerId" + ], + "createOnlyProperties": [ + "/properties/IpamId", + "/properties/IpamResourceDiscoveryId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AssociateIpamResourceDiscovery", + "ec2:DescribeIpamResourceDiscoveryAssociations", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeIpamResourceDiscoveryAssociations" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeIpamResourceDiscoveryAssociations", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DisassociateIpamResourceDiscovery", + "ec2:DescribeIpamResourceDiscoveryAssociations", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeIpamResourceDiscoveryAssociations" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/ipamscope.json b/internal/aws/cfn/schemas/aws/ec2/ipamscope.json new file mode 100644 index 00000000..89aa56a2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/ipamscope.json @@ -0,0 +1,135 @@ +{ + "typeName": "AWS::EC2::IPAMScope", + "description": "Resource Schema of AWS::EC2::IPAMScope Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ipam.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "IpamScopeId": { + "description": "Id of the IPAM scope.", + "type": "string" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the IPAM scope.", + "type": "string" + }, + "IpamId": { + "description": "The Id of the IPAM this scope is a part of.", + "type": "string" + }, + "IpamArn": { + "description": "The Amazon Resource Name (ARN) of the IPAM this scope is a part of.", + "type": "string" + }, + "IpamScopeType": { + "description": "Determines whether this scope contains publicly routable space or space for a private network", + "type": "string", + "enum": [ + "public", + "private" + ] + }, + "IsDefault": { + "description": "Is this one of the default scopes created with the IPAM.", + "type": "boolean" + }, + "Description": { + "type": "string" + }, + "PoolCount": { + "description": "The number of pools that currently exist in this scope.", + "type": "integer" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "IpamId" + ], + "primaryIdentifier": [ + "/properties/IpamScopeId" + ], + "readOnlyProperties": [ + "/properties/IpamScopeId", + "/properties/Arn", + "/properties/IpamArn", + "/properties/IsDefault", + "/properties/PoolCount", + "/properties/IpamScopeType" + ], + "createOnlyProperties": [ + "/properties/IpamId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateIpamScope", + "ec2:DescribeIpamScopes", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeIpamScopes" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyIpamScope", + "ec2:DescribeIpamScopes", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteIpamScope", + "ec2:DescribeIpamScopes", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeIpamScopes" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/keypair.json b/internal/aws/cfn/schemas/aws/ec2/keypair.json new file mode 100644 index 00000000..d5b65ffc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/keypair.json @@ -0,0 +1,133 @@ +{ + "typeName": "AWS::EC2::KeyPair", + "description": "The AWS::EC2::KeyPair creates an SSH key pair", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "KeyName": { + "description": "The name of the SSH key pair", + "type": "string" + }, + "KeyType": { + "description": "The crypto-system used to generate a key pair.", + "type": "string", + "default": "rsa", + "enum": [ + "rsa", + "ed25519" + ] + }, + "KeyFormat": { + "description": "The format of the private key", + "type": "string", + "default": "pem", + "enum": [ + "pem", + "ppk" + ] + }, + "PublicKeyMaterial": { + "description": "Plain text public key to import", + "type": "string" + }, + "KeyFingerprint": { + "description": "A short sequence of bytes used for public key verification", + "type": "string" + }, + "KeyPairId": { + "description": "An AWS generated ID for the key pair", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "KeyName" + ], + "primaryIdentifier": [ + "/properties/KeyName" + ], + "additionalIdentifiers": [ + [ + "/properties/KeyPairId" + ] + ], + "createOnlyProperties": [ + "/properties/KeyName", + "/properties/KeyType", + "/properties/KeyFormat", + "/properties/PublicKeyMaterial", + "/properties/Tags" + ], + "writeOnlyProperties": [ + "/properties/KeyFormat" + ], + "readOnlyProperties": [ + "/properties/KeyPairId", + "/properties/KeyFingerprint" + ], + "tagging": { + "taggable": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateKeyPair", + "ec2:ImportKeyPair", + "ec2:CreateTags", + "ssm:PutParameter" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeKeyPairs" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeKeyPairs" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteKeyPair", + "ssm:DeleteParameter", + "ec2:DescribeKeyPairs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/launchtemplate.json b/internal/aws/cfn/schemas/aws/ec2/launchtemplate.json new file mode 100644 index 00000000..188bbd8b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/launchtemplate.json @@ -0,0 +1,1152 @@ +{ + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "read": { + "permissions": [ + "ec2:DescribeLaunchTemplates" + ] + }, + "create": { + "permissions": [ + "ec2:CreateLaunchTemplate", + "ec2:CreateTags" + ] + }, + "update": { + "permissions": [ + "ec2:CreateLaunchTemplateVersion" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeLaunchTemplates" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteLaunchTemplate", + "ec2:DeleteTags", + "ec2:DescribeLaunchTemplates" + ] + } + }, + "typeName": "AWS::EC2::LaunchTemplate", + "readOnlyProperties": [ + "/properties/DefaultVersionNumber", + "/properties/LaunchTemplateId", + "/properties/LatestVersionNumber" + ], + "description": "Specifies the properties for creating a launch template.\n The minimum required properties for specifying a launch template are as follows:\n + You must specify at least one property for the launch template data.\n + You do not need to specify a name for the launch template. If you do not specify a name, CFN creates the name for you.\n \n A launch template can contain some or all of the configuration information to launch an instance. When you launch an instance using a launch template, instance properties that are not specified in the launch template use default values, except the ``ImageId`` property, which has no default value. If you do not specify an AMI ID for the launch template ``ImageId`` property, you must specify an AMI ID for the instance ``ImageId`` property.\n For more information, see [Launch an instance from a launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html) in the *Amazon EC2 User Guide*.", + "writeOnlyProperties": [ + "/properties/LaunchTemplateData", + "/properties/VersionDescription", + "/properties/TagSpecifications" + ], + "createOnlyProperties": [ + "/properties/LaunchTemplateName" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/LaunchTemplateId" + ], + "definitions": { + "LaunchTemplateData": { + "description": "The information to include in the launch template.\n You must specify at least one parameter for the launch template data.", + "additionalProperties": false, + "type": "object", + "properties": { + "SecurityGroups": { + "uniqueItems": false, + "description": "One or more security group names. For a nondefault VPC, you must use security group IDs instead.", + "type": "array", + "items": { + "type": "string" + } + }, + "TagSpecifications": { + "uniqueItems": false, + "description": "The tags to apply to the resources that are created during instance launch.\n To tag a resource after it has been created, see [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html).\n To tag the launch template itself, use [TagSpecifications](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-tagspecifications).", + "type": "array", + "items": { + "$ref": "#/definitions/TagSpecification" + } + }, + "UserData": { + "description": "The user data to make available to the instance. You must provide base64-encoded text. User data is limited to 16 KB. For more information, see [Run commands on your Linux instance at launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) (Linux) or [Work with instance user data](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instancedata-add-user-data.html) (Windows) in the *Amazon Elastic Compute Cloud User Guide*.\n If you are creating the launch template for use with BATCH, the user data must be provided in the [MIME multi-part archive format](https://docs.aws.amazon.com/https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive). For more information, see [Amazon EC2 user data in launch templates](https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html) in the *User Guide*.", + "type": "string" + }, + "BlockDeviceMappings": { + "uniqueItems": false, + "description": "The block device mapping.", + "type": "array", + "items": { + "$ref": "#/definitions/BlockDeviceMapping" + } + }, + "MaintenanceOptions": { + "description": "The maintenance options of your instance.", + "$ref": "#/definitions/MaintenanceOptions" + }, + "IamInstanceProfile": { + "description": "The name or Amazon Resource Name (ARN) of an IAM instance profile.", + "$ref": "#/definitions/IamInstanceProfile" + }, + "KernelId": { + "description": "The ID of the kernel.\n We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User Provided Kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) in the *Amazon EC2 User Guide*.", + "type": "string" + }, + "EbsOptimized": { + "description": "Indicates whether the instance is optimized for Amazon EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal Amazon EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance.", + "type": "boolean" + }, + "ElasticGpuSpecifications": { + "uniqueItems": false, + "description": "Deprecated.\n Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances.", + "type": "array", + "items": { + "$ref": "#/definitions/ElasticGpuSpecification" + } + }, + "ElasticInferenceAccelerators": { + "uniqueItems": false, + "description": "An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.\n You cannot specify accelerators from different generations in the same request.\n Starting April 15, 2023, AWS will not onboard new customers to Amazon Elastic Inference (EI), and will help current customers migrate their workloads to options that offer better price and performance. After April 15, 2023, new customers will not be able to launch instances with Amazon EI accelerators in Amazon SageMaker, Amazon ECS, or Amazon EC2. However, customers who have used Amazon EI at least once during the past 30-day period are considered current customers and will be able to continue using the service.", + "type": "array", + "items": { + "$ref": "#/definitions/LaunchTemplateElasticInferenceAccelerator" + } + }, + "Placement": { + "description": "The placement for the instance.", + "$ref": "#/definitions/Placement" + }, + "NetworkInterfaces": { + "uniqueItems": false, + "description": "One or more network interfaces. If you specify a network interface, you must specify any security groups and subnets as part of the network interface.", + "type": "array", + "items": { + "$ref": "#/definitions/NetworkInterface" + } + }, + "EnclaveOptions": { + "description": "Indicates whether the instance is enabled for AWS Nitro Enclaves. For more information, see [What is Nitro Enclaves?](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) in the *Nitro Enclaves User Guide*.\n You can't enable AWS Nitro Enclaves and hibernation on the same instance.", + "$ref": "#/definitions/EnclaveOptions" + }, + "ImageId": { + "description": "The ID of the AMI. Alternatively, you can specify a Systems Manager parameter, which will resolve to an AMI ID on launch.\n Valid formats:\n + ``ami-17characters00000`` \n + ``resolve:ssm:parameter-name`` \n + ``resolve:ssm:parameter-name:version-number`` \n + ``resolve:ssm:parameter-name:label`` \n \n For more information, see [Use a Systems Manager parameter to find an AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html#using-systems-manager-parameter-to-find-AMI) in the *Amazon Elastic Compute Cloud User Guide*.", + "type": "string" + }, + "InstanceType": { + "description": "The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the *Amazon Elastic Compute Cloud User Guide*.\n If you specify ``InstanceType``, you can't specify ``InstanceRequirements``.", + "type": "string" + }, + "Monitoring": { + "description": "The monitoring for the instance.", + "$ref": "#/definitions/Monitoring" + }, + "HibernationOptions": { + "description": "Indicates whether an instance is enabled for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html). For more information, see [Hibernate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the *Amazon Elastic Compute Cloud User Guide*.", + "$ref": "#/definitions/HibernationOptions" + }, + "MetadataOptions": { + "description": "The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the *Amazon Elastic Compute Cloud User Guide*.", + "$ref": "#/definitions/MetadataOptions" + }, + "LicenseSpecifications": { + "uniqueItems": false, + "description": "The license configurations.", + "type": "array", + "items": { + "$ref": "#/definitions/LicenseSpecification" + } + }, + "InstanceInitiatedShutdownBehavior": { + "description": "Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).\n Default: ``stop``", + "type": "string" + }, + "DisableApiStop": { + "description": "Indicates whether to enable the instance for stop protection. For more information, see [Stop protection](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection) in the *Amazon Elastic Compute Cloud User Guide*.", + "type": "boolean" + }, + "CpuOptions": { + "description": "The CPU options for the instance. For more information, see [Optimizing CPU Options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) in the *Amazon Elastic Compute Cloud User Guide*.", + "$ref": "#/definitions/CpuOptions" + }, + "PrivateDnsNameOptions": { + "description": "The hostname type for EC2 instances launched into this subnet and how DNS A and AAAA record queries should be handled. For more information, see [Amazon EC2 instance hostname types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) in the *User Guide*.", + "$ref": "#/definitions/PrivateDnsNameOptions" + }, + "SecurityGroupIds": { + "uniqueItems": false, + "description": "The IDs of the security groups. You can specify the IDs of existing security groups and references to resources created by the stack template.", + "type": "array", + "items": { + "type": "string" + } + }, + "KeyName": { + "description": "The name of the key pair. You can create a key pair using [CreateKeyPair](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html) or [ImportKeyPair](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html).\n If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.", + "type": "string" + }, + "DisableApiTermination": { + "description": "If you set this parameter to ``true``, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after launch, use [ModifyInstanceAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html). Alternatively, if you set ``InstanceInitiatedShutdownBehavior`` to ``terminate``, you can terminate the instance by running the shutdown command from the instance.", + "type": "boolean" + }, + "InstanceMarketOptions": { + "description": "The market (purchasing) option for the instances.", + "$ref": "#/definitions/InstanceMarketOptions" + }, + "InstanceRequirements": { + "description": "The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes.\n You must specify ``VCpuCount`` and ``MemoryMiB``. All other attributes are optional. Any unspecified optional attribute is set to its default.\n When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.\n To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request:\n + ``AllowedInstanceTypes`` - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.\n + ``ExcludedInstanceTypes`` - The instance types to exclude from the list, even if they match your specified attributes.\n \n If you specify ``InstanceReq", + "$ref": "#/definitions/InstanceRequirements" + }, + "RamDiskId": { + "description": "The ID of the RAM disk.\n We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see [User provided kernels](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) in the *Amazon Elastic Compute Cloud User Guide*.", + "type": "string" + }, + "CapacityReservationSpecification": { + "description": "The Capacity Reservation targeting option. If you do not specify this parameter, the instance's Capacity Reservation preference defaults to ``open``, which enables it to run in any open Capacity Reservation that has matching attributes (instance type, platform, Availability Zone).", + "$ref": "#/definitions/CapacityReservationSpecification" + }, + "CreditSpecification": { + "description": "The credit option for CPU usage of the instance. Valid only for T instances.", + "$ref": "#/definitions/CreditSpecification" + } + } + }, + "Ipv6Add": { + "description": "Specifies an IPv6 address in an Amazon EC2 launch template.\n ``Ipv6Add`` is a property of [AWS::EC2::LaunchTemplate NetworkInterface](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Ipv6Address": { + "description": "One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet. You can't use this option if you're specifying a number of IPv6 addresses.", + "type": "string" + } + } + }, + "LicenseSpecification": { + "description": "Specifies a license configuration for an instance.\n ``LicenseSpecification`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "LicenseConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the license configuration.", + "type": "string" + } + } + }, + "MaintenanceOptions": { + "description": "The maintenance options of your instance.", + "additionalProperties": false, + "type": "object", + "properties": { + "AutoRecovery": { + "description": "Disables the automatic recovery behavior of your instance or sets it to default.", + "type": "string" + }, + "RebootMigration": { + "description": "", + "type": "string" + } + } + }, + "ElasticGpuSpecification": { + "description": "Specifies a specification for an Elastic GPU for an Amazon EC2 launch template.\n ``ElasticGpuSpecification`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Type": { + "description": "The type of Elastic Graphics accelerator. For more information about the values to specify for ``Type``, see [Elastic Graphics Basics](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html#elastic-graphics-basics), specifically the Elastic Graphics accelerator column, in the *Amazon Elastic Compute Cloud User Guide for Windows Instances*.", + "type": "string" + } + } + }, + "IamInstanceProfile": { + "description": "Specifies an IAM instance profile, which is a container for an IAM role for your instance. You can use an IAM role to distribute your AWS credentials to your instances.\n If you are creating the launch template for use with an Amazon EC2 Auto Scaling group, you can specify either the name or the ARN of the instance profile, but not both.\n ``IamInstanceProfile`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the instance profile.", + "type": "string" + }, + "Name": { + "description": "The name of the instance profile.", + "type": "string" + } + } + }, + "MemoryGiBPerVCpu": { + "description": "The minimum and maximum amount of memory per vCPU, in GiB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum amount of memory per vCPU, in GiB. To specify no minimum limit, omit this parameter.", + "type": "number" + }, + "Max": { + "description": "The maximum amount of memory per vCPU, in GiB. To specify no maximum limit, omit this parameter.", + "type": "number" + } + } + }, + "VCpuCount": { + "description": "The minimum and maximum number of vCPUs.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum number of vCPUs. To specify no minimum limit, specify ``0``.", + "type": "integer" + }, + "Max": { + "description": "The maximum number of vCPUs. To specify no maximum limit, omit this parameter.", + "type": "integer" + } + } + }, + "Ipv4PrefixSpecification": { + "description": "Specifies an IPv4 prefix for a network interface.\n ``Ipv4PrefixSpecification`` is a property of [AWS::EC2::LaunchTemplate NetworkInterface](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Ipv4Prefix": { + "description": "The IPv4 prefix. For information, see [Assigning prefixes to Amazon EC2 network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the *Amazon Elastic Compute Cloud User Guide*.", + "type": "string" + } + } + }, + "EnaSrdSpecification": { + "description": "ENA Express uses AWS Scalable Reliable Datagram (SRD) technology to increase the maximum bandwidth used per stream and minimize tail latency of network traffic between EC2 instances. With ENA Express, you can communicate between two EC2 instances in the same subnet within the same account, or in different accounts. Both sending and receiving instances must have ENA Express enabled.\n To improve the reliability of network packet delivery, ENA Express reorders network packets on the receiving end by default. However, some UDP-based applications are designed to handle network packets that are out of order to reduce the overhead for packet delivery at the network layer. When ENA Express is enabled, you can specify whether UDP network traffic uses it.", + "additionalProperties": false, + "type": "object", + "properties": { + "EnaSrdEnabled": { + "description": "Indicates whether ENA Express is enabled for the network interface.", + "type": "boolean" + }, + "EnaSrdUdpSpecification": { + "description": "Configures ENA Express for UDP network traffic.", + "$ref": "#/definitions/EnaSrdUdpSpecification" + } + } + }, + "Placement": { + "description": "Specifies the placement of an instance.\n ``Placement`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "GroupName": { + "description": "The name of the placement group for the instance.", + "type": "string" + }, + "Tenancy": { + "description": "The tenancy of the instance. An instance with a tenancy of dedicated runs on single-tenant hardware.", + "type": "string" + }, + "SpreadDomain": { + "description": "Reserved for future use.", + "type": "string" + }, + "PartitionNumber": { + "description": "The number of the partition the instance should launch in. Valid only if the placement group strategy is set to ``partition``.", + "type": "integer" + }, + "AvailabilityZone": { + "description": "The Availability Zone for the instance.", + "type": "string" + }, + "Affinity": { + "description": "The affinity setting for an instance on a Dedicated Host.", + "type": "string" + }, + "HostId": { + "description": "The ID of the Dedicated Host for the instance.", + "type": "string" + }, + "HostResourceGroupArn": { + "description": "The ARN of the host resource group in which to launch the instances. If you specify a host resource group ARN, omit the *Tenancy* parameter or set it to ``host``.", + "type": "string" + }, + "GroupId": { + "description": "The Group Id of a placement group. You must specify the Placement Group *Group Id* to launch an instance in a shared placement group.", + "type": "string" + } + } + }, + "EnclaveOptions": { + "description": "Indicates whether the instance is enabled for AWS Nitro Enclaves.", + "additionalProperties": false, + "type": "object", + "properties": { + "Enabled": { + "description": "If this parameter is set to ``true``, the instance is enabled for AWS Nitro Enclaves; otherwise, it is not enabled for AWS Nitro Enclaves.", + "type": "boolean" + } + } + }, + "Ebs": { + "description": "Parameters for a block device for an EBS volume in an Amazon EC2 launch template.\n ``Ebs`` is a property of [AWS::EC2::LaunchTemplate BlockDeviceMapping](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "SnapshotId": { + "description": "The ID of the snapshot.", + "type": "string" + }, + "VolumeType": { + "description": "The volume type. For more information, see [Amazon EBS volume types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) in the *Amazon Elastic Compute Cloud User Guide*.", + "type": "string" + }, + "KmsKeyId": { + "description": "The ARN of the symmetric KMSlong (KMS) CMK used for encryption.", + "type": "string" + }, + "Encrypted": { + "description": "Indicates whether the EBS volume is encrypted. Encrypted volumes can only be attached to instances that support Amazon EBS encryption. If you are creating a volume from a snapshot, you can't specify an encryption value.", + "type": "boolean" + }, + "Throughput": { + "description": "The throughput to provision for a ``gp3`` volume, with a maximum of 1,000 MiB/s.\n Valid Range: Minimum value of 125. Maximum value of 1000.", + "type": "integer" + }, + "Iops": { + "description": "The number of I/O operations per second (IOPS). For ``gp3``, ``io1``, and ``io2`` volumes, this represents the number of IOPS that are provisioned for the volume. For ``gp2`` volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.\n The following are the supported values for each volume type:\n + ``gp3``: 3,000 - 16,000 IOPS\n + ``io1``: 100 - 64,000 IOPS\n + ``io2``: 100 - 256,000 IOPS\n \n For ``io2`` volumes, you can achieve up to 256,000 IOPS on [instances built on the Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). On other instances, you can achieve performance up to 32,000 IOPS.\n This parameter is supported for ``io1``, ``io2``, and ``gp3`` volumes only.", + "type": "integer" + }, + "VolumeSize": { + "description": "The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. The following are the supported volumes sizes for each volume type:\n + ``gp2`` and ``gp3``: 1 - 16,384 GiB\n + ``io1``: 4 - 16,384 GiB\n + ``io2``: 4 - 65,536 GiB\n + ``st1`` and ``sc1``: 125 - 16,384 GiB\n + ``standard``: 1 - 1024 GiB", + "type": "integer" + }, + "DeleteOnTermination": { + "description": "Indicates whether the EBS volume is deleted on instance termination.", + "type": "boolean" + } + } + }, + "BlockDeviceMapping": { + "description": "Specifies a block device mapping for a launch template. You must specify ``DeviceName`` plus exactly one of the following properties: ``Ebs``, ``NoDevice``, or ``VirtualName``.\n ``BlockDeviceMapping`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Ebs": { + "description": "Parameters used to automatically set up EBS volumes when the instance is launched.", + "$ref": "#/definitions/Ebs" + }, + "NoDevice": { + "description": "To omit the device from the block device mapping, specify an empty string.", + "type": "string" + }, + "VirtualName": { + "description": "The virtual device name (ephemeralN). Instance store volumes are numbered starting from 0. An instance type with 2 available instance store volumes can specify mappings for ephemeral0 and ephemeral1. The number of available instance store volumes depends on the instance type. After you connect to the instance, you must mount the volume.", + "type": "string" + }, + "DeviceName": { + "description": "The device name (for example, /dev/sdh or xvdh).", + "type": "string" + } + } + }, + "Monitoring": { + "description": "Specifies whether detailed monitoring is enabled for an instance. For more information about detailed monitoring, see [Enable or turn off detailed monitoring for your instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html) in the *User Guide*.\n ``Monitoring`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Enabled": { + "description": "Specify ``true`` to enable detailed monitoring. Otherwise, basic monitoring is enabled.", + "type": "boolean" + } + } + }, + "MemoryMiB": { + "description": "The minimum and maximum amount of memory, in MiB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum amount of memory, in MiB. To specify no minimum limit, specify ``0``.", + "type": "integer" + }, + "Max": { + "description": "The maximum amount of memory, in MiB. To specify no maximum limit, omit this parameter.", + "type": "integer" + } + } + }, + "HibernationOptions": { + "description": "Specifies whether your instance is configured for hibernation. This parameter is valid only if the instance meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). For more information, see [Hibernate Your Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in the *Amazon EC2 User Guide*.\n ``HibernationOptions`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Configured": { + "description": "If you set this parameter to ``true``, the instance is enabled for hibernation.\n Default: ``false``", + "type": "boolean" + } + } + }, + "MetadataOptions": { + "description": "The metadata options for the instance. For more information, see [Instance metadata and user data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) in the *Amazon EC2 User Guide*.\n ``MetadataOptions`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "HttpPutResponseHopLimit": { + "description": "The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel.\n Default: ``1`` \n Possible values: Integers from 1 to 64", + "type": "integer" + }, + "HttpTokens": { + "description": "Indicates whether IMDSv2 is required.\n + ``optional`` - IMDSv2 is optional. You can choose whether to send a session token in your instance metadata retrieval requests. If you retrieve IAM role credentials without a session token, you receive the IMDSv1 role credentials. If you retrieve IAM role credentials using a valid session token, you receive the IMDSv2 role credentials.\n + ``required`` - IMDSv2 is required. You must send a session token in your instance metadata retrieval requests. With this option, retrieving the IAM role credentials always returns IMDSv2 credentials; IMDSv1 credentials are not available.\n \n Default: If the value of ``ImdsSupport`` for the Amazon Machine Image (AMI) for your instance is ``v2.0``, the default is ``required``.", + "type": "string" + }, + "HttpProtocolIpv6": { + "description": "Enables or disables the IPv6 endpoint for the instance metadata service.\n Default: ``disabled``", + "type": "string" + }, + "InstanceMetadataTags": { + "description": "Set to ``enabled`` to allow access to instance tags from the instance metadata. Set to ``disabled`` to turn off access to instance tags from the instance metadata. For more information, see [Work with instance tags using the instance metadata](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS).\n Default: ``disabled``", + "type": "string" + }, + "HttpEndpoint": { + "description": "Enables or disables the HTTP metadata endpoint on your instances. If the parameter is not specified, the default state is ``enabled``.\n If you specify a value of ``disabled``, you will not be able to access your instance metadata.", + "type": "string" + } + } + }, + "NetworkInterfaceCount": { + "description": "The minimum and maximum number of network interfaces.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum number of network interfaces. To specify no minimum limit, omit this parameter.", + "type": "integer" + }, + "Max": { + "description": "The maximum number of network interfaces. To specify no maximum limit, omit this parameter.", + "type": "integer" + } + } + }, + "CpuOptions": { + "description": "Specifies the CPU options for an instance. For more information, see [Optimize CPU options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) in the *User Guide*.\n ``CpuOptions`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "ThreadsPerCore": { + "description": "The number of threads per CPU core. To disable multithreading for the instance, specify a value of ``1``. Otherwise, specify the default value of ``2``.", + "type": "integer" + }, + "AmdSevSnp": { + "description": "Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. For more information, see [AMD SEV-SNP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html).", + "type": "string", + "enum": [ + "enabled", + "disabled" + ] + }, + "CoreCount": { + "description": "The number of CPU cores for the instance.", + "type": "integer" + } + } + }, + "SpotOptions": { + "description": "Specifies options for Spot Instances.\n ``SpotOptions`` is a property of [AWS::EC2::LaunchTemplate InstanceMarketOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-instancemarketoptions.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "SpotInstanceType": { + "description": "The Spot Instance request type.\n If you are using Spot Instances with an Auto Scaling group, use ``one-time`` requests, as the Amazon EC2 Auto Scaling service handles requesting new Spot Instances whenever the group is below its desired capacity.", + "type": "string" + }, + "InstanceInterruptionBehavior": { + "description": "The behavior when a Spot Instance is interrupted. The default is ``terminate``.", + "type": "string" + }, + "MaxPrice": { + "description": "The maximum hourly price you're willing to pay for the Spot Instances. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.\n If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter.", + "type": "string" + }, + "BlockDurationMinutes": { + "description": "Deprecated.", + "type": "integer" + }, + "ValidUntil": { + "description": "The end date of the request, in UTC format (*YYYY-MM-DD*T*HH:MM:SS*Z). Supported only for persistent requests.\n + For a persistent request, the request remains active until the ``ValidUntil`` date and time is reached. Otherwise, the request remains active until you cancel it.\n + For a one-time request, ``ValidUntil`` is not supported. The request remains active until all instances launch or you cancel the request.\n \n Default: 7 days from the current date", + "type": "string" + } + } + }, + "NetworkInterface": { + "description": "Specifies the parameters for a network interface.\n ``NetworkInterface`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Description": { + "description": "A description for the network interface.", + "type": "string" + }, + "PrivateIpAddress": { + "description": "The primary private IPv4 address of the network interface.", + "type": "string" + }, + "PrivateIpAddresses": { + "uniqueItems": false, + "description": "One or more private IPv4 addresses.", + "type": "array", + "items": { + "$ref": "#/definitions/PrivateIpAdd" + } + }, + "SecondaryPrivateIpAddressCount": { + "description": "The number of secondary private IPv4 addresses to assign to a network interface.", + "type": "integer" + }, + "Ipv6PrefixCount": { + "description": "The number of IPv6 prefixes to be automatically assigned to the network interface. You cannot use this option if you use the ``Ipv6Prefix`` option.", + "type": "integer" + }, + "Ipv4Prefixes": { + "uniqueItems": false, + "description": "One or more IPv4 prefixes to be assigned to the network interface. You cannot use this option if you use the ``Ipv4PrefixCount`` option.", + "type": "array", + "items": { + "$ref": "#/definitions/Ipv4PrefixSpecification" + } + }, + "DeviceIndex": { + "description": "The device index for the network interface attachment.", + "type": "integer" + }, + "PrimaryIpv6": { + "description": "The primary IPv6 address of the network interface. When you enable an IPv6 GUA address to be a primary IPv6, the first IPv6 GUA will be made the primary IPv6 address until the instance is terminated or the network interface is detached. For more information about primary IPv6 addresses, see [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html).", + "type": "boolean" + }, + "Ipv4PrefixCount": { + "description": "The number of IPv4 prefixes to be automatically assigned to the network interface. You cannot use this option if you use the ``Ipv4Prefix`` option.", + "type": "integer" + }, + "Ipv6Prefixes": { + "uniqueItems": false, + "description": "One or more IPv6 prefixes to be assigned to the network interface. You cannot use this option if you use the ``Ipv6PrefixCount`` option.", + "type": "array", + "items": { + "$ref": "#/definitions/Ipv6PrefixSpecification" + } + }, + "SubnetId": { + "description": "The ID of the subnet for the network interface.", + "type": "string" + }, + "Ipv6Addresses": { + "uniqueItems": false, + "description": "One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet. You can't use this option if you're specifying a number of IPv6 addresses.", + "type": "array", + "items": { + "$ref": "#/definitions/Ipv6Add" + } + }, + "AssociatePublicIpAddress": { + "description": "Associates a public IPv4 address with eth0 for a new network interface.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [Amazon VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/).", + "type": "boolean" + }, + "NetworkInterfaceId": { + "description": "The ID of the network interface.", + "type": "string" + }, + "NetworkCardIndex": { + "description": "The index of the network card. Some instance types support multiple network cards. The primary network interface must be assigned to network card index 0. The default is network card index 0.", + "type": "integer" + }, + "InterfaceType": { + "description": "The type of network interface. To create an Elastic Fabric Adapter (EFA), specify ``efa``. For more information, see [Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) in the *Amazon Elastic Compute Cloud User Guide*.\n If you are not creating an EFA, specify ``interface`` or omit this parameter.\n Valid values: ``interface`` | ``efa``", + "type": "string" + }, + "AssociateCarrierIpAddress": { + "description": "Associates a Carrier IP address with eth0 for a new network interface.\n Use this option when you launch an instance in a Wavelength Zone and want to associate a Carrier IP address with the network interface. For more information about Carrier IP addresses, see [Carrier IP addresses](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip) in the *Developer Guide*.", + "type": "boolean" + }, + "EnaSrdSpecification": { + "description": "The ENA Express configuration for the network interface.", + "$ref": "#/definitions/EnaSrdSpecification" + }, + "Ipv6AddressCount": { + "description": "The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses.", + "type": "integer" + }, + "Groups": { + "uniqueItems": false, + "description": "The IDs of one or more security groups.", + "type": "array", + "items": { + "type": "string" + } + }, + "DeleteOnTermination": { + "description": "Indicates whether the network interface is deleted when the instance is terminated.", + "type": "boolean" + }, + "ConnectionTrackingSpecification": { + "description": "A connection tracking specification for the network interface.", + "$ref": "#/definitions/ConnectionTrackingSpecification" + } + } + }, + "PrivateDnsNameOptions": { + "description": "The hostname type for EC2 instances launched into this subnet and how DNS A and AAAA record queries should be handled. For more information, see [Amazon EC2 instance hostname types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) in the *User Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "EnableResourceNameDnsARecord": { + "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS A records.", + "type": "boolean" + }, + "HostnameType": { + "description": "The type of hostname for EC2 instances. For IPv4 only subnets, an instance DNS name must be based on the instance IPv4 address. For IPv6 only subnets, an instance DNS name must be based on the instance ID. For dual-stack subnets, you can specify whether DNS names use the instance IPv4 address or the instance ID. For more information, see [Amazon EC2 instance hostname types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) in the *User Guide*.", + "type": "string" + }, + "EnableResourceNameDnsAAAARecord": { + "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.", + "type": "boolean" + } + } + }, + "PrivateIpAdd": { + "description": "Specifies a secondary private IPv4 address for a network interface.\n ``PrivateIpAdd`` is a property of [AWS::EC2::LaunchTemplate NetworkInterface](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "PrivateIpAddress": { + "description": "The private IPv4 address.", + "type": "string" + }, + "Primary": { + "description": "Indicates whether the private IPv4 address is the primary private IPv4 address. Only one IPv4 address can be designated as primary.", + "type": "boolean" + } + } + }, + "Ipv6PrefixSpecification": { + "description": "Specifies an IPv6 prefix for a network interface.\n ``Ipv6PrefixSpecification`` is a property of [AWS::EC2::LaunchTemplate NetworkInterface](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Ipv6Prefix": { + "description": "The IPv6 prefix.", + "type": "string" + } + } + }, + "LaunchTemplateTagSpecification": { + "description": "Specifies the tags to apply to the launch template during creation.\n ``LaunchTemplateTagSpecification`` is a property of [AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "ResourceType": { + "description": "The type of resource. To tag the launch template, ``ResourceType`` must be ``launch-template``.", + "type": "string" + }, + "Tags": { + "uniqueItems": false, + "description": "The tags for the resource.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + } + }, + "TagSpecification": { + "description": "Specifies the tags to apply to a resource when the resource is created for the launch template.\n ``TagSpecification`` is a property type of [TagSpecifications](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-tagspecifications). [TagSpecifications](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-tagspecifications) is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "ResourceType": { + "description": "The type of resource to tag.\n Valid Values lists all resource types for Amazon EC2 that can be tagged. When you create a launch template, you can specify tags for the following resource types only: ``instance`` | ``volume`` | ``network-interface`` | ``spot-instances-request``. If the instance does not include the resource type that you specify, the instance launch fails. For example, not all instance types include a volume.\n To tag a resource after it has been created, see [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html).", + "type": "string" + }, + "Tags": { + "uniqueItems": false, + "description": "The tags to apply to the resource.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + } + }, + "EnaSrdUdpSpecification": { + "description": "ENA Express is compatible with both TCP and UDP transport protocols. When it's enabled, TCP traffic automatically uses it. However, some UDP-based applications are designed to handle network packets that are out of order, without a need for retransmission, such as live video broadcasting or other near-real-time applications. For UDP traffic, you can specify whether to use ENA Express, based on your application environment needs.", + "additionalProperties": false, + "type": "object", + "properties": { + "EnaSrdUdpEnabled": { + "description": "Indicates whether UDP traffic to and from the instance uses ENA Express. To specify this setting, you must first enable ENA Express.", + "type": "boolean" + } + } + }, + "NetworkBandwidthGbps": { + "description": "The minimum and maximum amount of network bandwidth, in gigabits per second (Gbps).\n Setting the minimum bandwidth does not guarantee that your instance will achieve the minimum bandwidth. Amazon EC2 will identify instance types that support the specified minimum bandwidth, but the actual bandwidth of your instance might go below the specified minimum at times. For more information, see [Available instance bandwidth](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth) in the *Amazon EC2 User Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum amount of network bandwidth, in Gbps. If this parameter is not specified, there is no minimum limit.", + "type": "number" + }, + "Max": { + "description": "The maximum amount of network bandwidth, in Gbps. To specify no maximum limit, omit this parameter.", + "type": "number" + } + } + }, + "AcceleratorCount": { + "description": "The minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips) on an instance.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum number of accelerators. To specify no minimum limit, omit this parameter.", + "type": "integer" + }, + "Max": { + "description": "The maximum number of accelerators. To specify no maximum limit, omit this parameter. To exclude accelerator-enabled instance types, set ``Max`` to ``0``.", + "type": "integer" + } + } + }, + "InstanceMarketOptions": { + "description": "Specifies the market (purchasing) option for an instance.\n ``InstanceMarketOptions`` is a property of the [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "SpotOptions": { + "description": "The options for Spot Instances.", + "$ref": "#/definitions/SpotOptions" + }, + "MarketType": { + "description": "The market type.", + "type": "string" + } + } + }, + "LaunchTemplateElasticInferenceAccelerator": { + "description": "Specifies an elastic inference accelerator.\n ``LaunchTemplateElasticInferenceAccelerator`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Type": { + "description": "The type of elastic inference accelerator. The possible values are eia1.medium, eia1.large, and eia1.xlarge.", + "type": "string" + }, + "Count": { + "description": "The number of elastic inference accelerators to attach to the instance. \n Default: 1", + "type": "integer" + } + } + }, + "BaselineEbsBandwidthMbps": { + "description": "The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For more information, see [Amazon EBS–optimized instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) in the *Amazon EC2 User Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum baseline bandwidth, in Mbps. To specify no minimum limit, omit this parameter.", + "type": "integer" + }, + "Max": { + "description": "The maximum baseline bandwidth, in Mbps. To specify no maximum limit, omit this parameter.", + "type": "integer" + } + } + }, + "InstanceRequirements": { + "description": "The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes.\n You must specify ``VCpuCount`` and ``MemoryMiB``. All other attributes are optional. Any unspecified optional attribute is set to its default.\n When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.\n To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request:\n + ``AllowedInstanceTypes`` - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.\n + ``ExcludedInstanceTypes`` - The instance types to exclude from the list, even if they match your specified attributes.\n \n If you specify ``InstanceReq", + "additionalProperties": false, + "type": "object", + "properties": { + "LocalStorageTypes": { + "uniqueItems": false, + "description": "The type of local storage that is required.\n + For instance types with hard disk drive (HDD) storage, specify ``hdd``.\n + For instance types with solid state drive (SSD) storage, specify ``ssd``.\n \n Default: ``hdd`` and ``ssd``", + "type": "array", + "items": { + "type": "string" + } + }, + "InstanceGenerations": { + "uniqueItems": false, + "description": "Indicates whether current or previous generation instance types are included. The current generation instance types are recommended for use. Current generation instance types are typically the latest two to three generations in each instance family. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the *Amazon EC2 User Guide*.\n For current generation instance types, specify ``current``.\n For previous generation instance types, specify ``previous``.\n Default: Current and previous generation instance types", + "type": "array", + "items": { + "type": "string" + } + }, + "NetworkInterfaceCount": { + "description": "The minimum and maximum number of network interfaces.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/NetworkInterfaceCount" + }, + "MemoryGiBPerVCpu": { + "description": "The minimum and maximum amount of memory per vCPU, in GiB.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/MemoryGiBPerVCpu" + }, + "AcceleratorTypes": { + "uniqueItems": false, + "description": "The accelerator types that must be on the instance type.\n + For instance types with GPU accelerators, specify ``gpu``.\n + For instance types with FPGA accelerators, specify ``fpga``.\n + For instance types with inference accelerators, specify ``inference``.\n \n Default: Any accelerator type", + "type": "array", + "items": { + "type": "string" + } + }, + "VCpuCount": { + "description": "The minimum and maximum number of vCPUs.", + "$ref": "#/definitions/VCpuCount" + }, + "ExcludedInstanceTypes": { + "uniqueItems": false, + "description": "The instance types to exclude.\n You can use strings with one or more wild cards, represented by an asterisk (``*``), to exclude an instance type, size, or generation. The following are examples: ``m5.8xlarge``, ``c5*.*``, ``m5a.*``, ``r*``, ``*3*``.\n For example, if you specify ``c5*``,Amazon EC2 will exclude the entire C5 instance family, which includes all C5a and C5n instance types. If you specify ``m5a.*``, Amazon EC2 will exclude all the M5a instance types, but not the M5n instance types.\n If you specify ``ExcludedInstanceTypes``, you can't specify ``AllowedInstanceTypes``.\n Default: No excluded instance types", + "type": "array", + "items": { + "description": "The user data to make available to the instance.", + "type": "string" + } + }, + "AcceleratorManufacturers": { + "uniqueItems": false, + "description": "Indicates whether instance types must have accelerators by specific manufacturers.\n + For instance types with AWS devices, specify ``amazon-web-services``.\n + For instance types with AMD devices, specify ``amd``.\n + For instance types with Habana devices, specify ``habana``.\n + For instance types with NVIDIA devices, specify ``nvidia``.\n + For instance types with Xilinx devices, specify ``xilinx``.\n \n Default: Any manufacturer", + "type": "array", + "items": { + "type": "string" + } + }, + "AllowedInstanceTypes": { + "uniqueItems": false, + "description": "The instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes.\n You can use strings with one or more wild cards, represented by an asterisk (``*``), to allow an instance type, size, or generation. The following are examples: ``m5.8xlarge``, ``c5*.*``, ``m5a.*``, ``r*``, ``*3*``.\n For example, if you specify ``c5*``,Amazon EC2 will allow the entire C5 instance family, which includes all C5a and C5n instance types. If you specify ``m5a.*``, Amazon EC2 will allow all the M5a instance types, but not the M5n instance types.\n If you specify ``AllowedInstanceTypes``, you can't specify ``ExcludedInstanceTypes``.\n Default: All instance types", + "type": "array", + "items": { + "type": "string" + } + }, + "LocalStorage": { + "description": "Indicates whether instance types with instance store volumes are included, excluded, or required. For more information, [Amazon EC2 instance store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) in the *Amazon EC2 User Guide*.\n + To include instance types with instance store volumes, specify ``included``.\n + To require only instance types with instance store volumes, specify ``required``.\n + To exclude instance types with instance store volumes, specify ``excluded``.\n \n Default: ``included``", + "type": "string" + }, + "CpuManufacturers": { + "uniqueItems": false, + "description": "The CPU manufacturers to include.\n + For instance types with Intel CPUs, specify ``intel``.\n + For instance types with AMD CPUs, specify ``amd``.\n + For instance types with AWS CPUs, specify ``amazon-web-services``.\n \n Don't confuse the CPU manufacturer with the CPU architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template.\n Default: Any manufacturer", + "type": "array", + "items": { + "type": "string" + } + }, + "AcceleratorCount": { + "description": "The minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips) on an instance.\n To exclude accelerator-enabled instance types, set ``Max`` to ``0``.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/AcceleratorCount" + }, + "NetworkBandwidthGbps": { + "description": "The minimum and maximum amount of network bandwidth, in gigabits per second (Gbps).\n Default: No minimum or maximum limits", + "$ref": "#/definitions/NetworkBandwidthGbps" + }, + "BareMetal": { + "description": "Indicates whether bare metal instance types must be included, excluded, or required.\n + To include bare metal instance types, specify ``included``.\n + To require only bare metal instance types, specify ``required``.\n + To exclude bare metal instance types, specify ``excluded``.\n \n Default: ``excluded``", + "type": "string" + }, + "RequireHibernateSupport": { + "description": "Indicates whether instance types must support hibernation for On-Demand Instances.\n This parameter is not supported for [GetSpotPlacementScores](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html).\n Default: ``false``", + "type": "boolean" + }, + "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice": { + "description": "[Price protection] The price protection threshold for Spot Instances, as a percentage of an identified On-Demand price. The identified On-Demand price is the price of the lowest priced current generation C, M, or R instance type with your specified attributes. If no current generation C, M, or R instance type matches your attributes, then the identified price is from the lowest priced current generation instance types, and failing that, from the lowest priced previous generation instance types that match your attributes. When Amazon EC2 selects instance types with your attributes, it will exclude instance types whose price exceeds your specified threshold.\n The parameter accepts an integer, which Amazon EC2 interprets as a percentage.\n To indicate no price protection threshold, specify a high value, such as ``999999``.\n If you set ``DesiredCapacityType`` to ``vcpu`` or ``memory-mib``, the price protection threshold is based on the per vCPU or per memory price instead of the per instanc", + "type": "integer" + }, + "SpotMaxPricePercentageOverLowestPrice": { + "description": "[Price protection] The price protection threshold for Spot Instances, as a percentage higher than an identified Spot price. The identified Spot price is the Spot price of the lowest priced current generation C, M, or R instance type with your specified attributes. If no current generation C, M, or R instance type matches your attributes, then the identified Spot price is from the lowest priced current generation instance types, and failing that, from the lowest priced previous generation instance types that match your attributes. When Amazon EC2 selects instance types with your attributes, it will exclude instance types whose Spot price exceeds your specified threshold.\n The parameter accepts an integer, which Amazon EC2 interprets as a percentage.\n To indicate no price protection threshold, specify a high value, such as ``999999``.\n If you set ``TargetCapacityUnitType`` to ``vcpu`` or ``memory-mib``, the price protection threshold is applied based on the per-vCPU or per-memory price i", + "type": "integer" + }, + "BaselineEbsBandwidthMbps": { + "description": "The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For more information, see [Amazon EBS–optimized instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) in the *Amazon EC2 User Guide*.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/BaselineEbsBandwidthMbps" + }, + "OnDemandMaxPricePercentageOverLowestPrice": { + "description": "[Price protection] The price protection threshold for On-Demand Instances, as a percentage higher than an identified On-Demand price. The identified On-Demand price is the price of the lowest priced current generation C, M, or R instance type with your specified attributes. When Amazon EC2 selects instance types with your attributes, it will exclude instance types whose price exceeds your specified threshold.\n The parameter accepts an integer, which Amazon EC2 interprets as a percentage.\n To turn off price protection, specify a high value, such as ``999999``.\n This parameter is not supported for [GetSpotPlacementScores](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html) and [GetInstanceTypesFromInstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html).\n If you set ``TargetCapacityUnitType`` to ``vcpu`` or ``memory-mib``, the price protection threshold is applied based on the per-", + "type": "integer" + }, + "AcceleratorNames": { + "uniqueItems": false, + "description": "The accelerators that must be on the instance type.\n + For instance types with NVIDIA A10G GPUs, specify ``a10g``.\n + For instance types with NVIDIA A100 GPUs, specify ``a100``.\n + For instance types with NVIDIA H100 GPUs, specify ``h100``.\n + For instance types with AWS Inferentia chips, specify ``inferentia``.\n + For instance types with NVIDIA GRID K520 GPUs, specify ``k520``.\n + For instance types with NVIDIA K80 GPUs, specify ``k80``.\n + For instance types with NVIDIA M60 GPUs, specify ``m60``.\n + For instance types with AMD Radeon Pro V520 GPUs, specify ``radeon-pro-v520``.\n + For instance types with NVIDIA T4 GPUs, specify ``t4``.\n + For instance types with NVIDIA T4G GPUs, specify ``t4g``.\n + For instance types with Xilinx VU9P FPGAs, specify ``vu9p``.\n + For instance types with NVIDIA V100 GPUs, specify ``v100``.\n \n Default: Any accelerator", + "type": "array", + "items": { + "type": "string" + } + }, + "AcceleratorTotalMemoryMiB": { + "description": "The minimum and maximum amount of total accelerator memory, in MiB.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/AcceleratorTotalMemoryMiB" + }, + "BurstablePerformance": { + "description": "Indicates whether burstable performance T instance types are included, excluded, or required. For more information, see [Burstable performance instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html).\n + To include burstable performance instance types, specify ``included``.\n + To require only burstable performance instance types, specify ``required``.\n + To exclude burstable performance instance types, specify ``excluded``.\n \n Default: ``excluded``", + "type": "string" + }, + "MemoryMiB": { + "description": "The minimum and maximum amount of memory, in MiB.", + "$ref": "#/definitions/MemoryMiB" + }, + "TotalLocalStorageGB": { + "description": "The minimum and maximum amount of total local storage, in GB.\n Default: No minimum or maximum limits", + "$ref": "#/definitions/TotalLocalStorageGB" + } + } + }, + "Tag": { + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications).", + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "description": "The tag value.", + "type": "string" + }, + "Key": { + "description": "The tag key.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "AcceleratorTotalMemoryMiB": { + "description": "The minimum and maximum amount of total accelerator memory, in MiB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum amount of accelerator memory, in MiB. To specify no minimum limit, omit this parameter.", + "type": "integer" + }, + "Max": { + "description": "The maximum amount of accelerator memory, in MiB. To specify no maximum limit, omit this parameter.", + "type": "integer" + } + } + }, + "CapacityReservationTarget": { + "description": "Specifies a target Capacity Reservation.\n ``CapacityReservationTarget`` is a property of the [Amazon EC2 LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html) property type.", + "additionalProperties": false, + "type": "object", + "properties": { + "CapacityReservationResourceGroupArn": { + "description": "The ARN of the Capacity Reservation resource group in which to run the instance.", + "type": "string" + }, + "CapacityReservationId": { + "description": "The ID of the Capacity Reservation in which to run the instance.", + "type": "string" + } + } + }, + "CapacityReservationSpecification": { + "description": "Specifies an instance's Capacity Reservation targeting option. You can specify only one option at a time.\n ``CapacityReservationSpecification`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "CapacityReservationPreference": { + "description": "Indicates the instance's Capacity Reservation preferences. Possible preferences include:\n + ``open`` - The instance can run in any ``open`` Capacity Reservation that has matching attributes (instance type, platform, Availability Zone).\n + ``none`` - The instance avoids running in a Capacity Reservation even if one is available. The instance runs in On-Demand capacity.", + "type": "string" + }, + "CapacityReservationTarget": { + "description": "Information about the target Capacity Reservation or Capacity Reservation group.", + "$ref": "#/definitions/CapacityReservationTarget" + } + } + }, + "CreditSpecification": { + "description": "Specifies the credit option for CPU usage of a T2, T3, or T3a instance.\n ``CreditSpecification`` is a property of [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "CpuCredits": { + "description": "The credit option for CPU usage of a T instance.\n Valid values: ``standard`` | ``unlimited``", + "type": "string" + } + } + }, + "TotalLocalStorageGB": { + "description": "The minimum and maximum amount of total local storage, in GB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Min": { + "description": "The minimum amount of total local storage, in GB. To specify no minimum limit, omit this parameter.", + "type": "number" + }, + "Max": { + "description": "The maximum amount of total local storage, in GB. To specify no maximum limit, omit this parameter.", + "type": "number" + } + } + }, + "ConnectionTrackingSpecification": { + "description": "A security group connection tracking specification that enables you to set the idle timeout for connection tracking on an Elastic network interface. For more information, see [Connection tracking timeouts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts) in the *Amazon Elastic Compute Cloud User Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "UdpTimeout": { + "description": "Timeout (in seconds) for idle UDP flows that have seen traffic only in a single direction or a single request-response transaction. Min: 30 seconds. Max: 60 seconds. Default: 30 seconds.", + "type": "integer" + }, + "TcpEstablishedTimeout": { + "description": "Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds.", + "type": "integer" + }, + "UdpStreamTimeout": { + "description": "Timeout (in seconds) for idle UDP flows classified as streams which have seen more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.", + "type": "integer" + } + } + } + }, + "required": [ + "LaunchTemplateData" + ], + "properties": { + "LaunchTemplateName": { + "description": "A name for the launch template.", + "type": "string" + }, + "LaunchTemplateData": { + "description": "The information for the launch template.", + "$ref": "#/definitions/LaunchTemplateData" + }, + "VersionDescription": { + "description": "A description for the first version of the launch template.", + "type": "string" + }, + "TagSpecifications": { + "uniqueItems": false, + "description": "The tags to apply to the launch template on creation. To tag the launch template, the resource type must be ``launch-template``.\n To specify the tags for the resources that are created when an instance is launched, you must use [TagSpecifications](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-tagspecifications).", + "type": "array", + "items": { + "$ref": "#/definitions/LaunchTemplateTagSpecification" + } + }, + "LatestVersionNumber": { + "description": "", + "type": "string" + }, + "LaunchTemplateId": { + "description": "", + "type": "string" + }, + "DefaultVersionNumber": { + "description": "", + "type": "string" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/localgatewayroute.json b/internal/aws/cfn/schemas/aws/ec2/localgatewayroute.json new file mode 100644 index 00000000..058265eb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/localgatewayroute.json @@ -0,0 +1,97 @@ +{ + "typeName": "AWS::EC2::LocalGatewayRoute", + "description": "Describes a route for a local gateway route table.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-lgw.git", + "properties": { + "DestinationCidrBlock": { + "description": "The CIDR block used for destination matches.", + "type": "string" + }, + "LocalGatewayRouteTableId": { + "description": "The ID of the local gateway route table.", + "type": "string" + }, + "LocalGatewayVirtualInterfaceGroupId": { + "description": "The ID of the virtual interface group.", + "type": "string" + }, + "NetworkInterfaceId": { + "description": "The ID of the network interface.", + "type": "string" + }, + "State": { + "description": "The state of the route.", + "type": "string" + }, + "Type": { + "description": "The route type.", + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "DestinationCidrBlock", + "LocalGatewayRouteTableId", + "LocalGatewayVirtualInterfaceGroupId" + ] + }, + { + "required": [ + "DestinationCidrBlock", + "LocalGatewayRouteTableId", + "NetworkInterfaceId" + ] + } + ], + "createOnlyProperties": [ + "/properties/DestinationCidrBlock", + "/properties/LocalGatewayRouteTableId" + ], + "readOnlyProperties": [ + "/properties/State", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/DestinationCidrBlock", + "/properties/LocalGatewayRouteTableId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateLocalGatewayRoute", + "ec2:SearchLocalGatewayRoutes" + ] + }, + "read": { + "permissions": [ + "ec2:SearchLocalGatewayRoutes" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteLocalGatewayRoute", + "ec2:SearchLocalGatewayRoutes" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTables", + "ec2:SearchLocalGatewayRoutes" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyLocalGatewayRoute", + "ec2:SearchLocalGatewayRoutes" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetable.json b/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetable.json new file mode 100644 index 00000000..59798266 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetable.json @@ -0,0 +1,125 @@ +{ + "typeName": "AWS::EC2::LocalGatewayRouteTable", + "description": "Describes a route table for a local gateway.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-lgw.git", + "definitions": { + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127, + "pattern": "^(?!aws:.*)" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^(?!aws:.*)" + } + }, + "additionalProperties": false + } + }, + "properties": { + "LocalGatewayRouteTableId": { + "description": "The ID of the local gateway route table.", + "type": "string" + }, + "LocalGatewayRouteTableArn": { + "description": "The ARN of the local gateway route table.", + "type": "string" + }, + "LocalGatewayId": { + "description": "The ID of the local gateway.", + "type": "string" + }, + "OutpostArn": { + "description": "The ARN of the outpost.", + "type": "string" + }, + "OwnerId": { + "description": "The owner of the local gateway route table.", + "type": "string" + }, + "State": { + "description": "The state of the local gateway route table.", + "type": "string" + }, + "Mode": { + "description": "The mode of the local gateway route table.", + "type": "string" + }, + "Tags": { + "description": "The tags for the local gateway route table.", + "$ref": "#/definitions/Tags" + } + }, + "required": [ + "LocalGatewayId" + ], + "createOnlyProperties": [ + "/properties/LocalGatewayId", + "/properties/Mode" + ], + "readOnlyProperties": [ + "/properties/LocalGatewayRouteTableId", + "/properties/LocalGatewayRouteTableArn", + "/properties/OutpostArn", + "/properties/OwnerId", + "/properties/State" + ], + "primaryIdentifier": [ + "/properties/LocalGatewayRouteTableId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateLocalGatewayRouteTable", + "ec2:DescribeLocalGatewayRouteTables", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTables" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTables", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteLocalGatewayRouteTable", + "ec2:DescribeLocalGatewayRouteTables", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTables" + ] + } + }, + "replacementStrategy": "delete_then_create", + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevirtualinterfacegroupassociation.json b/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevirtualinterfacegroupassociation.json new file mode 100644 index 00000000..91e20884 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevirtualinterfacegroupassociation.json @@ -0,0 +1,126 @@ +{ + "typeName": "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", + "description": "Describes a local gateway route table virtual interface group association for a local gateway.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-lgw.git", + "definitions": { + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127, + "pattern": "^(?!aws:.*)" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^(?!aws:.*)" + } + }, + "additionalProperties": false + } + }, + "properties": { + "LocalGatewayRouteTableVirtualInterfaceGroupAssociationId": { + "description": "The ID of the local gateway route table virtual interface group association.", + "type": "string" + }, + "LocalGatewayId": { + "description": "The ID of the local gateway.", + "type": "string" + }, + "LocalGatewayRouteTableId": { + "description": "The ID of the local gateway route table.", + "type": "string" + }, + "LocalGatewayRouteTableArn": { + "description": "The ARN of the local gateway route table.", + "type": "string" + }, + "LocalGatewayVirtualInterfaceGroupId": { + "description": "The ID of the local gateway route table virtual interface group.", + "type": "string" + }, + "OwnerId": { + "description": "The owner of the local gateway route table virtual interface group association.", + "type": "string" + }, + "State": { + "description": "The state of the local gateway route table virtual interface group association.", + "type": "string" + }, + "Tags": { + "description": "The tags for the local gateway route table virtual interface group association.", + "$ref": "#/definitions/Tags" + } + }, + "required": [ + "LocalGatewayRouteTableId", + "LocalGatewayVirtualInterfaceGroupId" + ], + "createOnlyProperties": [ + "/properties/LocalGatewayRouteTableId", + "/properties/LocalGatewayVirtualInterfaceGroupId" + ], + "readOnlyProperties": [ + "/properties/LocalGatewayRouteTableVirtualInterfaceGroupAssociationId", + "/properties/LocalGatewayId", + "/properties/LocalGatewayRouteTableArn", + "/properties/OwnerId", + "/properties/State" + ], + "primaryIdentifier": [ + "/properties/LocalGatewayRouteTableVirtualInterfaceGroupAssociationId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation", + "ec2:DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation", + "ec2:DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations" + ] + } + }, + "replacementStrategy": "delete_then_create", + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevpcassociation.json b/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevpcassociation.json new file mode 100644 index 00000000..76a80c98 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/localgatewayroutetablevpcassociation.json @@ -0,0 +1,115 @@ +{ + "typeName": "AWS::EC2::LocalGatewayRouteTableVPCAssociation", + "description": "Describes an association between a local gateway route table and a VPC.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-lgw.git", + "definitions": { + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127, + "pattern": "^(?!aws:.*)" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^(?!aws:.*)" + } + }, + "additionalProperties": false + } + }, + "properties": { + "LocalGatewayId": { + "description": "The ID of the local gateway.", + "type": "string" + }, + "LocalGatewayRouteTableId": { + "description": "The ID of the local gateway route table.", + "type": "string" + }, + "LocalGatewayRouteTableVpcAssociationId": { + "description": "The ID of the association.", + "type": "string" + }, + "State": { + "description": "The state of the association.", + "type": "string" + }, + "VpcId": { + "description": "The ID of the VPC.", + "type": "string" + }, + "Tags": { + "description": "The tags for the association.", + "$ref": "#/definitions/Tags" + } + }, + "required": [ + "LocalGatewayRouteTableId", + "VpcId" + ], + "createOnlyProperties": [ + "/properties/LocalGatewayRouteTableId", + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/LocalGatewayId", + "/properties/LocalGatewayRouteTableVpcAssociationId", + "/properties/State" + ], + "primaryIdentifier": [ + "/properties/LocalGatewayRouteTableVpcAssociationId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateLocalGatewayRouteTableVpcAssociation", + "ec2:DescribeLocalGatewayRouteTableVpcAssociations", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTableVpcAssociations" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTableVpcAssociations", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteLocalGatewayRouteTableVpcAssociation", + "ec2:DescribeLocalGatewayRouteTableVpcAssociations", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeLocalGatewayRouteTableVpcAssociations" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ec2/natgateway.json b/internal/aws/cfn/schemas/aws/ec2/natgateway.json new file mode 100644 index 00000000..39351751 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/natgateway.json @@ -0,0 +1,144 @@ +{ + "typeName": "AWS::EC2::NatGateway", + "description": "Specifies a network address translation (NAT) gateway in the specified subnet. You can create either a public NAT gateway or a private NAT gateway. The default is a public NAT gateway. If you create a public NAT gateway, you must specify an elastic IP address.\n With a NAT gateway, instances in a private subnet can connect to the internet, other AWS services, or an on-premises network using the IP address of the NAT gateway. For more information, see [NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) in the *Amazon VPC User Guide*.\n If you add a default route (``AWS::EC2::Route`` resource) that points to a NAT gateway, specify the NAT gateway ID for the route's ``NatGatewayId`` property.\n When you associate an Elastic IP address or secondary Elastic IP address with a public NAT gateway, the network border group of the Elastic IP address must match the network border group of the Availability Zone (AZ) that the public NAT gateway is in. Otherwise, the NAT gateway fails to launch. You can see the network border group for the AZ by viewing the details of the subnet. Similarly, you can view the network border group for the Elastic IP address by viewing its details. For more information, see [Allocate an Elastic IP address](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#allocate-eip) in the *Amazon VPC User Guide*.", + "additionalProperties": false, + "properties": { + "SubnetId": { + "type": "string", + "description": "The ID of the subnet in which the NAT gateway is located." + }, + "NatGatewayId": { + "type": "string", + "description": "" + }, + "ConnectivityType": { + "type": "string", + "description": "Indicates whether the NAT gateway supports public or private connectivity. The default is public connectivity." + }, + "PrivateIpAddress": { + "type": "string", + "description": "The private IPv4 address to assign to the NAT gateway. If you don't provide an address, a private IPv4 address will be automatically assigned." + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "The tags for the NAT gateway." + }, + "AllocationId": { + "type": "string", + "description": "[Public NAT gateway only] The allocation ID of the Elastic IP address that's associated with the NAT gateway. This property is required for a public NAT gateway and cannot be specified with a private NAT gateway." + }, + "SecondaryAllocationIds": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + }, + "description": "Secondary EIP allocation IDs. For more information, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the *Amazon VPC User Guide*." + }, + "SecondaryPrivateIpAddresses": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + }, + "description": "Secondary private IPv4 addresses. For more information about secondary addresses, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the *Amazon Virtual Private Cloud User Guide*.\n ``SecondaryPrivateIpAddressCount`` and ``SecondaryPrivateIpAddresses`` cannot be set at the same time." + }, + "SecondaryPrivateIpAddressCount": { + "type": "integer", + "minimum": 1, + "description": "[Private NAT gateway only] The number of secondary private IPv4 addresses you want to assign to the NAT gateway. For more information about secondary addresses, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the *Amazon Virtual Private Cloud User Guide*.\n ``SecondaryPrivateIpAddressCount`` and ``SecondaryPrivateIpAddresses`` cannot be set at the same time." + }, + "MaxDrainDurationSeconds": { + "type": "integer", + "description": "The maximum amount of time to wait (in seconds) before forcibly releasing the IP addresses if connections are still in progress. Default value is 350 seconds." + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The tag value." + }, + "Key": { + "type": "string", + "description": "The tag key." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "required": [ + "SubnetId" + ], + "createOnlyProperties": [ + "/properties/SubnetId", + "/properties/ConnectivityType", + "/properties/AllocationId", + "/properties/PrivateIpAddress" + ], + "primaryIdentifier": [ + "/properties/NatGatewayId" + ], + "readOnlyProperties": [ + "/properties/NatGatewayId" + ], + "writeOnlyProperties": [ + "/properties/MaxDrainDurationSeconds" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateNatGateway", + "ec2:DescribeNatGateways", + "ec2:CreateTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteNatGateway", + "ec2:DescribeNatGateways" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNatGateways" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNatGateways" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeNatGateways", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:AssociateNatGatewayAddress", + "ec2:DisassociateNatGatewayAddress", + "ec2:AssignPrivateNatGatewayAddress", + "ec2:UnassignPrivateNatGatewayAddress" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkacl.json b/internal/aws/cfn/schemas/aws/ec2/networkacl.json new file mode 100644 index 00000000..1003191e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkacl.json @@ -0,0 +1,99 @@ +{ + "typeName": "AWS::EC2::NetworkAcl", + "description": "Specifies a network ACL for your VPC.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "additionalProperties": false, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The tag key." + }, + "Value": { + "type": "string", + "description": "The tag value." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "properties": { + "Id": { + "type": "string", + "description": "" + }, + "Tags": { + "description": "The tags for the network ACL.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VpcId": { + "description": "The ID of the VPC for the network ACL.", + "type": "string" + } + }, + "required": [ + "VpcId" + ], + "createOnlyProperties": [ + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateNetworkAcl", + "ec2:DescribeNetworkAcls", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNetworkAcls", + "ec2:DescribeTags" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeNetworkAcls", + "ec2:DeleteTags", + "ec2:CreateTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteTags", + "ec2:DeleteNetworkAcl", + "ec2:DescribeNetworkAcls" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNetworkAcls" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkaclentry.json b/internal/aws/cfn/schemas/aws/ec2/networkaclentry.json new file mode 100644 index 00000000..d5c707a5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkaclentry.json @@ -0,0 +1,111 @@ +{ + "typeName": "AWS::EC2::NetworkAclEntry", + "description": "Resource Type definition for AWS::EC2::NetworkAclEntry", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "PortRange": { + "description": "The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). We modify the specified CIDR block to its canonical form; for example, if you specify 100.68.0.18/18, we modify it to 100.68.0.0/18", + "$ref": "#/definitions/PortRange" + }, + "NetworkAclId": { + "description": "The ID of the network ACL", + "type": "string" + }, + "RuleAction": { + "description": "Indicates whether to allow or deny the traffic that matches the rule", + "type": "string" + }, + "CidrBlock": { + "description": "The IPv4 CIDR range to allow or deny, in CIDR notation (for example, 172.16.0.0/24). Requirement is conditional: You must specify the CidrBlock or Ipv6CidrBlock property", + "type": "string" + }, + "Egress": { + "description": "Indicates whether this is an egress rule (rule is applied to traffic leaving the subnet)", + "type": "boolean" + }, + "RuleNumber": { + "description": "Rule number to assign to the entry, such as 100. ACL entries are processed in ascending order by rule number. Entries can't use the same rule number unless one is an egress rule and the other is an ingress rule", + "type": "integer" + }, + "Ipv6CidrBlock": { + "description": "The IPv6 network range to allow or deny, in CIDR notation (for example 2001:db8:1234:1a00::/64)", + "type": "string" + }, + "Protocol": { + "description": "The protocol number. A value of \"-1\" means all protocols. If you specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\" (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of any ports or ICMP types or codes that you specify. If you specify protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code", + "type": "integer" + }, + "Icmp": { + "description": "The Internet Control Message Protocol (ICMP) code and type. Requirement is conditional: Required if specifying 1 (ICMP) for the protocol parameter", + "$ref": "#/definitions/Icmp" + } + }, + "definitions": { + "PortRange": { + "type": "object", + "additionalProperties": false, + "properties": { + "From": { + "type": "integer" + }, + "To": { + "type": "integer" + } + } + }, + "Icmp": { + "type": "object", + "additionalProperties": false, + "properties": { + "Code": { + "type": "integer" + }, + "Type": { + "type": "integer" + } + } + } + }, + "taggable": false, + "required": [ + "NetworkAclId", + "RuleAction", + "RuleNumber", + "Protocol" + ], + "createOnlyProperties": [ + "/properties/Egress", + "/properties/RuleNumber", + "/properties/NetworkAclId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateNetworkAclEntry", + "ec2:DescribeNetworkAcls" + ] + }, + "update": { + "permissions": [ + "ec2:ReplaceNetworkAclEntry", + "ec2:DescribeNetworkAcls" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteNetworkAclEntry", + "ec2:DescribeNetworkAcls" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscope.json b/internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscope.json new file mode 100644 index 00000000..5dbccd36 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscope.json @@ -0,0 +1,236 @@ +{ + "typeName": "AWS::EC2::NetworkInsightsAccessScope", + "description": "Resource schema for AWS::EC2::NetworkInsightsAccessScope", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key" + ] + }, + "AccessScopePathRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Source": { + "$ref": "#/definitions/PathStatementRequest" + }, + "Destination": { + "$ref": "#/definitions/PathStatementRequest" + }, + "ThroughResources": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ThroughResourcesStatementRequest" + } + } + } + }, + "PathStatementRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "PacketHeaderStatement": { + "$ref": "#/definitions/PacketHeaderStatementRequest" + }, + "ResourceStatement": { + "$ref": "#/definitions/ResourceStatementRequest" + } + } + }, + "PacketHeaderStatementRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourceAddresses": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "DestinationAddresses": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "SourcePorts": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "DestinationPorts": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "SourcePrefixLists": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "DestinationPrefixLists": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "Protocols": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Protocol" + } + } + } + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp" + ] + }, + "ResourceStatementRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Resources": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "ResourceTypes": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + } + } + }, + "ThroughResourcesStatementRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceStatement": { + "$ref": "#/definitions/ResourceStatementRequest" + } + } + } + }, + "properties": { + "NetworkInsightsAccessScopeId": { + "type": "string" + }, + "NetworkInsightsAccessScopeArn": { + "type": "string" + }, + "CreatedDate": { + "type": "string" + }, + "UpdatedDate": { + "type": "string" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "MatchPaths": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/AccessScopePathRequest" + } + }, + "ExcludePaths": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/AccessScopePathRequest" + } + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/NetworkInsightsAccessScopeId", + "/properties/NetworkInsightsAccessScopeArn", + "/properties/CreatedDate", + "/properties/UpdatedDate" + ], + "createOnlyProperties": [ + "/properties/MatchPaths", + "/properties/ExcludePaths" + ], + "writeOnlyProperties": [ + "/properties/MatchPaths", + "/properties/ExcludePaths" + ], + "primaryIdentifier": [ + "/properties/NetworkInsightsAccessScopeId" + ], + "additionalIdentifiers": [ + [ + "/properties/NetworkInsightsAccessScopeArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateNetworkInsightsAccessScope", + "ec2:CreateTags", + "tiros:CreateQuery" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNetworkInsightsAccessScopes", + "ec2:GetNetworkInsightsAccessScopeContent" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeNetworkInsightsAccessScopes", + "ec2:GetNetworkInsightsAccessScopeContent", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteNetworkInsightsAccessScope", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNetworkInsightsAccessScopes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscopeanalysis.json b/internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscopeanalysis.json new file mode 100644 index 00000000..0b6d336d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkinsightsaccessscopeanalysis.json @@ -0,0 +1,131 @@ +{ + "typeName": "AWS::EC2::NetworkInsightsAccessScopeAnalysis", + "description": "Resource schema for AWS::EC2::NetworkInsightsAccessScopeAnalysis", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key" + ] + } + }, + "properties": { + "NetworkInsightsAccessScopeAnalysisId": { + "type": "string" + }, + "NetworkInsightsAccessScopeAnalysisArn": { + "type": "string" + }, + "NetworkInsightsAccessScopeId": { + "type": "string" + }, + "Status": { + "type": "string", + "enum": [ + "running", + "failed", + "succeeded" + ] + }, + "StatusMessage": { + "type": "string" + }, + "StartDate": { + "type": "string" + }, + "EndDate": { + "type": "string" + }, + "FindingsFound": { + "type": "string", + "enum": [ + "true", + "false", + "unknown" + ] + }, + "AnalyzedEniCount": { + "type": "integer" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "NetworkInsightsAccessScopeId" + ], + "readOnlyProperties": [ + "/properties/NetworkInsightsAccessScopeAnalysisId", + "/properties/NetworkInsightsAccessScopeAnalysisArn", + "/properties/Status", + "/properties/StatusMessage", + "/properties/StartDate", + "/properties/EndDate", + "/properties/FindingsFound", + "/properties/AnalyzedEniCount" + ], + "createOnlyProperties": [ + "/properties/NetworkInsightsAccessScopeId" + ], + "primaryIdentifier": [ + "/properties/NetworkInsightsAccessScopeAnalysisId" + ], + "additionalIdentifiers": [ + [ + "/properties/NetworkInsightsAccessScopeAnalysisArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateTags", + "ec2:StartNetworkInsightsAccessScopeAnalysis", + "ec2:GetTransitGatewayRouteTablePropagations", + "ec2:Describe*", + "elasticloadbalancing:Describe*", + "directconnect:Describe*", + "tiros:CreateQuery", + "tiros:GetQueryAnswer", + "tiros:GetQueryExplanation" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNetworkInsightsAccessScopeAnalyses" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeNetworkInsightsAccessScopeAnalyses", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteNetworkInsightsAccessScopeAnalysis", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNetworkInsightsAccessScopeAnalyses" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkinsightsanalysis.json b/internal/aws/cfn/schemas/aws/ec2/networkinsightsanalysis.json new file mode 100644 index 00000000..93a6d537 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkinsightsanalysis.json @@ -0,0 +1,708 @@ +{ + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git", + "handlers": { + "read": { + "permissions": [ + "ec2:Describe*" + ] + }, + "create": { + "permissions": [ + "ec2:CreateTags", + "ec2:StartNetworkInsightsAnalysis", + "ec2:GetTransitGatewayRouteTablePropagations", + "ec2:SearchTransitGatewayRoutes", + "ec2:Describe*", + "ec2:GetManagedPrefixListEntries", + "elasticloadbalancing:Describe*", + "directconnect:Describe*", + "tiros:CreateQuery", + "tiros:GetQueryAnswer", + "tiros:GetQueryExplanation" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:Describe*", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:Describe*" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteNetworkInsightsAnalysis", + "ec2:DeleteTags" + ] + } + }, + "typeName": "AWS::EC2::NetworkInsightsAnalysis", + "readOnlyProperties": [ + "/properties/NetworkInsightsAnalysisId", + "/properties/NetworkInsightsAnalysisArn", + "/properties/StartDate", + "/properties/Status", + "/properties/StatusMessage", + "/properties/ErrorCode", + "/properties/ErrorMessage", + "/properties/NetworkPathFound", + "/properties/ForwardPathComponents", + "/properties/ReturnPathComponents", + "/properties/Explanations", + "/properties/AlternatePathHints", + "/properties/SuggestedAccounts" + ], + "description": "Resource schema for AWS::EC2::NetworkInsightsAnalysis", + "additionalIdentifiers": [ + [ + "/properties/NetworkInsightsAnalysisArn" + ] + ], + "createOnlyProperties": [ + "/properties/NetworkInsightsPathId", + "/properties/FilterInArns" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/NetworkInsightsAnalysisId" + ], + "definitions": { + "PathComponent": { + "additionalProperties": false, + "type": "object", + "properties": { + "AdditionalDetails": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/AdditionalDetail" + } + }, + "InboundHeader": { + "$ref": "#/definitions/AnalysisPacketHeader" + }, + "Vpc": { + "$ref": "#/definitions/AnalysisComponent" + }, + "DestinationVpc": { + "$ref": "#/definitions/AnalysisComponent" + }, + "SecurityGroupRule": { + "$ref": "#/definitions/AnalysisSecurityGroupRule" + }, + "TransitGateway": { + "$ref": "#/definitions/AnalysisComponent" + }, + "ElasticLoadBalancerListener": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Explanations": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/Explanation" + } + }, + "ServiceName": { + "type": "string" + }, + "SequenceNumber": { + "type": "integer" + }, + "SourceVpc": { + "$ref": "#/definitions/AnalysisComponent" + }, + "OutboundHeader": { + "$ref": "#/definitions/AnalysisPacketHeader" + }, + "AclRule": { + "$ref": "#/definitions/AnalysisAclRule" + }, + "TransitGatewayRouteTableRoute": { + "$ref": "#/definitions/TransitGatewayRouteTableRoute" + }, + "Component": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Subnet": { + "$ref": "#/definitions/AnalysisComponent" + }, + "RouteTableRoute": { + "$ref": "#/definitions/AnalysisRouteTableRoute" + } + } + }, + "AnalysisLoadBalancerListener": { + "additionalProperties": false, + "type": "object", + "properties": { + "InstancePort": { + "$ref": "#/definitions/Port" + }, + "LoadBalancerPort": { + "$ref": "#/definitions/Port" + } + } + }, + "AnalysisLoadBalancerTarget": { + "additionalProperties": false, + "type": "object", + "properties": { + "Address": { + "$ref": "#/definitions/IpAddress" + }, + "Instance": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Port": { + "$ref": "#/definitions/Port" + }, + "AvailabilityZone": { + "type": "string" + } + } + }, + "Explanation": { + "additionalProperties": false, + "type": "object", + "properties": { + "VpnGateway": { + "$ref": "#/definitions/AnalysisComponent" + }, + "PacketField": { + "type": "string" + }, + "TransitGatewayAttachment": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Protocols": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/Protocol" + } + }, + "IngressRouteTable": { + "$ref": "#/definitions/AnalysisComponent" + }, + "ClassicLoadBalancerListener": { + "$ref": "#/definitions/AnalysisLoadBalancerListener" + }, + "VpcPeeringConnection": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Address": { + "$ref": "#/definitions/IpAddress" + }, + "Port": { + "$ref": "#/definitions/Port" + }, + "Addresses": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/IpAddress" + } + }, + "ElasticLoadBalancerListener": { + "$ref": "#/definitions/AnalysisComponent" + }, + "TransitGatewayRouteTable": { + "$ref": "#/definitions/AnalysisComponent" + }, + "ExplanationCode": { + "type": "string" + }, + "InternetGateway": { + "$ref": "#/definitions/AnalysisComponent" + }, + "SourceVpc": { + "$ref": "#/definitions/AnalysisComponent" + }, + "AttachedTo": { + "$ref": "#/definitions/AnalysisComponent" + }, + "PrefixList": { + "$ref": "#/definitions/AnalysisComponent" + }, + "TransitGatewayRouteTableRoute": { + "$ref": "#/definitions/TransitGatewayRouteTableRoute" + }, + "ComponentRegion": { + "type": "string" + }, + "LoadBalancerTargetGroup": { + "$ref": "#/definitions/AnalysisComponent" + }, + "NetworkInterface": { + "$ref": "#/definitions/AnalysisComponent" + }, + "CustomerGateway": { + "$ref": "#/definitions/AnalysisComponent" + }, + "DestinationVpc": { + "$ref": "#/definitions/AnalysisComponent" + }, + "SecurityGroup": { + "$ref": "#/definitions/AnalysisComponent" + }, + "TransitGateway": { + "$ref": "#/definitions/AnalysisComponent" + }, + "RouteTable": { + "$ref": "#/definitions/AnalysisComponent" + }, + "State": { + "type": "string" + }, + "LoadBalancerListenerPort": { + "$ref": "#/definitions/Port" + }, + "vpcEndpoint": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Subnet": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Cidrs": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "Destination": { + "$ref": "#/definitions/AnalysisComponent" + }, + "SecurityGroups": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/AnalysisComponent" + } + }, + "ComponentAccount": { + "type": "string" + }, + "VpnConnection": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Vpc": { + "$ref": "#/definitions/AnalysisComponent" + }, + "NatGateway": { + "$ref": "#/definitions/AnalysisComponent" + }, + "Direction": { + "type": "string" + }, + "LoadBalancerTargetPort": { + "$ref": "#/definitions/Port" + }, + "LoadBalancerTarget": { + "$ref": "#/definitions/AnalysisLoadBalancerTarget" + }, + "LoadBalancerTargetGroups": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/AnalysisComponent" + } + }, + "Component": { + "$ref": "#/definitions/AnalysisComponent" + }, + "MissingComponent": { + "type": "string" + }, + "RouteTableRoute": { + "$ref": "#/definitions/AnalysisRouteTableRoute" + }, + "AvailabilityZones": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "PortRanges": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/PortRange" + } + }, + "Acl": { + "$ref": "#/definitions/AnalysisComponent" + }, + "SecurityGroupRule": { + "$ref": "#/definitions/AnalysisSecurityGroupRule" + }, + "SubnetRouteTable": { + "$ref": "#/definitions/AnalysisComponent" + }, + "LoadBalancerArn": { + "$ref": "#/definitions/ResourceArn" + }, + "AclRule": { + "$ref": "#/definitions/AnalysisAclRule" + } + } + }, + "Port": { + "type": "integer" + }, + "AnalysisPacketHeader": { + "additionalProperties": false, + "type": "object", + "properties": { + "DestinationPortRanges": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/PortRange" + } + }, + "SourcePortRanges": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/PortRange" + } + }, + "DestinationAddresses": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/IpAddress" + } + }, + "Protocol": { + "$ref": "#/definitions/Protocol" + }, + "SourceAddresses": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/IpAddress" + } + } + } + }, + "AdditionalDetail": { + "additionalProperties": false, + "type": "object", + "properties": { + "ServiceName": { + "type": "string" + }, + "AdditionalDetailType": { + "type": "string" + }, + "LoadBalancers": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/AnalysisComponent" + } + }, + "Component": { + "$ref": "#/definitions/AnalysisComponent" + } + } + }, + "AlternatePathHint": { + "additionalProperties": false, + "type": "object", + "properties": { + "ComponentArn": { + "type": "string" + }, + "ComponentId": { + "type": "string" + } + } + }, + "TransitGatewayRouteTableRoute": { + "additionalProperties": false, + "type": "object", + "properties": { + "PrefixListId": { + "type": "string" + }, + "ResourceId": { + "type": "string" + }, + "State": { + "type": "string" + }, + "ResourceType": { + "type": "string" + }, + "RouteOrigin": { + "type": "string" + }, + "DestinationCidr": { + "type": "string" + }, + "AttachmentId": { + "type": "string" + } + } + }, + "Protocol": { + "type": "string" + }, + "Tags": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AnalysisSecurityGroupRule": { + "additionalProperties": false, + "type": "object", + "properties": { + "PortRange": { + "$ref": "#/definitions/PortRange" + }, + "Cidr": { + "type": "string" + }, + "PrefixListId": { + "type": "string" + }, + "SecurityGroupId": { + "type": "string" + }, + "Protocol": { + "$ref": "#/definitions/Protocol" + }, + "Direction": { + "type": "string" + } + } + }, + "AnalysisComponent": { + "additionalProperties": false, + "type": "object", + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + } + } + }, + "AnalysisAclRule": { + "additionalProperties": false, + "type": "object", + "properties": { + "PortRange": { + "$ref": "#/definitions/PortRange" + }, + "Cidr": { + "type": "string" + }, + "RuleAction": { + "type": "string" + }, + "Egress": { + "type": "boolean" + }, + "RuleNumber": { + "type": "integer" + }, + "Protocol": { + "$ref": "#/definitions/Protocol" + } + } + }, + "AnalysisRouteTableRoute": { + "additionalProperties": false, + "type": "object", + "properties": { + "Origin": { + "type": "string" + }, + "destinationPrefixListId": { + "type": "string" + }, + "destinationCidr": { + "type": "string" + }, + "NetworkInterfaceId": { + "type": "string" + }, + "TransitGatewayId": { + "type": "string" + }, + "VpcPeeringConnectionId": { + "type": "string" + }, + "instanceId": { + "type": "string" + }, + "State": { + "type": "string" + }, + "egressOnlyInternetGatewayId": { + "type": "string" + }, + "NatGatewayId": { + "type": "string" + }, + "gatewayId": { + "type": "string" + } + } + }, + "ResourceArn": { + "type": "string" + }, + "PortRange": { + "additionalProperties": false, + "type": "object", + "properties": { + "From": { + "type": "integer" + }, + "To": { + "type": "integer" + } + } + }, + "IpAddress": { + "type": "string" + }, + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Key" + ] + } + }, + "required": [ + "NetworkInsightsPathId" + ], + "properties": { + "Status": { + "type": "string", + "enum": [ + "running", + "failed", + "succeeded" + ] + }, + "ReturnPathComponents": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/PathComponent" + } + }, + "NetworkInsightsAnalysisId": { + "type": "string" + }, + "NetworkInsightsPathId": { + "type": "string" + }, + "NetworkPathFound": { + "type": "boolean" + }, + "SuggestedAccounts": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "FilterInArns": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/ResourceArn" + } + }, + "NetworkInsightsAnalysisArn": { + "type": "string" + }, + "StatusMessage": { + "type": "string" + }, + "StartDate": { + "type": "string" + }, + "AlternatePathHints": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/AlternatePathHint" + } + }, + "Explanations": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/Explanation" + } + }, + "ForwardPathComponents": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/PathComponent" + } + }, + "AdditionalAccounts": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "Tags": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkinsightspath.json b/internal/aws/cfn/schemas/aws/ec2/networkinsightspath.json new file mode 100644 index 00000000..57975043 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkinsightspath.json @@ -0,0 +1,181 @@ +{ + "typeName": "AWS::EC2::NetworkInsightsPath", + "description": "Resource schema for AWS::EC2::NetworkInsightsPath", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-ni.git", + "definitions": { + "Tags": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key" + ] + }, + "IpAddress": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp" + ] + }, + "Port": { + "type": "integer" + }, + "FilterPortRange": { + "type": "object", + "additionalProperties": false, + "properties": { + "FromPort": { + "type": "integer" + }, + "ToPort": { + "type": "integer" + } + } + }, + "PathFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourceAddress": { + "$ref": "#/definitions/IpAddress" + }, + "SourcePortRange": { + "$ref": "#/definitions/FilterPortRange" + }, + "DestinationAddress": { + "$ref": "#/definitions/IpAddress" + }, + "DestinationPortRange": { + "$ref": "#/definitions/FilterPortRange" + } + } + } + }, + "properties": { + "NetworkInsightsPathId": { + "type": "string" + }, + "NetworkInsightsPathArn": { + "type": "string" + }, + "CreatedDate": { + "type": "string" + }, + "SourceIp": { + "$ref": "#/definitions/IpAddress" + }, + "FilterAtSource": { + "$ref": "#/definitions/PathFilter" + }, + "FilterAtDestination": { + "$ref": "#/definitions/PathFilter" + }, + "DestinationIp": { + "$ref": "#/definitions/IpAddress" + }, + "Source": { + "type": "string" + }, + "Destination": { + "type": "string" + }, + "SourceArn": { + "type": "string" + }, + "DestinationArn": { + "type": "string" + }, + "Protocol": { + "$ref": "#/definitions/Protocol" + }, + "DestinationPort": { + "$ref": "#/definitions/Port" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Protocol", + "Source" + ], + "readOnlyProperties": [ + "/properties/NetworkInsightsPathId", + "/properties/NetworkInsightsPathArn", + "/properties/CreatedDate", + "/properties/SourceArn", + "/properties/DestinationArn" + ], + "primaryIdentifier": [ + "/properties/NetworkInsightsPathId" + ], + "createOnlyProperties": [ + "/properties/SourceIp", + "/properties/DestinationIp", + "/properties/Source", + "/properties/Destination", + "/properties/Protocol", + "/properties/DestinationPort", + "/properties/FilterAtSource", + "/properties/FilterAtDestination" + ], + "additionalIdentifiers": [ + [ + "/properties/NetworkInsightsPathArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateNetworkInsightsPath", + "ec2:CreateTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteNetworkInsightsPath", + "ec2:DeleteTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNetworkInsightsPaths" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNetworkInsightsPaths" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeNetworkInsightsPaths", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkinterface.json b/internal/aws/cfn/schemas/aws/ec2/networkinterface.json new file mode 100644 index 00000000..7e1d33eb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkinterface.json @@ -0,0 +1,278 @@ +{ + "typeName": "AWS::EC2::NetworkInterface", + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "description": "The AWS::EC2::NetworkInterface resource creates network interface", + "additionalProperties": false, + "properties": { + "Description": { + "description": "A description for the network interface.", + "type": "string" + }, + "PrivateIpAddress": { + "description": "Assigns a single private IP address to the network interface, which is used as the primary private IP address. If you want to specify multiple private IP address, use the PrivateIpAddresses property. ", + "type": "string" + }, + "PrivateIpAddresses": { + "description": "Assigns a list of private IP addresses to the network interface. You can specify a primary private IP address by setting the value of the Primary property to true in the PrivateIpAddressSpecification property. If you want EC2 to automatically assign private IP addresses, use the SecondaryPrivateIpAddressCount property and do not specify this property.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PrivateIpAddressSpecification" + } + }, + "SecondaryPrivateIpAddressCount": { + "description": "The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using privateIpAddresses", + "type": "integer" + }, + "PrimaryPrivateIpAddress": { + "description": "Returns the primary private IP address of the network interface.", + "type": "string" + }, + "Ipv4Prefixes": { + "description": "Assigns a list of IPv4 prefixes to the network interface. If you want EC2 to automatically assign IPv4 prefixes, use the Ipv4PrefixCount property and do not specify this property. Presently, only /28 prefixes are supported. You can't specify IPv4 prefixes if you've specified one of the following: a count of IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Ipv4PrefixSpecification" + } + }, + "Ipv4PrefixCount": { + "description": "The number of IPv4 prefixes to assign to a network interface. When you specify a number of IPv4 prefixes, Amazon EC2 selects these prefixes from your existing subnet CIDR reservations, if available, or from free spaces in the subnet. By default, these will be /28 prefixes. You can't specify a count of IPv4 prefixes if you've specified one of the following: specific IPv4 prefixes, specific private IPv4 addresses, or a count of private IPv4 addresses.", + "type": "integer" + }, + "GroupSet": { + "description": "A list of security group IDs associated with this network interface.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Ipv6Addresses": { + "description": "One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet to associate with the network interface. If you're specifying a number of IPv6 addresses, use the Ipv6AddressCount property and don't specify this property.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/InstanceIpv6Address" + } + }, + "Ipv6Prefixes": { + "description": "Assigns a list of IPv6 prefixes to the network interface. If you want EC2 to automatically assign IPv6 prefixes, use the Ipv6PrefixCount property and do not specify this property. Presently, only /80 prefixes are supported. You can't specify IPv6 prefixes if you've specified one of the following: a count of IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Ipv6PrefixSpecification" + } + }, + "Ipv6PrefixCount": { + "description": "The number of IPv6 prefixes to assign to a network interface. When you specify a number of IPv6 prefixes, Amazon EC2 selects these prefixes from your existing subnet CIDR reservations, if available, or from free spaces in the subnet. By default, these will be /80 prefixes. You can't specify a count of IPv6 prefixes if you've specified one of the following: specific IPv6 prefixes, specific IPv6 addresses, or a count of IPv6 addresses.", + "type": "integer" + }, + "SubnetId": { + "description": "The ID of the subnet to associate with the network interface.", + "type": "string" + }, + "SourceDestCheck": { + "description": "Indicates whether traffic to or from the instance is validated.", + "type": "boolean" + }, + "InterfaceType": { + "description": "Indicates the type of network interface.", + "type": "string" + }, + "SecondaryPrivateIpAddresses": { + "description": "Returns the secondary private IP addresses of the network interface.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Ipv6AddressCount": { + "description": "The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. To specify specific IPv6 addresses, use the Ipv6Addresses property and don't specify this property.", + "type": "integer" + }, + "EnablePrimaryIpv6": { + "description": "If you have instances or ENIs that rely on the IPv6 address not changing, to avoid disrupting traffic to instances or ENIs, you can enable a primary IPv6 address. Enable this option to automatically assign an IPv6 associated with the ENI attached to your instance to be the primary IPv6 address. When you enable an IPv6 address to be a primary IPv6, you cannot disable it. Traffic will be routed to the primary IPv6 address until the instance is terminated or the ENI is detached. If you have multiple IPv6 addresses associated with an ENI and you enable a primary IPv6 address, the first IPv6 address associated with the ENI becomes the primary IPv6 address.", + "type": "boolean" + }, + "PrimaryIpv6Address": { + "description": "The primary IPv6 address", + "type": "string" + }, + "ConnectionTrackingSpecification": { + "$ref": "#/definitions/ConnectionTrackingSpecification" + }, + "Id": { + "description": "Network interface id.", + "type": "string" + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this network interface.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VpcId": { + "description": "The ID of the VPC", + "type": "string" + } + }, + "definitions": { + "PrivateIpAddressSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "PrivateIpAddress": { + "type": "string" + }, + "Primary": { + "type": "boolean" + } + }, + "required": [ + "PrivateIpAddress", + "Primary" + ] + }, + "InstanceIpv6Address": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ipv6Address": { + "type": "string" + } + }, + "required": [ + "Ipv6Address" + ] + }, + "Ipv4PrefixSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ipv4Prefix": { + "type": "string" + } + }, + "required": [ + "Ipv4Prefix" + ] + }, + "Ipv6PrefixSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ipv6Prefix": { + "type": "string" + } + }, + "required": [ + "Ipv6Prefix" + ] + }, + "ConnectionTrackingSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "TcpEstablishedTimeout": { + "type": "integer" + }, + "UdpStreamTimeout": { + "type": "integer" + }, + "UdpTimeout": { + "type": "integer" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "SubnetId" + ], + "createOnlyProperties": [ + "/properties/PrivateIpAddress", + "/properties/InterfaceType", + "/properties/SubnetId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/SecondaryPrivateIpAddresses", + "/properties/PrimaryPrivateIpAddress", + "/properties/PrimaryIpv6Address", + "/properties/VpcId" + ], + "conditionalCreateOnlyProperties": [ + "/properties/PrivateIpAddresses", + "/properties/EnablePrimaryIpv6", + "/properties/ConnectionTrackingSpecification" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateNetworkInterface", + "ec2:DescribeNetworkInterfaces", + "ec2:CreateTags", + "ec2:ModifyNetworkInterfaceAttribute" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeNetworkInterfaces", + "ec2:DeleteNetworkInterface" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNetworkInterfaces" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNetworkInterfaces" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeNetworkInterfaces", + "ec2:ModifyNetworkInterfaceAttribute", + "ec2:UnassignIpv6Addresses", + "ec2:AssignIpv6Addresses", + "ec2:DeleteTags", + "ec2:CreateTags", + "ec2:UnassignPrivateIpAddresses", + "ec2:AssignPrivateIpAddresses" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkinterfaceattachment.json b/internal/aws/cfn/schemas/aws/ec2/networkinterfaceattachment.json new file mode 100644 index 00000000..a5b06e51 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkinterfaceattachment.json @@ -0,0 +1,113 @@ +{ + "typeName": "AWS::EC2::NetworkInterfaceAttachment", + "description": "Resource Type definition for AWS::EC2::NetworkInterfaceAttachment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "properties": { + "AttachmentId": { + "description": "The ID of the network interface attachment.", + "type": "string" + }, + "DeleteOnTermination": { + "description": "Whether to delete the network interface when the instance terminates. By default, this value is set to true.", + "type": "boolean", + "default": true + }, + "DeviceIndex": { + "description": "The network interface's position in the attachment order. For example, the first attached network interface has a DeviceIndex of 0.", + "type": "string" + }, + "InstanceId": { + "description": "The ID of the instance to which you will attach the ENI.", + "type": "string" + }, + "NetworkInterfaceId": { + "description": "The ID of the ENI that you want to attach.", + "type": "string" + }, + "EnaSrdSpecification": { + "$ref": "#/definitions/EnaSrdSpecification" + } + }, + "additionalProperties": false, + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "DeviceIndex", + "InstanceId", + "NetworkInterfaceId" + ], + "readOnlyProperties": [ + "/properties/AttachmentId" + ], + "createOnlyProperties": [ + "/properties/DeviceIndex", + "/properties/InstanceId", + "/properties/NetworkInterfaceId" + ], + "primaryIdentifier": [ + "/properties/AttachmentId" + ], + "additionalIdentifiers": [ + [ + "/properties/NetworkInterfaceId" + ] + ], + "definitions": { + "EnaSrdSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "EnaSrdEnabled": { + "type": "boolean" + }, + "EnaSrdUdpSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "EnaSrdUdpEnabled": { + "type": "boolean" + } + } + } + } + } + }, + "handlers": { + "create": { + "permissions": [ + "ec2:AttachNetworkInterface", + "ec2:DescribeNetworkInterfaces", + "ec2:ModifyNetworkInterfaceAttribute" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNetworkInterfaces" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNetworkInterfaces" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyNetworkInterfaceAttribute", + "ec2:DescribeNetworkInterfaces", + "ec2:AttachNetworkInterface", + "ec2:DetachNetworkInterface" + ] + }, + "delete": { + "permissions": [ + "ec2:DetachNetworkInterface", + "ec2:DescribeNetworkInterfaces" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkinterfacepermission.json b/internal/aws/cfn/schemas/aws/ec2/networkinterfacepermission.json new file mode 100644 index 00000000..09a0e533 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkinterfacepermission.json @@ -0,0 +1,35 @@ +{ + "typeName": "AWS::EC2::NetworkInterfacePermission", + "description": "Resource Type definition for AWS::EC2::NetworkInterfacePermission", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "AwsAccountId": { + "type": "string" + }, + "NetworkInterfaceId": { + "type": "string" + }, + "Permission": { + "type": "string" + } + }, + "required": [ + "AwsAccountId", + "NetworkInterfaceId", + "Permission" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/Permission", + "/properties/NetworkInterfaceId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/networkperformancemetricsubscription.json b/internal/aws/cfn/schemas/aws/ec2/networkperformancemetricsubscription.json new file mode 100644 index 00000000..a4d24e03 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/networkperformancemetricsubscription.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::EC2::NetworkPerformanceMetricSubscription", + "description": "Resource Type definition for AWS::EC2::NetworkPerformanceMetricSubscription", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": {}, + "properties": { + "Source": { + "description": "The starting Region or Availability Zone for metric to subscribe to.", + "type": "string" + }, + "Destination": { + "description": "The target Region or Availability Zone for the metric to subscribe to.", + "type": "string" + }, + "Metric": { + "description": "The metric type to subscribe to.", + "type": "string" + }, + "Statistic": { + "description": "The statistic to subscribe to.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Source", + "Destination", + "Metric", + "Statistic" + ], + "createOnlyProperties": [ + "/properties/Source", + "/properties/Destination", + "/properties/Metric", + "/properties/Statistic" + ], + "primaryIdentifier": [ + "/properties/Source", + "/properties/Destination", + "/properties/Metric", + "/properties/Statistic" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeAwsNetworkPerformanceMetricSubscriptions", + "ec2:EnableAwsNetworkPerformanceMetricSubscription" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeAwsNetworkPerformanceMetricSubscriptions" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeAwsNetworkPerformanceMetricSubscriptions", + "ec2:DisableAwsNetworkPerformanceMetricSubscription" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeAwsNetworkPerformanceMetricSubscriptions" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/placementgroup.json b/internal/aws/cfn/schemas/aws/ec2/placementgroup.json new file mode 100644 index 00000000..4613c554 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/placementgroup.json @@ -0,0 +1,100 @@ +{ + "typeName": "AWS::EC2::PlacementGroup", + "description": "Resource Type definition for AWS::EC2::PlacementGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Strategy": { + "description": "The placement strategy.", + "type": "string" + }, + "GroupName": { + "description": "The Group Name of Placement Group.", + "type": "string" + }, + "SpreadLevel": { + "description": "The Spread Level of Placement Group is an enum where it accepts either host or rack when strategy is spread", + "type": "string" + }, + "PartitionCount": { + "description": "The number of partitions. Valid only when **Strategy** is set to `partition`", + "type": "integer" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Tags", + "/properties/Strategy", + "/properties/SpreadLevel", + "/properties/PartitionCount" + ], + "primaryIdentifier": [ + "/properties/GroupName" + ], + "readOnlyProperties": [ + "/properties/GroupName" + ], + "tagging": { + "taggable": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreatePlacementGroup", + "ec2:DescribePlacementGroups", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribePlacementGroups" + ] + }, + "delete": { + "permissions": [ + "ec2:DeletePlacementGroup", + "ec2:DescribePlacementGroups" + ] + }, + "list": { + "permissions": [ + "ec2:DescribePlacementGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/prefixlist.json b/internal/aws/cfn/schemas/aws/ec2/prefixlist.json new file mode 100644 index 00000000..0d849e60 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/prefixlist.json @@ -0,0 +1,151 @@ +{ + "typeName": "AWS::EC2::PrefixList", + "description": "Resource schema of AWS::EC2::PrefixList Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "Entry": { + "type": "object", + "properties": { + "Cidr": { + "type": "string", + "minLength": 1, + "maxLength": 46 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 255 + } + }, + "required": [ + "Cidr" + ], + "additionalProperties": false + } + }, + "properties": { + "PrefixListName": { + "description": "Name of Prefix List.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "PrefixListId": { + "description": "Id of Prefix List.", + "type": "string" + }, + "OwnerId": { + "description": "Owner Id of Prefix List.", + "type": "string" + }, + "AddressFamily": { + "description": "Ip Version of Prefix List.", + "type": "string", + "enum": [ + "IPv4", + "IPv6" + ] + }, + "MaxEntries": { + "description": "Max Entries of Prefix List.", + "type": "integer", + "minimum": 1 + }, + "Version": { + "description": "Version of Prefix List.", + "type": "integer" + }, + "Tags": { + "description": "Tags for Prefix List", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Entries": { + "description": "Entries of Prefix List.", + "type": "array", + "items": { + "$ref": "#/definitions/Entry" + } + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the Prefix List.", + "type": "string" + } + }, + "required": [ + "PrefixListName", + "AddressFamily" + ], + "readOnlyProperties": [ + "/properties/PrefixListId", + "/properties/OwnerId", + "/properties/Version", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/PrefixListId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true + }, + "handlers": { + "create": { + "permissions": [ + "EC2:CreateManagedPrefixList", + "EC2:DescribeManagedPrefixLists", + "EC2:CreateTags" + ] + }, + "read": { + "permissions": [ + "EC2:GetManagedPrefixListEntries", + "EC2:DescribeManagedPrefixLists" + ] + }, + "update": { + "permissions": [ + "EC2:DescribeManagedPrefixLists", + "EC2:GetManagedPrefixListEntries", + "EC2:ModifyManagedPrefixList", + "EC2:CreateTags", + "EC2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "EC2:DeleteManagedPrefixList", + "EC2:DescribeManagedPrefixLists" + ] + }, + "list": { + "permissions": [ + "EC2:DescribeManagedPrefixLists", + "EC2:GetManagedPrefixListEntries" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ec2/route.json b/internal/aws/cfn/schemas/aws/ec2/route.json new file mode 100644 index 00000000..89fbea58 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/route.json @@ -0,0 +1,133 @@ +{ + "typeName": "AWS::EC2::Route", + "description": "Resource Type definition for AWS::EC2::Route", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "additionalProperties": false, + "properties": { + "CarrierGatewayId": { + "type": "string", + "description": "The ID of the carrier gateway." + }, + "CidrBlock": { + "type": "string", + "description": "The primary identifier of the resource generated by the service." + }, + "CoreNetworkArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the core network." + }, + "DestinationCidrBlock": { + "type": "string", + "description": "The IPv4 CIDR block used for the destination match." + }, + "DestinationIpv6CidrBlock": { + "type": "string", + "description": "The IPv6 CIDR block used for the destination match." + }, + "DestinationPrefixListId": { + "type": "string", + "description": "The ID of managed prefix list, it's a set of one or more CIDR blocks." + }, + "EgressOnlyInternetGatewayId": { + "type": "string", + "description": "The ID of the egress-only internet gateway." + }, + "GatewayId": { + "type": "string", + "description": "The ID of an internet gateway or virtual private gateway attached to your VPC." + }, + "InstanceId": { + "type": "string", + "description": "The ID of a NAT instance in your VPC." + }, + "LocalGatewayId": { + "type": "string", + "description": "The ID of the local gateway." + }, + "NatGatewayId": { + "type": "string", + "description": "The ID of a NAT gateway." + }, + "NetworkInterfaceId": { + "type": "string", + "description": "The ID of the network interface." + }, + "RouteTableId": { + "type": "string", + "description": "The ID of the route table. The routing table must be associated with the same VPC that the virtual private gateway is attached to." + }, + "TransitGatewayId": { + "type": "string", + "description": "The ID of a transit gateway." + }, + "VpcEndpointId": { + "type": "string", + "description": "The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints only." + }, + "VpcPeeringConnectionId": { + "type": "string", + "description": "The ID of a VPC peering connection." + } + }, + "tagging": { + "taggable": false + }, + "required": [ + "RouteTableId" + ], + "readOnlyProperties": [ + "/properties/CidrBlock" + ], + "createOnlyProperties": [ + "/properties/RouteTableId", + "/properties/DestinationCidrBlock", + "/properties/DestinationIpv6CidrBlock", + "/properties/DestinationPrefixListId" + ], + "primaryIdentifier": [ + "/properties/RouteTableId", + "/properties/CidrBlock" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateRoute", + "ec2:DescribeRouteTables", + "ec2:DescribeNetworkInterfaces" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeRouteTables" + ] + }, + "update": { + "permissions": [ + "ec2:ReplaceRoute", + "ec2:DescribeRouteTables", + "ec2:DescribeNetworkInterfaces" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteRoute", + "ec2:DescribeRouteTables" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeRouteTables" + ], + "handlerSchema": { + "properties": { + "RouteTableId": { + "$ref": "resource-schema.json#/properties/RouteTableId" + } + }, + "required": [ + "RouteTableId" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/routetable.json b/internal/aws/cfn/schemas/aws/ec2/routetable.json new file mode 100644 index 00000000..614a8144 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/routetable.json @@ -0,0 +1,97 @@ +{ + "typeName": "AWS::EC2::RouteTable", + "description": "Specifies a route table for the specified VPC. After you create a route table, you can add routes and associate the table with a subnet.\n For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the *Amazon VPC User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The tag key." + }, + "Value": { + "type": "string", + "description": "The tag value." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "properties": { + "RouteTableId": { + "description": "", + "type": "string" + }, + "Tags": { + "description": "Any tags assigned to the route table.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VpcId": { + "description": "The ID of the VPC.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "VpcId" + ], + "createOnlyProperties": [ + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/RouteTableId" + ], + "primaryIdentifier": [ + "/properties/RouteTableId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateRouteTable", + "ec2:CreateTags", + "ec2:DescribeRouteTables" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeRouteTables" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeRouteTables" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeRouteTables", + "ec2:DeleteRouteTable" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeRouteTables" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/securitygroup.json b/internal/aws/cfn/schemas/aws/ec2/securitygroup.json new file mode 100644 index 00000000..d12060c2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/securitygroup.json @@ -0,0 +1,215 @@ +{ + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": true + }, + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json", + "deprecatedProperties": [ + "/properties/SecurityGroupEgress/*/SourceSecurityGroupId" + ], + "typeName": "AWS::EC2::SecurityGroup", + "readOnlyProperties": [ + "/properties/Id", + "/properties/GroupId" + ], + "description": "Resource Type definition for AWS::EC2::SecurityGroup", + "createOnlyProperties": [ + "/properties/GroupDescription", + "/properties/GroupName", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "required": [ + "GroupDescription" + ], + "handlers": { + "read": { + "permissions": [ + "ec2:DescribeSecurityGroups" + ] + }, + "create": { + "permissions": [ + "ec2:CreateSecurityGroup", + "ec2:DescribeSecurityGroups", + "ec2:RevokeSecurityGroupEgress", + "ec2:AuthorizeSecurityGroupEgress", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:CreateTags" + ] + }, + "update": { + "permissions": [ + "ec2:RevokeSecurityGroupEgress", + "ec2:RevokeSecurityGroupIngress", + "ec2:DescribeSecurityGroups", + "ec2:AuthorizeSecurityGroupEgress", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeSecurityGroups" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteSecurityGroup", + "ec2:DescribeInstances" + ] + } + }, + "writeOnlyProperties": [ + "/properties/SecurityGroupIngress/*/SourceSecurityGroupName" + ], + "additionalProperties": false, + "definitions": { + "Ingress": { + "additionalProperties": false, + "type": "object", + "properties": { + "CidrIp": { + "type": "string" + }, + "CidrIpv6": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "FromPort": { + "type": "integer" + }, + "SourceSecurityGroupName": { + "type": "string" + }, + "ToPort": { + "type": "integer" + }, + "SourceSecurityGroupOwnerId": { + "type": "string" + }, + "IpProtocol": { + "type": "string" + }, + "SourceSecurityGroupId": { + "type": "string" + }, + "SourcePrefixListId": { + "type": "string" + } + }, + "required": [ + "IpProtocol" + ] + }, + "Egress": { + "additionalProperties": false, + "type": "object", + "properties": { + "CidrIp": { + "type": "string" + }, + "CidrIpv6": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "FromPort": { + "type": "integer" + }, + "ToPort": { + "type": "integer" + }, + "IpProtocol": { + "type": "string" + }, + "DestinationSecurityGroupId": { + "type": "string" + }, + "DestinationPrefixListId": { + "type": "string" + }, + "SourceSecurityGroupId": { + "type": "string" + } + }, + "required": [ + "IpProtocol" + ] + }, + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "GroupDescription": { + "description": "A description for the security group.", + "type": "string" + }, + "GroupName": { + "description": "The name of the security group.", + "type": "string" + }, + "VpcId": { + "description": "The ID of the VPC for the security group.", + "type": "string" + }, + "Id": { + "description": "The group name or group ID depending on whether the SG is created in default or specific VPC", + "type": "string" + }, + "SecurityGroupIngress": { + "uniqueItems": false, + "description": "The inbound rules associated with the security group. There is a short interruption during which you cannot connect to the security group.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Ingress" + } + }, + "SecurityGroupEgress": { + "uniqueItems": false, + "description": "[VPC only] The outbound rules associated with the security group. There is a short interruption during which you cannot connect to the security group.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Egress" + } + }, + "Tags": { + "uniqueItems": false, + "description": "Any tags assigned to the security group.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "GroupId": { + "description": "The group ID of the specified security group.", + "type": "string" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/securitygroupegress.json b/internal/aws/cfn/schemas/aws/ec2/securitygroupegress.json new file mode 100644 index 00000000..bc8689da --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/securitygroupegress.json @@ -0,0 +1,104 @@ +{ + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "read": { + "permissions": [ + "ec2:DescribeSecurityGroupRules" + ] + }, + "create": { + "permissions": [ + "ec2:AuthorizeSecurityGroupEgress", + "ec2:RevokeSecurityGroupEgress", + "ec2:DescribeSecurityGroupRules" + ] + }, + "update": { + "permissions": [ + "ec2:UpdateSecurityGroupRuleDescriptionsEgress" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeSecurityGroupRules" + ] + }, + "delete": { + "permissions": [ + "ec2:RevokeSecurityGroupEgress", + "ec2:DescribeSecurityGroupRules" + ] + } + }, + "typeName": "AWS::EC2::SecurityGroupEgress", + "readOnlyProperties": [ + "/properties/Id" + ], + "description": "Adds the specified outbound (egress) rule to a security group.\n An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 address range, the IP addresses that are specified by a prefix list, or the instances that are associated with a destination security group. For more information, see [Security group rules](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html).\n You must specify exactly one of the following destinations: an IPv4 or IPv6 address range, a prefix list, or a security group. Otherwise, the stack launches successfully but the rule is not added to the security group.\n You must specify a protocol for each rule (for example, TCP). If the protocol is TCP or UDP, you must also specify a port or port range. If the protocol is ICMP or ICMPv6, you must also specify the ICMP/ICMPv6 type and code. To specify all types or all codes, use -1.\n Rule changes are propagated to instances associated with the security group as quickly as possible", + "createOnlyProperties": [ + "/properties/IpProtocol", + "/properties/DestinationSecurityGroupId", + "/properties/ToPort", + "/properties/CidrIp", + "/properties/FromPort", + "/properties/GroupId", + "/properties/CidrIpv6", + "/properties/DestinationPrefixListId" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Id" + ], + "required": [ + "IpProtocol", + "GroupId" + ], + "properties": { + "CidrIp": { + "description": "The IPv4 address range, in CIDR format.\n You must specify a destination security group (``DestinationPrefixListId`` or ``DestinationSecurityGroupId``) or a CIDR range (``CidrIp`` or ``CidrIpv6``).\n For examples of rules that you can add to security groups for specific access scenarios, see [Security group rules for different use cases](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html) in the *User Guide*.", + "type": "string" + }, + "CidrIpv6": { + "description": "The IPv6 address range, in CIDR format.\n You must specify a destination security group (``DestinationPrefixListId`` or ``DestinationSecurityGroupId``) or a CIDR range (``CidrIp`` or ``CidrIpv6``).\n For examples of rules that you can add to security groups for specific access scenarios, see [Security group rules for different use cases](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html) in the *User Guide*.", + "type": "string" + }, + "Description": { + "description": "The description of an egress (outbound) security group rule.\n Constraints: Up to 255 characters in length. Allowed characters are a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$*", + "type": "string" + }, + "FromPort": { + "description": "If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP or ICMPv6, this is the ICMP type or -1 (all ICMP types).", + "type": "integer" + }, + "ToPort": { + "description": "If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP or ICMPv6, this is the ICMP code or -1 (all ICMP codes). If the start port is -1 (all ICMP types), then the end port must be -1 (all ICMP codes).", + "type": "integer" + }, + "IpProtocol": { + "description": "The IP protocol name (``tcp``, ``udp``, ``icmp``, ``icmpv6``) or number (see [Protocol Numbers](https://docs.aws.amazon.com/http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)).\n Use ``-1`` to specify all protocols. When authorizing security group rules, specifying ``-1`` or a protocol number other than ``tcp``, ``udp``, ``icmp``, or ``icmpv6`` allows traffic on all ports, regardless of any port range you specify. For ``tcp``, ``udp``, and ``icmp``, you must specify a port range. For ``icmpv6``, the port range is optional; if you omit the port range, traffic for all types and codes is allowed.", + "type": "string" + }, + "DestinationSecurityGroupId": { + "description": "The ID of the security group.\n You must specify a destination security group (``DestinationPrefixListId`` or ``DestinationSecurityGroupId``) or a CIDR range (``CidrIp`` or ``CidrIpv6``).", + "type": "string" + }, + "Id": { + "description": "", + "type": "string" + }, + "DestinationPrefixListId": { + "description": "The prefix list IDs for an AWS service. This is the AWS service that you want to access through a VPC endpoint from instances associated with the security group.\n You must specify a destination security group (``DestinationPrefixListId`` or ``DestinationSecurityGroupId``) or a CIDR range (``CidrIp`` or ``CidrIpv6``).", + "type": "string" + }, + "GroupId": { + "description": "The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.", + "type": "string" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/securitygroupingress.json b/internal/aws/cfn/schemas/aws/ec2/securitygroupingress.json new file mode 100644 index 00000000..98641b08 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/securitygroupingress.json @@ -0,0 +1,118 @@ +{ + "typeName": "AWS::EC2::SecurityGroupIngress", + "description": "Resource Type definition for AWS::EC2::SecurityGroupIngress", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "additionalProperties": false, + "properties": { + "Id": { + "description": "The Security Group Rule Id", + "type": "string" + }, + "CidrIp": { + "description": "The IPv4 ranges", + "type": "string" + }, + "CidrIpv6": { + "description": "[VPC only] The IPv6 ranges", + "type": "string" + }, + "Description": { + "description": "Updates the description of an ingress (inbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously", + "type": "string" + }, + "FromPort": { + "description": "The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number. A value of -1 indicates all ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all codes.\n\nUse this for ICMP and any protocol that uses ports.", + "type": "integer" + }, + "GroupId": { + "description": "The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID.\n\nYou must specify the GroupName property or the GroupId property. For security groups that are in a VPC, you must use the GroupId property.", + "type": "string" + }, + "GroupName": { + "description": "The name of the security group.", + "type": "string" + }, + "IpProtocol": { + "description": "The IP protocol name (tcp, udp, icmp, icmpv6) or number (see Protocol Numbers).\n\n[VPC only] Use -1 to specify all protocols. When authorizing security group rules, specifying -1 or a protocol number other than tcp, udp, icmp, or icmpv6 allows traffic on all ports, regardless of any port range you specify. For tcp, udp, and icmp, you must specify a port range. For icmpv6, the port range is optional; if you omit the port range, traffic for all types and codes is allowed.", + "type": "string" + }, + "SourcePrefixListId": { + "description": "[EC2-VPC only] The ID of a prefix list.\n\n", + "type": "string" + }, + "SourceSecurityGroupId": { + "description": "The ID of the security group. You must specify either the security group ID or the security group name. For security groups in a nondefault VPC, you must specify the security group ID.", + "type": "string" + }, + "SourceSecurityGroupName": { + "description": "[EC2-Classic, default VPC] The name of the source security group.\n\nYou must specify the GroupName property or the GroupId property. For security groups that are in a VPC, you must use the GroupId property.", + "type": "string" + }, + "SourceSecurityGroupOwnerId": { + "description": "[nondefault VPC] The AWS account ID that owns the source security group. You can't specify this property with an IP address range.\n\nIf you specify SourceSecurityGroupName or SourceSecurityGroupId and that security group is owned by a different account than the account creating the stack, you must specify the SourceSecurityGroupOwnerId; otherwise, this property is optional.", + "type": "string" + }, + "ToPort": { + "description": "The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. A value of -1 indicates all ICMP/ICMPv6 codes for the specified ICMP type. If you specify all ICMP/ICMPv6 types, you must specify all codes.\n\nUse this for ICMP and any protocol that uses ports.", + "type": "integer" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "IpProtocol" + ], + "createOnlyProperties": [ + "/properties/GroupName", + "/properties/IpProtocol", + "/properties/SourceSecurityGroupId", + "/properties/SourcePrefixListId", + "/properties/ToPort", + "/properties/CidrIp", + "/properties/SourceSecurityGroupName", + "/properties/SourceSecurityGroupOwnerId", + "/properties/FromPort", + "/properties/GroupId", + "/properties/CidrIpv6" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeSecurityGroupRules", + "ec2:AuthorizeSecurityGroupIngress" + ] + }, + "update": { + "permissions": [ + "ec2:UpdateSecurityGroupRuleDescriptionsIngress" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeSecurityGroupRules", + "ec2:RevokeSecurityGroupIngress" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeSecurityGroups", + "ec2:DescribeSecurityGroupRules" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeSecurityGroupRules" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/spotfleet.json b/internal/aws/cfn/schemas/aws/ec2/spotfleet.json new file mode 100644 index 00000000..8a3a9e73 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/spotfleet.json @@ -0,0 +1,979 @@ +{ + "typeName": "AWS::EC2::SpotFleet", + "description": "Resource Type definition for AWS::EC2::SpotFleet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SpotFleetRequestConfigData": { + "$ref": "#/definitions/SpotFleetRequestConfigData" + } + }, + "definitions": { + "SpotFleetRequestConfigData": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllocationStrategy": { + "type": "string", + "enum": [ + "capacityOptimized", + "capacityOptimizedPrioritized", + "diversified", + "lowestPrice", + "priceCapacityOptimized" + ] + }, + "Context": { + "type": "string" + }, + "ExcessCapacityTerminationPolicy": { + "type": "string", + "enum": [ + "Default", + "NoTermination", + "default", + "noTermination" + ] + }, + "IamFleetRole": { + "type": "string" + }, + "InstanceInterruptionBehavior": { + "type": "string", + "enum": [ + "hibernate", + "stop", + "terminate" + ] + }, + "InstancePoolsToUseCount": { + "type": "integer" + }, + "LaunchSpecifications": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SpotFleetLaunchSpecification" + } + }, + "LaunchTemplateConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LaunchTemplateConfig" + } + }, + "LoadBalancersConfig": { + "$ref": "#/definitions/LoadBalancersConfig" + }, + "OnDemandAllocationStrategy": { + "type": "string" + }, + "OnDemandMaxTotalPrice": { + "type": "string" + }, + "OnDemandTargetCapacity": { + "type": "integer" + }, + "ReplaceUnhealthyInstances": { + "type": "boolean" + }, + "SpotMaintenanceStrategies": { + "$ref": "#/definitions/SpotMaintenanceStrategies" + }, + "SpotMaxTotalPrice": { + "type": "string" + }, + "SpotPrice": { + "type": "string" + }, + "TargetCapacity": { + "type": "integer" + }, + "TerminateInstancesWithExpiration": { + "type": "boolean" + }, + "Type": { + "type": "string", + "enum": [ + "maintain", + "request" + ] + }, + "ValidFrom": { + "type": "string" + }, + "ValidUntil": { + "type": "string" + }, + "TagSpecifications": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SpotFleetTagSpecification" + } + }, + "TargetCapacityUnitType": { + "type": "string", + "enum": [ + "vcpu", + "memory-mib", + "units" + ] + } + }, + "required": [ + "IamFleetRole", + "TargetCapacity" + ] + }, + "SpotFleetLaunchSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "BlockDeviceMappings": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/BlockDeviceMapping" + } + }, + "EbsOptimized": { + "type": "boolean", + "default": false + }, + "IamInstanceProfile": { + "$ref": "#/definitions/IamInstanceProfileSpecification" + }, + "ImageId": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "KernelId": { + "type": "string" + }, + "KeyName": { + "type": "string" + }, + "Monitoring": { + "$ref": "#/definitions/SpotFleetMonitoring" + }, + "NetworkInterfaces": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InstanceNetworkInterfaceSpecification" + } + }, + "Placement": { + "$ref": "#/definitions/SpotPlacement" + }, + "RamdiskId": { + "type": "string" + }, + "SecurityGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/GroupIdentifier" + } + }, + "SpotPrice": { + "type": "string" + }, + "SubnetId": { + "type": "string" + }, + "TagSpecifications": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SpotFleetTagSpecification" + } + }, + "UserData": { + "type": "string" + }, + "WeightedCapacity": { + "type": "number" + }, + "InstanceRequirements": { + "$ref": "#/definitions/InstanceRequirementsRequest" + } + }, + "required": [ + "ImageId" + ] + }, + "LoadBalancersConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClassicLoadBalancersConfig": { + "$ref": "#/definitions/ClassicLoadBalancersConfig" + }, + "TargetGroupsConfig": { + "$ref": "#/definitions/TargetGroupsConfig" + } + } + }, + "SpotMaintenanceStrategies": { + "type": "object", + "additionalProperties": false, + "properties": { + "CapacityRebalance": { + "$ref": "#/definitions/SpotCapacityRebalance" + } + } + }, + "SpotCapacityRebalance": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReplacementStrategy": { + "type": "string", + "enum": [ + "launch", + "launch-before-terminate" + ] + }, + "TerminationDelay": { + "type": "integer" + } + } + }, + "LaunchTemplateConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateSpecification": { + "$ref": "#/definitions/FleetLaunchTemplateSpecification" + }, + "Overrides": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LaunchTemplateOverrides" + } + } + } + }, + "SpotFleetTagSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceType": { + "type": "string", + "enum": [ + "client-vpn-endpoint", + "customer-gateway", + "dedicated-host", + "dhcp-options", + "egress-only-internet-gateway", + "elastic-gpu", + "elastic-ip", + "export-image-task", + "export-instance-task", + "fleet", + "fpga-image", + "host-reservation", + "image", + "import-image-task", + "import-snapshot-task", + "instance", + "internet-gateway", + "key-pair", + "launch-template", + "local-gateway-route-table-vpc-association", + "natgateway", + "network-acl", + "network-insights-analysis", + "network-insights-path", + "network-interface", + "placement-group", + "reserved-instances", + "route-table", + "security-group", + "snapshot", + "spot-fleet-request", + "spot-instances-request", + "subnet", + "traffic-mirror-filter", + "traffic-mirror-session", + "traffic-mirror-target", + "transit-gateway", + "transit-gateway-attachment", + "transit-gateway-connect-peer", + "transit-gateway-multicast-domain", + "transit-gateway-route-table", + "volume", + "vpc", + "vpc-flow-log", + "vpc-peering-connection", + "vpn-connection", + "vpn-gateway" + ] + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + } + }, + "FleetLaunchTemplateSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateId": { + "type": "string" + }, + "LaunchTemplateName": { + "type": "string", + "minLength": 3, + "maxLength": 128, + "pattern": "[a-zA-Z0-9\\(\\)\\.\\-/_]+" + }, + "Version": { + "type": "string" + } + }, + "required": [ + "Version" + ] + }, + "GroupIdentifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "GroupId": { + "type": "string" + } + }, + "required": [ + "GroupId" + ] + }, + "IamInstanceProfileSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + } + } + }, + "ClassicLoadBalancersConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClassicLoadBalancers": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ClassicLoadBalancer" + } + } + }, + "required": [ + "ClassicLoadBalancers" + ] + }, + "LaunchTemplateOverrides": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailabilityZone": { + "type": "string" + }, + "InstanceType": { + "type": "string" + }, + "SpotPrice": { + "type": "string" + }, + "SubnetId": { + "type": "string" + }, + "WeightedCapacity": { + "type": "number" + }, + "InstanceRequirements": { + "$ref": "#/definitions/InstanceRequirementsRequest" + }, + "Priority": { + "type": "number" + } + } + }, + "SpotFleetMonitoring": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean", + "default": false + } + } + }, + "SpotPlacement": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailabilityZone": { + "type": "string" + }, + "GroupName": { + "type": "string" + }, + "Tenancy": { + "type": "string", + "enum": [ + "dedicated", + "default", + "host" + ] + } + } + }, + "InstanceNetworkInterfaceSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "AssociatePublicIpAddress": { + "type": "boolean" + }, + "DeleteOnTermination": { + "type": "boolean" + }, + "Description": { + "type": "string" + }, + "DeviceIndex": { + "type": "integer" + }, + "Groups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Ipv6AddressCount": { + "type": "integer" + }, + "Ipv6Addresses": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InstanceIpv6Address" + } + }, + "NetworkInterfaceId": { + "type": "string" + }, + "PrivateIpAddresses": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/PrivateIpAddressSpecification" + } + }, + "SecondaryPrivateIpAddressCount": { + "type": "integer" + }, + "SubnetId": { + "type": "string" + } + } + }, + "BlockDeviceMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeviceName": { + "type": "string" + }, + "Ebs": { + "$ref": "#/definitions/EbsBlockDevice" + }, + "NoDevice": { + "type": "string" + }, + "VirtualName": { + "type": "string" + } + }, + "required": [ + "DeviceName" + ] + }, + "TargetGroupsConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TargetGroup" + } + } + }, + "required": [ + "TargetGroups" + ] + }, + "EbsBlockDevice": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeleteOnTermination": { + "type": "boolean" + }, + "Encrypted": { + "type": "boolean" + }, + "Iops": { + "type": "integer" + }, + "SnapshotId": { + "type": "string" + }, + "VolumeSize": { + "type": "integer" + }, + "VolumeType": { + "type": "string", + "enum": [ + "gp2", + "gp3", + "io1", + "io2", + "sc1", + "st1", + "standard" + ] + } + } + }, + "TargetGroup": { + "type": "object", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + } + }, + "required": [ + "Arn" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "PrivateIpAddressSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "Primary": { + "type": "boolean" + }, + "PrivateIpAddress": { + "type": "string" + } + }, + "required": [ + "PrivateIpAddress" + ] + }, + "ClassicLoadBalancer": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "InstanceIpv6Address": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ipv6Address": { + "type": "string" + } + }, + "required": [ + "Ipv6Address" + ] + }, + "InstanceRequirementsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "VCpuCount": { + "$ref": "#/definitions/VCpuCountRangeRequest" + }, + "MemoryMiB": { + "$ref": "#/definitions/MemoryMiBRequest" + }, + "CpuManufacturers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "intel", + "amd", + "amazon-web-services" + ] + } + }, + "MemoryGiBPerVCpu": { + "$ref": "#/definitions/MemoryGiBPerVCpuRequest" + }, + "AllowedInstanceTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 30, + "pattern": "[a-zA-Z0-9\\.\\*]+" + } + }, + "ExcludedInstanceTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 30, + "pattern": "[a-zA-Z0-9\\.\\*]+" + } + }, + "InstanceGenerations": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "current", + "previous" + ] + } + }, + "SpotMaxPricePercentageOverLowestPrice": { + "type": "integer" + }, + "OnDemandMaxPricePercentageOverLowestPrice": { + "type": "integer" + }, + "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice": { + "type": "integer" + }, + "BareMetal": { + "type": "string", + "enum": [ + "included", + "required", + "excluded" + ] + }, + "BurstablePerformance": { + "type": "string", + "enum": [ + "included", + "required", + "excluded" + ] + }, + "RequireHibernateSupport": { + "type": "boolean" + }, + "NetworkBandwidthGbps": { + "$ref": "#/definitions/NetworkBandwidthGbpsRequest" + }, + "NetworkInterfaceCount": { + "$ref": "#/definitions/NetworkInterfaceCountRequest" + }, + "LocalStorage": { + "type": "string", + "enum": [ + "included", + "required", + "excluded" + ] + }, + "LocalStorageTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "hdd", + "ssd" + ] + } + }, + "TotalLocalStorageGB": { + "$ref": "#/definitions/TotalLocalStorageGBRequest" + }, + "BaselineEbsBandwidthMbps": { + "$ref": "#/definitions/BaselineEbsBandwidthMbpsRequest" + }, + "AcceleratorTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "gpu", + "fpga", + "inference" + ] + } + }, + "AcceleratorCount": { + "$ref": "#/definitions/AcceleratorCountRequest" + }, + "AcceleratorManufacturers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "amazon-web-services", + "amd", + "habana", + "nvidia", + "xilinx" + ] + } + }, + "AcceleratorNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "enum": [ + "a10g", + "a100", + "h100", + "inferentia", + "k520", + "k80", + "m60", + "radeon-pro-v520", + "t4", + "t4g", + "vu9p", + "v100" + ] + } + }, + "AcceleratorTotalMemoryMiB": { + "$ref": "#/definitions/AcceleratorTotalMemoryMiBRequest" + } + } + }, + "VCpuCountRangeRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "MemoryMiBRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "MemoryGiBPerVCpuRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + } + } + }, + "NetworkBandwidthGbpsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + } + } + }, + "NetworkInterfaceCountRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "TotalLocalStorageGBRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + } + } + }, + "BaselineEbsBandwidthMbpsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "AcceleratorCountRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + }, + "AcceleratorTotalMemoryMiBRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "Min": { + "type": "integer" + }, + "Max": { + "type": "integer" + } + } + } + }, + "required": [ + "SpotFleetRequestConfigData" + ], + "createOnlyProperties": [ + "/properties/SpotFleetRequestConfigData/AllocationStrategy", + "/properties/SpotFleetRequestConfigData/IamFleetRole", + "/properties/SpotFleetRequestConfigData/InstanceInterruptionBehavior", + "/properties/SpotFleetRequestConfigData/InstancePoolsToUseCount", + "/properties/SpotFleetRequestConfigData/LaunchSpecifications", + "/properties/SpotFleetRequestConfigData/LaunchTemplateConfigs", + "/properties/SpotFleetRequestConfigData/LoadBalancersConfig", + "/properties/SpotFleetRequestConfigData/OnDemandAllocationStrategy", + "/properties/SpotFleetRequestConfigData/OnDemandMaxTotalPrice", + "/properties/SpotFleetRequestConfigData/OnDemandTargetCapacity", + "/properties/SpotFleetRequestConfigData/ReplaceUnhealthyInstances", + "/properties/SpotFleetRequestConfigData/SpotMaintenanceStrategies", + "/properties/SpotFleetRequestConfigData/SpotMaxTotalPrice", + "/properties/SpotFleetRequestConfigData/SpotPrice", + "/properties/SpotFleetRequestConfigData/TagSpecifications", + "/properties/SpotFleetRequestConfigData/TerminateInstancesWithExpiration", + "/properties/SpotFleetRequestConfigData/Type", + "/properties/SpotFleetRequestConfigData/ValidFrom", + "/properties/SpotFleetRequestConfigData/ValidUntil" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/SpotFleetRequestConfigData/TagSpecifications", + "/properties/SpotFleetRequestConfigData/LaunchSpecifications/*/NetworkInterfaces/*/Groups" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "ec2:CreateTags", + "ec2:RequestSpotFleet", + "ec2:DescribeSpotFleetRequests", + "ec2:RunInstances" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeSpotFleetRequests", + "ec2:CancelSpotFleetRequests" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeSpotFleetRequests" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeSpotFleetRequests" + ] + }, + "update": { + "permissions": [ + "ec2:ModifySpotFleetRequest", + "ec2:DescribeSpotFleetRequests" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/subnet.json b/internal/aws/cfn/schemas/aws/ec2/subnet.json new file mode 100644 index 00000000..cb028ec1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/subnet.json @@ -0,0 +1,200 @@ +{ + "typeName": "AWS::EC2::Subnet", + "description": "Specifies a subnet for the specified VPC.\n For an IPv4 only subnet, specify an IPv4 CIDR block. If the VPC has an IPv6 CIDR block, you can create an IPv6 only subnet or a dual stack subnet instead. For an IPv6 only subnet, specify an IPv6 CIDR block. For a dual stack subnet, specify both an IPv4 CIDR block and an IPv6 CIDR block.\n For more information, see [Subnets for your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the *Amazon VPC User Guide*.", + "additionalProperties": false, + "properties": { + "AssignIpv6AddressOnCreation": { + "type": "boolean", + "description": "Indicates whether a network interface created in this subnet receives an IPv6 address. The default value is ``false``.\n If you specify ``AssignIpv6AddressOnCreation``, you must also specify an IPv6 CIDR block." + }, + "VpcId": { + "type": "string", + "description": "The ID of the VPC the subnet is in.\n If you update this property, you must also update the ``CidrBlock`` property." + }, + "MapPublicIpOnLaunch": { + "type": "boolean", + "description": "Indicates whether instances launched in this subnet receive a public IPv4 address. The default value is ``false``.\n AWS charges for all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses. For more information, see the *Public IPv4 Address* tab on the [VPC pricing page](https://docs.aws.amazon.com/vpc/pricing/)." + }, + "NetworkAclAssociationId": { + "type": "string", + "description": "" + }, + "AvailabilityZone": { + "type": "string", + "description": "The Availability Zone of the subnet.\n If you update this property, you must also update the ``CidrBlock`` property." + }, + "AvailabilityZoneId": { + "type": "string", + "description": "The AZ ID of the subnet." + }, + "CidrBlock": { + "type": "string", + "description": "The IPv4 CIDR block assigned to the subnet.\n If you update this property, we create a new subnet, and then delete the existing one." + }, + "SubnetId": { + "type": "string", + "description": "" + }, + "Ipv6CidrBlocks": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "The IPv6 network ranges for the subnet, in CIDR notation." + }, + "Ipv6CidrBlock": { + "type": "string", + "description": "The IPv6 CIDR block.\n If you specify ``AssignIpv6AddressOnCreation``, you must also specify an IPv6 CIDR block." + }, + "OutpostArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the Outpost." + }, + "Ipv6Native": { + "type": "boolean", + "description": "Indicates whether this is an IPv6 only subnet. For more information, see [Subnet basics](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#subnet-basics) in the *User Guide*." + }, + "EnableDns64": { + "type": "boolean", + "description": "Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this subnet should return synthetic IPv6 addresses for IPv4-only destinations. For more information, see [DNS64 and NAT64](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-nat64-dns64) in the *User Guide*." + }, + "PrivateDnsNameOptionsOnLaunch": { + "type": "object", + "additionalProperties": false, + "properties": { + "HostnameType": { + "type": "string" + }, + "EnableResourceNameDnsARecord": { + "type": "boolean" + }, + "EnableResourceNameDnsAAAARecord": { + "type": "boolean" + } + }, + "description": "The hostname type for EC2 instances launched into this subnet and how DNS A and AAAA record queries to the instances should be handled. For more information, see [Amazon EC2 instance hostname types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) in the *User Guide*.\n Available options:\n + EnableResourceNameDnsAAAARecord (true | false)\n + EnableResourceNameDnsARecord (true | false)\n + HostnameType (ip-name | resource-name)" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "Any tags assigned to the subnet." + }, + "Ipv4IpamPoolId": { + "type": "string", + "description": "An IPv4 IPAM pool ID for the subnet." + }, + "Ipv4NetmaskLength": { + "type": "integer", + "description": "An IPv4 netmask length for the subnet." + }, + "Ipv6IpamPoolId": { + "type": "string", + "description": "An IPv6 IPAM pool ID for the subnet." + }, + "Ipv6NetmaskLength": { + "type": "integer", + "description": "An IPv6 netmask length for the subnet." + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The tag value." + }, + "Key": { + "type": "string", + "description": "The tag key." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "required": [ + "VpcId" + ], + "createOnlyProperties": [ + "/properties/VpcId", + "/properties/AvailabilityZone", + "/properties/AvailabilityZoneId", + "/properties/CidrBlock", + "/properties/OutpostArn", + "/properties/Ipv6Native", + "/properties/Ipv4IpamPoolId", + "/properties/Ipv4NetmaskLength", + "/properties/Ipv6IpamPoolId", + "/properties/Ipv6NetmaskLength" + ], + "conditionalCreateOnlyProperties": [ + "/properties/Ipv6CidrBlock" + ], + "primaryIdentifier": [ + "/properties/SubnetId" + ], + "readOnlyProperties": [ + "/properties/NetworkAclAssociationId", + "/properties/SubnetId" + ], + "writeOnlyProperties": [ + "/properties/Ipv4IpamPoolId", + "/properties/Ipv4NetmaskLength", + "/properties/Ipv6IpamPoolId", + "/properties/Ipv6NetmaskLength" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeSubnets", + "ec2:CreateSubnet", + "ec2:CreateTags", + "ec2:ModifySubnetAttribute" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeSubnets", + "ec2:DescribeNetworkAcls" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeSubnets", + "ec2:ModifySubnetAttribute", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:AssociateSubnetCidrBlock", + "ec2:DisassociateSubnetCidrBlock" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeSubnets", + "ec2:DeleteSubnet" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeSubnets", + "ec2:DescribeNetworkAcls" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/subnetcidrblock.json b/internal/aws/cfn/schemas/aws/ec2/subnetcidrblock.json new file mode 100644 index 00000000..1d2a733c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/subnetcidrblock.json @@ -0,0 +1,84 @@ +{ + "typeName": "AWS::EC2::SubnetCidrBlock", + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "description": "The AWS::EC2::SubnetCidrBlock resource creates association between subnet and IPv6 CIDR", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/subnetcidrblock", + "additionalProperties": false, + "properties": { + "Id": { + "description": "Information about the IPv6 association.", + "type": "string" + }, + "Ipv6CidrBlock": { + "description": "The IPv6 network range for the subnet, in CIDR notation. The subnet size must use a /64 prefix length", + "type": "string", + "maxLength": 42 + }, + "Ipv6IpamPoolId": { + "description": "The ID of an IPv6 Amazon VPC IP Address Manager (IPAM) pool from which to allocate, to get the subnet's CIDR", + "type": "string" + }, + "Ipv6NetmaskLength": { + "description": "The netmask length of the IPv6 CIDR to allocate to the subnet from an IPAM pool", + "type": "integer", + "minimum": 0, + "maximum": 128 + }, + "SubnetId": { + "description": "The ID of the subnet", + "type": "string" + } + }, + "required": [ + "SubnetId" + ], + "createOnlyProperties": [ + "/properties/Ipv6CidrBlock", + "/properties/SubnetId", + "/properties/Ipv6IpamPoolId", + "/properties/Ipv6NetmaskLength" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/Ipv6IpamPoolId", + "/properties/Ipv6NetmaskLength" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "propertyTransform": { + "/properties/Ipv6CidrBlock": "$join([$match($replace(Ipv6CidrBlock, /(^|:)(0{1,4})([0-9a-fA-F]{1,4})/, \"$1$3\"), /^([0-9a-fA-F]{1,4}:){4}/).match, \":/64\"])" + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:AssociateSubnetCidrBlock", + "ec2:DescribeSubnets" + ] + }, + "delete": { + "permissions": [ + "ec2:DisassociateSubnetCidrBlock", + "ec2:DescribeSubnets" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeSubnets" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeSubnets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/subnetnetworkaclassociation.json b/internal/aws/cfn/schemas/aws/ec2/subnetnetworkaclassociation.json new file mode 100644 index 00000000..397f4dd8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/subnetnetworkaclassociation.json @@ -0,0 +1,64 @@ +{ + "typeName": "AWS::EC2::SubnetNetworkAclAssociation", + "description": "Resource Type definition for AWS::EC2::SubnetNetworkAclAssociation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "additionalProperties": false, + "properties": { + "SubnetId": { + "type": "string", + "description": "The ID of the subnet" + }, + "NetworkAclId": { + "type": "string", + "description": "The ID of the network ACL" + }, + "AssociationId": { + "type": "string" + } + }, + "required": [ + "NetworkAclId", + "SubnetId" + ], + "replacementStrategy": "delete_then_create", + "createOnlyProperties": [ + "/properties/SubnetId", + "/properties/NetworkAclId" + ], + "primaryIdentifier": [ + "/properties/AssociationId" + ], + "readOnlyProperties": [ + "/properties/AssociationId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeNetworkAcls", + "ec2:ReplaceNetworkAclAssociation" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeNetworkAcls" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeNetworkAcls", + "ec2:ReplaceNetworkAclAssociation" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeNetworkAcls" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/subnetroutetableassociation.json b/internal/aws/cfn/schemas/aws/ec2/subnetroutetableassociation.json new file mode 100644 index 00000000..46a95b32 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/subnetroutetableassociation.json @@ -0,0 +1,68 @@ +{ + "typeName": "AWS::EC2::SubnetRouteTableAssociation", + "description": "Associates a subnet with a route table. The subnet and route table must be in the same VPC. This association causes traffic originating from the subnet to be routed according to the routes in the route table. A route table can be associated with multiple subnets. To create a route table, see [AWS::EC2::RouteTable](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routetable.html).", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string", + "description": "" + }, + "RouteTableId": { + "type": "string", + "description": "The ID of the route table.\n The physical ID changes when the route table ID is changed." + }, + "SubnetId": { + "type": "string", + "description": "The ID of the subnet." + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "RouteTableId", + "SubnetId" + ], + "replacementStrategy": "delete_then_create", + "createOnlyProperties": [ + "/properties/SubnetId", + "/properties/RouteTableId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AssociateRouteTable", + "ec2:ReplaceRouteTableAssociation", + "ec2:DescribeSubnets", + "ec2:DescribeRouteTables" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeRouteTables" + ] + }, + "delete": { + "permissions": [ + "ec2:DisassociateRouteTable", + "ec2:DescribeSubnets", + "ec2:DescribeRouteTables" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeRouteTables" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilter.json b/internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilter.json new file mode 100644 index 00000000..3d75eab8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilter.json @@ -0,0 +1,54 @@ +{ + "typeName": "AWS::EC2::TrafficMirrorFilter", + "description": "Resource Type definition for AWS::EC2::TrafficMirrorFilter", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "NetworkServices": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "createOnlyProperties": [ + "/properties/Description" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilterrule.json b/internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilterrule.json new file mode 100644 index 00000000..c68fd7a7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/trafficmirrorfilterrule.json @@ -0,0 +1,75 @@ +{ + "typeName": "AWS::EC2::TrafficMirrorFilterRule", + "description": "Resource Type definition for AWS::EC2::TrafficMirrorFilterRule", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DestinationPortRange": { + "$ref": "#/definitions/TrafficMirrorPortRange" + }, + "Description": { + "type": "string" + }, + "SourcePortRange": { + "$ref": "#/definitions/TrafficMirrorPortRange" + }, + "RuleAction": { + "type": "string" + }, + "SourceCidrBlock": { + "type": "string" + }, + "RuleNumber": { + "type": "integer" + }, + "DestinationCidrBlock": { + "type": "string" + }, + "TrafficMirrorFilterId": { + "type": "string" + }, + "TrafficDirection": { + "type": "string" + }, + "Protocol": { + "type": "integer" + } + }, + "definitions": { + "TrafficMirrorPortRange": { + "type": "object", + "additionalProperties": false, + "properties": { + "FromPort": { + "type": "integer" + }, + "ToPort": { + "type": "integer" + } + }, + "required": [ + "ToPort", + "FromPort" + ] + } + }, + "required": [ + "RuleAction", + "SourceCidrBlock", + "RuleNumber", + "DestinationCidrBlock", + "TrafficMirrorFilterId", + "TrafficDirection" + ], + "createOnlyProperties": [ + "/properties/TrafficMirrorFilterId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/trafficmirrorsession.json b/internal/aws/cfn/schemas/aws/ec2/trafficmirrorsession.json new file mode 100644 index 00000000..89a47479 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/trafficmirrorsession.json @@ -0,0 +1,71 @@ +{ + "typeName": "AWS::EC2::TrafficMirrorSession", + "description": "Resource Type definition for AWS::EC2::TrafficMirrorSession", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "TrafficMirrorTargetId": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "SessionNumber": { + "type": "integer" + }, + "VirtualNetworkId": { + "type": "integer" + }, + "PacketLength": { + "type": "integer" + }, + "NetworkInterfaceId": { + "type": "string" + }, + "TrafficMirrorFilterId": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "TrafficMirrorTargetId", + "NetworkInterfaceId", + "TrafficMirrorFilterId", + "SessionNumber" + ], + "createOnlyProperties": [ + "/properties/NetworkInterfaceId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/trafficmirrortarget.json b/internal/aws/cfn/schemas/aws/ec2/trafficmirrortarget.json new file mode 100644 index 00000000..d8a0cc2c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/trafficmirrortarget.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::EC2::TrafficMirrorTarget", + "description": "Resource Type definition for AWS::EC2::TrafficMirrorTarget", + "additionalProperties": false, + "properties": { + "NetworkLoadBalancerArn": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "NetworkInterfaceId": { + "type": "string" + }, + "GatewayLoadBalancerEndpointId": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "createOnlyProperties": [ + "/properties/GatewayLoadBalancerEndpointId", + "/properties/NetworkLoadBalancerArn", + "/properties/NetworkInterfaceId", + "/properties/Description" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgateway.json b/internal/aws/cfn/schemas/aws/ec2/transitgateway.json new file mode 100644 index 00000000..a90d21b9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgateway.json @@ -0,0 +1,152 @@ +{ + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway", + "tagging": { + "taggable": true + }, + "handlers": { + "read": { + "permissions": [ + "ec2:CreateTransitGateway", + "ec2:CreateTags", + "ec2:DescribeTransitGateways", + "ec2:DescribeTags", + "ec2:DeleteTransitGateway", + "ec2:DeleteTags", + "ec2:ModifyTransitGateway", + "ec2:ModifyTransitGatewayOptions" + ] + }, + "create": { + "permissions": [ + "ec2:CreateTransitGateway", + "ec2:CreateTags", + "ec2:DescribeTransitGateways", + "ec2:DescribeTags", + "ec2:DeleteTransitGateway", + "ec2:DeleteTags", + "ec2:ModifyTransitGateway", + "ec2:ModifyTransitGatewayOptions" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTransitGateway", + "ec2:CreateTags", + "ec2:DescribeTransitGateways", + "ec2:DescribeTags", + "ec2:DeleteTransitGateway", + "ec2:DeleteTags", + "ec2:ModifyTransitGateway", + "ec2:ModifyTransitGatewayOptions" + ] + }, + "list": { + "permissions": [ + "ec2:CreateTransitGateway", + "ec2:CreateTags", + "ec2:DescribeTransitGateways", + "ec2:DescribeTags", + "ec2:DeleteTransitGateway", + "ec2:DeleteTags", + "ec2:ModifyTransitGateway", + "ec2:ModifyTransitGatewayOptions" + ] + }, + "delete": { + "permissions": [ + "ec2:CreateTransitGateway", + "ec2:CreateTags", + "ec2:DescribeTransitGateways", + "ec2:DescribeTags", + "ec2:DeleteTransitGateway", + "ec2:DeleteTags", + "ec2:ModifyTransitGateway", + "ec2:ModifyTransitGatewayOptions" + ] + } + }, + "typeName": "AWS::EC2::TransitGateway", + "readOnlyProperties": [ + "/properties/Id", + "/properties/TransitGatewayArn" + ], + "description": "Resource Type definition for AWS::EC2::TransitGateway", + "createOnlyProperties": [ + "/properties/AmazonSideAsn", + "/properties/MulticastSupport" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Id" + ], + "definitions": { + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Description": { + "type": "string" + }, + "AssociationDefaultRouteTableId": { + "type": "string" + }, + "AutoAcceptSharedAttachments": { + "type": "string" + }, + "TransitGatewayArn": { + "type": "string" + }, + "DefaultRouteTablePropagation": { + "type": "string" + }, + "TransitGatewayCidrBlocks": { + "type": "array", + "items": { + "type": "string" + } + }, + "PropagationDefaultRouteTableId": { + "type": "string" + }, + "DefaultRouteTableAssociation": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "VpnEcmpSupport": { + "type": "string" + }, + "DnsSupport": { + "type": "string" + }, + "MulticastSupport": { + "type": "string" + }, + "AmazonSideAsn": { + "format": "int64", + "type": "integer" + }, + "Tags": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewayattachment.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewayattachment.json new file mode 100644 index 00000000..6ef3cfe8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewayattachment.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::EC2::TransitGatewayAttachment", + "description": "Resource Type definition for AWS::EC2::TransitGatewayAttachment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "TransitGatewayId": { + "type": "string" + }, + "VpcId": { + "type": "string" + }, + "SubnetIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Options": { + "description": "The options for the transit gateway vpc attachment.", + "type": "object", + "properties": { + "DnsSupport": { + "description": "Indicates whether to enable DNS Support for Vpc Attachment. Valid Values: enable | disable", + "type": "string" + }, + "Ipv6Support": { + "description": "Indicates whether to enable Ipv6 Support for Vpc Attachment. Valid Values: enable | disable", + "type": "string" + }, + "ApplianceModeSupport": { + "description": "Indicates whether to enable Ipv6 Support for Vpc Attachment. Valid Values: enable | disable", + "type": "string" + }, + "SecurityGroupReferencingSupport": { + "description": "Indicates whether to enable Security Group referencing support for Vpc Attachment. Valid Values: enable | disable", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "VpcId", + "SubnetIds", + "TransitGatewayId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/TransitGatewayId", + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeTags", + "ec2:DescribeTransitGatewayAttachments", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeTags", + "ec2:DescribeTransitGatewayAttachments", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeTags", + "ec2:DescribeTransitGatewayAttachments", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:DescribeTags", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:DeleteTags", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:DescribeTags", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:DeleteTags", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewayconnect.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewayconnect.json new file mode 100644 index 00000000..7a8d4475 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewayconnect.json @@ -0,0 +1,115 @@ +{ + "typeName": "AWS::EC2::TransitGatewayConnect", + "description": "The AWS::EC2::TransitGatewayConnect type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-myservice", + "properties": { + "TransitGatewayAttachmentId": { + "description": "The ID of the Connect attachment.", + "type": "string" + }, + "TransportTransitGatewayAttachmentId": { + "description": "The ID of the attachment from which the Connect attachment was created.", + "type": "string" + }, + "TransitGatewayId": { + "description": "The ID of the transit gateway.", + "type": "string" + }, + "State": { + "description": "The state of the attachment.", + "type": "string" + }, + "CreationTime": { + "description": "The creation time.", + "type": "string" + }, + "Tags": { + "description": "The tags for the attachment.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Options": { + "$ref": "#/definitions/TransitGatewayConnectOptions", + "description": "The Connect attachment options." + } + }, + "required": [ + "TransportTransitGatewayAttachmentId", + "Options" + ], + "definitions": { + "TransitGatewayConnectOptions": { + "type": "object", + "properties": { + "Protocol": { + "description": "The tunnel protocol.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "description": "The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with aws:.", + "type": "string" + }, + "Value": { + "description": "The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/TransitGatewayAttachmentId", + "/properties/State", + "/properties/CreationTime", + "/properties/TransitGatewayId" + ], + "createOnlyProperties": [ + "/properties/TransportTransitGatewayAttachmentId", + "/properties/Options" + ], + "primaryIdentifier": [ + "/properties/TransitGatewayAttachmentId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateTransitGatewayConnect", + "ec2:DescribeTransitGatewayConnects", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeTransitGatewayConnects" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeTransitGatewayConnects", + "ec2:DeleteTags", + "ec2:CreateTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteTransitGatewayConnect", + "ec2:DescribeTransitGatewayConnects", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeTransitGatewayConnects" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomain.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomain.json new file mode 100644 index 00000000..9628fa2c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomain.json @@ -0,0 +1,119 @@ +{ + "typeName": "AWS::EC2::TransitGatewayMulticastDomain", + "description": "The AWS::EC2::TransitGatewayMulticastDomain type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway/aws-ec2-transitgatewaymulticastdomain", + "properties": { + "TransitGatewayMulticastDomainId": { + "description": "The ID of the transit gateway multicast domain.", + "type": "string" + }, + "TransitGatewayMulticastDomainArn": { + "description": "The Amazon Resource Name (ARN) of the transit gateway multicast domain.", + "type": "string" + }, + "TransitGatewayId": { + "description": "The ID of the transit gateway.", + "type": "string" + }, + "State": { + "description": "The state of the transit gateway multicast domain.", + "type": "string" + }, + "CreationTime": { + "description": "The time the transit gateway multicast domain was created.", + "type": "string", + "format": "date-time" + }, + "Tags": { + "description": "The tags for the transit gateway multicast domain.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Options": { + "description": "The options for the transit gateway multicast domain.", + "type": "object", + "properties": { + "AutoAcceptSharedAssociations": { + "description": "Indicates whether to automatically cross-account subnet associations that are associated with the transit gateway multicast domain. Valid Values: enable | disable", + "type": "string" + }, + "Igmpv2Support": { + "description": "Indicates whether Internet Group Management Protocol (IGMP) version 2 is turned on for the transit gateway multicast domain. Valid Values: enable | disable", + "type": "string" + }, + "StaticSourcesSupport": { + "description": "Indicates whether support for statically configuring transit gateway multicast group sources is turned on. Valid Values: enable | disable", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "required": [ + "TransitGatewayId" + ], + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "description": "The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with aws:.", + "type": "string" + }, + "Value": { + "description": "The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/TransitGatewayId" + ], + "readOnlyProperties": [ + "/properties/TransitGatewayMulticastDomainId", + "/properties/State", + "/properties/CreationTime", + "/properties/TransitGatewayMulticastDomainArn" + ], + "primaryIdentifier": [ + "/properties/TransitGatewayMulticastDomainId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeTransitGatewayMulticastDomains", + "ec2:CreateTransitGatewayMulticastDomain", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeTransitGatewayMulticastDomains" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeTransitGatewayMulticastDomains", + "ec2:DeleteTags", + "ec2:CreateTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeTransitGatewayMulticastDomains", + "ec2:DeleteTransitGatewayMulticastDomain", + "ec2:DeleteTags" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeTransitGatewayMulticastDomains" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomainassociation.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomainassociation.json new file mode 100644 index 00000000..fdba7c51 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastdomainassociation.json @@ -0,0 +1,76 @@ +{ + "typeName": "AWS::EC2::TransitGatewayMulticastDomainAssociation", + "description": "The AWS::EC2::TransitGatewayMulticastDomainAssociation type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-myservice", + "properties": { + "TransitGatewayMulticastDomainId": { + "description": "The ID of the transit gateway multicast domain.", + "type": "string" + }, + "TransitGatewayAttachmentId": { + "description": "The ID of the transit gateway attachment.", + "type": "string" + }, + "ResourceId": { + "description": "The ID of the resource.", + "type": "string" + }, + "ResourceType": { + "description": "The type of resource, for example a VPC attachment.", + "type": "string" + }, + "State": { + "description": "The state of the subnet association.", + "type": "string" + }, + "SubnetId": { + "description": "The IDs of the subnets to associate with the transit gateway multicast domain.", + "type": "string" + } + }, + "required": [ + "TransitGatewayMulticastDomainId", + "TransitGatewayAttachmentId", + "SubnetId" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/ResourceId", + "/properties/ResourceType", + "/properties/State" + ], + "createOnlyProperties": [ + "/properties/TransitGatewayMulticastDomainId", + "/properties/TransitGatewayAttachmentId", + "/properties/SubnetId" + ], + "primaryIdentifier": [ + "/properties/TransitGatewayMulticastDomainId", + "/properties/TransitGatewayAttachmentId", + "/properties/SubnetId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AssociateTransitGatewayMulticastDomain", + "ec2:GetTransitGatewayMulticastDomainAssociations" + ] + }, + "read": { + "permissions": [ + "ec2:GetTransitGatewayMulticastDomainAssociations" + ] + }, + "delete": { + "permissions": [ + "ec2:DisassociateTransitGatewayMulticastDomain", + "ec2:GetTransitGatewayMulticastDomainAssociations" + ] + }, + "list": { + "permissions": [ + "ec2:GetTransitGatewayMulticastDomainAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupmember.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupmember.json new file mode 100644 index 00000000..1d1c5fe9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupmember.json @@ -0,0 +1,101 @@ +{ + "typeName": "AWS::EC2::TransitGatewayMulticastGroupMember", + "description": "The AWS::EC2::TransitGatewayMulticastGroupMember registers and deregisters members and sources (network interfaces) with the transit gateway multicast group", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgatewaymulticastdomain/aws-ec2-transitgatewaymulticastgroupsource", + "properties": { + "GroupIpAddress": { + "description": "The IP address assigned to the transit gateway multicast group.", + "type": "string" + }, + "TransitGatewayAttachmentId": { + "description": "The ID of the transit gateway attachment.", + "type": "string" + }, + "TransitGatewayMulticastDomainId": { + "description": "The ID of the transit gateway multicast domain.", + "type": "string" + }, + "SubnetId": { + "description": "The ID of the subnet.", + "type": "string" + }, + "ResourceId": { + "description": "The ID of the resource.", + "type": "string" + }, + "ResourceType": { + "description": "The type of resource, for example a VPC attachment.", + "type": "string" + }, + "NetworkInterfaceId": { + "description": "The ID of the transit gateway attachment.", + "type": "string" + }, + "GroupMember": { + "description": "Indicates that the resource is a transit gateway multicast group member.", + "type": "boolean" + }, + "GroupSource": { + "description": "Indicates that the resource is a transit gateway multicast group member.", + "type": "boolean" + }, + "MemberType": { + "description": "The member type (for example, static).", + "type": "string" + }, + "SourceType": { + "description": "The source type.", + "type": "string" + } + }, + "required": [ + "GroupIpAddress", + "NetworkInterfaceId", + "TransitGatewayMulticastDomainId" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/SubnetId", + "/properties/ResourceId", + "/properties/ResourceType", + "/properties/GroupSource", + "/properties/GroupMember", + "/properties/MemberType", + "/properties/SourceType", + "/properties/TransitGatewayAttachmentId" + ], + "createOnlyProperties": [ + "/properties/TransitGatewayMulticastDomainId", + "/properties/GroupIpAddress", + "/properties/NetworkInterfaceId" + ], + "primaryIdentifier": [ + "/properties/TransitGatewayMulticastDomainId", + "/properties/GroupIpAddress", + "/properties/NetworkInterfaceId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:RegisterTransitGatewayMulticastGroupMembers", + "ec2:SearchTransitGatewayMulticastGroups" + ] + }, + "read": { + "permissions": [ + "ec2:SearchTransitGatewayMulticastGroups" + ] + }, + "delete": { + "permissions": [ + "ec2:DeregisterTransitGatewayMulticastGroupMembers", + "ec2:SearchTransitGatewayMulticastGroups" + ] + }, + "list": { + "permissions": [ + "ec2:SearchTransitGatewayMulticastGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupsource.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupsource.json new file mode 100644 index 00000000..70688696 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewaymulticastgroupsource.json @@ -0,0 +1,101 @@ +{ + "typeName": "AWS::EC2::TransitGatewayMulticastGroupSource", + "description": "The AWS::EC2::TransitGatewayMulticastGroupSource registers and deregisters members and sources (network interfaces) with the transit gateway multicast group", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgatewaymulticastdomain/aws-ec2-transitgatewaymulticastgroupsource", + "properties": { + "GroupIpAddress": { + "description": "The IP address assigned to the transit gateway multicast group.", + "type": "string" + }, + "TransitGatewayAttachmentId": { + "description": "The ID of the transit gateway attachment.", + "type": "string" + }, + "TransitGatewayMulticastDomainId": { + "description": "The ID of the transit gateway multicast domain.", + "type": "string" + }, + "SubnetId": { + "description": "The ID of the subnet.", + "type": "string" + }, + "ResourceId": { + "description": "The ID of the resource.", + "type": "string" + }, + "ResourceType": { + "description": "The type of resource, for example a VPC attachment.", + "type": "string" + }, + "NetworkInterfaceId": { + "description": "The ID of the transit gateway attachment.", + "type": "string" + }, + "GroupMember": { + "description": "Indicates that the resource is a transit gateway multicast group member.", + "type": "boolean" + }, + "GroupSource": { + "description": "Indicates that the resource is a transit gateway multicast group member.", + "type": "boolean" + }, + "MemberType": { + "description": "The member type (for example, static).", + "type": "string" + }, + "SourceType": { + "description": "The source type.", + "type": "string" + } + }, + "required": [ + "TransitGatewayMulticastDomainId", + "NetworkInterfaceId", + "GroupIpAddress" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/SubnetId", + "/properties/ResourceId", + "/properties/ResourceType", + "/properties/GroupSource", + "/properties/GroupMember", + "/properties/MemberType", + "/properties/SourceType", + "/properties/TransitGatewayAttachmentId" + ], + "createOnlyProperties": [ + "/properties/TransitGatewayMulticastDomainId", + "/properties/GroupIpAddress", + "/properties/NetworkInterfaceId" + ], + "primaryIdentifier": [ + "/properties/TransitGatewayMulticastDomainId", + "/properties/GroupIpAddress", + "/properties/NetworkInterfaceId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:RegisterTransitGatewayMulticastGroupSources", + "ec2:SearchTransitGatewayMulticastGroups" + ] + }, + "read": { + "permissions": [ + "ec2:SearchTransitGatewayMulticastGroups" + ] + }, + "delete": { + "permissions": [ + "ec2:DeregisterTransitGatewayMulticastGroupSources", + "ec2:SearchTransitGatewayMulticastGroups" + ] + }, + "list": { + "permissions": [ + "ec2:SearchTransitGatewayMulticastGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewaypeeringattachment.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewaypeeringattachment.json new file mode 100644 index 00000000..73088790 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewaypeeringattachment.json @@ -0,0 +1,128 @@ +{ + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-myservice", + "handlers": { + "read": { + "permissions": [ + "ec2:DescribeTransitGatewayPeeringAttachments" + ] + }, + "create": { + "permissions": [ + "ec2:CreateTransitGatewayPeeringAttachment", + "ec2:DescribeTransitGatewayPeeringAttachments" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeTransitGatewayPeeringAttachments" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeTransitGatewayPeeringAttachments" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteTransitGatewayPeeringAttachment", + "ec2:DescribeTransitGatewayPeeringAttachments" + ] + } + }, + "typeName": "AWS::EC2::TransitGatewayPeeringAttachment", + "readOnlyProperties": [ + "/properties/TransitGatewayAttachmentId", + "/properties/Status", + "/properties/State", + "/properties/CreationTime" + ], + "description": "The AWS::EC2::TransitGatewayPeeringAttachment type", + "createOnlyProperties": [ + "/properties/TransitGatewayId", + "/properties/PeerTransitGatewayId", + "/properties/PeerRegion", + "/properties/PeerAccountId" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/TransitGatewayAttachmentId" + ], + "definitions": { + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "description": "The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.", + "type": "string" + }, + "Key": { + "description": "The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with aws:.", + "type": "string" + } + } + }, + "PeeringAttachmentStatus": { + "additionalProperties": false, + "type": "object", + "properties": { + "Message": { + "description": "The status message, if applicable.", + "type": "string" + }, + "Code": { + "description": "The status code.", + "type": "string" + } + } + } + }, + "required": [ + "TransitGatewayId", + "PeerTransitGatewayId", + "PeerAccountId", + "PeerRegion" + ], + "properties": { + "Status": { + "description": "The status of the transit gateway peering attachment.", + "$ref": "#/definitions/PeeringAttachmentStatus" + }, + "TransitGatewayId": { + "description": "The ID of the transit gateway.", + "type": "string" + }, + "PeerTransitGatewayId": { + "description": "The ID of the peer transit gateway.", + "type": "string" + }, + "PeerAccountId": { + "description": "The ID of the peer account", + "type": "string" + }, + "State": { + "description": "The state of the transit gateway peering attachment. Note that the initiating state has been deprecated.", + "type": "string" + }, + "CreationTime": { + "format": "date-time", + "description": "The time the transit gateway peering attachment was created.", + "type": "string" + }, + "PeerRegion": { + "description": "Peer Region", + "type": "string" + }, + "Tags": { + "description": "The tags for the transit gateway peering attachment.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TransitGatewayAttachmentId": { + "description": "The ID of the transit gateway peering attachment.", + "type": "string" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewayroute.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroute.json new file mode 100644 index 00000000..94fbcb27 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroute.json @@ -0,0 +1,37 @@ +{ + "typeName": "AWS::EC2::TransitGatewayRoute", + "description": "Resource Type definition for AWS::EC2::TransitGatewayRoute", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "TransitGatewayRouteTableId": { + "type": "string" + }, + "DestinationCidrBlock": { + "type": "string" + }, + "Blackhole": { + "type": "boolean" + }, + "TransitGatewayAttachmentId": { + "type": "string" + } + }, + "required": [ + "TransitGatewayRouteTableId" + ], + "createOnlyProperties": [ + "/properties/TransitGatewayRouteTableId", + "/properties/TransitGatewayAttachmentId", + "/properties/DestinationCidrBlock", + "/properties/Blackhole" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetable.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetable.json new file mode 100644 index 00000000..87deb922 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetable.json @@ -0,0 +1,91 @@ +{ + "typeName": "AWS::EC2::TransitGatewayRouteTable", + "description": "Resource Type definition for AWS::EC2::TransitGatewayRouteTable", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway.git", + "additionalProperties": false, + "properties": { + "TransitGatewayRouteTableId": { + "description": "Transit Gateway Route Table primary identifier", + "type": "string" + }, + "TransitGatewayId": { + "description": "The ID of the transit gateway.", + "type": "string" + }, + "Tags": { + "type": "array", + "description": "Tags are composed of a Key/Value pair. You can use tags to categorize and track each parameter group. The tag value null is permitted.", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": false + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key of the associated tag key-value pair" + }, + "Value": { + "type": "string", + "description": "The value of the associated tag key-value pair" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "TransitGatewayId" + ], + "createOnlyProperties": [ + "/properties/TransitGatewayId", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/TransitGatewayRouteTableId" + ], + "primaryIdentifier": [ + "/properties/TransitGatewayRouteTableId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateTransitGatewayRouteTable", + "ec2:CreateTags", + "ec2:DescribeTransitGatewayRouteTables" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeTransitGatewayRouteTables" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteTransitGatewayRouteTable", + "ec2:DescribeTransitGatewayRouteTables", + "ec2:GetTransitGatewayRouteTableAssociations", + "ec2:DisassociateTransitGatewayRouteTable" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeTransitGatewayRouteTables" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetableassociation.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetableassociation.json new file mode 100644 index 00000000..e9d7122d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetableassociation.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::EC2::TransitGatewayRouteTableAssociation", + "description": "Resource Type definition for AWS::EC2::TransitGatewayRouteTableAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "TransitGatewayRouteTableId": { + "type": "string" + }, + "TransitGatewayAttachmentId": { + "type": "string" + } + }, + "required": [ + "TransitGatewayRouteTableId", + "TransitGatewayAttachmentId" + ], + "createOnlyProperties": [ + "/properties/TransitGatewayRouteTableId", + "/properties/TransitGatewayAttachmentId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetablepropagation.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetablepropagation.json new file mode 100644 index 00000000..60ec31e9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewayroutetablepropagation.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::EC2::TransitGatewayRouteTablePropagation", + "description": "Resource Type definition for AWS::EC2::TransitGatewayRouteTablePropagation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "TransitGatewayRouteTableId": { + "type": "string" + }, + "TransitGatewayAttachmentId": { + "type": "string" + } + }, + "required": [ + "TransitGatewayRouteTableId", + "TransitGatewayAttachmentId" + ], + "createOnlyProperties": [ + "/properties/TransitGatewayRouteTableId", + "/properties/TransitGatewayAttachmentId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/transitgatewayvpcattachment.json b/internal/aws/cfn/schemas/aws/ec2/transitgatewayvpcattachment.json new file mode 100644 index 00000000..6ef3d0dd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/transitgatewayvpcattachment.json @@ -0,0 +1,178 @@ +{ + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": false + }, + "typeName": "AWS::EC2::TransitGatewayVpcAttachment", + "readOnlyProperties": [ + "/properties/Id" + ], + "description": "Resource Type definition for AWS::EC2::TransitGatewayVpcAttachment", + "createOnlyProperties": [ + "/properties/TransitGatewayId", + "/properties/SubnetIds", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "required": [ + "SubnetIds", + "VpcId", + "TransitGatewayId" + ], + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transitgateway", + "handlers": { + "read": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeTags", + "ec2:DescribeTransitGatewayAttachments", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "create": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeTags", + "ec2:DescribeTransitGatewayAttachments", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:DescribeTags", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:DeleteTags", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:DescribeTags", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:DeleteTags", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeTransitGatewayAttachments", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeTags", + "ec2:DescribeTransitGatewayAttachments", + "ec2:ModifyTransitGatewayVpcAttachment" + ] + } + }, + "writeOnlyProperties": [ + "/properties/AddSubnetIds", + "/properties/RemoveSubnetIds" + ], + "additionalProperties": false, + "definitions": { + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Options": { + "description": "The options for the transit gateway vpc attachment.", + "additionalProperties": false, + "type": "object", + "properties": { + "Ipv6Support": { + "description": "Indicates whether to enable Ipv6 Support for Vpc Attachment. Valid Values: enable | disable", + "type": "string" + }, + "ApplianceModeSupport": { + "description": "Indicates whether to enable Ipv6 Support for Vpc Attachment. Valid Values: enable | disable", + "type": "string" + }, + "DnsSupport": { + "description": "Indicates whether to enable DNS Support for Vpc Attachment. Valid Values: enable | disable", + "type": "string" + } + } + }, + "TransitGatewayId": { + "type": "string" + }, + "VpcId": { + "type": "string" + }, + "RemoveSubnetIds": { + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "Id": { + "type": "string" + }, + "SubnetIds": { + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "AddSubnetIds": { + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "Tags": { + "uniqueItems": false, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/verifiedaccessendpoint.json b/internal/aws/cfn/schemas/aws/ec2/verifiedaccessendpoint.json new file mode 100644 index 00000000..ca3bb4e0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/verifiedaccessendpoint.json @@ -0,0 +1,423 @@ +{ + "typeName": "AWS::EC2::VerifiedAccessEndpoint", + "description": "The AWS::EC2::VerifiedAccessEndpoint resource creates an AWS EC2 Verified Access Endpoint.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-verified-access.aws-ec2-verifiedaccessendpoint", + "properties": { + "VerifiedAccessEndpointId": { + "description": "The ID of the AWS Verified Access endpoint.", + "type": "string" + }, + "VerifiedAccessGroupId": { + "description": "The ID of the AWS Verified Access group.", + "type": "string" + }, + "VerifiedAccessInstanceId": { + "description": "The ID of the AWS Verified Access instance.", + "type": "string" + }, + "Status": { + "description": "The endpoint status.", + "type": "string" + }, + "SecurityGroupIds": { + "description": "The IDs of the security groups for the endpoint.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SecurityGroupId" + } + }, + "NetworkInterfaceOptions": { + "description": "The options for network-interface type endpoint.", + "$ref": "#/definitions/NetworkInterfaceOptions" + }, + "LoadBalancerOptions": { + "description": "The load balancer details if creating the AWS Verified Access endpoint as load-balancer type.", + "$ref": "#/definitions/LoadBalancerOptions" + }, + "EndpointType": { + "description": "The type of AWS Verified Access endpoint. Incoming application requests will be sent to an IP address, load balancer or a network interface depending on the endpoint type specified.The type of AWS Verified Access endpoint. Incoming application requests will be sent to an IP address, load balancer or a network interface depending on the endpoint type specified.", + "type": "string" + }, + "EndpointDomain": { + "description": "A DNS name that is generated for the endpoint.", + "type": "string" + }, + "EndpointDomainPrefix": { + "description": "A custom identifier that gets prepended to a DNS name that is generated for the endpoint.", + "type": "string" + }, + "DeviceValidationDomain": { + "description": "Returned if endpoint has a device trust provider attached.", + "type": "string" + }, + "DomainCertificateArn": { + "description": "The ARN of a public TLS/SSL certificate imported into or created with ACM.", + "type": "string" + }, + "AttachmentType": { + "description": "The type of attachment used to provide connectivity between the AWS Verified Access endpoint and the application.", + "type": "string" + }, + "ApplicationDomain": { + "description": "The DNS name for users to reach your application.", + "type": "string" + }, + "CreationTime": { + "description": "The creation time.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The last updated time.", + "type": "string" + }, + "Description": { + "description": "A description for the AWS Verified Access endpoint.", + "type": "string" + }, + "PolicyDocument": { + "description": "The AWS Verified Access policy document.", + "type": "string" + }, + "PolicyEnabled": { + "description": "The status of the Verified Access policy.", + "type": "boolean" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SseSpecification": { + "description": "The configuration options for customer provided KMS encryption.", + "$ref": "#/definitions/SseSpecification" + } + }, + "definitions": { + "SecurityGroupId": { + "description": "The ID of a security group for the endpoint.", + "type": "string" + }, + "NetworkInterfaceOptions": { + "description": "The options for network-interface type endpoint.", + "type": "object", + "properties": { + "NetworkInterfaceId": { + "description": "The ID of the network interface.", + "type": "string" + }, + "Port": { + "description": "The IP port number.", + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "Protocol": { + "description": "The IP protocol.", + "type": "string" + } + }, + "additionalProperties": false + }, + "LoadBalancerOptions": { + "description": "The load balancer details if creating the AWS Verified Access endpoint as load-balancertype.", + "type": "object", + "properties": { + "LoadBalancerArn": { + "description": "The ARN of the load balancer.", + "type": "string" + }, + "Port": { + "description": "The IP port number.", + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "Protocol": { + "description": "The IP protocol.", + "type": "string" + }, + "SubnetIds": { + "description": "The IDs of the subnets.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SubnetId" + } + } + }, + "additionalProperties": false + }, + "SubnetId": { + "description": "The IDs of the subnet.", + "type": "string" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "SseSpecification": { + "description": "The configuration options for customer provided KMS encryption.", + "type": "object", + "properties": { + "KmsKeyArn": { + "description": "KMS Key Arn used to encrypt the group policy", + "type": "string" + }, + "CustomerManagedKeyEnabled": { + "description": "Whether to encrypt the policy with the provided key or disable encryption", + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "ApplicationDomain", + "AttachmentType", + "DomainCertificateArn", + "EndpointType", + "VerifiedAccessGroupId", + "EndpointDomainPrefix" + ], + "readOnlyProperties": [ + "/properties/VerifiedAccessEndpointId", + "/properties/EndpointDomain", + "/properties/CreationTime", + "/properties/LastUpdatedTime", + "/properties/Status", + "/properties/DeviceValidationDomain", + "/properties/VerifiedAccessInstanceId" + ], + "createOnlyProperties": [ + "/properties/ApplicationDomain", + "/properties/AttachmentType", + "/properties/DomainCertificateArn", + "/properties/EndpointDomainPrefix", + "/properties/EndpointType", + "/properties/SecurityGroupIds", + "/properties/NetworkInterfaceOptions/NetworkInterfaceId", + "/properties/LoadBalancerOptions/LoadBalancerArn" + ], + "primaryIdentifier": [ + "/properties/VerifiedAccessEndpointId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVerifiedAccessEndpoint", + "ec2:DescribeVerifiedAccessEndpoints", + "ec2:CreateTags", + "ec2:DescribeTags", + "iam:CreateServiceLinkedRole", + "iam:ListRoles", + "acm:GetCertificateWithPK", + "acm:DescribeCertificate", + "acm:CreateCertificateRelation", + "sso:GetManagedApplicationInstance", + "sso:GetPeregrineStatus", + "sso:GetSharedSsoConfiguration", + "sso:CreateManagedApplicationInstance", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeAccountAttributes", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeListenerCertificates", + "acm:DeleteCertificateRelation", + "ec2:DeleteTags", + "ec2:DeleteVerifiedAccessEndpoint", + "ec2:GetVerifiedAccessEndpointPolicy", + "ec2:ModifyVerifiedAccessEndpoint", + "ec2:ModifyVerifiedAccessEndpointPolicy", + "sso:DeleteManagedApplicationInstance", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ], + "timeoutInMinutes": 60 + }, + "read": { + "permissions": [ + "ec2:DescribeVerifiedAccessEndpoints", + "ec2:GetVerifiedAccessEndpointPolicy", + "ec2:DescribeTags", + "acm:CreateCertificateRelation", + "acm:DeleteCertificateRelation", + "acm:DescribeCertificate", + "acm:GetCertificateWithPK", + "ec2:CreateTags", + "ec2:CreateVerifiedAccessEndpoint", + "ec2:DeleteTags", + "ec2:DeleteVerifiedAccessEndpoint", + "ec2:DescribeAccountAttributes", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:ModifyVerifiedAccessEndpoint", + "ec2:ModifyVerifiedAccessEndpointPolicy", + "elasticloadbalancing:DescribeListenerCertificates", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeLoadBalancers", + "iam:CreateServiceLinkedRole", + "iam:ListRoles", + "sso:CreateManagedApplicationInstance", + "sso:DeleteManagedApplicationInstance", + "sso:GetManagedApplicationInstance", + "sso:GetPeregrineStatus", + "sso:GetSharedSsoConfiguration", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVerifiedAccessEndpoint", + "ec2:ModifyVerifiedAccessEndpointPolicy", + "ec2:DescribeVerifiedAccessEndpoints", + "ec2:GetVerifiedAccessEndpointPolicy", + "ec2:DescribeTags", + "ec2:DeleteTags", + "ec2:CreateTags", + "acm:GetCertificateWithPK", + "acm:DescribeCertificate", + "acm:CreateCertificateRelation", + "acm:DeleteCertificateRelation", + "sso:GetManagedApplicationInstance", + "sso:GetPeregrineStatus", + "sso:GetSharedSsoConfiguration", + "sso:CreateManagedApplicationInstance", + "sso:DeleteManagedApplicationInstance", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeAccountAttributes", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeListenerCertificates", + "ec2:CreateVerifiedAccessEndpoint", + "ec2:DeleteVerifiedAccessEndpoint", + "iam:CreateServiceLinkedRole", + "iam:ListRoles", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ], + "timeoutInMinutes": 60 + }, + "delete": { + "permissions": [ + "ec2:DescribeVerifiedAccessEndpoints", + "ec2:DescribeTags", + "ec2:DeleteVerifiedAccessEndpoint", + "ec2:DeleteTags", + "sso:DeleteManagedApplicationInstance", + "acm:DeleteCertificateRelation", + "acm:DescribeCertificate", + "acm:CreateCertificateRelation", + "acm:GetCertificateWithPK", + "ec2:CreateTags", + "ec2:CreateVerifiedAccessEndpoint", + "ec2:DescribeAccountAttributes", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:GetVerifiedAccessEndpointPolicy", + "ec2:ModifyVerifiedAccessEndpoint", + "ec2:ModifyVerifiedAccessEndpointPolicy", + "elasticloadbalancing:DescribeListenerCertificates", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeLoadBalancers", + "iam:CreateServiceLinkedRole", + "iam:ListRoles", + "sso:CreateManagedApplicationInstance", + "sso:GetManagedApplicationInstance", + "sso:GetPeregrineStatus", + "sso:GetSharedSsoConfiguration", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ], + "timeoutInMinutes": 60 + }, + "list": { + "permissions": [ + "ec2:DescribeVerifiedAccessEndpoints", + "ec2:DescribeTags", + "acm:CreateCertificateRelation", + "acm:DeleteCertificateRelation", + "acm:DescribeCertificate", + "acm:GetCertificateWithPK", + "ec2:CreateTags", + "ec2:CreateVerifiedAccessEndpoint", + "ec2:DeleteTags", + "ec2:DeleteVerifiedAccessEndpoint", + "ec2:DescribeAccountAttributes", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:GetVerifiedAccessEndpointPolicy", + "ec2:ModifyVerifiedAccessEndpoint", + "ec2:ModifyVerifiedAccessEndpointPolicy", + "elasticloadbalancing:DescribeListenerCertificates", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeLoadBalancers", + "iam:CreateServiceLinkedRole", + "iam:ListRoles", + "sso:CreateManagedApplicationInstance", + "sso:DeleteManagedApplicationInstance", + "sso:GetManagedApplicationInstance", + "sso:GetPeregrineStatus", + "sso:GetSharedSsoConfiguration", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/verifiedaccessgroup.json b/internal/aws/cfn/schemas/aws/ec2/verifiedaccessgroup.json new file mode 100644 index 00000000..df4d7a71 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/verifiedaccessgroup.json @@ -0,0 +1,185 @@ +{ + "typeName": "AWS::EC2::VerifiedAccessGroup", + "description": "The AWS::EC2::VerifiedAccessGroup resource creates an AWS EC2 Verified Access Group.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-verified-access.aws-ec2-verifiedaccessgroup", + "properties": { + "VerifiedAccessGroupId": { + "description": "The ID of the AWS Verified Access group.", + "type": "string" + }, + "VerifiedAccessInstanceId": { + "description": "The ID of the AWS Verified Access instance.", + "type": "string" + }, + "VerifiedAccessGroupArn": { + "description": "The ARN of the Verified Access group.", + "type": "string" + }, + "Owner": { + "description": "The AWS account number that owns the group.", + "type": "string" + }, + "CreationTime": { + "description": "Time this Verified Access Group was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "Time this Verified Access Group was last updated.", + "type": "string" + }, + "Description": { + "description": "A description for the AWS Verified Access group.", + "type": "string" + }, + "PolicyDocument": { + "description": "The AWS Verified Access policy document.", + "type": "string" + }, + "PolicyEnabled": { + "description": "The status of the Verified Access policy.", + "type": "boolean" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SseSpecification": { + "description": "The configuration options for customer provided KMS encryption.", + "$ref": "#/definitions/SseSpecification" + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "SseSpecification": { + "description": "The configuration options for customer provided KMS encryption.", + "type": "object", + "properties": { + "KmsKeyArn": { + "description": "KMS Key Arn used to encrypt the group policy", + "type": "string" + }, + "CustomerManagedKeyEnabled": { + "description": "Whether to encrypt the policy with the provided key or disable encryption", + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "required": [ + "VerifiedAccessInstanceId" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/VerifiedAccessGroupId", + "/properties/CreationTime", + "/properties/LastUpdatedTime", + "/properties/Owner", + "/properties/VerifiedAccessGroupArn" + ], + "primaryIdentifier": [ + "/properties/VerifiedAccessGroupId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVerifiedAccessGroup", + "ec2:DescribeVerifiedAccessGroups", + "ec2:GetVerifiedAccessGroupPolicy", + "ec2:CreateTags", + "ec2:DescribeTags", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVerifiedAccessGroups", + "ec2:GetVerifiedAccessGroupPolicy", + "ec2:DescribeTags", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVerifiedAccessGroup", + "ec2:ModifyVerifiedAccessGroupPolicy", + "ec2:DescribeVerifiedAccessGroups", + "ec2:GetVerifiedAccessGroupPolicy", + "ec2:DescribeTags", + "ec2:DeleteTags", + "ec2:CreateTags", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVerifiedAccessGroup", + "ec2:DeleteTags", + "ec2:DescribeVerifiedAccessGroups", + "ec2:DescribeTags", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVerifiedAccessGroups", + "ec2:DescribeTags", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/verifiedaccessinstance.json b/internal/aws/cfn/schemas/aws/ec2/verifiedaccessinstance.json new file mode 100644 index 00000000..52bbc948 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/verifiedaccessinstance.json @@ -0,0 +1,291 @@ +{ + "typeName": "AWS::EC2::VerifiedAccessInstance", + "description": "The AWS::EC2::VerifiedAccessInstance resource creates an AWS EC2 Verified Access Instance.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-verified-access.aws-ec2-verifiedaccessinstance", + "properties": { + "VerifiedAccessInstanceId": { + "description": "The ID of the AWS Verified Access instance.", + "type": "string" + }, + "VerifiedAccessTrustProviders": { + "description": "AWS Verified Access trust providers.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VerifiedAccessTrustProvider" + } + }, + "VerifiedAccessTrustProviderIds": { + "description": "The IDs of the AWS Verified Access trust providers.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VerifiedAccessTrustProviderId" + } + }, + "CreationTime": { + "description": "Time this Verified Access Instance was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "Time this Verified Access Instance was last updated.", + "type": "string" + }, + "Description": { + "description": "A description for the AWS Verified Access instance.", + "type": "string" + }, + "LoggingConfigurations": { + "description": "The configuration options for AWS Verified Access instances.", + "$ref": "#/definitions/VerifiedAccessLogs" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "FipsEnabled": { + "description": "Indicates whether FIPS is enabled", + "type": "boolean" + } + }, + "definitions": { + "VerifiedAccessTrustProvider": { + "description": "A Verified Access Trust Provider.", + "type": "object", + "properties": { + "VerifiedAccessTrustProviderId": { + "description": "The ID of the trust provider.", + "type": "string" + }, + "Description": { + "description": "The description of trust provider.", + "type": "string" + }, + "TrustProviderType": { + "description": "The type of trust provider (user- or device-based).", + "type": "string" + }, + "UserTrustProviderType": { + "description": "The type of user-based trust provider.", + "type": "string" + }, + "DeviceTrustProviderType": { + "description": "The type of device-based trust provider.", + "type": "string" + } + }, + "additionalProperties": false + }, + "VerifiedAccessTrustProviderId": { + "description": "The ID of the AWS Verified Access trust provider.", + "type": "string" + }, + "VerifiedAccessLogs": { + "description": "The configuration options for AWS Verified Access instances.", + "type": "object", + "properties": { + "LogVersion": { + "description": "Select log version for Verified Access logs.", + "type": "string" + }, + "IncludeTrustContext": { + "description": "Include claims from trust providers in Verified Access logs.", + "type": "boolean" + }, + "CloudWatchLogs": { + "description": "Sends Verified Access logs to CloudWatch Logs.", + "type": "object", + "properties": { + "Enabled": { + "description": "Indicates whether logging is enabled.", + "type": "boolean" + }, + "LogGroup": { + "description": "The ID of the CloudWatch Logs log group.", + "type": "string" + } + }, + "additionalProperties": false + }, + "KinesisDataFirehose": { + "description": "Sends Verified Access logs to Kinesis.", + "type": "object", + "properties": { + "Enabled": { + "description": "Indicates whether logging is enabled.", + "type": "boolean" + }, + "DeliveryStream": { + "description": "The ID of the delivery stream.", + "type": "string" + } + }, + "additionalProperties": false + }, + "S3": { + "description": "Sends Verified Access logs to Amazon S3.", + "type": "object", + "properties": { + "Enabled": { + "description": "Indicates whether logging is enabled.", + "type": "boolean" + }, + "BucketName": { + "description": "The bucket name.", + "type": "string" + }, + "BucketOwner": { + "description": "The ID of the AWS account that owns the Amazon S3 bucket.", + "type": "string" + }, + "Prefix": { + "description": "The bucket prefix.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/VerifiedAccessInstanceId", + "/properties/CreationTime", + "/properties/LastUpdatedTime" + ], + "primaryIdentifier": [ + "/properties/VerifiedAccessInstanceId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVerifiedAccessInstance", + "ec2:AttachVerifiedAccessTrustProvider", + "ec2:ModifyVerifiedAccessInstanceLoggingConfiguration", + "ec2:DescribeVerifiedAccessInstances", + "ec2:DescribeVerifiedAccessInstanceLoggingConfigurations", + "ec2:CreateTags", + "ec2:DescribeTags", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:PutDestination", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutLogEvents", + "logs:DescribeLogStreams", + "s3:listBuckets", + "s3:PutObject", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "logs:DescribeLogGroups", + "logs:PutResourcePolicy", + "firehose:TagDeliveryStream", + "logs:DescribeResourcePolicies", + "iam:CreateServiceLinkedRole", + "verified-access:AllowVerifiedAccess" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVerifiedAccessInstances", + "ec2:DescribeVerifiedAccessInstanceLoggingConfigurations", + "ec2:DescribeTags", + "logs:GetLogDelivery", + "logs:ListLogDeliveries" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVerifiedAccessInstance", + "ec2:ModifyVerifiedAccessInstanceLoggingConfiguration", + "ec2:DescribeVerifiedAccessInstances", + "ec2:DescribeVerifiedAccessInstanceLoggingConfigurations", + "ec2:DescribeTags", + "ec2:AttachVerifiedAccessTrustProvider", + "ec2:DetachVerifiedAccessTrustProvider", + "ec2:DeleteTags", + "ec2:CreateTags", + "ec2:DescribeTags", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:PutDestination", + "logs:PutLogEvents", + "logs:DescribeLogStreams", + "s3:listBuckets", + "s3:PutObject", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "logs:DescribeLogGroups", + "logs:PutResourcePolicy", + "firehose:TagDeliveryStream", + "iam:CreateServiceLinkedRole", + "logs:DescribeResourcePolicies" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVerifiedAccessInstance", + "ec2:DeleteTags", + "ec2:DescribeVerifiedAccessInstances", + "ec2:DescribeVerifiedAccessInstanceLoggingConfigurations", + "ec2:DetachVerifiedAccessTrustProvider", + "ec2:GetVerifiedAccessGroupPolicy", + "ec2:DescribeTags", + "logs:ListLogDeliveries", + "logs:GetLogDelivery", + "logs:DeleteLogDelivery" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVerifiedAccessInstances", + "ec2:DescribeTags", + "logs:ListLogDeliveries", + "logs:GetLogDelivery" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/verifiedaccesstrustprovider.json b/internal/aws/cfn/schemas/aws/ec2/verifiedaccesstrustprovider.json new file mode 100644 index 00000000..1890db50 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/verifiedaccesstrustprovider.json @@ -0,0 +1,236 @@ +{ + "typeName": "AWS::EC2::VerifiedAccessTrustProvider", + "description": "The AWS::EC2::VerifiedAccessTrustProvider type describes a verified access trust provider", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-verified-access.aws-ec2-verifiedaccesstrustprovider", + "definitions": { + "OidcOptions": { + "description": "The OpenID Connect details for an oidc -type, user-identity based trust provider.", + "type": "object", + "properties": { + "Issuer": { + "type": "string", + "description": "The OIDC issuer." + }, + "AuthorizationEndpoint": { + "type": "string", + "description": "The OIDC authorization endpoint." + }, + "TokenEndpoint": { + "type": "string", + "description": "The OIDC token endpoint." + }, + "UserInfoEndpoint": { + "type": "string", + "description": "The OIDC user info endpoint." + }, + "ClientId": { + "type": "string", + "description": "The client identifier." + }, + "ClientSecret": { + "type": "string", + "description": "The client secret." + }, + "Scope": { + "type": "string", + "description": "OpenID Connect (OIDC) scopes are used by an application during authentication to authorize access to details of a user. Each scope returns a specific set of user attributes." + } + }, + "additionalProperties": false + }, + "DeviceOptions": { + "description": "The options for device identity based trust providers.", + "type": "object", + "properties": { + "TenantId": { + "type": "string", + "description": "The ID of the tenant application with the device-identity provider." + }, + "PublicSigningKeyUrl": { + "type": "string", + "description": "URL Verified Access will use to verify authenticity of the device tokens." + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "SseSpecification": { + "description": "The configuration options for customer provided KMS encryption.", + "$ref": "#/definitions/SseSpecification" + } + }, + "properties": { + "TrustProviderType": { + "description": "Type of trust provider. Possible values: user|device", + "type": "string" + }, + "DeviceTrustProviderType": { + "description": "The type of device-based trust provider. Possible values: jamf|crowdstrike", + "type": "string" + }, + "UserTrustProviderType": { + "description": "The type of device-based trust provider. Possible values: oidc|iam-identity-center", + "type": "string" + }, + "OidcOptions": { + "$ref": "#/definitions/OidcOptions" + }, + "DeviceOptions": { + "$ref": "#/definitions/DeviceOptions" + }, + "PolicyReferenceName": { + "description": "The identifier to be used when working with policy rules.", + "type": "string" + }, + "CreationTime": { + "description": "The creation time.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The last updated time.", + "type": "string" + }, + "VerifiedAccessTrustProviderId": { + "description": "The ID of the Amazon Web Services Verified Access trust provider.", + "type": "string" + }, + "Description": { + "description": "A description for the Amazon Web Services Verified Access trust provider.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SseSpecification": { + "description": "The configuration options for customer provided KMS encryption.", + "type": "object", + "properties": { + "KmsKeyArn": { + "description": "KMS Key Arn used to encrypt the group policy", + "type": "string" + }, + "CustomerManagedKeyEnabled": { + "description": "Whether to encrypt the policy with the provided key or disable encryption", + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "TrustProviderType", + "PolicyReferenceName" + ], + "readOnlyProperties": [ + "/properties/VerifiedAccessTrustProviderId", + "/properties/CreationTime", + "/properties/LastUpdatedTime" + ], + "createOnlyProperties": [ + "/properties/PolicyReferenceName", + "/properties/DeviceOptions", + "/properties/DeviceTrustProviderType", + "/properties/TrustProviderType", + "/properties/UserTrustProviderType" + ], + "primaryIdentifier": [ + "/properties/VerifiedAccessTrustProviderId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVerifiedAccessTrustProvider", + "ec2:DescribeVerifiedAccessTrustProviders", + "ec2:CreateTags", + "ec2:DescribeTags", + "sso:GetSharedSsoConfiguration", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVerifiedAccessTrustProviders", + "ec2:DescribeTags", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVerifiedAccessTrustProvider", + "ec2:DescribeVerifiedAccessTrustProviders", + "ec2:DescribeTags", + "ec2:DeleteTags", + "ec2:CreateTags", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVerifiedAccessTrustProvider", + "ec2:DeleteTags", + "ec2:DescribeVerifiedAccessTrustProviders", + "ec2:DescribeTags", + "kms:DescribeKey", + "kms:RetireGrant", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVerifiedAccessTrustProviders", + "ec2:DescribeTags", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/volume.json b/internal/aws/cfn/schemas/aws/ec2/volume.json new file mode 100644 index 00000000..69b1f5e4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/volume.json @@ -0,0 +1,150 @@ +{ + "typeName": "AWS::EC2::Volume", + "description": "Specifies an Amazon Elastic Block Store (Amazon EBS) volume.\n When you use CFNlong to update an Amazon EBS volume that modifies ``Iops``, ``Size``, or ``VolumeType``, there is a cooldown period before another operation can occur. This can cause your stack to report being in ``UPDATE_IN_PROGRESS`` or ``UPDATE_ROLLBACK_IN_PROGRESS`` for long periods of time.\n Amazon EBS does not support sizing down an Amazon EBS volume. CFNlong does not attempt to modify an Amazon EBS volume to a smaller size on rollback.\n Some common scenarios when you might encounter a cooldown period for Amazon EBS include:\n + You successfully update an Amazon EBS volume and the update succeeds. When you attempt another update within the cooldown window, that update will be subject to a cooldown period.\n + You successfully update an Amazon EBS volume and the update succeeds but another change in your ``update-stack`` call fails. The rollback will be subject to a cooldown period.\n \n For more information on the coo", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "additionalProperties": false, + "properties": { + "MultiAttachEnabled": { + "type": "boolean", + "description": "Indicates whether Amazon EBS Multi-Attach is enabled.\n CFNlong does not currently support updating a single-attach volume to be multi-attach enabled, updating a multi-attach enabled volume to be single-attach, or updating the size or number of I/O operations per second (IOPS) of a multi-attach enabled volume." + }, + "KmsKeyId": { + "type": "string", + "description": "The identifier of the kms-key-long to use for Amazon EBS encryption. If ``KmsKeyId`` is specified, the encrypted state must be ``true``.\n If you omit this property and your account is enabled for encryption by default, or *Encrypted* is set to ``true``, then the volume is encrypted using the default key specified for your account. If your account does not have a default key, then the volume is encrypted using the aws-managed-key.\n Alternatively, if you want to specify a different key, you can specify one of the following:\n + Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.\n + Key alias. Specify the alias for the key, prefixed with ``alias/``. For example, for a key with the alias ``my_cmk``, use ``alias/my_cmk``. Or to specify the aws-managed-key, use ``alias/aws/ebs``.\n + Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.\n + Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias." + }, + "Encrypted": { + "type": "boolean", + "description": "Indicates whether the volume should be encrypted. The effect of setting the encryption state to ``true`` depends on the volume origin (new or from a snapshot), starting encryption state, ownership, and whether encryption by default is enabled. For more information, see [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) in the *Amazon Elastic Compute Cloud User Guide*.\n Encrypted Amazon EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see [Supported instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances)." + }, + "Size": { + "type": "integer", + "description": "The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.\n The following are the supported volumes sizes for each volume type:\n + ``gp2`` and ``gp3``: 1 - 16,384 GiB\n + ``io1``: 4 - 16,384 GiB\n + ``io2``: 4 - 65,536 GiB\n + ``st1`` and ``sc1``: 125 - 16,384 GiB\n + ``standard``: 1 - 1024 GiB" + }, + "AutoEnableIO": { + "type": "boolean", + "description": "Indicates whether the volume is auto-enabled for I/O operations. By default, Amazon EBS disables I/O to the volume from attached EC2 instances when it determines that a volume's data is potentially inconsistent. If the consistency of the volume is not a concern, and you prefer that the volume be made available immediately if it's impaired, you can configure the volume to automatically enable I/O." + }, + "OutpostArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the Outpost." + }, + "AvailabilityZone": { + "type": "string", + "description": "The ID of the Availability Zone in which to create the volume. For example, ``us-east-1a``." + }, + "Throughput": { + "type": "integer", + "description": "The throughput to provision for a volume, with a maximum of 1,000 MiB/s.\n This parameter is valid only for ``gp3`` volumes. The default value is 125.\n Valid Range: Minimum value of 125. Maximum value of 1000." + }, + "Iops": { + "type": "integer", + "description": "The number of I/O operations per second (IOPS). For ``gp3``, ``io1``, and ``io2`` volumes, this represents the number of IOPS that are provisioned for the volume. For ``gp2`` volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.\n The following are the supported values for each volume type:\n + ``gp3``: 3,000 - 16,000 IOPS\n + ``io1``: 100 - 64,000 IOPS\n + ``io2``: 100 - 256,000 IOPS\n \n For ``io2`` volumes, you can achieve up to 256,000 IOPS on [instances built on the Nitro System](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). On other instances, you can achieve performance up to 32,000 IOPS.\n This parameter is required for ``io1`` and ``io2`` volumes. The default for ``gp3`` volumes is 3,000 IOPS. This parameter is not supported for ``gp2``, ``st1``, ``sc1``, or ``standard`` volumes." + }, + "SnapshotId": { + "type": "string", + "description": "The snapshot from which to create the volume. You must specify either a snapshot ID or a volume size." + }, + "VolumeType": { + "type": "string", + "description": "The volume type. This parameter can be one of the following values:\n + General Purpose SSD: ``gp2`` | ``gp3`` \n + Provisioned IOPS SSD: ``io1`` | ``io2`` \n + Throughput Optimized HDD: ``st1`` \n + Cold HDD: ``sc1`` \n + Magnetic: ``standard`` \n \n For more information, see [Amazon EBS volume types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) in the *Amazon Elastic Compute Cloud User Guide*.\n Default: ``gp2``" + }, + "VolumeId": { + "type": "string", + "description": "" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "description": "The tags to apply to the volume during creation.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The tag key.", + "type": "string" + }, + "Value": { + "description": "The tag value.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVolume", + "ec2:DescribeVolumes", + "ec2:DescribeVolumeAttribute", + "ec2:ModifyVolumeAttribute", + "ec2:CreateTags", + "kms:GenerateDataKeyWithoutPlaintext", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVolumes", + "ec2:DescribeVolumeAttribute", + "ec2:DescribeTags" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVolume", + "ec2:ModifyVolumeAttribute", + "ec2:DescribeVolumeAttribute", + "ec2:DescribeVolumesModifications", + "ec2:DescribeVolumes", + "ec2:CreateTags", + "ec2:DeleteTags" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "ec2:DeleteVolume", + "ec2:CreateSnapshot", + "ec2:DescribeSnapshots", + "ec2:DeleteTags", + "ec2:DescribeVolumes" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVolumes", + "ec2:DescribeTags", + "ec2:DescribeVolumeAttribute" + ] + } + }, + "required": [ + "AvailabilityZone" + ], + "primaryIdentifier": [ + "/properties/VolumeId" + ], + "readOnlyProperties": [ + "/properties/VolumeId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ec2/volumeattachment.json b/internal/aws/cfn/schemas/aws/ec2/volumeattachment.json new file mode 100644 index 00000000..78d6a458 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/volumeattachment.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::EC2::VolumeAttachment", + "description": "Attaches an Amazon EBS volume to a running instance and exposes it to the instance with the specified device name.\n Before this resource can be deleted (and therefore the volume detached), you must first unmount the volume in the instance. Failure to do so results in the volume being stuck in the busy state while it is trying to detach, which could possibly damage the file system or the data it contains.\n If an Amazon EBS volume is the root device of an instance, it cannot be detached while the instance is in the \"running\" state. To detach the root volume, stop the instance first.\n If the root volume is detached from an instance with an MKT product code, then the product codes from that volume are no longer associated with the instance.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "definitions": { + "VolumeId": { + "description": "The ID of the Amazon EBS volume", + "type": "string" + }, + "Id": { + "description": "", + "type": "string" + }, + "InstanceId": { + "description": "The ID of the instance to which the volume attaches", + "type": "string" + }, + "Device": { + "description": "The device name", + "type": "string" + } + }, + "properties": { + "VolumeId": { + "$ref": "#/definitions/VolumeId", + "description": "The ID of the Amazon EBS volume. The volume and instance must be within the same Availability Zone. This value can be a reference to an [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ebs-volume.html) resource, or it can be the volume ID of an existing Amazon EBS volume." + }, + "InstanceId": { + "$ref": "#/definitions/InstanceId", + "description": "The ID of the instance to which the volume attaches. This value can be a reference to an [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html) resource, or it can be the physical ID of an existing EC2 instance." + }, + "Device": { + "$ref": "#/definitions/Device", + "description": "The device name (for example, ``/dev/sdh`` or ``xvdh``)." + } + }, + "required": [ + "VolumeId", + "InstanceId" + ], + "primaryIdentifier": [ + "/properties/VolumeId", + "/properties/InstanceId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/Device", + "/properties/InstanceId", + "/properties/VolumeId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AttachVolume", + "ec2:DescribeVolumes" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVolumes" + ] + }, + "delete": { + "permissions": [ + "ec2:DetachVolume", + "ec2:DescribeVolumes" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVolumes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpc.json b/internal/aws/cfn/schemas/aws/ec2/vpc.json new file mode 100644 index 00000000..3d98d707 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpc.json @@ -0,0 +1,159 @@ +{ + "typeName": "AWS::EC2::VPC", + "description": "Specifies a virtual private cloud (VPC).\n You can optionally request an IPv6 CIDR block for the VPC. You can request an Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses (BYOIP).\n For more information, see [Virtual private clouds (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/configure-your-vpc.html) in the *Amazon VPC User Guide*.", + "additionalProperties": false, + "properties": { + "VpcId": { + "type": "string", + "description": "" + }, + "CidrBlock": { + "type": "string", + "description": "The IPv4 network range for the VPC, in CIDR notation. For example, ``10.0.0.0/16``. We modify the specified CIDR block to its canonical form; for example, if you specify ``100.68.0.18/18``, we modify it to ``100.68.0.0/18``.\n You must specify either``CidrBlock`` or ``Ipv4IpamPoolId``." + }, + "CidrBlockAssociations": { + "type": "array", + "description": "", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "DefaultNetworkAcl": { + "type": "string", + "insertionOrder": false, + "description": "" + }, + "DefaultSecurityGroup": { + "type": "string", + "insertionOrder": false, + "description": "" + }, + "Ipv6CidrBlocks": { + "type": "array", + "description": "", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "EnableDnsHostnames": { + "type": "boolean", + "description": "Indicates whether the instances launched in the VPC get DNS hostnames. If enabled, instances in the VPC get DNS hostnames; otherwise, they do not. Disabled by default for nondefault VPCs. For more information, see [DNS attributes in your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support).\n You can only enable DNS hostnames if you've enabled DNS support." + }, + "EnableDnsSupport": { + "type": "boolean", + "description": "Indicates whether the DNS resolution is supported for the VPC. If enabled, queries to the Amazon provided DNS server at the 169.254.169.253 IP address, or the reserved IP address at the base of the VPC network range \"plus two\" succeed. If disabled, the Amazon provided DNS service in the VPC that resolves public DNS hostnames to IP addresses is not enabled. Enabled by default. For more information, see [DNS attributes in your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)." + }, + "InstanceTenancy": { + "type": "string", + "description": "The allowed tenancy of instances launched into the VPC.\n + ``default``: An instance launched into the VPC runs on shared hardware by default, unless you explicitly specify a different tenancy during instance launch.\n + ``dedicated``: An instance launched into the VPC runs on dedicated hardware by default, unless you explicitly specify a tenancy of ``host`` during instance launch. You cannot specify a tenancy of ``default`` during instance launch.\n \n Updating ``InstanceTenancy`` requires no replacement only if you are updating its value from ``dedicated`` to ``default``. Updating ``InstanceTenancy`` from ``default`` to ``dedicated`` requires replacement." + }, + "Ipv4IpamPoolId": { + "type": "string", + "description": "The ID of an IPv4 IPAM pool you want to use for allocating this VPC's CIDR. For more information, see [What is IPAM?](https://docs.aws.amazon.com//vpc/latest/ipam/what-is-it-ipam.html) in the *Amazon VPC IPAM User Guide*.\n You must specify either``CidrBlock`` or ``Ipv4IpamPoolId``." + }, + "Ipv4NetmaskLength": { + "type": "integer", + "description": "The netmask length of the IPv4 CIDR you want to allocate to this VPC from an Amazon VPC IP Address Manager (IPAM) pool. For more information about IPAM, see [What is IPAM?](https://docs.aws.amazon.com//vpc/latest/ipam/what-is-it-ipam.html) in the *Amazon VPC IPAM User Guide*." + }, + "Tags": { + "type": "array", + "description": "The tags for the VPC.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The tag key." + }, + "Value": { + "type": "string", + "description": "The tag value." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "Specifies a tag. For more information, see [Add tags to a resource](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#cloudformation-add-tag-specifications)." + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/CidrBlock", + "/properties/Ipv4IpamPoolId", + "/properties/Ipv4NetmaskLength" + ], + "conditionalCreateOnlyProperties": [ + "/properties/InstanceTenancy" + ], + "readOnlyProperties": [ + "/properties/CidrBlockAssociations", + "/properties/DefaultNetworkAcl", + "/properties/DefaultSecurityGroup", + "/properties/Ipv6CidrBlocks", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/VpcId" + ], + "writeOnlyProperties": [ + "/properties/Ipv4IpamPoolId", + "/properties/Ipv4NetmaskLength" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpc", + "ec2:DescribeVpcs", + "ec2:ModifyVpcAttribute", + "ec2:CreateTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpcs", + "ec2:DescribeSecurityGroups", + "ec2:DescribeNetworkAcls", + "ec2:DescribeVpcAttribute" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:ModifyVpcAttribute", + "ec2:DeleteTags", + "ec2:ModifyVpcTenancy" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpc", + "ec2:DescribeVpcs" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpcs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpccidrblock.json b/internal/aws/cfn/schemas/aws/ec2/vpccidrblock.json new file mode 100644 index 00000000..e28c77a5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpccidrblock.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::EC2::VPCCidrBlock", + "description": "Resource Type definition for AWS::EC2::VPCCidrBlock", + "additionalProperties": false, + "properties": { + "CidrBlock": { + "type": "string", + "description": "An IPv4 CIDR block to associate with the VPC." + }, + "Ipv6Pool": { + "type": "string", + "description": "The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block." + }, + "Id": { + "type": "string", + "description": "The Id of the VPC associated CIDR Block." + }, + "VpcId": { + "type": "string", + "description": "The ID of the VPC." + }, + "Ipv6CidrBlock": { + "type": "string", + "description": "An IPv6 CIDR block from the IPv6 address pool." + }, + "Ipv4IpamPoolId": { + "type": "string", + "description": "The ID of the IPv4 IPAM pool to Associate a CIDR from to a VPC." + }, + "Ipv4NetmaskLength": { + "type": "integer", + "description": "The netmask length of the IPv4 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool." + }, + "Ipv6IpamPoolId": { + "type": "string", + "description": "The ID of the IPv6 IPAM pool to Associate a CIDR from to a VPC." + }, + "Ipv6NetmaskLength": { + "type": "integer", + "description": "The netmask length of the IPv6 CIDR you would like to associate from an Amazon VPC IP Address Manager (IPAM) pool." + }, + "AmazonProvidedIpv6CidrBlock": { + "type": "boolean", + "description": "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IPv6 addresses, or the size of the CIDR block." + } + }, + "tagging": { + "taggable": false + }, + "required": [ + "VpcId" + ], + "replacementStrategy": "delete_then_create", + "createOnlyProperties": [ + "/properties/Ipv6Pool", + "/properties/VpcId", + "/properties/AmazonProvidedIpv6CidrBlock", + "/properties/Ipv6CidrBlock", + "/properties/CidrBlock", + "/properties/Ipv4IpamPoolId", + "/properties/Ipv4NetmaskLength", + "/properties/Ipv6IpamPoolId", + "/properties/Ipv6NetmaskLength" + ], + "primaryIdentifier": [ + "/properties/Id", + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/Ipv4IpamPoolId", + "/properties/Ipv4NetmaskLength", + "/properties/Ipv6IpamPoolId", + "/properties/Ipv6NetmaskLength" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:AssociateVpcCidrBlock", + "ec2:DescribeVpcs", + "ec2:AllocateIpamPoolCidr" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpcs" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeVpcs", + "ec2:DisassociateVpcCidrBlock" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "VpcId": { + "type": "string", + "description": "The ID of the VPC." + } + }, + "required": [ + "VpcId" + ] + }, + "permissions": [ + "ec2:DescribeVpcs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpcdhcpoptionsassociation.json b/internal/aws/cfn/schemas/aws/ec2/vpcdhcpoptionsassociation.json new file mode 100644 index 00000000..b459687e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpcdhcpoptionsassociation.json @@ -0,0 +1,62 @@ +{ + "typeName": "AWS::EC2::VPCDHCPOptionsAssociation", + "description": "Associates a set of DHCP options with a VPC, or associates no DHCP options with the VPC.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "properties": { + "DhcpOptionsId": { + "type": "string", + "description": "The ID of the DHCP options set, or default to associate no DHCP options with the VPC." + }, + "VpcId": { + "type": "string", + "description": "The ID of the VPC." + } + }, + "additionalProperties": false, + "required": [ + "VpcId", + "DhcpOptionsId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/DhcpOptionsId", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/DhcpOptionsId", + "/properties/VpcId" + ], + "replacementStrategy": "delete_then_create", + "handlers": { + "create": { + "permissions": [ + "ec2:AssociateDhcpOptions" + ] + }, + "update": { + "permissions": [ + "ec2:AssociateDhcpOptions" + ] + }, + "delete": { + "permissions": [ + "ec2:AssociateDhcpOptions" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpcs" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpcs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpcendpoint.json b/internal/aws/cfn/schemas/aws/ec2/vpcendpoint.json new file mode 100644 index 00000000..0f42c84c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpcendpoint.json @@ -0,0 +1,145 @@ +{ + "typeName": "AWS::EC2::VPCEndpoint", + "description": "Specifies a VPC endpoint. A VPC endpoint provides a private connection between your VPC and an endpoint service. You can use an endpoint service provided by AWS, an MKT Partner, or another AWS accounts in your organization. For more information, see the [User Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/).\n An endpoint of type ``Interface`` establishes connections between the subnets in your VPC and an AWS-service, your own service, or a service hosted by another AWS-account. With an interface VPC endpoint, you specify the subnets in which to create the endpoint and the security groups to associate with the endpoint network interfaces.\n An endpoint of type ``gateway`` serves as a target for a route in your route table for traffic destined for S3 or DDB. You can specify an endpoint policy for the endpoint, which controls access to the service from your VPC. You can also specify the VPC route tables that use the endpoint. For more information about connectivity to S3, see [W", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string", + "description": "" + }, + "CreationTimestamp": { + "type": "string", + "description": "" + }, + "DnsEntries": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "" + }, + "NetworkInterfaceIds": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "" + }, + "PolicyDocument": { + "type": [ + "string", + "object" + ], + "description": "An endpoint policy, which controls access to the service from the VPC. The default endpoint policy allows full access to the service. Endpoint policies are supported only for gateway and interface endpoints.\n For CloudFormation templates in YAML, you can provide the policy in JSON or YAML format. CFNlong converts YAML policies to JSON format before calling the API to create or modify the VPC endpoint." + }, + "PrivateDnsEnabled": { + "type": "boolean", + "description": "Indicate whether to associate a private hosted zone with the specified VPC. The private hosted zone contains a record set for the default public DNS name for the service for the Region (for example, ``kinesis.us-east-1.amazonaws.com``), which resolves to the private IP addresses of the endpoint network interfaces in the VPC. This enables you to make requests to the default public DNS name for the service instead of the public DNS names that are automatically generated by the VPC endpoint service.\n To use a private hosted zone, you must set the following VPC attributes to ``true``: ``enableDnsHostnames`` and ``enableDnsSupport``.\n This property is supported only for interface endpoints.\n Default: ``false``" + }, + "RouteTableIds": { + "type": "array", + "description": "The IDs of the route tables. Routing is supported only for gateway endpoints.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "type": "array", + "description": "The IDs of the security groups to associate with the endpoint network interfaces. If this parameter is not specified, we use the default security group for the VPC. Security groups are supported only for interface endpoints.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "ServiceName": { + "type": "string", + "description": "The name of the endpoint service." + }, + "SubnetIds": { + "type": "array", + "description": "The IDs of the subnets in which to create endpoint network interfaces. You must specify this property for an interface endpoint or a Gateway Load Balancer endpoint. You can't specify this property for a gateway endpoint. For a Gateway Load Balancer endpoint, you can specify only one subnet.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "VpcEndpointType": { + "type": "string", + "enum": [ + "Interface", + "Gateway", + "GatewayLoadBalancer" + ], + "description": "The type of endpoint.\n Default: Gateway" + }, + "VpcId": { + "type": "string", + "description": "The ID of the VPC." + } + }, + "required": [ + "VpcId", + "ServiceName" + ], + "readOnlyProperties": [ + "/properties/NetworkInterfaceIds", + "/properties/CreationTimestamp", + "/properties/DnsEntries", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/ServiceName", + "/properties/VpcEndpointType", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpcEndpoint", + "ec2:DescribeVpcEndpoints" + ], + "timeoutInMinutes": 210 + }, + "read": { + "permissions": [ + "ec2:DescribeVpcEndpoints" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVpcEndpoint", + "ec2:DescribeVpcEndpoints" + ], + "timeoutInMinutes": 210 + }, + "delete": { + "permissions": [ + "ec2:DeleteVpcEndpoints", + "ec2:DescribeVpcEndpoints" + ], + "timeoutInMinutes": 210 + }, + "list": { + "permissions": [ + "ec2:DescribeVpcEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpcendpointconnectionnotification.json b/internal/aws/cfn/schemas/aws/ec2/vpcendpointconnectionnotification.json new file mode 100644 index 00000000..c24d5b77 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpcendpointconnectionnotification.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::EC2::VPCEndpointConnectionNotification", + "description": "Resource Type definition for AWS::EC2::VPCEndpointConnectionNotification", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-endpoint", + "additionalProperties": false, + "properties": { + "VPCEndpointConnectionNotificationId": { + "description": "VPC Endpoint Connection ID generated by service", + "type": "string" + }, + "ConnectionEvents": { + "description": "The endpoint events for which to receive notifications.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "ConnectionNotificationArn": { + "description": "The ARN of the SNS topic for the notifications.", + "type": "string" + }, + "ServiceId": { + "description": "The ID of the endpoint service.", + "type": "string" + }, + "VPCEndpointId": { + "description": "The ID of the endpoint.", + "type": "string" + } + }, + "required": [ + "ConnectionEvents", + "ConnectionNotificationArn" + ], + "createOnlyProperties": [ + "/properties/ServiceId", + "/properties/VPCEndpointId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "readOnlyProperties": [ + "/properties/VPCEndpointConnectionNotificationId" + ], + "primaryIdentifier": [ + "/properties/VPCEndpointConnectionNotificationId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpcEndpointConnectionNotification" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpcEndpointConnectionNotifications" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVpcEndpointConnectionNotification", + "ec2:DescribeVpcEndpointConnectionNotifications" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpcEndpointConnectionNotifications" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpcEndpointConnectionNotifications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpcendpointservice.json b/internal/aws/cfn/schemas/aws/ec2/vpcendpointservice.json new file mode 100644 index 00000000..822e0007 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpcendpointservice.json @@ -0,0 +1,92 @@ +{ + "typeName": "AWS::EC2::VPCEndpointService", + "description": "Resource Type definition for AWS::EC2::VPCEndpointService", + "additionalProperties": false, + "properties": { + "NetworkLoadBalancerArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ContributorInsightsEnabled": { + "type": "boolean" + }, + "PayerResponsibility": { + "type": "string" + }, + "ServiceId": { + "type": "string" + }, + "AcceptanceRequired": { + "type": "boolean" + }, + "GatewayLoadBalancerArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "primaryIdentifier": [ + "/properties/ServiceId" + ], + "readOnlyProperties": [ + "/properties/ServiceId" + ], + "writeOnlyProperties": [ + "/properties/ContributorInsightsEnabled" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpcEndpointServiceConfiguration", + "ec2:ModifyVpcEndpointServiceConfiguration", + "ec2:ModifyVpcEndpointServicePayerResponsibility", + "cloudwatch:ListManagedInsightRules", + "cloudwatch:DeleteInsightRules", + "cloudwatch:PutManagedInsightRules", + "ec2:DescribeVpcEndpointServiceConfigurations" + ] + }, + "update": { + "permissions": [ + "ec2:ModifyVpcEndpointServiceConfiguration", + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:ModifyVpcEndpointServicePayerResponsibility", + "cloudwatch:ListManagedInsightRules", + "cloudwatch:DeleteInsightRules", + "cloudwatch:PutManagedInsightRules" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpcEndpointServiceConfigurations", + "cloudwatch:ListManagedInsightRules" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DescribeVpcEndpointServiceConfigurations", + "cloudwatch:ListManagedInsightRules", + "cloudwatch:DeleteInsightRules" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpcEndpointServiceConfigurations", + "cloudwatch:ListManagedInsightRules" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpcendpointservicepermissions.json b/internal/aws/cfn/schemas/aws/ec2/vpcendpointservicepermissions.json new file mode 100644 index 00000000..0e27a6f2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpcendpointservicepermissions.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::EC2::VPCEndpointServicePermissions", + "description": "Resource Type definition for AWS::EC2::VPCEndpointServicePermissions", + "additionalProperties": false, + "properties": { + "AllowedPrincipals": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ServiceId": { + "type": "string" + } + }, + "required": [ + "ServiceId" + ], + "createOnlyProperties": [ + "/properties/ServiceId" + ], + "primaryIdentifier": [ + "/properties/ServiceId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpcEndpointServicePermissions", + "ec2:ModifyVpcEndpointServicePermissions", + "ec2:DeleteVpcEndpointServicePermissions", + "ec2:DescribeVpcEndpointServicePermissions" + ] + }, + "update": { + "permissions": [ + "ec2:CreateVpcEndpointServicePermissions", + "ec2:ModifyVpcEndpointServicePermissions", + "ec2:DeleteVpcEndpointServicePermissions", + "ec2:DescribeVpcEndpointServicePermissions" + ] + }, + "read": { + "permissions": [ + "ec2:CreateVpcEndpointServicePermissions", + "ec2:ModifyVpcEndpointServicePermissions", + "ec2:DeleteVpcEndpointServicePermissions", + "ec2:DescribeVpcEndpointServicePermissions" + ] + }, + "delete": { + "permissions": [ + "ec2:CreateVpcEndpointServicePermissions", + "ec2:ModifyVpcEndpointServicePermissions", + "ec2:DeleteVpcEndpointServicePermissions", + "ec2:DescribeVpcEndpointServicePermissions" + ] + }, + "list": { + "permissions": [ + "ec2:CreateVpcEndpointServicePermissions", + "ec2:ModifyVpcEndpointServicePermissions", + "ec2:DeleteVpcEndpointServicePermissions", + "ec2:DescribeVpcEndpointServicePermissions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpcgatewayattachment.json b/internal/aws/cfn/schemas/aws/ec2/vpcgatewayattachment.json new file mode 100644 index 00000000..2c3076e7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpcgatewayattachment.json @@ -0,0 +1,84 @@ +{ + "typeName": "AWS::EC2::VPCGatewayAttachment", + "description": "Resource Type definition for AWS::EC2::VPCGatewayAttachment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "additionalProperties": false, + "properties": { + "AttachmentType": { + "type": "string", + "description": "Used to identify if this resource is an Internet Gateway or Vpn Gateway Attachment " + }, + "InternetGatewayId": { + "type": "string", + "description": "The ID of the internet gateway. You must specify either InternetGatewayId or VpnGatewayId, but not both." + }, + "VpcId": { + "type": "string", + "description": "The ID of the VPC." + }, + "VpnGatewayId": { + "type": "string", + "description": "The ID of the virtual private gateway. You must specify either InternetGatewayId or VpnGatewayId, but not both." + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "VpcId" + ], + "createOnlyProperties": [ + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/AttachmentType" + ], + "primaryIdentifier": [ + "/properties/AttachmentType", + "/properties/VpcId" + ], + "replacementStrategy": "delete_then_create", + "handlers": { + "create": { + "permissions": [ + "ec2:AttachInternetGateway", + "ec2:AttachVpnGateway", + "ec2:DescribeInternetGateways", + "ec2:DescribeVpnGateways" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeInternetGateways", + "ec2:DescribeVpnGateways" + ] + }, + "update": { + "permissions": [ + "ec2:AttachInternetGateway", + "ec2:AttachVpnGateway", + "ec2:DetachInternetGateway", + "ec2:DetachVpnGateway", + "ec2:DescribeInternetGateways", + "ec2:DescribeVpnGateways" + ] + }, + "delete": { + "permissions": [ + "ec2:DetachInternetGateway", + "ec2:DetachVpnGateway", + "ec2:DescribeInternetGateways", + "ec2:DescribeVpnGateways" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeInternetGateways", + "ec2:DescribeVpnGateways" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpcpeeringconnection.json b/internal/aws/cfn/schemas/aws/ec2/vpcpeeringconnection.json new file mode 100644 index 00000000..d5055da4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpcpeeringconnection.json @@ -0,0 +1,121 @@ +{ + "typeName": "AWS::EC2::VPCPeeringConnection", + "description": "Resource Type definition for AWS::EC2::VPCPeeringConnection", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-ec2-vpcpeering.git", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "PeerOwnerId": { + "description": "The AWS account ID of the owner of the accepter VPC.", + "type": "string" + }, + "PeerRegion": { + "description": "The Region code for the accepter VPC, if the accepter VPC is located in a Region other than the Region in which you make the request.", + "type": "string" + }, + "PeerRoleArn": { + "description": "The Amazon Resource Name (ARN) of the VPC peer role for the peering connection in another AWS account.", + "type": "string" + }, + "PeerVpcId": { + "description": "The ID of the VPC with which you are creating the VPC peering connection. You must specify this parameter in the request.", + "type": "string" + }, + "VpcId": { + "description": "The ID of the VPC.", + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "VpcId", + "PeerVpcId" + ], + "createOnlyProperties": [ + "/properties/PeerRegion", + "/properties/PeerOwnerId", + "/properties/PeerVpcId", + "/properties/PeerRoleArn", + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/PeerRoleArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpcPeeringConnection", + "ec2:DescribeVpcPeeringConnections", + "ec2:AcceptVpcPeeringConnection", + "ec2:CreateTags", + "sts:AssumeRole" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpcPeeringConnections" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeVpcPeeringConnections" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpcPeeringConnection", + "ec2:DescribeVpcPeeringConnections" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpcPeeringConnections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpnconnection.json b/internal/aws/cfn/schemas/aws/ec2/vpnconnection.json new file mode 100644 index 00000000..000c5c76 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpnconnection.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::EC2::VPNConnection", + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/blob/master/src/main/resources/schema/provider.definition.schema.v1.json", + "description": "Resource Type definition for AWS::EC2::VPNConnection", + "additionalProperties": false, + "properties": { + "VpnConnectionId": { + "description": "The provider-assigned unique ID for this managed resource", + "type": "string" + }, + "CustomerGatewayId": { + "description": "The ID of the customer gateway at your end of the VPN connection.", + "type": "string" + }, + "StaticRoutesOnly": { + "description": "Indicates whether the VPN connection uses static routes only.", + "type": "boolean" + }, + "Tags": { + "description": "Any tags assigned to the VPN connection.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TransitGatewayId": { + "description": "The ID of the transit gateway associated with the VPN connection.", + "type": "string" + }, + "Type": { + "description": "The type of VPN connection.", + "type": "string" + }, + "VpnGatewayId": { + "description": "The ID of the virtual private gateway at the AWS side of the VPN connection.", + "type": "string" + }, + "VpnTunnelOptionsSpecifications": { + "description": "The tunnel options for the VPN connection.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VpnTunnelOptionsSpecification" + } + } + }, + "definitions": { + "VpnTunnelOptionsSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "PreSharedKey": { + "type": "string" + }, + "TunnelInsideCidr": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Type", + "CustomerGatewayId" + ], + "createOnlyProperties": [ + "/properties/Type", + "/properties/CustomerGatewayId", + "/properties/VpnGatewayId", + "/properties/TransitGatewayId", + "/properties/VpnTunnelOptionsSpecifications", + "/properties/StaticRoutesOnly" + ], + "readOnlyProperties": [ + "/properties/VpnConnectionId" + ], + "primaryIdentifier": [ + "/properties/VpnConnectionId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeVpnConnections", + "ec2:CreateVpnConnection", + "ec2:CreateTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeVpnConnections", + "ec2:DeleteVpnConnection", + "ec2:DeleteTags" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeVpnConnections", + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpnConnections" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpnConnections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpnconnectionroute.json b/internal/aws/cfn/schemas/aws/ec2/vpnconnectionroute.json new file mode 100644 index 00000000..f1595181 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpnconnectionroute.json @@ -0,0 +1,55 @@ +{ + "typeName": "AWS::EC2::VPNConnectionRoute", + "description": "Resource Type definition for AWS::EC2::VPNConnectionRoute", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "properties": { + "DestinationCidrBlock": { + "description": "The CIDR block associated with the local subnet of the customer network.", + "type": "string" + }, + "VpnConnectionId": { + "description": "The ID of the VPN connection.", + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "required": [ + "DestinationCidrBlock", + "VpnConnectionId" + ], + "createOnlyProperties": [ + "/properties/DestinationCidrBlock", + "/properties/VpnConnectionId" + ], + "primaryIdentifier": [ + "/properties/DestinationCidrBlock", + "/properties/VpnConnectionId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpnConnectionRoute", + "ec2:DescribeVpnConnections" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpnConnections" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpnConnectionRoute", + "ec2:DescribeVpnConnections" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpnConnections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpngateway.json b/internal/aws/cfn/schemas/aws/ec2/vpngateway.json new file mode 100644 index 00000000..5cbc2bd8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpngateway.json @@ -0,0 +1,97 @@ +{ + "typeName": "AWS::EC2::VPNGateway", + "description": "Schema for EC2 VPN Gateway", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "VPNGatewayId": { + "description": "VPN Gateway ID generated by service", + "type": "string" + }, + "AmazonSideAsn": { + "description": "The private Autonomous System Number (ASN) for the Amazon side of a BGP session.", + "type": "integer", + "format": "int64" + }, + "Tags": { + "description": "Any tags assigned to the virtual private gateway.", + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Type": { + "description": "The type of VPN connection the virtual private gateway supports.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Type" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/AmazonSideAsn", + "/properties/Type" + ], + "readOnlyProperties": [ + "/properties/VPNGatewayId" + ], + "primaryIdentifier": [ + "/properties/VPNGatewayId" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpnGateway", + "ec2:DescribeVpnGateways" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpnGateways" + ] + }, + "update": { + "permissions": [ + "ec2:CreateTags", + "ec2:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpnGateway" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpnGateways" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ec2/vpngatewayroutepropagation.json b/internal/aws/cfn/schemas/aws/ec2/vpngatewayroutepropagation.json new file mode 100644 index 00000000..a4529c6c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ec2/vpngatewayroutepropagation.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::EC2::VPNGatewayRoutePropagation", + "description": "Resource Type definition for AWS::EC2::VPNGatewayRoutePropagation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "RouteTableIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "VpnGatewayId": { + "type": "string" + } + }, + "required": [ + "RouteTableIds", + "VpnGatewayId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ecr/publicrepository.json b/internal/aws/cfn/schemas/aws/ecr/publicrepository.json new file mode 100644 index 00000000..3afe4852 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecr/publicrepository.json @@ -0,0 +1,182 @@ +{ + "typeName": "AWS::ECR::PublicRepository", + "description": "The AWS::ECR::PublicRepository resource specifies an Amazon Elastic Container Public Registry (Amazon Public ECR) repository, where users can push and pull Docker images. For more information, see https://docs.aws.amazon.com/AmazonECR", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "definitions": { + "RegistryId": { + "type": "string", + "description": "The AWS account ID associated with the registry that contains the repository. If you do not specify a registry, the default registry is assumed. ", + "minLength": 12, + "maxLength": 12, + "pattern": "^[0-9]{12}$" + }, + "RepositoryDescription": { + "type": "string", + "description": "The description of the public repository.", + "maxLength": 1024 + }, + "OperatingSystemList": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "Select the operating systems that the images in your repository are compatible with.", + "items": { + "$ref": "#/definitions/OperatingSystem" + } + }, + "OperatingSystem": { + "type": "string", + "description": "The name of the operating system.", + "maxLength": 50, + "minLength": 1 + }, + "ArchitectureList": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "Select the system architectures that the images in your repository are compatible with.", + "items": { + "$ref": "#/definitions/Architecture" + } + }, + "Architecture": { + "type": "string", + "description": "The name of the architecture.", + "maxLength": 50, + "minLength": 1 + }, + "UsageText": { + "type": "string", + "description": "Provide detailed information about how to use the images in the repository. This provides context, support information, and additional usage details for users of the repository.", + "maxLength": 10240 + }, + "AboutText": { + "type": "string", + "description": "Provide a detailed description of the repository. Identify what is included in the repository, any licensing details, or other relevant information.", + "maxLength": 10240 + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "RepositoryName": { + "type": "string", + "description": "The name to use for the repository. The repository name may be specified on its own (such as nginx-web-app) or it can be prepended with a namespace to group the repository into a category (such as project-a/nginx-web-app). If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the repository name. For more information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html.", + "minLength": 2, + "maxLength": 256, + "pattern": "^(?=.{2,256}$)((?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*)$" + }, + "RepositoryPolicyText": { + "type": [ + "object", + "string" + ], + "description": "The JSON repository policy text to apply to the repository. For more information, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/RepositoryPolicyExamples.html in the Amazon Elastic Container Registry User Guide. " + }, + "Arn": { + "type": "string" + }, + "RepositoryCatalogData": { + "type": "object", + "description": "The CatalogData property type specifies Catalog data for ECR Public Repository. For information about Catalog Data, see ", + "properties": { + "RepositoryDescription": { + "$ref": "#/definitions/RepositoryDescription" + }, + "Architectures": { + "$ref": "#/definitions/ArchitectureList" + }, + "OperatingSystems": { + "$ref": "#/definitions/OperatingSystemList" + }, + "AboutText": { + "$ref": "#/definitions/AboutText" + }, + "UsageText": { + "$ref": "#/definitions/UsageText" + } + }, + "additionalProperties": false + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "createOnlyProperties": [ + "/properties/RepositoryName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/RepositoryName" + ], + "handlers": { + "create": { + "permissions": [ + "ecr-public:CreateRepository", + "ecr-public:SetRepositoryPolicy", + "ecr-public:PutRepositoryCatalogData", + "ecr-public:TagResource" + ] + }, + "read": { + "permissions": [ + "ecr-public:DescribeRepositories", + "ecr-public:GetRepositoryPolicy", + "ecr-public:GetRepositoryCatalogData", + "ecr-public:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ecr-public:SetRepositoryPolicy", + "ecr-public:DeleteRepositoryPolicy", + "ecr-public:PutRepositoryCatalogData", + "ecr-public:TagResource", + "ecr-public:UntagResource" + ] + }, + "delete": { + "permissions": [ + "ecr-public:DeleteRepository" + ] + }, + "list": { + "permissions": [ + "ecr-public:DescribeRepositories" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ecr/pullthroughcacherule.json b/internal/aws/cfn/schemas/aws/ecr/pullthroughcacherule.json new file mode 100644 index 00000000..6e11746d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecr/pullthroughcacherule.json @@ -0,0 +1,136 @@ +{ + "typeName": "AWS::ECR::PullThroughCacheRule", + "description": "The AWS::ECR::PullThroughCacheRule resource configures the upstream registry configuration details for an Amazon Elastic Container Registry (Amazon Private ECR) pull-through cache.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "definitions": { + "PullThroughCacheRule": { + "minItems": 0, + "maxItems": 50, + "type": "object", + "properties": { + "RegistryId": { + "$ref": "#/definitions/RegistryId" + }, + "EcrRepositoryPrefix": { + "$ref": "#/definitions/EcrRepositoryPrefix" + }, + "UpstreamRegistryUrl": { + "$ref": "#/definitions/UpstreamRegistryUrl" + }, + "CredentialArn": { + "$ref": "#/definitions/CredentialArn" + }, + "UpstreamRegistry": { + "$ref": "#/definitions/UpstreamRegistry" + } + }, + "required": [ + "EcrRepositoryPrefix", + "UpstreamRegistryUrl" + ], + "additionalProperties": false + }, + "RegistryId": { + "type": "string", + "description": "The account ID of the registry pull-through cache repository will be created in.", + "pattern": "^[0-9]{12}$" + }, + "EcrRepositoryPrefix": { + "type": "string", + "description": "The ECRRepositoryPrefix is a custom alias for upstream registry url.", + "minLength": 2, + "maxLength": 30, + "pattern": "(?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*" + }, + "UpstreamRegistryUrl": { + "type": "string", + "description": "The upstreamRegistryUrl is the endpoint of upstream registry url of the public repository to be cached" + }, + "CredentialArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that identifies the credentials to authenticate to the upstream registry.", + "minLength": 50, + "maxLength": 612, + "pattern": "^arn:aws:secretsmanager:[a-zA-Z0-9-:]+:secret:ecr\\-pullthroughcache\\/[a-zA-Z0-9\\/_+=.@-]+$" + }, + "UpstreamRegistry": { + "type": "string", + "description": "The name of the upstream registry." + } + }, + "properties": { + "EcrRepositoryPrefix": { + "type": "string", + "description": "The ECRRepositoryPrefix is a custom alias for upstream registry url.", + "minLength": 2, + "maxLength": 30, + "pattern": "(?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*" + }, + "UpstreamRegistryUrl": { + "type": "string", + "description": "The upstreamRegistryUrl is the endpoint of upstream registry url of the public repository to be cached" + }, + "CredentialArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that identifies the credentials to authenticate to the upstream registry.", + "minLength": 50, + "maxLength": 612, + "pattern": "^arn:aws:secretsmanager:[a-zA-Z0-9-:]+:secret:ecr\\-pullthroughcache\\/[a-zA-Z0-9\\/_+=.@-]+$" + }, + "UpstreamRegistry": { + "type": "string", + "description": "The name of the upstream registry." + } + }, + "taggable": false, + "primaryIdentifier": [ + "/properties/EcrRepositoryPrefix" + ], + "createOnlyProperties": [ + "/properties/EcrRepositoryPrefix", + "/properties/UpstreamRegistryUrl", + "/properties/CredentialArn", + "/properties/UpstreamRegistry" + ], + "writeOnlyProperties": [ + "/properties/CredentialArn", + "/properties/UpstreamRegistry" + ], + "handlers": { + "create": { + "permissions": [ + "ecr:DescribePullThroughCacheRules", + "ecr:CreatePullThroughCacheRule", + "ecr:DeletePullThroughCacheRule", + "iam:CreateServiceLinkedRole", + "secretsmanager:GetSecretValue" + ] + }, + "read": { + "permissions": [ + "ecr:DescribePullThroughCacheRules" + ] + }, + "update": { + "permissions": [ + "ecr:DescribePullThroughCacheRules", + "ecr:CreatePullThroughCacheRule", + "ecr:DeletePullThroughCacheRule", + "iam:CreateServiceLinkedRole", + "secretsmanager:GetSecretValue" + ] + }, + "delete": { + "permissions": [ + "ecr:DescribePullThroughCacheRules", + "ecr:DeletePullThroughCacheRule" + ] + }, + "list": { + "permissions": [ + "ecr:DescribePullThroughCacheRules" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ecr/registrypolicy.json b/internal/aws/cfn/schemas/aws/ecr/registrypolicy.json new file mode 100644 index 00000000..9c159a87 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecr/registrypolicy.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::ECR::RegistryPolicy", + "description": "The ``AWS::ECR::RegistryPolicy`` resource creates or updates the permissions policy for a private registry.\n A private registry policy is used to specify permissions for another AWS-account and is used when configuring cross-account replication. For more information, see [Registry permissions](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-permissions.html) in the *Amazon Elastic Container Registry User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "definitions": { + "RegistryId": { + "type": "string", + "description": "The registry id.", + "minLength": 12, + "maxLength": 12, + "pattern": "^[0-9]{12}$" + } + }, + "properties": { + "RegistryId": { + "$ref": "#/definitions/RegistryId", + "description": "" + }, + "PolicyText": { + "type": "object", + "description": "The JSON policy text for your registry." + } + }, + "required": [ + "PolicyText" + ], + "readOnlyProperties": [ + "/properties/RegistryId" + ], + "primaryIdentifier": [ + "/properties/RegistryId" + ], + "handlers": { + "create": { + "permissions": [ + "ecr:GetRegistryPolicy", + "ecr:PutRegistryPolicy" + ] + }, + "read": { + "permissions": [ + "ecr:GetRegistryPolicy" + ] + }, + "list": { + "permissions": [ + "ecr:GetRegistryPolicy" + ] + }, + "update": { + "permissions": [ + "ecr:GetRegistryPolicy", + "ecr:PutRegistryPolicy" + ] + }, + "delete": { + "permissions": [ + "ecr:DeleteRegistryPolicy" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ecr/replicationconfiguration.json b/internal/aws/cfn/schemas/aws/ecr/replicationconfiguration.json new file mode 100644 index 00000000..1e25383b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecr/replicationconfiguration.json @@ -0,0 +1,162 @@ +{ + "typeName": "AWS::ECR::ReplicationConfiguration", + "description": "The AWS::ECR::ReplicationConfiguration resource configures the replication destinations for an Amazon Elastic Container Registry (Amazon Private ECR). For more information, see https://docs.aws.amazon.com/AmazonECR/latest/userguide/replication.html", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "definitions": { + "ReplicationConfiguration": { + "type": "object", + "properties": { + "Rules": { + "type": "array", + "minItems": 0, + "maxItems": 10, + "items": { + "$ref": "#/definitions/ReplicationRule" + }, + "description": "An array of objects representing the replication rules for a replication configuration. A replication configuration may contain a maximum of 10 rules." + } + }, + "description": "An object representing the replication configuration for a registry.", + "required": [ + "Rules" + ], + "additionalProperties": false + }, + "ReplicationRule": { + "type": "object", + "properties": { + "RepositoryFilters": { + "type": "array", + "minItems": 0, + "maxItems": 100, + "items": { + "$ref": "#/definitions/RepositoryFilter" + }, + "description": "An array of objects representing the details of a repository filter." + }, + "Destinations": { + "type": "array", + "minItems": 1, + "maxItems": 25, + "items": { + "$ref": "#/definitions/ReplicationDestination" + }, + "description": "An array of objects representing the details of a replication destination." + } + }, + "description": "An array of objects representing the details of a replication destination.", + "required": [ + "Destinations" + ], + "additionalProperties": false + }, + "RepositoryFilter": { + "type": "object", + "properties": { + "Filter": { + "$ref": "#/definitions/Filter" + }, + "FilterType": { + "$ref": "#/definitions/FilterType" + } + }, + "description": "An array of objects representing the details of a repository filter.", + "required": [ + "Filter", + "FilterType" + ], + "additionalProperties": false + }, + "Filter": { + "type": "string", + "description": "The repository filter to be applied for replication.", + "pattern": "^(?:[a-z0-9]+(?:[._-][a-z0-9]*)*/)*[a-z0-9]*(?:[._-][a-z0-9]*)*$" + }, + "FilterType": { + "description": "Type of repository filter", + "type": "string", + "enum": [ + "PREFIX_MATCH" + ] + }, + "ReplicationDestination": { + "type": "object", + "properties": { + "Region": { + "$ref": "#/definitions/Region" + }, + "RegistryId": { + "$ref": "#/definitions/RegistryId" + } + }, + "description": "An array of objects representing the details of a replication destination.", + "required": [ + "Region", + "RegistryId" + ], + "additionalProperties": false + }, + "RegistryId": { + "type": "string", + "description": "The account ID of the destination registry to replicate to.", + "pattern": "^[0-9]{12}$" + }, + "Region": { + "description": "A Region to replicate to.", + "type": "string", + "pattern": "[0-9a-z-]{2,25}" + } + }, + "properties": { + "ReplicationConfiguration": { + "$ref": "#/definitions/ReplicationConfiguration" + }, + "RegistryId": { + "type": "string", + "description": "The RegistryId associated with the aws account." + } + }, + "required": [ + "ReplicationConfiguration" + ], + "primaryIdentifier": [ + "/properties/RegistryId" + ], + "readOnlyProperties": [ + "/properties/RegistryId" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "ecr:DescribeRegistry", + "ecr:PutReplicationConfiguration", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "ecr:DescribeRegistry" + ] + }, + "update": { + "permissions": [ + "ecr:DescribeRegistry", + "ecr:PutReplicationConfiguration", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "ecr:DescribeRegistry", + "ecr:PutReplicationConfiguration", + "iam:CreateServiceLinkedRole" + ] + }, + "list": { + "permissions": [ + "ecr:DescribeRegistry" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ecr/repository.json b/internal/aws/cfn/schemas/aws/ecr/repository.json new file mode 100644 index 00000000..b0e22235 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecr/repository.json @@ -0,0 +1,233 @@ +{ + "typeName": "AWS::ECR::Repository", + "description": "The ``AWS::ECR::Repository`` resource specifies an Amazon Elastic Container Registry (Amazon ECR) repository, where users can push and pull Docker images, Open Container Initiative (OCI) images, and OCI compatible artifacts. For more information, see [Amazon ECR private repositories](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html) in the *Amazon ECR User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "definitions": { + "LifecyclePolicy": { + "type": "object", + "description": "The ``LifecyclePolicy`` property type specifies a lifecycle policy. For information about lifecycle policy syntax, see [Lifecycle policy template](https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html) in the *Amazon ECR User Guide*.", + "properties": { + "LifecyclePolicyText": { + "$ref": "#/definitions/LifecyclePolicyText", + "description": "The JSON repository policy text to apply to the repository." + }, + "RegistryId": { + "$ref": "#/definitions/RegistryId", + "description": "The AWS account ID associated with the registry that contains the repository. If you do? not specify a registry, the default registry is assumed." + } + }, + "additionalProperties": false + }, + "LifecyclePolicyText": { + "type": "string", + "description": "The JSON repository policy text to apply to the repository.", + "minLength": 100, + "maxLength": 30720 + }, + "RegistryId": { + "type": "string", + "description": "The AWS account ID associated with the registry that contains the repository. If you do not specify a registry, the default registry is assumed. ", + "minLength": 12, + "maxLength": 12, + "pattern": "^[0-9]{12}$" + }, + "Tag": { + "description": "The metadata to apply to a resource to help you categorize and organize them. Each tag consists of a key and a value, both of which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "One part of a key-value pair that make up a tag. A ``key`` is a general label that acts like a category for more specific tag values.", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "A ``value`` acts as a descriptor within a tag category (key).", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + }, + "ImageScanningConfiguration": { + "type": "object", + "description": "The image scanning configuration for a repository.", + "properties": { + "ScanOnPush": { + "$ref": "#/definitions/ScanOnPush", + "description": "The setting that determines whether images are scanned after being pushed to a repository. If set to ``true``, images will be scanned after being pushed. If this parameter is not specified, it will default to ``false`` and images will not be scanned unless a scan is manually started." + } + }, + "additionalProperties": false + }, + "ScanOnPush": { + "type": "boolean", + "description": "The setting that determines whether images are scanned after being pushed to a repository." + }, + "EncryptionConfiguration": { + "type": "object", + "description": "The encryption configuration for the repository. This determines how the contents of your repository are encrypted at rest.\n By default, when no encryption configuration is set or the ``AES256`` encryption type is used, Amazon ECR uses server-side encryption with Amazon S3-managed encryption keys which encrypts your data at rest using an AES-256 encryption algorithm. This does not require any action on your part.\n For more control over the encryption of the contents of your repository, you can use server-side encryption with KMSlong key stored in KMSlong (KMS) to encrypt your images. For more information, see [Amazon ECR encryption at rest](https://docs.aws.amazon.com/AmazonECR/latest/userguide/encryption-at-rest.html) in the *Amazon Elastic Container Registry User Guide*.", + "properties": { + "EncryptionType": { + "$ref": "#/definitions/EncryptionType", + "description": "The encryption type to use.\n If you use the ``KMS`` encryption type, the contents of the repository will be encrypted using server-side encryption with KMSlong key stored in KMS. When you use KMS to encrypt your data, you can either use the default AWS managed KMS key for Amazon ECR, or specify your own KMS key, which you already created. For more information, see [Protecting data using server-side encryption with an key stored in (SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) in the *Amazon Simple Storage Service Console Developer Guide*.\n If you use the ``AES256`` encryption type, Amazon ECR uses server-side encryption with Amazon S3-managed encryption keys which encrypts the images in the repository using an AES-256 encryption algorithm. For more information, see [Protecting data using server-side encryption with Amazon S3-managed encryption keys (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html) in the *Ama" + }, + "KmsKey": { + "$ref": "#/definitions/KmsKey", + "description": "If you use the ``KMS`` encryption type, specify the KMS key to use for encryption. The alias, key ID, or full ARN of the KMS key can be specified. The key must exist in the same Region as the repository. If no key is specified, the default AWS managed KMS key for Amazon ECR will be used." + } + }, + "required": [ + "EncryptionType" + ], + "additionalProperties": false + }, + "EncryptionType": { + "type": "string", + "description": "The encryption type to use.", + "enum": [ + "AES256", + "KMS" + ] + }, + "KmsKey": { + "type": "string", + "description": "If you use the KMS encryption type, specify the CMK to use for encryption. The alias, key ID, or full ARN of the CMK can be specified. The key must exist in the same Region as the repository. If no key is specified, the default AWS managed CMK for Amazon ECR will be used.", + "minLength": 1, + "maxLength": 2048 + }, + "EmptyOnDelete": { + "type": "boolean", + "description": "If true, deleting the repository force deletes the contents of the repository. Without a force delete, you can only delete empty repositories." + } + }, + "properties": { + "EmptyOnDelete": { + "$ref": "#/definitions/EmptyOnDelete", + "description": "If true, deleting the repository force deletes the contents of the repository. If false, the repository must be empty before attempting to delete it." + }, + "LifecyclePolicy": { + "$ref": "#/definitions/LifecyclePolicy", + "description": "Creates or updates a lifecycle policy. For information about lifecycle policy syntax, see [Lifecycle policy template](https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html)." + }, + "RepositoryName": { + "type": "string", + "description": "The name to use for the repository. The repository name may be specified on its own (such as ``nginx-web-app``) or it can be prepended with a namespace to group the repository into a category (such as ``project-a/nginx-web-app``). If you don't specify a name, CFNlong generates a unique physical ID and uses that ID for the repository name. For more information, see [Name type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html).\n The repository name must start with a letter and can only contain lowercase letters, numbers, hyphens, underscores, and forward slashes.\n If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.", + "minLength": 2, + "maxLength": 256, + "pattern": "^(?=.{2,256}$)((?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*)$" + }, + "RepositoryPolicyText": { + "type": [ + "object", + "string" + ], + "description": "The JSON repository policy text to apply to the repository. For more information, see [Amazon ECR repository policies](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) in the *Amazon Elastic Container Registry User Guide*." + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "type": "string", + "description": "" + }, + "RepositoryUri": { + "type": "string", + "description": "" + }, + "ImageTagMutability": { + "type": "string", + "description": "The tag mutability setting for the repository. If this parameter is omitted, the default setting of ``MUTABLE`` will be used which will allow image tags to be overwritten. If ``IMMUTABLE`` is specified, all image tags within the repository will be immutable which will prevent them from being overwritten.", + "enum": [ + "MUTABLE", + "IMMUTABLE" + ] + }, + "ImageScanningConfiguration": { + "$ref": "#/definitions/ImageScanningConfiguration", + "description": "The image scanning configuration for the repository. This determines whether images are scanned for known vulnerabilities after being pushed to the repository." + }, + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration", + "description": "The encryption configuration for the repository. This determines how the contents of your repository are encrypted at rest." + } + }, + "createOnlyProperties": [ + "/properties/RepositoryName", + "/properties/EncryptionConfiguration", + "/properties/EncryptionConfiguration/EncryptionType", + "/properties/EncryptionConfiguration/KmsKey" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/RepositoryUri" + ], + "writeOnlyProperties": [ + "/properties/EmptyOnDelete" + ], + "primaryIdentifier": [ + "/properties/RepositoryName" + ], + "handlers": { + "create": { + "permissions": [ + "ecr:CreateRepository", + "ecr:PutLifecyclePolicy", + "ecr:SetRepositoryPolicy", + "ecr:TagResource", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:RetireGrant" + ] + }, + "read": { + "permissions": [ + "ecr:DescribeRepositories", + "ecr:GetLifecyclePolicy", + "ecr:GetRepositoryPolicy", + "ecr:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ecr:DescribeRepositories", + "ecr:PutLifecyclePolicy", + "ecr:SetRepositoryPolicy", + "ecr:ListTagsForResource", + "ecr:TagResource", + "ecr:UntagResource", + "ecr:DeleteLifecyclePolicy", + "ecr:DeleteRepositoryPolicy", + "ecr:PutImageScanningConfiguration", + "ecr:PutImageTagMutability", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:RetireGrant" + ] + }, + "delete": { + "permissions": [ + "ecr:DeleteRepository", + "kms:RetireGrant" + ] + }, + "list": { + "permissions": [ + "ecr:DescribeRepositories" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ecs/capacityprovider.json b/internal/aws/cfn/schemas/aws/ecs/capacityprovider.json new file mode 100644 index 00000000..ac3d87b9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecs/capacityprovider.json @@ -0,0 +1,141 @@ +{ + "typeName": "AWS::ECS::CapacityProvider", + "description": "Resource Type definition for AWS::ECS::CapacityProvider.", + "definitions": { + "ManagedScaling": { + "description": "The managed scaling settings for the Auto Scaling group capacity provider.", + "type": "object", + "properties": { + "MinimumScalingStepSize": { + "type": "integer" + }, + "MaximumScalingStepSize": { + "type": "integer" + }, + "Status": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "TargetCapacity": { + "type": "integer" + }, + "InstanceWarmupPeriod": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "AutoScalingGroupProvider": { + "type": "object", + "properties": { + "AutoScalingGroupArn": { + "type": "string" + }, + "ManagedScaling": { + "$ref": "#/definitions/ManagedScaling" + }, + "ManagedTerminationProtection": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "ManagedDraining": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + } + }, + "required": [ + "AutoScalingGroupArn" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1 + }, + "Value": { + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": false + } + }, + "properties": { + "AutoScalingGroupProvider": { + "$ref": "#/definitions/AutoScalingGroupProvider" + }, + "Name": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/AutoScalingGroupProvider/AutoScalingGroupArn", + "/properties/Name" + ], + "propertyTransform": { + "/properties/AutoScalingGroupProvider/AutoScalingGroupArn": "$split(AutoScalingGroupProvider.AutoScalingGroupArn, \"autoScalingGroupName/\")[-1] $OR $split(AutoScalingGroupArn, \"autoScalingGroupName/\")[-1]" + }, + "tagging": { + "taggable": true + }, + "handlers": { + "create": { + "permissions": [ + "autoscaling:CreateOrUpdateTags", + "ecs:CreateCapacityProvider", + "ecs:DescribeCapacityProviders", + "ecs:TagResource" + ] + }, + "delete": { + "permissions": [ + "ecs:DescribeCapacityProviders", + "ecs:DeleteCapacityProvider" + ] + }, + "read": { + "permissions": [ + "ecs:DescribeCapacityProviders" + ] + }, + "update": { + "permissions": [ + "ecs:UpdateCapacityProvider", + "ecs:DescribeCapacityProviders", + "ecs:ListTagsForResource", + "ecs:TagResource", + "ecs:UntagResource" + ] + }, + "list": { + "permissions": [ + "ecs:DescribeCapacityProviders" + ] + } + }, + "required": [ + "AutoScalingGroupProvider" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ecs/cluster.json b/internal/aws/cfn/schemas/aws/ecs/cluster.json new file mode 100644 index 00000000..17883338 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecs/cluster.json @@ -0,0 +1,237 @@ +{ + "tagging": { + "taggable": true + }, + "handlers": { + "read": { + "permissions": [ + "ecs:DescribeClusters" + ] + }, + "create": { + "permissions": [ + "ecs:CreateCluster", + "ecs:DescribeClusters", + "iam:CreateServiceLinkedRole", + "ecs:TagResource" + ] + }, + "update": { + "permissions": [ + "ecs:PutAccountSettingDefault", + "ecs:DescribeClusters", + "ecs:TagResource", + "ecs:UntagResource", + "ecs:PutAccountSetting", + "ecs:ListTagsForResource", + "ecs:UpdateCluster", + "ecs:UpdateClusterSettings", + "ecs:PutClusterCapacityProviders" + ] + }, + "list": { + "permissions": [ + "ecs:DescribeClusters", + "ecs:ListClusters" + ] + }, + "delete": { + "permissions": [ + "ecs:DeleteCluster", + "ecs:DescribeClusters" + ] + } + }, + "typeName": "AWS::ECS::Cluster", + "readOnlyProperties": [ + "/properties/Arn" + ], + "description": "The ``AWS::ECS::Cluster`` resource creates an Amazon Elastic Container Service (Amazon ECS) cluster.", + "writeOnlyProperties": [ + "/properties/ServiceConnectDefaults" + ], + "createOnlyProperties": [ + "/properties/ClusterName" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ClusterName" + ], + "definitions": { + "CapacityProviderStrategyItem": { + "description": "The ``CapacityProviderStrategyItem`` property specifies the details of the default capacity provider strategy for the cluster. When services or tasks are run in the cluster with no launch type or capacity provider strategy specified, the default capacity provider strategy is used.", + "additionalProperties": false, + "type": "object", + "properties": { + "CapacityProvider": { + "relationshipRef": { + "typeName": "AWS::ECS::CapacityProvider", + "propertyPath": "/properties/Name" + }, + "description": "The short name of the capacity provider.", + "type": "string" + }, + "Weight": { + "description": "The *weight* value designates the relative percentage of the total number of tasks launched that should use the specified capacity provider. The ``weight`` value is taken into consideration after the ``base`` value, if defined, is satisfied.\n If no ``weight`` value is specified, the default value of ``0`` is used. When multiple capacity providers are specified within a capacity provider strategy, at least one of the capacity providers must have a weight value greater than zero and any capacity providers with a weight of ``0`` can't be used to place tasks. If you specify multiple capacity providers in a strategy that all have a weight of ``0``, any ``RunTask`` or ``CreateService`` actions using the capacity provider strategy will fail.\n An example scenario for using weights is defining a strategy that contains two capacity providers and both have a weight of ``1``, then when the ``base`` is satisfied, the tasks will be split evenly across the two capacity providers. Using that same logic, if you specify a weight of ``1`` for *capacityProviderA* and a weight of ``4`` for *capacityProviderB*, then for every one task that's run using *capacityProviderA*, four tasks would use *capacityProviderB*.", + "type": "integer" + }, + "Base": { + "description": "The *base* value designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a *base* defined. If no value is specified, the default value of ``0`` is used.", + "type": "integer" + } + } + }, + "ExecuteCommandLogConfiguration": { + "description": "The log configuration for the results of the execute command actions. The logs can be sent to CloudWatch Logs or an Amazon S3 bucket.", + "additionalProperties": false, + "type": "object", + "properties": { + "S3EncryptionEnabled": { + "description": "Determines whether to use encryption on the S3 logs. If not specified, encryption is not used.", + "type": "boolean" + }, + "CloudWatchEncryptionEnabled": { + "description": "Determines whether to use encryption on the CloudWatch logs. If not specified, encryption will be off.", + "type": "boolean" + }, + "CloudWatchLogGroupName": { + "relationshipRef": { + "typeName": "AWS::Logs::LogGroup", + "propertyPath": "/properties/LogGroupName" + }, + "description": "The name of the CloudWatch log group to send logs to.\n The CloudWatch log group must already be created.", + "type": "string" + }, + "S3KeyPrefix": { + "description": "An optional folder in the S3 bucket to place logs in.", + "type": "string" + }, + "S3BucketName": { + "description": "The name of the S3 bucket to send logs to.\n The S3 bucket must already be created.", + "type": "string" + } + } + }, + "ClusterSettings": { + "description": "The settings to use when creating a cluster. This parameter is used to turn on CloudWatch Container Insights for a cluster.", + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "description": "The value to set for the cluster setting. The supported values are ``enabled`` and ``disabled``. \n If you set ``name`` to ``containerInsights`` and ``value`` to ``enabled``, CloudWatch Container Insights will be on for the cluster, otherwise it will be off unless the ``containerInsights`` account setting is turned on. If a cluster value is specified, it will override the ``containerInsights`` value set with [PutAccountSetting](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutAccountSetting.html) or [PutAccountSettingDefault](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutAccountSettingDefault.html).", + "type": "string" + }, + "Name": { + "description": "The name of the cluster setting. The value is ``containerInsights`` .", + "type": "string" + } + } + }, + "ServiceConnectDefaults": { + "description": "Use this parameter to set a default Service Connect namespace. After you set a default Service Connect namespace, any new services with Service Connect turned on that are created in the cluster are added as client services in the namespace. This setting only applies to new services that set the ``enabled`` parameter to ``true`` in the ``ServiceConnectConfiguration``. You can set the namespace of each service individually in the ``ServiceConnectConfiguration`` to override this default parameter.\n Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*.", + "additionalProperties": false, + "type": "object", + "properties": { + "Namespace": { + "description": "The namespace name or full Amazon Resource Name (ARN) of the CMAPlong namespace that's used when you create a service and don't specify a Service Connect configuration. The namespace name can include up to 1024 characters. The name is case-sensitive. The name can't include hyphens (-), tilde (~), greater than (>), less than (<), or slash (/).\n If you enter an existing namespace name or ARN, then that namespace will be used. Any namespace type is supported. The namespace must be in this account and this AWS Region.\n If you enter a new name, a CMAPlong namespace will be created. Amazon ECS creates a CMAP namespace with the \"API calls\" method of instance discovery only. This instance discovery method is the \"HTTP\" namespace type in the CLIlong. Other types of instance discovery aren't used by Service Connect.\n If you update the cluster with an empty string ``\"\"`` for the namespace name, the cluster configuration for Service Connect is removed. Note that the namespace will remain in CMAP and must be deleted separately.\n For more information about CMAPlong, see [Working with Services](https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html) in the *Developer Guide*.", + "type": "string" + } + } + }, + "Tag": { + "description": "The metadata that you apply to a resource to help you categorize and organize them. Each tag consists of a key and an optional value. You define them.\n The following basic restrictions apply to tags:\n + Maximum number of tags per resource - 50\n + For each resource, each tag key must be unique, and each tag key can have only one value.\n + Maximum key length - 128 Unicode characters in UTF-8\n + Maximum value length - 256 Unicode characters in UTF-8\n + If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.\n + Tag keys and values are case-sensitive.\n + Do not use ``aws:``, ``AWS:``, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for AWS use. You cannot edit or delete tag keys or values with this prefix. Tags with this prefix do not count against your tags per resource limit.", + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "description": "The optional part of a key-value pair that make up a tag. A ``value`` acts as a descriptor within a tag category (key).", + "type": "string" + }, + "Key": { + "description": "One part of a key-value pair that make up a tag. A ``key`` is a general label that acts like a category for more specific tag values.", + "type": "string" + } + } + }, + "ClusterConfiguration": { + "description": "The execute command configuration for the cluster.", + "additionalProperties": false, + "type": "object", + "properties": { + "ExecuteCommandConfiguration": { + "description": "The details of the execute command configuration.", + "$ref": "#/definitions/ExecuteCommandConfiguration" + } + } + }, + "ExecuteCommandConfiguration": { + "description": "The details of the execute command configuration.", + "additionalProperties": false, + "type": "object", + "properties": { + "Logging": { + "description": "The log setting to use for redirecting logs for your execute command results. The following log settings are available.\n + ``NONE``: The execute command session is not logged.\n + ``DEFAULT``: The ``awslogs`` configuration in the task definition is used. If no logging parameter is specified, it defaults to this value. If no ``awslogs`` log driver is configured in the task definition, the output won't be logged.\n + ``OVERRIDE``: Specify the logging details as a part of ``logConfiguration``. If the ``OVERRIDE`` logging option is specified, the ``logConfiguration`` is required.", + "type": "string" + }, + "KmsKeyId": { + "relationshipRef": { + "typeName": "AWS::KMS::Key", + "propertyPath": "/properties/Arn" + }, + "description": "Specify an KMSlong key ID to encrypt the data between the local client and the container.", + "type": "string" + }, + "LogConfiguration": { + "description": "The log configuration for the results of the execute command actions. The logs can be sent to CloudWatch Logs or an Amazon S3 bucket. When ``logging=OVERRIDE`` is specified, a ``logConfiguration`` must be provided.", + "$ref": "#/definitions/ExecuteCommandLogConfiguration" + } + } + } + }, + "properties": { + "ClusterSettings": { + "description": "The settings to use when creating a cluster. This parameter is used to turn on CloudWatch Container Insights for a cluster.", + "type": "array", + "items": { + "$ref": "#/definitions/ClusterSettings" + } + }, + "DefaultCapacityProviderStrategy": { + "description": "The default capacity provider strategy for the cluster. When services or tasks are run in the cluster with no launch type or capacity provider strategy specified, the default capacity provider strategy is used.", + "type": "array", + "items": { + "$ref": "#/definitions/CapacityProviderStrategyItem" + } + }, + "Configuration": { + "description": "The execute command configuration for the cluster.", + "$ref": "#/definitions/ClusterConfiguration" + }, + "ServiceConnectDefaults": { + "description": "Use this parameter to set a default Service Connect namespace. After you set a default Service Connect namespace, any new services with Service Connect turned on that are created in the cluster are added as client services in the namespace. This setting only applies to new services that set the ``enabled`` parameter to ``true`` in the ``ServiceConnectConfiguration``. You can set the namespace of each service individually in the ``ServiceConnectConfiguration`` to override this default parameter.\n Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*.", + "$ref": "#/definitions/ServiceConnectDefaults" + }, + "CapacityProviders": { + "description": "The short name of one or more capacity providers to associate with the cluster. A capacity provider must be associated with a cluster before it can be included as part of the default capacity provider strategy of the cluster or used in a capacity provider strategy when calling the [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html) or [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html) actions.\n If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must be created but not associated with another cluster. New Auto Scaling group capacity providers can be created with the [CreateCapacityProvider](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html) API operation.\n To use a FARGATElong capacity provider, specify either the ``FARGATE`` or ``FARGATE_SPOT`` capacity providers. The FARGATElong capacity providers are available to all accounts and only need to be associated with a cluster to be used.\n The [PutCapacityProvider](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutCapacityProvider.html) API operation is used to update the list of available capacity providers for a cluster after the cluster is created.", + "type": "array", + "items": { + "type": "string" + } + }, + "ClusterName": { + "description": "A user-generated string that you use to identify your cluster. If you don't specify a name, CFNlong generates a unique physical ID for the name.", + "type": "string" + }, + "Arn": { + "description": "", + "type": "string" + }, + "Tags": { + "description": "The metadata that you apply to the cluster to help you categorize and organize them. Each tag consists of a key and an optional value. You define both.\n The following basic restrictions apply to tags:\n + Maximum number of tags per resource - 50\n + For each resource, each tag key must be unique, and each tag key can have only one value.\n + Maximum key length - 128 Unicode characters in UTF-8\n + Maximum value length - 256 Unicode characters in UTF-8\n + If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.\n + Tag keys and values are case-sensitive.\n + Do not use ``aws:``, ``AWS:``, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for AWS use. You cannot edit or delete tag keys or values with this prefix. Tags with this prefix do not count against your tags per resource limit.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ecs/clustercapacityproviderassociations.json b/internal/aws/cfn/schemas/aws/ecs/clustercapacityproviderassociations.json new file mode 100644 index 00000000..d701e212 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecs/clustercapacityproviderassociations.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::ECS::ClusterCapacityProviderAssociations", + "description": "Associate a set of ECS Capacity Providers with a specified ECS Cluster", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "CapacityProviders": { + "description": "List of capacity providers to associate with the cluster", + "type": "array", + "items": { + "$ref": "#/definitions/CapacityProvider" + }, + "uniqueItems": true + }, + "CapacityProvider": { + "description": "If using ec2 auto-scaling, the name of the associated capacity provider. Otherwise FARGATE, FARGATE_SPOT.", + "type": "string", + "anyOf": [ + { + "type": "string", + "enum": [ + "FARGATE", + "FARGATE_SPOT" + ] + }, + { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + ] + }, + "Cluster": { + "description": "The name of the cluster", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "DefaultCapacityProviderStrategy": { + "description": "List of capacity providers to associate with the cluster", + "type": "array", + "items": { + "$ref": "#/definitions/CapacityProviderStrategy" + } + }, + "CapacityProviderStrategy": { + "type": "object", + "properties": { + "Base": { + "type": "integer", + "minimum": 0, + "maximum": 100000 + }, + "Weight": { + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "CapacityProvider": { + "$ref": "#/definitions/CapacityProvider" + } + }, + "required": [ + "CapacityProvider" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "properties": { + "CapacityProviders": { + "$ref": "#/definitions/CapacityProviders" + }, + "Cluster": { + "$ref": "#/definitions/Cluster" + }, + "DefaultCapacityProviderStrategy": { + "$ref": "#/definitions/DefaultCapacityProviderStrategy" + } + }, + "required": [ + "CapacityProviders", + "Cluster", + "DefaultCapacityProviderStrategy" + ], + "createOnlyProperties": [ + "/properties/Cluster" + ], + "primaryIdentifier": [ + "/properties/Cluster" + ], + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "ecs:DescribeClusters", + "ecs:PutClusterCapacityProviders" + ] + }, + "read": { + "permissions": [ + "ecs:DescribeClusters" + ] + }, + "update": { + "permissions": [ + "ecs:DescribeClusters", + "ecs:PutClusterCapacityProviders" + ] + }, + "delete": { + "permissions": [ + "ecs:PutClusterCapacityProviders", + "ecs:DescribeClusters" + ] + }, + "list": { + "permissions": [ + "ecs:DescribeClusters", + "ecs:ListClusters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ecs/primarytaskset.json b/internal/aws/cfn/schemas/aws/ecs/primarytaskset.json new file mode 100644 index 00000000..6ec8a0ee --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecs/primarytaskset.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::ECS::PrimaryTaskSet", + "description": "A pseudo-resource that manages which of your ECS task sets is primary.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecs.git", + "properties": { + "Cluster": { + "description": "The short name or full Amazon Resource Name (ARN) of the cluster that hosts the service to create the task set in.", + "type": "string" + }, + "TaskSetId": { + "description": "The ID or full Amazon Resource Name (ARN) of the task set.", + "type": "string" + }, + "Service": { + "description": "The short name or full Amazon Resource Name (ARN) of the service to create the task set in.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Cluster", + "Service", + "TaskSetId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/Cluster", + "/properties/Service" + ], + "primaryIdentifier": [ + "/properties/Cluster", + "/properties/Service" + ], + "handlers": { + "create": { + "permissions": [ + "ecs:DescribeTaskSets", + "ecs:UpdateServicePrimaryTaskSet" + ] + }, + "read": { + "permissions": [] + }, + "update": { + "permissions": [ + "ecs:DescribeTaskSets", + "ecs:UpdateServicePrimaryTaskSet" + ] + }, + "delete": { + "permissions": [] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ecs/service.json b/internal/aws/cfn/schemas/aws/ecs/service.json new file mode 100644 index 00000000..3d6e3661 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecs/service.json @@ -0,0 +1,738 @@ +{ + "typeName": "AWS::ECS::Service", + "description": "The ``AWS::ECS::Service`` resource creates an Amazon Elastic Container Service (Amazon ECS) service that runs and maintains the requested number of tasks and associated load balancers.\n The stack update fails if you change any properties that require replacement and at least one Amazon ECS Service Connect ``ServiceConnectService`` is configured. This is because AWS CloudFormation creates the replacement service first, but each ``ServiceConnectService`` must have a name that is unique in the namespace.\n Starting April 15, 2023, AWS; will not onboard new customers to Amazon Elastic Inference (EI), and will help current customers migrate their workloads to options that offer better price and performance. After April 15, 2023, new customers will not be able to launch instances with Amazon EI accelerators in Amazon SageMaker, ECS, or EC2. However, customers who have used Amazon EI at least once during the past 30-day period are considered current customers and will be able to continue using the service.", + "definitions": { + "AwsVpcConfiguration": { + "type": "object", + "properties": { + "AssignPublicIp": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ], + "description": "Whether the task's elastic network interface receives a public IP address. The default value is ``DISABLED``." + }, + "SecurityGroups": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The IDs of the security groups associated with the task or service. If you don't specify a security group, the default security group for the VPC is used. There's a limit of 5 security groups that can be specified per ``AwsVpcConfiguration``.\n All specified security groups must be from the same VPC." + }, + "Subnets": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The IDs of the subnets associated with the task or service. There's a limit of 16 subnets that can be specified per ``AwsVpcConfiguration``.\n All specified subnets must be from the same VPC." + } + }, + "additionalProperties": false, + "description": "An object representing the networking details for a task or service. For example ``awsvpcConfiguration={subnets=[\"subnet-12344321\"],securityGroups=[\"sg-12344321\"]}``" + }, + "CapacityProviderStrategyItem": { + "type": "object", + "properties": { + "Base": { + "type": "integer", + "description": "The *base* value designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a *base* defined. If no value is specified, the default value of ``0`` is used." + }, + "CapacityProvider": { + "type": "string", + "description": "The short name of the capacity provider." + }, + "Weight": { + "type": "integer", + "description": "The *weight* value designates the relative percentage of the total number of tasks launched that should use the specified capacity provider. The ``weight`` value is taken into consideration after the ``base`` value, if defined, is satisfied.\n If no ``weight`` value is specified, the default value of ``0`` is used. When multiple capacity providers are specified within a capacity provider strategy, at least one of the capacity providers must have a weight value greater than zero and any capacity providers with a weight of ``0`` can't be used to place tasks. If you specify multiple capacity providers in a strategy that all have a weight of ``0``, any ``RunTask`` or ``CreateService`` actions using the capacity provider strategy will fail.\n An example scenario for using weights is defining a strategy that contains two capacity providers and both have a weight of ``1``, then when the ``base`` is satisfied, the tasks will be split evenly across the two capacity providers. Using that same logic, if you specify a weight of ``1`` for *capacityProviderA* and a weight of ``4`` for *capacityProviderB*, then for every one task that's run using *capacityProviderA*, four tasks would use *capacityProviderB*." + } + }, + "additionalProperties": false, + "description": "The details of a capacity provider strategy. A capacity provider strategy can be set when using the ``RunTask`` or ``CreateService`` APIs or as the default capacity provider strategy for a cluster with the ``CreateCluster`` API.\n Only capacity providers that are already associated with a cluster and have an ``ACTIVE`` or ``UPDATING`` status can be used in a capacity provider strategy. The ``PutClusterCapacityProviders`` API is used to associate a capacity provider with a cluster.\n If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be created. New Auto Scaling group capacity providers can be created with the ``CreateCapacityProvider`` API operation.\n To use an FARGATElong capacity provider, specify either the ``FARGATE`` or ``FARGATE_SPOT`` capacity providers. The FARGATElong capacity providers are available to all accounts and only need to be associated with a cluster to be used in a capacity provider strategy." + }, + "DeploymentAlarms": { + "type": "object", + "properties": { + "AlarmNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "One or more CloudWatch alarm names. Use a \",\" to separate the alarms." + }, + "Rollback": { + "type": "boolean", + "description": "Determines whether to configure Amazon ECS to roll back the service if a service deployment fails. If rollback is used, when a service deployment fails, the service is rolled back to the last deployment that completed successfully." + }, + "Enable": { + "type": "boolean", + "description": "Determines whether to use the CloudWatch alarm option in the service deployment process." + } + }, + "required": [ + "AlarmNames", + "Rollback", + "Enable" + ], + "additionalProperties": false, + "description": "One of the methods which provide a way for you to quickly identify when a deployment has failed, and then to optionally roll back the failure to the last working deployment.\n When the alarms are generated, Amazon ECS sets the service deployment to failed. Set the rollback parameter to have Amazon ECS to roll back your service to the last completed deployment after a failure.\n You can only use the ``DeploymentAlarms`` method to detect failures when the ``DeploymentController`` is set to ``ECS`` (rolling update).\n For more information, see [Rolling update](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "DeploymentCircuitBreaker": { + "type": "object", + "properties": { + "Enable": { + "type": "boolean", + "description": "Determines whether to use the deployment circuit breaker logic for the service." + }, + "Rollback": { + "type": "boolean", + "description": "Determines whether to configure Amazon ECS to roll back the service if a service deployment fails. If rollback is on, when a service deployment fails, the service is rolled back to the last deployment that completed successfully." + } + }, + "required": [ + "Enable", + "Rollback" + ], + "additionalProperties": false, + "description": "The deployment circuit breaker can only be used for services using the rolling update (``ECS``) deployment type.\n The *deployment circuit breaker* determines whether a service deployment will fail if the service can't reach a steady state. If it is turned on, a service deployment will transition to a failed state and stop launching new tasks. You can also configure Amazon ECS to roll back your service to the last completed deployment after a failure. For more information, see [Rolling update](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html) in the *Amazon Elastic Container Service Developer Guide*.\n For more information about API failure reasons, see [API failure reasons](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/api_failures_messages.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "DeploymentConfiguration": { + "type": "object", + "properties": { + "DeploymentCircuitBreaker": { + "$ref": "#/definitions/DeploymentCircuitBreaker", + "description": "The deployment circuit breaker can only be used for services using the rolling update (``ECS``) deployment type.\n The *deployment circuit breaker* determines whether a service deployment will fail if the service can't reach a steady state. If you use the deployment circuit breaker, a service deployment will transition to a failed state and stop launching new tasks. If you use the rollback option, when a service deployment fails, the service is rolled back to the last deployment that completed successfully. For more information, see [Rolling update](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html) in the *Amazon Elastic Container Service Developer Guide*" + }, + "MaximumPercent": { + "type": "integer", + "description": "If a service is using the rolling update (``ECS``) deployment type, the ``maximumPercent`` parameter represents an upper limit on the number of your service's tasks that are allowed in the ``RUNNING`` or ``PENDING`` state during a deployment, as a percentage of the ``desiredCount`` (rounded down to the nearest integer). This parameter enables you to define the deployment batch size. For example, if your service is using the ``REPLICA`` service scheduler and has a ``desiredCount`` of four tasks and a ``maximumPercent`` value of 200%, the scheduler may start four new tasks before stopping the four older tasks (provided that the cluster resources required to do this are available). The default ``maximumPercent`` value for a service using the ``REPLICA`` service scheduler is 200%.\n If a service is using either the blue/green (``CODE_DEPLOY``) or ``EXTERNAL`` deployment types and tasks that use the EC2 launch type, the *maximum percent* value is set to the default value and is used to define the upper limit on the number of the tasks in the service that remain in the ``RUNNING`` state while the container instances are in the ``DRAINING`` state. If the tasks in the service use the Fargate launch type, the maximum percent value is not used, although it is returned when describing your service." + }, + "MinimumHealthyPercent": { + "type": "integer", + "description": "If a service is using the rolling update (``ECS``) deployment type, the ``minimumHealthyPercent`` represents a lower limit on the number of your service's tasks that must remain in the ``RUNNING`` state during a deployment, as a percentage of the ``desiredCount`` (rounded up to the nearest integer). This parameter enables you to deploy without using additional cluster capacity. For example, if your service has a ``desiredCount`` of four tasks and a ``minimumHealthyPercent`` of 50%, the service scheduler may stop two existing tasks to free up cluster capacity before starting two new tasks. \n For services that *do not* use a load balancer, the following should be noted:\n + A service is considered healthy if all essential containers within the tasks in the service pass their health checks.\n + If a task has no essential containers with a health check defined, the service scheduler will wait for 40 seconds after a task reaches a ``RUNNING`` state before the task is counted towards the minimum healthy percent total.\n + If a task has one or more essential containers with a health check defined, the service scheduler will wait for the task to reach a healthy status before counting it towards the minimum healthy percent total. A task is considered healthy when all essential containers within the task have passed their health checks. The amount of time the service scheduler can wait for is determined by the container health check settings. \n \n For services that *do* use a load balancer, the following should be noted:\n + If a task has no essential containers with a health check defined, the service scheduler will wait for the load balancer target group health check to return a healthy status before counting the task towards the minimum healthy percent total.\n + If a task has an essential container with a health check defined, the service scheduler will wait for both the task to reach a healthy status and the load balancer target group health check to return a healthy status before counting the task towards the minimum healthy percent total.\n \n If a service is using either the blue/green (``CODE_DEPLOY``) or ``EXTERNAL`` deployment types and is running tasks that use the EC2 launch type, the *minimum healthy percent* value is set to the default value and is used to define the lower limit on the number of the tasks in the service that remain in the ``RUNNING`` state while the container instances are in the ``DRAINING`` state. If a service is using either the blue/green (``CODE_DEPLOY``) or ``EXTERNAL`` deployment types and is running tasks that use the Fargate launch type, the minimum healthy percent value is not used, although it is returned when describing your service." + }, + "Alarms": { + "$ref": "#/definitions/DeploymentAlarms", + "description": "Information about the CloudWatch alarms." + } + }, + "additionalProperties": false, + "description": "The ``DeploymentConfiguration`` property specifies optional deployment parameters that control how many tasks run during the deployment and the ordering of stopping and starting tasks." + }, + "DeploymentController": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "CODE_DEPLOY", + "ECS", + "EXTERNAL" + ], + "description": "The deployment controller type to use. There are three deployment controller types available:\n + ECS The rolling update (ECS) deployment type involves replacing the current running version of the container with the latest version. The number of containers Amazon ECS adds or removes from the service during a rolling update is controlled by adjusting the minimum and maximum number of healthy tasks allowed during a service deployment, as specified in the DeploymentConfiguration. + CODE_DEPLOY The blue/green (CODE_DEPLOY) deployment type uses the blue/green deployment model powered by , which allows you to verify a new deployment of a service before sending production traffic to it. + EXTERNAL The external (EXTERNAL) deployment type enables you to use any third-party deployment controller for full control over the deployment process for an Amazon ECS service." + } + }, + "additionalProperties": false, + "description": "The deployment controller to use for the service. For more information, see [Amazon ECS deployment types](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "EBSTagSpecification": { + "type": "object", + "required": [ + "ResourceType" + ], + "properties": { + "ResourceType": { + "type": "string", + "description": "The type of volume resource." + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "The tags applied to this Amazon EBS volume. ``AmazonECSCreated`` and ``AmazonECSManaged`` are reserved tags that can't be used." + }, + "PropagateTags": { + "type": "string", + "enum": [ + "SERVICE", + "TASK_DEFINITION" + ], + "description": "Determines whether to propagate the tags from the task definition to ?the Amazon EBS volume. Tags can only propagate to a ``SERVICE`` specified in ?``ServiceVolumeConfiguration``. If no value is specified, the tags aren't ?propagated." + } + }, + "description": "The tag specifications of an Amazon EBS volume." + }, + "LoadBalancer": { + "type": "object", + "properties": { + "ContainerName": { + "type": "string", + "description": "The name of the container (as it appears in a container definition) to associate with the load balancer.\n You need to specify the container name when configuring the target group for an Amazon ECS load balancer." + }, + "ContainerPort": { + "type": "integer", + "description": "The port on the container to associate with the load balancer. This port must correspond to a ``containerPort`` in the task definition the tasks in the service are using. For tasks that use the EC2 launch type, the container instance they're launched on must allow ingress traffic on the ``hostPort`` of the port mapping." + }, + "LoadBalancerName": { + "type": "string", + "description": "The name of the load balancer to associate with the Amazon ECS service or task set.\n If you are using an Application Load Balancer or a Network Load Balancer the load balancer name parameter should be omitted." + }, + "TargetGroupArn": { + "type": "string", + "description": "The full Amazon Resource Name (ARN) of the Elastic Load Balancing target group or groups associated with a service or task set.\n A target group ARN is only specified when using an Application Load Balancer or Network Load Balancer. \n For services using the ``ECS`` deployment controller, you can specify one or multiple target groups. For more information, see [Registering multiple target groups with a service](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html) in the *Amazon Elastic Container Service Developer Guide*.\n For services using the ``CODE_DEPLOY`` deployment controller, you're required to define two target groups for the load balancer. For more information, see [Blue/green deployment with CodeDeploy](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html) in the *Amazon Elastic Container Service Developer Guide*.\n If your service's task definition uses the ``awsvpc`` network mode, you must choose ``ip`` as the target type, not ``instance``. Do this when creating your target groups because tasks that use the ``awsvpc`` network mode are associated with an elastic network interface, not an Amazon EC2 instance. This network mode is required for the Fargate launch type." + } + }, + "additionalProperties": false, + "description": "The ``LoadBalancer`` property specifies details on a load balancer that is used with a service.\n If the service is using the ``CODE_DEPLOY`` deployment controller, the service is required to use either an Application Load Balancer or Network Load Balancer. When you are creating an ACDlong deployment group, you specify two target groups (referred to as a ``targetGroupPair``). Each target group binds to a separate task set in the deployment. The load balancer can also have up to two listeners, a required listener for production traffic and an optional listener that allows you to test new revisions of the service before routing production traffic to it.\n Services with tasks that use the ``awsvpc`` network mode (for example, those with the Fargate launch type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers are not supported. Also, when you create any target groups for these services, you must choose ``ip`` as the target type, not ``instance``. Tasks that use the ``awsvpc`` network mode are associated with an elastic network interface, not an Amazon EC2 instance." + }, + "LogConfiguration": { + "type": "object", + "properties": { + "LogDriver": { + "type": "string", + "description": "The log driver to use for the container.\n For tasks on FARGATElong, the supported log drivers are ``awslogs``, ``splunk``, and ``awsfirelens``.\n For tasks hosted on Amazon EC2 instances, the supported log drivers are ``awslogs``, ``fluentd``, ``gelf``, ``json-file``, ``journald``, ``logentries``,``syslog``, ``splunk``, and ``awsfirelens``.\n For more information about using the ``awslogs`` log driver, see [Using the awslogs log driver](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html) in the *Amazon Elastic Container Service Developer Guide*.\n For more information about using the ``awsfirelens`` log driver, see [Custom log routing](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html) in the *Amazon Elastic Container Service Developer Guide*.\n If you have a custom driver that isn't listed, you can fork the Amazon ECS container agent project that's [available on GitHub](https://docs.aws.amazon.com/https://github.com/aws/amazon-ecs-agent) and customize it to work with that driver. We encourage you to submit pull requests for changes that you would like to have included. However, we don't currently provide support for running modified copies of this software." + }, + "Options": { + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "The configuration options to send to the log driver. This parameter requires version 1.19 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: ``sudo docker version --format '{{.Server.APIVersion}}'``" + }, + "SecretOptions": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Secret" + }, + "description": "The secrets to pass to the log configuration. For more information, see [Specifying sensitive data](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html) in the *Amazon Elastic Container Service Developer Guide*." + } + }, + "additionalProperties": false, + "description": "The log configuration for the container. This parameter maps to ``LogConfig`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--log-driver`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/commandline/run/).\n By default, containers use the same logging driver that the Docker daemon uses. However, the container might use a different logging driver than the Docker daemon by specifying a log driver configuration in the container definition. For more information about the options for different supported log drivers, see [Configure logging drivers](https://docs.aws.amazon.com/https://docs.docker.com/engine/admin/logging/overview/) in the Docker documentation.\n Understand the following when specifying a log configuration for your containers.\n + Amazon ECS currently supports a subset of the logging drivers available to the Docker daemon. Additional log drivers may be available in future releases of the Amazon ECS container agent.\n For tasks on FARGATElong, the supported log drivers are ``awslogs``, ``splunk``, and ``awsfirelens``.\n For tasks hosted on Amazon EC2 instances, the supported log drivers are ``awslogs``, ``fluentd``, ``gelf``, ``json-file``, ``journald``, ``logentries``,``syslog``, ``splunk``, and ``awsfirelens``.\n + This parameter requires version 1.18 of the Docker Remote API or greater on your container instance.\n + For tasks that are hosted on Amazon EC2 instances, the Amazon ECS container agent must register the available logging drivers with the ``ECS_AVAILABLE_LOGGING_DRIVERS`` environment variable before containers placed on that instance can use these log configuration options. For more information, see [Amazon ECS container agent configuration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html) in the *Amazon Elastic Container Service Developer Guide*.\n + For tasks that are on FARGATElong, because you don't have access to the underlying infrastructure your tasks are hosted on, any additional software needed must be installed outside of the task. For example, the Fluentd output aggregators or a remote host running Logstash to send Gelf logs to." + }, + "NetworkConfiguration": { + "type": "object", + "properties": { + "AwsvpcConfiguration": { + "$ref": "#/definitions/AwsVpcConfiguration", + "description": "The VPC subnets and security groups that are associated with a task.\n All specified subnets and security groups must be from the same VPC." + } + }, + "additionalProperties": false, + "description": "The ``NetworkConfiguration`` property specifies an object representing the network configuration for a task or service." + }, + "PlacementConstraint": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "description": "A cluster query language expression to apply to the constraint. The expression can have a maximum length of 2000 characters. You can't specify an expression if the constraint type is ``distinctInstance``. For more information, see [Cluster query language](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "Type": { + "type": "string", + "enum": [ + "distinctInstance", + "memberOf" + ], + "description": "The type of constraint. Use ``distinctInstance`` to ensure that each task in a particular group is running on a different container instance. Use ``memberOf`` to restrict the selection to a group of valid candidates." + } + }, + "required": [ + "Type" + ], + "additionalProperties": false, + "description": "The ``PlacementConstraint`` property specifies an object representing a constraint on task placement in the task definition. For more information, see [Task Placement Constraints](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "PlacementStrategy": { + "type": "object", + "properties": { + "Field": { + "type": "string", + "description": "The field to apply the placement strategy against. For the ``spread`` placement strategy, valid values are ``instanceId`` (or ``host``, which has the same effect), or any platform or custom attribute that is applied to a container instance, such as ``attribute:ecs.availability-zone``. For the ``binpack`` placement strategy, valid values are ``CPU`` and ``MEMORY``. For the ``random`` placement strategy, this field is not used." + }, + "Type": { + "type": "string", + "enum": [ + "binpack", + "random", + "spread" + ], + "description": "The type of placement strategy. The ``random`` placement strategy randomly places tasks on available candidates. The ``spread`` placement strategy spreads placement across available candidates evenly based on the ``field`` parameter. The ``binpack`` strategy places tasks on available candidates that have the least available amount of the resource that's specified with the ``field`` parameter. For example, if you binpack on memory, a task is placed on the instance with the least amount of remaining memory but still enough to run the task." + } + }, + "required": [ + "Type" + ], + "additionalProperties": false, + "description": "The ``PlacementStrategy`` property specifies the task placement strategy for a task or service. For more information, see [Task Placement Strategies](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-strategies.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "Secret": { + "type": "object", + "required": [ + "Name", + "ValueFrom" + ], + "properties": { + "Name": { + "type": "string", + "description": "The name of the secret." + }, + "ValueFrom": { + "type": "string", + "description": "The secret to expose to the container. The supported values are either the full ARN of the ASMlong secret or the full ARN of the parameter in the SSM Parameter Store.\n For information about the require IAMlong permissions, see [Required IAM permissions for Amazon ECS secrets](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-secrets.html#secrets-iam) (for Secrets Manager) or [Required IAM permissions for Amazon ECS secrets](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-parameters.html) (for Systems Manager Parameter store) in the *Amazon Elastic Container Service Developer Guide*.\n If the SSM Parameter Store parameter exists in the same Region as the task you're launching, then you can use either the full ARN or name of the parameter. If the parameter exists in a different Region, then the full ARN must be specified." + } + }, + "additionalProperties": false, + "description": "An object representing the secret to expose to your container. Secrets can be exposed to a container in the following ways:\n + To inject sensitive data into your containers as environment variables, use the ``secrets`` container definition parameter.\n + To reference sensitive information in the log configuration of a container, use the ``secretOptions`` container definition parameter.\n \n For more information, see [Specifying sensitive data](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "ServiceConnectClientAlias": { + "type": "object", + "properties": { + "Port": { + "type": "integer", + "description": "The listening port number for the Service Connect proxy. This port is available inside of all of the tasks within the same namespace.\n To avoid changing your applications in client Amazon ECS services, set this to the same port that the client application uses by default. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "DnsName": { + "type": "string", + "description": "The ``dnsName`` is the name that you use in the applications of client tasks to connect to this service. The name must be a valid DNS name but doesn't need to be fully-qualified. The name can include up to 127 characters. The name can include lowercase letters, numbers, underscores (_), hyphens (-), and periods (.). The name can't start with a hyphen.\n If this parameter isn't specified, the default value of ``discoveryName.namespace`` is used. If the ``discoveryName`` isn't specified, the port mapping name from the task definition is used in ``portName.namespace``.\n To avoid changing your applications in client Amazon ECS services, set this to the same name that the client application uses by default. For example, a few common names are ``database``, ``db``, or the lowercase name of a database, such as ``mysql`` or ``redis``. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*." + } + }, + "required": [ + "Port" + ], + "additionalProperties": false, + "description": "Each alias (\"endpoint\") is a fully-qualified name and port number that other tasks (\"clients\") can use to connect to this service.\n Each name and port mapping must be unique within the namespace.\n Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "ServiceConnectConfiguration": { + "type": "object", + "properties": { + "Enabled": { + "type": "boolean", + "description": "Specifies whether to use Service Connect with this service." + }, + "Namespace": { + "type": "string", + "description": "The namespace name or full Amazon Resource Name (ARN) of the CMAPlong namespace for use with Service Connect. The namespace must be in the same AWS Region as the Amazon ECS service and cluster. The type of namespace doesn't affect Service Connect. For more information about CMAPlong, see [Working with Services](https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html) in the *Developer Guide*." + }, + "Services": { + "type": "array", + "items": { + "$ref": "#/definitions/ServiceConnectService" + }, + "description": "The list of Service Connect service objects. These are names and aliases (also known as endpoints) that are used by other Amazon ECS services to connect to this service. \n This field is not required for a \"client\" Amazon ECS service that's a member of a namespace only to connect to other services within the namespace. An example of this would be a frontend application that accepts incoming requests from either a load balancer that's attached to the service or by other means.\n An object selects a port from the task definition, assigns a name for the CMAPlong service, and a list of aliases (endpoints) and ports for client applications to refer to this service." + }, + "LogConfiguration": { + "$ref": "#/definitions/LogConfiguration", + "description": "The log configuration for the container. This parameter maps to ``LogConfig`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--log-driver`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/commandline/run/).\n By default, containers use the same logging driver that the Docker daemon uses. However, the container might use a different logging driver than the Docker daemon by specifying a log driver configuration in the container definition. For more information about the options for different supported log drivers, see [Configure logging drivers](https://docs.aws.amazon.com/https://docs.docker.com/engine/admin/logging/overview/) in the Docker documentation.\n Understand the following when specifying a log configuration for your containers.\n + Amazon ECS currently supports a subset of the logging drivers available to the Docker daemon. Additional log drivers may be available in future releases of the Amazon ECS container agent.\n For tasks on FARGATElong, the supported log drivers are ``awslogs``, ``splunk``, and ``awsfirelens``.\n For tasks hosted on Amazon EC2 instances, the supported log drivers are ``awslogs``, ``fluentd``, ``gelf``, ``json-file``, ``journald``, ``logentries``,``syslog``, ``splunk``, and ``awsfirelens``.\n + This parameter requires version 1.18 of the Docker Remote API or greater on your container instance.\n + For tasks that are hosted on Amazon EC2 instances, the Amazon ECS container agent must register the available logging drivers with the ``ECS_AVAILABLE_LOGGING_DRIVERS`` environment variable before containers placed on that instance can use these log configuration options. For more information, see [Amazon ECS container agent configuration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html) in the *Amazon Elastic Container Service Developer Guide*.\n + For tasks that are on FARGATElong, because you don't have access to the underlying infrastructure your tasks are hosted on, any additional software needed must be installed outside of the task. For example, the Fluentd output aggregators or a remote host running Logstash to send Gelf logs to." + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false, + "description": "The Service Connect configuration of your Amazon ECS service. The configuration for this service to discover and connect to services, and be discovered by, and connected from, other services within a namespace.\n Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "ServiceConnectService": { + "type": "object", + "properties": { + "PortName": { + "type": "string", + "description": "The ``portName`` must match the name of one of the ``portMappings`` from all the containers in the task definition of this Amazon ECS service." + }, + "DiscoveryName": { + "type": "string", + "description": "The ``discoveryName`` is the name of the new CMAP service that Amazon ECS creates for this Amazon ECS service. This must be unique within the CMAP namespace. The name can contain up to 64 characters. The name can include lowercase letters, numbers, underscores (_), and hyphens (-). The name can't start with a hyphen.\n If the ``discoveryName`` isn't specified, the port mapping name from the task definition is used in ``portName.namespace``." + }, + "ClientAliases": { + "type": "array", + "items": { + "$ref": "#/definitions/ServiceConnectClientAlias" + }, + "description": "The list of client aliases for this Service Connect service. You use these to assign names that can be used by client applications. The maximum number of client aliases that you can have in this list is 1.\n Each alias (\"endpoint\") is a fully-qualified name and port number that other Amazon ECS tasks (\"clients\") can use to connect to this service.\n Each name and port mapping must be unique within the namespace.\n For each ``ServiceConnectService``, you must provide at least one ``clientAlias`` with one ``port``." + }, + "IngressPortOverride": { + "type": "integer", + "description": "The port number for the Service Connect proxy to listen on.\n Use the value of this field to bypass the proxy for traffic on the port number specified in the named ``portMapping`` in the task definition of this application, and then use it in your VPC security groups to allow traffic into the proxy for this Amazon ECS service.\n In ``awsvpc`` mode and Fargate, the default value is the container port number. The container port number is in the ``portMapping`` in the task definition. In bridge mode, the default value is the ephemeral port of the Service Connect proxy." + }, + "Tls": { + "$ref": "#/definitions/ServiceConnectTlsConfiguration", + "description": "A reference to an object that represents a Transport Layer Security (TLS) configuration." + }, + "Timeout": { + "$ref": "#/definitions/TimeoutConfiguration", + "description": "A reference to an object that represents the configured timeouts for Service Connect." + } + }, + "required": [ + "PortName" + ], + "additionalProperties": false, + "description": "The Service Connect service object configuration. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "ServiceConnectTlsConfiguration": { + "type": "object", + "properties": { + "IssuerCertificateAuthority": { + "$ref": "#/definitions/ServiceConnectTlsCertificateAuthority", + "description": "The signer certificate authority." + }, + "KmsKey": { + "type": "string", + "description": "The AWS Key Management Service key." + }, + "RoleArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the IAM role that's associated with the Service Connect TLS." + } + }, + "required": [ + "IssuerCertificateAuthority" + ], + "additionalProperties": false, + "description": "An object that represents the configuration for Service Connect TLS." + }, + "ServiceConnectTlsCertificateAuthority": { + "type": "object", + "properties": { + "AwsPcaAuthorityArn": { + "type": "string", + "description": "The ARN of the AWS Private Certificate Authority certificate." + } + }, + "additionalProperties": false, + "description": "An object that represents the AWS Private Certificate Authority certificate." + }, + "ServiceManagedEBSVolumeConfiguration": { + "type": "object", + "required": [ + "RoleArn" + ], + "properties": { + "Encrypted": { + "type": "boolean", + "description": "Indicates whether the volume should be encrypted. If no value is specified, encryption is turned on by default. This parameter maps 1:1 with the ``Encrypted`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*." + }, + "KmsKeyId": { + "type": "string", + "description": "The Amazon Resource Name (ARN) identifier of the AWS Key Management Service key to use for Amazon EBS encryption. When encryption is turned on and no AWS Key Management Service key is specified, the default AWS managed key for Amazon EBS volumes is used. This parameter maps 1:1 with the ``KmsKeyId`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.\n AWS authenticates the AWS Key Management Service key asynchronously. Therefore, if you specify an ID, alias, or ARN that is invalid, the action can appear to complete, but eventually fails." + }, + "VolumeType": { + "type": "string", + "description": "The volume type. This parameter maps 1:1 with the ``VolumeType`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*. For more information, see [Amazon EBS volume types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) in the *Amazon EC2 User Guide*.\n The following are the supported volume types.\n + General Purpose SSD: ``gp2``|``gp3`` \n + Provisioned IOPS SSD: ``io1``|``io2`` \n + Throughput Optimized HDD: ``st1`` \n + Cold HDD: ``sc1`` \n + Magnetic: ``standard`` \n The magnetic volume type is not supported on Fargate." + }, + "SizeInGiB": { + "type": "integer", + "description": "The size of the volume in GiB. You must specify either a volume size or a snapshot ID. If you specify a snapshot ID, the snapshot size is used for the volume size by default. You can optionally specify a volume size greater than or equal to the snapshot size. This parameter maps 1:1 with the ``Size`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.\n The following are the supported volume size values for each volume type.\n + ``gp2`` and ``gp3``: 1-16,384\n + ``io1`` and ``io2``: 4-16,384\n + ``st1`` and ``sc1``: 125-16,384\n + ``standard``: 1-1,024" + }, + "SnapshotId": { + "type": "string", + "description": "The snapshot that Amazon ECS uses to create the volume. You must specify either a snapshot ID or a volume size. This parameter maps 1:1 with the ``SnapshotId`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*." + }, + "Iops": { + "type": "integer", + "description": "The number of I/O operations per second (IOPS). For ``gp3``, ``io1``, and ``io2`` volumes, this represents the number of IOPS that are provisioned for the volume. For ``gp2`` volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.\n The following are the supported values for each volume type.\n + ``gp3``: 3,000 - 16,000 IOPS\n + ``io1``: 100 - 64,000 IOPS\n + ``io2``: 100 - 256,000 IOPS\n \n This parameter is required for ``io1`` and ``io2`` volume types. The default for ``gp3`` volumes is ``3,000 IOPS``. This parameter is not supported for ``st1``, ``sc1``, or ``standard`` volume types.\n This parameter maps 1:1 with the ``Iops`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*." + }, + "Throughput": { + "type": "integer", + "description": "The throughput to provision for a volume, in MiB/s, with a maximum of 1,000 MiB/s. This parameter maps 1:1 with the ``Throughput`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.\n This parameter is only supported for the ``gp3`` volume type." + }, + "TagSpecifications": { + "type": "array", + "items": { + "$ref": "#/definitions/EBSTagSpecification" + }, + "description": "The tags to apply to the volume. Amazon ECS applies service-managed tags by default. This parameter maps 1:1 with the ``TagSpecifications.N`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*." + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the IAM role to associate with this volume. This is the Amazon ECS infrastructure IAM role that is used to manage your AWS infrastructure. We recommend using the Amazon ECS-managed ``AmazonECSInfrastructureRolePolicyForVolumes`` IAM policy with this role. For more information, see [Amazon ECS infrastructure IAM role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html) in the *Amazon ECS Developer Guide*." + }, + "FilesystemType": { + "type": "string", + "description": "The Linux filesystem type for the volume. For volumes created from a snapshot, you must specify the same filesystem type that the volume was using when the snapshot was created. If there is a filesystem type mismatch, the task will fail to start.\n The available filesystem types are? ``ext3``, ``ext4``, and ``xfs``. If no value is specified, the ``xfs`` filesystem type is used by default." + } + }, + "description": "The configuration for the Amazon EBS volume that Amazon ECS creates and manages on your behalf. These settings are used to create each Amazon EBS volume, with one volume created for each task in the service.\n Many of these parameters map 1:1 with the Amazon EBS ``CreateVolume`` API request parameters." + }, + "TimeoutConfiguration": { + "type": "object", + "properties": { + "IdleTimeoutSeconds": { + "type": "integer", + "description": "The amount of time in seconds a connection will stay active while idle. A value of ``0`` can be set to disable ``idleTimeout``.\n The ``idleTimeout`` default for ``HTTP``/``HTTP2``/``GRPC`` is 5 minutes.\n The ``idleTimeout`` default for ``TCP`` is 1 hour." + }, + "PerRequestTimeoutSeconds": { + "type": "integer", + "description": "The amount of time waiting for the upstream to respond with a complete response per request. A value of ``0`` can be set to disable ``perRequestTimeout``. ``perRequestTimeout`` can only be set if Service Connect ``appProtocol`` isn't ``TCP``. Only ``idleTimeout`` is allowed for ``TCP`` ``appProtocol``." + } + }, + "additionalProperties": false, + "description": "An object that represents the timeout configurations for Service Connect.\n If ``idleTimeout`` is set to a time that is less than ``perRequestTimeout``, the connection will close when the ``idleTimeout`` is reached and not the ``perRequestTimeout``." + }, + "ServiceRegistry": { + "type": "object", + "properties": { + "ContainerName": { + "type": "string", + "description": "The container name value to be used for your service discovery service. It's already specified in the task definition. If the task definition that your service task specifies uses the ``bridge`` or ``host`` network mode, you must specify a ``containerName`` and ``containerPort`` combination from the task definition. If the task definition that your service task specifies uses the ``awsvpc`` network mode and a type SRV DNS record is used, you must specify either a ``containerName`` and ``containerPort`` combination or a ``port`` value. However, you can't specify both." + }, + "ContainerPort": { + "type": "integer", + "description": "The port value to be used for your service discovery service. It's already specified in the task definition. If the task definition your service task specifies uses the ``bridge`` or ``host`` network mode, you must specify a ``containerName`` and ``containerPort`` combination from the task definition. If the task definition your service task specifies uses the ``awsvpc`` network mode and a type SRV DNS record is used, you must specify either a ``containerName`` and ``containerPort`` combination or a ``port`` value. However, you can't specify both." + }, + "Port": { + "type": "integer", + "description": "The port value used if your service discovery service specified an SRV record. This field might be used if both the ``awsvpc`` network mode and SRV records are used." + }, + "RegistryArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the service registry. The currently supported service registry is CMAP. For more information, see [CreateService](https://docs.aws.amazon.com/cloud-map/latest/api/API_CreateService.html)." + } + }, + "additionalProperties": false, + "description": "The ``ServiceRegistry`` property specifies details of the service registry. For more information, see [Service Discovery](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "One part of a key-value pair that make up a tag. A ``key`` is a general label that acts like a category for more specific tag values." + }, + "Value": { + "type": "string", + "description": "The optional part of a key-value pair that make up a tag. A ``value`` acts as a descriptor within a tag category (key)." + } + }, + "additionalProperties": false, + "description": "The metadata that you apply to a resource to help you categorize and organize them. Each tag consists of a key and an optional value. You define them.\n The following basic restrictions apply to tags:\n + Maximum number of tags per resource - 50\n + For each resource, each tag key must be unique, and each tag key can have only one value.\n + Maximum key length - 128 Unicode characters in UTF-8\n + Maximum value length - 256 Unicode characters in UTF-8\n + If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.\n + Tag keys and values are case-sensitive.\n + Do not use ``aws:``, ``AWS:``, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for AWS use. You cannot edit or delete tag keys or values with this prefix. Tags with this prefix do not count against your tags per resource limit." + }, + "ServiceVolumeConfiguration": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string", + "description": "The name of the volume. This value must match the volume name from the ``Volume`` object in the task definition." + }, + "ManagedEBSVolume": { + "$ref": "#/definitions/ServiceManagedEBSVolumeConfiguration", + "description": "The configuration for the Amazon EBS volume that Amazon ECS creates and manages on your behalf. These settings are used to create each Amazon EBS volume, with one volume created for each task in the service. The Amazon EBS volumes are visible in your account in the Amazon EC2 console once they are created." + } + }, + "description": "The configuration for a volume specified in the task definition as a volume that is configured at launch time. Currently, the only supported volume type is an Amazon EBS volume." + } + }, + "properties": { + "ServiceArn": { + "type": "string", + "description": "" + }, + "CapacityProviderStrategy": { + "type": "array", + "items": { + "$ref": "#/definitions/CapacityProviderStrategyItem" + }, + "description": "The capacity provider strategy to use for the service.\n If a ``capacityProviderStrategy`` is specified, the ``launchType`` parameter must be omitted. If no ``capacityProviderStrategy`` or ``launchType`` is specified, the ``defaultCapacityProviderStrategy`` for the cluster is used.\n A capacity provider strategy may contain a maximum of 6 capacity providers." + }, + "Cluster": { + "type": "string", + "description": "The short name or full Amazon Resource Name (ARN) of the cluster that you run your service on. If you do not specify a cluster, the default cluster is assumed." + }, + "DeploymentConfiguration": { + "$ref": "#/definitions/DeploymentConfiguration", + "description": "Optional deployment parameters that control how many tasks run during the deployment and the ordering of stopping and starting tasks." + }, + "DeploymentController": { + "$ref": "#/definitions/DeploymentController", + "description": "The deployment controller to use for the service. If no deployment controller is specified, the default value of ``ECS`` is used." + }, + "DesiredCount": { + "type": "integer", + "description": "The number of instantiations of the specified task definition to place and keep running in your service.\n For new services, if a desired count is not specified, a default value of ``1`` is used. When using the ``DAEMON`` scheduling strategy, the desired count is not required.\n For existing services, if a desired count is not specified, it is omitted from the operation." + }, + "EnableECSManagedTags": { + "type": "boolean", + "description": "Specifies whether to turn on Amazon ECS managed tags for the tasks within the service. For more information, see [Tagging your Amazon ECS resources](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html) in the *Amazon Elastic Container Service Developer Guide*.\n When you use Amazon ECS managed tags, you need to set the ``propagateTags`` request parameter." + }, + "EnableExecuteCommand": { + "type": "boolean", + "description": "Determines whether the execute command functionality is turned on for the service. If ``true``, the execute command functionality is turned on for all containers in tasks as part of the service." + }, + "HealthCheckGracePeriodSeconds": { + "type": "integer", + "description": "The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing target health checks after a task has first started. This is only used when your service is configured to use a load balancer. If your service has a load balancer defined and you don't specify a health check grace period value, the default value of ``0`` is used.\n If you do not use an Elastic Load Balancing, we recommend that you use the ``startPeriod`` in the task definition health check parameters. For more information, see [Health check](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html).\n If your service's tasks take a while to start and respond to Elastic Load Balancing health checks, you can specify a health check grace period of up to 2,147,483,647 seconds (about 69 years). During that time, the Amazon ECS service scheduler ignores health check status. This grace period can prevent the service scheduler from marking tasks as unhealthy and stopping them before they have time to come up." + }, + "LaunchType": { + "type": "string", + "enum": [ + "EC2", + "FARGATE", + "EXTERNAL" + ], + "description": "The launch type on which to run your service. For more information, see [Amazon ECS Launch Types](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "LoadBalancers": { + "type": "array", + "items": { + "$ref": "#/definitions/LoadBalancer" + }, + "description": "A list of load balancer objects to associate with the service. If you specify the ``Role`` property, ``LoadBalancers`` must be specified as well. For information about the number of load balancers that you can specify per service, see [Service Load Balancing](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "Name": { + "type": "string", + "description": "" + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration", + "description": "The network configuration for the service. This parameter is required for task definitions that use the ``awsvpc`` network mode to receive their own elastic network interface, and it is not supported for other network modes. For more information, see [Task Networking](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "PlacementConstraints": { + "type": "array", + "items": { + "$ref": "#/definitions/PlacementConstraint" + }, + "description": "An array of placement constraint objects to use for tasks in your service. You can specify a maximum of 10 constraints for each task. This limit includes constraints in the task definition and those specified at runtime." + }, + "PlacementStrategies": { + "type": "array", + "items": { + "$ref": "#/definitions/PlacementStrategy" + }, + "description": "The placement strategy objects to use for tasks in your service. You can specify a maximum of 5 strategy rules for each service." + }, + "PlatformVersion": { + "type": "string", + "default": "LATEST", + "description": "The platform version that your tasks in the service are running on. A platform version is specified only for tasks using the Fargate launch type. If one isn't specified, the ``LATEST`` platform version is used. For more information, see [platform versions](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "PropagateTags": { + "type": "string", + "enum": [ + "SERVICE", + "TASK_DEFINITION" + ], + "description": "Specifies whether to propagate the tags from the task definition to the task. If no value is specified, the tags aren't propagated. Tags can only be propagated to the task during task creation. To add tags to a task after task creation, use the [TagResource](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TagResource.html) API action.\n The default is ``NONE``." + }, + "Role": { + "type": "string", + "description": "The name or full Amazon Resource Name (ARN) of the IAM role that allows Amazon ECS to make calls to your load balancer on your behalf. This parameter is only permitted if you are using a load balancer with your service and your task definition doesn't use the ``awsvpc`` network mode. If you specify the ``role`` parameter, you must also specify a load balancer object with the ``loadBalancers`` parameter.\n If your account has already created the Amazon ECS service-linked role, that role is used for your service unless you specify a role here. The service-linked role is required if your task definition uses the ``awsvpc`` network mode or if the service is configured to use service discovery, an external deployment controller, multiple target groups, or Elastic Inference accelerators in which case you don't specify a role here. For more information, see [Using service-linked roles for Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html) in the *Amazon Elastic Container Service Developer Guide*.\n If your specified role has a path other than ``/``, then you must either specify the full role ARN (this is recommended) or prefix the role name with the path. For example, if a role with the name ``bar`` has a path of ``/foo/`` then you would specify ``/foo/bar`` as the role name. For more information, see [Friendly names and paths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-friendly-names) in the *IAM User Guide*." + }, + "SchedulingStrategy": { + "type": "string", + "enum": [ + "DAEMON", + "REPLICA" + ], + "description": "The scheduling strategy to use for the service. For more information, see [Services](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html).\n There are two service scheduler strategies available:\n + ``REPLICA``-The replica scheduling strategy places and maintains the desired number of tasks across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement strategies and constraints to customize task placement decisions. This scheduler strategy is required if the service uses the ``CODE_DEPLOY`` or ``EXTERNAL`` deployment controller types.\n + ``DAEMON``-The daemon scheduling strategy deploys exactly one task on each active container instance that meets all of the task placement constraints that you specify in your cluster. The service scheduler also evaluates the task placement constraints for running tasks and will stop tasks that don't meet the placement constraints. When you're using this strategy, you don't need to specify a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies.\n Tasks using the Fargate launch type or the ``CODE_DEPLOY`` or ``EXTERNAL`` deployment controller types don't support the ``DAEMON`` scheduling strategy." + }, + "ServiceConnectConfiguration": { + "$ref": "#/definitions/ServiceConnectConfiguration", + "description": "The configuration for this service to discover and connect to services, and be discovered by, and connected from, other services within a namespace.\n Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "ServiceName": { + "type": "string", + "description": "The name of your service. Up to 255 letters (uppercase and lowercase), numbers, underscores, and hyphens are allowed. Service names must be unique within a cluster, but you can have similarly named services in multiple clusters within a Region or across multiple Regions.\n The stack update fails if you change any properties that require replacement and the ``ServiceName`` is configured. This is because AWS CloudFormation creates the replacement service first, but each ``ServiceName`` must be unique in the cluster." + }, + "ServiceRegistries": { + "type": "array", + "items": { + "$ref": "#/definitions/ServiceRegistry" + }, + "description": "The details of the service discovery registry to associate with this service. For more information, see [Service discovery](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html).\n Each service may be associated with one service registry. Multiple service registries for each service isn't supported." + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "The metadata that you apply to the service to help you categorize and organize them. Each tag consists of a key and an optional value, both of which you define. When a service is deleted, the tags are deleted as well.\n The following basic restrictions apply to tags:\n + Maximum number of tags per resource - 50\n + For each resource, each tag key must be unique, and each tag key can have only one value.\n + Maximum key length - 128 Unicode characters in UTF-8\n + Maximum value length - 256 Unicode characters in UTF-8\n + If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.\n + Tag keys and values are case-sensitive.\n + Do not use ``aws:``, ``AWS:``, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for AWS use. You cannot edit or delete tag keys or values with this prefix. Tags with this prefix do not count against your tags per resource limit." + }, + "TaskDefinition": { + "type": "string", + "description": "The ``family`` and ``revision`` (``family:revision``) or full ARN of the task definition to run in your service. If a ``revision`` isn't specified, the latest ``ACTIVE`` revision is used.\n A task definition must be specified if the service uses either the ``ECS`` or ``CODE_DEPLOY`` deployment controllers.\n For more information about deployment types, see [Amazon ECS deployment types](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)." + }, + "VolumeConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/ServiceVolumeConfiguration" + }, + "description": "The configuration for a volume specified in the task definition as a volume that is configured at launch time. Currently, the only supported volume type is an Amazon EBS volume." + } + }, + "primaryIdentifier": [ + "/properties/ServiceArn", + "/properties/Cluster" + ], + "handlers": { + "create": { + "permissions": [ + "ecs:CreateService", + "ecs:DescribeServices", + "iam:PassRole", + "ecs:TagResource" + ], + "timeoutInMinutes": 180 + }, + "read": { + "permissions": [ + "ecs:DescribeServices" + ] + }, + "update": { + "permissions": [ + "ecs:DescribeServices", + "ecs:ListTagsForResource", + "ecs:TagResource", + "ecs:UntagResource", + "ecs:UpdateService" + ], + "timeoutInMinutes": 180 + }, + "delete": { + "permissions": [ + "ecs:DeleteService", + "ecs:DescribeServices" + ], + "timeoutInMinutes": 30 + }, + "list": { + "permissions": [ + "ecs:DescribeServices", + "ecs:ListClusters", + "ecs:ListServices" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/ServiceArn", + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Cluster", + "/properties/DeploymentController", + "/properties/LaunchType", + "/properties/Role", + "/properties/SchedulingStrategy", + "/properties/ServiceName" + ], + "writeOnlyProperties": [ + "/properties/ServiceConnectConfiguration", + "/properties/VolumeConfigurations" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ecs/taskdefinition.json b/internal/aws/cfn/schemas/aws/ecs/taskdefinition.json new file mode 100644 index 00000000..fc20bb6c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecs/taskdefinition.json @@ -0,0 +1,1088 @@ +{ + "typeName": "AWS::ECS::TaskDefinition", + "description": "Registers a new task definition from the supplied ``family`` and ``containerDefinitions``. Optionally, you can add data volumes to your containers with the ``volumes`` parameter. For more information about task definition parameters and defaults, see [Amazon ECS Task Definitions](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html) in the *Amazon Elastic Container Service Developer Guide*.\n You can specify a role for your task with the ``taskRoleArn`` parameter. When you specify a role for a task, its containers can then use the latest versions of the CLI or SDKs to make API requests to the AWS services that are specified in the policy that's associated with the role. For more information, see [IAM Roles for Tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) in the *Amazon Elastic Container Service Developer Guide*.\n You can specify a Docker networking mode for the containers in your task definition with the ``networkMod", + "sourceUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "definitions": { + "ContainerDefinition": { + "description": "The ``ContainerDefinition`` property specifies a container definition. Container definitions are used in task definitions to describe the different containers that are launched as part of a task.", + "type": "object", + "required": [ + "Name", + "Image" + ], + "properties": { + "Command": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + }, + "description": "The command that's passed to the container. This parameter maps to ``Cmd`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``COMMAND`` parameter to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration). For more information, see [https://docs.docker.com/engine/reference/builder/#cmd](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/builder/#cmd). If there are multiple arguments, each argument is a separated string in the array." + }, + "Cpu": { + "type": "integer", + "description": "The number of ``cpu`` units reserved for the container. This parameter maps to ``CpuShares`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--cpu-shares`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n This field is optional for tasks using the Fargate launch type, and the only requirement is that the total amount of CPU reserved for all containers within a task be lower than the task-level ``cpu`` value.\n You can determine the number of CPU units that are available per EC2 instance type by multiplying the vCPUs listed for that instance type on the [Amazon EC2 Instances](https://docs.aws.amazon.com/ec2/instance-types/) detail page by 1,024.\n Linux containers share unallocated CPU units with other containers on the cont" + }, + "CredentialSpecs": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "A list of ARNs in SSM or Amazon S3 to a credential spec (``CredSpec``) file that configures the container for Active Directory authentication. We recommend that you use this parameter instead of the ``dockerSecurityOptions``. The maximum number of ARNs is 1.\n There are two formats for each ARN.\n + credentialspecdomainless:MyARN You use credentialspecdomainless:MyARN to provide a CredSpec with an additional section for a secret in . You provide the login credentials to the domain in the secret. Each task that runs on any container instance can join different domains. You can use this format without joining the container instance to a domain. + credentialspec:MyARN You use credentialspec:MyARN to provide a CredSpec for a single domain. You must join the container instance to the domain before you start any tasks that use this task definition. \n In both formats, replace ``MyARN`` with the ARN in SSM or Amazon S3.\n If you provide a ``credentialspecdomainless:MyARN``, the ``credspec`` must" + }, + "DependsOn": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ContainerDependency" + }, + "description": "The dependencies defined for container startup and shutdown. A container can contain multiple dependencies. When a dependency is defined for container startup, for container shutdown it is reversed.\n For tasks using the EC2 launch type, the container instances require at least version 1.26.0 of the container agent to turn on container dependencies. However, we recommend using the latest container agent version. For information about checking your agent version and updating to the latest version, see [Updating the Amazon ECS Container Agent](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html) in the *Amazon Elastic Container Service Developer Guide*. If you're using an Amazon ECS-optimized Linux AMI, your instance needs at least version 1.26.0-1 of the ``ecs-init`` package. If your container instances are launched from version ``20190301`` or later, then they contain the required versions of the container agent and ``ecs-init``. For more information, see [" + }, + "DisableNetworking": { + "type": "boolean", + "description": "When this parameter is true, networking is off within the container. This parameter maps to ``NetworkDisabled`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/).\n This parameter is not supported for Windows containers." + }, + "DnsSearchDomains": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "A list of DNS search domains that are presented to the container. This parameter maps to ``DnsSearch`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--dns-search`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n This parameter is not supported for Windows containers." + }, + "DnsServers": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "A list of DNS servers that are presented to the container. This parameter maps to ``Dns`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--dns`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n This parameter is not supported for Windows containers." + }, + "DockerLabels": { + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "A key/value map of labels to add to the container. This parameter maps to ``Labels`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--label`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration). This parameter requires version 1.18 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: ``sudo docker version --format '{{.Server.APIVersion}}'``" + }, + "DockerSecurityOptions": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "A list of strings to provide custom configuration for multiple security systems. For more information about valid values, see [Docker Run Security Configuration](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration). This field isn't valid for containers in tasks using the Fargate launch type.\n For Linux tasks on EC2, this parameter can be used to reference custom labels for SELinux and AppArmor multi-level security systems.\n For any tasks on EC2, this parameter can be used to reference a credential spec file that configures a container for Active Directory authentication. For more information, see [Using gMSAs for Windows Containers](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows-gmsa.html) and [Using gMSAs for Linux Containers](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/linux-gmsa.html) in the *Amazon Elastic Container Service Developer Guide*.\n This parameter maps to ``SecurityOpt`` in the [Create a co" + }, + "EntryPoint": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + }, + "description": "Early versions of the Amazon ECS container agent don't properly handle ``entryPoint`` parameters. If you have problems using ``entryPoint``, update your container agent or enter your commands and arguments as ``command`` array items instead.\n The entry point that's passed to the container. This parameter maps to ``Entrypoint`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--entrypoint`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration). For more information, see [https://docs.docker.com/engine/reference/builder/#entrypoint](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/builder/#entrypoint)." + }, + "Environment": { + "description": "The environment variables to pass to a container. This parameter maps to ``Env`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--env`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n We don't recommend that you use plaintext environment variables for sensitive information, such as credential data.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/KeyValuePair" + } + }, + "EnvironmentFiles": { + "description": "A list of files containing the environment variables to pass to a container. This parameter maps to the ``--env-file`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n You can specify up to ten environment files. The file must have a ``.env`` file extension. Each line in an environment file contains an environment variable in ``VARIABLE=VALUE`` format. Lines beginning with ``#`` are treated as comments and are ignored. For more information about the environment variable file syntax, see [Declare default environment variables in file](https://docs.aws.amazon.com/https://docs.docker.com/compose/env-file/).\n If there are environment variables specified using the ``environment`` parameter in a container definition, they take precedence over the variables contained within an environment file. If multiple environment files are specified that contain the same variable, they're processed from the top down. We recommend t", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/EnvironmentFile" + } + }, + "Essential": { + "type": "boolean", + "description": "If the ``essential`` parameter of a container is marked as ``true``, and that container fails or stops for any reason, all other containers that are part of the task are stopped. If the ``essential`` parameter of a container is marked as ``false``, its failure doesn't affect the rest of the containers in a task. If this parameter is omitted, a container is assumed to be essential.\n All tasks must have at least one essential container. If you have an application that's composed of multiple containers, group containers that are used for a common purpose into components, and separate the different components into multiple task definitions. For more information, see [Application Architecture](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "ExtraHosts": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/HostEntry" + }, + "description": "A list of hostnames and IP address mappings to append to the ``/etc/hosts`` file on the container. This parameter maps to ``ExtraHosts`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--add-host`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n This parameter isn't supported for Windows containers or tasks that use the ``awsvpc`` network mode." + }, + "FirelensConfiguration": { + "$ref": "#/definitions/FirelensConfiguration", + "description": "The FireLens configuration for the container. This is used to specify and configure a log router for container logs. For more information, see [Custom Log Routing](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "HealthCheck": { + "$ref": "#/definitions/HealthCheck", + "description": "The container health check command and associated configuration parameters for the container. This parameter maps to ``HealthCheck`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``HEALTHCHECK`` parameter of [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration)." + }, + "Hostname": { + "type": "string", + "description": "The hostname to use for your container. This parameter maps to ``Hostname`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--hostname`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n The ``hostname`` parameter is not supported if you're using the ``awsvpc`` network mode." + }, + "Image": { + "description": "The image used to start a container. This string is passed directly to the Docker daemon. By default, images in the Docker Hub registry are available. Other repositories are specified with either ``repository-url/image:tag`` or ``repository-url/image@digest``. Up to 255 letters (uppercase and lowercase), numbers, hyphens, underscores, colons, periods, forward slashes, and number signs are allowed. This parameter maps to ``Image`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``IMAGE`` parameter of [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n + When a new task starts, the Amazon ECS container agent pulls the latest version of the specified image and tag for the container to use. However, subsequent updates to a repository image ", + "type": "string" + }, + "Links": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "The ``links`` parameter allows containers to communicate with each other without the need for port mappings. This parameter is only supported if the network mode of a task definition is ``bridge``. The ``name:internalName`` construct is analogous to ``name:alias`` in Docker links. Up to 255 letters (uppercase and lowercase), numbers, underscores, and hyphens are allowed. For more information about linking Docker containers, go to [Legacy container links](https://docs.aws.amazon.com/https://docs.docker.com/network/links/) in the Docker documentation. This parameter maps to ``Links`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--link`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n This parameter is not supported for W" + }, + "LinuxParameters": { + "$ref": "#/definitions/LinuxParameters", + "description": "Linux-specific modifications that are applied to the container, such as Linux kernel capabilities. For more information see [KernelCapabilities](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_KernelCapabilities.html).\n This parameter is not supported for Windows containers." + }, + "LogConfiguration": { + "$ref": "#/definitions/LogConfiguration", + "description": "The log configuration specification for the container.\n This parameter maps to ``LogConfig`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--log-driver`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/). By default, containers use the same logging driver that the Docker daemon uses. However, the container may use a different logging driver than the Docker daemon by specifying a log driver with this parameter in the container definition. To use a different logging driver for a container, the log system must be configured properly on the container instance (or on a different log server for remote logging options). For more information on the options for different supported log drivers, see [Configure logging drivers](https://docs.aws.amazon.com/htt" + }, + "Memory": { + "description": "The amount (in MiB) of memory to present to the container. If your container attempts to exceed the memory specified here, the container is killed. The total amount of memory reserved for all containers within a task must be lower than the task ``memory`` value, if one is specified. This parameter maps to ``Memory`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--memory`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n If using the Fargate launch type, this parameter is optional.\n If using the EC2 launch type, you must specify either a task-level memory value or a container-level memory value. If you specify both a container-level ``memory`` and ``memoryReservation`` value, ``memory`` must be greater than ``memoryReserva", + "type": "integer" + }, + "MemoryReservation": { + "type": "integer", + "description": "The soft limit (in MiB) of memory to reserve for the container. When system memory is under heavy contention, Docker attempts to keep the container memory to this soft limit. However, your container can consume more memory when it needs to, up to either the hard limit specified with the ``memory`` parameter (if applicable), or all of the available memory on the container instance, whichever comes first. This parameter maps to ``MemoryReservation`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--memory-reservation`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n If a task-level memory value is not specified, you must specify a non-zero integer for one or both of ``memory`` or ``memoryReservation`` in a container definiti" + }, + "MountPoints": { + "type": "array", + "insertionOrder": true, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MountPoint" + }, + "description": "The mount points for data volumes in your container.\n This parameter maps to ``Volumes`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--volume`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n Windows containers can mount whole directories on the same drive as ``$env:ProgramData``. Windows containers can't mount directories on a different drive, and mount point can't be across drives." + }, + "Name": { + "description": "The name of a container. If you're linking multiple containers together in a task definition, the ``name`` of one container can be entered in the ``links`` of another container to connect the containers. Up to 255 letters (uppercase and lowercase), numbers, underscores, and hyphens are allowed. This parameter maps to ``name`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--name`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).", + "type": "string" + }, + "PortMappings": { + "description": "The list of port mappings for the container. Port mappings allow containers to access ports on the host container instance to send or receive traffic.\n For task definitions that use the ``awsvpc`` network mode, you should only specify the ``containerPort``. The ``hostPort`` can be left blank or it must be the same value as the ``containerPort``.\n Port mappings on Windows use the ``NetNAT`` gateway address rather than ``localhost``. There is no loopback for port mappings on Windows, so you cannot access a container's mapped port from the host itself. \n This parameter maps to ``PortBindings`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--publish`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/). If the network mode of a task definition is set to", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/PortMapping" + } + }, + "Privileged": { + "type": "boolean", + "description": "When this parameter is true, the container is given elevated privileges on the host container instance (similar to the ``root`` user). This parameter maps to ``Privileged`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--privileged`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n This parameter is not supported for Windows containers or tasks run on FARGATElong." + }, + "ReadonlyRootFilesystem": { + "type": "boolean", + "description": "When this parameter is true, the container is given read-only access to its root file system. This parameter maps to ``ReadonlyRootfs`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--read-only`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n This parameter is not supported for Windows containers." + }, + "RepositoryCredentials": { + "$ref": "#/definitions/RepositoryCredentials", + "description": "The private repository authentication credentials to use." + }, + "ResourceRequirements": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ResourceRequirement" + }, + "description": "The type and amount of a resource to assign to a container. The only supported resource is a GPU." + }, + "Secrets": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Secret" + }, + "description": "The secrets to pass to the container. For more information, see [Specifying Sensitive Data](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "StartTimeout": { + "type": "integer", + "description": "Time duration (in seconds) to wait before giving up on resolving dependencies for a container. For example, you specify two containers in a task definition with containerA having a dependency on containerB reaching a ``COMPLETE``, ``SUCCESS``, or ``HEALTHY`` status. If a ``startTimeout`` value is specified for containerB and it doesn't reach the desired status within that time then containerA gives up and not start. This results in the task transitioning to a ``STOPPED`` state.\n When the ``ECS_CONTAINER_START_TIMEOUT`` container agent configuration variable is used, it's enforced independently from this start timeout value.\n For tasks using the Fargate launch type, the task or service requires the following platforms:\n + Linux platform version ``1.3.0`` or later.\n + Windows platform version ``1.0.0`` or later.\n \n For tasks using the EC2 launch type, your container instances require at least version ``1.26.0`` of the container agent to use a container start timeout value. However" + }, + "StopTimeout": { + "type": "integer", + "description": "Time duration (in seconds) to wait before the container is forcefully killed if it doesn't exit normally on its own.\n For tasks using the Fargate launch type, the task or service requires the following platforms:\n + Linux platform version ``1.3.0`` or later.\n + Windows platform version ``1.0.0`` or later.\n \n The max stop timeout value is 120 seconds and if the parameter is not specified, the default value of 30 seconds is used.\n For tasks that use the EC2 launch type, if the ``stopTimeout`` parameter isn't specified, the value set for the Amazon ECS container agent configuration variable ``ECS_CONTAINER_STOP_TIMEOUT`` is used. If neither the ``stopTimeout`` parameter or the ``ECS_CONTAINER_STOP_TIMEOUT`` agent configuration variable are set, then the default values of 30 seconds for Linux containers and 30 seconds on Windows containers are used. Your container instances require at least version 1.26.0 of the container agent to use a container stop timeout value. However, we recomm" + }, + "Ulimits": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Ulimit" + }, + "description": "A list of ``ulimits`` to set in the container. This parameter maps to ``Ulimits`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--ulimit`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/). Valid naming values are displayed in the [Ulimit](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_Ulimit.html) data type. This parameter requires version 1.18 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: ``sudo docker version --format '{{.Server.APIVersion}}'`` \n This parameter is not supported for Windows containers." + }, + "User": { + "type": "string", + "description": "The user to use inside the container. This parameter maps to ``User`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--user`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n When running tasks using the ``host`` network mode, don't run containers using the root user (UID 0). We recommend using a non-root user for better security.\n You can specify the ``user`` using the following formats. If specifying a UID or GID, you must specify it as a positive integer.\n + ``user`` \n + ``user:group`` \n + ``uid`` \n + ``uid:gid`` \n + ``user:gid`` \n + ``uid:group`` \n \n This parameter is not supported for Windows containers." + }, + "VolumesFrom": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/VolumeFrom" + }, + "description": "Data volumes to mount from another container. This parameter maps to ``VolumesFrom`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--volumes-from`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration)." + }, + "WorkingDirectory": { + "type": "string", + "description": "The working directory to run commands inside the container in. This parameter maps to ``WorkingDir`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--workdir`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration)." + }, + "Interactive": { + "type": "boolean", + "description": "When this parameter is ``true``, you can deploy containerized applications that require ``stdin`` or a ``tty`` to be allocated. This parameter maps to ``OpenStdin`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--interactive`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration)." + }, + "PseudoTerminal": { + "type": "boolean", + "description": "When this parameter is ``true``, a TTY is allocated. This parameter maps to ``Tty`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--tty`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration)." + }, + "SystemControls": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SystemControl" + }, + "description": "A list of namespaced kernel parameters to set in the container. This parameter maps to ``Sysctls`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--sysctl`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration). For example, you can configure ``net.ipv4.tcp_keepalive_time`` setting to maintain longer lived connections." + } + }, + "additionalProperties": false + }, + "SystemControl": { + "type": "object", + "properties": { + "Namespace": { + "type": "string", + "description": "The namespaced kernel parameter to set a ``value`` for." + }, + "Value": { + "type": "string", + "description": "The namespaced kernel parameter to set a ``value`` for.\n Valid IPC namespace values: ``\"kernel.msgmax\" | \"kernel.msgmnb\" | \"kernel.msgmni\" | \"kernel.sem\" | \"kernel.shmall\" | \"kernel.shmmax\" | \"kernel.shmmni\" | \"kernel.shm_rmid_forced\"``, and ``Sysctls`` that start with ``\"fs.mqueue.*\"`` \n Valid network namespace values: ``Sysctls`` that start with ``\"net.*\"`` \n All of these values are supported by Fargate." + } + }, + "additionalProperties": false, + "description": "A list of namespaced kernel parameters to set in the container. This parameter maps to ``Sysctls`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--sysctl`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration). For example, you can configure ``net.ipv4.tcp_keepalive_time`` setting to maintain longer lived connections.\n We don't recommend that you specify network-related ``systemControls`` parameters for multiple containers in a single task that also uses either the ``awsvpc`` or ``host`` network mode. Doing this has the following disadvantages:\n + For tasks that use the ``awsvpc`` network mode including Fargate, if you set ``systemControls`` for any container, it applies to all containers in the task. If you set different ``sy" + }, + "ContainerDependency": { + "type": "object", + "properties": { + "ContainerName": { + "type": "string", + "description": "The name of a container." + }, + "Condition": { + "type": "string", + "description": "The dependency condition of the container. The following are the available conditions and their behavior:\n + ``START`` - This condition emulates the behavior of links and volumes today. It validates that a dependent container is started before permitting other containers to start.\n + ``COMPLETE`` - This condition validates that a dependent container runs to completion (exits) before permitting other containers to start. This can be useful for nonessential containers that run a script and then exit. This condition can't be set on an essential container.\n + ``SUCCESS`` - This condition is the same as ``COMPLETE``, but it also requires that the container exits with a ``zero`` status. This condition can't be set on an essential container.\n + ``HEALTHY`` - This condition validates that the dependent container passes its Docker health check before permitting other containers to start. This requires that the dependent container has health checks configured. This condition is confi" + } + }, + "additionalProperties": false, + "description": "The ``ContainerDependency`` property specifies the dependencies defined for container startup and shutdown. A container can contain multiple dependencies. When a dependency is defined for container startup, for container shutdown it is reversed.\n Your Amazon ECS container instances require at least version 1.26.0 of the container agent to enable container dependencies. However, we recommend using the latest container agent version. For information about checking your agent version and updating to the latest version, see [Updating the Amazon ECS Container Agent](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html) in the *Amazon Elastic Container Service Developer Guide*. If you are using an Amazon ECS-optimized Linux AMI, your instance needs at least version 1.26.0-1 of the ``ecs-init`` package. If your container instances are launched from version ``20190301`` or later, then they contain the required versions of the container agent and ``ecs-init``. For m" + }, + "Device": { + "type": "object", + "properties": { + "ContainerPath": { + "type": "string", + "description": "The path inside the container at which to expose the host device." + }, + "HostPath": { + "type": "string", + "description": "The path for the device on the host container instance." + }, + "Permissions": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "The explicit permissions to provide to the container for the device. By default, the container has permissions for ``read``, ``write``, and ``mknod`` for the device." + } + }, + "additionalProperties": false, + "description": "The ``Device`` property specifies an object representing a container instance host device." + }, + "DockerVolumeConfiguration": { + "type": "object", + "properties": { + "Autoprovision": { + "type": "boolean", + "description": "If this value is ``true``, the Docker volume is created if it doesn't already exist.\n This field is only used if the ``scope`` is ``shared``." + }, + "Driver": { + "type": "string", + "description": "The Docker volume driver to use. The driver value must match the driver name provided by Docker because it is used for task placement. If the driver was installed using the Docker plugin CLI, use ``docker plugin ls`` to retrieve the driver name from your container instance. If the driver was installed using another method, use Docker plugin discovery to retrieve the driver name. For more information, see [Docker plugin discovery](https://docs.aws.amazon.com/https://docs.docker.com/engine/extend/plugin_api/#plugin-discovery). This parameter maps to ``Driver`` in the [Create a volume](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/VolumeCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``xxdriver`` option to [docker volume create](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/commandline/volume_create/)." + }, + "DriverOpts": { + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "A map of Docker driver-specific options passed through. This parameter maps to ``DriverOpts`` in the [Create a volume](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/VolumeCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``xxopt`` option to [docker volume create](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/commandline/volume_create/)." + }, + "Labels": { + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Custom metadata to add to your Docker volume. This parameter maps to ``Labels`` in the [Create a volume](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/VolumeCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``xxlabel`` option to [docker volume create](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/commandline/volume_create/)." + }, + "Scope": { + "type": "string", + "description": "The scope for the Docker volume that determines its lifecycle. Docker volumes that are scoped to a ``task`` are automatically provisioned when the task starts and destroyed when the task stops. Docker volumes that are scoped as ``shared`` persist after the task stops." + } + }, + "additionalProperties": false, + "description": "The ``DockerVolumeConfiguration`` property specifies a Docker volume configuration and is used when you use Docker volumes. Docker volumes are only supported when you are using the EC2 launch type. Windows containers only support the use of the ``local`` driver. To use bind mounts, specify a ``host`` instead." + }, + "AuthorizationConfig": { + "type": "object", + "properties": { + "IAM": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ], + "description": "Determines whether to use the Amazon ECS task role defined in a task definition when mounting the Amazon EFS file system. If it is turned on, transit encryption must be turned on in the ``EFSVolumeConfiguration``. If this parameter is omitted, the default value of ``DISABLED`` is used. For more information, see [Using Amazon EFS access points](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html#efs-volume-accesspoints) in the *Amazon Elastic Container Service Developer Guide*." + }, + "AccessPointId": { + "type": "string", + "description": "The Amazon EFS access point ID to use. If an access point is specified, the root directory value specified in the ``EFSVolumeConfiguration`` must either be omitted or set to ``/`` which will enforce the path set on the EFS access point. If an access point is used, transit encryption must be on in the ``EFSVolumeConfiguration``. For more information, see [Working with Amazon EFS access points](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html) in the *Amazon Elastic File System User Guide*." + } + }, + "additionalProperties": false, + "description": "The authorization configuration details for the Amazon EFS file system." + }, + "EFSVolumeConfiguration": { + "type": "object", + "required": [ + "FilesystemId" + ], + "properties": { + "FilesystemId": { + "type": "string", + "description": "The Amazon EFS file system ID to use." + }, + "RootDirectory": { + "type": "string", + "description": "The directory within the Amazon EFS file system to mount as the root directory inside the host. If this parameter is omitted, the root of the Amazon EFS volume will be used. Specifying ``/`` will have the same effect as omitting this parameter.\n If an EFS access point is specified in the ``authorizationConfig``, the root directory parameter must either be omitted or set to ``/`` which will enforce the path set on the EFS access point." + }, + "TransitEncryption": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ], + "description": "Determines whether to use encryption for Amazon EFS data in transit between the Amazon ECS host and the Amazon EFS server. Transit encryption must be turned on if Amazon EFS IAM authorization is used. If this parameter is omitted, the default value of ``DISABLED`` is used. For more information, see [Encrypting data in transit](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html) in the *Amazon Elastic File System User Guide*." + }, + "TransitEncryptionPort": { + "type": "integer", + "description": "The port to use when sending encrypted data between the Amazon ECS host and the Amazon EFS server. If you do not specify a transit encryption port, it will use the port selection strategy that the Amazon EFS mount helper uses. For more information, see [EFS mount helper](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html) in the *Amazon Elastic File System User Guide*." + }, + "AuthorizationConfig": { + "$ref": "#/definitions/AuthorizationConfig", + "description": "The authorization configuration details for the Amazon EFS file system." + } + }, + "additionalProperties": false, + "description": "This parameter is specified when you're using an Amazon Elastic File System file system for task storage. For more information, see [Amazon EFS volumes](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "EnvironmentFile": { + "type": "object", + "properties": { + "Value": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the Amazon S3 object containing the environment variable file." + }, + "Type": { + "type": "string", + "description": "The file type to use. The only supported value is ``s3``." + } + }, + "additionalProperties": false, + "description": "A list of files containing the environment variables to pass to a container. You can specify up to ten environment files. The file must have a ``.env`` file extension. Each line in an environment file should contain an environment variable in ``VARIABLE=VALUE`` format. Lines beginning with ``#`` are treated as comments and are ignored.\n If there are environment variables specified using the ``environment`` parameter in a container definition, they take precedence over the variables contained within an environment file. If multiple environment files are specified that contain the same variable, they're processed from the top down. We recommend that you use unique variable names. For more information, see [Specifying environment variables](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html) in the *Amazon Elastic Container Service Developer Guide*.\n You must use the following platforms for the Fargate launch type:\n + Linux platform version ``1.4.0`` or la" + }, + "EphemeralStorage": { + "type": "object", + "properties": { + "SizeInGiB": { + "type": "integer", + "description": "The total amount, in GiB, of ephemeral storage to set for the task. The minimum supported value is ``21`` GiB and the maximum supported value is ``200`` GiB." + } + }, + "additionalProperties": false, + "description": "The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on FARGATElong. For more information, see [Using data volumes in tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html) in the *Amazon ECS Developer Guide;*.\n For tasks using the Fargate launch type, the task requires the following platforms:\n + Linux platform version ``1.4.0`` or later.\n + Windows platform version ``1.0.0`` or later." + }, + "FirelensConfiguration": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "The log router to use. The valid values are ``fluentd`` or ``fluentbit``." + }, + "Options": { + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "The options to use when configuring the log router. This field is optional and can be used to add additional metadata, such as the task, task definition, cluster, and container instance details to the log event.\n If specified, valid option keys are:\n + ``enable-ecs-log-metadata``, which can be ``true`` or ``false``\n + ``config-file-type``, which can be ``s3`` or ``file``\n + ``config-file-value``, which is either an S3 ARN or a file path" + } + }, + "additionalProperties": false, + "description": "The FireLens configuration for the container. This is used to specify and configure a log router for container logs. For more information, see [Custom log routing](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "HealthCheck": { + "description": "The ``HealthCheck`` property specifies an object representing a container health check. Health check parameters that are specified in a container definition override any Docker health checks that exist in the container image (such as those specified in a parent image or from the image's Dockerfile). This configuration maps to the ``HEALTHCHECK`` parameter of [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/).\n The Amazon ECS container agent only monitors and reports on the health checks specified in the task definition. Amazon ECS does not monitor Docker health checks that are embedded in a container image and not specified in the container definition. Health check parameters that are specified in a container definition override any Docker health checks that exist in the container image.\n If a task is run manually, and not as part of a service, the task will continue its lifecycle regardless of its health status. For tasks that are part of a servi", + "type": "object", + "properties": { + "Command": { + "description": "A string array representing the command that the container runs to determine if it is healthy. The string array must start with ``CMD`` to run the command arguments directly, or ``CMD-SHELL`` to run the command with the container's default shell. \n When you use the AWS Management Console JSON panel, the CLIlong, or the APIs, enclose the list of commands in double quotes and brackets.\n ``[ \"CMD-SHELL\", \"curl -f http://localhost/ || exit 1\" ]`` \n You don't include the double quotes and brackets when you use the AWS Management Console.\n ``CMD-SHELL, curl -f http://localhost/ || exit 1`` \n An exit code of 0 indicates success, and non-zero exit code indicates failure. For more information, see ``HealthCheck`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/).", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "Interval": { + "description": "The time period in seconds between each health check execution. You may specify between 5 and 300 seconds. The default value is 30 seconds.", + "type": "integer" + }, + "Timeout": { + "description": "The time period in seconds to wait for a health check to succeed before it is considered a failure. You may specify between 2 and 60 seconds. The default value is 5.", + "type": "integer" + }, + "Retries": { + "description": "The number of times to retry a failed health check before the container is considered unhealthy. You may specify between 1 and 10 retries. The default value is 3.", + "type": "integer" + }, + "StartPeriod": { + "description": "The optional grace period to provide containers time to bootstrap before failed health checks count towards the maximum number of retries. You can specify between 0 and 300 seconds. By default, the ``startPeriod`` is off.\n If a health check succeeds within the ``startPeriod``, then the container is considered healthy and any subsequent failures count toward the maximum number of retries.", + "type": "integer" + } + }, + "additionalProperties": false + }, + "HostEntry": { + "type": "object", + "properties": { + "Hostname": { + "type": "string", + "description": "The hostname to use in the ``/etc/hosts`` entry." + }, + "IpAddress": { + "type": "string", + "description": "The IP address to use in the ``/etc/hosts`` entry." + } + }, + "additionalProperties": false, + "description": "The ``HostEntry`` property specifies a hostname and an IP address that are added to the ``/etc/hosts`` file of a container through the ``extraHosts`` parameter of its ``ContainerDefinition`` resource." + }, + "HostVolumeProperties": { + "type": "object", + "properties": { + "SourcePath": { + "type": "string", + "description": "When the ``host`` parameter is used, specify a ``sourcePath`` to declare the path on the host container instance that's presented to the container. If this parameter is empty, then the Docker daemon has assigned a host path for you. If the ``host`` parameter contains a ``sourcePath`` file location, then the data volume persists at the specified location on the host container instance until you delete it manually. If the ``sourcePath`` value doesn't exist on the host container instance, the Docker daemon creates it. If the location does exist, the contents of the source path folder are exported.\n If you're using the Fargate launch type, the ``sourcePath`` parameter is not supported." + } + }, + "additionalProperties": false, + "description": "The ``HostVolumeProperties`` property specifies details on a container instance bind mount host volume." + }, + "InferenceAccelerator": { + "type": "object", + "properties": { + "DeviceName": { + "type": "string", + "description": "The Elastic Inference accelerator device name. The ``deviceName`` must also be referenced in a container definition as a [ResourceRequirement](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ResourceRequirement.html)." + }, + "DeviceType": { + "type": "string", + "description": "The Elastic Inference accelerator type to use." + } + }, + "additionalProperties": false, + "description": "Details on an Elastic Inference accelerator. For more information, see [Working with Amazon Elastic Inference on Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-inference.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "KernelCapabilities": { + "type": "object", + "properties": { + "Add": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The Linux capabilities for the container that have been added to the default configuration provided by Docker. This parameter maps to ``CapAdd`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--cap-add`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n Tasks launched on FARGATElong only support adding the ``SYS_PTRACE`` kernel capability.\n Valid values: ``\"ALL\" | \"AUDIT_CONTROL\" | \"AUDIT_WRITE\" | \"BLOCK_SUSPEND\" | \"CHOWN\" | \"DAC_OVERRIDE\" | \"DAC_READ_SEARCH\" | \"FOWNER\" | \"FSETID\" | \"IPC_LOCK\" | \"IPC_OWNER\" | \"KILL\" | \"LEASE\" | \"LINUX_IMMUTABLE\" | \"MAC_ADMIN\" | \"MAC_OVERRIDE\" | \"MKNOD\" | \"NET_ADMIN\" | \"NET_BIND_SERVICE\" | \"NET_BROADCAST\" | \"NET_RAW\" | \"SETFCAP\" | \"SETGID\" | \"SETPCAP\" | \"SETUID\" | \"SYS_ADMIN\" | \"SYS_BOOT\" " + }, + "Drop": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The Linux capabilities for the container that have been removed from the default configuration provided by Docker. This parameter maps to ``CapDrop`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--cap-drop`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n Valid values: ``\"ALL\" | \"AUDIT_CONTROL\" | \"AUDIT_WRITE\" | \"BLOCK_SUSPEND\" | \"CHOWN\" | \"DAC_OVERRIDE\" | \"DAC_READ_SEARCH\" | \"FOWNER\" | \"FSETID\" | \"IPC_LOCK\" | \"IPC_OWNER\" | \"KILL\" | \"LEASE\" | \"LINUX_IMMUTABLE\" | \"MAC_ADMIN\" | \"MAC_OVERRIDE\" | \"MKNOD\" | \"NET_ADMIN\" | \"NET_BIND_SERVICE\" | \"NET_BROADCAST\" | \"NET_RAW\" | \"SETFCAP\" | \"SETGID\" | \"SETPCAP\" | \"SETUID\" | \"SYS_ADMIN\" | \"SYS_BOOT\" | \"SYS_CHROOT\" | \"SYS_MODULE\" | \"SYS_NICE\" | \"SYS_PACCT\" | \"SYS_PTRACE\" | \"SYS_RAWIO\"" + } + }, + "additionalProperties": false, + "description": "The ``KernelCapabilities`` property specifies the Linux capabilities for the container that are added to or dropped from the default configuration that is provided by Docker. For more information on the default capabilities and the non-default available capabilities, see [Runtime privilege and Linux capabilities](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) in the *Docker run reference*. For more detailed information on these Linux capabilities, see the [capabilities(7)](https://docs.aws.amazon.com/http://man7.org/linux/man-pages/man7/capabilities.7.html) Linux manual page." + }, + "KeyValuePair": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of the key-value pair. For environment variables, this is the name of the environment variable." + }, + "Value": { + "type": "string", + "description": "The value of the key-value pair. For environment variables, this is the value of the environment variable." + } + }, + "additionalProperties": false, + "description": "A key-value pair object." + }, + "LinuxParameters": { + "type": "object", + "properties": { + "Capabilities": { + "$ref": "#/definitions/KernelCapabilities", + "description": "The Linux capabilities for the container that are added to or dropped from the default configuration provided by Docker.\n For tasks that use the Fargate launch type, ``capabilities`` is supported for all platform versions but the ``add`` parameter is only supported if using platform version 1.4.0 or later." + }, + "Devices": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Device" + }, + "description": "Any host devices to expose to the container. This parameter maps to ``Devices`` in the [Create a container](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate) section of the [Docker Remote API](https://docs.aws.amazon.com/https://docs.docker.com/engine/api/v1.35/) and the ``--device`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n If you're using tasks that use the Fargate launch type, the ``devices`` parameter isn't supported." + }, + "InitProcessEnabled": { + "type": "boolean", + "description": "Run an ``init`` process inside the container that forwards signals and reaps processes. This parameter maps to the ``--init`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration). This parameter requires version 1.25 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: ``sudo docker version --format '{{.Server.APIVersion}}'``" + }, + "MaxSwap": { + "type": "integer", + "description": "The total amount of swap memory (in MiB) a container can use. This parameter will be translated to the ``--memory-swap`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration) where the value would be the sum of the container memory plus the ``maxSwap`` value.\n If a ``maxSwap`` value of ``0`` is specified, the container will not use swap. Accepted values are ``0`` or any positive integer. If the ``maxSwap`` parameter is omitted, the container will use the swap configuration for the container instance it is running on. A ``maxSwap`` value must be set for the ``swappiness`` parameter to be used.\n If you're using tasks that use the Fargate launch type, the ``maxSwap`` parameter isn't supported.\n If you're using tasks on Amazon Linux 2023 the ``swappiness`` parameter isn't supported." + }, + "SharedMemorySize": { + "type": "integer", + "description": "The value for the size (in MiB) of the ``/dev/shm`` volume. This parameter maps to the ``--shm-size`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n If you are using tasks that use the Fargate launch type, the ``sharedMemorySize`` parameter is not supported." + }, + "Swappiness": { + "type": "integer", + "description": "This allows you to tune a container's memory swappiness behavior. A ``swappiness`` value of ``0`` will cause swapping to not happen unless absolutely necessary. A ``swappiness`` value of ``100`` will cause pages to be swapped very aggressively. Accepted values are whole numbers between ``0`` and ``100``. If the ``swappiness`` parameter is not specified, a default value of ``60`` is used. If a value is not specified for ``maxSwap`` then this parameter is ignored. This parameter maps to the ``--memory-swappiness`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n If you're using tasks that use the Fargate launch type, the ``swappiness`` parameter isn't supported.\n If you're using tasks on Amazon Linux 2023 the ``swappiness`` parameter isn't supported." + }, + "Tmpfs": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tmpfs" + }, + "description": "The container path, mount options, and size (in MiB) of the tmpfs mount. This parameter maps to the ``--tmpfs`` option to [docker run](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#security-configuration).\n If you're using tasks that use the Fargate launch type, the ``tmpfs`` parameter isn't supported." + } + }, + "additionalProperties": false, + "description": "The Linux-specific options that are applied to the container, such as Linux [KernelCapabilities](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_KernelCapabilities.html)." + }, + "LogConfiguration": { + "type": "object", + "required": [ + "LogDriver" + ], + "properties": { + "LogDriver": { + "type": "string", + "description": "The log driver to use for the container.\n For tasks on FARGATElong, the supported log drivers are ``awslogs``, ``splunk``, and ``awsfirelens``.\n For tasks hosted on Amazon EC2 instances, the supported log drivers are ``awslogs``, ``fluentd``, ``gelf``, ``json-file``, ``journald``, ``logentries``,``syslog``, ``splunk``, and ``awsfirelens``.\n For more information about using the ``awslogs`` log driver, see [Using the awslogs log driver](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html) in the *Amazon Elastic Container Service Developer Guide*.\n For more information about using the ``awsfirelens`` log driver, see [Custom log routing](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html) in the *Amazon Elastic Container Service Developer Guide*.\n If you have a custom driver that isn't listed, you can fork the Amazon ECS container agent project that's [available on GitHub](https://docs.aws.amazon.com/https://github.com/aws/amazon-ecs" + }, + "Options": { + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "The configuration options to send to the log driver. This parameter requires version 1.19 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: ``sudo docker version --format '{{.Server.APIVersion}}'``" + }, + "SecretOptions": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Secret" + }, + "description": "The secrets to pass to the log configuration. For more information, see [Specifying sensitive data](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html) in the *Amazon Elastic Container Service Developer Guide*." + } + }, + "additionalProperties": false, + "description": "The ``LogConfiguration`` property specifies log configuration options to send to a custom log driver for the container." + }, + "PortMapping": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name that's used for the port mapping. This parameter only applies to Service Connect. This parameter is the name that you use in the ``serviceConnectConfiguration`` of a service. The name can include up to 64 characters. The characters can include lowercase letters, numbers, underscores (_), and hyphens (-). The name can't start with a hyphen.\n For more information, see [Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "ContainerPort": { + "type": "integer", + "description": "The port number on the container that's bound to the user-specified or automatically assigned host port.\n If you use containers in a task with the ``awsvpc`` or ``host`` network mode, specify the exposed ports using ``containerPort``.\n If you use containers in a task with the ``bridge`` network mode and you specify a container port and not a host port, your container automatically receives a host port in the ephemeral port range. For more information, see ``hostPort``. Port mappings that are automatically assigned in this way do not count toward the 100 reserved ports limit of a container instance." + }, + "ContainerPortRange": { + "type": "string", + "description": "The port number range on the container that's bound to the dynamically mapped host port range. \n The following rules apply when you specify a ``containerPortRange``:\n + You must use either the ``bridge`` network mode or the ``awsvpc`` network mode.\n + This parameter is available for both the EC2 and FARGATElong launch types.\n + This parameter is available for both the Linux and Windows operating systems.\n + The container instance must have at least version 1.67.0 of the container agent and at least version 1.67.0-1 of the ``ecs-init`` package \n + You can specify a maximum of 100 port ranges per container.\n + You do not specify a ``hostPortRange``. The value of the ``hostPortRange`` is set as follows:\n + For containers in a task with the ``awsvpc`` network mode, the ``hostPortRange`` is set to the same value as the ``containerPortRange``. This is a static mapping strategy.\n + For containers in a task with the ``bridge`` network mode, the Amazon ECS agent finds open host " + }, + "HostPort": { + "type": "integer", + "description": "The port number on the container instance to reserve for your container.\n If you specify a ``containerPortRange``, leave this field empty and the value of the ``hostPort`` is set as follows:\n + For containers in a task with the ``awsvpc`` network mode, the ``hostPort`` is set to the same value as the ``containerPort``. This is a static mapping strategy.\n + For containers in a task with the ``bridge`` network mode, the Amazon ECS agent finds open ports on the host and automatically binds them to the container ports. This is a dynamic mapping strategy.\n \n If you use containers in a task with the ``awsvpc`` or ``host`` network mode, the ``hostPort`` can either be left blank or set to the same value as the ``containerPort``.\n If you use containers in a task with the ``bridge`` network mode, you can specify a non-reserved host port for your container port mapping, or you can omit the ``hostPort`` (or set it to ``0``) while specifying a ``containerPort`` and your container automatically" + }, + "Protocol": { + "type": "string", + "description": "The protocol used for the port mapping. Valid values are ``tcp`` and ``udp``. The default is ``tcp``. ``protocol`` is immutable in a Service Connect service. Updating this field requires a service deletion and redeployment." + }, + "AppProtocol": { + "type": "string", + "enum": [ + "http", + "http2", + "grpc" + ], + "description": "The application protocol that's used for the port mapping. This parameter only applies to Service Connect. We recommend that you set this parameter to be consistent with the protocol that your application uses. If you set this parameter, Amazon ECS adds protocol-specific connection handling to the Service Connect proxy. If you set this parameter, Amazon ECS adds protocol-specific telemetry in the Amazon ECS console and CloudWatch.\n If you don't set a value for this parameter, then TCP is used. However, Amazon ECS doesn't add protocol-specific telemetry for TCP.\n ``appProtocol`` is immutable in a Service Connect service. Updating this field requires a service deletion and redeployment.\n Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS se" + } + }, + "additionalProperties": false, + "description": "The ``PortMapping`` property specifies a port mapping. Port mappings allow containers to access ports on the host container instance to send or receive traffic. Port mappings are specified as part of the container definition.\n If you are using containers in a task with the ``awsvpc`` or ``host`` network mode, exposed ports should be specified using ``containerPort``. The ``hostPort`` can be left blank or it must be the same value as the ``containerPort``.\n After a task reaches the ``RUNNING`` status, manual and automatic host and container port assignments are visible in the ``networkBindings`` section of [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html) API responses." + }, + "MountPoint": { + "type": "object", + "properties": { + "ContainerPath": { + "type": "string", + "description": "The path on the container to mount the host volume at." + }, + "ReadOnly": { + "type": "boolean", + "description": "If this value is ``true``, the container has read-only access to the volume. If this value is ``false``, then the container can write to the volume. The default value is ``false``." + }, + "SourceVolume": { + "type": "string", + "description": "The name of the volume to mount. Must be a volume name referenced in the ``name`` parameter of task definition ``volume``." + } + }, + "additionalProperties": false, + "description": "The details for a volume mount point that's used in a container definition." + }, + "ProxyConfiguration": { + "type": "object", + "required": [ + "ContainerName" + ], + "properties": { + "ContainerName": { + "type": "string", + "description": "The name of the container that will serve as the App Mesh proxy." + }, + "ProxyConfigurationProperties": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/KeyValuePair" + }, + "description": "The set of network configuration parameters to provide the Container Network Interface (CNI) plugin, specified as key-value pairs.\n + ``IgnoredUID`` - (Required) The user ID (UID) of the proxy container as defined by the ``user`` parameter in a container definition. This is used to ensure the proxy ignores its own traffic. If ``IgnoredGID`` is specified, this field can be empty.\n + ``IgnoredGID`` - (Required) The group ID (GID) of the proxy container as defined by the ``user`` parameter in a container definition. This is used to ensure the proxy ignores its own traffic. If ``IgnoredUID`` is specified, this field can be empty.\n + ``AppPorts`` - (Required) The list of ports that the application uses. Network traffic to these ports is forwarded to the ``ProxyIngressPort`` and ``ProxyEgressPort``.\n + ``ProxyIngressPort`` - (Required) Specifies the port that incoming traffic to the ``AppPorts`` is directed to.\n + ``ProxyEgressPort`` - (Required) Specifies the port that outgoi" + }, + "Type": { + "type": "string", + "description": "The proxy type. The only supported value is ``APPMESH``." + } + }, + "additionalProperties": false, + "description": "The configuration details for the App Mesh proxy.\n For tasks that use the EC2 launch type, the container instances require at least version 1.26.0 of the container agent and at least version 1.26.0-1 of the ``ecs-init`` package to use a proxy configuration. If your container instances are launched from the Amazon ECS optimized AMI version ``20190301`` or later, then they contain the required versions of the container agent and ``ecs-init``. For more information, see [Amazon ECS-optimized Linux AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)" + }, + "RepositoryCredentials": { + "type": "object", + "properties": { + "CredentialsParameter": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the secret containing the private repository credentials.\n When you use the Amazon ECS API, CLI, or AWS SDK, if the secret exists in the same Region as the task that you're launching then you can use either the full ARN or the name of the secret. When you use the AWS Management Console, you must specify the full ARN of the secret." + } + }, + "additionalProperties": false, + "description": "The repository credentials for private registry authentication." + }, + "ResourceRequirement": { + "type": "object", + "required": [ + "Type", + "Value" + ], + "properties": { + "Type": { + "type": "string", + "description": "The type of resource to assign to a container. The supported values are ``GPU`` or ``InferenceAccelerator``." + }, + "Value": { + "type": "string", + "description": "The value for the specified resource type.\n If the ``GPU`` type is used, the value is the number of physical ``GPUs`` the Amazon ECS container agent reserves for the container. The number of GPUs that's reserved for all containers in a task can't exceed the number of available GPUs on the container instance that the task is launched on.\n If the ``InferenceAccelerator`` type is used, the ``value`` matches the ``deviceName`` for an [InferenceAccelerator](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_InferenceAccelerator.html) specified in a task definition." + } + }, + "additionalProperties": false, + "description": "The type and amount of a resource to assign to a container. The supported resource types are GPUs and Elastic Inference accelerators. For more information, see [Working with GPUs on Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-gpu.html) or [Working with Amazon Elastic Inference on Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-inference.html) in the *Amazon Elastic Container Service Developer Guide*" + }, + "RuntimePlatform": { + "type": "object", + "properties": { + "CpuArchitecture": { + "type": "string", + "description": "The CPU architecture.\n You can run your Linux tasks on an ARM-based platform by setting the value to ``ARM64``. This option is available for tasks that run on Linux Amazon EC2 instance or Linux containers on Fargate." + }, + "OperatingSystemFamily": { + "type": "string", + "description": "The operating system." + } + }, + "additionalProperties": false, + "description": "Information about the platform for the Amazon ECS service or task.\n For more information about ``RuntimePlatform``, see [RuntimePlatform](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#runtime-platform) in the *Amazon Elastic Container Service Developer Guide*." + }, + "Secret": { + "type": "object", + "required": [ + "Name", + "ValueFrom" + ], + "properties": { + "Name": { + "type": "string", + "description": "The name of the secret." + }, + "ValueFrom": { + "type": "string", + "description": "The secret to expose to the container. The supported values are either the full ARN of the ASMlong secret or the full ARN of the parameter in the SSM Parameter Store.\n For information about the require IAMlong permissions, see [Required IAM permissions for Amazon ECS secrets](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-secrets.html#secrets-iam) (for Secrets Manager) or [Required IAM permissions for Amazon ECS secrets](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-parameters.html) (for Systems Manager Parameter store) in the *Amazon Elastic Container Service Developer Guide*.\n If the SSM Parameter Store parameter exists in the same Region as the task you're launching, then you can use either the full ARN or name of the parameter. If the parameter exists in a different Region, then the full ARN must be specified." + } + }, + "additionalProperties": false, + "description": "An object representing the secret to expose to your container. Secrets can be exposed to a container in the following ways:\n + To inject sensitive data into your containers as environment variables, use the ``secrets`` container definition parameter.\n + To reference sensitive information in the log configuration of a container, use the ``secretOptions`` container definition parameter.\n \n For more information, see [Specifying sensitive data](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "TaskDefinitionPlacementConstraint": { + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "description": "The type of constraint. The ``MemberOf`` constraint restricts selection to be from a group of valid candidates." + }, + "Expression": { + "type": "string", + "description": "A cluster query language expression to apply to the constraint. For more information, see [Cluster query language](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html) in the *Amazon Elastic Container Service Developer Guide*." + } + }, + "additionalProperties": false, + "description": "The constraint on task placement in the task definition. For more information, see [Task placement constraints](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html) in the *Amazon Elastic Container Service Developer Guide*.\n Task placement constraints aren't supported for tasks run on FARGATElong." + }, + "Tmpfs": { + "type": "object", + "required": [ + "Size" + ], + "properties": { + "ContainerPath": { + "type": "string", + "description": "The absolute file path where the tmpfs volume is to be mounted." + }, + "MountOptions": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The list of tmpfs volume mount options.\n Valid values: ``\"defaults\" | \"ro\" | \"rw\" | \"suid\" | \"nosuid\" | \"dev\" | \"nodev\" | \"exec\" | \"noexec\" | \"sync\" | \"async\" | \"dirsync\" | \"remount\" | \"mand\" | \"nomand\" | \"atime\" | \"noatime\" | \"diratime\" | \"nodiratime\" | \"bind\" | \"rbind\" | \"unbindable\" | \"runbindable\" | \"private\" | \"rprivate\" | \"shared\" | \"rshared\" | \"slave\" | \"rslave\" | \"relatime\" | \"norelatime\" | \"strictatime\" | \"nostrictatime\" | \"mode\" | \"uid\" | \"gid\" | \"nr_inodes\" | \"nr_blocks\" | \"mpol\"``" + }, + "Size": { + "type": "integer", + "description": "The maximum size (in MiB) of the tmpfs volume." + } + }, + "additionalProperties": false, + "description": "The container path, mount options, and size of the tmpfs mount." + }, + "Ulimit": { + "type": "object", + "required": [ + "HardLimit", + "Name", + "SoftLimit" + ], + "properties": { + "HardLimit": { + "type": "integer", + "description": "The hard limit for the ``ulimit`` type." + }, + "Name": { + "type": "string", + "description": "The ``type`` of the ``ulimit``." + }, + "SoftLimit": { + "type": "integer", + "description": "The soft limit for the ``ulimit`` type." + } + }, + "additionalProperties": false, + "description": "The ``ulimit`` settings to pass to the container.\n Amazon ECS tasks hosted on FARGATElong use the default resource limit values set by the operating system with the exception of the ``nofile`` resource limit parameter which FARGATElong overrides. The ``nofile`` resource limit sets a restriction on the number of open files that a container can use. The default ``nofile`` soft limit is ``1024`` and the default hard limit is ``65535``.\n You can specify the ``ulimit`` settings for a container in a task definition." + }, + "Volume": { + "type": "object", + "properties": { + "ConfiguredAtLaunch": { + "type": "boolean", + "description": "Indicates whether the volume should be configured at launch time. This is used to create Amazon EBS volumes for standalone tasks or tasks created as part of a service. Each task definition revision may only have one volume configured at launch in the volume configuration.\n To configure a volume at launch time, use this task definition revision and specify a ``volumeConfigurations`` object when calling the ``CreateService``, ``UpdateService``, ``RunTask`` or ``StartTask`` APIs." + }, + "DockerVolumeConfiguration": { + "$ref": "#/definitions/DockerVolumeConfiguration", + "description": "This parameter is specified when you use Docker volumes.\n Windows containers only support the use of the ``local`` driver. To use bind mounts, specify the ``host`` parameter instead.\n Docker volumes aren't supported by tasks run on FARGATElong." + }, + "EFSVolumeConfiguration": { + "$ref": "#/definitions/EFSVolumeConfiguration", + "description": "This parameter is specified when you use an Amazon Elastic File System file system for task storage." + }, + "Host": { + "$ref": "#/definitions/HostVolumeProperties", + "description": "This parameter is specified when you use bind mount host volumes. The contents of the ``host`` parameter determine whether your bind mount host volume persists on the host container instance and where it's stored. If the ``host`` parameter is empty, then the Docker daemon assigns a host path for your data volume. However, the data isn't guaranteed to persist after the containers that are associated with it stop running.\n Windows containers can mount whole directories on the same drive as ``$env:ProgramData``. Windows containers can't mount directories on a different drive, and mount point can't be across drives. For example, you can mount ``C:\\my\\path:C:\\my\\path`` and ``D:\\:D:\\``, but not ``D:\\my\\path:C:\\my\\path`` or ``D:\\:C:\\my\\path``." + }, + "Name": { + "type": "string", + "description": "The name of the volume. Up to 255 letters (uppercase and lowercase), numbers, underscores, and hyphens are allowed.\n When using a volume configured at launch, the ``name`` is required and must also be specified as the volume name in the ``ServiceVolumeConfiguration`` or ``TaskVolumeConfiguration`` parameter when creating your service or standalone task.\n For all other types of volumes, this name is referenced in the ``sourceVolume`` parameter of the ``mountPoints`` object in the container definition.\n When a volume is using the ``efsVolumeConfiguration``, the name is required." + } + }, + "additionalProperties": false, + "description": "The data volume configuration for tasks launched using this task definition. Specifying a volume configuration in a task definition is optional. The volume configuration may contain multiple volumes but only one volume configured at launch is supported. Each volume defined in the volume configuration may only specify a ``name`` and one of either ``configuredAtLaunch``, ``dockerVolumeConfiguration``, ``efsVolumeConfiguration``, ``fsxWindowsFileServerVolumeConfiguration``, or ``host``. If an empty volume configuration is specified, by default Amazon ECS uses a host volume. For more information, see [Using data volumes in tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html)." + }, + "VolumeFrom": { + "type": "object", + "properties": { + "ReadOnly": { + "type": "boolean", + "description": "If this value is ``true``, the container has read-only access to the volume. If this value is ``false``, then the container can write to the volume. The default value is ``false``." + }, + "SourceContainer": { + "type": "string", + "description": "The name of another container within the same task definition to mount volumes from." + } + }, + "additionalProperties": false, + "description": "Details on a data volume from another container in the same task definition." + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "One part of a key-value pair that make up a tag. A ``key`` is a general label that acts like a category for more specific tag values." + }, + "Value": { + "type": "string", + "description": "The optional part of a key-value pair that make up a tag. A ``value`` acts as a descriptor within a tag category (key)." + } + }, + "additionalProperties": false, + "description": "The metadata that you apply to a resource to help you categorize and organize them. Each tag consists of a key and an optional value. You define them.\n The following basic restrictions apply to tags:\n + Maximum number of tags per resource - 50\n + For each resource, each tag key must be unique, and each tag key can have only one value.\n + Maximum key length - 128 Unicode characters in UTF-8\n + Maximum value length - 256 Unicode characters in UTF-8\n + If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.\n + Tag keys and values are case-sensitive.\n + Do not use ``aws:``, ``AWS:``, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for AWS use. You cannot edit or delete tag keys or values with this prefix" + } + }, + "additionalProperties": false, + "properties": { + "TaskDefinitionArn": { + "description": "", + "type": "string" + }, + "Family": { + "type": "string", + "description": "The name of a family that this task definition is registered to. Up to 255 letters (uppercase and lowercase), numbers, hyphens, and underscores are allowed.\n A family groups multiple versions of a task definition. Amazon ECS gives the first task definition that you registered to a family a revision number of 1. Amazon ECS gives sequential revision numbers to each task definition that you add.\n To use revision numbers when you update a task definition, specify this property. If you don't specify a value, CFNlong generates a new task definition each time that you update it." + }, + "ContainerDefinitions": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ContainerDefinition" + }, + "description": "A list of container definitions in JSON format that describe the different containers that make up your task. For more information about container definition parameters and defaults, see [Amazon ECS Task Definitions](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "Cpu": { + "type": "string", + "description": "The number of ``cpu`` units used by the task. If you use the EC2 launch type, this field is optional. Any value can be used. If you use the Fargate launch type, this field is required. You must use one of the following values. The value that you choose determines your range of valid values for the ``memory`` parameter.\n The CPU units cannot be less than 1 vCPU when you use Windows containers on Fargate.\n + 256 (.25 vCPU) - Available ``memory`` values: 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB)\n + 512 (.5 vCPU) - Available ``memory`` values: 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB)\n + 1024 (1 vCPU) - Available ``memory`` values: 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)\n + 2048 (2 vCPU) - Available ``memory`` values: 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB)\n + 4096 (4 vCPU) - Available ``memory`` values: 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB)\n + 8192 (8 vCPU) - Available ``memory`` va" + }, + "ExecutionRoleArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the task execution role that grants the Amazon ECS container agent permission to make AWS API calls on your behalf. The task execution IAM role is required depending on the requirements of your task. For more information, see [Amazon ECS task execution IAM role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "EphemeralStorage": { + "$ref": "#/definitions/EphemeralStorage", + "description": "The ephemeral storage settings to use for tasks run with the task definition." + }, + "InferenceAccelerators": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InferenceAccelerator" + }, + "description": "The Elastic Inference accelerators to use for the containers in the task." + }, + "Memory": { + "type": "string", + "description": "The amount (in MiB) of memory used by the task.\n If your tasks runs on Amazon EC2 instances, you must specify either a task-level memory value or a container-level memory value. This field is optional and any value can be used. If a task-level memory value is specified, the container-level memory value is optional. For more information regarding container-level memory and memory reservation, see [ContainerDefinition](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html).\n If your tasks runs on FARGATElong, this field is required. You must use one of the following values. The value you choose determines your range of valid values for the ``cpu`` parameter.\n + 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB) - Available ``cpu`` values: 256 (.25 vCPU)\n + 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB) - Available ``cpu`` values: 512 (.5 vCPU)\n + 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB) - Available ``cpu`` va" + }, + "NetworkMode": { + "type": "string", + "description": "The Docker networking mode to use for the containers in the task. The valid values are ``none``, ``bridge``, ``awsvpc``, and ``host``. If no network mode is specified, the default is ``bridge``.\n For Amazon ECS tasks on Fargate, the ``awsvpc`` network mode is required. For Amazon ECS tasks on Amazon EC2 Linux instances, any network mode can be used. For Amazon ECS tasks on Amazon EC2 Windows instances, ```` or ``awsvpc`` can be used. If the network mode is set to ``none``, you cannot specify port mappings in your container definitions, and the tasks containers do not have external connectivity. The ``host`` and ``awsvpc`` network modes offer the highest networking performance for containers because they use the EC2 network stack instead of the virtualized network stack provided by the ``bridge`` mode.\n With the ``host`` and ``awsvpc`` network modes, exposed container ports are mapped directly to the corresponding host port (for the ``host`` network mode) or the attached elasti" + }, + "PlacementConstraints": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TaskDefinitionPlacementConstraint" + }, + "description": "An array of placement constraint objects to use for tasks.\n This parameter isn't supported for tasks run on FARGATElong." + }, + "ProxyConfiguration": { + "$ref": "#/definitions/ProxyConfiguration", + "description": "The configuration details for the App Mesh proxy.\n Your Amazon ECS container instances require at least version 1.26.0 of the container agent and at least version 1.26.0-1 of the ``ecs-init`` package to use a proxy configuration. If your container instances are launched from the Amazon ECS optimized AMI version ``20190301`` or later, they contain the required versions of the container agent and ``ecs-init``. For more information, see [Amazon ECS-optimized Linux AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "RequiresCompatibilities": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "The task launch types the task definition was validated against. The valid values are ``EC2``, ``FARGATE``, and ``EXTERNAL``. For more information, see [Amazon ECS launch types](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "TaskRoleArn": { + "type": "string", + "description": "The short name or full Amazon Resource Name (ARN) of the IAMlong role that grants containers in the task permission to call AWS APIs on your behalf. For more information, see [Amazon ECS Task Role](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) in the *Amazon Elastic Container Service Developer Guide*.\n IAM roles for tasks on Windows require that the ``-EnableTaskIAMRole`` option is set when you launch the Amazon ECS-optimized Windows AMI. Your containers must also run some configuration code to use the feature. For more information, see [Windows IAM roles for tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/windows_task_IAM_roles.html) in the *Amazon Elastic Container Service Developer Guide*." + }, + "Volumes": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Volume" + }, + "description": "The list of data volume definitions for the task. For more information, see [Using data volumes in tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html) in the *Amazon Elastic Container Service Developer Guide*.\n The ``host`` and ``sourcePath`` parameters aren't supported for tasks run on FARGATElong." + }, + "PidMode": { + "type": "string", + "description": "The process namespace to use for the containers in the task. The valid values are ``host`` or ``task``. On Fargate for Linux containers, the only valid value is ``task``. For example, monitoring sidecars might need ``pidMode`` to access information about other containers running in the same task.\n If ``host`` is specified, all containers within the tasks that specified the ``host`` PID mode on the same container instance share the same process namespace with the host Amazon EC2 instance.\n If ``task`` is specified, all containers within the specified task share the same process namespace.\n If no value is specified, the default is a private namespace for each container. For more information, see [PID settings](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#pid-settings---pid) in the *Docker run reference*.\n If the ``host`` PID mode is used, there's a heightened risk of undesired process namespace exposure. For more information, see [Docker security](https://doc" + }, + "RuntimePlatform": { + "$ref": "#/definitions/RuntimePlatform", + "description": "The operating system that your tasks definitions run on. A platform family is specified only for tasks using the Fargate launch type. \n When you specify a task definition in a service, this value must match the ``runtimePlatform`` value of the service." + }, + "IpcMode": { + "type": "string", + "description": "The IPC resource namespace to use for the containers in the task. The valid values are ``host``, ``task``, or ``none``. If ``host`` is specified, then all containers within the tasks that specified the ``host`` IPC mode on the same container instance share the same IPC resources with the host Amazon EC2 instance. If ``task`` is specified, all containers within the specified task share the same IPC resources. If ``none`` is specified, then IPC resources within the containers of a task are private and not shared with other containers in a task or on the container instance. If no value is specified, then the IPC resource namespace sharing depends on the Docker daemon setting on the container instance. For more information, see [IPC settings](https://docs.aws.amazon.com/https://docs.docker.com/engine/reference/run/#ipc-settings---ipc) in the *Docker run reference*.\n If the ``host`` IPC mode is used, be aware that there is a heightened risk of undesired IPC namespace expose. For more inform" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "The metadata that you apply to the task definition to help you categorize and organize them. Each tag consists of a key and an optional value. You define both of them.\n The following basic restrictions apply to tags:\n + Maximum number of tags per resource - 50\n + For each resource, each tag key must be unique, and each tag key can have only one value.\n + Maximum key length - 128 Unicode characters in UTF-8\n + Maximum value length - 256 Unicode characters in UTF-8\n + If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.\n + Tag keys and values are case-sensitive.\n + Do not use ``aws:``, ``AWS:``, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for AWS use. You cannot edit or delete tag keys or values" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/Family", + "/properties/ContainerDefinitions", + "/properties/Cpu", + "/properties/ExecutionRoleArn", + "/properties/InferenceAccelerators", + "/properties/Memory", + "/properties/NetworkMode", + "/properties/PlacementConstraints", + "/properties/ProxyConfiguration", + "/properties/RequiresCompatibilities", + "/properties/RuntimePlatform", + "/properties/TaskRoleArn", + "/properties/Volumes", + "/properties/PidMode", + "/properties/IpcMode", + "/properties/EphemeralStorage" + ], + "readOnlyProperties": [ + "/properties/TaskDefinitionArn" + ], + "primaryIdentifier": [ + "/properties/TaskDefinitionArn" + ], + "propertyTransform": { + "/properties/TaskRoleArn": "TaskRoleArn $OR $split(TaskRoleArn, \"role/\")[-1]" + }, + "handlers": { + "create": { + "permissions": [ + "ecs:RegisterTaskDefinition", + "ecs:DescribeTaskDefinition", + "ecs:TagResource", + "iam:GetRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "ecs:DescribeTaskDefinition" + ] + }, + "update": { + "permissions": [ + "ecs:TagResource", + "ecs:UntagResource", + "ecs:ListTagsForResource", + "ecs:DescribeTaskDefinition", + "iam:GetRole", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "ecs:DeregisterTaskDefinition", + "ecs:DescribeTaskDefinition", + "iam:GetRole", + "iam:PassRole" + ] + }, + "list": { + "permissions": [ + "ecs:ListTaskDefinitions", + "ecs:DescribeTaskDefinition" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ecs/taskset.json b/internal/aws/cfn/schemas/aws/ecs/taskset.json new file mode 100644 index 00000000..016ad582 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ecs/taskset.json @@ -0,0 +1,242 @@ +{ + "typeName": "AWS::ECS::TaskSet", + "description": "Create a task set in the specified cluster and service. This is used when a service uses the EXTERNAL deployment controller type. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.htmlin the Amazon Elastic Container Service Developer Guide.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecs.git", + "definitions": { + "LoadBalancer": { + "description": "A load balancer object representing the load balancer to use with the task set. The supported load balancer types are either an Application Load Balancer or a Network Load Balancer. ", + "type": "object", + "properties": { + "ContainerName": { + "description": "The name of the container (as it appears in a container definition) to associate with the load balancer.", + "type": "string" + }, + "ContainerPort": { + "description": "The port on the container to associate with the load balancer. This port must correspond to a containerPort in the task definition the tasks in the service are using. For tasks that use the EC2 launch type, the container instance they are launched on must allow ingress traffic on the hostPort of the port mapping.", + "type": "integer" + }, + "TargetGroupArn": { + "description": "The full Amazon Resource Name (ARN) of the Elastic Load Balancing target group or groups associated with a service or task set. A target group ARN is only specified when using an Application Load Balancer or Network Load Balancer. If you are using a Classic Load Balancer this should be omitted. For services using the ECS deployment controller, you can specify one or multiple target groups. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html in the Amazon Elastic Container Service Developer Guide. For services using the CODE_DEPLOY deployment controller, you are required to define two target groups for the load balancer. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html in the Amazon Elastic Container Service Developer Guide. If your service's task definition uses the awsvpc network mode (which is required for the Fargate launch type), you must choose ip as the target type, not instance, when creating your target groups because tasks that use the awsvpc network mode are associated with an elastic network interface, not an Amazon EC2 instance.", + "type": "string" + } + }, + "additionalProperties": false + }, + "NetworkConfiguration": { + "description": "An object representing the network configuration for a task or service.", + "type": "object", + "properties": { + "AwsVpcConfiguration": { + "$ref": "#/definitions/AwsVpcConfiguration" + } + }, + "additionalProperties": false + }, + "AwsVpcConfiguration": { + "description": "The VPC subnets and security groups associated with a task. All specified subnets and security groups must be from the same VPC.", + "type": "object", + "properties": { + "AssignPublicIp": { + "description": "Whether the task's elastic network interface receives a public IP address. The default value is DISABLED.", + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "SecurityGroups": { + "description": "The security groups associated with the task or service. If you do not specify a security group, the default security group for the VPC is used. There is a limit of 5 security groups that can be specified per AwsVpcConfiguration.", + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 5 + }, + "Subnets": { + "description": "The subnets associated with the task or service. There is a limit of 16 subnets that can be specified per AwsVpcConfiguration.", + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 16 + } + }, + "required": [ + "Subnets" + ], + "additionalProperties": false + }, + "Scale": { + "type": "object", + "properties": { + "Unit": { + "description": "The unit of measure for the scale value.", + "type": "string", + "enum": [ + "PERCENT" + ] + }, + "Value": { + "description": "The value, specified as a percent total of a service's desiredCount, to scale the task set. Accepted values are numbers between 0 and 100.", + "type": "number", + "minimum": 0, + "maximum": 100 + } + }, + "additionalProperties": false + }, + "ServiceRegistry": { + "type": "object", + "properties": { + "ContainerName": { + "description": "The container name value, already specified in the task definition, to be used for your service discovery service. If the task definition that your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition that your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.", + "type": "string" + }, + "ContainerPort": { + "description": "The port value, already specified in the task definition, to be used for your service discovery service. If the task definition your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.", + "type": "integer" + }, + "Port": { + "description": "The port value used if your service discovery service specified an SRV record. This field may be used if both the awsvpc network mode and SRV records are used.", + "type": "integer" + }, + "RegistryArn": { + "description": "The Amazon Resource Name (ARN) of the service registry. The currently supported service registry is AWS Cloud Map. For more information, see https://docs.aws.amazon.com/cloud-map/latest/api/API_CreateService.html", + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Cluster": { + "description": "The short name or full Amazon Resource Name (ARN) of the cluster that hosts the service to create the task set in.", + "type": "string" + }, + "ExternalId": { + "description": "An optional non-unique tag that identifies this task set in external systems. If the task set is associated with a service discovery registry, the tasks in this task set will have the ECS_TASK_SET_EXTERNAL_ID AWS Cloud Map attribute set to the provided value. ", + "type": "string" + }, + "Id": { + "description": "The ID of the task set.", + "type": "string" + }, + "LaunchType": { + "description": "The launch type that new tasks in the task set will use. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html in the Amazon Elastic Container Service Developer Guide. ", + "type": "string", + "enum": [ + "EC2", + "FARGATE" + ] + }, + "LoadBalancers": { + "type": "array", + "items": { + "$ref": "#/definitions/LoadBalancer" + } + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + }, + "PlatformVersion": { + "description": "The platform version that the tasks in the task set should use. A platform version is specified only for tasks using the Fargate launch type. If one isn't specified, the LATEST platform version is used by default.", + "type": "string" + }, + "Scale": { + "description": "A floating-point percentage of the desired number of tasks to place and keep running in the task set.", + "$ref": "#/definitions/Scale" + }, + "Service": { + "description": "The short name or full Amazon Resource Name (ARN) of the service to create the task set in.", + "type": "string" + }, + "ServiceRegistries": { + "description": "The details of the service discovery registries to assign to this task set. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html.", + "type": "array", + "items": { + "$ref": "#/definitions/ServiceRegistry" + } + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TaskDefinition": { + "description": "The short name or full Amazon Resource Name (ARN) of the task definition for the tasks in the task set to use.", + "type": "string" + } + }, + "required": [ + "Cluster", + "Service", + "TaskDefinition" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/Cluster", + "/properties/ExternalId", + "/properties/LaunchType", + "/properties/LoadBalancers", + "/properties/NetworkConfiguration", + "/properties/PlatformVersion", + "/properties/Service", + "/properties/ServiceRegistries", + "/properties/TaskDefinition" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Cluster", + "/properties/Service", + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ecs:CreateTaskSet", + "ecs:DescribeTaskSets", + "ecs:TagResource" + ] + }, + "read": { + "permissions": [ + "ecs:DescribeTaskSets" + ] + }, + "update": { + "permissions": [ + "ecs:DescribeTaskSets", + "ecs:TagResource", + "ecs:UntagResource", + "ecs:UpdateTaskSet" + ] + }, + "delete": { + "permissions": [ + "ecs:DeleteTaskSet", + "ecs:DescribeTaskSets" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/efs/accesspoint.json b/internal/aws/cfn/schemas/aws/efs/accesspoint.json new file mode 100644 index 00000000..2dd7965e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/efs/accesspoint.json @@ -0,0 +1,195 @@ +{ + "typeName": "AWS::EFS::AccessPoint", + "description": "The ``AWS::EFS::AccessPoint`` resource creates an EFS access point. An access point is an application-specific view into an EFS file system that applies an operating system user and group, and a file system path, to any file system request made through the access point. The operating system user and group override any identity information provided by the NFS client. The file system path is exposed as the access point's root directory. Applications using the access point can only access data in its own directory and below. To learn more, see [Mounting a file system using EFS access points](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html).\n This operation requires permissions for the ``elasticfilesystem:CreateAccessPoint`` action.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AccessPointTag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "description": "The tag key (String). The key can't start with ``aws:``." + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "description": "The value of the tag key." + } + }, + "additionalProperties": false, + "description": "A tag is a key-value pair attached to a file system. Allowed characters in the ``Key`` and ``Value`` properties are letters, white space, and numbers that can be represented in UTF-8, and the following characters:``+ - = . _ : /``" + }, + "CreationInfo": { + "type": "object", + "properties": { + "OwnerUid": { + "type": "string", + "description": "Specifies the POSIX user ID to apply to the ``RootDirectory``. Accepts values from 0 to 2^32 (4294967295)." + }, + "OwnerGid": { + "type": "string", + "description": "Specifies the POSIX group ID to apply to the ``RootDirectory``. Accepts values from 0 to 2^32 (4294967295)." + }, + "Permissions": { + "type": "string", + "description": "Specifies the POSIX permissions to apply to the ``RootDirectory``, in the format of an octal number representing the file's mode bits.", + "pattern": "^[0-7]{3,4}$" + } + }, + "required": [ + "OwnerUid", + "OwnerGid", + "Permissions" + ], + "additionalProperties": false, + "description": "Required if the ``RootDirectory`` > ``Path`` specified does not exist. Specifies the POSIX IDs and permissions to apply to the access point's ``RootDirectory`` > ``Path``. If the access point root directory does not exist, EFS creates it with these settings when a client connects to the access point. When specifying ``CreationInfo``, you must include values for all properties. \n Amazon EFS creates a root directory only if you have provided the CreationInfo: OwnUid, OwnGID, and permissions for the directory. If you do not provide this information, Amazon EFS does not create the root directory. If the root directory does not exist, attempts to mount using the access point will fail.\n If you do not provide ``CreationInfo`` and the specified ``RootDirectory`` does not exist, attempts to mount the file system using the access point will fail." + }, + "RootDirectory": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Specifies the path on the EFS file system to expose as the root directory to NFS clients using the access point to access the EFS file system. A path can have up to four subdirectories. If the specified path does not exist, you are required to provide the ``CreationInfo``.", + "minLength": 1, + "maxLength": 100 + }, + "CreationInfo": { + "description": "(Optional) Specifies the POSIX IDs and permissions to apply to the access point's ``RootDirectory``. If the ``RootDirectory`` > ``Path`` specified does not exist, EFS creates the root directory using the ``CreationInfo`` settings when a client connects to an access point. When specifying the ``CreationInfo``, you must provide values for all properties. \n If you do not provide ``CreationInfo`` and the specified ``RootDirectory`` > ``Path`` does not exist, attempts to mount the file system using the access point will fail.", + "$ref": "#/definitions/CreationInfo" + } + }, + "additionalProperties": false, + "description": "Specifies the directory on the Amazon EFS file system that the access point provides access to. The access point exposes the specified file system path as the root directory of your file system to applications using the access point. NFS clients using the access point can only access data in the access point's ``RootDirectory`` and its subdirectories." + }, + "PosixUser": { + "type": "object", + "properties": { + "Uid": { + "type": "string", + "description": "The POSIX user ID used for all file system operations using this access point." + }, + "Gid": { + "type": "string", + "description": "The POSIX group ID used for all file system operations using this access point." + }, + "SecondaryGids": { + "type": "array", + "description": "Secondary POSIX group IDs used for all file system operations using this access point.", + "items": { + "type": "string" + } + } + }, + "required": [ + "Uid", + "Gid" + ], + "additionalProperties": false, + "description": "The full POSIX identity, including the user ID, group ID, and any secondary group IDs, on the access point that is used for all file system operations performed by NFS clients using the access point." + } + }, + "properties": { + "AccessPointId": { + "type": "string", + "description": "" + }, + "Arn": { + "type": "string", + "description": "" + }, + "ClientToken": { + "description": "The opaque string specified in the request to ensure idempotent creation.", + "type": "string" + }, + "AccessPointTags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AccessPointTag" + }, + "description": "An array of key-value pairs to apply to this resource.\n For more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)." + }, + "FileSystemId": { + "description": "The ID of the EFS file system that the access point applies to. Accepts only the ID format for input when specifying a file system, for example ``fs-0123456789abcedf2``.", + "type": "string" + }, + "PosixUser": { + "description": "The full POSIX identity, including the user ID, group ID, and secondary group IDs on the access point that is used for all file operations by NFS clients using the access point.", + "$ref": "#/definitions/PosixUser" + }, + "RootDirectory": { + "description": "The directory on the EFS file system that the access point exposes as the root directory to NFS clients using the access point.", + "$ref": "#/definitions/RootDirectory" + } + }, + "additionalProperties": false, + "required": [ + "FileSystemId" + ], + "primaryIdentifier": [ + "/properties/AccessPointId" + ], + "createOnlyProperties": [ + "/properties/FileSystemId", + "/properties/ClientToken", + "/properties/CreationInfo", + "/properties/CreationInfo/OwnerUid", + "/properties/CreationInfo/OwnerGid", + "/properties/CreationInfo/Permissions", + "/properties/PosixUser", + "/properties/PosixUser/Uid", + "/properties/PosixUser/Gid", + "/properties/PosixUser/SecondaryGids", + "/properties/RootDirectory", + "/properties/RootDirectory/Path", + "/properties/RootDirectory/CreationInfo" + ], + "readOnlyProperties": [ + "/properties/AccessPointId", + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/AccessPointTags" + }, + "handlers": { + "create": { + "permissions": [ + "elasticfilesystem:CreateAccessPoint", + "elasticfilesystem:TagResource", + "elasticfilesystem:DescribeAccessPoints" + ] + }, + "read": { + "permissions": [ + "elasticfilesystem:DescribeAccessPoints" + ] + }, + "delete": { + "permissions": [ + "elasticfilesystem:DeleteAccessPoint", + "elasticfilesystem:DescribeAccessPoints" + ] + }, + "list": { + "permissions": [ + "elasticfilesystem:DescribeAccessPoints" + ] + }, + "update": { + "permissions": [ + "elasticfilesystem:DescribeAccessPoints", + "elasticfilesystem:ListTagsForResource", + "elasticfilesystem:TagResource", + "elasticfilesystem:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/efs/filesystem.json b/internal/aws/cfn/schemas/aws/efs/filesystem.json new file mode 100644 index 00000000..35195d52 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/efs/filesystem.json @@ -0,0 +1,285 @@ +{ + "typeName": "AWS::EFS::FileSystem", + "description": "The ``AWS::EFS::FileSystem`` resource creates a new, empty file system in EFSlong (EFS). You must create a mount target ([AWS::EFS::MountTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html)) to mount your EFS file system on an EC2 or other AWS cloud compute resource.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "type": "string" + }, + "ElasticFileSystemTag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The tag key (String). The key can't start with ``aws:``." + }, + "Value": { + "type": "string", + "description": "The value of the tag key." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "A tag is a key-value pair attached to a file system. Allowed characters in the ``Key`` and ``Value`` properties are letters, white space, and numbers that can be represented in UTF-8, and the following characters:``+ - = . _ : /``" + }, + "LifecyclePolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "TransitionToIA": { + "type": "string", + "description": "The number of days after files were last accessed in primary storage (the Standard storage class) at which to move them to Infrequent Access (IA) storage. Metadata operations such as listing the contents of a directory don't count as file access events." + }, + "TransitionToPrimaryStorageClass": { + "type": "string", + "description": "Whether to move files back to primary (Standard) storage after they are accessed in IA or Archive storage. Metadata operations such as listing the contents of a directory don't count as file access events." + }, + "TransitionToArchive": { + "type": "string", + "description": "The number of days after files were last accessed in primary storage (the Standard storage class) at which to move them to Archive storage. Metadata operations such as listing the contents of a directory don't count as file access events." + } + }, + "description": "Describes a policy used by Lifecycle management that specifies when to transition files into and out of the EFS storage classes. For more information, see [Managing file system storage](https://docs.aws.amazon.com/efs/latest/ug/lifecycle-management-efs.html).\n + Each ``LifecyclePolicy`` object can have only a single transition. This means that in a request body, ``LifecyclePolicies`` must be structured as an array of ``LifecyclePolicy`` objects, one object for each transition, ``TransitionToIA``, ``TransitionToArchive``, ``TransitionToPrimaryStorageClass``.\n + See the AWS::EFS::FileSystem examples for the correct ``LifecyclePolicy`` structure. Do not use the syntax shown on this page." + }, + "BackupPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string", + "description": "Set the backup policy status for the file system.\n + *ENABLED* - Turns automatic backups on for the file system. \n + *DISABLED* - Turns automatic backups off for the file system." + } + }, + "required": [ + "Status" + ], + "description": "The backup policy turns automatic backups for the file system on or off." + }, + "FileSystemProtection": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReplicationOverwriteProtection": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ], + "description": "The status of the file system's replication overwrite protection.\n + ``ENABLED`` ? The file system cannot be used as the destination file system in a replication configuration. The file system is writeable. Replication overwrite protection is ``ENABLED`` by default. \n + ``DISABLED`` ? The file system can be used as the destination file system in a replication configuration. The file system is read-only and can only be modified by EFS replication.\n + ``REPLICATING`` ? The file system is being used as the destination file system in a replication configuration. The file system is read-only and is only modified only by EFS replication.\n \n If the replication configuration is deleted, the file system's replication overwrite protection is re-enabled, the file system becomes writeable." + } + }, + "description": "Describes the protection on the file system." + }, + "ReplicationDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileSystemId": { + "type": "string", + "description": "The ID of the destination Amazon EFS file system." + }, + "Region": { + "type": "string", + "description": "The AWS-Region in which the destination file system is located.\n For One Zone file systems, the replication configuration must specify the AWS-Region in which the destination file system is located." + }, + "AvailabilityZoneName": { + "type": "string", + "description": "The AWS For One Zone file systems, the replication configuration must specify the Availability Zone in which the destination file system is located. \n Use the format ``us-east-1a`` to specify the Availability Zone. For more information about One Zone file systems, see [EFS file system types](https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html) in the *Amazon EFS User Guide*.\n One Zone file system type is not available in all Availability Zones in AWS-Regions where Amazon EFS is available." + }, + "KmsKeyId": { + "type": "string", + "description": "The ID of an kms-key-long used to protect the encrypted file system." + } + }, + "description": "Describes the destination file system in the replication configuration." + }, + "ReplicationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destinations": { + "type": "array", + "uniqueItems": true, + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/definitions/ReplicationDestination" + }, + "description": "An array of destination objects. Only one destination object is supported." + } + }, + "description": "Describes the replication configuration for a specific file system." + } + }, + "properties": { + "FileSystemId": { + "type": "string", + "description": "" + }, + "Arn": { + "$ref": "#/definitions/Arn", + "description": "" + }, + "Encrypted": { + "type": "boolean", + "description": "A Boolean value that, if true, creates an encrypted file system. When creating an encrypted file system, you have the option of specifying a KmsKeyId for an existing kms-key-long. If you don't specify a kms-key, then the default kms-key for EFS, ``/aws/elasticfilesystem``, is used to protect the encrypted file system." + }, + "FileSystemTags": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ElasticFileSystemTag" + }, + "description": "Use to create one or more tags associated with the file system. Each tag is a user-defined key-value pair. Name your file system on creation by including a ``\"Key\":\"Name\",\"Value\":\"{value}\"`` key-value pair. Each key must be unique. For more information, see [Tagging resources](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html) in the *General Reference Guide*." + }, + "KmsKeyId": { + "type": "string", + "description": "The ID of the kms-key-long to be used to protect the encrypted file system. This parameter is only required if you want to use a nondefault kms-key. If this parameter is not specified, the default kms-key for EFS is used. This ID can be in one of the following formats:\n + Key ID - A unique identifier of the key, for example ``1234abcd-12ab-34cd-56ef-1234567890ab``.\n + ARN - An Amazon Resource Name (ARN) for the key, for example ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab``.\n + Key alias - A previously created display name for a key, for example ``alias/projectKey1``.\n + Key alias ARN - An ARN for a key alias, for example ``arn:aws:kms:us-west-2:444455556666:alias/projectKey1``.\n \n If ``KmsKeyId`` is specified, the ``Encrypted`` parameter must be set to true." + }, + "LifecyclePolicies": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LifecyclePolicy" + }, + "description": "An array of ``LifecyclePolicy`` objects that define the file system's ``LifecycleConfiguration`` object. A ``LifecycleConfiguration`` object informs Lifecycle management of the following:\n + When to move files in the file system from primary storage to IA storage.\n + When to move files in the file system from primary storage or IA storage to Archive storage.\n + When to move files that are in IA or Archive storage to primary storage.\n \n EFS requires that each ``LifecyclePolicy`` object have only a single transition. This means that in a request body, ``LifecyclePolicies`` needs to be structured as an array of ``LifecyclePolicy`` objects, one object for each transition, ``TransitionToIA``, ``TransitionToArchive`` ``TransitionToPrimaryStorageClass``. See the example requests in the following section for more information." + }, + "FileSystemProtection": { + "$ref": "#/definitions/FileSystemProtection", + "description": "Describes the protection on the file system." + }, + "PerformanceMode": { + "type": "string", + "description": "The Performance mode of the file system. We recommend ``generalPurpose`` performance mode for all file systems. File systems using the ``maxIO`` performance mode can scale to higher levels of aggregate throughput and operations per second with a tradeoff of slightly higher latencies for most file operations. The performance mode can't be changed after the file system has been created. The ``maxIO`` mode is not supported on One Zone file systems.\n Due to the higher per-operation latencies with Max I/O, we recommend using General Purpose performance mode for all file systems.\n Default is ``generalPurpose``." + }, + "ProvisionedThroughputInMibps": { + "type": "number", + "description": "The throughput, measured in mebibytes per second (MiBps), that you want to provision for a file system that you're creating. Required if ``ThroughputMode`` is set to ``provisioned``. Valid values are 1-3414 MiBps, with the upper limit depending on Region. To increase this limit, contact SUP. For more information, see [Amazon EFS quotas that you can increase](https://docs.aws.amazon.com/efs/latest/ug/limits.html#soft-limits) in the *Amazon EFS User Guide*." + }, + "ThroughputMode": { + "type": "string", + "description": "Specifies the throughput mode for the file system. The mode can be ``bursting``, ``provisioned``, or ``elastic``. If you set ``ThroughputMode`` to ``provisioned``, you must also set a value for ``ProvisionedThroughputInMibps``. After you create the file system, you can decrease your file system's Provisioned throughput or change between the throughput modes, with certain time restrictions. For more information, see [Specifying throughput with provisioned mode](https://docs.aws.amazon.com/efs/latest/ug/performance.html#provisioned-throughput) in the *Amazon EFS User Guide*. \n Default is ``bursting``." + }, + "FileSystemPolicy": { + "type": "object", + "description": "The ``FileSystemPolicy`` for the EFS file system. A file system policy is an IAM resource policy used to control NFS access to an EFS file system. For more information, see [Using to control NFS access to Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/iam-access-control-nfs-efs.html) in the *Amazon EFS User Guide*." + }, + "BypassPolicyLockoutSafetyCheck": { + "description": "(Optional) A boolean that specifies whether or not to bypass the ``FileSystemPolicy`` lockout safety check. The lockout safety check determines whether the policy in the request will lock out, or prevent, the IAM principal that is making the request from making future ``PutFileSystemPolicy`` requests on this file system. Set ``BypassPolicyLockoutSafetyCheck`` to ``True`` only when you intend to prevent the IAM principal that is making the request from making subsequent ``PutFileSystemPolicy`` requests on this file system. The default value is ``False``.", + "type": "boolean" + }, + "BackupPolicy": { + "$ref": "#/definitions/BackupPolicy", + "description": "Use the ``BackupPolicy`` to turn automatic backups on or off for the file system." + }, + "AvailabilityZoneName": { + "type": "string", + "description": "For One Zone file systems, specify the AWS Availability Zone in which to create the file system. Use the format ``us-east-1a`` to specify the Availability Zone. For more information about One Zone file systems, see [EFS file system types](https://docs.aws.amazon.com/efs/latest/ug/availability-durability.html#file-system-type) in the *Amazon EFS User Guide*.\n One Zone file systems are not available in all Availability Zones in AWS-Regions where Amazon EFS is available." + }, + "ReplicationConfiguration": { + "$ref": "#/definitions/ReplicationConfiguration", + "description": "Describes the replication configuration for a specific file system." + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/FileSystemId" + ], + "primaryIdentifier": [ + "/properties/FileSystemId" + ], + "writeOnlyProperties": [ + "/properties/BypassPolicyLockoutSafetyCheck", + "/properties/ReplicationConfiguration/Destinations/0/AvailabilityZoneName", + "/properties/ReplicationConfiguration/Destinations/0/KmsKeyId" + ], + "createOnlyProperties": [ + "/properties/AvailabilityZoneName", + "/properties/Encrypted", + "/properties/KmsKeyId", + "/properties/PerformanceMode" + ], + "propertyTransform": { + "/properties/KmsKeyId": "\"arn:aws[-a-z]*:kms:[a-z0-9-]+:[0-9]{12}:key/[a-zA-Z0-9-]+\"", + "/properties/FileSystemProtection/ReplicationOverwriteProtection": "$uppercase(FileSystemProtection.ReplicationOverwriteProtection)='DISABLED' ? 'REPLICATING' : $uppercase(FileSystemProtection.ReplicationOverwriteProtection)" + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/FileSystemTags" + }, + "handlers": { + "create": { + "permissions": [ + "elasticfilesystem:CreateFileSystem", + "elasticfilesystem:DescribeReplicationConfigurations", + "elasticfilesystem:TagResource", + "elasticfilesystem:CreateReplicationConfiguration", + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:PutBackupPolicy", + "elasticfilesystem:PutFileSystemPolicy", + "elasticfilesystem:PutLifecycleConfiguration", + "elasticfilesystem:UpdateFileSystemProtection", + "kms:DescribeKey", + "kms:GenerateDataKeyWithoutPlaintext", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "elasticfilesystem:DescribeBackupPolicy", + "elasticfilesystem:DescribeFileSystemPolicy", + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:DescribeLifecycleConfiguration", + "elasticfilesystem:DescribeReplicationConfigurations" + ] + }, + "update": { + "permissions": [ + "elasticfilesystem:CreateReplicationConfiguration", + "elasticfilesystem:DeleteFileSystemPolicy", + "elasticfilesystem:DescribeBackupPolicy", + "elasticfilesystem:DescribeFileSystemPolicy", + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:DescribeLifecycleConfiguration", + "elasticfilesystem:DescribeReplicationConfigurations", + "elasticfilesystem:DeleteTags", + "elasticfilesystem:DeleteReplicationConfiguration", + "elasticfilesystem:ListTagsForResource", + "elasticfilesystem:PutBackupPolicy", + "elasticfilesystem:PutFileSystemPolicy", + "elasticfilesystem:PutLifecycleConfiguration", + "elasticfilesystem:TagResource", + "elasticfilesystem:UntagResource", + "elasticfilesystem:UpdateFileSystem", + "elasticfilesystem:UpdateFileSystemProtection", + "kms:DescribeKey", + "kms:GenerateDataKeyWithoutPlaintext", + "kms:CreateGrant" + ] + }, + "delete": { + "permissions": [ + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:DeleteFileSystem", + "elasticfilesystem:DeleteReplicationConfiguration", + "elasticfilesystem:DescribeReplicationConfigurations" + ] + }, + "list": { + "permissions": [ + "elasticfilesystem:DescribeBackupPolicy", + "elasticfilesystem:DescribeFileSystemPolicy", + "elasticfilesystem:DescribeFileSystems", + "elasticfilesystem:DescribeLifecycleConfiguration", + "elasticfilesystem:DescribeReplicationConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/efs/mounttarget.json b/internal/aws/cfn/schemas/aws/efs/mounttarget.json new file mode 100644 index 00000000..320d35e9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/efs/mounttarget.json @@ -0,0 +1,95 @@ +{ + "typeName": "AWS::EFS::MountTarget", + "description": "The ``AWS::EFS::MountTarget`` resource is an Amazon EFS resource that creates a mount target for an EFS file system. You can then mount the file system on Amazon EC2 instances or other resources by using the mount target.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Id": { + "type": "string", + "description": "" + }, + "IpAddress": { + "type": "string", + "description": "Valid IPv4 address within the address range of the specified subnet." + }, + "FileSystemId": { + "type": "string", + "description": "The ID of the file system for which to create the mount target." + }, + "SecurityGroups": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "Up to five VPC security group IDs, of the form ``sg-xxxxxxxx``. These must be for the same VPC as subnet specified." + }, + "SubnetId": { + "type": "string", + "description": "The ID of the subnet to add the mount target in. For One Zone file systems, use the subnet that is associated with the file system's Availability Zone." + } + }, + "additionalProperties": false, + "required": [ + "FileSystemId", + "SecurityGroups", + "SubnetId" + ], + "createOnlyProperties": [ + "/properties/IpAddress", + "/properties/SubnetId", + "/properties/FileSystemId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "elasticfilesystem:CreateMountTarget", + "elasticfilesystem:DescribeMountTargets" + ] + }, + "read": { + "permissions": [ + "elasticfilesystem:DescribeMountTargets", + "elasticfilesystem:DescribeMountTargetSecurityGroups" + ] + }, + "update": { + "permissions": [ + "elasticfilesystem:DescribeMountTargets", + "elasticfilesystem:DescribeMountTargetSecurityGroups", + "elasticfilesystem:ModifyMountTargetSecurityGroups" + ] + }, + "delete": { + "permissions": [ + "elasticfilesystem:DescribeMountTargets", + "elasticfilesystem:DeleteMountTarget" + ] + }, + "list": { + "permissions": [ + "elasticfilesystem:DescribeMountTargets", + "elasticfilesystem:DescribeMountTargetSecurityGroups" + ], + "handlerSchema": { + "properties": { + "FileSystemId": { + "$ref": "resource-schema.json#/properties/FileSystemId" + } + }, + "required": [ + "FileSystemId" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/eks/addon.json b/internal/aws/cfn/schemas/aws/eks/addon.json new file mode 100644 index 00000000..83d63c2a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eks/addon.json @@ -0,0 +1,158 @@ +{ + "typeName": "AWS::EKS::Addon", + "description": "Resource Schema for AWS::EKS::Addon", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "ClusterName": { + "description": "Name of Cluster", + "type": "string", + "minLength": 1 + }, + "AddonName": { + "description": "Name of Addon", + "type": "string", + "minLength": 1 + }, + "AddonVersion": { + "description": "Version of Addon", + "type": "string", + "minLength": 1 + }, + "PreserveOnDelete": { + "description": "PreserveOnDelete parameter value", + "type": "boolean" + }, + "ResolveConflicts": { + "description": "Resolve parameter value conflicts", + "type": "string", + "minLength": 1, + "enum": [ + "NONE", + "OVERWRITE", + "PRESERVE" + ] + }, + "ServiceAccountRoleArn": { + "description": "IAM role to bind to the add-on's service account", + "type": "string", + "minLength": 1 + }, + "ConfigurationValues": { + "description": "The configuration values to use with the add-on", + "type": "string", + "minLength": 1 + }, + "Arn": { + "description": "Amazon Resource Name (ARN) of the add-on", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "ClusterName", + "AddonName" + ], + "primaryIdentifier": [ + "/properties/ClusterName", + "/properties/AddonName" + ], + "createOnlyProperties": [ + "/properties/ClusterName", + "/properties/AddonName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/ResolveConflicts", + "/properties/PreserveOnDelete" + ], + "handlers": { + "create": { + "permissions": [ + "eks:CreateAddon", + "eks:DescribeAddon", + "eks:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "eks:DescribeAddon" + ] + }, + "delete": { + "permissions": [ + "eks:DeleteAddon", + "eks:DescribeAddon" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ClusterName": { + "$ref": "resource-schema.json#/properties/ClusterName" + } + }, + "required": [ + "ClusterName" + ] + }, + "permissions": [ + "eks:ListAddons" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "eks:UpdateAddon", + "eks:DescribeAddon", + "eks:DescribeUpdate", + "eks:ListTagsForResource", + "eks:TagResource", + "eks:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/eks/cluster.json b/internal/aws/cfn/schemas/aws/eks/cluster.json new file mode 100644 index 00000000..bf50a152 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eks/cluster.json @@ -0,0 +1,398 @@ +{ + "typeName": "AWS::EKS::Cluster", + "description": "An object representing an Amazon EKS cluster.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Provider": { + "type": "object", + "additionalProperties": false, + "properties": { + "KeyArn": { + "description": "Amazon Resource Name (ARN) or alias of the KMS key. The KMS key must be symmetric, created in the same region as the cluster, and if the KMS key was created in a different account, the user must have access to the KMS key.", + "type": "string" + } + } + }, + "EncryptionConfig": { + "description": "The encryption configuration for the cluster", + "type": "object", + "properties": { + "Provider": { + "description": "The encryption provider for the cluster.", + "$ref": "#/definitions/Provider" + }, + "Resources": { + "description": "Specifies the resources to be encrypted. The only supported value is \"secrets\".", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "ResourcesVpcConfig": { + "description": "An object representing the VPC configuration to use for an Amazon EKS cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "EndpointPrivateAccess": { + "description": "Set this value to true to enable private access for your cluster's Kubernetes API server endpoint. If you enable private access, Kubernetes API requests from within your cluster's VPC use the private VPC endpoint. The default value for this parameter is false, which disables private access for your Kubernetes API server. If you disable private access and you have nodes or AWS Fargate pods in the cluster, then ensure that publicAccessCidrs includes the necessary CIDR blocks for communication with the nodes or Fargate pods.", + "type": "boolean" + }, + "EndpointPublicAccess": { + "description": "Set this value to false to disable public access to your cluster's Kubernetes API server endpoint. If you disable public access, your cluster's Kubernetes API server can only receive requests from within the cluster VPC. The default value for this parameter is true, which enables public access for your Kubernetes API server.", + "type": "boolean" + }, + "PublicAccessCidrs": { + "description": "The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is 0.0.0.0/0. If you've disabled private endpoint access and you have nodes or AWS Fargate pods in the cluster, then ensure that you specify the necessary CIDR blocks.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "minItems": 1 + } + }, + "SecurityGroupIds": { + "description": "Specify one or more security groups for the cross-account elastic network interfaces that Amazon EKS creates to use to allow communication between your worker nodes and the Kubernetes control plane. If you don't specify a security group, the default security group for your VPC is used.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "minItems": 1 + } + }, + "SubnetIds": { + "description": "Specify subnets for your Amazon EKS nodes. Amazon EKS creates cross-account elastic network interfaces in these subnets to allow communication between your nodes and the Kubernetes control plane.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "minItems": 1 + } + } + }, + "required": [ + "SubnetIds" + ] + }, + "LoggingTypeConfig": { + "description": "Enabled Logging Type", + "type": "object", + "properties": { + "Type": { + "description": "name of the log type", + "type": "string", + "enum": [ + "api", + "audit", + "authenticator", + "controllerManager", + "scheduler" + ] + } + }, + "additionalProperties": false + }, + "EnabledTypes": { + "description": "Enable control plane logs for your cluster, all log types will be disabled if the array is empty", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LoggingTypeConfig" + } + }, + "ClusterLogging": { + "description": "The cluster control plane logging configuration for your cluster. ", + "type": "object", + "additionalProperties": false, + "properties": { + "EnabledTypes": { + "$ref": "#/definitions/EnabledTypes" + } + } + }, + "Logging": { + "description": "Enable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs based on log types. By default, cluster control plane logs aren't exported to CloudWatch Logs.", + "type": "object", + "additionalProperties": false, + "properties": { + "ClusterLogging": { + "description": "The cluster control plane logging configuration for your cluster. ", + "$ref": "#/definitions/ClusterLogging" + } + } + }, + "KubernetesNetworkConfig": { + "description": "The Kubernetes network configuration for the cluster.", + "additionalProperties": false, + "type": "object", + "properties": { + "ServiceIpv4Cidr": { + "description": "The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks. We recommend that you specify a block that does not overlap with resources in other networks that are peered or connected to your VPC. ", + "type": "string" + }, + "ServiceIpv6Cidr": { + "description": "The CIDR block to assign Kubernetes service IP addresses from.", + "type": "string" + }, + "IpFamily": { + "description": "Ipv4 or Ipv6. You can only specify ipv6 for 1.21 and later clusters that use version 1.10.1 or later of the Amazon VPC CNI add-on", + "type": "string", + "enum": [ + "ipv4", + "ipv6" + ] + } + } + }, + "ControlPlanePlacement": { + "description": "Specify the placement group of the control plane machines for your cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "GroupName": { + "description": "Specify the placement group name of the control place machines for your cluster.", + "type": "string" + } + } + }, + "OutpostConfig": { + "description": "An object representing the Outpost configuration to use for AWS EKS outpost cluster.", + "additionalProperties": false, + "type": "object", + "properties": { + "OutpostArns": { + "description": "Specify one or more Arn(s) of Outpost(s) on which you would like to create your cluster.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "minItems": 1 + } + }, + "ControlPlaneInstanceType": { + "description": "Specify the Instance type of the machines that should be used to create your cluster.", + "type": "string" + }, + "ControlPlanePlacement": { + "description": "Specify the placement group of the control plane machines for your cluster.", + "$ref": "#/definitions/ControlPlanePlacement" + } + }, + "required": [ + "OutpostArns", + "ControlPlaneInstanceType" + ] + }, + "AccessConfig": { + "description": "An object representing the Access Config to use for the cluster.", + "additionalProperties": false, + "type": "object", + "properties": { + "BootstrapClusterCreatorAdminPermissions": { + "description": "Set this value to false to avoid creating a default cluster admin Access Entry using the IAM principal used to create the cluster.", + "type": "boolean" + }, + "AuthenticationMode": { + "description": "Specify the authentication mode that should be used to create your cluster.", + "type": "string", + "enum": [ + "CONFIG_MAP", + "API_AND_CONFIG_MAP", + "API" + ] + } + } + } + }, + "properties": { + "EncryptionConfig": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/EncryptionConfig", + "maxItems": 1 + } + }, + "KubernetesNetworkConfig": { + "$ref": "#/definitions/KubernetesNetworkConfig" + }, + "Logging": { + "$ref": "#/definitions/Logging" + }, + "Name": { + "description": "The unique name to give to your cluster.", + "type": "string", + "pattern": "^[0-9A-Za-z][A-Za-z0-9\\-_]*", + "minLength": 1, + "maxLength": 100 + }, + "Id": { + "description": "The unique ID given to your cluster.", + "type": "string" + }, + "ResourcesVpcConfig": { + "$ref": "#/definitions/ResourcesVpcConfig" + }, + "OutpostConfig": { + "$ref": "#/definitions/OutpostConfig" + }, + "AccessConfig": { + "$ref": "#/definitions/AccessConfig" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role that provides permissions for the Kubernetes control plane to make calls to AWS API operations on your behalf.", + "type": "string" + }, + "Version": { + "description": "The desired Kubernetes version for your cluster. If you don't specify a value here, the latest version available in Amazon EKS is used.", + "type": "string", + "pattern": "1\\.\\d\\d" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "The ARN of the cluster, such as arn:aws:eks:us-west-2:666666666666:cluster/prod.", + "type": "string" + }, + "Endpoint": { + "description": "The endpoint for your Kubernetes API server, such as https://5E1D0CEXAMPLEA591B746AFC5AB30262.yl4.us-west-2.eks.amazonaws.com.", + "type": "string" + }, + "CertificateAuthorityData": { + "description": "The certificate-authority-data for your cluster.", + "type": "string" + }, + "ClusterSecurityGroupId": { + "description": "The cluster security group that was created by Amazon EKS for the cluster. Managed node groups use this security group for control plane to data plane communication.", + "type": "string" + }, + "EncryptionConfigKeyArn": { + "description": "Amazon Resource Name (ARN) or alias of the customer master key (CMK).", + "type": "string" + }, + "OpenIdConnectIssuerUrl": { + "description": "The issuer URL for the cluster's OIDC identity provider, such as https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E. If you need to remove https:// from this output value, you can include the following code in your template.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "RoleArn", + "ResourcesVpcConfig" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/OutpostConfig", + "/properties/EncryptionConfig", + "/properties/KubernetesNetworkConfig", + "/properties/AccessConfig/BootstrapClusterCreatorAdminPermissions", + "/properties/Name", + "/properties/RoleArn" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/Endpoint", + "/properties/CertificateAuthorityData", + "/properties/ClusterSecurityGroupId", + "/properties/EncryptionConfigKeyArn", + "/properties/OpenIdConnectIssuerUrl", + "/properties/KubernetesNetworkConfig/ServiceIpv6Cidr" + ], + "writeOnlyProperties": [ + "/properties/AccessConfig/BootstrapClusterCreatorAdminPermissions" + ], + "handlers": { + "create": { + "permissions": [ + "eks:CreateCluster", + "eks:DescribeCluster", + "eks:TagResource", + "iam:PassRole", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:CreateServiceLinkedRole", + "iam:CreateInstanceProfile", + "iam:TagInstanceProfile", + "iam:AddRoleToInstanceProfile", + "iam:GetInstanceProfile", + "iam:DeleteInstanceProfile", + "iam:RemoveRoleFromInstanceProfile", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "eks:DescribeCluster" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "eks:UpdateClusterConfig", + "eks:UpdateClusterVersion", + "eks:DescribeCluster", + "eks:DescribeUpdate", + "eks:TagResource", + "eks:UntagResource" + ], + "timeoutInMinutes": 180 + }, + "delete": { + "permissions": [ + "eks:DeleteCluster", + "eks:DescribeCluster" + ] + }, + "list": { + "permissions": [ + "eks:ListClusters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/eks/fargateprofile.json b/internal/aws/cfn/schemas/aws/eks/fargateprofile.json new file mode 100644 index 00000000..08383db3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eks/fargateprofile.json @@ -0,0 +1,186 @@ +{ + "typeName": "AWS::EKS::FargateProfile", + "description": "Resource Schema for AWS::EKS::FargateProfile", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "Selector": { + "type": "object", + "additionalProperties": false, + "properties": { + "Namespace": { + "type": "string", + "minLength": 1 + }, + "Labels": { + "type": "array", + "items": { + "$ref": "#/definitions/Label" + } + } + }, + "required": [ + "Namespace" + ] + }, + "Label": { + "description": "A key-value pair to associate with a pod.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the label.", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the label. ", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "ClusterName": { + "description": "Name of the Cluster", + "type": "string", + "minLength": 1 + }, + "FargateProfileName": { + "description": "Name of FargateProfile", + "type": "string", + "minLength": 1 + }, + "PodExecutionRoleArn": { + "description": "The IAM policy arn for pods", + "type": "string", + "minLength": 1 + }, + "Arn": { + "type": "string" + }, + "Subnets": { + "type": "array", + "items": { + "type": "string" + } + }, + "Selectors": { + "type": "array", + "items": { + "$ref": "#/definitions/Selector" + }, + "minItems": 1 + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "ClusterName", + "PodExecutionRoleArn", + "Selectors" + ], + "createOnlyProperties": [ + "/properties/ClusterName", + "/properties/FargateProfileName", + "/properties/PodExecutionRoleArn", + "/properties/Subnets", + "/properties/Selectors" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/ClusterName", + "/properties/FargateProfileName" + ], + "handlers": { + "create": { + "permissions": [ + "eks:CreateFargateProfile", + "eks:DescribeFargateProfile", + "iam:GetRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "eks:TagResource" + ] + }, + "read": { + "permissions": [ + "eks:DescribeFargateProfile" + ] + }, + "delete": { + "permissions": [ + "eks:DeleteFargateProfile", + "eks:DescribeFargateProfile" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ClusterName": { + "$ref": "resource-schema.json#/properties/ClusterName" + } + }, + "required": [ + "ClusterName" + ] + }, + "permissions": [ + "eks:ListFargateProfiles" + ] + }, + "update": { + "permissions": [ + "eks:DescribeFargateProfile", + "eks:ListTagsForResource", + "eks:TagResource", + "eks:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/eks/identityproviderconfig.json b/internal/aws/cfn/schemas/aws/eks/identityproviderconfig.json new file mode 100644 index 00000000..f80ddc40 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eks/identityproviderconfig.json @@ -0,0 +1,199 @@ +{ + "typeName": "AWS::EKS::IdentityProviderConfig", + "description": "An object representing an Amazon EKS IdentityProviderConfig.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "RequiredClaim": { + "description": "The key value pairs that describe required claims in the identity token. If set, each claim is verified to be present in the token with a matching value.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key of the requiredClaims.", + "minLength": 1, + "maxLength": 63 + }, + "Value": { + "type": "string", + "description": "The value for the requiredClaims.", + "minLength": 1, + "maxLength": 253 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "OidcIdentityProviderConfig": { + "description": "An object representing an OpenID Connect (OIDC) configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "ClientId": { + "description": "This is also known as audience. The ID for the client application that makes authentication requests to the OpenID identity provider.", + "type": "string" + }, + "GroupsClaim": { + "description": "The JWT claim that the provider uses to return your groups.", + "type": "string" + }, + "GroupsPrefix": { + "description": "The prefix that is prepended to group claims to prevent clashes with existing names (such as system: groups).", + "type": "string" + }, + "IssuerUrl": { + "description": "The URL of the OpenID identity provider that allows the API server to discover public signing keys for verifying tokens.", + "type": "string" + }, + "RequiredClaims": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RequiredClaim" + } + }, + "UsernameClaim": { + "description": "The JSON Web Token (JWT) claim to use as the username. The default is sub, which is expected to be a unique identifier of the end user. You can choose other claims, such as email or name, depending on the OpenID identity provider. Claims other than email are prefixed with the issuer URL to prevent naming clashes with other plug-ins.", + "type": "string" + }, + "UsernamePrefix": { + "description": "The prefix that is prepended to username claims to prevent clashes with existing names. If you do not provide this field, and username is a value other than email, the prefix defaults to issuerurl#. You can use the value - to disable all prefixing.", + "type": "string" + } + }, + "required": [ + "ClientId", + "IssuerUrl" + ] + } + }, + "properties": { + "ClusterName": { + "description": "The name of the identity provider configuration.", + "type": "string" + }, + "Type": { + "description": "The type of the identity provider configuration.", + "type": "string", + "enum": [ + "oidc" + ] + }, + "IdentityProviderConfigName": { + "description": "The name of the OIDC provider configuration.", + "type": "string" + }, + "Oidc": { + "$ref": "#/definitions/OidcIdentityProviderConfig" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "IdentityProviderConfigArn": { + "description": "The ARN of the configuration.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "Type", + "ClusterName" + ], + "primaryIdentifier": [ + "/properties/IdentityProviderConfigName", + "/properties/ClusterName", + "/properties/Type" + ], + "createOnlyProperties": [ + "/properties/Oidc", + "/properties/Type", + "/properties/IdentityProviderConfigName", + "/properties/ClusterName" + ], + "readOnlyProperties": [ + "/properties/IdentityProviderConfigArn" + ], + "replacementStrategy": "delete_then_create", + "handlers": { + "create": { + "permissions": [ + "eks:DescribeUpdate", + "eks:AssociateIdentityProviderConfig", + "eks:DescribeIdentityProviderConfig", + "eks:TagResource" + ] + }, + "read": { + "permissions": [ + "eks:DescribeIdentityProviderConfig" + ] + }, + "update": { + "permissions": [ + "eks:DescribeIdentityProviderConfig", + "eks:TagResource", + "eks:UntagResource" + ] + }, + "delete": { + "permissions": [ + "eks:DisassociateIdentityProviderConfig", + "eks:DescribeIdentityProviderConfig" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ClusterName": { + "$ref": "resource-schema.json#/properties/ClusterName" + } + }, + "required": [ + "ClusterName" + ] + }, + "permissions": [ + "eks:ListIdentityProviderConfigs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/eks/nodegroup.json b/internal/aws/cfn/schemas/aws/eks/nodegroup.json new file mode 100644 index 00000000..30d164ed --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eks/nodegroup.json @@ -0,0 +1,309 @@ +{ + "typeName": "AWS::EKS::Nodegroup", + "description": "Resource schema for AWS::EKS::Nodegroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "LaunchTemplateSpecification": { + "description": "An object representing a launch template specification for AWS EKS Nodegroup.", + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string", + "minLength": 1 + }, + "Version": { + "type": "string", + "minLength": 1 + }, + "Name": { + "type": "string", + "minLength": 1 + } + } + }, + "Taint": { + "description": "An object representing a Taint specification for AWS EKS Nodegroup.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1 + }, + "Value": { + "type": "string", + "minLength": 0 + }, + "Effect": { + "type": "string", + "minLength": 1 + } + } + }, + "ScalingConfig": { + "description": "An object representing a auto scaling group specification for AWS EKS Nodegroup.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinSize": { + "type": "integer", + "minimum": 0 + }, + "DesiredSize": { + "type": "integer", + "minimum": 0 + }, + "MaxSize": { + "type": "integer", + "minimum": 1 + } + } + }, + "RemoteAccess": { + "description": "An object representing a remote access configuration specification for AWS EKS Nodegroup.", + "type": "object", + "additionalProperties": false, + "properties": { + "SourceSecurityGroups": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Ec2SshKey": { + "type": "string" + } + }, + "required": [ + "Ec2SshKey" + ] + }, + "UpdateConfig": { + "description": "The node group update configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "MaxUnavailable": { + "description": "The maximum number of nodes unavailable at once during a version update. Nodes will be updated in parallel. This value or maxUnavailablePercentage is required to have a value.The maximum number is 100. ", + "type": "number", + "minimum": 1 + }, + "MaxUnavailablePercentage": { + "description": "The maximum percentage of nodes unavailable during a version update. This percentage of nodes will be updated in parallel, up to 100 nodes at once. This value or maxUnavailable is required to have a value.", + "type": "number", + "minimum": 1, + "maximum": 100 + } + } + } + }, + "properties": { + "AmiType": { + "description": "The AMI type for your node group.", + "type": "string" + }, + "CapacityType": { + "description": "The capacity type of your managed node group.", + "type": "string" + }, + "ClusterName": { + "description": "Name of the cluster to create the node group in.", + "type": "string", + "minLength": 1 + }, + "DiskSize": { + "description": "The root device disk size (in GiB) for your node group instances.", + "type": "integer" + }, + "ForceUpdateEnabled": { + "description": "Force the update if the existing node group's pods are unable to be drained due to a pod disruption budget issue.", + "type": "boolean", + "default": false + }, + "InstanceTypes": { + "description": "Specify the instance types for a node group.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Labels": { + "description": "The Kubernetes labels to be applied to the nodes in the node group when they are created.", + "type": "object", + "patternProperties": { + "^.+$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "LaunchTemplate": { + "description": "An object representing a node group's launch template specification.", + "$ref": "#/definitions/LaunchTemplateSpecification" + }, + "NodegroupName": { + "description": "The unique name to give your node group.", + "type": "string", + "minLength": 1 + }, + "NodeRole": { + "description": "The Amazon Resource Name (ARN) of the IAM role to associate with your node group.", + "type": "string" + }, + "ReleaseVersion": { + "description": "The AMI version of the Amazon EKS-optimized AMI to use with your node group.", + "type": "string" + }, + "RemoteAccess": { + "description": "The remote access (SSH) configuration to use with your node group.", + "$ref": "#/definitions/RemoteAccess" + }, + "ScalingConfig": { + "description": "The scaling configuration details for the Auto Scaling group that is created for your node group.", + "$ref": "#/definitions/ScalingConfig" + }, + "Subnets": { + "description": "The subnets to use for the Auto Scaling group that is created for your node group.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Tags": { + "description": "The metadata, as key-value pairs, to apply to the node group to assist with categorization and organization. Follows same schema as Labels for consistency.", + "type": "object", + "patternProperties": { + "^.+$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Taints": { + "description": "The Kubernetes taints to be applied to the nodes in the node group when they are created.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Taint" + } + }, + "UpdateConfig": { + "description": "The node group update configuration.", + "$ref": "#/definitions/UpdateConfig" + }, + "Version": { + "description": "The Kubernetes version to use for your managed nodes.", + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "ClusterName", + "NodeRole", + "Subnets" + ], + "createOnlyProperties": [ + "/properties/CapacityType", + "/properties/NodegroupName", + "/properties/RemoteAccess", + "/properties/NodeRole", + "/properties/ClusterName", + "/properties/InstanceTypes", + "/properties/DiskSize", + "/properties/AmiType", + "/properties/Subnets" + ], + "writeOnlyProperties": [ + "/properties/ForceUpdateEnabled" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "eks:CreateNodegroup", + "eks:DescribeNodegroup", + "eks:TagResource", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "ec2:DescribeSecurityGroups", + "ec2:DescribeKeyPairs", + "ec2:CreateTags", + "ec2:DeleteTags", + "ec2:DescribeRouteTables", + "ec2:DescribeLaunchTemplates", + "ec2:DescribeLaunchTemplateVersions", + "ec2:RunInstances", + "iam:CreateServiceLinkedRole", + "iam:GetRole", + "iam:PassRole", + "iam:ListAttachedRolePolicies" + ] + }, + "read": { + "permissions": [ + "eks:DescribeNodegroup" + ] + }, + "delete": { + "permissions": [ + "eks:DeleteNodegroup", + "eks:DescribeNodegroup" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ClusterName": { + "$ref": "resource-schema.json#/properties/ClusterName" + } + }, + "required": [ + "ClusterName" + ] + }, + "permissions": [ + "eks:ListNodegroups" + ] + }, + "update": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "eks:DescribeNodegroup", + "eks:DescribeUpdate", + "eks:ListUpdates", + "eks:TagResource", + "eks:UntagResource", + "eks:UpdateNodegroupConfig", + "eks:UpdateNodegroupVersion" + ], + "timeoutInMinutes": 2160 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/cachecluster.json b/internal/aws/cfn/schemas/aws/elasticache/cachecluster.json new file mode 100644 index 00000000..4dd60d2e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/cachecluster.json @@ -0,0 +1,223 @@ +{ + "typeName": "AWS::ElastiCache::CacheCluster", + "description": "Resource Type definition for AWS::ElastiCache::CacheCluster", + "additionalProperties": false, + "properties": { + "CacheSecurityGroupNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SnapshotArns": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Port": { + "type": "integer" + }, + "ConfigurationEndpointAddress": { + "type": "string" + }, + "NotificationTopicArn": { + "type": "string" + }, + "NumCacheNodes": { + "type": "integer" + }, + "SnapshotName": { + "type": "string" + }, + "TransitEncryptionEnabled": { + "type": "boolean" + }, + "NetworkType": { + "type": "string" + }, + "PreferredAvailabilityZones": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "VpcSecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ClusterName": { + "type": "string" + }, + "RedisEndpointAddress": { + "type": "string" + }, + "Engine": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "EngineVersion": { + "type": "string" + }, + "RedisEndpointPort": { + "type": "string" + }, + "CacheSubnetGroupName": { + "type": "string" + }, + "CacheParameterGroupName": { + "type": "string" + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "AutoMinorVersionUpgrade": { + "type": "boolean" + }, + "PreferredAvailabilityZone": { + "type": "string" + }, + "SnapshotWindow": { + "type": "string" + }, + "CacheNodeType": { + "type": "string" + }, + "SnapshotRetentionLimit": { + "type": "integer" + }, + "ConfigurationEndpointPort": { + "type": "string" + }, + "IpDiscovery": { + "type": "string" + }, + "LogDeliveryConfigurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LogDeliveryConfigurationRequest" + } + }, + "Id": { + "type": "string" + }, + "AZMode": { + "type": "string" + } + }, + "definitions": { + "LogDeliveryConfigurationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogType": { + "type": "string" + }, + "LogFormat": { + "type": "string" + }, + "DestinationType": { + "type": "string" + }, + "DestinationDetails": { + "$ref": "#/definitions/DestinationDetails" + } + }, + "required": [ + "LogFormat", + "LogType", + "DestinationType", + "DestinationDetails" + ] + }, + "KinesisFirehoseDestinationDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeliveryStream": { + "type": "string" + } + }, + "required": [ + "DeliveryStream" + ] + }, + "CloudWatchLogsDestinationDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroup": { + "type": "string" + } + }, + "required": [ + "LogGroup" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DestinationDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogsDetails": { + "$ref": "#/definitions/CloudWatchLogsDestinationDetails" + }, + "KinesisFirehoseDetails": { + "$ref": "#/definitions/KinesisFirehoseDestinationDetails" + } + } + } + }, + "required": [ + "CacheNodeType", + "NumCacheNodes", + "Engine" + ], + "createOnlyProperties": [ + "/properties/Port", + "/properties/SnapshotArns", + "/properties/SnapshotName", + "/properties/CacheSubnetGroupName", + "/properties/ClusterName", + "/properties/NetworkType", + "/properties/Engine" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/ConfigurationEndpoint.Address", + "/properties/Id", + "/properties/ConfigurationEndpoint.Port", + "/properties/RedisEndpoint.Port", + "/properties/RedisEndpoint.Address" + ] +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/globalreplicationgroup.json b/internal/aws/cfn/schemas/aws/elasticache/globalreplicationgroup.json new file mode 100644 index 00000000..1d1db208 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/globalreplicationgroup.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::ElastiCache::GlobalReplicationGroup", + "description": "The AWS::ElastiCache::GlobalReplicationGroup resource creates an Amazon ElastiCache Global Replication Group.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "definitions": { + "GlobalReplicationGroupMember": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReplicationGroupId": { + "description": "Regionally unique identifier for the member i.e. ReplicationGroupId.", + "type": "string" + }, + "ReplicationGroupRegion": { + "description": "The AWS region of the Global Datastore member.", + "type": "string" + }, + "Role": { + "description": "Indicates the role of the member, primary or secondary.", + "type": "string", + "enum": [ + "PRIMARY", + "SECONDARY" + ] + } + } + }, + "ReshardingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "NodeGroupId": { + "description": "Unique identifier for the Node Group. This is either auto-generated by ElastiCache (4-digit id) or a user supplied id.", + "type": "string" + }, + "PreferredAvailabilityZones": { + "description": "A list of preferred availability zones for the nodes of new node groups.", + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "RegionalConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReplicationGroupId": { + "description": "The replication group id of the Global Datastore member.", + "type": "string" + }, + "ReplicationGroupRegion": { + "description": "The AWS region of the Global Datastore member.", + "type": "string" + }, + "ReshardingConfigurations": { + "description": "A list of PreferredAvailabilityZones objects that specifies the configuration of a node group in the resharded cluster. ", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ReshardingConfiguration" + } + } + } + } + }, + "properties": { + "GlobalReplicationGroupIdSuffix": { + "description": "The suffix name of a Global Datastore. Amazon ElastiCache automatically applies a prefix to the Global Datastore ID when it is created. Each AWS Region has its own prefix. ", + "type": "string" + }, + "AutomaticFailoverEnabled": { + "description": "AutomaticFailoverEnabled", + "type": "boolean" + }, + "CacheNodeType": { + "description": "The cache node type of the Global Datastore", + "type": "string" + }, + "EngineVersion": { + "description": "The engine version of the Global Datastore.", + "type": "string" + }, + "CacheParameterGroupName": { + "description": "Cache parameter group name to use for the new engine version. This parameter cannot be modified independently.", + "type": "string" + }, + "GlobalNodeGroupCount": { + "description": "Indicates the number of node groups in the Global Datastore.", + "type": "integer" + }, + "GlobalReplicationGroupDescription": { + "description": "The optional description of the Global Datastore", + "type": "string" + }, + "GlobalReplicationGroupId": { + "description": "The name of the Global Datastore, it is generated by ElastiCache adding a prefix to GlobalReplicationGroupIdSuffix.", + "type": "string" + }, + "Members": { + "description": "The replication groups that comprise the Global Datastore.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/GlobalReplicationGroupMember" + }, + "minItems": 1 + }, + "Status": { + "description": "The status of the Global Datastore", + "type": "string" + }, + "RegionalConfigurations": { + "description": "Describes the replication group IDs, the AWS regions where they are stored and the shard configuration for each that comprise the Global Datastore ", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/RegionalConfiguration" + } + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/GlobalReplicationGroupId", + "/properties/Status" + ], + "writeOnlyProperties": [ + "/properties/GlobalReplicationGroupIdSuffix", + "/properties/AutomaticFailoverEnabled", + "/properties/CacheNodeType", + "/properties/EngineVersion", + "/properties/GlobalNodeGroupCount", + "/properties/GlobalReplicationGroupDescription", + "/properties/RegionalConfigurations" + ], + "required": [ + "Members" + ], + "primaryIdentifier": [ + "/properties/GlobalReplicationGroupId" + ], + "handlers": { + "create": { + "permissions": [ + "elasticache:CreateGlobalReplicationGroup", + "elasticache:DescribeGlobalReplicationGroups" + ] + }, + "read": { + "permissions": [ + "elasticache:DescribeGlobalReplicationGroups" + ] + }, + "update": { + "permissions": [ + "elasticache:ModifyGlobalReplicationGroup", + "elasticache:FailoverGlobalReplicationGroup", + "elasticache:DescribeGlobalReplicationGroups", + "elasticache:IncreaseNodeGroupsInGlobalReplicationGroup", + "elasticache:DecreaseNodeGroupsInGlobalReplicationGroup", + "elasticache:DisassociateGlobalReplicationGroup", + "elasticache:RebalanceSlotsInGlobalReplicationGroup" + ] + }, + "delete": { + "permissions": [ + "elasticache:DeleteGlobalReplicationGroup", + "elasticache:DisassociateGlobalReplicationGroup", + "elasticache:DescribeGlobalReplicationGroups" + ] + }, + "list": { + "permissions": [ + "elasticache:DescribeGlobalReplicationGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/parametergroup.json b/internal/aws/cfn/schemas/aws/elasticache/parametergroup.json new file mode 100644 index 00000000..35f302f7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/parametergroup.json @@ -0,0 +1,62 @@ +{ + "typeName": "AWS::ElastiCache::ParameterGroup", + "description": "Resource Type definition for AWS::ElastiCache::ParameterGroup", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Properties": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CacheParameterGroupFamily": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Description", + "CacheParameterGroupFamily" + ], + "createOnlyProperties": [ + "/properties/CacheParameterGroupFamily" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/replicationgroup.json b/internal/aws/cfn/schemas/aws/elasticache/replicationgroup.json new file mode 100644 index 00000000..4d5e31c1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/replicationgroup.json @@ -0,0 +1,331 @@ +{ + "typeName": "AWS::ElastiCache::ReplicationGroup", + "description": "Resource Type definition for AWS::ElastiCache::ReplicationGroup", + "additionalProperties": false, + "properties": { + "PreferredCacheClusterAZs": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ReaderEndPointPort": { + "type": "string" + }, + "NodeGroupConfiguration": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/NodeGroupConfiguration" + } + }, + "SnapshotArns": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ConfigurationEndPointPort": { + "type": "string" + }, + "Port": { + "type": "integer" + }, + "NumNodeGroups": { + "type": "integer" + }, + "NotificationTopicArn": { + "type": "string" + }, + "AutomaticFailoverEnabled": { + "type": "boolean" + }, + "ReplicasPerNodeGroup": { + "type": "integer" + }, + "TransitEncryptionEnabled": { + "type": "boolean" + }, + "Engine": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "PrimaryEndPointAddress": { + "type": "string" + }, + "GlobalReplicationGroupId": { + "type": "string" + }, + "ConfigurationEndPointAddress": { + "type": "string" + }, + "EngineVersion": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "PrimaryClusterId": { + "type": "string" + }, + "ReadEndPointPorts": { + "type": "string" + }, + "AutoMinorVersionUpgrade": { + "type": "boolean" + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "SnapshotWindow": { + "type": "string" + }, + "TransitEncryptionMode": { + "type": "string" + }, + "SnapshotRetentionLimit": { + "type": "integer" + }, + "ReadEndPointAddressesList": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SnapshottingClusterId": { + "type": "string" + }, + "IpDiscovery": { + "type": "string" + }, + "ReadEndPointAddresses": { + "type": "string" + }, + "PrimaryEndPointPort": { + "type": "string" + }, + "CacheSecurityGroupNames": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ClusterMode": { + "type": "string" + }, + "ReadEndPointPortsList": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SnapshotName": { + "type": "string" + }, + "ReplicationGroupDescription": { + "type": "string" + }, + "ReaderEndPointAddress": { + "type": "string" + }, + "MultiAZEnabled": { + "type": "boolean" + }, + "NetworkType": { + "type": "string" + }, + "ReplicationGroupId": { + "type": "string" + }, + "NumCacheClusters": { + "type": "integer" + }, + "CacheSubnetGroupName": { + "type": "string" + }, + "CacheParameterGroupName": { + "type": "string" + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "AtRestEncryptionEnabled": { + "type": "boolean" + }, + "CacheNodeType": { + "type": "string" + }, + "UserGroupIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "AuthToken": { + "type": "string" + }, + "DataTieringEnabled": { + "type": "boolean" + }, + "LogDeliveryConfigurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LogDeliveryConfigurationRequest" + } + } + }, + "definitions": { + "LogDeliveryConfigurationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogType": { + "type": "string" + }, + "LogFormat": { + "type": "string" + }, + "DestinationType": { + "type": "string" + }, + "DestinationDetails": { + "$ref": "#/definitions/DestinationDetails" + } + }, + "required": [ + "LogFormat", + "LogType", + "DestinationType", + "DestinationDetails" + ] + }, + "KinesisFirehoseDestinationDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeliveryStream": { + "type": "string" + } + }, + "required": [ + "DeliveryStream" + ] + }, + "CloudWatchLogsDestinationDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroup": { + "type": "string" + } + }, + "required": [ + "LogGroup" + ] + }, + "NodeGroupConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Slots": { + "type": "string" + }, + "PrimaryAvailabilityZone": { + "type": "string" + }, + "ReplicaAvailabilityZones": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "NodeGroupId": { + "type": "string" + }, + "ReplicaCount": { + "type": "integer" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DestinationDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogsDetails": { + "$ref": "#/definitions/CloudWatchLogsDestinationDetails" + }, + "KinesisFirehoseDetails": { + "$ref": "#/definitions/KinesisFirehoseDestinationDetails" + } + } + } + }, + "required": [ + "ReplicationGroupDescription" + ], + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/Port", + "/properties/SnapshotArns", + "/properties/CacheSubnetGroupName", + "/properties/NetworkType", + "/properties/DataTieringEnabled", + "/properties/AtRestEncryptionEnabled", + "/properties/ReplicationGroupId", + "/properties/GlobalReplicationGroupId", + "/properties/ReplicasPerNodeGroup", + "/properties/PreferredCacheClusterAZs", + "/properties/SnapshotName", + "/properties/Engine" + ], + "primaryIdentifier": [ + "/properties/ReplicationGroupId" + ], + "readOnlyProperties": [ + "/properties/ConfigurationEndPoint.Address", + "/properties/PrimaryEndPoint.Address", + "/properties/PrimaryEndPoint.Port", + "/properties/ReaderEndPoint.Address", + "/properties/ConfigurationEndPoint.Port", + "/properties/ReadEndPoint.Addresses.List", + "/properties/ReadEndPoint.Ports.List", + "/properties/ReaderEndPoint.Port", + "/properties/ReadEndPoint.Addresses", + "/properties/ReadEndPoint.Ports", + "/properties/ReplicationGroupId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/securitygroup.json b/internal/aws/cfn/schemas/aws/elasticache/securitygroup.json new file mode 100644 index 00000000..166ce9d0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/securitygroup.json @@ -0,0 +1,47 @@ +{ + "typeName": "AWS::ElastiCache::SecurityGroup", + "description": "Resource Type definition for AWS::ElastiCache::SecurityGroup", + "additionalProperties": false, + "properties": { + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Description" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/securitygroupingress.json b/internal/aws/cfn/schemas/aws/elasticache/securitygroupingress.json new file mode 100644 index 00000000..ad373e18 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/securitygroupingress.json @@ -0,0 +1,29 @@ +{ + "typeName": "AWS::ElastiCache::SecurityGroupIngress", + "description": "Resource Type definition for AWS::ElastiCache::SecurityGroupIngress", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "CacheSecurityGroupName": { + "type": "string" + }, + "EC2SecurityGroupName": { + "type": "string" + }, + "EC2SecurityGroupOwnerId": { + "type": "string" + } + }, + "required": [ + "EC2SecurityGroupName", + "CacheSecurityGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/subnetgroup.json b/internal/aws/cfn/schemas/aws/elasticache/subnetgroup.json new file mode 100644 index 00000000..57813d44 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/subnetgroup.json @@ -0,0 +1,104 @@ +{ + "typeName": "AWS::ElastiCache::SubnetGroup", + "description": "Resource Type definition for AWS::ElastiCache::SubnetGroup", + "properties": { + "Description": { + "type": "string", + "description": "The description for the cache subnet group." + }, + "SubnetIds": { + "description": "The EC2 subnet IDs for the cache subnet group.", + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": false, + "uniqueItems": false + }, + "CacheSubnetGroupName": { + "type": "string", + "description": "The name for the cache subnet group. This value is stored as a lowercase string." + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "description": "A tag that can be added to an ElastiCache subnet group. Tags are composed of a Key/Value pair. You can use tags to categorize and track all your subnet groups. A tag with a null Value is permitted.", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Description", + "SubnetIds" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/CacheSubnetGroupName" + ], + "primaryIdentifier": [ + "/properties/CacheSubnetGroupName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "elasticache:CreateCacheSubnetGroup", + "elasticache:AddTagsToResource", + "elasticache:DescribeCacheSubnetGroups", + "elasticache:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "elasticache:DescribeCacheSubnetGroups", + "elasticache:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "elasticache:DeleteCacheSubnetGroup", + "elasticache:DescribeCacheSubnetGroups", + "elasticache:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "elasticache:DescribeCacheSubnetGroups" + ] + }, + "update": { + "permissions": [ + "elasticache:ModifyCacheSubnetGroup", + "elasticache:DescribeCacheSubnetGroups", + "elasticache:AddTagsToResource", + "elasticache:RemoveTagsFromResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/user.json b/internal/aws/cfn/schemas/aws/elasticache/user.json new file mode 100644 index 00000000..58a105fe --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/user.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::ElastiCache::User", + "description": "Resource Type definition for AWS::ElastiCache::User", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with 'aws:'. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "properties": { + "Status": { + "description": "Indicates the user status. Can be \"active\", \"modifying\" or \"deleting\".", + "type": "string" + }, + "UserId": { + "description": "The ID of the user.", + "pattern": "[a-z][a-z0-9\\\\-]*", + "type": "string" + }, + "UserName": { + "description": "The username of the user.", + "type": "string" + }, + "Engine": { + "description": "Must be redis.", + "type": "string", + "enum": [ + "redis" + ] + }, + "AccessString": { + "description": "Access permissions string used for this user account.", + "type": "string" + }, + "NoPasswordRequired": { + "description": "Indicates a password is not required for this user account.", + "type": "boolean" + }, + "Passwords": { + "type": "array", + "$comment": "List of passwords.", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + }, + "description": "Passwords used for this user account. You can create up to two passwords for each user." + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the user account.", + "type": "string" + }, + "AuthenticationMode": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "description": "Authentication Type", + "type": "string", + "enum": [ + "password", + "no-password-required", + "iam" + ] + }, + "Passwords": { + "type": "array", + "$comment": "List of passwords.", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + }, + "description": "Passwords used for this user account. You can create up to two passwords for each user." + } + }, + "required": [ + "Type" + ] + }, + "Tags": { + "description": "An array of key-value pairs to apply to this user.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "UserId", + "UserName", + "Engine" + ], + "readOnlyProperties": [ + "/properties/Status", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/UserId", + "/properties/UserName", + "/properties/Engine" + ], + "writeOnlyProperties": [ + "/properties/Passwords", + "/properties/NoPasswordRequired", + "/properties/AccessString", + "/properties/AuthenticationMode" + ], + "primaryIdentifier": [ + "/properties/UserId" + ], + "handlers": { + "create": { + "permissions": [ + "elasticache:CreateUser", + "elasticache:DescribeUsers", + "elasticache:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "elasticache:DescribeUsers", + "elasticache:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "elasticache:ModifyUser", + "elasticache:DescribeUsers", + "elasticache:ListTagsForResource", + "elasticache:AddTagsToResource", + "elasticache:RemoveTagsFromResource" + ] + }, + "delete": { + "permissions": [ + "elasticache:DeleteUser", + "elasticache:DescribeUsers" + ] + }, + "list": { + "permissions": [ + "elasticache:DescribeUsers", + "elasticache:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticache/usergroup.json b/internal/aws/cfn/schemas/aws/elasticache/usergroup.json new file mode 100644 index 00000000..6f74813d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticache/usergroup.json @@ -0,0 +1,135 @@ +{ + "typeName": "AWS::ElastiCache::UserGroup", + "description": "Resource Type definition for AWS::ElastiCache::UserGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with 'aws:'. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "properties": { + "Status": { + "description": "Indicates user group status. Can be \"creating\", \"active\", \"modifying\", \"deleting\".", + "type": "string" + }, + "UserGroupId": { + "description": "The ID of the user group.", + "pattern": "[a-z][a-z0-9\\\\-]*", + "type": "string" + }, + "Engine": { + "description": "Must be redis.", + "type": "string", + "enum": [ + "redis" + ] + }, + "UserIds": { + "type": "array", + "$comment": "List of users.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "List of users associated to this user group." + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the user account.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this user.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "UserGroupId", + "Engine", + "UserIds" + ], + "readOnlyProperties": [ + "/properties/Status", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/UserGroupId", + "/properties/Engine" + ], + "primaryIdentifier": [ + "/properties/UserGroupId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "elasticache:CreateUserGroup", + "elasticache:DescribeUserGroups", + "elasticache:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "elasticache:DescribeUserGroups", + "elasticache:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "elasticache:ModifyUserGroup", + "elasticache:DescribeUserGroups", + "elasticache:ListTagsForResource", + "elasticache:AddTagsToResource", + "elasticache:RemoveTagsFromResource" + ] + }, + "delete": { + "permissions": [ + "elasticache:ModifyReplicationGroup", + "elasticache:DeleteUserGroup", + "elasticache:DescribeUserGroups", + "elasticache:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "elasticache:DescribeUserGroups", + "elasticache:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticbeanstalk/application.json b/internal/aws/cfn/schemas/aws/elasticbeanstalk/application.json new file mode 100644 index 00000000..beec3294 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticbeanstalk/application.json @@ -0,0 +1,126 @@ +{ + "typeName": "AWS::ElasticBeanstalk::Application", + "description": "The AWS::ElasticBeanstalk::Application resource specifies an Elastic Beanstalk application.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticbeanstalk.git", + "properties": { + "ApplicationName": { + "description": "A name for the Elastic Beanstalk application. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the application name.", + "type": "string" + }, + "Description": { + "description": "Your description of the application.", + "type": "string" + }, + "ResourceLifecycleConfig": { + "description": "Specifies an application resource lifecycle configuration to prevent your application from accumulating too many versions.", + "$ref": "#/definitions/ApplicationResourceLifecycleConfig" + } + }, + "definitions": { + "ApplicationResourceLifecycleConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceRole": { + "description": "The ARN of an IAM service role that Elastic Beanstalk has permission to assume. The ServiceRole property is required the first time that you provide a ResourceLifecycleConfig for the application. After you provide it once, Elastic Beanstalk persists the Service Role with the application, and you don't need to specify it again. You can, however, specify it in subsequent updates to change the Service Role to another value.", + "type": "string" + }, + "VersionLifecycleConfig": { + "description": "Defines lifecycle settings for application versions.", + "$ref": "#/definitions/ApplicationVersionLifecycleConfig" + } + } + }, + "ApplicationVersionLifecycleConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxAgeRule": { + "description": "Specify a max age rule to restrict the length of time that application versions are retained for an application.", + "$ref": "#/definitions/MaxAgeRule" + }, + "MaxCountRule": { + "description": "Specify a max count rule to restrict the number of application versions that are retained for an application.", + "$ref": "#/definitions/MaxCountRule" + } + } + }, + "MaxAgeRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeleteSourceFromS3": { + "description": "Set to true to delete a version's source bundle from Amazon S3 when Elastic Beanstalk deletes the application version.", + "type": "boolean" + }, + "Enabled": { + "description": "Specify true to apply the rule, or false to disable it.", + "type": "boolean" + }, + "MaxAgeInDays": { + "description": "Specify the number of days to retain an application versions.", + "type": "integer" + } + } + }, + "MaxCountRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeleteSourceFromS3": { + "description": "Set to true to delete a version's source bundle from Amazon S3 when Elastic Beanstalk deletes the application version.", + "type": "boolean" + }, + "Enabled": { + "description": "Specify true to apply the rule, or false to disable it.", + "type": "boolean" + }, + "MaxCount": { + "description": "Specify the maximum number of application versions to retain.", + "type": "integer" + } + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/ApplicationName" + ], + "handlers": { + "create": { + "permissions": [ + "elasticbeanstalk:CreateApplication" + ] + }, + "read": { + "permissions": [ + "elasticbeanstalk:DescribeApplications" + ] + }, + "update": { + "permissions": [ + "elasticbeanstalk:UpdateApplication", + "elasticbeanstalk:UpdateApplicationResourceLifecycle" + ] + }, + "delete": { + "permissions": [ + "elasticbeanstalk:DeleteApplication" + ] + }, + "list": { + "permissions": [ + "elasticbeanstalk:DescribeApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticbeanstalk/applicationversion.json b/internal/aws/cfn/schemas/aws/elasticbeanstalk/applicationversion.json new file mode 100644 index 00000000..0dd85382 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticbeanstalk/applicationversion.json @@ -0,0 +1,94 @@ +{ + "typeName": "AWS::ElasticBeanstalk::ApplicationVersion", + "description": "Resource Type definition for AWS::ElasticBeanstalk::ApplicationVersion", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticbeanstalk.git", + "properties": { + "Id": { + "type": "string" + }, + "ApplicationName": { + "description": "The name of the Elastic Beanstalk application that is associated with this application version. ", + "type": "string" + }, + "Description": { + "description": "A description of this application version.", + "type": "string" + }, + "SourceBundle": { + "description": "The Amazon S3 bucket and key that identify the location of the source bundle for this version. ", + "$ref": "#/definitions/SourceBundle" + } + }, + "definitions": { + "SourceBundle": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Bucket": { + "description": "The Amazon S3 bucket where the data is located.", + "type": "string" + }, + "S3Key": { + "description": "The Amazon S3 key where the data is located.", + "type": "string" + } + }, + "required": [ + "S3Bucket", + "S3Key" + ] + } + }, + "required": [ + "ApplicationName", + "SourceBundle" + ], + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/SourceBundle", + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/ApplicationName", + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "elasticbeanstalk:CreateApplicationVersion", + "elasticbeanstalk:DescribeApplicationVersions", + "s3:GetObject", + "s3:PutObject" + ] + }, + "read": { + "permissions": [ + "elasticbeanstalk:DescribeApplicationVersions" + ] + }, + "update": { + "permissions": [ + "elasticbeanstalk:UpdateApplicationVersion" + ] + }, + "delete": { + "permissions": [ + "elasticbeanstalk:DeleteApplicationVersion" + ] + }, + "list": { + "permissions": [ + "elasticbeanstalk:DescribeApplicationVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticbeanstalk/configurationtemplate.json b/internal/aws/cfn/schemas/aws/elasticbeanstalk/configurationtemplate.json new file mode 100644 index 00000000..44a9e834 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticbeanstalk/configurationtemplate.json @@ -0,0 +1,146 @@ +{ + "typeName": "AWS::ElasticBeanstalk::ConfigurationTemplate", + "description": "Resource Type definition for AWS::ElasticBeanstalk::ConfigurationTemplate", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticbeanstalk.git", + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json", + "additionalProperties": false, + "definitions": { + "SourceConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ApplicationName": { + "description": "The name of the application associated with the configuration.", + "type": "string" + }, + "TemplateName": { + "description": "The name of the configuration template.", + "type": "string" + } + }, + "required": [ + "TemplateName", + "ApplicationName" + ] + }, + "ConfigurationOptionSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "Namespace": { + "description": "A unique namespace that identifies the option's associated AWS resource.", + "type": "string" + }, + "OptionName": { + "description": "The name of the configuration option.", + "type": "string" + }, + "ResourceName": { + "description": "A unique resource name for the option setting. Use it for a time–based scaling configuration option. ", + "type": "string" + }, + "Value": { + "description": "The current value for the configuration option.", + "type": "string" + } + }, + "required": [ + "Namespace", + "OptionName" + ] + } + }, + "properties": { + "ApplicationName": { + "description": "The name of the Elastic Beanstalk application to associate with this configuration template. ", + "type": "string" + }, + "Description": { + "description": "An optional description for this configuration.", + "type": "string" + }, + "EnvironmentId": { + "description": "The ID of an environment whose settings you want to use to create the configuration template. You must specify EnvironmentId if you don't specify PlatformArn, SolutionStackName, or SourceConfiguration. ", + "type": "string" + }, + "OptionSettings": { + "description": "Option values for the Elastic Beanstalk configuration, such as the instance type. If specified, these values override the values obtained from the solution stack or the source configuration template. For a complete list of Elastic Beanstalk configuration options, see [Option Values](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html) in the AWS Elastic Beanstalk Developer Guide. ", + "type": "array", + "arrayType": "AttributeList", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConfigurationOptionSetting" + } + }, + "PlatformArn": { + "description": "The Amazon Resource Name (ARN) of the custom platform. For more information, see [Custom Platforms](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platforms.html) in the AWS Elastic Beanstalk Developer Guide. ", + "type": "string" + }, + "SolutionStackName": { + "description": "The name of an Elastic Beanstalk solution stack (platform version) that this configuration uses. For example, 64bit Amazon Linux 2013.09 running Tomcat 7 Java 7. A solution stack specifies the operating system, runtime, and application server for a configuration template. It also determines the set of configuration options as well as the possible and default values. For more information, see [Supported Platforms](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.platforms.html) in the AWS Elastic Beanstalk Developer Guide.\n\n You must specify SolutionStackName if you don't specify PlatformArn, EnvironmentId, or SourceConfiguration.\n\n Use the ListAvailableSolutionStacks API to obtain a list of available solution stacks. ", + "type": "string" + }, + "SourceConfiguration": { + "description": "An Elastic Beanstalk configuration template to base this one on. If specified, Elastic Beanstalk uses the configuration values from the specified configuration template to create a new configuration.\n\nValues specified in OptionSettings override any values obtained from the SourceConfiguration.\n\nYou must specify SourceConfiguration if you don't specify PlatformArn, EnvironmentId, or SolutionStackName.\n\nConstraint: If both solution stack name and source configuration are specified, the solution stack of the source configuration template must match the specified solution stack name. ", + "$ref": "#/definitions/SourceConfiguration" + }, + "TemplateName": { + "description": "The name of the configuration template", + "type": "string" + } + }, + "required": [ + "ApplicationName" + ], + "tagging": { + "taggable": false + }, + "createOnlyProperties": [ + "/properties/ApplicationName", + "/properties/EnvironmentId", + "/properties/PlatformArn", + "/properties/SolutionStackName", + "/properties/SourceConfiguration" + ], + "primaryIdentifier": [ + "/properties/ApplicationName", + "/properties/TemplateName" + ], + "readOnlyProperties": [ + "/properties/TemplateName" + ], + "writeOnlyProperties": [ + "/properties/EnvironmentId", + "/properties/SourceConfiguration/ApplicationName", + "/properties/SourceConfiguration/TemplateName" + ], + "handlers": { + "create": { + "permissions": [ + "elasticbeanstalk:CreateConfigurationTemplate" + ] + }, + "read": { + "permissions": [ + "elasticbeanstalk:DescribeConfigurationSettings" + ] + }, + "update": { + "permissions": [ + "elasticbeanstalk:UpdateConfigurationTemplate" + ] + }, + "delete": { + "permissions": [ + "elasticbeanstalk:DeleteConfigurationTemplate", + "elasticbeanstalk:DescribeConfigurationSettings" + ] + }, + "list": { + "permissions": [ + "elasticbeanstalk:DescribeApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticbeanstalk/environment.json b/internal/aws/cfn/schemas/aws/elasticbeanstalk/environment.json new file mode 100644 index 00000000..6712610b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticbeanstalk/environment.json @@ -0,0 +1,205 @@ +{ + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": false + }, + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json", + "typeName": "AWS::ElasticBeanstalk::Environment", + "readOnlyProperties": [ + "/properties/EndpointURL" + ], + "description": "Resource Type definition for AWS::ElasticBeanstalk::Environment", + "createOnlyProperties": [ + "/properties/CNAMEPrefix", + "/properties/EnvironmentName", + "/properties/ApplicationName", + "/properties/SolutionStackName", + "/properties/Tier/Name", + "/properties/Tier/Type" + ], + "primaryIdentifier": [ + "/properties/EnvironmentName" + ], + "required": [ + "ApplicationName" + ], + "handlers": { + "read": { + "permissions": [ + "elasticbeanstalk:DescribeEnvironments", + "elasticbeanstalk:DescribeConfigurationSettings", + "elasticbeanstalk:ListTagsForResource" + ] + }, + "create": { + "permissions": [ + "elasticbeanstalk:DescribeEnvironments", + "elasticbeanstalk:CreateEnvironment", + "iam:PassRole" + ], + "timeoutInMinutes": 120 + }, + "update": { + "permissions": [ + "elasticbeanstalk:DescribeEnvironments", + "elasticbeanstalk:UpdateEnvironment", + "elasticbeanstalk:UpdateTagsForResource", + "elasticbeanstalk:AssociateEnvironmentOperationsRole", + "elasticbeanstalk:DisassociateEnvironmentOperationsRole", + "iam:PassRole" + ], + "timeoutInMinutes": 300 + }, + "list": { + "permissions": [ + "elasticbeanstalk:DescribeEnvironments" + ] + }, + "delete": { + "permissions": [ + "elasticbeanstalk:DescribeEnvironments", + "elasticbeanstalk:TerminateEnvironment" + ], + "timeoutInMinutes": 210 + } + }, + "writeOnlyProperties": [ + "/properties/TemplateName", + "/properties/OptionSettings", + "/properties/OptionSettings/*/OptionName", + "/properties/OptionSettings/*/ResourceName", + "/properties/OptionSettings/*/Namespace", + "/properties/OptionSettings/*/Value" + ], + "additionalProperties": false, + "definitions": { + "Tier": { + "additionalProperties": false, + "type": "object", + "properties": { + "Type": { + "description": "The type of this environment tier.", + "type": "string" + }, + "Version": { + "description": "The version of this environment tier. When you don't set a value to it, Elastic Beanstalk uses the latest compatible worker tier version.", + "type": "string" + }, + "Name": { + "description": "The name of this environment tier.", + "type": "string" + } + } + }, + "OptionSetting": { + "additionalProperties": false, + "type": "object", + "properties": { + "ResourceName": { + "description": "A unique resource name for the option setting. Use it for a time–based scaling configuration option.", + "type": "string" + }, + "Value": { + "description": "The current value for the configuration option.", + "type": "string" + }, + "Namespace": { + "description": "A unique namespace that identifies the option's associated AWS resource.", + "type": "string" + }, + "OptionName": { + "description": "The name of the configuration option.", + "type": "string" + } + }, + "required": [ + "Namespace", + "OptionName" + ] + }, + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "description": "The value for the tag.", + "type": "string" + }, + "Key": { + "description": "The key name of the tag.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "PlatformArn": { + "description": "The Amazon Resource Name (ARN) of the custom platform to use with the environment.", + "type": "string" + }, + "ApplicationName": { + "description": "The name of the application that is associated with this environment.", + "type": "string" + }, + "Description": { + "description": "Your description for this environment.", + "type": "string" + }, + "EnvironmentName": { + "description": "A unique name for the environment.", + "type": "string" + }, + "OperationsRole": { + "description": "The Amazon Resource Name (ARN) of an existing IAM role to be used as the environment's operations role.", + "type": "string" + }, + "Tier": { + "description": "Specifies the tier to use in creating this environment. The environment tier that you choose determines whether Elastic Beanstalk provisions resources to support a web application that handles HTTP(S) requests or a web application that handles background-processing tasks.", + "$ref": "#/definitions/Tier" + }, + "VersionLabel": { + "description": "The name of the application version to deploy.", + "type": "string" + }, + "EndpointURL": { + "type": "string" + }, + "OptionSettings": { + "uniqueItems": false, + "description": "Key-value pairs defining configuration options for this environment, such as the instance type.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/OptionSetting" + } + }, + "TemplateName": { + "description": "The name of the Elastic Beanstalk configuration template to use with the environment.", + "type": "string" + }, + "SolutionStackName": { + "description": "The name of an Elastic Beanstalk solution stack (platform version) to use with the environment.", + "type": "string" + }, + "CNAMEPrefix": { + "description": "If specified, the environment attempts to use this value as the prefix for the CNAME in your Elastic Beanstalk environment URL. If not specified, the CNAME is generated automatically by appending a random alphanumeric string to the environment name.", + "type": "string" + }, + "Tags": { + "uniqueItems": false, + "description": "Specifies the tags applied to resources in the environment.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticloadbalancing/loadbalancer.json b/internal/aws/cfn/schemas/aws/elasticloadbalancing/loadbalancer.json new file mode 100644 index 00000000..5c65ee2a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticloadbalancing/loadbalancer.json @@ -0,0 +1,321 @@ +{ + "typeName": "AWS::ElasticLoadBalancing::LoadBalancer", + "description": "Resource Type definition for AWS::ElasticLoadBalancing::LoadBalancer", + "additionalProperties": false, + "properties": { + "SecurityGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ConnectionDrainingPolicy": { + "$ref": "#/definitions/ConnectionDrainingPolicy" + }, + "Policies": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Policies" + } + }, + "Scheme": { + "type": "string" + }, + "AvailabilityZones": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "SourceSecurityGroupOwnerAlias": { + "type": "string" + }, + "HealthCheck": { + "$ref": "#/definitions/HealthCheck" + }, + "CanonicalHostedZoneNameID": { + "type": "string" + }, + "CanonicalHostedZoneName": { + "type": "string" + }, + "DNSName": { + "type": "string" + }, + "AccessLoggingPolicy": { + "$ref": "#/definitions/AccessLoggingPolicy" + }, + "Instances": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "LoadBalancerName": { + "type": "string" + }, + "Listeners": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Listeners" + } + }, + "Subnets": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "CrossZone": { + "type": "boolean" + }, + "AppCookieStickinessPolicy": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AppCookieStickinessPolicy" + } + }, + "LBCookieStickinessPolicy": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/LBCookieStickinessPolicy" + } + }, + "Id": { + "type": "string" + }, + "SourceSecurityGroupGroupName": { + "type": "string" + }, + "ConnectionSettings": { + "$ref": "#/definitions/ConnectionSettings" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Listeners": { + "type": "object", + "additionalProperties": false, + "properties": { + "PolicyNames": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "InstancePort": { + "type": "string" + }, + "LoadBalancerPort": { + "type": "string" + }, + "Protocol": { + "type": "string" + }, + "SSLCertificateId": { + "type": "string" + }, + "InstanceProtocol": { + "type": "string" + } + }, + "required": [ + "InstancePort", + "LoadBalancerPort", + "Protocol" + ] + }, + "ConnectionDrainingPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "Timeout": { + "type": "integer" + } + }, + "required": [ + "Enabled" + ] + }, + "Policies": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object" + } + }, + "PolicyType": { + "type": "string" + }, + "LoadBalancerPorts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "PolicyName": { + "type": "string" + }, + "InstancePorts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "PolicyType", + "PolicyName", + "Attributes" + ] + }, + "AppCookieStickinessPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "CookieName": { + "type": "string" + }, + "PolicyName": { + "type": "string" + } + }, + "required": [ + "PolicyName", + "CookieName" + ] + }, + "LBCookieStickinessPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "CookieExpirationPeriod": { + "type": "string" + }, + "PolicyName": { + "type": "string" + } + } + }, + "HealthCheck": { + "type": "object", + "additionalProperties": false, + "properties": { + "Target": { + "type": "string" + }, + "UnhealthyThreshold": { + "type": "string" + }, + "Timeout": { + "type": "string" + }, + "HealthyThreshold": { + "type": "string" + }, + "Interval": { + "type": "string" + } + }, + "required": [ + "Target", + "UnhealthyThreshold", + "Timeout", + "HealthyThreshold", + "Interval" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "AccessLoggingPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "S3BucketName": { + "type": "string" + }, + "EmitInterval": { + "type": "integer" + }, + "S3BucketPrefix": { + "type": "string" + } + }, + "required": [ + "Enabled", + "S3BucketName" + ] + }, + "ConnectionSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "IdleTimeout": { + "type": "integer" + } + }, + "required": [ + "IdleTimeout" + ] + } + }, + "required": [ + "Listeners" + ], + "createOnlyProperties": [ + "/properties/LoadBalancerName", + "/properties/Scheme" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/CanonicalHostedZoneName", + "/properties/CanonicalHostedZoneNameID", + "/properties/SourceSecurityGroup.GroupName", + "/properties/DNSName", + "/properties/SourceSecurityGroup.OwnerAlias" + ] +} diff --git a/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listener.json b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listener.json new file mode 100644 index 00000000..14b56fd3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listener.json @@ -0,0 +1,430 @@ +{ + "typeName": "AWS::ElasticLoadBalancingV2::Listener", + "description": "Specifies a listener for an Application Load Balancer, Network Load Balancer, or Gateway Load Balancer.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "additionalProperties": false, + "properties": { + "SslPolicy": { + "type": "string", + "description": "[HTTPS and TLS listeners] The security policy that defines which protocols and ciphers are supported.\n For more information, see [Security policies](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies) in the *Application Load Balancers Guide* and [Security policies](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#describe-ssl-policies) in the *Network Load Balancers Guide*." + }, + "LoadBalancerArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the load balancer." + }, + "DefaultActions": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Action" + }, + "description": "The actions for the default rule. You cannot define a condition for a default rule.\n To create additional rules for an Application Load Balancer, use [AWS::ElasticLoadBalancingV2::ListenerRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html)." + }, + "Port": { + "type": "integer", + "description": "The port on which the load balancer is listening. You cannot specify a port for a Gateway Load Balancer." + }, + "Certificates": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Certificate" + }, + "description": "The default SSL server certificate for a secure listener. You must provide exactly one certificate if the listener protocol is HTTPS or TLS.\n To create a certificate list for a secure listener, use [AWS::ElasticLoadBalancingV2::ListenerCertificate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenercertificate.html)." + }, + "Protocol": { + "type": "string", + "description": "The protocol for connections from clients to the load balancer. For Application Load Balancers, the supported protocols are HTTP and HTTPS. For Network Load Balancers, the supported protocols are TCP, TLS, UDP, and TCP_UDP. You can?t specify the UDP or TCP_UDP protocol if dual-stack mode is enabled. You cannot specify a protocol for a Gateway Load Balancer." + }, + "ListenerArn": { + "type": "string", + "description": "" + }, + "AlpnPolicy": { + "type": "array", + "items": { + "type": "string" + }, + "description": "[TLS listener] The name of the Application-Layer Protocol Negotiation (ALPN) policy." + }, + "MutualAuthentication": { + "$ref": "#/definitions/MutualAuthentication", + "description": "The mutual authentication configuration information." + } + }, + "definitions": { + "MutualAuthentication": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mode": { + "type": "string", + "description": "The client certificate handling method. Options are ``off``, ``passthrough`` or ``verify``. The default value is ``off``." + }, + "TrustStoreArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the trust store." + }, + "IgnoreClientCertificateExpiry": { + "type": "boolean", + "description": "Indicates whether expired client certificates are ignored." + } + }, + "description": "Specifies the configuration information for mutual authentication." + }, + "FixedResponseConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContentType": { + "type": "string", + "description": "The content type.\n Valid Values: text/plain | text/css | text/html | application/javascript | application/json" + }, + "StatusCode": { + "type": "string", + "description": "The HTTP response code (2XX, 4XX, or 5XX)." + }, + "MessageBody": { + "type": "string", + "description": "The message." + } + }, + "required": [ + "StatusCode" + ], + "description": "Specifies information required when returning a custom HTTP response." + }, + "TargetGroupTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetGroupArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the target group." + }, + "Weight": { + "type": "integer", + "description": "The weight. The range is 0 to 999." + } + }, + "description": "Information about how traffic will be distributed between multiple target groups in a forward rule." + }, + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "Order": { + "type": "integer", + "description": "The order for the action. This value is required for rules with multiple actions. The action with the lowest value for order is performed first." + }, + "TargetGroupArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the target group. Specify only when ``Type`` is ``forward`` and you want to route to a single target group. To route to one or more target groups, use ``ForwardConfig`` instead." + }, + "FixedResponseConfig": { + "$ref": "#/definitions/FixedResponseConfig", + "description": "[Application Load Balancer] Information for creating an action that returns a custom HTTP response. Specify only when ``Type`` is ``fixed-response``." + }, + "AuthenticateCognitoConfig": { + "$ref": "#/definitions/AuthenticateCognitoConfig", + "description": "[HTTPS listeners] Information for using Amazon Cognito to authenticate users. Specify only when ``Type`` is ``authenticate-cognito``." + }, + "Type": { + "type": "string", + "description": "The type of action." + }, + "RedirectConfig": { + "$ref": "#/definitions/RedirectConfig", + "description": "[Application Load Balancer] Information for creating a redirect action. Specify only when ``Type`` is ``redirect``." + }, + "ForwardConfig": { + "$ref": "#/definitions/ForwardConfig", + "description": "Information for creating an action that distributes requests among one or more target groups. For Network Load Balancers, you can specify a single target group. Specify only when ``Type`` is ``forward``. If you specify both ``ForwardConfig`` and ``TargetGroupArn``, you can specify only one target group using ``ForwardConfig`` and it must be the same target group specified in ``TargetGroupArn``." + }, + "AuthenticateOidcConfig": { + "$ref": "#/definitions/AuthenticateOidcConfig", + "description": "[HTTPS listeners] Information about an identity provider that is compliant with OpenID Connect (OIDC). Specify only when ``Type`` is ``authenticate-oidc``." + } + }, + "required": [ + "Type" + ], + "description": "Specifies an action for a listener rule." + }, + "AuthenticateCognitoConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "OnUnauthenticatedRequest": { + "type": "string", + "description": "The behavior if the user is not authenticated. The following are possible values:\n + deny```` - Return an HTTP 401 Unauthorized error.\n + allow```` - Allow the request to be forwarded to the target.\n + authenticate```` - Redirect the request to the IdP authorization endpoint. This is the default value." + }, + "UserPoolClientId": { + "type": "string", + "description": "The ID of the Amazon Cognito user pool client." + }, + "UserPoolDomain": { + "type": "string", + "description": "The domain prefix or fully-qualified domain name of the Amazon Cognito user pool." + }, + "SessionTimeout": { + "type": "string", + "description": "The maximum duration of the authentication session, in seconds. The default is 604800 seconds (7 days)." + }, + "Scope": { + "type": "string", + "description": "The set of user claims to be requested from the IdP. The default is ``openid``.\n To verify which scope values your IdP supports and how to separate multiple values, see the documentation for your IdP." + }, + "SessionCookieName": { + "type": "string", + "description": "The name of the cookie used to maintain session information. The default is AWSELBAuthSessionCookie." + }, + "UserPoolArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the Amazon Cognito user pool." + }, + "AuthenticationRequestExtraParams": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "description": "The query parameters (up to 10) to include in the redirect request to the authorization endpoint." + } + }, + "required": [ + "UserPoolClientId", + "UserPoolDomain", + "UserPoolArn" + ], + "description": "Specifies information required when integrating with Amazon Cognito to authenticate users." + }, + "RedirectConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string", + "description": "The absolute path, starting with the leading \"/\". This component is not percent-encoded. The path can contain #{host}, #{path}, and #{port}." + }, + "Query": { + "type": "string", + "description": "The query parameters, URL-encoded when necessary, but not percent-encoded. Do not include the leading \"?\", as it is automatically added. You can specify any of the reserved keywords." + }, + "Port": { + "type": "string", + "description": "The port. You can specify a value from 1 to 65535 or #{port}." + }, + "Host": { + "type": "string", + "description": "The hostname. This component is not percent-encoded. The hostname can contain #{host}." + }, + "Protocol": { + "type": "string", + "description": "The protocol. You can specify HTTP, HTTPS, or #{protocol}. You can redirect HTTP to HTTP, HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS to HTTP." + }, + "StatusCode": { + "type": "string", + "description": "The HTTP redirect code. The redirect is either permanent (HTTP 301) or temporary (HTTP 302)." + } + }, + "required": [ + "StatusCode" + ], + "description": "Information about a redirect action.\n A URI consists of the following components: protocol://hostname:port/path?query. You must modify at least one of the following components to avoid a redirect loop: protocol, hostname, port, or path. Any components that you do not modify retain their original values.\n You can reuse URI components using the following reserved keywords:\n + #{protocol}\n + #{host}\n + #{port}\n + #{path} (the leading \"/\" is removed)\n + #{query}\n \n For example, you can change the path to \"/new/#{path}\", the hostname to \"example.#{host}\", or the query to \"#{query}&value=xyz\"." + }, + "TargetGroupStickinessConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean", + "description": "Indicates whether target group stickiness is enabled." + }, + "DurationSeconds": { + "type": "integer", + "description": "The time period, in seconds, during which requests from a client should be routed to the same target group. The range is 1-604800 seconds (7 days)." + } + }, + "description": "Information about the target group stickiness for a rule." + }, + "ForwardConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetGroupStickinessConfig": { + "$ref": "#/definitions/TargetGroupStickinessConfig", + "description": "Information about the target group stickiness for a rule." + }, + "TargetGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TargetGroupTuple" + }, + "description": "Information about how traffic will be distributed between multiple target groups in a forward rule." + } + }, + "description": "Information for creating an action that distributes requests among one or more target groups. For Network Load Balancers, you can specify a single target group. Specify only when ``Type`` is ``forward``. If you specify both ``ForwardConfig`` and ``TargetGroupArn``, you can specify only one target group using ``ForwardConfig`` and it must be the same target group specified in ``TargetGroupArn``." + }, + "AuthenticateOidcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "OnUnauthenticatedRequest": { + "type": "string", + "description": "The behavior if the user is not authenticated. The following are possible values:\n + deny```` - Return an HTTP 401 Unauthorized error.\n + allow```` - Allow the request to be forwarded to the target.\n + authenticate```` - Redirect the request to the IdP authorization endpoint. This is the default value." + }, + "TokenEndpoint": { + "type": "string", + "description": "The token endpoint of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "SessionTimeout": { + "type": "string", + "description": "The maximum duration of the authentication session, in seconds. The default is 604800 seconds (7 days)." + }, + "Scope": { + "type": "string", + "description": "The set of user claims to be requested from the IdP. The default is ``openid``.\n To verify which scope values your IdP supports and how to separate multiple values, see the documentation for your IdP." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer identifier of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "ClientSecret": { + "type": "string", + "description": "The OAuth 2.0 client secret. This parameter is required if you are creating a rule. If you are modifying a rule, you can omit this parameter if you set ``UseExistingClientSecret`` to true." + }, + "UserInfoEndpoint": { + "type": "string", + "description": "The user info endpoint of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "ClientId": { + "type": "string", + "description": "The OAuth 2.0 client identifier." + }, + "AuthorizationEndpoint": { + "type": "string", + "description": "The authorization endpoint of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "SessionCookieName": { + "type": "string", + "description": "The name of the cookie used to maintain session information. The default is AWSELBAuthSessionCookie." + }, + "UseExistingClientSecret": { + "type": "boolean", + "description": "Indicates whether to use the existing client secret when modifying a rule. If you are creating a rule, you can omit this parameter or set it to false." + }, + "AuthenticationRequestExtraParams": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "description": "The query parameters (up to 10) to include in the redirect request to the authorization endpoint." + } + }, + "required": [ + "TokenEndpoint", + "Issuer", + "UserInfoEndpoint", + "ClientId", + "AuthorizationEndpoint" + ], + "description": "Specifies information required using an identity provide (IdP) that is compliant with OpenID Connect (OIDC) to authenticate users." + }, + "Certificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the certificate." + } + }, + "description": "Specifies an SSL server certificate to use as the default certificate for a secure listener." + } + }, + "required": [ + "LoadBalancerArn", + "DefaultActions" + ], + "createOnlyProperties": [ + "/properties/LoadBalancerArn" + ], + "primaryIdentifier": [ + "/properties/ListenerArn" + ], + "readOnlyProperties": [ + "/properties/ListenerArn" + ], + "writeOnlyProperties": [ + "/properties/DefaultActions/*/AuthenticateOidcConfig/ClientSecret" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:DescribeListeners", + "cognito-idp:DescribeUserPoolClient" + ] + }, + "delete": { + "permissions": [ + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:DescribeListeners" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "LoadBalancerArn": { + "$ref": "resource-schema.json#/properties/LoadBalancerArn" + }, + "ListenerArns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "resource-schema.json#/properties/ListenerArn" + } + } + }, + "oneOf": [ + { + "required": [ + "LoadBalancerArn" + ] + }, + { + "required": [ + "ListenerArns" + ] + } + ] + }, + "permissions": [ + "elasticloadbalancing:DescribeListeners" + ] + }, + "read": { + "permissions": [ + "elasticloadbalancing:DescribeListeners" + ] + }, + "update": { + "permissions": [ + "elasticloadbalancing:ModifyListener", + "elasticloadbalancing:DescribeListeners", + "cognito-idp:DescribeUserPoolClient" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenercertificate.json b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenercertificate.json new file mode 100644 index 00000000..1569acf5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenercertificate.json @@ -0,0 +1,44 @@ +{ + "typeName": "AWS::ElasticLoadBalancingV2::ListenerCertificate", + "description": "Resource Type definition for AWS::ElasticLoadBalancingV2::ListenerCertificate", + "additionalProperties": false, + "properties": { + "ListenerArn": { + "type": "string" + }, + "Certificates": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Certificate" + } + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "Certificate": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateArn": { + "type": "string" + } + } + } + }, + "required": [ + "ListenerArn", + "Certificates" + ], + "createOnlyProperties": [ + "/properties/ListenerArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenerrule.json b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenerrule.json new file mode 100644 index 00000000..d8ee51e1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/listenerrule.json @@ -0,0 +1,553 @@ +{ + "typeName": "AWS::ElasticLoadBalancingV2::ListenerRule", + "description": "Specifies a listener rule. The listener must be associated with an Application Load Balancer. Each rule consists of a priority, one or more actions, and one or more conditions.\n For more information, see [Quotas for your Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html) in the *User Guide for Application Load Balancers*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", + "additionalProperties": false, + "properties": { + "ListenerArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the listener." + }, + "RuleArn": { + "type": "string", + "description": "" + }, + "Actions": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Action" + }, + "description": "The actions.\n The rule must include exactly one of the following types of actions: ``forward``, ``fixed-response``, or ``redirect``, and it must be the last action to be performed. If the rule is for an HTTPS listener, it can also optionally include an authentication action." + }, + "Priority": { + "type": "integer", + "description": "The rule priority. A listener can't have multiple rules with the same priority.\n If you try to reorder rules by updating their priorities, do not specify a new priority if an existing rule already uses this priority, as this can cause an error. If you need to reuse a priority with a different rule, you must remove it as a priority first, and then specify it in a subsequent update." + }, + "Conditions": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RuleCondition" + }, + "description": "The conditions.\n The rule can optionally include up to one of each of the following conditions: ``http-request-method``, ``host-header``, ``path-pattern``, and ``source-ip``. A rule can also optionally include one or more of each of the following conditions: ``http-header`` and ``query-string``." + }, + "IsDefault": { + "type": "boolean", + "description": "" + } + }, + "definitions": { + "TargetGroupTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetGroupArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the target group." + }, + "Weight": { + "type": "integer", + "description": "The weight. The range is 0 to 999." + } + }, + "description": "Information about how traffic will be distributed between multiple target groups in a forward rule." + }, + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "Order": { + "type": "integer", + "description": "The order for the action. This value is required for rules with multiple actions. The action with the lowest value for order is performed first." + }, + "TargetGroupArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the target group. Specify only when ``Type`` is ``forward`` and you want to route to a single target group. To route to one or more target groups, use ``ForwardConfig`` instead." + }, + "FixedResponseConfig": { + "$ref": "#/definitions/FixedResponseConfig", + "description": "[Application Load Balancer] Information for creating an action that returns a custom HTTP response. Specify only when ``Type`` is ``fixed-response``." + }, + "AuthenticateCognitoConfig": { + "$ref": "#/definitions/AuthenticateCognitoConfig", + "description": "[HTTPS listeners] Information for using Amazon Cognito to authenticate users. Specify only when ``Type`` is ``authenticate-cognito``." + }, + "Type": { + "type": "string", + "description": "The type of action." + }, + "RedirectConfig": { + "$ref": "#/definitions/RedirectConfig", + "description": "[Application Load Balancer] Information for creating a redirect action. Specify only when ``Type`` is ``redirect``." + }, + "ForwardConfig": { + "$ref": "#/definitions/ForwardConfig", + "description": "Information for creating an action that distributes requests among one or more target groups. For Network Load Balancers, you can specify a single target group. Specify only when ``Type`` is ``forward``. If you specify both ``ForwardConfig`` and ``TargetGroupArn``, you can specify only one target group using ``ForwardConfig`` and it must be the same target group specified in ``TargetGroupArn``." + }, + "AuthenticateOidcConfig": { + "$ref": "#/definitions/AuthenticateOidcConfig", + "description": "[HTTPS listeners] Information about an identity provider that is compliant with OpenID Connect (OIDC). Specify only when ``Type`` is ``authenticate-oidc``." + } + }, + "required": [ + "Type" + ], + "description": "Specifies an action for a listener rule." + }, + "RuleCondition": { + "type": "object", + "additionalProperties": false, + "properties": { + "Field": { + "type": "string", + "description": "The field in the HTTP request. The following are the possible values:\n + ``http-header`` \n + ``http-request-method`` \n + ``host-header`` \n + ``path-pattern`` \n + ``query-string`` \n + ``source-ip``" + }, + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The condition value. Specify only when ``Field`` is ``host-header`` or ``path-pattern``. Alternatively, to specify multiple host names or multiple path patterns, use ``HostHeaderConfig`` or ``PathPatternConfig``.\n If ``Field`` is ``host-header`` and you're not using ``HostHeaderConfig``, you can specify a single host name (for example, my.example.com). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters.\n + A-Z, a-z, 0-9\n + - .\n + * (matches 0 or more characters)\n + ? (matches exactly 1 character)\n \n If ``Field`` is ``path-pattern`` and you're not using ``PathPatternConfig``, you can specify a single path pattern (for example, /img/*). A path pattern is case-sensitive, can be up to 128 characters in length, and can contain any of the following characters.\n + A-Z, a-z, 0-9\n + _ - . $ / ~ \" ' @ : +\n + & (using &)\n + * (matches 0 or more characters)\n + ? (matches exactly 1 character)" + }, + "HttpRequestMethodConfig": { + "$ref": "#/definitions/HttpRequestMethodConfig", + "description": "Information for an HTTP method condition. Specify only when ``Field`` is ``http-request-method``." + }, + "PathPatternConfig": { + "$ref": "#/definitions/PathPatternConfig", + "description": "Information for a path pattern condition. Specify only when ``Field`` is ``path-pattern``." + }, + "HttpHeaderConfig": { + "$ref": "#/definitions/HttpHeaderConfig", + "description": "Information for an HTTP header condition. Specify only when ``Field`` is ``http-header``." + }, + "SourceIpConfig": { + "$ref": "#/definitions/SourceIpConfig", + "description": "Information for a source IP condition. Specify only when ``Field`` is ``source-ip``." + }, + "HostHeaderConfig": { + "$ref": "#/definitions/HostHeaderConfig", + "description": "Information for a host header condition. Specify only when ``Field`` is ``host-header``." + }, + "QueryStringConfig": { + "$ref": "#/definitions/QueryStringConfig", + "description": "Information for a query string condition. Specify only when ``Field`` is ``query-string``." + } + }, + "description": "Specifies a condition for a listener rule." + }, + "QueryStringConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/QueryStringKeyValue" + }, + "description": "The key/value pairs or values to find in the query string. The maximum size of each string is 128 characters. The comparison is case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character). To search for a literal '*' or '?' character in a query string, you must escape these characters in ``Values`` using a '\\' character.\n If you specify multiple key/value pairs or values, the condition is satisfied if one of them is found in the query string." + } + }, + "description": "Information about a query string condition.\n The query string component of a URI starts after the first '?' character and is terminated by either a '#' character or the end of the URI. A typical query string contains key/value pairs separated by '&' characters. The allowed characters are specified by RFC 3986. Any character can be percentage encoded." + }, + "TargetGroupStickinessConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean", + "description": "Indicates whether target group stickiness is enabled." + }, + "DurationSeconds": { + "type": "integer", + "description": "The time period, in seconds, during which requests from a client should be routed to the same target group. The range is 1-604800 seconds (7 days)." + } + }, + "description": "Information about the target group stickiness for a rule." + }, + "PathPatternConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The path patterns to compare against the request URL. The maximum size of each string is 128 characters. The comparison is case sensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).\n If you specify multiple strings, the condition is satisfied if one of them matches the request URL. The path pattern is compared only to the path of the URL, not to its query string." + } + }, + "description": "Information about a path pattern condition." + }, + "FixedResponseConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContentType": { + "type": "string", + "description": "The content type.\n Valid Values: text/plain | text/css | text/html | application/javascript | application/json" + }, + "StatusCode": { + "type": "string", + "description": "The HTTP response code (2XX, 4XX, or 5XX)." + }, + "MessageBody": { + "type": "string", + "description": "The message." + } + }, + "required": [ + "StatusCode" + ], + "description": "Specifies information required when returning a custom HTTP response." + }, + "HttpHeaderConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The strings to compare against the value of the HTTP header. The maximum size of each string is 128 characters. The comparison strings are case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).\n If the same header appears multiple times in the request, we search them in order until a match is found.\n If you specify multiple strings, the condition is satisfied if one of the strings matches the value of the HTTP header. To require that all of the strings are a match, create one condition per string." + }, + "HttpHeaderName": { + "type": "string", + "description": "The name of the HTTP header field. The maximum size is 40 characters. The header name is case insensitive. The allowed characters are specified by RFC 7230. Wildcards are not supported." + } + }, + "description": "Information about an HTTP header condition.\n There is a set of standard HTTP header fields. You can also define custom HTTP header fields." + }, + "AuthenticateCognitoConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "OnUnauthenticatedRequest": { + "type": "string", + "description": "The behavior if the user is not authenticated. The following are possible values:\n + deny```` - Return an HTTP 401 Unauthorized error.\n + allow```` - Allow the request to be forwarded to the target.\n + authenticate```` - Redirect the request to the IdP authorization endpoint. This is the default value." + }, + "UserPoolClientId": { + "type": "string", + "description": "The ID of the Amazon Cognito user pool client." + }, + "UserPoolDomain": { + "type": "string", + "description": "The domain prefix or fully-qualified domain name of the Amazon Cognito user pool." + }, + "SessionTimeout": { + "type": "integer", + "description": "The maximum duration of the authentication session, in seconds. The default is 604800 seconds (7 days)." + }, + "Scope": { + "type": "string", + "description": "The set of user claims to be requested from the IdP. The default is ``openid``.\n To verify which scope values your IdP supports and how to separate multiple values, see the documentation for your IdP." + }, + "SessionCookieName": { + "type": "string", + "description": "The name of the cookie used to maintain session information. The default is AWSELBAuthSessionCookie." + }, + "UserPoolArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the Amazon Cognito user pool." + }, + "AuthenticationRequestExtraParams": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "description": "The query parameters (up to 10) to include in the redirect request to the authorization endpoint." + } + }, + "required": [ + "UserPoolClientId", + "UserPoolDomain", + "UserPoolArn" + ], + "description": "Specifies information required when integrating with Amazon Cognito to authenticate users." + }, + "RedirectConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string", + "description": "The absolute path, starting with the leading \"/\". This component is not percent-encoded. The path can contain #{host}, #{path}, and #{port}." + }, + "Query": { + "type": "string", + "description": "The query parameters, URL-encoded when necessary, but not percent-encoded. Do not include the leading \"?\", as it is automatically added. You can specify any of the reserved keywords." + }, + "Port": { + "type": "string", + "description": "The port. You can specify a value from 1 to 65535 or #{port}." + }, + "Host": { + "type": "string", + "description": "The hostname. This component is not percent-encoded. The hostname can contain #{host}." + }, + "Protocol": { + "type": "string", + "description": "The protocol. You can specify HTTP, HTTPS, or #{protocol}. You can redirect HTTP to HTTP, HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS to HTTP." + }, + "StatusCode": { + "type": "string", + "description": "The HTTP redirect code. The redirect is either permanent (HTTP 301) or temporary (HTTP 302)." + } + }, + "required": [ + "StatusCode" + ], + "description": "Information about a redirect action.\n A URI consists of the following components: protocol://hostname:port/path?query. You must modify at least one of the following components to avoid a redirect loop: protocol, hostname, port, or path. Any components that you do not modify retain their original values.\n You can reuse URI components using the following reserved keywords:\n + #{protocol}\n + #{host}\n + #{port}\n + #{path} (the leading \"/\" is removed)\n + #{query}\n \n For example, you can change the path to \"/new/#{path}\", the hostname to \"example.#{host}\", or the query to \"#{query}&value=xyz\"." + }, + "QueryStringKeyValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The value." + }, + "Key": { + "type": "string", + "description": "The key. You can omit the key." + } + }, + "description": "Information about a key/value pair." + }, + "ForwardConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetGroupStickinessConfig": { + "$ref": "#/definitions/TargetGroupStickinessConfig", + "description": "Information about the target group stickiness for a rule." + }, + "TargetGroups": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TargetGroupTuple" + }, + "description": "Information about how traffic will be distributed between multiple target groups in a forward rule." + } + }, + "description": "Information for creating an action that distributes requests among one or more target groups. For Network Load Balancers, you can specify a single target group. Specify only when ``Type`` is ``forward``. If you specify both ``ForwardConfig`` and ``TargetGroupArn``, you can specify only one target group using ``ForwardConfig`` and it must be the same target group specified in ``TargetGroupArn``." + }, + "HostHeaderConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The host names. The maximum size of each name is 128 characters. The comparison is case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).\n If you specify multiple strings, the condition is satisfied if one of the strings matches the host name." + } + }, + "description": "Information about a host header condition." + }, + "HttpRequestMethodConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The name of the request method. The maximum size is 40 characters. The allowed characters are A-Z, hyphen (-), and underscore (_). The comparison is case sensitive. Wildcards are not supported; therefore, the method name must be an exact match.\n If you specify multiple strings, the condition is satisfied if one of the strings matches the HTTP request method. We recommend that you route GET and HEAD requests in the same way, because the response to a HEAD request may be cached." + } + }, + "description": "Information about an HTTP method condition.\n HTTP defines a set of request methods, also referred to as HTTP verbs. For more information, see the [HTTP Method Registry](https://docs.aws.amazon.com/https://www.iana.org/assignments/http-methods/http-methods.xhtml). You can also define custom HTTP methods." + }, + "AuthenticateOidcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "OnUnauthenticatedRequest": { + "type": "string", + "description": "The behavior if the user is not authenticated. The following are possible values:\n + deny```` - Return an HTTP 401 Unauthorized error.\n + allow```` - Allow the request to be forwarded to the target.\n + authenticate```` - Redirect the request to the IdP authorization endpoint. This is the default value." + }, + "TokenEndpoint": { + "type": "string", + "description": "The token endpoint of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "SessionTimeout": { + "type": "integer", + "description": "The maximum duration of the authentication session, in seconds. The default is 604800 seconds (7 days)." + }, + "Scope": { + "type": "string", + "description": "The set of user claims to be requested from the IdP. The default is ``openid``.\n To verify which scope values your IdP supports and how to separate multiple values, see the documentation for your IdP." + }, + "Issuer": { + "type": "string", + "description": "The OIDC issuer identifier of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "ClientSecret": { + "type": "string", + "description": "The OAuth 2.0 client secret. This parameter is required if you are creating a rule. If you are modifying a rule, you can omit this parameter if you set ``UseExistingClientSecret`` to true." + }, + "UserInfoEndpoint": { + "type": "string", + "description": "The user info endpoint of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "ClientId": { + "type": "string", + "description": "The OAuth 2.0 client identifier." + }, + "AuthorizationEndpoint": { + "type": "string", + "description": "The authorization endpoint of the IdP. This must be a full URL, including the HTTPS protocol, the domain, and the path." + }, + "SessionCookieName": { + "type": "string", + "description": "The name of the cookie used to maintain session information. The default is AWSELBAuthSessionCookie." + }, + "UseExistingClientSecret": { + "type": "boolean", + "description": "Indicates whether to use the existing client secret when modifying a rule. If you are creating a rule, you can omit this parameter or set it to false." + }, + "AuthenticationRequestExtraParams": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "description": "The query parameters (up to 10) to include in the redirect request to the authorization endpoint." + } + }, + "required": [ + "TokenEndpoint", + "Issuer", + "UserInfoEndpoint", + "ClientId", + "AuthorizationEndpoint" + ], + "description": "Specifies information required using an identity provide (IdP) that is compliant with OpenID Connect (OIDC) to authenticate users." + }, + "SourceIpConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The source IP addresses, in CIDR format. You can use both IPv4 and IPv6 addresses. Wildcards are not supported.\n If you specify multiple addresses, the condition is satisfied if the source IP address of the request matches one of the CIDR blocks. This condition is not satisfied by the addresses in the X-Forwarded-For header." + } + }, + "description": "Information about a source IP condition.\n You can use this condition to route based on the IP address of the source that connects to the load balancer. If a client is behind a proxy, this is the IP address of the proxy not the IP address of the client." + } + }, + "required": [ + "Actions", + "Priority", + "Conditions" + ], + "createOnlyProperties": [ + "/properties/ListenerArn" + ], + "primaryIdentifier": [ + "/properties/RuleArn" + ], + "readOnlyProperties": [ + "/properties/RuleArn", + "/properties/IsDefault" + ], + "writeOnlyProperties": [ + "/properties/Actions/*/AuthenticateOidcConfig/ClientSecret", + "/properties/ListenerArn" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "elasticloadbalancing:CreateRule", + "elasticloadbalancing:DescribeRules", + "cognito-idp:DescribeUserPoolClient" + ] + }, + "delete": { + "permissions": [ + "elasticloadbalancing:DeleteRule", + "elasticloadbalancing:DescribeRules" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ListenerArn": { + "$ref": "resource-schema.json#/properties/ListenerArn" + }, + "RuleArns": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "resource-schema.json#/properties/RuleArn" + } + } + }, + "oneOf": [ + { + "required": [ + "ListenerArn" + ] + }, + { + "required": [ + "RuleArns" + ] + } + ] + }, + "permissions": [ + "elasticloadbalancing:DescribeRules" + ] + }, + "read": { + "permissions": [ + "elasticloadbalancing:DescribeRules" + ] + }, + "update": { + "permissions": [ + "elasticloadbalancing:ModifyRule", + "elasticloadbalancing:SetRulePriorities", + "elasticloadbalancing:DescribeRules" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/loadbalancer.json b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/loadbalancer.json new file mode 100644 index 00000000..315a5c40 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/loadbalancer.json @@ -0,0 +1,216 @@ +{ + "typeName": "AWS::ElasticLoadBalancingV2::LoadBalancer", + "description": "Specifies an Application Load Balancer, a Network Load Balancer, or a Gateway Load Balancer.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "additionalProperties": false, + "properties": { + "IpAddressType": { + "type": "string", + "description": "The IP address type. The possible values are ``ipv4`` (for IPv4 addresses) and ``dualstack`` (for IPv4 and IPv6 addresses). You can?t specify ``dualstack`` for a load balancer with a UDP or TCP_UDP listener." + }, + "SecurityGroups": { + "type": "array", + "description": "[Application Load Balancers and Network Load Balancers] The IDs of the security groups for the load balancer.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "LoadBalancerAttributes": { + "type": "array", + "description": "The load balancer attributes.", + "uniqueItems": true, + "insertionOrder": false, + "arrayType": "AttributeList", + "items": { + "$ref": "#/definitions/LoadBalancerAttribute" + } + }, + "Scheme": { + "type": "string", + "description": "The nodes of an Internet-facing load balancer have public IP addresses. The DNS name of an Internet-facing load balancer is publicly resolvable to the public IP addresses of the nodes. Therefore, Internet-facing load balancers can route requests from clients over the internet.\n The nodes of an internal load balancer have only private IP addresses. The DNS name of an internal load balancer is publicly resolvable to the private IP addresses of the nodes. Therefore, internal load balancers can route requests only from clients with access to the VPC for the load balancer.\n The default is an Internet-facing load balancer.\n You cannot specify a scheme for a Gateway Load Balancer." + }, + "DNSName": { + "type": "string", + "description": "" + }, + "Name": { + "type": "string", + "description": "The name of the load balancer. This name must be unique per region per account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, must not begin or end with a hyphen, and must not begin with \"internal-\".\n If you don't specify a name, AWS CloudFormation generates a unique physical ID for the load balancer. If you specify a name, you cannot perform updates that require replacement of this resource, but you can perform other updates. To replace the resource, specify a new name." + }, + "LoadBalancerName": { + "type": "string", + "description": "" + }, + "LoadBalancerFullName": { + "type": "string", + "description": "" + }, + "Subnets": { + "type": "array", + "description": "The IDs of the public subnets. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings, but not both. To specify an Elastic IP address, specify subnet mappings instead of subnets.\n [Application Load Balancers] You must specify subnets from at least two Availability Zones.\n [Application Load Balancers on Outposts] You must specify one Outpost subnet.\n [Application Load Balancers on Local Zones] You can specify subnets from one or more Local Zones.\n [Network Load Balancers] You can specify subnets from one or more Availability Zones.\n [Gateway Load Balancers] You can specify subnets from one or more Availability Zones.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Type": { + "type": "string", + "description": "The type of load balancer. The default is ``application``." + }, + "CanonicalHostedZoneID": { + "type": "string", + "description": "" + }, + "Tags": { + "type": "array", + "description": "The tags to assign to the load balancer.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LoadBalancerArn": { + "type": "string", + "description": "" + }, + "SubnetMappings": { + "type": "array", + "description": "The IDs of the public subnets. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings, but not both.\n [Application Load Balancers] You must specify subnets from at least two Availability Zones. You cannot specify Elastic IP addresses for your subnets.\n [Application Load Balancers on Outposts] You must specify one Outpost subnet.\n [Application Load Balancers on Local Zones] You can specify subnets from one or more Local Zones.\n [Network Load Balancers] You can specify subnets from one or more Availability Zones. You can specify one Elastic IP address per subnet if you need static IP addresses for your internet-facing load balancer. For internal load balancers, you can specify one private IP address per subnet from the IPv4 range of the subnet. For internet-facing load balancer, you can specify one IPv6 address per subnet.\n [Gateway Load Balancers] You can specify subnets from one or more Availability Zones. You cannot specify Elastic IP", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SubnetMapping" + } + }, + "EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic": { + "type": "string", + "description": "Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through privatelink." + } + }, + "definitions": { + "SubnetMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubnetId": { + "type": "string", + "description": "The ID of the subnet." + }, + "AllocationId": { + "type": "string", + "description": "[Network Load Balancers] The allocation ID of the Elastic IP address for an internet-facing load balancer." + }, + "PrivateIPv4Address": { + "type": "string", + "description": "[Network Load Balancers] The private IPv4 address for an internal load balancer." + }, + "IPv6Address": { + "type": "string", + "description": "[Network Load Balancers] The IPv6 address." + } + }, + "required": [ + "SubnetId" + ], + "description": "Specifies a subnet for a load balancer." + }, + "LoadBalancerAttribute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The value of the attribute." + }, + "Key": { + "type": "string", + "description": "The name of the attribute.\n The following attributes are supported by all load balancers:\n + ``deletion_protection.enabled`` - Indicates whether deletion protection is enabled. The value is ``true`` or ``false``. The default is ``false``.\n + ``load_balancing.cross_zone.enabled`` - Indicates whether cross-zone load balancing is enabled. The possible values are ``true`` and ``false``. The default for Network Load Balancers and Gateway Load Balancers is ``false``. The default for Application Load Balancers is ``true``, and cannot be changed.\n \n The following attributes are supported by both Application Load Balancers and Network Load Balancers:\n + ``access_logs.s3.enabled`` - Indicates whether access logs are enabled. The value is ``true`` or ``false``. The default is ``false``.\n + ``access_logs.s3.bucket`` - The name of the S3 bucket for the access logs. This attribute is required if access logs are enabled. The bucket must exist in the same region as the load balancer and h" + } + }, + "description": "Specifies an attribute for an Application Load Balancer, a Network Load Balancer, or a Gateway Load Balancer." + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The value of the tag." + }, + "Key": { + "type": "string", + "description": "The key of the tag." + } + }, + "required": [ + "Key" + ], + "description": "Information about a tag." + } + }, + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type", + "/properties/Scheme" + ], + "primaryIdentifier": [ + "/properties/LoadBalancerArn" + ], + "readOnlyProperties": [ + "/properties/LoadBalancerName", + "/properties/LoadBalancerFullName", + "/properties/CanonicalHostedZoneID", + "/properties/LoadBalancerArn", + "/properties/DNSName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "elasticloadbalancing:CreateLoadBalancer", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:ModifyLoadBalancerAttributes", + "elasticloadbalancing:AddTags" + ] + }, + "delete": { + "permissions": [ + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DeleteLoadBalancer" + ] + }, + "list": { + "permissions": [ + "elasticloadbalancing:DescribeLoadBalancers" + ] + }, + "read": { + "permissions": [ + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeLoadBalancerAttributes", + "elasticloadbalancing:DescribeTags" + ] + }, + "update": { + "permissions": [ + "elasticloadbalancing:ModifyLoadBalancerAttributes", + "elasticloadbalancing:SetSubnets", + "elasticloadbalancing:SetIpAddressType", + "elasticloadbalancing:SetSecurityGroups", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:RemoveTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/targetgroup.json b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/targetgroup.json new file mode 100644 index 00000000..9e5f5e09 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticloadbalancingv2/targetgroup.json @@ -0,0 +1,257 @@ +{ + "typeName": "AWS::ElasticLoadBalancingV2::TargetGroup", + "description": "Resource Type definition for AWS::ElasticLoadBalancingV2::TargetGroup", + "additionalProperties": false, + "properties": { + "IpAddressType": { + "type": "string", + "description": "The type of IP address used for this target group. The possible values are ipv4 and ipv6. " + }, + "HealthCheckIntervalSeconds": { + "type": "integer", + "description": "The approximate amount of time, in seconds, between health checks of an individual target." + }, + "LoadBalancerArns": { + "type": "array", + "insertionOrder": false, + "description": "The Amazon Resource Names (ARNs) of the load balancers that route traffic to this target group.", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Matcher": { + "$ref": "#/definitions/Matcher", + "description": "[HTTP/HTTPS health checks] The HTTP or gRPC codes to use when checking for a successful response from a target." + }, + "HealthCheckPath": { + "type": "string", + "description": "[HTTP/HTTPS health checks] The destination for health checks on the targets. [HTTP1 or HTTP2 protocol version] The ping path. The default is /. [GRPC protocol version] The path of a custom health check method with the format /package.service/method. The default is /AWS.ALB/healthcheck." + }, + "Port": { + "type": "integer", + "description": "The port on which the targets receive traffic. This port is used unless you specify a port override when registering the target. If the target is a Lambda function, this parameter does not apply. If the protocol is GENEVE, the supported port is 6081." + }, + "Targets": { + "type": "array", + "description": "The targets.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TargetDescription" + } + }, + "HealthCheckEnabled": { + "type": "boolean", + "description": "Indicates whether health checks are enabled. If the target type is lambda, health checks are disabled by default but can be enabled. If the target type is instance, ip, or alb, health checks are always enabled and cannot be disabled." + }, + "ProtocolVersion": { + "type": "string", + "description": "[HTTP/HTTPS protocol] The protocol version. The possible values are GRPC, HTTP1, and HTTP2." + }, + "UnhealthyThresholdCount": { + "type": "integer", + "description": "The number of consecutive health check failures required before considering a target unhealthy." + }, + "HealthCheckTimeoutSeconds": { + "type": "integer", + "description": "The amount of time, in seconds, during which no response from a target means a failed health check." + }, + "Name": { + "type": "string", + "description": "The name of the target group." + }, + "VpcId": { + "type": "string", + "description": "The identifier of the virtual private cloud (VPC). If the target is a Lambda function, this parameter does not apply." + }, + "TargetGroupFullName": { + "type": "string", + "description": "The full name of the target group." + }, + "HealthyThresholdCount": { + "type": "integer", + "description": "The number of consecutive health checks successes required before considering an unhealthy target healthy. " + }, + "HealthCheckProtocol": { + "type": "string", + "description": "The protocol the load balancer uses when performing health checks on targets. " + }, + "TargetGroupAttributes": { + "type": "array", + "arrayType": "AttributeList", + "description": "The attributes.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TargetGroupAttribute" + } + }, + "TargetType": { + "type": "string", + "description": "The type of target that you must specify when registering targets with this target group. You can't specify targets for a target group using more than one target type." + }, + "HealthCheckPort": { + "type": "string", + "description": "The port the load balancer uses when performing health checks on targets. " + }, + "TargetGroupArn": { + "type": "string", + "description": "The ARN of the Target Group" + }, + "Protocol": { + "type": "string", + "description": "The protocol to use for routing traffic to the targets." + }, + "TargetGroupName": { + "type": "string", + "description": "The name of the target group." + }, + "Tags": { + "type": "array", + "description": "The tags.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Matcher": { + "type": "object", + "additionalProperties": false, + "properties": { + "GrpcCode": { + "type": "string", + "description": "You can specify values between 0 and 99. You can specify multiple values, or a range of values. The default value is 12." + }, + "HttpCode": { + "type": "string", + "description": "For Application Load Balancers, you can specify values between 200 and 499, and the default value is 200. You can specify multiple values or a range of values. " + } + } + }, + "TargetDescription": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailabilityZone": { + "type": "string", + "description": "An Availability Zone or all. This determines whether the target receives traffic from the load balancer nodes in the specified Availability Zone or from all enabled Availability Zones for the load balancer." + }, + "Id": { + "type": "string", + "description": "The ID of the target. If the target type of the target group is instance, specify an instance ID. If the target type is ip, specify an IP address. If the target type is lambda, specify the ARN of the Lambda function. If the target type is alb, specify the ARN of the Application Load Balancer target. " + }, + "Port": { + "type": "integer", + "description": "The port on which the target is listening. If the target group protocol is GENEVE, the supported port is 6081. If the target type is alb, the targeted Application Load Balancer must have at least one listener whose port matches the target group port. Not used if the target is a Lambda function." + } + }, + "required": [ + "Id" + ] + }, + "TargetGroupAttribute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The name of the attribute." + }, + "Key": { + "type": "string", + "description": "The value of the attribute." + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The key name of the tag. " + }, + "Key": { + "type": "string", + "description": "The value for the tag. " + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "createOnlyProperties": [ + "/properties/TargetType", + "/properties/ProtocolVersion", + "/properties/Port", + "/properties/Name", + "/properties/VpcId", + "/properties/Protocol", + "/properties/IpAddressType" + ], + "primaryIdentifier": [ + "/properties/TargetGroupArn" + ], + "readOnlyProperties": [ + "/properties/LoadBalancerArns", + "/properties/TargetGroupArn", + "/properties/TargetGroupName", + "/properties/TargetGroupFullName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": false, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "elasticloadbalancing:CreateTargetGroup", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:ModifyTargetGroupAttributes", + "elasticloadbalancing:DescribeTargetHealth", + "elasticloadbalancing:AddTags" + ] + }, + "delete": { + "permissions": [ + "elasticloadbalancing:DeleteTargetGroup", + "elasticloadbalancing:DescribeTargetGroups" + ] + }, + "list": { + "permissions": [ + "elasticloadbalancing:DescribeTargetGroups" + ] + }, + "read": { + "permissions": [ + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:DescribeTargetGroupAttributes", + "elasticloadbalancing:DescribeTargetHealth", + "elasticloadbalancing:DescribeTags" + ] + }, + "update": { + "permissions": [ + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:ModifyTargetGroup", + "elasticloadbalancing:ModifyTargetGroupAttributes", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:DescribeTargetHealth", + "elasticloadbalancing:DeregisterTargets", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:RemoveTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/elasticsearch/domain.json b/internal/aws/cfn/schemas/aws/elasticsearch/domain.json new file mode 100644 index 00000000..691137e9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/elasticsearch/domain.json @@ -0,0 +1,317 @@ +{ + "typeName": "AWS::Elasticsearch::Domain", + "description": "Resource Type definition for AWS::Elasticsearch::Domain", + "additionalProperties": false, + "properties": { + "ElasticsearchClusterConfig": { + "$ref": "#/definitions/ElasticsearchClusterConfig" + }, + "DomainName": { + "type": "string" + }, + "ElasticsearchVersion": { + "type": "string" + }, + "LogPublishingOptions": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "$ref": "#/definitions/LogPublishingOption" + } + } + }, + "SnapshotOptions": { + "$ref": "#/definitions/SnapshotOptions" + }, + "VPCOptions": { + "$ref": "#/definitions/VPCOptions" + }, + "NodeToNodeEncryptionOptions": { + "$ref": "#/definitions/NodeToNodeEncryptionOptions" + }, + "AccessPolicies": { + "type": "object" + }, + "DomainEndpointOptions": { + "$ref": "#/definitions/DomainEndpointOptions" + }, + "DomainArn": { + "type": "string" + }, + "CognitoOptions": { + "$ref": "#/definitions/CognitoOptions" + }, + "AdvancedOptions": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "AdvancedSecurityOptions": { + "$ref": "#/definitions/AdvancedSecurityOptionsInput" + }, + "DomainEndpoint": { + "type": "string" + }, + "EBSOptions": { + "$ref": "#/definitions/EBSOptions" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "EncryptionAtRestOptions": { + "$ref": "#/definitions/EncryptionAtRestOptions" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "LogPublishingOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogsLogGroupArn": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + } + } + }, + "ElasticsearchClusterConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceCount": { + "type": "integer" + }, + "WarmEnabled": { + "type": "boolean" + }, + "WarmCount": { + "type": "integer" + }, + "DedicatedMasterEnabled": { + "type": "boolean" + }, + "ZoneAwarenessConfig": { + "$ref": "#/definitions/ZoneAwarenessConfig" + }, + "ColdStorageOptions": { + "$ref": "#/definitions/ColdStorageOptions" + }, + "DedicatedMasterCount": { + "type": "integer" + }, + "InstanceType": { + "type": "string" + }, + "WarmType": { + "type": "string" + }, + "ZoneAwarenessEnabled": { + "type": "boolean" + }, + "DedicatedMasterType": { + "type": "string" + } + } + }, + "VPCOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "SnapshotOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutomatedSnapshotStartHour": { + "type": "integer" + } + } + }, + "ZoneAwarenessConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailabilityZoneCount": { + "type": "integer" + } + } + }, + "NodeToNodeEncryptionOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + } + }, + "ColdStorageOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + } + }, + "DomainEndpointOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomEndpointCertificateArn": { + "type": "string" + }, + "CustomEndpointEnabled": { + "type": "boolean" + }, + "EnforceHTTPS": { + "type": "boolean" + }, + "CustomEndpoint": { + "type": "string" + }, + "TLSSecurityPolicy": { + "type": "string" + } + } + }, + "CognitoOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "IdentityPoolId": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + } + }, + "EBSOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "EBSEnabled": { + "type": "boolean" + }, + "VolumeType": { + "type": "string" + }, + "Iops": { + "type": "integer" + }, + "VolumeSize": { + "type": "integer" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "EncryptionAtRestOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + } + } + }, + "MasterUserOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "MasterUserPassword": { + "type": "string" + }, + "MasterUserName": { + "type": "string" + }, + "MasterUserARN": { + "type": "string" + } + } + }, + "AdvancedSecurityOptionsInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "MasterUserOptions": { + "$ref": "#/definitions/MasterUserOptions" + }, + "AnonymousAuthEnabled": { + "type": "boolean" + }, + "InternalUserDatabaseEnabled": { + "type": "boolean" + } + } + } + }, + "createOnlyProperties": [ + "/properties/DomainName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/DomainArn", + "/properties/DomainEndpoint", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/emr/cluster.json b/internal/aws/cfn/schemas/aws/emr/cluster.json new file mode 100644 index 00000000..0f1eda12 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/cluster.json @@ -0,0 +1,859 @@ +{ + "typeName": "AWS::EMR::Cluster", + "description": "Resource Type definition for AWS::EMR::Cluster", + "additionalProperties": false, + "properties": { + "Steps": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/StepConfig" + } + }, + "PlacementGroupConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/PlacementGroupConfig" + } + }, + "StepConcurrencyLevel": { + "type": "integer" + }, + "EbsRootVolumeSize": { + "type": "integer" + }, + "OSReleaseLabel": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "ServiceRole": { + "type": "string" + }, + "LogUri": { + "type": "string" + }, + "BootstrapActions": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/BootstrapActionConfig" + } + }, + "MasterPublicDNS": { + "type": "string" + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "ReleaseLabel": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ManagedScalingPolicy": { + "$ref": "#/definitions/ManagedScalingPolicy" + }, + "LogEncryptionKmsKeyId": { + "type": "string" + }, + "AdditionalInfo": { + "type": "object" + }, + "AutoTerminationPolicy": { + "$ref": "#/definitions/AutoTerminationPolicy" + }, + "KerberosAttributes": { + "$ref": "#/definitions/KerberosAttributes" + }, + "Applications": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Application" + } + }, + "AutoScalingRole": { + "type": "string" + }, + "CustomAmiId": { + "type": "string" + }, + "EbsRootVolumeIops": { + "type": "integer" + }, + "Instances": { + "$ref": "#/definitions/JobFlowInstancesConfig" + }, + "ScaleDownBehavior": { + "type": "string" + }, + "EbsRootVolumeThroughput": { + "type": "integer" + }, + "JobFlowRole": { + "type": "string" + }, + "VisibleToAllUsers": { + "type": "boolean" + }, + "SecurityConfiguration": { + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "EbsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "EbsBlockDeviceConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EbsBlockDeviceConfig" + } + }, + "EbsOptimized": { + "type": "boolean" + } + } + }, + "KeyValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + }, + "Configuration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConfigurationProperties": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "Classification": { + "type": "string" + } + } + }, + "StepConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "HadoopJarStep": { + "$ref": "#/definitions/HadoopJarStepConfig" + }, + "ActionOnFailure": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "HadoopJarStep", + "Name" + ] + }, + "InstanceFleetConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetOnDemandCapacity": { + "type": "integer" + }, + "TargetSpotCapacity": { + "type": "integer" + }, + "InstanceTypeConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InstanceTypeConfig" + } + }, + "LaunchSpecifications": { + "$ref": "#/definitions/InstanceFleetProvisioningSpecifications" + }, + "Name": { + "type": "string" + } + } + }, + "InstanceTypeConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "BidPrice": { + "type": "string" + }, + "WeightedCapacity": { + "type": "integer" + }, + "EbsConfiguration": { + "$ref": "#/definitions/EbsConfiguration" + }, + "BidPriceAsPercentageOfOnDemandPrice": { + "type": "number" + }, + "CustomAmiId": { + "type": "string" + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "InstanceType": { + "type": "string" + } + }, + "required": [ + "InstanceType" + ] + }, + "SpotProvisioningSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllocationStrategy": { + "type": "string" + }, + "TimeoutDurationMinutes": { + "type": "integer" + }, + "TimeoutAction": { + "type": "string" + }, + "BlockDurationMinutes": { + "type": "integer" + } + }, + "required": [ + "TimeoutDurationMinutes", + "TimeoutAction" + ] + }, + "ScriptBootstrapActionConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + }, + "Args": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "Path" + ] + }, + "InstanceFleetProvisioningSpecifications": { + "type": "object", + "additionalProperties": false, + "properties": { + "SpotSpecification": { + "$ref": "#/definitions/SpotProvisioningSpecification" + }, + "OnDemandSpecification": { + "$ref": "#/definitions/OnDemandProvisioningSpecification" + } + } + }, + "SimpleScalingPolicyConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScalingAdjustment": { + "type": "integer" + }, + "CoolDown": { + "type": "integer" + }, + "AdjustmentType": { + "type": "string" + } + }, + "required": [ + "ScalingAdjustment" + ] + }, + "PlacementGroupConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceRole": { + "type": "string" + }, + "PlacementStrategy": { + "type": "string" + } + }, + "required": [ + "InstanceRole" + ] + }, + "OnDemandProvisioningSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllocationStrategy": { + "type": "string" + } + }, + "required": [ + "AllocationStrategy" + ] + }, + "ScalingTrigger": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchAlarmDefinition": { + "$ref": "#/definitions/CloudWatchAlarmDefinition" + } + }, + "required": [ + "CloudWatchAlarmDefinition" + ] + }, + "ManagedScalingPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "ComputeLimits": { + "$ref": "#/definitions/ComputeLimits" + } + } + }, + "InstanceGroupConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutoScalingPolicy": { + "$ref": "#/definitions/AutoScalingPolicy" + }, + "BidPrice": { + "type": "string" + }, + "InstanceCount": { + "type": "integer" + }, + "EbsConfiguration": { + "$ref": "#/definitions/EbsConfiguration" + }, + "CustomAmiId": { + "type": "string" + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "InstanceType": { + "type": "string" + }, + "Market": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "InstanceCount", + "InstanceType" + ] + }, + "HadoopJarStepConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Args": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "MainClass": { + "type": "string" + }, + "Jar": { + "type": "string" + }, + "StepProperties": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/KeyValue" + } + } + }, + "required": [ + "Jar" + ] + }, + "VolumeSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "SizeInGB": { + "type": "integer" + }, + "Throughput": { + "type": "integer" + }, + "VolumeType": { + "type": "string" + }, + "Iops": { + "type": "integer" + } + }, + "required": [ + "SizeInGB", + "VolumeType" + ] + }, + "CloudWatchAlarmDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "ComparisonOperator": { + "type": "string" + }, + "Statistic": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricDimension" + } + }, + "Period": { + "type": "integer" + }, + "EvaluationPeriods": { + "type": "integer" + }, + "Unit": { + "type": "string" + }, + "Namespace": { + "type": "string" + }, + "Threshold": { + "type": "number" + } + }, + "required": [ + "MetricName", + "ComparisonOperator", + "Period", + "Threshold" + ] + }, + "AutoTerminationPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "IdleTimeout": { + "type": "integer" + } + } + }, + "KerberosAttributes": { + "type": "object", + "additionalProperties": false, + "properties": { + "KdcAdminPassword": { + "type": "string" + }, + "Realm": { + "type": "string" + }, + "ADDomainJoinPassword": { + "type": "string" + }, + "ADDomainJoinUser": { + "type": "string" + }, + "CrossRealmTrustPrincipalPassword": { + "type": "string" + } + }, + "required": [ + "KdcAdminPassword", + "Realm" + ] + }, + "JobFlowInstancesConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "MasterInstanceFleet": { + "$ref": "#/definitions/InstanceFleetConfig" + }, + "AdditionalSlaveSecurityGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "CoreInstanceFleet": { + "$ref": "#/definitions/InstanceFleetConfig" + }, + "CoreInstanceGroup": { + "$ref": "#/definitions/InstanceGroupConfig" + }, + "Ec2SubnetIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "HadoopVersion": { + "type": "string" + }, + "TerminationProtected": { + "type": "boolean" + }, + "UnhealthyNodeReplacement": { + "type": "boolean" + }, + "KeepJobFlowAliveWhenNoSteps": { + "type": "boolean" + }, + "Ec2KeyName": { + "type": "string" + }, + "MasterInstanceGroup": { + "$ref": "#/definitions/InstanceGroupConfig" + }, + "Placement": { + "$ref": "#/definitions/PlacementType" + }, + "TaskInstanceFleets": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InstanceFleetConfig" + } + }, + "Ec2SubnetId": { + "type": "string" + }, + "TaskInstanceGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InstanceGroupConfig" + } + }, + "ServiceAccessSecurityGroup": { + "type": "string" + }, + "EmrManagedSlaveSecurityGroup": { + "type": "string" + }, + "AdditionalMasterSecurityGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "EmrManagedMasterSecurityGroup": { + "type": "string" + } + } + }, + "ScalingAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Market": { + "type": "string" + }, + "SimpleScalingPolicyConfiguration": { + "$ref": "#/definitions/SimpleScalingPolicyConfiguration" + } + }, + "required": [ + "SimpleScalingPolicyConfiguration" + ] + }, + "EbsBlockDeviceConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "VolumeSpecification": { + "$ref": "#/definitions/VolumeSpecification" + }, + "VolumesPerInstance": { + "type": "integer" + } + }, + "required": [ + "VolumeSpecification" + ] + }, + "ScalingRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/ScalingAction" + }, + "Description": { + "type": "string" + }, + "Trigger": { + "$ref": "#/definitions/ScalingTrigger" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Action", + "Trigger", + "Name" + ] + }, + "ComputeLimits": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaximumOnDemandCapacityUnits": { + "type": "integer" + }, + "MaximumCapacityUnits": { + "type": "integer" + }, + "MaximumCoreCapacityUnits": { + "type": "integer" + }, + "MinimumCapacityUnits": { + "type": "integer" + }, + "UnitType": { + "type": "string" + } + }, + "required": [ + "UnitType", + "MaximumCapacityUnits", + "MinimumCapacityUnits" + ] + }, + "MetricDimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "BootstrapActionConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScriptBootstrapAction": { + "$ref": "#/definitions/ScriptBootstrapActionConfig" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ScriptBootstrapAction", + "Name" + ] + }, + "AutoScalingPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rules": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ScalingRule" + } + }, + "Constraints": { + "$ref": "#/definitions/ScalingConstraints" + } + }, + "required": [ + "Constraints", + "Rules" + ] + }, + "PlacementType": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailabilityZone": { + "type": "string" + } + }, + "required": [ + "AvailabilityZone" + ] + }, + "ScalingConstraints": { + "type": "object", + "additionalProperties": false, + "properties": { + "MinCapacity": { + "type": "integer" + }, + "MaxCapacity": { + "type": "integer" + } + }, + "required": [ + "MinCapacity", + "MaxCapacity" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Application": { + "type": "object", + "additionalProperties": false, + "properties": { + "AdditionalInfo": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Args": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Version": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + }, + "required": [ + "Instances", + "ServiceRole", + "JobFlowRole", + "Name" + ], + "createOnlyProperties": [ + "/properties/Steps", + "/properties/EbsRootVolumeSize", + "/properties/SecurityConfiguration", + "/properties/ScaleDownBehavior", + "/properties/Configurations", + "/properties/ReleaseLabel", + "/properties/BootstrapActions", + "/properties/EbsRootVolumeIops", + "/properties/KerberosAttributes", + "/properties/ServiceRole", + "/properties/LogEncryptionKmsKeyId", + "/properties/Name", + "/properties/EbsRootVolumeThroughput", + "/properties/JobFlowRole", + "/properties/AdditionalInfo", + "/properties/LogUri", + "/properties/CustomAmiId", + "/properties/PlacementGroupConfigs", + "/properties/OSReleaseLabel", + "/properties/AutoScalingRole", + "/properties/Applications" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/MasterPublicDNS" + ] +} diff --git a/internal/aws/cfn/schemas/aws/emr/instancefleetconfig.json b/internal/aws/cfn/schemas/aws/emr/instancefleetconfig.json new file mode 100644 index 00000000..458de420 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/instancefleetconfig.json @@ -0,0 +1,211 @@ +{ + "typeName": "AWS::EMR::InstanceFleetConfig", + "description": "Resource Type definition for AWS::EMR::InstanceFleetConfig", + "additionalProperties": false, + "properties": { + "InstanceFleetType": { + "type": "string" + }, + "TargetOnDemandCapacity": { + "type": "integer" + }, + "ClusterId": { + "type": "string" + }, + "TargetSpotCapacity": { + "type": "integer" + }, + "LaunchSpecifications": { + "$ref": "#/definitions/InstanceFleetProvisioningSpecifications" + }, + "Id": { + "type": "string" + }, + "InstanceTypeConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/InstanceTypeConfig" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "VolumeSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "SizeInGB": { + "type": "integer" + }, + "Throughput": { + "type": "integer" + }, + "VolumeType": { + "type": "string" + }, + "Iops": { + "type": "integer" + } + }, + "required": [ + "SizeInGB", + "VolumeType" + ] + }, + "EbsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "EbsBlockDeviceConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EbsBlockDeviceConfig" + } + }, + "EbsOptimized": { + "type": "boolean" + } + } + }, + "Configuration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConfigurationProperties": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "Classification": { + "type": "string" + } + } + }, + "InstanceFleetProvisioningSpecifications": { + "type": "object", + "additionalProperties": false, + "properties": { + "SpotSpecification": { + "$ref": "#/definitions/SpotProvisioningSpecification" + }, + "OnDemandSpecification": { + "$ref": "#/definitions/OnDemandProvisioningSpecification" + } + } + }, + "OnDemandProvisioningSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllocationStrategy": { + "type": "string" + } + }, + "required": [ + "AllocationStrategy" + ] + }, + "EbsBlockDeviceConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "VolumeSpecification": { + "$ref": "#/definitions/VolumeSpecification" + }, + "VolumesPerInstance": { + "type": "integer" + } + }, + "required": [ + "VolumeSpecification" + ] + }, + "InstanceTypeConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "BidPrice": { + "type": "string" + }, + "WeightedCapacity": { + "type": "integer" + }, + "EbsConfiguration": { + "$ref": "#/definitions/EbsConfiguration" + }, + "BidPriceAsPercentageOfOnDemandPrice": { + "type": "number" + }, + "CustomAmiId": { + "type": "string" + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "InstanceType": { + "type": "string" + } + }, + "required": [ + "InstanceType" + ] + }, + "SpotProvisioningSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllocationStrategy": { + "type": "string" + }, + "TimeoutDurationMinutes": { + "type": "integer" + }, + "TimeoutAction": { + "type": "string" + }, + "BlockDurationMinutes": { + "type": "integer" + } + }, + "required": [ + "TimeoutDurationMinutes", + "TimeoutAction" + ] + } + }, + "required": [ + "InstanceFleetType", + "ClusterId" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/InstanceTypeConfigs", + "/properties/LaunchSpecifications", + "/properties/ClusterId", + "/properties/InstanceFleetType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/emr/instancegroupconfig.json b/internal/aws/cfn/schemas/aws/emr/instancegroupconfig.json new file mode 100644 index 00000000..bf18aaa4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/instancegroupconfig.json @@ -0,0 +1,312 @@ +{ + "typeName": "AWS::EMR::InstanceGroupConfig", + "description": "Resource Type definition for AWS::EMR::InstanceGroupConfig", + "additionalProperties": false, + "properties": { + "JobFlowId": { + "type": "string" + }, + "AutoScalingPolicy": { + "$ref": "#/definitions/AutoScalingPolicy" + }, + "BidPrice": { + "type": "string" + }, + "InstanceCount": { + "type": "integer" + }, + "EbsConfiguration": { + "$ref": "#/definitions/EbsConfiguration" + }, + "InstanceRole": { + "type": "string" + }, + "CustomAmiId": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "InstanceType": { + "type": "string" + }, + "Market": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "AutoScalingPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rules": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ScalingRule" + } + }, + "Constraints": { + "$ref": "#/definitions/ScalingConstraints" + } + }, + "required": [ + "Constraints", + "Rules" + ] + }, + "VolumeSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "SizeInGB": { + "type": "integer" + }, + "Throughput": { + "type": "integer" + }, + "VolumeType": { + "type": "string" + }, + "Iops": { + "type": "integer" + } + }, + "required": [ + "SizeInGB", + "VolumeType" + ] + }, + "CloudWatchAlarmDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "ComparisonOperator": { + "type": "string" + }, + "Statistic": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/MetricDimension" + } + }, + "Period": { + "type": "integer" + }, + "EvaluationPeriods": { + "type": "integer" + }, + "Unit": { + "type": "string" + }, + "Namespace": { + "type": "string" + }, + "Threshold": { + "type": "number" + } + }, + "required": [ + "MetricName", + "ComparisonOperator", + "Period", + "Threshold" + ] + }, + "EbsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "EbsBlockDeviceConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EbsBlockDeviceConfig" + } + }, + "EbsOptimized": { + "type": "boolean" + } + } + }, + "Configuration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConfigurationProperties": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Configuration" + } + }, + "Classification": { + "type": "string" + } + } + }, + "ScalingAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Market": { + "type": "string" + }, + "SimpleScalingPolicyConfiguration": { + "$ref": "#/definitions/SimpleScalingPolicyConfiguration" + } + }, + "required": [ + "SimpleScalingPolicyConfiguration" + ] + }, + "SimpleScalingPolicyConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScalingAdjustment": { + "type": "integer" + }, + "CoolDown": { + "type": "integer" + }, + "AdjustmentType": { + "type": "string" + } + }, + "required": [ + "ScalingAdjustment" + ] + }, + "ScalingConstraints": { + "type": "object", + "additionalProperties": false, + "properties": { + "MinCapacity": { + "type": "integer" + }, + "MaxCapacity": { + "type": "integer" + } + }, + "required": [ + "MinCapacity", + "MaxCapacity" + ] + }, + "EbsBlockDeviceConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "VolumeSpecification": { + "$ref": "#/definitions/VolumeSpecification" + }, + "VolumesPerInstance": { + "type": "integer" + } + }, + "required": [ + "VolumeSpecification" + ] + }, + "ScalingTrigger": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchAlarmDefinition": { + "$ref": "#/definitions/CloudWatchAlarmDefinition" + } + }, + "required": [ + "CloudWatchAlarmDefinition" + ] + }, + "ScalingRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/ScalingAction" + }, + "Description": { + "type": "string" + }, + "Trigger": { + "$ref": "#/definitions/ScalingTrigger" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Action", + "Trigger", + "Name" + ] + }, + "MetricDimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "JobFlowId", + "InstanceCount", + "InstanceRole", + "InstanceType" + ], + "createOnlyProperties": [ + "/properties/InstanceRole", + "/properties/JobFlowId", + "/properties/Name", + "/properties/InstanceType", + "/properties/CustomAmiId", + "/properties/Configurations", + "/properties/EbsConfiguration", + "/properties/Market", + "/properties/BidPrice" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/emr/securityconfiguration.json b/internal/aws/cfn/schemas/aws/emr/securityconfiguration.json new file mode 100644 index 00000000..e32e34d9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/securityconfiguration.json @@ -0,0 +1,54 @@ +{ + "typeName": "AWS::EMR::SecurityConfiguration", + "description": "Use a SecurityConfiguration resource to configure data encryption, Kerberos authentication, and Amazon S3 authorization for EMRFS.", + "tagging": { + "taggable": false + }, + "properties": { + "Name": { + "description": "The name of the security configuration.", + "type": "string" + }, + "SecurityConfiguration": { + "description": "The security configuration details in JSON format.", + "type": [ + "object", + "string" + ] + } + }, + "additionalProperties": false, + "required": [ + "SecurityConfiguration" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/SecurityConfiguration" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "elasticmapreduce:CreateSecurityConfiguration", + "elasticmapreduce:DescribeSecurityConfiguration" + ] + }, + "read": { + "permissions": [ + "elasticmapreduce:DescribeSecurityConfiguration" + ] + }, + "delete": { + "permissions": [ + "elasticmapreduce:DeleteSecurityConfiguration" + ] + }, + "list": { + "permissions": [ + "elasticmapreduce:ListSecurityConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/emr/step.json b/internal/aws/cfn/schemas/aws/emr/step.json new file mode 100644 index 00000000..48191a60 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/step.json @@ -0,0 +1,102 @@ +{ + "typeName": "AWS::EMR::Step", + "description": "Schema for AWS::EMR::Step", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "HadoopJarStepConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Args": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Jar": { + "type": "string" + }, + "MainClass": { + "type": "string" + }, + "StepProperties": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/KeyValue" + } + } + }, + "required": [ + "Jar" + ] + }, + "KeyValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + } + }, + "properties": { + "Id": { + "description": "ID generated by service", + "type": "string" + }, + "ActionOnFailure": { + "description": "This specifies what action to take when the cluster step fails. Possible values are CANCEL_AND_WAIT and CONTINUE.", + "type": "string" + }, + "HadoopJarStep": { + "description": "The HadoopJarStepConfig property type specifies a job flow step consisting of a JAR file whose main function will be executed. The main function submits a job for the cluster to execute as a step on the master node, and then waits for the job to finish or fail before executing subsequent steps.", + "$ref": "#/definitions/HadoopJarStepConfig" + }, + "JobFlowId": { + "description": "A string that uniquely identifies the cluster (job flow).", + "type": "string" + }, + "Name": { + "description": "The name of the cluster step.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "JobFlowId", + "HadoopJarStep", + "ActionOnFailure", + "Name" + ], + "tagging": { + "taggable": false + }, + "createOnlyProperties": [ + "/properties/JobFlowId", + "/properties/HadoopJarStep", + "/properties/Name", + "/properties/ActionOnFailure" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "emr:AddJobFlowSteps" + ] + }, + "delete": { + "permissions": [] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/emr/studio.json b/internal/aws/cfn/schemas/aws/emr/studio.json new file mode 100644 index 00000000..755efe0b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/studio.json @@ -0,0 +1,236 @@ +{ + "typeName": "AWS::EMR::Studio", + "description": "Resource schema for AWS::EMR::Studio", + "documentationUrl": "https://docs.aws.amazon.com/emr/latest/APIReference/API_CreateStudio.html", + "definitions": { + "SubnetId": { + "description": "Identifier of a subnet", + "type": "string", + "pattern": "^(subnet-[a-f0-9]{13})|(subnet-[a-f0-9]{8})\\Z" + }, + "Arn": { + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "description": "An arbitrary set of tags (key-value pairs) for this EMR Studio.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 255 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256, + "pattern": "[a-zA-Z+-=._:/]+$" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the EMR Studio.", + "$ref": "#/definitions/Arn" + }, + "AuthMode": { + "type": "string", + "description": "Specifies whether the Studio authenticates users using single sign-on (SSO) or IAM. Amazon EMR Studio currently only supports SSO authentication.", + "enum": [ + "SSO", + "IAM" + ] + }, + "DefaultS3Location": { + "description": "The default Amazon S3 location to back up EMR Studio Workspaces and notebook files. A Studio user can select an alternative Amazon S3 location when creating a Workspace.", + "type": "string", + "minLength": 6, + "maxLength": 10280, + "pattern": "^s3://.*" + }, + "Description": { + "description": "A detailed description of the Studio.", + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "EngineSecurityGroupId": { + "description": "The ID of the Amazon EMR Studio Engine security group. The Engine security group allows inbound network traffic from the Workspace security group, and it must be in the same VPC specified by VpcId.", + "type": "string", + "minLength": 4, + "maxLength": 256, + "pattern": "^sg-[a-zA-Z0-9\\-._]+$" + }, + "Name": { + "description": "A descriptive name for the Amazon EMR Studio.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z0-9_-]+" + }, + "ServiceRole": { + "description": "The IAM role that will be assumed by the Amazon EMR Studio. The service role provides a way for Amazon EMR Studio to interoperate with other AWS services.", + "$ref": "#/definitions/Arn" + }, + "StudioId": { + "description": "The ID of the EMR Studio.", + "type": "string", + "pattern": "^es-[0-9A-Z]+", + "minLength": 4, + "maxLength": 256 + }, + "SubnetIds": { + "description": "A list of up to 5 subnet IDs to associate with the Studio. The subnets must belong to the VPC specified by VpcId. Studio users can create a Workspace in any of the specified subnets.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/SubnetId" + } + }, + "Tags": { + "description": "A list of tags to associate with the Studio. Tags are user-defined key-value pairs that consist of a required key string with a maximum of 128 characters, and an optional value string with a maximum of 256 characters.", + "$ref": "#/definitions/Tags" + }, + "Url": { + "description": "The unique Studio access URL.", + "type": "string", + "pattern": "^https://[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])(:[0-9]*)*([?/#].*)?$", + "maxLength": 4096 + }, + "UserRole": { + "description": "The IAM user role that will be assumed by users and groups logged in to a Studio. The permissions attached to this IAM role can be scoped down for each user or group using session policies.", + "$ref": "#/definitions/Arn" + }, + "VpcId": { + "description": "The ID of the Amazon Virtual Private Cloud (Amazon VPC) to associate with the Studio.", + "type": "string", + "pattern": "^(vpc-[0-9a-f]{8}|vpc-[0-9a-f]{17})$" + }, + "WorkspaceSecurityGroupId": { + "description": "The ID of the Amazon EMR Studio Workspace security group. The Workspace security group allows outbound network traffic to resources in the Engine security group, and it must be in the same VPC specified by VpcId.", + "type": "string", + "pattern": "^sg-[a-zA-Z0-9\\-._]+$" + }, + "IdpAuthUrl": { + "description": "Your identity provider's authentication endpoint. Amazon EMR Studio redirects federated users to this endpoint for authentication when logging in to a Studio with the Studio URL.", + "type": "string", + "pattern": "^https://[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])(:[0-9]*)*([?/#].*)?$", + "maxLength": 4096 + }, + "IdpRelayStateParameterName": { + "description": "The name of relay state parameter for external Identity Provider.", + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "TrustedIdentityPropagationEnabled": { + "description": "A Boolean indicating whether to enable Trusted identity propagation for the Studio. The default value is false.", + "type": "boolean" + }, + "IdcUserAssignment": { + "description": "Specifies whether IAM Identity Center user assignment is REQUIRED or OPTIONAL. If the value is set to REQUIRED, users must be explicitly assigned to the Studio application to access the Studio.", + "type": "string", + "enum": [ + "REQUIRED", + "OPTIONAL" + ] + }, + "IdcInstanceArn": { + "description": "The ARN of the IAM Identity Center instance to create the Studio application.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "EncryptionKeyArn": { + "description": "The AWS KMS key identifier (ARN) used to encrypt AWS EMR Studio workspace and notebook files when backed up to AWS S3.", + "$ref": "#/definitions/Arn" + } + }, + "additionalProperties": false, + "required": [ + "AuthMode", + "EngineSecurityGroupId", + "Name", + "ServiceRole", + "SubnetIds", + "VpcId", + "WorkspaceSecurityGroupId", + "DefaultS3Location" + ], + "readOnlyProperties": [ + "/properties/StudioId", + "/properties/Arn", + "/properties/Url" + ], + "primaryIdentifier": [ + "/properties/StudioId" + ], + "createOnlyProperties": [ + "/properties/AuthMode", + "/properties/EngineSecurityGroupId", + "/properties/ServiceRole", + "/properties/UserRole", + "/properties/VpcId", + "/properties/WorkspaceSecurityGroupId", + "/properties/TrustedIdentityPropagationEnabled", + "/properties/IdcUserAssignment", + "/properties/IdcInstanceArn", + "/properties/EncryptionKeyArn" + ], + "handlers": { + "create": { + "permissions": [ + "elasticmapreduce:CreateStudio", + "elasticmapreduce:DescribeStudio", + "elasticmapreduce:AddTags", + "sso:CreateManagedApplicationInstance", + "sso:DeleteManagedApplicationInstance", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "elasticmapreduce:DescribeStudio", + "sso:GetManagedApplicationInstance" + ] + }, + "update": { + "permissions": [ + "elasticmapreduce:UpdateStudio", + "elasticmapreduce:DescribeStudio", + "elasticmapreduce:AddTags", + "elasticmapreduce:RemoveTags" + ] + }, + "delete": { + "permissions": [ + "elasticmapreduce:DeleteStudio", + "elasticmapreduce:DescribeStudio", + "sso:DeleteManagedApplicationInstance" + ] + }, + "list": { + "permissions": [ + "elasticmapreduce:ListStudios" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/emr/studiosessionmapping.json b/internal/aws/cfn/schemas/aws/emr/studiosessionmapping.json new file mode 100644 index 00000000..b77048b9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/studiosessionmapping.json @@ -0,0 +1,113 @@ +{ + "typeName": "AWS::EMR::StudioSessionMapping", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "documentationUrl": "https://docs.aws.amazon.com/cli/latest/reference/emr/create-studio-session-mapping.html", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "IamPolicyArn": { + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:iam::([0-9]{12})?:policy\\/[^.]+$" + } + }, + "properties": { + "IdentityName": { + "type": "string", + "description": "The name of the user or group. For more information, see UserName and DisplayName in the AWS SSO Identity Store API Reference. Either IdentityName or IdentityId must be specified." + }, + "IdentityType": { + "type": "string", + "description": "Specifies whether the identity to map to the Studio is a user or a group.", + "enum": [ + "USER", + "GROUP" + ] + }, + "SessionPolicyArn": { + "description": "The Amazon Resource Name (ARN) for the session policy that will be applied to the user or group. Session policies refine Studio user permissions without the need to use multiple IAM user roles.", + "$ref": "#/definitions/IamPolicyArn" + }, + "StudioId": { + "description": "The ID of the Amazon EMR Studio to which the user or group will be mapped.", + "type": "string", + "pattern": "^es-[0-9A-Z]+", + "minLength": 4, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "StudioId", + "IdentityName", + "IdentityType", + "SessionPolicyArn" + ], + "createOnlyProperties": [ + "/properties/StudioId", + "/properties/IdentityType", + "/properties/IdentityName" + ], + "primaryIdentifier": [ + "/properties/StudioId", + "/properties/IdentityType", + "/properties/IdentityName" + ], + "handlers": { + "create": { + "permissions": [ + "elasticmapreduce:CreateStudioSessionMapping", + "sso-directory:SearchUsers", + "sso-directory:SearchGroups", + "sso-directory:DescribeUser", + "sso-directory:DescribeGroup", + "sso:ListDirectoryAssociations", + "sso:GetProfile", + "sso:ListProfiles", + "sso:AssociateProfile" + ] + }, + "read": { + "permissions": [ + "elasticmapreduce:GetStudioSessionMapping", + "sso-directory:SearchUsers", + "sso-directory:SearchGroups", + "sso-directory:DescribeUser", + "sso-directory:DescribeGroup", + "sso:GetManagedApplicationInstance", + "sso:DescribeInstance" + ] + }, + "update": { + "permissions": [ + "elasticmapreduce:GetStudioSessionMapping", + "elasticmapreduce:UpdateStudioSessionMapping", + "sso-directory:SearchUsers", + "sso-directory:SearchGroups", + "sso-directory:DescribeUser", + "sso-directory:DescribeGroup", + "sso:GetManagedApplicationInstance", + "sso:DescribeInstance" + ] + }, + "delete": { + "permissions": [ + "elasticmapreduce:GetStudioSessionMapping", + "elasticmapreduce:DeleteStudioSessionMapping", + "sso-directory:SearchUsers", + "sso-directory:SearchGroups", + "sso-directory:DescribeUser", + "sso-directory:DescribeGroup", + "sso:GetManagedApplicationInstance", + "sso:DescribeInstance", + "sso:ListDirectoryAssociations", + "sso:GetProfile", + "sso:ListProfiles", + "sso:DisassociateProfile" + ] + }, + "list": { + "permissions": [ + "elasticmapreduce:ListStudioSessionMappings" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/emr/walworkspace.json b/internal/aws/cfn/schemas/aws/emr/walworkspace.json new file mode 100644 index 00000000..5edd4753 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emr/walworkspace.json @@ -0,0 +1,93 @@ +{ + "typeName": "AWS::EMR::WALWorkspace", + "description": "Resource schema for AWS::EMR::WALWorkspace Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-emrwal", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "WALWorkspaceName": { + "description": "The name of the emrwal container", + "type": "string", + "minLength": 1, + "maxLength": 32, + "pattern": "^[a-zA-Z0-9]+$" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/WALWorkspaceName" + ], + "createOnlyProperties": [ + "/properties/WALWorkspaceName" + ], + "handlers": { + "create": { + "permissions": [ + "emrwal:CreateWorkspace", + "emrwal:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "emrwal:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "emrwal:DeleteWorkspace" + ] + }, + "list": { + "permissions": [ + "emrwal:ListWorkspaces" + ] + }, + "update": { + "permissions": [ + "emrwal:TagResource", + "emrwal:UntagResource", + "emrwal:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/emrcontainers/virtualcluster.json b/internal/aws/cfn/schemas/aws/emrcontainers/virtualcluster.json new file mode 100644 index 00000000..d1195618 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emrcontainers/virtualcluster.json @@ -0,0 +1,157 @@ +{ + "typeName": "AWS::EMRContainers::VirtualCluster", + "description": "Resource Schema of AWS::EMRContainers::VirtualCluster Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "ContainerProvider": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "description": "The type of the container provider", + "type": "string" + }, + "Id": { + "description": "The ID of the container cluster", + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "^[0-9A-Za-z][A-Za-z0-9\\-_]*" + }, + "Info": { + "$ref": "#/definitions/ContainerInfo" + } + }, + "required": [ + "Type", + "Id", + "Info" + ] + }, + "ContainerInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "EksInfo": { + "$ref": "#/definitions/EksInfo" + } + }, + "required": [ + "EksInfo" + ] + }, + "EksInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "Namespace": { + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "[a-z0-9]([-a-z0-9]*[a-z0-9])?" + } + }, + "required": [ + "Namespace" + ] + }, + "Tag": { + "description": "An arbitrary set of tags (key-value pairs) for this virtual cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "ContainerProvider": { + "description": "Container provider of the virtual cluster.", + "$ref": "#/definitions/ContainerProvider" + }, + "Id": { + "description": "Id of the virtual cluster.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Name": { + "description": "Name of the virtual cluster.", + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "[\\.\\-_/#A-Za-z0-9]+" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this virtual cluster.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "ContainerProvider" + ], + "createOnlyProperties": [ + "/properties/ContainerProvider", + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "emr-containers:CreateVirtualCluster", + "emr-containers:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "emr-containers:DescribeVirtualCluster" + ] + }, + "delete": { + "permissions": [ + "emr-containers:DeleteVirtualCluster" + ] + }, + "list": { + "permissions": [ + "emr-containers:ListVirtualClusters" + ] + }, + "update": { + "permissions": [ + "emr-containers:DescribeVirtualCluster", + "emr-containers:ListTagsForResource", + "emr-containers:TagResource", + "emr-containers:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/emrserverless/application.json b/internal/aws/cfn/schemas/aws/emrserverless/application.json new file mode 100644 index 00000000..41826cd0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/emrserverless/application.json @@ -0,0 +1,639 @@ +{ + "typeName": "AWS::EMRServerless::Application", + "description": "Resource schema for AWS::EMRServerless::Application Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Architecture": { + "description": "The cpu architecture of an application.", + "enum": [ + "ARM64", + "X86_64" + ], + "type": "string" + }, + "ImageConfigurationInput": { + "type": "object", + "description": "The image configuration.", + "properties": { + "ImageUri": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^([a-z0-9]+[a-z0-9-.]*)\\/((?:[a-z0-9]+(?:[._-][a-z0-9]+)*\\/)*[a-z0-9]+(?:[._-][a-z0-9]+)*)(?:\\:([a-zA-Z0-9_][a-zA-Z0-9-._]{0,299})|@(sha256:[0-9a-f]{64}))$", + "description": "The URI of an image in the Amazon ECR registry. This field is required when you create a new application. If you leave this field blank in an update, Amazon EMR will remove the image configuration." + } + }, + "additionalProperties": false + }, + "ConfigurationList": { + "type": "array", + "description": "Runtime configuration for batch and interactive JobRun.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConfigurationObject" + } + }, + "MonitoringConfiguration": { + "type": "object", + "description": "Monitoring configuration for batch and interactive JobRun.", + "additionalProperties": false, + "properties": { + "S3MonitoringConfiguration": { + "description": "S3 monitoring configurations for a JobRun.", + "$ref": "#/definitions/S3MonitoringConfiguration" + }, + "ManagedPersistenceMonitoringConfiguration": { + "description": "Managed log persistence configurations for a JobRun.", + "$ref": "#/definitions/ManagedPersistenceMonitoringConfiguration" + }, + "CloudWatchLoggingConfiguration": { + "description": "CloudWatch logging configurations for a JobRun.", + "$ref": "#/definitions/CloudWatchLoggingConfiguration" + } + } + }, + "S3MonitoringConfiguration": { + "additionalProperties": false, + "properties": { + "LogUri": { + "$ref": "#/definitions/UriString" + }, + "EncryptionKeyArn": { + "description": "KMS key ARN to encrypt the logs stored in given s3", + "$ref": "#/definitions/EncryptionKeyArn" + } + } + }, + "ManagedPersistenceMonitoringConfiguration": { + "additionalProperties": false, + "properties": { + "Enabled": { + "description": "If set to false, managed logging will be turned off. Defaults to true.", + "type": "boolean", + "default": true + }, + "EncryptionKeyArn": { + "description": "KMS key ARN to encrypt the logs stored in managed persistence", + "$ref": "#/definitions/EncryptionKeyArn" + } + } + }, + "CloudWatchLoggingConfiguration": { + "additionalProperties": false, + "properties": { + "Enabled": { + "description": "If set to false, CloudWatch logging will be turned off. Defaults to false.", + "type": "boolean", + "default": false + }, + "LogGroupName": { + "description": "Log-group name to produce log-streams on CloudWatch. If undefined, logs will be produced in a default log-group /aws/emr-serverless", + "$ref": "#/definitions/LogGroupName" + }, + "LogStreamNamePrefix": { + "description": "Log-stream name prefix by which log-stream names will start in the CloudWatch Log-group.", + "$ref": "#/definitions/LogStreamNamePrefix" + }, + "EncryptionKeyArn": { + "description": "KMS key ARN to encrypt the logs stored in given CloudWatch log-group.", + "$ref": "#/definitions/EncryptionKeyArn" + }, + "LogTypeMap": { + "description": "The specific log-streams which need to be uploaded to CloudWatch.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LogTypeMapKeyValuePair" + } + } + } + }, + "LogTypeMapKeyValuePair": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "$ref": "#/definitions/WorkerTypeString" + }, + "Value": { + "$ref": "#/definitions/LogTypeList" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "LogTypeList": { + "description": "List of Applicable values: [STDOUT, STDERR, HIVE_LOG, TEZ_AM, SYSTEM_LOGS]", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 5, + "items": { + "$ref": "#/definitions/LogTypeString" + } + }, + "InitialCapacityConfigMap": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/InitialCapacityConfigKeyValuePair" + } + }, + "InitialCapacityConfigKeyValuePair": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "Worker type for an analytics framework.", + "type": "string", + "minLength": 1, + "maxLength": 50, + "pattern": "^[a-zA-Z]+[-_]*[a-zA-Z]+$" + }, + "Value": { + "$ref": "#/definitions/InitialCapacityConfig" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "InitialCapacityConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "WorkerCount": { + "description": "Initial count of workers to be initialized when an Application is started. This count will be continued to be maintained until the Application is stopped", + "type": "integer", + "format": "int64", + "minimum": 1, + "maximum": 1000000 + }, + "WorkerConfiguration": { + "$ref": "#/definitions/WorkerConfiguration" + } + }, + "required": [ + "WorkerCount", + "WorkerConfiguration" + ] + }, + "WorkerConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Cpu": { + "description": "Per worker CPU resource. vCPU is the only supported unit and specifying vCPU is optional.", + "$ref": "#/definitions/CpuSize" + }, + "Memory": { + "description": "Per worker memory resource. GB is the only supported unit and specifying GB is optional.", + "$ref": "#/definitions/MemorySize" + }, + "Disk": { + "description": "Per worker Disk resource. GB is the only supported unit and specifying GB is optional", + "$ref": "#/definitions/DiskSize" + } + }, + "required": [ + "Cpu", + "Memory" + ] + }, + "MaximumAllowedResources": { + "type": "object", + "additionalProperties": false, + "properties": { + "Cpu": { + "description": "Per worker CPU resource. vCPU is the only supported unit and specifying vCPU is optional.", + "$ref": "#/definitions/CpuSize" + }, + "Memory": { + "description": "Per worker memory resource. GB is the only supported unit and specifying GB is optional.", + "$ref": "#/definitions/MemorySize" + }, + "Disk": { + "description": "Per worker Disk resource. GB is the only supported unit and specifying GB is optional", + "$ref": "#/definitions/DiskSize" + } + }, + "required": [ + "Cpu", + "Memory" + ] + }, + "AutoStartConfiguration": { + "description": "Configuration for Auto Start of Application", + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "description": "If set to true, the Application will automatically start. Defaults to true.", + "type": "boolean", + "default": true + } + }, + "required": [] + }, + "AutoStopConfiguration": { + "description": "Configuration for Auto Stop of Application", + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "description": "If set to true, the Application will automatically stop after being idle. Defaults to true.", + "type": "boolean", + "default": true + }, + "IdleTimeoutMinutes": { + "type": "integer", + "description": "The amount of time [in minutes] to wait before auto stopping the Application when idle. Defaults to 15 minutes." + } + }, + "required": [] + }, + "NetworkConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubnetIds": { + "description": "The ID of the subnets in the VPC to which you want to connect your job or application.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 16, + "items": { + "$ref": "#/definitions/SubnetId" + } + }, + "SecurityGroupIds": { + "description": "The ID of the security groups in the VPC to which you want to connect your job or application.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 5, + "items": { + "$ref": "#/definitions/SecurityGroupId" + } + } + }, + "required": [] + }, + "SubnetId": { + "description": "Identifier of a subnet", + "type": "string", + "minLength": 1, + "maxLength": 32, + "pattern": "^[-0-9a-zA-Z]+" + }, + "SecurityGroupId": { + "description": "Identifier of a security group", + "type": "string", + "minLength": 1, + "maxLength": 32, + "pattern": "^[-0-9a-zA-Z]+" + }, + "UriString": { + "type": "string", + "maxLength": 10280, + "minLength": 1, + "pattern": "[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\r\\n\\t]*" + }, + "EncryptionKeyArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:(aws[a-zA-Z0-9-]*):kms:[a-zA-Z0-9\\-]*:(\\d{12})?:key\\/[a-zA-Z0-9-]+$" + }, + "Classification": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": ".*\\S.*" + }, + "LogGroupName": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "^[\\.\\-_/#A-Za-z0-9]+$" + }, + "LogStreamNamePrefix": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "^[^:*]*$" + }, + "LogTypeString": { + "type": "string", + "maxLength": 50, + "minLength": 1, + "pattern": "^[a-zA-Z]+[-_]*[a-zA-Z]+$" + }, + "WorkerTypeString": { + "type": "string", + "maxLength": 50, + "minLength": 1, + "pattern": "^[a-zA-Z]+[-_]*[a-zA-Z]+$" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 128 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^[A-Za-z0-9 /_.:=+@-]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256, + "pattern": "^[A-Za-z0-9 /_.:=+@-]*$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "ConfigurationObject": { + "type": "object", + "description": "Configuration for a JobRun.", + "additionalProperties": false, + "properties": { + "Classification": { + "description": "String with a maximum length of 1024.", + "$ref": "#/definitions/Classification" + }, + "Properties": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-zA-Z]+[-a-zA-Z0-9_.]*$": { + "$ref": "#/definitions/SensitivePropertiesMap" + } + } + }, + "Configurations": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConfigurationObject" + } + } + }, + "required": [ + "Classification" + ] + }, + "SensitivePropertiesMap": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": ".*\\S.*" + }, + "SensitivePropertiesKeyValuePair": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": ".*\\S.*" + }, + "CpuSize": { + "description": "Per worker CPU resource. vCPU is the only supported unit and specifying vCPU is optional.", + "type": "string", + "minLength": 1, + "maxLength": 15, + "pattern": "^[1-9][0-9]*(\\s)?(vCPU|vcpu|VCPU)?$" + }, + "MemorySize": { + "description": "Per worker memory resource. GB is the only supported unit and specifying GB is optional.", + "type": "string", + "minLength": 1, + "maxLength": 15, + "pattern": "^[1-9][0-9]*(\\s)?(GB|gb|gB|Gb)?$" + }, + "DiskSize": { + "description": "Per worker Disk resource. GB is the only supported unit and specifying GB is optional", + "type": "string", + "minLength": 1, + "maxLength": 15, + "pattern": "^[1-9][0-9]*(\\s)?(GB|gb|gB|Gb)$" + }, + "WorkerTypeSpecificationInput": { + "type": "object", + "description": "The specifications for a worker type.", + "properties": { + "ImageConfiguration": { + "$ref": "#/definitions/ImageConfigurationInput" + } + }, + "additionalProperties": false + }, + "WorkerTypeSpecificationInputMap": { + "type": "object", + "patternProperties": { + "^[a-zA-Z]+[-_]*[a-zA-Z]+$": { + "$ref": "#/definitions/WorkerTypeSpecificationInput" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Architecture": { + "$ref": "#/definitions/Architecture" + }, + "Name": { + "description": "User friendly Application name.", + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[A-Za-z0-9._\\/#-]+$" + }, + "ReleaseLabel": { + "description": "EMR release label.", + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[A-Za-z0-9._/-]+$" + }, + "Type": { + "description": "The type of the application", + "type": "string" + }, + "InitialCapacity": { + "description": "Initial capacity initialized when an Application is started.", + "$ref": "#/definitions/InitialCapacityConfigMap" + }, + "MaximumCapacity": { + "description": "Maximum allowed cumulative resources for an Application. No new resources will be created once the limit is hit.", + "$ref": "#/definitions/MaximumAllowedResources" + }, + "Tags": { + "description": "Tag map with key and value", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AutoStartConfiguration": { + "description": "Configuration for Auto Start of Application.", + "$ref": "#/definitions/AutoStartConfiguration" + }, + "AutoStopConfiguration": { + "description": "Configuration for Auto Stop of Application.", + "$ref": "#/definitions/AutoStopConfiguration" + }, + "ImageConfiguration": { + "$ref": "#/definitions/ImageConfigurationInput" + }, + "MonitoringConfiguration": { + "$ref": "#/definitions/MonitoringConfiguration" + }, + "RuntimeConfiguration": { + "$ref": "#/definitions/ConfigurationList" + }, + "NetworkConfiguration": { + "description": "Network Configuration for customer VPC connectivity.", + "$ref": "#/definitions/NetworkConfiguration" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the EMR Serverless Application.", + "type": "string" + }, + "ApplicationId": { + "description": "The ID of the EMR Serverless Application.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "WorkerTypeSpecifications": { + "description": "The key-value pairs that specify worker type to WorkerTypeSpecificationInput. This parameter must contain all valid worker types for a Spark or Hive application. Valid worker types include Driver and Executor for Spark applications and HiveDriver and TezTask for Hive applications. You can either set image details in this parameter for each worker type, or in imageConfiguration for all worker types.", + "$ref": "#/definitions/WorkerTypeSpecificationInputMap" + } + }, + "additionalProperties": false, + "required": [ + "ReleaseLabel", + "Type" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type" + ], + "conditionalCreateOnlyProperties": [ + "/properties/Architecture", + "/properties/ReleaseLabel", + "/properties/WorkerTypeSpecifications", + "/properties/MaximumCapacity", + "/properties/InitialCapacity", + "/properties/AutoStartConfiguration", + "/properties/AutoStopConfiguration", + "/properties/NetworkConfiguration", + "/properties/ImageConfiguration", + "/properties/MonitoringConfiguration", + "/properties/RuntimeConfiguration" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/ApplicationId" + ], + "tagging": { + "taggable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:GenerateDataKey", + "kms:TagResource", + "kms:UntagResource", + "kms:Decrypt", + "emr-serverless:CreateApplication", + "emr-serverless:TagResource", + "emr-serverless:GetApplication", + "iam:CreateServiceLinkedRole", + "ec2:CreateNetworkInterface", + "ecr:BatchGetImage", + "ecr:DescribeImages", + "ecr:GetDownloadUrlForLayer" + ] + }, + "read": { + "permissions": [ + "emr-serverless:GetApplication" + ] + }, + "update": { + "permissions": [ + "emr-serverless:UpdateApplication", + "emr-serverless:TagResource", + "emr-serverless:UntagResource", + "emr-serverless:GetApplication", + "ec2:CreateNetworkInterface", + "ecr:BatchGetImage", + "ecr:DescribeImages", + "ecr:GetDownloadUrlForLayer", + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:GenerateDataKey", + "kms:TagResource", + "kms:UntagResource", + "kms:Decrypt" + ] + }, + "delete": { + "permissions": [ + "emr-serverless:DeleteApplication", + "emr-serverless:GetApplication" + ] + }, + "list": { + "permissions": [ + "emr-serverless:ListApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/entityresolution/matchingworkflow.json b/internal/aws/cfn/schemas/aws/entityresolution/matchingworkflow.json new file mode 100644 index 00000000..3173e396 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/entityresolution/matchingworkflow.json @@ -0,0 +1,368 @@ +{ + "typeName": "AWS::EntityResolution::MatchingWorkflow", + "description": "MatchingWorkflow defined in AWS Entity Resolution service", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-entity-resolution.git", + "definitions": { + "EntityName": { + "type": "string", + "pattern": "^[a-zA-Z_0-9-]*$", + "minLength": 0, + "maxLength": 255 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "AttributeName": { + "type": "string", + "pattern": "^[a-zA-Z_0-9- \\t]*$", + "minLength": 0, + "maxLength": 255 + }, + "SchemaMappingArn": { + "description": "The SchemaMapping arn associated with the Schema", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):entityresolution:.*:[0-9]+:(schemamapping/.*)$" + }, + "KMSArn": { + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):kms:.*:[0-9]+:.*$" + }, + "MatchingWorkflowArn": { + "description": "The default MatchingWorkflow arn", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):entityresolution:.*:[0-9]+:(matchingworkflow/.*)$" + }, + "CreatedAt": { + "description": "The time of this MatchingWorkflow got created", + "type": "string" + }, + "UpdatedAt": { + "description": "The time of this MatchingWorkflow got last updated at", + "type": "string" + }, + "InputSource": { + "type": "object", + "properties": { + "InputSourceARN": { + "description": "An Glue table ARN for the input source table", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn):.*:.*:[0-9]+:.*$" + }, + "SchemaArn": { + "type": "string", + "$ref": "#/definitions/SchemaMappingArn" + }, + "ApplyNormalization": { + "type": "boolean" + } + }, + "required": [ + "InputSourceARN", + "SchemaArn" + ], + "additionalProperties": false + }, + "OutputSource": { + "type": "object", + "properties": { + "OutputS3Path": { + "description": "The S3 path to which Entity Resolution will write the output table", + "type": "string", + "pattern": "^s3://([^/]+)/?(.*?([^/]+)/?)$" + }, + "Output": { + "type": "array", + "insertionOrder": false, + "minItems": 0, + "maxItems": 750, + "items": { + "$ref": "#/definitions/OutputAttribute" + } + }, + "KMSArn": { + "$ref": "#/definitions/KMSArn" + }, + "ApplyNormalization": { + "type": "boolean" + } + }, + "required": [ + "Output", + "OutputS3Path" + ], + "additionalProperties": false + }, + "OutputAttribute": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/AttributeName" + }, + "Hashed": { + "type": "boolean" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "ResolutionTechniques": { + "type": "object", + "properties": { + "ResolutionType": { + "type": "string", + "enum": [ + "RULE_MATCHING", + "ML_MATCHING", + "PROVIDER" + ] + }, + "RuleBasedProperties": { + "$ref": "#/definitions/RuleBasedProperties" + }, + "ProviderProperties": { + "$ref": "#/definitions/ProviderProperties" + } + }, + "additionalProperties": false + }, + "RuleBasedProperties": { + "type": "object", + "properties": { + "Rules": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "maxItems": 15, + "items": { + "$ref": "#/definitions/Rule" + } + }, + "AttributeMatchingModel": { + "type": "string", + "enum": [ + "ONE_TO_ONE", + "MANY_TO_MANY" + ] + } + }, + "required": [ + "AttributeMatchingModel", + "Rules" + ], + "additionalProperties": false + }, + "Rule": { + "type": "object", + "properties": { + "RuleName": { + "type": "string", + "pattern": "^[a-zA-Z_0-9- \\t]*$", + "minLength": 0, + "maxLength": 255 + }, + "MatchingKeys": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "maxItems": 15, + "items": { + "$ref": "#/definitions/AttributeName" + } + } + }, + "required": [ + "RuleName", + "MatchingKeys" + ], + "additionalProperties": false + }, + "ProviderProperties": { + "type": "object", + "properties": { + "ProviderServiceArn": { + "type": "string", + "description": "Arn of the Provider service being used." + }, + "ProviderConfiguration": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.+$": { + "type": "string" + } + }, + "description": "Additional Provider configuration that would be required for the provider service. The Configuration must be in JSON string format" + }, + "IntermediateSourceConfiguration": { + "$ref": "#/definitions/IntermediateSourceConfiguration" + } + }, + "required": [ + "ProviderServiceArn" + ], + "additionalProperties": false + }, + "IntermediateSourceConfiguration": { + "type": "object", + "properties": { + "IntermediateS3Path": { + "type": "string", + "description": "The s3 path that would be used to stage the intermediate data being generated during workflow execution." + } + }, + "required": [ + "IntermediateS3Path" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "WorkflowName": { + "description": "The name of the MatchingWorkflow", + "$ref": "#/definitions/EntityName" + }, + "Description": { + "description": "The description of the MatchingWorkflow", + "$ref": "#/definitions/Description" + }, + "InputSourceConfig": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "maxItems": 20, + "items": { + "$ref": "#/definitions/InputSource" + } + }, + "OutputSourceConfig": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/definitions/OutputSource" + } + }, + "ResolutionTechniques": { + "$ref": "#/definitions/ResolutionTechniques" + }, + "RoleArn": { + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "WorkflowArn": { + "$ref": "#/definitions/MatchingWorkflowArn" + }, + "CreatedAt": { + "$ref": "#/definitions/CreatedAt" + }, + "UpdatedAt": { + "$ref": "#/definitions/UpdatedAt" + } + }, + "createOnlyProperties": [ + "/properties/WorkflowName" + ], + "readOnlyProperties": [ + "/properties/WorkflowArn", + "/properties/UpdatedAt", + "/properties/CreatedAt" + ], + "primaryIdentifier": [ + "/properties/WorkflowName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "entityresolution:CreateMatchingWorkflow", + "entityresolution:GetMatchingWorkflow", + "entityresolution:TagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "entityresolution:GetMatchingWorkflow", + "entityresolution:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "entityresolution:DeleteMatchingWorkflow", + "entityresolution:GetMatchingWorkflow", + "entityresolution:UntagResource" + ] + }, + "list": { + "permissions": [ + "entityresolution:ListMatchingWorkflows" + ] + }, + "update": { + "permissions": [ + "entityresolution:GetMatchingWorkflow", + "entityresolution:UpdateMatchingWorkflow", + "entityresolution:ListTagsForResource", + "entityresolution:TagResource", + "entityresolution:UntagResource", + "iam:PassRole", + "kms:CreateGrant", + "kms:DescribeKey" + ] + } + }, + "required": [ + "WorkflowName", + "InputSourceConfig", + "OutputSourceConfig", + "ResolutionTechniques", + "RoleArn" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/entityresolution/schemamapping.json b/internal/aws/cfn/schemas/aws/entityresolution/schemamapping.json new file mode 100644 index 00000000..b201d6c7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/entityresolution/schemamapping.json @@ -0,0 +1,219 @@ +{ + "typeName": "AWS::EntityResolution::SchemaMapping", + "description": "SchemaMapping defined in AWS Entity Resolution service", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-entity-resolution.git", + "definitions": { + "EntityName": { + "type": "string", + "pattern": "^[a-zA-Z_0-9-]*$", + "minLength": 0, + "maxLength": 255 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 255 + }, + "AttributeName": { + "type": "string", + "pattern": "^[a-zA-Z_0-9- \\t]*$", + "minLength": 0, + "maxLength": 255 + }, + "SchemaAttributeType": { + "type": "string", + "enum": [ + "NAME", + "NAME_FIRST", + "NAME_MIDDLE", + "NAME_LAST", + "ADDRESS", + "ADDRESS_STREET1", + "ADDRESS_STREET2", + "ADDRESS_STREET3", + "ADDRESS_CITY", + "ADDRESS_STATE", + "ADDRESS_COUNTRY", + "ADDRESS_POSTALCODE", + "PHONE", + "PHONE_NUMBER", + "PHONE_COUNTRYCODE", + "EMAIL_ADDRESS", + "UNIQUE_ID", + "DATE", + "STRING", + "PROVIDER_ID" + ] + }, + "MappedInputFields": { + "type": "array", + "items": { + "$ref": "#/definitions/SchemaInputAttribute" + }, + "minItems": 2, + "maxItems": 25, + "insertionOrder": false + }, + "SchemaInputAttribute": { + "type": "object", + "properties": { + "FieldName": { + "$ref": "#/definitions/AttributeName" + }, + "Type": { + "$ref": "#/definitions/SchemaAttributeType" + }, + "SubType": { + "type": "string", + "description": "The subtype of the Attribute. Would be required only when type is PROVIDER_ID" + }, + "GroupName": { + "$ref": "#/definitions/AttributeName" + }, + "MatchKey": { + "$ref": "#/definitions/AttributeName" + } + }, + "required": [ + "FieldName", + "Type" + ], + "additionalProperties": false + }, + "SchemaMappingArn": { + "description": "The SchemaMapping arn associated with the Schema", + "type": "string", + "pattern": "^arn:(aws|aws-us-gov|aws-cn):entityresolution:.*:[0-9]+:(schemamapping/.*)$" + }, + "CreatedAt": { + "description": "The time of this SchemaMapping got created", + "type": "string" + }, + "UpdatedAt": { + "description": "The time of this SchemaMapping got last updated at", + "type": "string" + }, + "HasWorkflows": { + "description": "The boolean value that indicates whether or not a SchemaMapping has MatchingWorkflows that are associated with", + "type": "boolean" + }, + "Tag": { + "description": "A key-value pair to associate with a resource", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "SchemaName": { + "description": "The name of the SchemaMapping", + "$ref": "#/definitions/EntityName" + }, + "Description": { + "description": "The description of the SchemaMapping", + "$ref": "#/definitions/Description" + }, + "MappedInputFields": { + "description": "The SchemaMapping attributes input", + "$ref": "#/definitions/MappedInputFields" + }, + "Tags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SchemaArn": { + "$ref": "#/definitions/SchemaMappingArn" + }, + "CreatedAt": { + "$ref": "#/definitions/CreatedAt" + }, + "UpdatedAt": { + "$ref": "#/definitions/UpdatedAt" + }, + "HasWorkflows": { + "$ref": "#/definitions/HasWorkflows" + } + }, + "createOnlyProperties": [ + "/properties/SchemaName" + ], + "readOnlyProperties": [ + "/properties/SchemaArn", + "/properties/CreatedAt", + "/properties/UpdatedAt", + "/properties/HasWorkflows" + ], + "primaryIdentifier": [ + "/properties/SchemaName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "entityresolution:CreateSchemaMapping", + "entityresolution:GetSchemaMapping", + "entityresolution:TagResource" + ] + }, + "read": { + "permissions": [ + "entityresolution:GetSchemaMapping", + "entityresolution:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "entityresolution:DeleteSchemaMapping", + "entityresolution:GetSchemaMapping" + ] + }, + "update": { + "permissions": [ + "entityresolution:GetSchemaMapping", + "entityresolution:UpdateSchemaMapping", + "entityresolution:ListTagsForResource", + "entityresolution:TagResource", + "entityresolution:UntagResource" + ] + }, + "list": { + "permissions": [ + "entityresolution:ListSchemaMappings" + ] + } + }, + "required": [ + "SchemaName", + "MappedInputFields" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/events/apidestination.json b/internal/aws/cfn/schemas/aws/events/apidestination.json new file mode 100644 index 00000000..f50460b1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/events/apidestination.json @@ -0,0 +1,92 @@ +{ + "typeName": "AWS::Events::ApiDestination", + "description": "Resource Type definition for AWS::Events::ApiDestination.", + "properties": { + "Name": { + "description": "Name of the apiDestination.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Description": { + "type": "string", + "maxLength": 512 + }, + "ConnectionArn": { + "description": "The arn of the connection.", + "type": "string" + }, + "Arn": { + "description": "The arn of the api destination.", + "type": "string" + }, + "InvocationRateLimitPerSecond": { + "type": "integer", + "minimum": 1 + }, + "InvocationEndpoint": { + "description": "Url endpoint to invoke.", + "type": "string" + }, + "HttpMethod": { + "type": "string", + "enum": [ + "GET", + "HEAD", + "POST", + "OPTIONS", + "PUT", + "DELETE", + "PATCH" + ] + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "required": [ + "ConnectionArn", + "InvocationEndpoint", + "HttpMethod" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "events:CreateApiDestination", + "events:DescribeApiDestination" + ] + }, + "read": { + "permissions": [ + "events:DescribeApiDestination" + ] + }, + "update": { + "permissions": [ + "events:UpdateApiDestination", + "events:DescribeApiDestination" + ] + }, + "delete": { + "permissions": [ + "events:DeleteApiDestination", + "events:DescribeApiDestination" + ] + }, + "list": { + "permissions": [ + "events:ListApiDestinations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/events/archive.json b/internal/aws/cfn/schemas/aws/events/archive.json new file mode 100644 index 00000000..0fb02a8e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/events/archive.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::Events::Archive", + "description": "Resource Type definition for AWS::Events::Archive", + "additionalProperties": false, + "properties": { + "ArchiveName": { + "type": "string", + "minLength": 1, + "maxLength": 48 + }, + "SourceArn": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "EventPattern": { + "type": "object" + }, + "Arn": { + "type": "string" + }, + "RetentionDays": { + "type": "integer" + } + }, + "required": [ + "SourceArn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ArchiveName", + "/properties/SourceArn" + ], + "primaryIdentifier": [ + "/properties/ArchiveName" + ], + "handlers": { + "create": { + "permissions": [ + "events:DescribeArchive", + "events:CreateArchive" + ] + }, + "delete": { + "permissions": [ + "events:DescribeArchive", + "events:DeleteArchive" + ] + }, + "list": { + "permissions": [ + "events:ListArchives" + ] + }, + "update": { + "permissions": [ + "events:DescribeArchive", + "events:UpdateArchive" + ] + }, + "read": { + "permissions": [ + "events:DescribeArchive" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/events/connection.json b/internal/aws/cfn/schemas/aws/events/connection.json new file mode 100644 index 00000000..c06ce494 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/events/connection.json @@ -0,0 +1,252 @@ +{ + "typeName": "AWS::Events::Connection", + "description": "Resource Type definition for AWS::Events::Connection.", + "definitions": { + "AuthParameters": { + "type": "object", + "minProperties": 1, + "maxProperties": 2, + "properties": { + "ApiKeyAuthParameters": { + "$ref": "#/definitions/ApiKeyAuthParameters" + }, + "BasicAuthParameters": { + "$ref": "#/definitions/BasicAuthParameters" + }, + "OAuthParameters": { + "$ref": "#/definitions/OAuthParameters" + }, + "InvocationHttpParameters": { + "$ref": "#/definitions/ConnectionHttpParameters" + } + }, + "oneOf": [ + { + "required": [ + "BasicAuthParameters" + ] + }, + { + "required": [ + "OAuthParameters" + ] + }, + { + "required": [ + "ApiKeyAuthParameters" + ] + } + ], + "additionalProperties": false + }, + "BasicAuthParameters": { + "type": "object", + "properties": { + "Username": { + "type": "string" + }, + "Password": { + "type": "string" + } + }, + "required": [ + "Username", + "Password" + ], + "additionalProperties": false + }, + "OAuthParameters": { + "type": "object", + "properties": { + "ClientParameters": { + "$ref": "#/definitions/ClientParameters" + }, + "AuthorizationEndpoint": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "HttpMethod": { + "type": "string", + "enum": [ + "GET", + "POST", + "PUT" + ] + }, + "OAuthHttpParameters": { + "$ref": "#/definitions/ConnectionHttpParameters" + } + }, + "required": [ + "ClientParameters", + "AuthorizationEndpoint", + "HttpMethod" + ], + "additionalProperties": false + }, + "ApiKeyAuthParameters": { + "type": "object", + "properties": { + "ApiKeyName": { + "type": "string" + }, + "ApiKeyValue": { + "type": "string" + } + }, + "required": [ + "ApiKeyName", + "ApiKeyValue" + ], + "additionalProperties": false + }, + "ClientParameters": { + "type": "object", + "properties": { + "ClientID": { + "type": "string" + }, + "ClientSecret": { + "type": "string" + } + }, + "required": [ + "ClientID", + "ClientSecret" + ], + "additionalProperties": false + }, + "ConnectionHttpParameters": { + "type": "object", + "properties": { + "HeaderParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/Parameter" + } + }, + "QueryStringParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/Parameter" + } + }, + "BodyParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/Parameter" + } + } + }, + "additionalProperties": false + }, + "Parameter": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + }, + "IsValueSecret": { + "type": "boolean", + "default": true + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of the connection.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Arn": { + "description": "The arn of the connection resource.", + "type": "string" + }, + "SecretArn": { + "description": "The arn of the secrets manager secret created in the customer account.", + "type": "string" + }, + "Description": { + "description": "Description of the connection.", + "type": "string", + "maxLength": 512 + }, + "AuthorizationType": { + "type": "string", + "enum": [ + "API_KEY", + "BASIC", + "OAUTH_CLIENT_CREDENTIALS" + ] + }, + "AuthParameters": { + "$ref": "#/definitions/AuthParameters" + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/SecretArn" + ], + "writeOnlyProperties": [ + "/properties/AuthParameters" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "events:CreateConnection", + "events:DescribeConnection", + "secretsmanager:CreateSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:PutSecretValue", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "events:DescribeConnection" + ] + }, + "update": { + "permissions": [ + "events:UpdateConnection", + "events:DescribeConnection", + "secretsmanager:CreateSecret", + "secretsmanager:UpdateSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:PutSecretValue" + ] + }, + "delete": { + "permissions": [ + "events:DeleteConnection", + "events:DescribeConnection" + ] + }, + "list": { + "permissions": [ + "events:ListConnections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/events/endpoint.json b/internal/aws/cfn/schemas/aws/events/endpoint.json new file mode 100644 index 00000000..405c8e9a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/events/endpoint.json @@ -0,0 +1,238 @@ +{ + "typeName": "AWS::Events::Endpoint", + "description": "Resource Type definition for AWS::Events::Endpoint.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-events.git", + "definitions": { + "HealthCheck": { + "type": "string", + "minLength": 1, + "maxLength": 1600, + "pattern": "^arn:aws([a-z]|\\-)*:route53:::healthcheck/[\\-a-z0-9]+$" + }, + "Primary": { + "type": "object", + "additionalProperties": false, + "properties": { + "HealthCheck": { + "$ref": "#/definitions/HealthCheck" + } + }, + "required": [ + "HealthCheck" + ] + }, + "Route": { + "type": "string", + "minLength": 9, + "maxLength": 20, + "pattern": "^[\\-a-z0-9]+$" + }, + "Secondary": { + "type": "object", + "additionalProperties": false, + "properties": { + "Route": { + "$ref": "#/definitions/Route" + } + }, + "required": [ + "Route" + ] + }, + "FailoverConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Primary": { + "$ref": "#/definitions/Primary" + }, + "Secondary": { + "$ref": "#/definitions/Secondary" + } + }, + "required": [ + "Primary", + "Secondary" + ] + }, + "RoutingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "FailoverConfig": { + "$ref": "#/definitions/FailoverConfig" + } + }, + "required": [ + "FailoverConfig" + ] + }, + "EventBusArn": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^arn:aws[a-z-]*:events:[a-z]{2}-[a-z-]+-\\d+:\\d{12}:event-bus/[\\w.-]+$" + }, + "EndpointEventBus": { + "type": "object", + "additionalProperties": false, + "properties": { + "EventBusArn": { + "$ref": "#/definitions/EventBusArn" + } + }, + "required": [ + "EventBusArn" + ] + }, + "EventBuses": { + "type": "array", + "insertionOrder": false, + "minItems": 2, + "maxItems": 2, + "items": { + "$ref": "#/definitions/EndpointEventBus" + } + }, + "ReplicationState": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "ReplicationConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "State": { + "$ref": "#/definitions/ReplicationState" + } + }, + "required": [ + "State" + ] + } + }, + "properties": { + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[\\.\\-_A-Za-z0-9]+$" + }, + "Arn": { + "type": "string", + "minLength": 1, + "maxLength": 1600, + "pattern": "^arn:aws([a-z]|\\-)*:events:([a-z]|\\d|\\-)*:([0-9]{12})?:endpoint\\/[/\\.\\-_A-Za-z0-9]+$" + }, + "RoleArn": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws[a-z-]*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$" + }, + "Description": { + "type": "string", + "maxLength": 512, + "pattern": ".*" + }, + "RoutingConfig": { + "$ref": "#/definitions/RoutingConfig" + }, + "ReplicationConfig": { + "$ref": "#/definitions/ReplicationConfig" + }, + "EventBuses": { + "$ref": "#/definitions/EventBuses" + }, + "EndpointId": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "pattern": "^[A-Za-z0-9\\-]+[\\.][A-Za-z0-9\\-]+$" + }, + "EndpointUrl": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^(https://)?[\\.\\-a-z0-9]+$" + }, + "State": { + "type": "string", + "enum": [ + "ACTIVE", + "CREATING", + "UPDATING", + "DELETING", + "CREATE_FAILED", + "UPDATE_FAILED" + ] + }, + "StateReason": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^.*$" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "RoutingConfig", + "EventBuses" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/EndpointId", + "/properties/EndpointUrl", + "/properties/State", + "/properties/StateReason" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "events:CreateEndpoint", + "events:DescribeEndpoint", + "route53:GetHealthCheck", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "events:DescribeEndpoint" + ] + }, + "update": { + "permissions": [ + "events:DescribeEndpoint", + "events:UpdateEndpoint", + "route53:GetHealthCheck", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "events:DeleteEndpoint", + "events:DescribeEndpoint" + ] + }, + "list": { + "permissions": [ + "events:ListEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/events/eventbus.json b/internal/aws/cfn/schemas/aws/events/eventbus.json new file mode 100644 index 00000000..031b6ad1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/events/eventbus.json @@ -0,0 +1,112 @@ +{ + "typeName": "AWS::Events::EventBus", + "description": "Resource type definition for AWS::Events::EventBus", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-events", + "properties": { + "EventSourceName": { + "description": "If you are creating a partner event bus, this specifies the partner event source that the new event bus will be matched with.", + "type": "string" + }, + "Name": { + "description": "The name of the event bus.", + "type": "string" + }, + "Tags": { + "description": "Any tags assigned to the event bus.", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Policy": { + "description": "A JSON string that describes the permission policy statement for the event bus.", + "type": [ + "object", + "string" + ] + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) for the event bus.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/EventSourceName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "events:CreateEventBus", + "events:DescribeEventBus", + "events:PutPermission", + "events:ListTagsForResource", + "events:TagResource" + ] + }, + "read": { + "permissions": [ + "events:DescribeEventBus", + "events:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "events:TagResource", + "events:UntagResource", + "events:PutPermission", + "events:DescribeEventBus" + ] + }, + "delete": { + "permissions": [ + "events:DescribeEventBus", + "events:DeleteEventBus" + ] + }, + "list": { + "permissions": [ + "events:ListEventBuses", + "events:ListTagsForResource" + ] + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/events/eventbuspolicy.json b/internal/aws/cfn/schemas/aws/events/eventbuspolicy.json new file mode 100644 index 00000000..99bd136d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/events/eventbuspolicy.json @@ -0,0 +1,58 @@ +{ + "typeName": "AWS::Events::EventBusPolicy", + "description": "Resource Type definition for AWS::Events::EventBusPolicy", + "additionalProperties": false, + "properties": { + "EventBusName": { + "type": "string" + }, + "Condition": { + "$ref": "#/definitions/Condition" + }, + "Action": { + "type": "string" + }, + "StatementId": { + "type": "string" + }, + "Statement": { + "type": "object" + }, + "Id": { + "type": "string" + }, + "Principal": { + "type": "string" + } + }, + "definitions": { + "Condition": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + } + }, + "required": [ + "StatementId" + ], + "createOnlyProperties": [ + "/properties/EventBusName", + "/properties/StatementId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/events/rule.json b/internal/aws/cfn/schemas/aws/events/rule.json new file mode 100644 index 00000000..4d6cda38 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/events/rule.json @@ -0,0 +1,589 @@ +{ + "tagging": { + "taggable": false + }, + "handlers": { + "read": { + "permissions": [ + "iam:PassRole", + "events:DescribeRule", + "events:ListTargetsByRule" + ] + }, + "create": { + "permissions": [ + "iam:PassRole", + "events:DescribeRule", + "events:PutRule", + "events:PutTargets" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "events:DescribeRule", + "events:PutRule", + "events:RemoveTargets", + "events:PutTargets" + ] + }, + "list": { + "permissions": [ + "events:ListRules" + ] + }, + "delete": { + "permissions": [ + "iam:PassRole", + "events:DescribeRule", + "events:DeleteRule", + "events:RemoveTargets", + "events:ListTargetsByRule" + ] + } + }, + "typeName": "AWS::Events::Rule", + "readOnlyProperties": [ + "/properties/Arn" + ], + "description": "Resource Type definition for AWS::Events::Rule", + "createOnlyProperties": [ + "/properties/Name" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Arn" + ], + "definitions": { + "CapacityProviderStrategyItem": { + "additionalProperties": false, + "type": "object", + "properties": { + "CapacityProvider": { + "type": "string" + }, + "Base": { + "type": "integer" + }, + "Weight": { + "type": "integer" + } + }, + "required": [ + "CapacityProvider" + ] + }, + "HttpParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "PathParameterValues": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "HeaderParameters": { + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object" + }, + "QueryStringParameters": { + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object" + } + } + }, + "DeadLetterConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "Arn": { + "type": "string" + } + } + }, + "RunCommandParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "RunCommandTargets": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/RunCommandTarget" + } + } + }, + "required": [ + "RunCommandTargets" + ] + }, + "PlacementStrategy": { + "additionalProperties": false, + "type": "object", + "properties": { + "Field": { + "type": "string" + }, + "Type": { + "type": "string" + } + } + }, + "InputTransformer": { + "additionalProperties": false, + "type": "object", + "properties": { + "InputPathsMap": { + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object" + }, + "InputTemplate": { + "type": "string" + } + }, + "required": [ + "InputTemplate" + ] + }, + "KinesisParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "PartitionKeyPath": { + "type": "string" + } + }, + "required": [ + "PartitionKeyPath" + ] + }, + "BatchRetryStrategy": { + "additionalProperties": false, + "type": "object", + "properties": { + "Attempts": { + "type": "integer" + } + } + }, + "RedshiftDataParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "StatementName": { + "type": "string" + }, + "Sqls": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "Database": { + "type": "string" + }, + "SecretManagerArn": { + "type": "string" + }, + "DbUser": { + "type": "string" + }, + "Sql": { + "type": "string" + }, + "WithEvent": { + "type": "boolean" + } + }, + "required": [ + "Database" + ] + }, + "AppSyncParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "GraphQLOperation": { + "type": "string" + } + }, + "required": [ + "GraphQLOperation" + ] + }, + "Target": { + "additionalProperties": false, + "type": "object", + "properties": { + "InputPath": { + "type": "string" + }, + "HttpParameters": { + "$ref": "#/definitions/HttpParameters" + }, + "DeadLetterConfig": { + "$ref": "#/definitions/DeadLetterConfig" + }, + "RunCommandParameters": { + "$ref": "#/definitions/RunCommandParameters" + }, + "InputTransformer": { + "$ref": "#/definitions/InputTransformer" + }, + "KinesisParameters": { + "$ref": "#/definitions/KinesisParameters" + }, + "RoleArn": { + "type": "string" + }, + "RedshiftDataParameters": { + "$ref": "#/definitions/RedshiftDataParameters" + }, + "AppSyncParameters": { + "$ref": "#/definitions/AppSyncParameters" + }, + "Input": { + "type": "string" + }, + "SqsParameters": { + "$ref": "#/definitions/SqsParameters" + }, + "EcsParameters": { + "$ref": "#/definitions/EcsParameters" + }, + "BatchParameters": { + "$ref": "#/definitions/BatchParameters" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "SageMakerPipelineParameters": { + "$ref": "#/definitions/SageMakerPipelineParameters" + }, + "RetryPolicy": { + "$ref": "#/definitions/RetryPolicy" + } + }, + "required": [ + "Id", + "Arn" + ] + }, + "PlacementConstraint": { + "additionalProperties": false, + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Expression": { + "type": "string" + } + } + }, + "AwsVpcConfiguration": { + "additionalProperties": false, + "type": "object", + "properties": { + "SecurityGroups": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "Subnets": { + "uniqueItems": false, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "AssignPublicIp": { + "type": "string" + } + }, + "required": [ + "Subnets" + ] + }, + "SqsParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "MessageGroupId": { + "type": "string" + } + }, + "required": [ + "MessageGroupId" + ] + }, + "RunCommandTarget": { + "additionalProperties": false, + "type": "object", + "properties": { + "Values": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Values", + "Key" + ] + }, + "EcsParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "PlatformVersion": { + "type": "string" + }, + "Group": { + "type": "string" + }, + "EnableECSManagedTags": { + "type": "boolean" + }, + "EnableExecuteCommand": { + "type": "boolean" + }, + "PlacementConstraints": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/PlacementConstraint" + } + }, + "PropagateTags": { + "type": "string" + }, + "TaskCount": { + "type": "integer" + }, + "PlacementStrategies": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/PlacementStrategy" + } + }, + "CapacityProviderStrategy": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/CapacityProviderStrategyItem" + } + }, + "LaunchType": { + "type": "string" + }, + "ReferenceId": { + "type": "string" + }, + "TagList": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + }, + "TaskDefinitionArn": { + "type": "string" + } + }, + "required": [ + "TaskDefinitionArn" + ] + }, + "BatchParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "ArrayProperties": { + "$ref": "#/definitions/BatchArrayProperties" + }, + "JobName": { + "type": "string" + }, + "RetryStrategy": { + "$ref": "#/definitions/BatchRetryStrategy" + }, + "JobDefinition": { + "type": "string" + } + }, + "required": [ + "JobName", + "JobDefinition" + ] + }, + "NetworkConfiguration": { + "additionalProperties": false, + "type": "object", + "properties": { + "AwsVpcConfiguration": { + "$ref": "#/definitions/AwsVpcConfiguration" + } + } + }, + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + }, + "SageMakerPipelineParameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "PipelineParameterList": { + "uniqueItems": true, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/SageMakerPipelineParameter" + } + } + } + }, + "RetryPolicy": { + "additionalProperties": false, + "type": "object", + "properties": { + "MaximumRetryAttempts": { + "type": "integer" + }, + "MaximumEventAgeInSeconds": { + "type": "integer" + } + } + }, + "BatchArrayProperties": { + "additionalProperties": false, + "type": "object", + "properties": { + "Size": { + "type": "integer" + } + } + }, + "SageMakerPipelineParameter": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Value", + "Name" + ] + } + }, + "properties": { + "EventBusName": { + "description": "The name or ARN of the event bus associated with the rule. If you omit this, the default event bus is used.", + "type": "string" + }, + "EventPattern": { + "description": "The event pattern of the rule. For more information, see Events and Event Patterns in the Amazon EventBridge User Guide.", + "type": [ + "string", + "object" + ] + }, + "ScheduleExpression": { + "description": "The scheduling expression. For example, \"cron(0 20 * * ? *)\", \"rate(5 minutes)\". For more information, see Creating an Amazon EventBridge rule that runs on a schedule.", + "type": "string" + }, + "Description": { + "description": "The description of the rule.", + "type": "string" + }, + "State": { + "description": "The state of the rule.", + "type": "string", + "enum": [ + "DISABLED", + "ENABLED", + "ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS" + ] + }, + "Targets": { + "uniqueItems": true, + "description": "Adds the specified targets to the specified rule, or updates the targets if they are already associated with the rule.\nTargets are the resources that are invoked when a rule is triggered.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Target" + } + }, + "Arn": { + "description": "The ARN of the rule, such as arn:aws:events:us-east-2:123456789012:rule/example.", + "type": "string" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the role that is used for target invocation.", + "type": "string" + }, + "Name": { + "description": "The name of the rule.", + "type": "string" + } + }, + "conditionalCreateOnlyProperties": [ + "/properties/EventBusName" + ] +} diff --git a/internal/aws/cfn/schemas/aws/eventschemas/discoverer.json b/internal/aws/cfn/schemas/aws/eventschemas/discoverer.json new file mode 100644 index 00000000..f58129c4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eventschemas/discoverer.json @@ -0,0 +1,123 @@ +{ + "typeName": "AWS::EventSchemas::Discoverer", + "description": "Resource Type definition for AWS::EventSchemas::Discoverer", + "additionalProperties": false, + "properties": { + "DiscovererArn": { + "type": "string", + "description": "The ARN of the discoverer." + }, + "DiscovererId": { + "type": "string", + "description": "The Id of the discoverer." + }, + "Description": { + "type": "string", + "description": "A description for the discoverer." + }, + "SourceArn": { + "type": "string", + "description": "The ARN of the event bus." + }, + "CrossAccount": { + "type": "boolean", + "default": true, + "description": "Defines whether event schemas from other accounts are discovered. Default is True." + }, + "State": { + "type": "string", + "description": "Defines the current state of the discoverer." + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagsEntry" + }, + "description": "Tags associated with the resource." + } + }, + "definitions": { + "TagsEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "SourceArn" + ], + "primaryIdentifier": [ + "/properties/DiscovererArn" + ], + "readOnlyProperties": [ + "/properties/DiscovererArn", + "/properties/DiscovererId", + "/properties/State" + ], + "createOnlyProperties": [ + "/properties/SourceArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "schemas:CreateDiscoverer", + "schemas:DescribeDiscoverer", + "schemas:TagResource", + "events:PutRule", + "events:PutTargets", + "events:EnableRule", + "events:ListTargetsByRule", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "schemas:DescribeDiscoverer" + ] + }, + "update": { + "permissions": [ + "schemas:DescribeDiscoverer", + "schemas:UpdateDiscoverer", + "schemas:TagResource", + "schemas:UntagResource", + "schemas:ListTagsForResource", + "events:PutTargets", + "events:PutRule" + ] + }, + "delete": { + "permissions": [ + "schemas:DescribeDiscoverer", + "schemas:DeleteDiscoverer", + "events:DeleteRule", + "events:DisableRule", + "events:RemoveTargets" + ] + }, + "list": { + "permissions": [ + "schemas:ListDiscoverers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/eventschemas/registry.json b/internal/aws/cfn/schemas/aws/eventschemas/registry.json new file mode 100644 index 00000000..f84ff25c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eventschemas/registry.json @@ -0,0 +1,95 @@ +{ + "typeName": "AWS::EventSchemas::Registry", + "description": "Resource Type definition for AWS::EventSchemas::Registry", + "additionalProperties": false, + "properties": { + "RegistryName": { + "type": "string", + "description": "The name of the schema registry." + }, + "Description": { + "type": "string", + "description": "A description of the registry to be created." + }, + "RegistryArn": { + "type": "string", + "description": "The ARN of the registry." + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagsEntry" + }, + "description": "Tags associated with the resource." + } + }, + "definitions": { + "TagsEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "primaryIdentifier": [ + "/properties/RegistryArn" + ], + "readOnlyProperties": [ + "/properties/RegistryArn" + ], + "createOnlyProperties": [ + "/properties/RegistryName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "schemas:DescribeRegistry", + "schemas:CreateRegistry", + "schemas:TagResource" + ] + }, + "read": { + "permissions": [ + "schemas:DescribeRegistry" + ] + }, + "update": { + "permissions": [ + "schemas:DescribeRegistry", + "schemas:UpdateRegistry", + "schemas:TagResource", + "schemas:UntagResource", + "schemas:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "schemas:DescribeRegistry", + "schemas:DeleteRegistry" + ] + }, + "list": { + "permissions": [ + "schemas:ListRegistries" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/eventschemas/registrypolicy.json b/internal/aws/cfn/schemas/aws/eventschemas/registrypolicy.json new file mode 100644 index 00000000..c59b21bc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eventschemas/registrypolicy.json @@ -0,0 +1,58 @@ +{ + "typeName": "AWS::EventSchemas::RegistryPolicy", + "description": "Resource Type definition for AWS::EventSchemas::RegistryPolicy", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Policy": { + "type": "object" + }, + "RegistryName": { + "type": "string" + }, + "RevisionId": { + "type": "string" + } + }, + "required": [ + "RegistryName", + "Policy" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "schemas:PutResourcePolicy", + "schemas:GetResourcePolicy", + "schemas:DescribeRegistry" + ] + }, + "delete": { + "permissions": [ + "schemas:DeleteResourcePolicy", + "schemas:GetResourcePolicy" + ] + }, + "update": { + "permissions": [ + "schemas:PutResourcePolicy", + "schemas:GetResourcePolicy" + ] + }, + "read": { + "permissions": [ + "schemas:GetResourcePolicy" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/eventschemas/schema.json b/internal/aws/cfn/schemas/aws/eventschemas/schema.json new file mode 100644 index 00000000..69295e60 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/eventschemas/schema.json @@ -0,0 +1,141 @@ +{ + "typeName": "AWS::EventSchemas::Schema", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eventschemas", + "description": "Resource Type definition for AWS::EventSchemas::Schema", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string", + "description": "The type of schema. Valid types include OpenApi3 and JSONSchemaDraft4." + }, + "Description": { + "type": "string", + "description": "A description of the schema." + }, + "SchemaVersion": { + "type": "string", + "description": "The version number of the schema." + }, + "Content": { + "type": "string", + "description": "The source of the schema definition." + }, + "RegistryName": { + "type": "string", + "description": "The name of the schema registry." + }, + "SchemaArn": { + "type": "string", + "description": "The ARN of the schema." + }, + "SchemaName": { + "type": "string", + "description": "The name of the schema." + }, + "LastModified": { + "type": "string", + "description": "The last modified time of the schema." + }, + "VersionCreatedDate": { + "type": "string", + "description": "The date the schema version was created." + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TagsEntry" + }, + "description": "Tags associated with the resource." + } + }, + "definitions": { + "TagsEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Type", + "Content", + "RegistryName" + ], + "primaryIdentifier": [ + "/properties/SchemaArn" + ], + "createOnlyProperties": [ + "/properties/SchemaName", + "/properties/RegistryName" + ], + "readOnlyProperties": [ + "/properties/SchemaArn", + "/properties/LastModified", + "/properties/VersionCreatedDate", + "/properties/SchemaVersion" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "schemas:DescribeSchema", + "schemas:CreateSchema", + "schemas:TagResource" + ] + }, + "read": { + "permissions": [ + "schemas:DescribeSchema" + ] + }, + "update": { + "permissions": [ + "schemas:DescribeSchema", + "schemas:UpdateSchema", + "schemas:TagResource", + "schemas:UntagResource", + "schemas:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "schemas:DescribeSchema", + "schemas:DeleteSchema", + "schemas:DeleteSchemaVersion" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "RegistryName": { + "type": "string" + } + }, + "required": [ + "RegistryName" + ] + }, + "permissions": [ + "schemas:ListSchemas", + "schemas:ListSchemaVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/evidently/experiment.json b/internal/aws/cfn/schemas/aws/evidently/experiment.json new file mode 100644 index 00000000..478f7c7f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/evidently/experiment.json @@ -0,0 +1,314 @@ +{ + "typeName": "AWS::Evidently::Experiment", + "description": "Resource Type definition for AWS::Evidently::Experiment.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently", + "properties": { + "Arn": { + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*/experiment/[-a-zA-Z0-9._]*" + }, + "Name": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "Project": { + "type": "string", + "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*)", + "minLength": 0, + "maxLength": 2048 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 160 + }, + "RunningStatus": { + "description": "Start Experiment. Default is False", + "$ref": "#/definitions/RunningStatusObject" + }, + "RandomizationSalt": { + "type": "string", + "minLength": 0, + "maxLength": 127, + "pattern": ".*" + }, + "Treatments": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/TreatmentObject" + }, + "minItems": 2, + "maxItems": 5 + }, + "MetricGoals": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/MetricGoalObject" + }, + "minItems": 1, + "maxItems": 3 + }, + "SamplingRate": { + "type": "integer", + "minimum": 0, + "maximum": 100000 + }, + "OnlineAbConfig": { + "$ref": "#/definitions/OnlineAbConfigObject" + }, + "Segment": { + "type": "string", + "minLength": 0, + "maxLength": 2048, + "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:segment/[-a-zA-Z0-9._]*)" + }, + "RemoveSegment": { + "type": "boolean" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "RunningStatusObject": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "description": "Provide START or STOP action to apply on an experiment", + "type": "string" + }, + "AnalysisCompleteTime": { + "description": "Provide the analysis Completion time for an experiment", + "type": "string" + }, + "Reason": { + "description": "Reason is a required input for stopping the experiment", + "type": "string" + }, + "DesiredState": { + "description": "Provide CANCELLED or COMPLETED desired state when stopping an experiment", + "type": "string", + "pattern": "^(CANCELLED|COMPLETED)" + } + }, + "oneOf": [ + { + "required": [ + "Status", + "AnalysisCompleteTime" + ] + }, + { + "required": [ + "Status", + "Reason", + "DesiredState" + ] + } + ] + }, + "TreatmentObject": { + "type": "object", + "properties": { + "TreatmentName": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "type": "string" + }, + "Feature": { + "type": "string", + "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:.*)" + }, + "Variation": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "TreatmentName", + "Feature", + "Variation" + ], + "additionalProperties": false + }, + "MetricGoalObject": { + "type": "object", + "properties": { + "MetricName": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[\\S]+$" + }, + "EntityIdKey": { + "description": "The JSON path to reference the entity id in the event.", + "type": "string" + }, + "ValueKey": { + "description": "The JSON path to reference the numerical metric value in the event.", + "type": "string" + }, + "EventPattern": { + "description": "Event patterns have the same structure as the events they match. Rules use event patterns to select events. An event pattern either matches an event or it doesn't.", + "type": "string" + }, + "UnitLabel": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": ".*" + }, + "DesiredChange": { + "type": "string", + "enum": [ + "INCREASE", + "DECREASE" + ] + } + }, + "required": [ + "MetricName", + "EntityIdKey", + "ValueKey", + "DesiredChange" + ], + "additionalProperties": false + }, + "OnlineAbConfigObject": { + "type": "object", + "properties": { + "ControlTreatmentName": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "TreatmentWeights": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TreatmentToWeight" + } + } + }, + "additionalProperties": false + }, + "TreatmentToWeight": { + "type": "object", + "properties": { + "Treatment": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "SplitWeight": { + "type": "integer", + "minimum": 0, + "maximum": 100000 + } + }, + "required": [ + "Treatment", + "SplitWeight" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Project", + "Treatments", + "MetricGoals", + "OnlineAbConfig" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Project" + ], + "handlers": { + "create": { + "permissions": [ + "evidently:CreateExperiment", + "evidently:TagResource", + "evidently:GetExperiment", + "evidently:StartExperiment" + ] + }, + "read": { + "permissions": [ + "evidently:GetExperiment", + "evidently:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "evidently:UpdateExperiment", + "evidently:TagResource", + "evidently:UntagResource", + "evidently:GetExperiment", + "evidently:StartExperiment", + "evidently:StopExperiment" + ] + }, + "delete": { + "permissions": [ + "evidently:DeleteExperiment", + "evidently:UntagResource", + "evidently:GetExperiment" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/evidently/feature.json b/internal/aws/cfn/schemas/aws/evidently/feature.json new file mode 100644 index 00000000..0d2db88b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/evidently/feature.json @@ -0,0 +1,213 @@ +{ + "typeName": "AWS::Evidently::Feature", + "description": "Resource Type definition for AWS::Evidently::Feature.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently", + "properties": { + "Arn": { + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*/feature/[-a-zA-Z0-9._]*", + "minLength": 0, + "maxLength": 2048 + }, + "Project": { + "type": "string", + "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*)", + "minLength": 0, + "maxLength": 2048 + }, + "Name": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 160 + }, + "EvaluationStrategy": { + "type": "string", + "enum": [ + "ALL_RULES", + "DEFAULT_VARIATION" + ] + }, + "Variations": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/VariationObject" + }, + "minItems": 1, + "maxItems": 5 + }, + "DefaultVariation": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "EntityOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/EntityOverride" + }, + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 2500 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "VariationObject": { + "type": "object", + "properties": { + "VariationName": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "BooleanValue": { + "type": "boolean" + }, + "StringValue": { + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "LongValue": { + "type": "number" + }, + "DoubleValue": { + "type": "number" + } + }, + "oneOf": [ + { + "required": [ + "VariationName", + "StringValue" + ] + }, + { + "required": [ + "VariationName", + "BooleanValue" + ] + }, + { + "required": [ + "VariationName", + "LongValue" + ] + }, + { + "required": [ + "VariationName", + "DoubleValue" + ] + } + ], + "additionalProperties": false + }, + "EntityOverride": { + "type": "object", + "properties": { + "EntityId": { + "type": "string" + }, + "Variation": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Project", + "Variations" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Project" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "evidently:CreateFeature", + "evidently:TagResource", + "evidently:GetFeature" + ] + }, + "read": { + "permissions": [ + "evidently:GetFeature", + "evidently:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "evidently:UpdateFeature", + "evidently:ListTagsForResource", + "evidently:TagResource", + "evidently:UntagResource", + "evidently:GetFeature" + ] + }, + "delete": { + "permissions": [ + "evidently:DeleteFeature", + "evidently:UntagResource", + "evidently:GetFeature" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/evidently/launch.json b/internal/aws/cfn/schemas/aws/evidently/launch.json new file mode 100644 index 00000000..062c4bbd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/evidently/launch.json @@ -0,0 +1,315 @@ +{ + "typeName": "AWS::Evidently::Launch", + "description": "Resource Type definition for AWS::Evidently::Launch.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently", + "properties": { + "Arn": { + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*/launch/[-a-zA-Z0-9._]*" + }, + "Name": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "Project": { + "type": "string", + "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*)", + "minLength": 0, + "maxLength": 2048 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 160 + }, + "RandomizationSalt": { + "type": "string", + "minLength": 0, + "maxLength": 127, + "pattern": ".*" + }, + "ScheduledSplitsConfig": { + "type": "array", + "items": { + "$ref": "#/definitions/StepConfig" + }, + "uniqueItems": true, + "insertionOrder": true, + "minItems": 1, + "maxItems": 6 + }, + "Groups": { + "type": "array", + "items": { + "$ref": "#/definitions/LaunchGroupObject" + }, + "uniqueItems": true, + "insertionOrder": true, + "minItems": 1, + "maxItems": 5 + }, + "MetricMonitors": { + "type": "array", + "items": { + "$ref": "#/definitions/MetricDefinitionObject" + }, + "uniqueItems": true, + "insertionOrder": true, + "minItems": 0, + "maxItems": 3 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ExecutionStatus": { + "description": "Start or Stop Launch Launch. Default is not started.", + "$ref": "#/definitions/ExecutionStatusObject" + } + }, + "definitions": { + "ExecutionStatusObject": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "description": "Provide START or STOP action to apply on a launch", + "type": "string" + }, + "DesiredState": { + "description": "Provide CANCELLED or COMPLETED as the launch desired state. Defaults to Completed if not provided.", + "type": "string" + }, + "Reason": { + "description": "Provide a reason for stopping the launch. Defaults to empty if not provided.", + "type": "string" + } + }, + "required": [ + "Status" + ] + }, + "LaunchGroupObject": { + "type": "object", + "properties": { + "GroupName": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 160 + }, + "Feature": { + "type": "string" + }, + "Variation": { + "type": "string" + } + }, + "required": [ + "GroupName", + "Feature", + "Variation" + ], + "additionalProperties": false + }, + "GroupToWeight": { + "type": "object", + "properties": { + "GroupName": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "SplitWeight": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "GroupName", + "SplitWeight" + ] + }, + "SegmentOverride": { + "type": "object", + "properties": { + "Segment": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "([-a-zA-Z0-9._]*)|(arn:[^:]*:[^:]*:[^:]*:[^:]*:segment/[-a-zA-Z0-9._]*)" + }, + "EvaluationOrder": { + "type": "integer" + }, + "Weights": { + "type": "array", + "items": { + "$ref": "#/definitions/GroupToWeight" + }, + "uniqueItems": true, + "insertionOrder": false + } + }, + "additionalProperties": false, + "required": [ + "Segment", + "EvaluationOrder", + "Weights" + ] + }, + "StepConfig": { + "type": "object", + "properties": { + "StartTime": { + "type": "string" + }, + "GroupWeights": { + "type": "array", + "items": { + "$ref": "#/definitions/GroupToWeight" + }, + "uniqueItems": true, + "insertionOrder": false + }, + "SegmentOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/SegmentOverride" + }, + "uniqueItems": true, + "insertionOrder": false + } + }, + "required": [ + "StartTime", + "GroupWeights" + ], + "additionalProperties": false + }, + "MetricDefinitionObject": { + "type": "object", + "properties": { + "MetricName": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[\\S]+$" + }, + "EntityIdKey": { + "description": "The JSON path to reference the entity id in the event.", + "type": "string" + }, + "ValueKey": { + "description": "The JSON path to reference the numerical metric value in the event.", + "type": "string" + }, + "EventPattern": { + "description": "Event patterns have the same structure as the events they match. Rules use event patterns to select events. An event pattern either matches an event or it doesn't.", + "type": "string" + }, + "UnitLabel": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": ".*" + } + }, + "required": [ + "MetricName", + "EntityIdKey", + "ValueKey" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Project", + "Groups", + "ScheduledSplitsConfig" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Project" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "evidently:CreateLaunch", + "evidently:TagResource", + "evidently:GetLaunch", + "evidently:StartLaunch" + ] + }, + "read": { + "permissions": [ + "evidently:GetLaunch", + "evidently:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "evidently:UpdateLaunch", + "evidently:ListTagsForResource", + "evidently:TagResource", + "evidently:UntagResource", + "evidently:GetLaunch", + "evidently:StartLaunch", + "evidently:StopLaunch" + ] + }, + "delete": { + "permissions": [ + "evidently:DeleteLaunch", + "evidently:UntagResource", + "evidently:GetLaunch" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/evidently/project.json b/internal/aws/cfn/schemas/aws/evidently/project.json new file mode 100644 index 00000000..5013b0d5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/evidently/project.json @@ -0,0 +1,222 @@ +{ + "typeName": "AWS::Evidently::Project", + "description": "Resource Type definition for AWS::Evidently::Project", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently", + "properties": { + "Arn": { + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:project/[-a-zA-Z0-9._]*", + "minLength": 0, + "maxLength": 2048 + }, + "Name": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 160 + }, + "DataDelivery": { + "$ref": "#/definitions/DataDeliveryObject" + }, + "AppConfigResource": { + "$ref": "#/definitions/AppConfigResourceObject" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "DataDeliveryObject": { + "type": "object", + "description": "Destinations for data.", + "properties": { + "S3": { + "$ref": "#/definitions/S3Destination" + }, + "LogGroup": { + "type": "string", + "pattern": "^[-a-zA-Z0-9._/]+$", + "minLength": 1, + "maxLength": 512 + } + }, + "oneOf": [ + { + "required": [ + "S3" + ] + }, + { + "required": [ + "LogGroup" + ] + } + ], + "additionalProperties": false + }, + "S3Destination": { + "type": "object", + "properties": { + "BucketName": { + "type": "string", + "pattern": "^[a-z0-9][-a-z0-9]*[a-z0-9]$", + "minLength": 3, + "maxLength": 63 + }, + "Prefix": { + "type": "string", + "pattern": "^[-a-zA-Z0-9!_.*'()/]*$", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "BucketName" + ], + "additionalProperties": false + }, + "AppConfigResourceObject": { + "type": "object", + "properties": { + "ApplicationId": { + "type": "string", + "pattern": "[a-z0-9]{4,7}" + }, + "EnvironmentId": { + "type": "string", + "pattern": "[a-z0-9]{4,7}" + } + }, + "required": [ + "ApplicationId", + "EnvironmentId" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "evidently:CreateProject", + "evidently:GetProject", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "evidently:TagResource", + "evidently:ExportProjectAsConfiguration", + "appconfig:GetEnvironment", + "appconfig:CreateConfigurationProfile", + "appconfig:CreateHostedConfigurationVersion", + "appconfig:CreateExtensionAssociation", + "appconfig:TagResource", + "iam:GetRole", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "evidently:GetProject", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "s3:GetBucketPolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "evidently:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "evidently:UpdateProject", + "evidently:UpdateProjectDataDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:ListLogDeliveries", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "evidently:TagResource", + "evidently:UntagResource", + "evidently:ListTagsForResource", + "evidently:GetProject", + "evidently:ExportProjectAsConfiguration", + "appconfig:GetEnvironment", + "appconfig:CreateConfigurationProfile", + "appconfig:CreateHostedConfigurationVersion", + "appconfig:CreateExtensionAssociation", + "appconfig:TagResource", + "iam:GetRole", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "evidently:DeleteProject", + "evidently:GetProject", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "s3:GetBucketPolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "evidently:UntagResource", + "appconfig:DeleteHostedConfigurationVersion", + "appconfig:DeleteExtensionAssociation", + "appconfig:DeleteConfigurationProfile" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/evidently/segment.json b/internal/aws/cfn/schemas/aws/evidently/segment.json new file mode 100644 index 00000000..4f791326 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/evidently/segment.json @@ -0,0 +1,109 @@ +{ + "typeName": "AWS::Evidently::Segment", + "description": "Resource Type definition for AWS::Evidently::Segment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-evidently", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:segment/[-a-zA-Z0-9._]*", + "minLength": 0, + "maxLength": 2048 + }, + "Name": { + "type": "string", + "pattern": "[-a-zA-Z0-9._]*", + "minLength": 1, + "maxLength": 127 + }, + "Description": { + "type": "string", + "minLength": 0, + "maxLength": 160 + }, + "Pattern": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "evidently:CreateSegment", + "evidently:GetSegment", + "evidently:TagResource" + ] + }, + "read": { + "permissions": [ + "evidently:GetSegment", + "evidently:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "evidently:DeleteSegment", + "evidently:GetSegment", + "evidently:UntagResource" + ] + }, + "list": { + "permissions": [ + "evidently:ListSegment", + "evidently:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/finspace/environment.json b/internal/aws/cfn/schemas/aws/finspace/environment.json new file mode 100644 index 00000000..faeccbcd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/finspace/environment.json @@ -0,0 +1,284 @@ +{ + "typeName": "AWS::FinSpace::Environment", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "FederationParameters": { + "description": "Additional parameters to identify Federation mode", + "type": "object", + "properties": { + "SamlMetadataURL": { + "description": "SAML metadata URL to link with the Environment", + "type": "string", + "pattern": "^https?://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]{1,1000}" + }, + "FederationProviderName": { + "description": "Federation provider name to link with the Environment", + "type": "string", + "pattern": "[^_\\p{Z}][\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}][^_\\p{Z}]+", + "minLength": 1, + "maxLength": 32 + }, + "SamlMetadataDocument": { + "description": "SAML metadata document to link the federation provider to the Environment", + "type": "string", + "pattern": ".*", + "minLength": 1000, + "maxLength": 10000000 + }, + "ApplicationCallBackURL": { + "description": "SAML metadata URL to link with the Environment", + "type": "string", + "pattern": "^https?://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]{1,1000}" + }, + "FederationURN": { + "description": "SAML metadata URL to link with the Environment", + "type": "string" + }, + "AttributeMap": { + "description": "Attribute map for SAML configuration", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + "SuperuserParameters": { + "description": "Parameters of the first Superuser for the FinSpace Environment", + "type": "object", + "properties": { + "FirstName": { + "description": "First name", + "type": "string", + "pattern": "^[a-zA-Z0-9]{1,50}$", + "minLength": 1, + "maxLength": 50 + }, + "LastName": { + "description": "Last name", + "type": "string", + "pattern": "^[a-zA-Z0-9]{1,50}$", + "minLength": 1, + "maxLength": 50 + }, + "EmailAddress": { + "description": "Email address", + "type": "string", + "pattern": "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+[.]+[A-Za-z]+", + "minLength": 1, + "maxLength": 128 + } + }, + "additionalProperties": false + }, + "DataBundleArn": { + "type": "string", + "pattern": "^arn:aws:finspace:[A-Za-z0-9_/.-]{0,63}:\\d*:data-bundle/[0-9A-Za-z_-]{1,128}$" + }, + "Tag": { + "description": "A list of all tags for a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "EnvironmentId": { + "description": "Unique identifier for representing FinSpace Environment", + "type": "string", + "pattern": "^[a-zA-Z0-9]{1,26}$" + }, + "Name": { + "description": "Name of the Environment", + "type": "string", + "pattern": "^[a-zA-Z0-9]+[a-zA-Z0-9-]*[a-zA-Z0-9]{1,255}$" + }, + "AwsAccountId": { + "description": "AWS account ID associated with the Environment", + "type": "string", + "pattern": "^[a-zA-Z0-9]{1,26}$" + }, + "Description": { + "description": "Description of the Environment", + "type": "string", + "pattern": "^[a-zA-Z0-9. ]{1,1000}$" + }, + "Status": { + "description": "State of the Environment", + "type": "string", + "enum": [ + "CREATE_REQUESTED", + "CREATING", + "CREATED", + "DELETE_REQUESTED", + "DELETING", + "DELETED", + "FAILED_CREATION", + "FAILED_DELETION", + "RETRY_DELETION", + "SUSPENDED" + ] + }, + "EnvironmentUrl": { + "description": "URL used to login to the Environment", + "type": "string", + "pattern": "^[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]{1,1000}" + }, + "EnvironmentArn": { + "description": "ARN of the Environment", + "type": "string", + "pattern": "^arn:aws:finspace:[A-Za-z0-9_/.-]{0,63}:\\d+:environment/[0-9A-Za-z_-]{1,128}$" + }, + "SageMakerStudioDomainUrl": { + "description": "SageMaker Studio Domain URL associated with the Environment", + "type": "string", + "pattern": "^[a-zA-Z-0-9-:\\/.]*{1,1000}$" + }, + "KmsKeyId": { + "description": "KMS key used to encrypt customer data within FinSpace Environment infrastructure", + "type": "string", + "pattern": "^[a-zA-Z-0-9-:\\/]*{1,1000}$" + }, + "DedicatedServiceAccountId": { + "description": "ID for FinSpace created account used to store Environment artifacts", + "type": "string", + "pattern": "^[a-zA-Z0-9]{1,26}$" + }, + "FederationMode": { + "description": "Federation mode used with the Environment", + "type": "string", + "enum": [ + "LOCAL", + "FEDERATED" + ] + }, + "FederationParameters": { + "$ref": "#/definitions/FederationParameters" + }, + "SuperuserParameters": { + "$ref": "#/definitions/SuperuserParameters" + }, + "DataBundles": { + "description": "ARNs of FinSpace Data Bundles to install", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/DataBundleArn" + } + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/EnvironmentId", + "/properties/Status", + "/properties/SageMakerStudioDomainUrl", + "/properties/EnvironmentArn", + "/properties/EnvironmentUrl", + "/properties/AwsAccountId", + "/properties/DedicatedServiceAccountId" + ], + "writeOnlyProperties": [ + "/properties/SuperuserParameters", + "/properties/FederationParameters/AttributeMap", + "/properties/Tags" + ], + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/SuperuserParameters", + "/properties/FederationParameters", + "/properties/DataBundles", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/EnvironmentId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "deprecatedProperties": [ + "/properties/DataBundles" + ], + "handlers": { + "create": { + "permissions": [ + "finspace:CreateEnvironment", + "finspace:GetEnvironment", + "finspace:ListEnvironments", + "sts:AssumeRole" + ] + }, + "read": { + "permissions": [ + "finspace:GetEnvironment" + ] + }, + "update": { + "permissions": [ + "finspace:UpdateEnvironment" + ] + }, + "delete": { + "permissions": [ + "finspace:DeleteEnvironment", + "finspace:GetEnvironment" + ] + }, + "list": { + "permissions": [ + "finspace:ListEnvironments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/fis/experimenttemplate.json b/internal/aws/cfn/schemas/aws/fis/experimenttemplate.json new file mode 100644 index 00000000..842653d1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fis/experimenttemplate.json @@ -0,0 +1,399 @@ +{ + "typeName": "AWS::FIS::ExperimentTemplate", + "description": "Resource schema for AWS::FIS::ExperimentTemplate", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fis.git", + "definitions": { + "ExperimentTemplateId": { + "type": "string" + }, + "ExperimentTemplateDescription": { + "type": "string", + "description": "A description for the experiment template.", + "maxLength": 512 + }, + "StopConditionSource": { + "type": "string", + "maxLength": 64 + }, + "StopConditionValue": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "ExperimentTemplateStopCondition": { + "type": "object", + "additionalProperties": false, + "properties": { + "Source": { + "$ref": "#/definitions/StopConditionSource" + }, + "Value": { + "$ref": "#/definitions/StopConditionValue" + } + }, + "required": [ + "Source" + ] + }, + "ExperimentTemplateStopConditionList": { + "type": "array", + "description": "One or more stop conditions.", + "items": { + "$ref": "#/definitions/ExperimentTemplateStopCondition" + } + }, + "ResourceType": { + "type": "string", + "description": "The AWS resource type. The resource type must be supported for the specified action.", + "maxLength": 64 + }, + "ResourceArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "ResourceArnList": { + "type": "array", + "description": "The Amazon Resource Names (ARNs) of the target resources.", + "items": { + "$ref": "#/definitions/ResourceArn" + } + }, + "ExperimentTemplateTargetSelectionMode": { + "type": "string", + "description": "Scopes the identified resources to a specific number of the resources at random, or a percentage of the resources.", + "maxLength": 64 + }, + "ExperimentTemplateTargetFilterPath": { + "type": "string", + "description": "The attribute path for the filter.", + "maxLength": 256 + }, + "ExperimentTemplateTargetFilterValue": { + "type": "string", + "maxLength": 128 + }, + "ExperimentTemplateTargetFilterValues": { + "type": "array", + "description": "The attribute values for the filter.", + "items": { + "$ref": "#/definitions/ExperimentTemplateTargetFilterValue" + } + }, + "ExperimentTemplateTargetFilter": { + "type": "object", + "description": "Describes a filter used for the target resource input in an experiment template.", + "additionalProperties": false, + "properties": { + "Path": { + "$ref": "#/definitions/ExperimentTemplateTargetFilterPath" + }, + "Values": { + "$ref": "#/definitions/ExperimentTemplateTargetFilterValues" + } + }, + "required": [ + "Path", + "Values" + ] + }, + "ExperimentTemplateTargetFilterList": { + "type": "array", + "items": { + "$ref": "#/definitions/ExperimentTemplateTargetFilter" + } + }, + "ExperimentTemplateTarget": { + "type": "object", + "description": "Specifies a target for an experiment.", + "additionalProperties": false, + "properties": { + "ResourceType": { + "$ref": "#/definitions/ResourceType" + }, + "ResourceArns": { + "$ref": "#/definitions/ResourceArnList" + }, + "ResourceTags": { + "type": "object", + "patternProperties": { + ".{1,128}": { + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "Parameters": { + "type": "object", + "patternProperties": { + ".{1,64}": { + "type": "string", + "maxLength": 1024 + } + }, + "additionalProperties": false + }, + "Filters": { + "$ref": "#/definitions/ExperimentTemplateTargetFilterList" + }, + "SelectionMode": { + "$ref": "#/definitions/ExperimentTemplateTargetSelectionMode" + } + }, + "required": [ + "ResourceType", + "SelectionMode" + ] + }, + "ExperimentTemplateTargetMap": { + "type": "object", + "description": "The targets for the experiment.", + "patternProperties": { + ".{1,64}": { + "$ref": "#/definitions/ExperimentTemplateTarget" + } + }, + "additionalProperties": false + }, + "ActionId": { + "type": "string", + "description": "The ID of the action.", + "maxLength": 64 + }, + "ExperimentTemplateActionItemDescription": { + "type": "string", + "description": "A description for the action.", + "maxLength": 512 + }, + "ExperimentTemplateActionItemParameter": { + "type": "string", + "maxLength": 1024 + }, + "ExperimentTemplateActionItemTarget": { + "type": "string", + "maxLength": 64 + }, + "ExperimentTemplateActionItemStartAfter": { + "type": "string", + "maxLength": 64 + }, + "ExperimentTemplateActionItemStartAfterList": { + "type": "array", + "description": "The names of the actions that must be completed before the current action starts.", + "items": { + "$ref": "#/definitions/ExperimentTemplateActionItemStartAfter" + } + }, + "ExperimentTemplateAction": { + "type": "object", + "description": "Specifies an action for the experiment template.", + "additionalProperties": false, + "properties": { + "ActionId": { + "$ref": "#/definitions/ActionId" + }, + "Description": { + "$ref": "#/definitions/ExperimentTemplateActionItemDescription" + }, + "Parameters": { + "type": "object", + "description": "The parameters for the action, if applicable.", + "patternProperties": { + ".{1,64}": { + "$ref": "#/definitions/ExperimentTemplateActionItemParameter" + } + }, + "additionalProperties": false + }, + "Targets": { + "type": "object", + "description": "One or more targets for the action.", + "patternProperties": { + ".{1,64}": { + "$ref": "#/definitions/ExperimentTemplateActionItemTarget" + } + }, + "additionalProperties": false + }, + "StartAfter": { + "$ref": "#/definitions/ExperimentTemplateActionItemStartAfterList" + } + }, + "required": [ + "ActionId" + ] + }, + "ExperimentTemplateActionMap": { + "type": "object", + "description": "The actions for the experiment.", + "patternProperties": { + "[\\S]{1,64}": { + "$ref": "#/definitions/ExperimentTemplateAction" + } + }, + "additionalProperties": false + }, + "ExperimentTemplateLogConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroupArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "LogGroupArn" + ] + }, + "S3Configuration": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63 + }, + "Prefix": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "BucketName" + ] + }, + "LogSchemaVersion": { + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "LogSchemaVersion" + ] + }, + "ExperimentTemplateExperimentOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccountTargeting": { + "type": "string", + "description": "The account targeting setting for the experiment template.", + "enum": [ + "multi-account", + "single-account" + ] + }, + "EmptyTargetResolutionMode": { + "type": "string", + "description": "The target resolution failure mode for the experiment template.", + "enum": [ + "fail", + "skip" + ] + } + } + }, + "RoleArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of an IAM role that grants the AWS FIS service permission to perform service actions on your behalf.", + "maxLength": 1224 + } + }, + "properties": { + "Id": { + "$ref": "#/definitions/ExperimentTemplateId" + }, + "Description": { + "$ref": "#/definitions/ExperimentTemplateDescription" + }, + "Targets": { + "$ref": "#/definitions/ExperimentTemplateTargetMap" + }, + "Actions": { + "$ref": "#/definitions/ExperimentTemplateActionMap" + }, + "StopConditions": { + "$ref": "#/definitions/ExperimentTemplateStopConditionList" + }, + "LogConfiguration": { + "$ref": "#/definitions/ExperimentTemplateLogConfiguration" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "Tags": { + "type": "object", + "patternProperties": { + ".{1,128}": { + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "ExperimentOptions": { + "$ref": "#/definitions/ExperimentTemplateExperimentOptions" + } + }, + "additionalProperties": false, + "required": [ + "Description", + "StopConditions", + "Targets", + "RoleArn", + "Tags" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Tags", + "/properties/ExperimentOptions/AccountTargeting" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "fis:CreateExperimentTemplate", + "fis:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "fis:GetExperimentTemplate", + "fis:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "fis:UpdateExperimentTemplate", + "fis:TagResource", + "fis:UntagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "fis:DeleteExperimentTemplate" + ] + }, + "list": { + "permissions": [ + "fis:ListExperimentTemplates", + "fis:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/fms/notificationchannel.json b/internal/aws/cfn/schemas/aws/fms/notificationchannel.json new file mode 100644 index 00000000..54876abf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fms/notificationchannel.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::FMS::NotificationChannel", + "description": "Designates the IAM role and Amazon Simple Notification Service (SNS) topic that AWS Firewall Manager uses to record SNS logs.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fms.git", + "definitions": { + "ResourceArn": { + "description": "A resource ARN.", + "type": "string", + "pattern": "^([^\\s]+)$", + "minLength": 1, + "maxLength": 1024 + } + }, + "properties": { + "SnsRoleName": { + "$ref": "#/definitions/ResourceArn" + }, + "SnsTopicArn": { + "$ref": "#/definitions/ResourceArn" + } + }, + "required": [ + "SnsRoleName", + "SnsTopicArn" + ], + "handlers": { + "create": { + "permissions": [ + "fms:PutNotificationChannel", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "fms:PutNotificationChannel", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "fms:GetNotificationChannel" + ] + }, + "delete": { + "permissions": [ + "fms:DeleteNotificationChannel" + ] + }, + "list": { + "permissions": [ + "fms:GetNotificationChannel" + ] + } + }, + "primaryIdentifier": [ + "/properties/SnsTopicArn" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/fms/policy.json b/internal/aws/cfn/schemas/aws/fms/policy.json new file mode 100644 index 00000000..f5e44cd4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fms/policy.json @@ -0,0 +1,353 @@ +{ + "typeName": "AWS::FMS::Policy", + "description": "Creates an AWS Firewall Manager policy.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fms.git", + "definitions": { + "AccountId": { + "description": "An AWS account ID.", + "type": "string", + "pattern": "^([0-9]*)$", + "minLength": 12, + "maxLength": 12 + }, + "Base62Id": { + "description": "A Base62 ID", + "type": "string", + "pattern": "^[a-z0-9A-Z]{22}$", + "minLength": 22, + "maxLength": 22 + }, + "OrganizationalUnitId": { + "description": "An Organizational Unit ID.", + "type": "string", + "pattern": "^(ou-[0-9a-z]{4,32}-[a-z0-9]{8,32})$", + "minLength": 16, + "maxLength": 68 + }, + "IEMap": { + "description": "An FMS includeMap or excludeMap.", + "type": "object", + "properties": { + "ACCOUNT": { + "type": "array", + "items": { + "$ref": "#/definitions/AccountId" + }, + "insertionOrder": true + }, + "ORGUNIT": { + "type": "array", + "items": { + "$ref": "#/definitions/OrganizationalUnitId" + }, + "insertionOrder": true + } + }, + "additionalProperties": false + }, + "PolicyTag": { + "description": "A policy tag.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^([^\\s]*)$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "pattern": "^([^\\s]*)$", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "ResourceTag": { + "description": "A resource tag.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key" + ] + }, + "ResourceType": { + "description": "An AWS resource type", + "type": "string", + "pattern": "^([^\\s]*)$", + "minLength": 1, + "maxLength": 128 + }, + "ResourceArn": { + "description": "A resource ARN.", + "type": "string", + "pattern": "^([^\\s]*)$", + "minLength": 1, + "maxLength": 1024 + }, + "SecurityServicePolicyData": { + "description": "Firewall security service policy data.", + "type": "object", + "properties": { + "ManagedServiceData": { + "$ref": "#/definitions/ManagedServiceData" + }, + "Type": { + "$ref": "#/definitions/PolicyType" + }, + "PolicyOption": { + "$ref": "#/definitions/PolicyOption" + } + }, + "additionalProperties": false, + "required": [ + "Type" + ] + }, + "FirewallDeploymentModel": { + "description": "Firewall deployment mode.", + "type": "string", + "enum": [ + "DISTRIBUTED", + "CENTRALIZED" + ] + }, + "ManagedServiceData": { + "description": "Firewall managed service data.", + "type": "string", + "minLength": 1, + "maxLength": 8192 + }, + "PolicyType": { + "description": "Firewall policy type.", + "type": "string", + "enum": [ + "WAF", + "WAFV2", + "SHIELD_ADVANCED", + "SECURITY_GROUPS_COMMON", + "SECURITY_GROUPS_CONTENT_AUDIT", + "SECURITY_GROUPS_USAGE_AUDIT", + "NETWORK_FIREWALL", + "THIRD_PARTY_FIREWALL", + "DNS_FIREWALL", + "IMPORT_NETWORK_FIREWALL" + ] + }, + "NetworkFirewallPolicy": { + "description": "Network firewall policy.", + "type": "object", + "properties": { + "FirewallDeploymentModel": { + "$ref": "#/definitions/FirewallDeploymentModel" + } + }, + "additionalProperties": false, + "required": [ + "FirewallDeploymentModel" + ] + }, + "ThirdPartyFirewallPolicy": { + "description": "Third party firewall policy.", + "type": "object", + "properties": { + "FirewallDeploymentModel": { + "$ref": "#/definitions/FirewallDeploymentModel" + } + }, + "additionalProperties": false, + "required": [ + "FirewallDeploymentModel" + ] + }, + "PolicyOption": { + "description": "Firewall policy option.", + "type": "object", + "properties": { + "NetworkFirewallPolicy": { + "$ref": "#/definitions/NetworkFirewallPolicy" + }, + "ThirdPartyFirewallPolicy": { + "$ref": "#/definitions/ThirdPartyFirewallPolicy" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "NetworkFirewallPolicy" + ] + }, + { + "required": [ + "ThirdPartyFirewallPolicy" + ] + } + ] + } + }, + "properties": { + "ExcludeMap": { + "$ref": "#/definitions/IEMap" + }, + "ExcludeResourceTags": { + "type": "boolean" + }, + "IncludeMap": { + "$ref": "#/definitions/IEMap" + }, + "Id": { + "type": "string", + "pattern": "^[a-z0-9A-Z-]{36}$", + "minLength": 36, + "maxLength": 36 + }, + "PolicyName": { + "type": "string", + "pattern": "^([a-zA-Z0-9_.:/=+\\-@\\s]+)$", + "minLength": 1, + "maxLength": 1024 + }, + "PolicyDescription": { + "type": "string", + "pattern": "^([a-zA-Z0-9_.:/=+\\-@\\s]+)$", + "maxLength": 256 + }, + "RemediationEnabled": { + "type": "boolean" + }, + "ResourceTags": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourceTag" + }, + "maxItems": 8, + "insertionOrder": true + }, + "ResourceType": { + "$ref": "#/definitions/ResourceType" + }, + "ResourceTypeList": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourceType" + }, + "insertionOrder": true + }, + "ResourceSetIds": { + "type": "array", + "items": { + "$ref": "#/definitions/Base62Id" + }, + "insertionOrder": true, + "uniqueItems": true + }, + "SecurityServicePolicyData": { + "$ref": "#/definitions/SecurityServicePolicyData" + }, + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "DeleteAllPolicyResources": { + "type": "boolean" + }, + "ResourcesCleanUp": { + "type": "boolean" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/PolicyTag" + }, + "insertionOrder": true + } + }, + "additionalProperties": false, + "required": [ + "ExcludeResourceTags", + "PolicyName", + "RemediationEnabled", + "SecurityServicePolicyData" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/DeleteAllPolicyResources" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "fms:PutPolicy", + "fms:TagResource", + "waf-regional:ListRuleGroups", + "wafv2:CheckCapacity", + "wafv2:ListRuleGroups", + "wafv2:ListAvailableManagedRuleGroups", + "wafv2:ListAvailableManagedRuleGroupVersions", + "network-firewall:DescribeRuleGroup", + "network-firewall:DescribeRuleGroupMetadata", + "route53resolver:ListFirewallRuleGroups", + "ec2:DescribeAvailabilityZones", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy" + ] + }, + "update": { + "permissions": [ + "fms:PutPolicy", + "fms:GetPolicy", + "fms:TagResource", + "fms:UntagResource", + "fms:ListTagsForResource", + "waf-regional:ListRuleGroups", + "wafv2:CheckCapacity", + "wafv2:ListRuleGroups", + "wafv2:ListAvailableManagedRuleGroups", + "wafv2:ListAvailableManagedRuleGroupVersions", + "network-firewall:DescribeRuleGroup", + "network-firewall:DescribeRuleGroupMetadata", + "route53resolver:ListFirewallRuleGroups", + "ec2:DescribeAvailabilityZones", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy" + ] + }, + "read": { + "permissions": [ + "fms:GetPolicy", + "fms:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "fms:DeletePolicy" + ] + }, + "list": { + "permissions": [ + "fms:ListPolicies", + "fms:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/fms/resourceset.json b/internal/aws/cfn/schemas/aws/fms/resourceset.json new file mode 100644 index 00000000..9d0ad2b8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fms/resourceset.json @@ -0,0 +1,147 @@ +{ + "typeName": "AWS::FMS::ResourceSet", + "description": "Creates an AWS Firewall Manager resource set.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fms.git", + "definitions": { + "ResourceType": { + "description": "An AWS resource type", + "type": "string", + "pattern": "^([^\\s]*)$", + "minLength": 1, + "maxLength": 128 + }, + "Base62Id": { + "description": "A Base62 ID", + "type": "string", + "pattern": "^([a-z0-9A-Z]*)$", + "minLength": 22, + "maxLength": 22 + }, + "Tag": { + "description": "A tag.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^([^\\s]*)$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "pattern": "^([^\\s]*)$", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "Resource": { + "description": "A resource ARN or URI.", + "type": "string", + "pattern": "^([^\\s]*)$", + "minLength": 1, + "maxLength": 1024 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "properties": { + "Id": { + "$ref": "#/definitions/Base62Id" + }, + "Name": { + "type": "string", + "pattern": "^([a-zA-Z0-9_.:/=+\\-@\\s]+)$", + "minLength": 1, + "maxLength": 128 + }, + "Description": { + "type": "string", + "pattern": "^([a-zA-Z0-9_.:/=+\\-@\\s]*)$", + "maxLength": 256 + }, + "ResourceTypeList": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourceType" + }, + "insertionOrder": true, + "uniqueItems": true + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/definitions/Resource" + }, + "insertionOrder": false, + "uniqueItems": true + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": true, + "uniqueItems": true + } + }, + "additionalProperties": false, + "required": [ + "Name", + "ResourceTypeList" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "fms:PutResourceSet", + "fms:BatchAssociateResource", + "fms:ListResourceSetResources", + "fms:TagResource" + ] + }, + "update": { + "permissions": [ + "fms:PutResourceSet", + "fms:BatchAssociateResource", + "fms:BatchDisassociateResource", + "fms:GetResourceSet", + "fms:ListResourceSetResources", + "fms:TagResource", + "fms:UntagResource", + "fms:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "fms:GetResourceSet", + "fms:ListResourceSetResources", + "fms:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "fms:DeleteResourceSet" + ] + }, + "list": { + "permissions": [ + "fms:ListResourceSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/forecast/dataset.json b/internal/aws/cfn/schemas/aws/forecast/dataset.json new file mode 100644 index 00000000..9ef6579c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/forecast/dataset.json @@ -0,0 +1,183 @@ +{ + "typeName": "AWS::Forecast::Dataset", + "description": "Resource Type Definition for AWS::Forecast::Dataset", + "sourceUrl": "https://github.com/junlinzw/aws-cloudformation-resource-providers-forecast", + "taggable": false, + "definitions": { + "Attributes": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttributeName": { + "description": "Name of the dataset field", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*" + }, + "AttributeType": { + "description": "Data type of the field", + "type": "string", + "enum": [ + "string", + "integer", + "float", + "timestamp", + "geolocation" + ] + } + } + }, + "minItems": 1, + "maxItems": 100 + }, + "KmsKeyArn": { + "description": "KMS key used to encrypt the Dataset data", + "type": "string", + "maxLength": 256, + "pattern": "arn:aws[-a-z]*:kms:.*:key/.*" + }, + "RoleArn": { + "description": "The ARN of the IAM role that Amazon Forecast can assume to access the AWS KMS key.", + "type": "string", + "maxLength": 256, + "pattern": "^[a-zA-Z0-9\\-\\_\\.\\/\\:]+$" + }, + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 256, + "pattern": "^[a-zA-Z0-9\\-\\_\\.\\/\\:]+$" + }, + "DatasetName": { + "description": "A name for the dataset", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*" + }, + "DatasetType": { + "description": "The dataset type", + "type": "string", + "enum": [ + "TARGET_TIME_SERIES", + "RELATED_TIME_SERIES", + "ITEM_METADATA" + ] + }, + "DataFrequency": { + "description": "Frequency of data collection. This parameter is required for RELATED_TIME_SERIES", + "type": "string", + "pattern": "^Y|M|W|D|H|30min|15min|10min|5min|1min$" + }, + "Domain": { + "description": "The domain associated with the dataset", + "type": "string", + "enum": [ + "RETAIL", + "CUSTOM", + "INVENTORY_PLANNING", + "EC2_CAPACITY", + "WORK_FORCE", + "WEB_TRAFFIC", + "METRICS" + ] + }, + "EncryptionConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyArn": { + "$ref": "#/definitions/KmsKeyArn" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + } + } + }, + "Schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "$ref": "#/definitions/Attributes" + } + } + }, + "Tags": { + "type": "array", + "insertionOrder": true, + "items": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "$ref": "#/definitions/Key" + }, + "Value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "minItems": 0, + "maxItems": 200 + } + }, + "additionalProperties": false, + "required": [ + "DatasetName", + "DatasetType", + "Domain", + "Schema" + ], + "createOnlyProperties": [ + "/properties/DatasetName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "forecast:CreateDataset" + ] + }, + "read": { + "permissions": [ + "forecast:DescribeDataset" + ] + }, + "delete": { + "permissions": [ + "forecast:DeleteDataset" + ] + }, + "list": { + "permissions": [ + "forecast:ListDatasets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/forecast/datasetgroup.json b/internal/aws/cfn/schemas/aws/forecast/datasetgroup.json new file mode 100644 index 00000000..c3599c02 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/forecast/datasetgroup.json @@ -0,0 +1,135 @@ +{ + "typeName": "AWS::Forecast::DatasetGroup", + "description": "Represents a dataset group that holds a collection of related datasets", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-forecast", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Arn": { + "type": "string", + "maxLength": 256, + "pattern": "^[a-zA-Z0-9\\-\\_\\.\\/\\:]+$" + }, + "MaxResults": { + "description": "The number of items to return in the response.", + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "NextToken": { + "description": "If the result of the previous request was truncated, the response includes a NextToken. To retrieve the next set of results, use the token in the next request. Tokens expire after 24 hours.", + "type": "string", + "minLength": 1, + "maxLength": 3000 + } + }, + "properties": { + "DatasetArns": { + "description": "An array of Amazon Resource Names (ARNs) of the datasets that you want to include in the dataset group.", + "type": "array", + "items": { + "$ref": "#/definitions/Arn" + }, + "insertionOrder": true + }, + "DatasetGroupName": { + "description": "A name for the dataset group.", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*", + "minLength": 1, + "maxLength": 63 + }, + "Domain": { + "description": "The domain associated with the dataset group. When you add a dataset to a dataset group, this value and the value specified for the Domain parameter of the CreateDataset operation must match.", + "type": "string", + "enum": [ + "RETAIL", + "CUSTOM", + "INVENTORY_PLANNING", + "EC2_CAPACITY", + "WORK_FORCE", + "WEB_TRAFFIC", + "METRICS" + ] + }, + "Tags": { + "description": "The tags of Application Insights application.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 200, + "insertionOrder": true + }, + "DatasetGroupArn": { + "description": "The Amazon Resource Name (ARN) of the dataset group to delete.", + "type": "string", + "maxLength": 256, + "pattern": "^[a-zA-Z0-9\\-\\_\\.\\/\\:]+$" + } + }, + "additionalProperties": false, + "required": [ + "DatasetGroupName", + "Domain" + ], + "createOnlyProperties": [ + "/properties/DatasetGroupName" + ], + "readOnlyProperties": [ + "/properties/DatasetGroupArn" + ], + "primaryIdentifier": [ + "/properties/DatasetGroupArn" + ], + "handlers": { + "create": { + "permissions": [ + "forecast:CreateDatasetGroup" + ] + }, + "read": { + "permissions": [ + "forecast:DescribeDatasetGroup" + ] + }, + "update": { + "permissions": [ + "forecast:UpdateDatasetGroup" + ] + }, + "delete": { + "permissions": [ + "forecast:DeleteDatasetGroup" + ] + }, + "list": { + "permissions": [ + "forecast:ListDatasetGroups" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/frauddetector/detector.json b/internal/aws/cfn/schemas/aws/frauddetector/detector.json new file mode 100644 index 00000000..ba3309f8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/frauddetector/detector.json @@ -0,0 +1,612 @@ +{ + "typeName": "AWS::FraudDetector::Detector", + "description": "A resource schema for a Detector in Amazon Fraud Detector.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "EventVariable": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "Inline": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "DataSource": { + "type": "string", + "enum": [ + "EVENT" + ] + }, + "DataType": { + "type": "string", + "enum": [ + "STRING", + "INTEGER", + "FLOAT", + "BOOLEAN" + ] + }, + "DefaultValue": { + "type": "string" + }, + "VariableType": { + "type": "string", + "enum": [ + "AUTH_CODE", + "AVS", + "BILLING_ADDRESS_L1", + "BILLING_ADDRESS_L2", + "BILLING_CITY", + "BILLING_COUNTRY", + "BILLING_NAME", + "BILLING_PHONE", + "BILLING_STATE", + "BILLING_ZIP", + "CARD_BIN", + "CATEGORICAL", + "CURRENCY_CODE", + "EMAIL_ADDRESS", + "FINGERPRINT", + "FRAUD_LABEL", + "FREE_FORM_TEXT", + "IP_ADDRESS", + "NUMERIC", + "ORDER_ID", + "PAYMENT_TYPE", + "PHONE_NUMBER", + "PRICE", + "PRODUCT_CATEGORY", + "SHIPPING_ADDRESS_L1", + "SHIPPING_ADDRESS_L2", + "SHIPPING_CITY", + "SHIPPING_COUNTRY", + "SHIPPING_NAME", + "SHIPPING_PHONE", + "SHIPPING_STATE", + "SHIPPING_ZIP", + "USERAGENT" + ] + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this event variable.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the event variable was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the event variable was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Label": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "Inline": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this label.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the label was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the label was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Outcome": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "Inline": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this outcome.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the outcome was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the outcome was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Rule": { + "type": "object", + "properties": { + "RuleId": { + "type": "string" + }, + "RuleVersion": { + "type": "string" + }, + "DetectorId": { + "type": "string" + }, + "Expression": { + "type": "string" + }, + "Language": { + "type": "string", + "enum": [ + "DETECTORPL" + ] + }, + "Outcomes": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/Outcome" + } + }, + "Arn": { + "type": "string" + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this event type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the event type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the event type was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "EntityType": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "Inline": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this entity type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the entity type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the entity type was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "EventType": { + "type": "object", + "properties": { + "Name": { + "description": "The name for the event type", + "type": "string", + "pattern": "^[0-9a-z_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "Inline": { + "type": "boolean" + }, + "Tags": { + "description": "Tags associated with this event type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "description": "The description of the event type.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "EventVariables": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/EventVariable" + } + }, + "Labels": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 2, + "items": { + "$ref": "#/definitions/Label" + } + }, + "EntityTypes": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/EntityType" + } + }, + "Arn": { + "description": "The ARN of the event type.", + "type": "string" + }, + "CreatedTime": { + "description": "The time when the event type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the event type was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Model": { + "description": "A model to associate with a detector.", + "type": "object", + "properties": { + "Arn": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "DetectorId": { + "description": "The ID of the detector", + "type": "string", + "pattern": "^[0-9a-z_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "DetectorVersionStatus": { + "description": "The desired detector version status for the detector", + "type": "string", + "enum": [ + "DRAFT", + "ACTIVE" + ] + }, + "DetectorVersionId": { + "description": "The active version ID of the detector", + "type": "string" + }, + "RuleExecutionMode": { + "type": "string", + "enum": [ + "FIRST_MATCHED", + "ALL_MATCHED" + ] + }, + "Tags": { + "description": "Tags associated with this detector.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "description": "The description of the detector.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Rules": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/Rule" + } + }, + "EventType": { + "description": "The event type to associate this detector with.", + "$ref": "#/definitions/EventType" + }, + "Arn": { + "description": "The ARN of the detector.", + "type": "string" + }, + "CreatedTime": { + "description": "The time when the detector was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the detector was last updated.", + "type": "string" + }, + "AssociatedModels": { + "description": "The models to associate with this detector.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 10, + "items": { + "$ref": "#/definitions/Model" + } + } + }, + "additionalProperties": false, + "required": [ + "DetectorId", + "EventType", + "Rules" + ], + "createOnlyProperties": [ + "/properties/DetectorId" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/DetectorVersionId", + "/properties/CreatedTime", + "/properties/LastUpdatedTime", + "/properties/Rules/*/RuleVersion", + "/properties/Rules/*/Arn", + "/properties/Rules/*/CreatedTime", + "/properties/Rules/*/LastUpdatedTime", + "/properties/Rules/*/Outcomes/*/Arn", + "/properties/Rules/*/Outcomes/*/CreatedTime", + "/properties/Rules/*/Outcomes/*/LastUpdatedTime", + "/properties/EventType/Arn", + "/properties/EventType/CreatedTime", + "/properties/EventType/LastUpdatedTime", + "/properties/EventType/EventVariables/*/Arn", + "/properties/EventType/EventVariables/*/CreatedTime", + "/properties/EventType/EventVariables/*/LastUpdatedTime", + "/properties/EventType/Labels/*/Arn", + "/properties/EventType/Labels/*/CreatedTime", + "/properties/EventType/Labels/*/LastUpdatedTime", + "/properties/EventType/EntityTypes/*/Arn", + "/properties/EventType/EntityTypes/*/CreatedTime", + "/properties/EventType/EntityTypes/*/LastUpdatedTime", + "/properties/AssociatedModels/*/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "frauddetector:PutDetector", + "frauddetector:CreateDetectorVersion", + "frauddetector:UpdateDetectorVersionStatus", + "frauddetector:CreateRule", + "frauddetector:CreateVariable", + "frauddetector:PutLabel", + "frauddetector:PutOutcome", + "frauddetector:PutEntityType", + "frauddetector:PutEventType", + "frauddetector:DescribeDetector", + "frauddetector:GetDetectors", + "frauddetector:GetDetectorVersion", + "frauddetector:GetRules", + "frauddetector:GetVariables", + "frauddetector:GetEventTypes", + "frauddetector:GetExternalModels", + "frauddetector:GetModelVersion", + "frauddetector:GetLabels", + "frauddetector:GetOutcomes", + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "frauddetector:GetDetectors", + "frauddetector:GetDetectorVersion", + "frauddetector:PutDetector", + "frauddetector:UpdateDetectorVersion", + "frauddetector:UpdateDetectorVersionStatus", + "frauddetector:UpdateDetectorVersionMetadata", + "frauddetector:UpdateRuleVersion", + "frauddetector:UpdateRuleMetadata", + "frauddetector:CreateRule", + "frauddetector:CreateVariable", + "frauddetector:UpdateVariable", + "frauddetector:GetVariables", + "frauddetector:PutLabel", + "frauddetector:PutOutcome", + "frauddetector:PutEntityType", + "frauddetector:PutEventType", + "frauddetector:GetRules", + "frauddetector:GetEventTypes", + "frauddetector:GetLabels", + "frauddetector:GetOutcomes", + "frauddetector:GetEntityTypes", + "frauddetector:GetExternalModels", + "frauddetector:GetModelVersion", + "frauddetector:DeleteEventType", + "frauddetector:DeleteVariable", + "frauddetector:DeleteLabel", + "frauddetector:DeleteEntityType", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource", + "frauddetector:UntagResource" + ] + }, + "delete": { + "permissions": [ + "frauddetector:GetDetectors", + "frauddetector:GetDetectorVersion", + "frauddetector:DescribeDetector", + "frauddetector:GetRules", + "frauddetector:GetVariables", + "frauddetector:GetEventTypes", + "frauddetector:GetLabels", + "frauddetector:GetOutcomes", + "frauddetector:GetEntityTypes", + "frauddetector:DeleteDetector", + "frauddetector:DeleteDetectorVersion", + "frauddetector:DeleteRule", + "frauddetector:DeleteEventType", + "frauddetector:DeleteVariable", + "frauddetector:DeleteLabel", + "frauddetector:DeleteOutcome", + "frauddetector:DeleteEntityType", + "frauddetector:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "frauddetector:GetDetectors", + "frauddetector:GetDetectorVersion", + "frauddetector:DescribeDetector", + "frauddetector:GetRules", + "frauddetector:GetVariables", + "frauddetector:GetEventTypes", + "frauddetector:GetExternalModels", + "frauddetector:GetModelVersion", + "frauddetector:GetLabels", + "frauddetector:GetOutcomes", + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "frauddetector:GetDetectors", + "frauddetector:GetDetectorVersion", + "frauddetector:DescribeDetector", + "frauddetector:GetRules", + "frauddetector:GetVariables", + "frauddetector:GetEventTypes", + "frauddetector:GetExternalModels", + "frauddetector:GetModelVersion", + "frauddetector:GetLabels", + "frauddetector:GetOutcomes", + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/frauddetector/entitytype.json b/internal/aws/cfn/schemas/aws/frauddetector/entitytype.json new file mode 100644 index 00000000..35592bea --- /dev/null +++ b/internal/aws/cfn/schemas/aws/frauddetector/entitytype.json @@ -0,0 +1,116 @@ +{ + "typeName": "AWS::FraudDetector::EntityType", + "description": "An entity type for fraud detector.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the entity type.", + "type": "string", + "pattern": "^[0-9a-z_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "Tags": { + "description": "Tags associated with this entity type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "description": "The entity type description.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Arn": { + "description": "The entity type ARN.", + "type": "string" + }, + "CreatedTime": { + "description": "The timestamp when the entity type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The timestamp when the entity type was last updated.", + "type": "string" + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime" + ], + "additionalProperties": false, + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "frauddetector:GetEntityTypes", + "frauddetector:PutEntityType", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource" + ] + }, + "read": { + "permissions": [ + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "frauddetector:GetEntityTypes", + "frauddetector:PutEntityType", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource", + "frauddetector:UntagResource" + ] + }, + "delete": { + "permissions": [ + "frauddetector:GetEntityTypes", + "frauddetector:DeleteEntityType" + ] + }, + "list": { + "permissions": [ + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/frauddetector/eventtype.json b/internal/aws/cfn/schemas/aws/frauddetector/eventtype.json new file mode 100644 index 00000000..f2d4fe1b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/frauddetector/eventtype.json @@ -0,0 +1,365 @@ +{ + "typeName": "AWS::FraudDetector::EventType", + "description": "A resource schema for an EventType in Amazon Fraud Detector.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "EventVariable": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "Inline": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "DataSource": { + "type": "string", + "enum": [ + "EVENT" + ] + }, + "DataType": { + "type": "string", + "enum": [ + "STRING", + "INTEGER", + "FLOAT", + "BOOLEAN" + ] + }, + "DefaultValue": { + "type": "string" + }, + "VariableType": { + "type": "string", + "enum": [ + "AUTH_CODE", + "AVS", + "BILLING_ADDRESS_L1", + "BILLING_ADDRESS_L2", + "BILLING_CITY", + "BILLING_COUNTRY", + "BILLING_NAME", + "BILLING_PHONE", + "BILLING_STATE", + "BILLING_ZIP", + "CARD_BIN", + "CATEGORICAL", + "CURRENCY_CODE", + "EMAIL_ADDRESS", + "FINGERPRINT", + "FRAUD_LABEL", + "FREE_FORM_TEXT", + "IP_ADDRESS", + "NUMERIC", + "ORDER_ID", + "PAYMENT_TYPE", + "PHONE_NUMBER", + "PRICE", + "PRODUCT_CATEGORY", + "SHIPPING_ADDRESS_L1", + "SHIPPING_ADDRESS_L2", + "SHIPPING_CITY", + "SHIPPING_COUNTRY", + "SHIPPING_NAME", + "SHIPPING_PHONE", + "SHIPPING_STATE", + "SHIPPING_ZIP", + "USERAGENT" + ] + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this event type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the event type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the event type was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Label": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "Inline": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this event type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the event type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the event type was last updated.", + "type": "string" + } + }, + "additionalProperties": false + }, + "EntityType": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "Inline": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this event type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedTime": { + "description": "The time when the event type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the event type was last updated.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name for the event type", + "type": "string", + "pattern": "^[0-9a-z_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "Tags": { + "description": "Tags associated with this event type.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "description": "The description of the event type.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "EventVariables": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/EventVariable" + } + }, + "Labels": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 2, + "items": { + "$ref": "#/definitions/Label" + } + }, + "EntityTypes": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/EntityType" + } + }, + "Arn": { + "description": "The ARN of the event type.", + "type": "string" + }, + "CreatedTime": { + "description": "The time when the event type was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the event type was last updated.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "EntityTypes", + "EventVariables", + "Labels", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime", + "/properties/EventVariables/*/Arn", + "/properties/EventVariables/*/CreatedTime", + "/properties/EventVariables/*/LastUpdatedTime", + "/properties/Labels/*/Arn", + "/properties/Labels/*/CreatedTime", + "/properties/Labels/*/LastUpdatedTime", + "/properties/EntityTypes/*/Arn", + "/properties/EntityTypes/*/CreatedTime", + "/properties/EntityTypes/*/LastUpdatedTime" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "frauddetector:BatchCreateVariable", + "frauddetector:BatchGetVariable", + "frauddetector:CreateVariable", + "frauddetector:GetVariables", + "frauddetector:PutLabel", + "frauddetector:PutEntityType", + "frauddetector:PutEventType", + "frauddetector:GetEventTypes", + "frauddetector:GetLabels", + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource" + ] + }, + "update": { + "permissions": [ + "frauddetector:BatchCreateVariable", + "frauddetector:BatchGetVariable", + "frauddetector:CreateVariable", + "frauddetector:UpdateVariable", + "frauddetector:GetVariables", + "frauddetector:PutLabel", + "frauddetector:PutEntityType", + "frauddetector:PutEventType", + "frauddetector:GetEventTypes", + "frauddetector:GetLabels", + "frauddetector:GetEntityTypes", + "frauddetector:DeleteEventType", + "frauddetector:DeleteVariable", + "frauddetector:DeleteLabel", + "frauddetector:DeleteEntityType", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource", + "frauddetector:UntagResource" + ] + }, + "delete": { + "permissions": [ + "frauddetector:BatchGetVariable", + "frauddetector:GetVariables", + "frauddetector:GetEventTypes", + "frauddetector:GetLabels", + "frauddetector:GetEntityTypes", + "frauddetector:DeleteEventType", + "frauddetector:DeleteVariable", + "frauddetector:DeleteLabel", + "frauddetector:DeleteEntityType", + "frauddetector:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "frauddetector:BatchGetVariable", + "frauddetector:GetVariables", + "frauddetector:GetEventTypes", + "frauddetector:GetLabels", + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "frauddetector:BatchGetVariable", + "frauddetector:GetVariables", + "frauddetector:GetEventTypes", + "frauddetector:GetLabels", + "frauddetector:GetEntityTypes", + "frauddetector:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/frauddetector/label.json b/internal/aws/cfn/schemas/aws/frauddetector/label.json new file mode 100644 index 00000000..cb38369c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/frauddetector/label.json @@ -0,0 +1,116 @@ +{ + "typeName": "AWS::FraudDetector::Label", + "description": "An label for fraud detector.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the label.", + "type": "string", + "pattern": "^[0-9a-z_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "Tags": { + "description": "Tags associated with this label.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "description": "The label description.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Arn": { + "description": "The label ARN.", + "type": "string" + }, + "CreatedTime": { + "description": "The timestamp when the label was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The timestamp when the label was last updated.", + "type": "string" + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime" + ], + "additionalProperties": false, + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "frauddetector:GetLabels", + "frauddetector:PutLabel", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource" + ] + }, + "read": { + "permissions": [ + "frauddetector:GetLabels", + "frauddetector:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "frauddetector:GetLabels", + "frauddetector:PutLabel", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource", + "frauddetector:UntagResource" + ] + }, + "delete": { + "permissions": [ + "frauddetector:GetLabels", + "frauddetector:DeleteLabel" + ] + }, + "list": { + "permissions": [ + "frauddetector:GetLabels", + "frauddetector:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/frauddetector/list.json b/internal/aws/cfn/schemas/aws/frauddetector/list.json new file mode 100644 index 00000000..a4b49ef3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/frauddetector/list.json @@ -0,0 +1,155 @@ +{ + "typeName": "AWS::FraudDetector::List", + "description": "A resource schema for a List in Amazon Fraud Detector.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Element": { + "description": "An element in a list.", + "type": "string", + "pattern": "^\\S+( +\\S+)*$", + "minLength": 1, + "maxLength": 64 + } + }, + "properties": { + "Arn": { + "description": "The list ARN.", + "type": "string" + }, + "Name": { + "description": "The name of the list.", + "type": "string", + "pattern": "^[0-9a-z_]+$", + "minLength": 1, + "maxLength": 64 + }, + "Description": { + "description": "The description of the list.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "VariableType": { + "description": "The variable type of the list.", + "type": "string", + "pattern": "^[A-Z_]{1,64}$", + "minLength": 1, + "maxLength": 64 + }, + "CreatedTime": { + "description": "The time when the list was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the list was last updated.", + "type": "string" + }, + "Tags": { + "description": "Tags associated with this list.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Elements": { + "description": "The elements in this list.", + "type": "array", + "insertionOrder": false, + "minItems": 0, + "maxItems": 100000, + "items": { + "$ref": "#/definitions/Element" + } + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "frauddetector:CreateList", + "frauddetector:GetListElements", + "frauddetector:GetListsMetadata", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource", + "frauddetector:UpdateList" + ] + }, + "read": { + "permissions": [ + "frauddetector:GetListElements", + "frauddetector:GetListsMetadata", + "frauddetector:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "frauddetector:GetListElements", + "frauddetector:GetListsMetadata", + "frauddetector:ListTagsForResource", + "frauddetector:UntagResource", + "frauddetector:UpdateList", + "frauddetector:TagResource" + ] + }, + "delete": { + "permissions": [ + "frauddetector:DeleteList", + "frauddetector:GetListsMetadata" + ] + }, + "list": { + "permissions": [ + "frauddetector:GetListElements", + "frauddetector:GetListsMetadata", + "frauddetector:ListTagsForResource" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/frauddetector/outcome.json b/internal/aws/cfn/schemas/aws/frauddetector/outcome.json new file mode 100644 index 00000000..a83c3d9b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/frauddetector/outcome.json @@ -0,0 +1,116 @@ +{ + "typeName": "AWS::FraudDetector::Outcome", + "description": "An outcome for rule evaluation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the outcome.", + "type": "string", + "pattern": "^[0-9a-z_-]+$", + "minLength": 1, + "maxLength": 64 + }, + "Tags": { + "description": "Tags associated with this outcome.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "description": "The outcome description.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Arn": { + "description": "The outcome ARN.", + "type": "string" + }, + "CreatedTime": { + "description": "The timestamp when the outcome was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The timestamp when the outcome was last updated.", + "type": "string" + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime" + ], + "additionalProperties": false, + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "frauddetector:GetOutcomes", + "frauddetector:PutOutcome", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource" + ] + }, + "read": { + "permissions": [ + "frauddetector:GetOutcomes", + "frauddetector:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "frauddetector:GetOutcomes", + "frauddetector:PutOutcome", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource", + "frauddetector:UntagResource" + ] + }, + "delete": { + "permissions": [ + "frauddetector:GetOutcomes", + "frauddetector:DeleteOutcome" + ] + }, + "list": { + "permissions": [ + "frauddetector:GetOutcomes", + "frauddetector:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/frauddetector/variable.json b/internal/aws/cfn/schemas/aws/frauddetector/variable.json new file mode 100644 index 00000000..1418a864 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/frauddetector/variable.json @@ -0,0 +1,178 @@ +{ + "typeName": "AWS::FraudDetector::Variable", + "description": "A resource schema for a Variable in Amazon Fraud Detector.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the variable.", + "type": "string", + "pattern": "^[a-z_][a-z0-9_]{0,99}?$" + }, + "DataSource": { + "description": "The source of the data.", + "type": "string", + "enum": [ + "EVENT", + "EXTERNAL_MODEL_SCORE" + ] + }, + "DataType": { + "description": "The data type.", + "type": "string", + "enum": [ + "STRING", + "INTEGER", + "FLOAT", + "BOOLEAN" + ] + }, + "DefaultValue": { + "description": "The default value for the variable when no value is received.", + "type": "string" + }, + "Description": { + "description": "The description.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "description": "Tags associated with this variable.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VariableType": { + "description": "The variable type. For more information see https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types", + "type": "string", + "enum": [ + "AUTH_CODE", + "AVS", + "BILLING_ADDRESS_L1", + "BILLING_ADDRESS_L2", + "BILLING_CITY", + "BILLING_COUNTRY", + "BILLING_NAME", + "BILLING_PHONE", + "BILLING_STATE", + "BILLING_ZIP", + "CARD_BIN", + "CATEGORICAL", + "CURRENCY_CODE", + "EMAIL_ADDRESS", + "FINGERPRINT", + "FRAUD_LABEL", + "FREE_FORM_TEXT", + "IP_ADDRESS", + "NUMERIC", + "ORDER_ID", + "PAYMENT_TYPE", + "PHONE_NUMBER", + "PRICE", + "PRODUCT_CATEGORY", + "SHIPPING_ADDRESS_L1", + "SHIPPING_ADDRESS_L2", + "SHIPPING_CITY", + "SHIPPING_COUNTRY", + "SHIPPING_NAME", + "SHIPPING_PHONE", + "SHIPPING_STATE", + "SHIPPING_ZIP", + "USERAGENT" + ] + }, + "Arn": { + "description": "The ARN of the variable.", + "type": "string" + }, + "CreatedTime": { + "description": "The time when the variable was created.", + "type": "string" + }, + "LastUpdatedTime": { + "description": "The time when the variable was last updated.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "DataType", + "DataSource", + "DefaultValue", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "frauddetector:GetVariables", + "frauddetector:CreateVariable", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource" + ] + }, + "read": { + "permissions": [ + "frauddetector:GetVariables", + "frauddetector:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "frauddetector:GetVariables", + "frauddetector:UpdateVariable", + "frauddetector:ListTagsForResource", + "frauddetector:TagResource", + "frauddetector:UntagResource" + ] + }, + "delete": { + "permissions": [ + "frauddetector:GetVariables", + "frauddetector:DeleteVariable" + ] + }, + "list": { + "permissions": [ + "frauddetector:GetVariables", + "frauddetector:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/fsx/datarepositoryassociation.json b/internal/aws/cfn/schemas/aws/fsx/datarepositoryassociation.json new file mode 100644 index 00000000..d048741d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fsx/datarepositoryassociation.json @@ -0,0 +1,212 @@ +{ + "typeName": "AWS::FSx::DataRepositoryAssociation", + "description": "Creates an Amazon FSx for Lustre data repository association (DRA). A data repository association is a link between a directory on the file system and an Amazon S3 bucket or prefix. You can have a maximum of 8 data repository associations on a file system. Data repository associations are supported on all FSx for Lustre 2.12 and newer file systems, excluding ``scratch_1`` deployment type. \n Each data repository association must have a unique Amazon FSx file system directory and a unique S3 bucket or prefix associated with it. You can configure a data repository association for automatic import only, for automatic export only, or for both. To learn more about linking a data repository to your file system, see [Linking your file system to an S3 bucket](https://docs.aws.amazon.com/fsx/latest/LustreGuide/create-dra-linked-data-repo.html).", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-fsx.git", + "resourceLink": { + "templateUri": "/fsx/home?region=${awsRegion}#data-repository-associations-details/${FileSystemId}/${AssociationId}", + "mappings": { + "AssociationId": "/AssociationId", + "FileSystemId": "/FileSystemId" + } + }, + "definitions": { + "EventType": { + "type": "string", + "enum": [ + "NEW", + "CHANGED", + "DELETED" + ] + }, + "EventTypes": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/EventType" + }, + "maxItems": 3 + }, + "AutoImportPolicy": { + "description": "Describes the data repository association's automatic import policy. The AutoImportPolicy defines how Amazon FSx keeps your file metadata and directory listings up to date by importing changes to your Amazon FSx for Lustre file system as you modify objects in a linked S3 bucket.\n The ``AutoImportPolicy`` is only supported on Amazon FSx for Lustre file systems with a data repository association.", + "type": "object", + "additionalProperties": false, + "properties": { + "Events": { + "$ref": "#/definitions/EventTypes", + "description": "The ``AutoImportPolicy`` can have the following event values:\n + ``NEW`` - Amazon FSx automatically imports metadata of files added to the linked S3 bucket that do not currently exist in the FSx file system.\n + ``CHANGED`` - Amazon FSx automatically updates file metadata and invalidates existing file content on the file system as files change in the data repository.\n + ``DELETED`` - Amazon FSx automatically deletes files on the file system as corresponding files are deleted in the data repository.\n \n You can define any combination of event types for your ``AutoImportPolicy``." + } + }, + "required": [ + "Events" + ] + }, + "AutoExportPolicy": { + "description": "Describes a data repository association's automatic export policy. The ``AutoExportPolicy`` defines the types of updated objects on the file system that will be automatically exported to the data repository. As you create, modify, or delete files, Amazon FSx for Lustre automatically exports the defined changes asynchronously once your application finishes modifying the file.\n The ``AutoExportPolicy`` is only supported on Amazon FSx for Lustre file systems with a data repository association.", + "type": "object", + "additionalProperties": false, + "properties": { + "Events": { + "$ref": "#/definitions/EventTypes", + "description": "The ``AutoExportPolicy`` can have the following event values:\n + ``NEW`` - New files and directories are automatically exported to the data repository as they are added to the file system.\n + ``CHANGED`` - Changes to files and directories on the file system are automatically exported to the data repository.\n + ``DELETED`` - Files and directories are automatically deleted on the data repository when they are deleted on the file system.\n \n You can define any combination of event types for your ``AutoExportPolicy``." + } + }, + "required": [ + "Events" + ] + }, + "Tag": { + "description": "Specifies a key-value pair for a resource tag.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "A value that specifies the ``TagKey``, the name of the tag. Tag keys must be unique for the resource to which they are attached.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "A value that specifies the ``TagValue``, the value assigned to the corresponding tag key. Tag values can be null and don't have to be unique in a tag set. For example, you can have a key-value pair in a tag set of ``finances : April`` and also of ``payroll : April``.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "S3": { + "description": "The configuration for an Amazon S3 data repository linked to an Amazon FSx Lustre file system with a data repository association. The configuration defines which file events (new, changed, or deleted files or directories) are automatically imported from the linked data repository to the file system or automatically exported from the file system to the data repository.", + "type": "object", + "additionalProperties": false, + "properties": { + "AutoImportPolicy": { + "$ref": "#/definitions/AutoImportPolicy", + "description": "Describes the data repository association's automatic import policy. The AutoImportPolicy defines how Amazon FSx keeps your file metadata and directory listings up to date by importing changes to your Amazon FSx for Lustre file system as you modify objects in a linked S3 bucket.\n The ``AutoImportPolicy`` is only supported on Amazon FSx for Lustre file systems with a data repository association." + }, + "AutoExportPolicy": { + "$ref": "#/definitions/AutoExportPolicy", + "description": "Describes a data repository association's automatic export policy. The ``AutoExportPolicy`` defines the types of updated objects on the file system that will be automatically exported to the data repository. As you create, modify, or delete files, Amazon FSx for Lustre automatically exports the defined changes asynchronously once your application finishes modifying the file.\n The ``AutoExportPolicy`` is only supported on Amazon FSx for Lustre file systems with a data repository association." + } + } + } + }, + "properties": { + "AssociationId": { + "type": "string", + "description": "" + }, + "ResourceARN": { + "type": "string", + "description": "" + }, + "FileSystemId": { + "type": "string", + "description": "The ID of the file system on which the data repository association is configured." + }, + "FileSystemPath": { + "type": "string", + "description": "A path on the Amazon FSx for Lustre file system that points to a high-level directory (such as ``/ns1/``) or subdirectory (such as ``/ns1/subdir/``) that will be mapped 1-1 with ``DataRepositoryPath``. The leading forward slash in the name is required. Two data repository associations cannot have overlapping file system paths. For example, if a data repository is associated with file system path ``/ns1/``, then you cannot link another data repository with file system path ``/ns1/ns2``.\n This path specifies where in your file system files will be exported from or imported to. This file system directory can be linked to only one Amazon S3 bucket, and no other S3 bucket can be linked to the directory.\n If you specify only a forward slash (``/``) as the file system path, you can link only one data repository to the file system. You can only specify \"/\" as the file system path for the first data repository associated with a file system." + }, + "DataRepositoryPath": { + "type": "string", + "description": "The path to the Amazon S3 data repository that will be linked to the file system. The path can be an S3 bucket or prefix in the format ``s3://myBucket/myPrefix/``. This path specifies where in the S3 data repository files will be imported from or exported to." + }, + "BatchImportMetaDataOnCreate": { + "type": "boolean", + "description": "A boolean flag indicating whether an import data repository task to import metadata should run after the data repository association is created. The task runs if this flag is set to ``true``." + }, + "ImportedFileChunkSize": { + "type": "integer", + "description": "For files imported from a data repository, this value determines the stripe count and maximum amount of data per file (in MiB) stored on a single physical disk. The maximum number of disks that a single file can be striped across is limited by the total number of disks that make up the file system or cache.\n The default chunk size is 1,024 MiB (1 GiB) and can go as high as 512,000 MiB (500 GiB). Amazon S3 objects have a maximum size of 5 TB." + }, + "S3": { + "description": "The configuration for an Amazon S3 data repository linked to an Amazon FSx Lustre file system with a data repository association. The configuration defines which file events (new, changed, or deleted files or directories) are automatically imported from the linked data repository to the file system or automatically exported from the file system to the data repository.", + "$ref": "#/definitions/S3" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "An array of key-value pairs to apply to this resource.\n For more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)." + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "FileSystemId", + "FileSystemPath", + "DataRepositoryPath" + ], + "createOnlyProperties": [ + "/properties/FileSystemId", + "/properties/FileSystemPath", + "/properties/DataRepositoryPath", + "/properties/BatchImportMetaDataOnCreate" + ], + "primaryIdentifier": [ + "/properties/AssociationId" + ], + "readOnlyProperties": [ + "/properties/AssociationId", + "/properties/ResourceARN" + ], + "handlers": { + "create": { + "permissions": [ + "fsx:CreateDataRepositoryAssociation", + "fsx:DescribeDataRepositoryAssociations", + "fsx:TagResource", + "s3:ListBucket", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy" + ], + "timeoutInMinutes": 120 + }, + "read": { + "permissions": [ + "fsx:DescribeDataRepositoryAssociations" + ] + }, + "update": { + "permissions": [ + "fsx:DescribeDataRepositoryAssociations", + "fsx:UpdateDataRepositoryAssociation", + "fsx:TagResource", + "fsx:UntagResource", + "s3:ListBucket", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy" + ], + "timeoutInMinutes": 180 + }, + "delete": { + "permissions": [ + "fsx:DescribeDataRepositoryAssociations", + "fsx:DeleteDataRepositoryAssociation" + ], + "timeoutInMinutes": 180 + }, + "list": { + "permissions": [ + "fsx:DescribeDataRepositoryAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/fsx/filesystem.json b/internal/aws/cfn/schemas/aws/fsx/filesystem.json new file mode 100644 index 00000000..4c22800f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fsx/filesystem.json @@ -0,0 +1,444 @@ +{ + "typeName": "AWS::FSx::FileSystem", + "description": "Resource Type definition for AWS::FSx::FileSystem", + "additionalProperties": false, + "properties": { + "StorageType": { + "type": "string" + }, + "KmsKeyId": { + "type": "string" + }, + "StorageCapacity": { + "type": "integer" + }, + "RootVolumeId": { + "type": "string" + }, + "LustreConfiguration": { + "$ref": "#/definitions/LustreConfiguration" + }, + "BackupId": { + "type": "string" + }, + "OntapConfiguration": { + "$ref": "#/definitions/OntapConfiguration" + }, + "DNSName": { + "type": "string" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "WindowsConfiguration": { + "$ref": "#/definitions/WindowsConfiguration" + }, + "FileSystemTypeVersion": { + "type": "string" + }, + "OpenZFSConfiguration": { + "$ref": "#/definitions/OpenZFSConfiguration" + }, + "ResourceARN": { + "type": "string" + }, + "FileSystemType": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "LustreMountName": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "OpenZFSConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Options": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "CopyTagsToVolumes": { + "type": "boolean" + }, + "DeploymentType": { + "type": "string" + }, + "ThroughputCapacity": { + "type": "integer" + }, + "RootVolumeConfiguration": { + "$ref": "#/definitions/RootVolumeConfiguration" + }, + "EndpointIpAddressRange": { + "type": "string" + }, + "RouteTableIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "WeeklyMaintenanceStartTime": { + "type": "string" + }, + "DiskIopsConfiguration": { + "$ref": "#/definitions/DiskIopsConfiguration" + }, + "DailyAutomaticBackupStartTime": { + "type": "string" + }, + "CopyTagsToBackups": { + "type": "boolean" + }, + "AutomaticBackupRetentionDays": { + "type": "integer" + }, + "PreferredSubnetId": { + "type": "string" + } + }, + "required": [ + "DeploymentType" + ] + }, + "SelfManagedActiveDirectoryConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileSystemAdministratorsGroup": { + "type": "string" + }, + "UserName": { + "type": "string" + }, + "DomainName": { + "type": "string" + }, + "OrganizationalUnitDistinguishedName": { + "type": "string" + }, + "DnsIps": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Password": { + "type": "string" + } + } + }, + "AuditLogConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileAccessAuditLogLevel": { + "type": "string" + }, + "FileShareAccessAuditLogLevel": { + "type": "string" + }, + "AuditLogDestination": { + "type": "string" + } + }, + "required": [ + "FileAccessAuditLogLevel", + "FileShareAccessAuditLogLevel" + ] + }, + "DiskIopsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mode": { + "type": "string" + }, + "Iops": { + "type": "integer" + } + } + }, + "LustreConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DriveCacheType": { + "type": "string" + }, + "AutoImportPolicy": { + "type": "string" + }, + "ImportedFileChunkSize": { + "type": "integer" + }, + "DeploymentType": { + "type": "string" + }, + "DataCompressionType": { + "type": "string" + }, + "ImportPath": { + "type": "string" + }, + "WeeklyMaintenanceStartTime": { + "type": "string" + }, + "DailyAutomaticBackupStartTime": { + "type": "string" + }, + "CopyTagsToBackups": { + "type": "boolean" + }, + "ExportPath": { + "type": "string" + }, + "PerUnitStorageThroughput": { + "type": "integer" + }, + "AutomaticBackupRetentionDays": { + "type": "integer" + } + } + }, + "NfsExports": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientConfigurations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ClientConfigurations" + } + } + } + }, + "OntapConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "HAPairs": { + "type": "integer" + }, + "FsxAdminPassword": { + "type": "string" + }, + "ThroughputCapacityPerHAPair": { + "type": "integer" + }, + "DeploymentType": { + "type": "string" + }, + "ThroughputCapacity": { + "type": "integer" + }, + "EndpointIpAddressRange": { + "type": "string" + }, + "RouteTableIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "WeeklyMaintenanceStartTime": { + "type": "string" + }, + "DiskIopsConfiguration": { + "$ref": "#/definitions/DiskIopsConfiguration" + }, + "DailyAutomaticBackupStartTime": { + "type": "string" + }, + "AutomaticBackupRetentionDays": { + "type": "integer" + }, + "PreferredSubnetId": { + "type": "string" + } + }, + "required": [ + "DeploymentType" + ] + }, + "ClientConfigurations": { + "type": "object", + "additionalProperties": false, + "properties": { + "Clients": { + "type": "string" + }, + "Options": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "RootVolumeConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReadOnly": { + "type": "boolean" + }, + "DataCompressionType": { + "type": "string" + }, + "NfsExports": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/NfsExports" + } + }, + "CopyTagsToSnapshots": { + "type": "boolean" + }, + "RecordSizeKiB": { + "type": "integer" + }, + "UserAndGroupQuotas": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/UserAndGroupQuotas" + } + } + } + }, + "WindowsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "SelfManagedActiveDirectoryConfiguration": { + "$ref": "#/definitions/SelfManagedActiveDirectoryConfiguration" + }, + "AuditLogConfiguration": { + "$ref": "#/definitions/AuditLogConfiguration" + }, + "ActiveDirectoryId": { + "type": "string" + }, + "DeploymentType": { + "type": "string" + }, + "Aliases": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ThroughputCapacity": { + "type": "integer" + }, + "WeeklyMaintenanceStartTime": { + "type": "string" + }, + "DiskIopsConfiguration": { + "$ref": "#/definitions/DiskIopsConfiguration" + }, + "CopyTagsToBackups": { + "type": "boolean" + }, + "DailyAutomaticBackupStartTime": { + "type": "string" + }, + "AutomaticBackupRetentionDays": { + "type": "integer" + }, + "PreferredSubnetId": { + "type": "string" + } + }, + "required": [ + "ThroughputCapacity" + ] + }, + "UserAndGroupQuotas": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Id": { + "type": "integer" + }, + "StorageCapacityQuotaGiB": { + "type": "integer" + } + } + } + }, + "required": [ + "FileSystemType", + "SubnetIds" + ], + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/SecurityGroupIds", + "/properties/FileSystemTypeVersion", + "/properties/FileSystemType", + "/properties/SubnetIds", + "/properties/BackupId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/ResourceARN", + "/properties/Id", + "/properties/LustreMountName", + "/properties/RootVolumeId", + "/properties/DNSName" + ] +} diff --git a/internal/aws/cfn/schemas/aws/fsx/snapshot.json b/internal/aws/cfn/schemas/aws/fsx/snapshot.json new file mode 100644 index 00000000..c451623c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fsx/snapshot.json @@ -0,0 +1,58 @@ +{ + "typeName": "AWS::FSx::Snapshot", + "description": "Resource Type definition for AWS::FSx::Snapshot", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "VolumeId": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "VolumeId", + "Name" + ], + "createOnlyProperties": [ + "/properties/VolumeId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/ResourceARN", + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/fsx/storagevirtualmachine.json b/internal/aws/cfn/schemas/aws/fsx/storagevirtualmachine.json new file mode 100644 index 00000000..9cafe5d4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fsx/storagevirtualmachine.json @@ -0,0 +1,113 @@ +{ + "typeName": "AWS::FSx::StorageVirtualMachine", + "description": "Resource Type definition for AWS::FSx::StorageVirtualMachine", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "SvmAdminPassword": { + "type": "string" + }, + "StorageVirtualMachineId": { + "type": "string" + }, + "ActiveDirectoryConfiguration": { + "$ref": "#/definitions/ActiveDirectoryConfiguration" + }, + "RootVolumeSecurityStyle": { + "type": "string" + }, + "FileSystemId": { + "type": "string" + }, + "UUID": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "SelfManagedActiveDirectoryConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileSystemAdministratorsGroup": { + "type": "string" + }, + "UserName": { + "type": "string" + }, + "DomainName": { + "type": "string" + }, + "OrganizationalUnitDistinguishedName": { + "type": "string" + }, + "DnsIps": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Password": { + "type": "string" + } + } + }, + "ActiveDirectoryConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "SelfManagedActiveDirectoryConfiguration": { + "$ref": "#/definitions/SelfManagedActiveDirectoryConfiguration" + }, + "NetBiosName": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "FileSystemId", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/RootVolumeSecurityStyle", + "/properties/FileSystemId" + ], + "primaryIdentifier": [ + "/properties/StorageVirtualMachineId" + ], + "readOnlyProperties": [ + "/properties/ResourceARN", + "/properties/UUID", + "/properties/StorageVirtualMachineId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/fsx/volume.json b/internal/aws/cfn/schemas/aws/fsx/volume.json new file mode 100644 index 00000000..dcac1993 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/fsx/volume.json @@ -0,0 +1,350 @@ +{ + "typeName": "AWS::FSx::Volume", + "description": "Resource Type definition for AWS::FSx::Volume", + "additionalProperties": false, + "properties": { + "OpenZFSConfiguration": { + "$ref": "#/definitions/OpenZFSConfiguration" + }, + "ResourceARN": { + "type": "string" + }, + "VolumeId": { + "type": "string" + }, + "VolumeType": { + "type": "string" + }, + "BackupId": { + "type": "string" + }, + "OntapConfiguration": { + "$ref": "#/definitions/OntapConfiguration" + }, + "UUID": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "TieringPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "CoolingPeriod": { + "type": "integer" + }, + "Name": { + "type": "string" + } + } + }, + "SnaplockRetentionPeriod": { + "type": "object", + "additionalProperties": false, + "properties": { + "MinimumRetention": { + "$ref": "#/definitions/RetentionPeriod" + }, + "DefaultRetention": { + "$ref": "#/definitions/RetentionPeriod" + }, + "MaximumRetention": { + "$ref": "#/definitions/RetentionPeriod" + } + }, + "required": [ + "DefaultRetention", + "MaximumRetention", + "MinimumRetention" + ] + }, + "OntapConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "JunctionPath": { + "type": "string" + }, + "StorageVirtualMachineId": { + "type": "string" + }, + "TieringPolicy": { + "$ref": "#/definitions/TieringPolicy" + }, + "SizeInMegabytes": { + "type": "string" + }, + "VolumeStyle": { + "type": "string" + }, + "SizeInBytes": { + "type": "string" + }, + "SecurityStyle": { + "type": "string" + }, + "SnaplockConfiguration": { + "$ref": "#/definitions/SnaplockConfiguration" + }, + "AggregateConfiguration": { + "$ref": "#/definitions/AggregateConfiguration" + }, + "SnapshotPolicy": { + "type": "string" + }, + "StorageEfficiencyEnabled": { + "type": "string" + }, + "CopyTagsToBackups": { + "type": "string" + }, + "OntapVolumeType": { + "type": "string" + } + }, + "required": [ + "StorageVirtualMachineId" + ] + }, + "RetentionPeriod": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "integer" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "SnaplockConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AuditLogVolume": { + "type": "string" + }, + "VolumeAppendModeEnabled": { + "type": "string" + }, + "AutocommitPeriod": { + "$ref": "#/definitions/AutocommitPeriod" + }, + "RetentionPeriod": { + "$ref": "#/definitions/SnaplockRetentionPeriod" + }, + "PrivilegedDelete": { + "type": "string" + }, + "SnaplockType": { + "type": "string" + } + }, + "required": [ + "SnaplockType" + ] + }, + "OriginSnapshot": { + "type": "object", + "additionalProperties": false, + "properties": { + "SnapshotARN": { + "type": "string" + }, + "CopyStrategy": { + "type": "string" + } + }, + "required": [ + "CopyStrategy", + "SnapshotARN" + ] + }, + "OpenZFSConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReadOnly": { + "type": "boolean" + }, + "Options": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DataCompressionType": { + "type": "string" + }, + "NfsExports": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/NfsExports" + } + }, + "StorageCapacityQuotaGiB": { + "type": "integer" + }, + "CopyTagsToSnapshots": { + "type": "boolean" + }, + "ParentVolumeId": { + "type": "string" + }, + "StorageCapacityReservationGiB": { + "type": "integer" + }, + "RecordSizeKiB": { + "type": "integer" + }, + "OriginSnapshot": { + "$ref": "#/definitions/OriginSnapshot" + }, + "UserAndGroupQuotas": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/UserAndGroupQuotas" + } + } + }, + "required": [ + "ParentVolumeId" + ] + }, + "AggregateConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Aggregates": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ConstituentsPerAggregate": { + "type": "integer" + } + } + }, + "NfsExports": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientConfigurations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ClientConfigurations" + } + } + }, + "required": [ + "ClientConfigurations" + ] + }, + "ClientConfigurations": { + "type": "object", + "additionalProperties": false, + "properties": { + "Clients": { + "type": "string" + }, + "Options": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "Options", + "Clients" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "AutocommitPeriod": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "integer" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "UserAndGroupQuotas": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Id": { + "type": "integer" + }, + "StorageCapacityQuotaGiB": { + "type": "integer" + } + }, + "required": [ + "Type", + "Id", + "StorageCapacityQuotaGiB" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/BackupId", + "/properties/VolumeType" + ], + "primaryIdentifier": [ + "/properties/VolumeId" + ], + "readOnlyProperties": [ + "/properties/ResourceARN", + "/properties/VolumeId", + "/properties/UUID" + ] +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/alias.json b/internal/aws/cfn/schemas/aws/gamelift/alias.json new file mode 100644 index 00000000..14c23a52 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/alias.json @@ -0,0 +1,107 @@ +{ + "typeName": "AWS::GameLift::Alias", + "description": "The AWS::GameLift::Alias resource creates an alias for an Amazon GameLift (GameLift) fleet destination.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "definitions": { + "RoutingStrategy": { + "type": "object", + "properties": { + "Message": { + "description": "The message text to be used with a terminal routing strategy. If you specify TERMINAL for the Type property, you must specify this property.", + "type": "string" + }, + "FleetId": { + "description": "A unique identifier for a fleet that the alias points to. If you specify SIMPLE for the Type property, you must specify this property.", + "type": "string", + "pattern": "^fleet-\\S+" + }, + "Type": { + "description": "Simple routing strategy. The alias resolves to one specific fleet. Use this type when routing to active fleets.", + "type": "string", + "enum": [ + "SIMPLE", + "TERMINAL" + ] + } + }, + "additionalProperties": false, + "required": [ + "Type" + ], + "anyOf": [ + { + "required": [ + "FleetId" + ] + }, + { + "required": [ + "Message" + ] + } + ] + } + }, + "properties": { + "Description": { + "description": "A human-readable description of the alias.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Name": { + "description": "A descriptive label that is associated with an alias. Alias names do not need to be unique.", + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": ".*\\S.*" + }, + "RoutingStrategy": { + "description": "A routing configuration that specifies where traffic is directed for this alias, such as to a fleet or to a message.", + "$ref": "#/definitions/RoutingStrategy" + }, + "AliasId": { + "description": "Unique alias ID", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "RoutingStrategy" + ], + "readOnlyProperties": [ + "/properties/AliasId" + ], + "primaryIdentifier": [ + "/properties/AliasId" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:CreateAlias" + ] + }, + "read": { + "permissions": [ + "gamelift:DescribeAlias" + ] + }, + "update": { + "permissions": [ + "gamelift:UpdateAlias" + ] + }, + "delete": { + "permissions": [ + "gamelift:DeleteAlias" + ] + }, + "list": { + "permissions": [ + "gamelift:ListAliases" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/build.json b/internal/aws/cfn/schemas/aws/gamelift/build.json new file mode 100644 index 00000000..e807f9d8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/build.json @@ -0,0 +1,120 @@ +{ + "typeName": "AWS::GameLift::Build", + "description": "Resource Type definition for AWS::GameLift::Build", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "StorageLocation": { + "$comment": "Contains object details present in the S3 Bucket", + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "description": "An Amazon S3 bucket identifier. This is the name of the S3 bucket.", + "type": "string" + }, + "Key": { + "description": "The name of the zip file that contains the build files or script files.", + "type": "string" + }, + "ObjectVersion": { + "description": "The version of the file, if object versioning is turned on for the bucket. Amazon GameLift uses this information when retrieving files from your S3 bucket. To retrieve a specific version of the file, provide an object version. To retrieve the latest version of the file, do not set this parameter.", + "type": "string" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access the S3 bucket.", + "type": "string" + } + }, + "required": [ + "Bucket", + "Key", + "RoleArn" + ] + } + }, + "properties": { + "BuildId": { + "description": "A unique identifier for a build to be deployed on the new fleet. If you are deploying the fleet with a custom game build, you must specify this property. The build must have been successfully uploaded to Amazon GameLift and be in a READY status. This fleet setting cannot be changed once the fleet is created.", + "type": "string" + }, + "Name": { + "description": "A descriptive label that is associated with a build. Build names do not need to be unique.", + "type": "string" + }, + "OperatingSystem": { + "description": "The operating system that the game server binaries are built to run on. This value determines the type of fleet resources that you can use for this build. If your game build contains multiple executables, they all must run on the same operating system. If an operating system is not specified when creating a build, Amazon GameLift uses the default value (WINDOWS_2012). This value cannot be changed later.", + "type": "string", + "enum": [ + "AMAZON_LINUX", + "AMAZON_LINUX_2", + "AMAZON_LINUX_2023", + "WINDOWS_2012", + "WINDOWS_2016" + ] + }, + "StorageLocation": { + "description": "Information indicating where your game build files are stored. Use this parameter only when creating a build with files stored in an Amazon S3 bucket that you own. The storage location must specify an Amazon S3 bucket name and key. The location must also specify a role ARN that you set up to allow Amazon GameLift to access your Amazon S3 bucket. The S3 bucket and your new build must be in the same Region.", + "$ref": "#/definitions/StorageLocation" + }, + "Version": { + "description": "Version information that is associated with this build. Version strings do not need to be unique.", + "type": "string" + }, + "ServerSdkVersion": { + "description": "A server SDK version you used when integrating your game server build with Amazon GameLift. By default Amazon GameLift sets this value to 4.0.2.", + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [], + "createOnlyProperties": [ + "/properties/StorageLocation", + "/properties/OperatingSystem", + "/properties/ServerSdkVersion" + ], + "writeOnlyProperties": [ + "/properties/StorageLocation", + "/properties/ServerSdkVersion" + ], + "readOnlyProperties": [ + "/properties/BuildId" + ], + "primaryIdentifier": [ + "/properties/BuildId" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:DescribeBuild", + "gamelift:CreateBuild" + ] + }, + "read": { + "permissions": [ + "gamelift:DescribeBuild" + ] + }, + "update": { + "permissions": [ + "gamelift:UpdateBuild" + ] + }, + "delete": { + "permissions": [ + "gamelift:DescribeBuild", + "gamelift:DeleteBuild" + ] + }, + "list": { + "permissions": [ + "gamelift:ListBuilds" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/fleet.json b/internal/aws/cfn/schemas/aws/gamelift/fleet.json new file mode 100644 index 00000000..e31b3e89 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/fleet.json @@ -0,0 +1,589 @@ +{ + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "deprecatedProperties": [ + "/properties/LogPaths", + "/properties/ServerLaunchParameters", + "/properties/ServerLaunchPath" + ], + "taggable": true, + "typeName": "AWS::GameLift::Fleet", + "readOnlyProperties": [ + "/properties/FleetId" + ], + "description": "The AWS::GameLift::Fleet resource creates an Amazon GameLift (GameLift) fleet to host game servers. A fleet is a set of EC2 or Anywhere instances, each of which can host multiple game sessions.", + "createOnlyProperties": [ + "/properties/ApplyCapacity", + "/properties/BuildId", + "/properties/CertificateConfiguration", + "/properties/EC2InstanceType", + "/properties/FleetType", + "/properties/InstanceRoleARN", + "/properties/InstanceRoleCredentialsProvider", + "/properties/LogPaths", + "/properties/PeerVpcAwsAccountId", + "/properties/PeerVpcId", + "/properties/ScriptId", + "/properties/ServerLaunchParameters", + "/properties/ServerLaunchPath", + "/properties/CertificateType", + "/properties/ComputeType" + ], + "primaryIdentifier": [ + "/properties/FleetId" + ], + "required": [ + "Name" + ], + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "handlers": { + "read": { + "permissions": [ + "gamelift:DescribeFleetAttributes", + "gamelift:DescribeFleetLocationAttributes", + "gamelift:DescribeFleetCapacity", + "gamelift:DescribeFleetPortSettings", + "gamelift:DescribeFleetUtilization", + "gamelift:DescribeRuntimeConfiguration", + "gamelift:DescribeEC2InstanceLimits", + "gamelift:DescribeFleetEvents", + "gamelift:DescribeScalingPolicies" + ] + }, + "create": { + "permissions": [ + "gamelift:CreateFleet", + "gamelift:DescribeFleetAttributes", + "gamelift:DescribeFleetLocationAttributes", + "gamelift:UpdateFleetCapacity", + "gamelift:DescribeFleetLocationCapacity", + "gamelift:PutScalingPolicy", + "gamelift:DescribeScalingPolicies" + ] + }, + "update": { + "permissions": [ + "gamelift:UpdateFleetAttributes", + "gamelift:CreateFleetLocations", + "gamelift:DeleteFleetLocations", + "gamelift:UpdateFleetCapacity", + "gamelift:UpdateFleetPortSettings", + "gamelift:UpdateRuntimeConfiguration", + "gamelift:DescribeFleetLocationCapacity", + "gamelift:DescribeFleetPortSettings", + "gamelift:DescribeFleetLocationAttributes", + "gamelift:PutScalingPolicy", + "gamelift:DescribeScalingPolicies", + "gamelift:DeleteScalingPolicy" + ] + }, + "list": { + "permissions": [ + "gamelift:ListFleets" + ] + }, + "delete": { + "permissions": [ + "gamelift:DeleteFleet", + "gamelift:DescribeFleetLocationCapacity", + "gamelift:DescribeScalingPolicies", + "gamelift:DeleteScalingPolicy" + ] + } + }, + "writeOnlyProperties": [ + "/properties/ApplyCapacity" + ], + "additionalProperties": false, + "definitions": { + "ScalingPolicy": { + "description": "Rule that controls how a fleet is scaled. Scaling policies are uniquely identified by the combination of name and fleet ID.", + "additionalProperties": false, + "type": "object", + "properties": { + "Status": { + "description": "Current status of the scaling policy. The scaling policy can be in force only when in an ACTIVE status. Scaling policies can be suspended for individual fleets. If the policy is suspended for a fleet, the policy status does not change.", + "type": "string", + "enum": [ + "ACTIVE", + "UPDATE_REQUESTED", + "UPDATING", + "DELETE_REQUESTED", + "DELETING", + "DELETED", + "ERROR" + ] + }, + "MetricName": { + "description": "Name of the Amazon GameLift-defined metric that is used to trigger a scaling adjustment.", + "type": "string", + "enum": [ + "ActivatingGameSessions", + "ActiveGameSessions", + "ActiveInstances", + "AvailableGameSessions", + "AvailablePlayerSessions", + "CurrentPlayerSessions", + "IdleInstances", + "PercentAvailableGameSessions", + "PercentIdleInstances", + "QueueDepth", + "WaitTime", + "ConcurrentActivatableGameSessions" + ] + }, + "PolicyType": { + "description": "The type of scaling policy to create. For a target-based policy, set the parameter MetricName to 'PercentAvailableGameSessions' and specify a TargetConfiguration. For a rule-based policy set the following parameters: MetricName, ComparisonOperator, Threshold, EvaluationPeriods, ScalingAdjustmentType, and ScalingAdjustment.", + "type": "string", + "enum": [ + "RuleBased", + "TargetBased" + ] + }, + "ComparisonOperator": { + "description": "Comparison operator to use when measuring a metric against the threshold value.", + "type": "string", + "enum": [ + "GreaterThanOrEqualToThreshold", + "GreaterThanThreshold", + "LessThanThreshold", + "LessThanOrEqualToThreshold" + ] + }, + "TargetConfiguration": { + "description": "An object that contains settings for a target-based scaling policy.", + "$ref": "#/definitions/TargetConfiguration" + }, + "UpdateStatus": { + "description": "The current status of the fleet's scaling policies in a requested fleet location. The status PENDING_UPDATE indicates that an update was requested for the fleet but has not yet been completed for the location.", + "type": "string", + "enum": [ + "PENDING_UPDATE" + ] + }, + "ScalingAdjustment": { + "description": "Amount of adjustment to make, based on the scaling adjustment type.", + "type": "integer" + }, + "EvaluationPeriods": { + "description": "Length of time (in minutes) the metric must be at or beyond the threshold before a scaling event is triggered.", + "type": "integer", + "minimum": 1 + }, + "Location": { + "$ref": "#/definitions/Location" + }, + "Name": { + "minLength": 1, + "description": "A descriptive label that is associated with a fleet's scaling policy. Policy names do not need to be unique.", + "type": "string", + "maxLength": 1024 + }, + "ScalingAdjustmentType": { + "description": "The type of adjustment to make to a fleet's instance count.", + "type": "string", + "enum": [ + "ChangeInCapacity", + "ExactCapacity", + "PercentChangeInCapacity" + ] + }, + "Threshold": { + "description": "Metric value used to trigger a scaling event.", + "type": "number" + } + }, + "required": [ + "MetricName", + "Name" + ] + }, + "ServerProcess": { + "description": "A set of instructions for launching server processes on each instance in a fleet. Each instruction set identifies the location of the server executable, optional launch parameters, and the number of server processes with this configuration to maintain concurrently on the instance. Server process configurations make up a fleet's RuntimeConfiguration.", + "additionalProperties": false, + "type": "object", + "properties": { + "ConcurrentExecutions": { + "description": "The number of server processes that use this configuration to run concurrently on an instance.", + "type": "integer", + "minimum": 1 + }, + "Parameters": { + "minLength": 1, + "description": "An optional list of parameters to pass to the server executable or Realtime script on launch.", + "type": "string", + "maxLength": 1024 + }, + "LaunchPath": { + "minLength": 1, + "pattern": "^([Cc]:\\\\game\\S+|/local/game/\\S+)", + "description": "The location of the server executable in a custom game build or the name of the Realtime script file that contains the Init() function. Game builds and Realtime scripts are installed on instances at the root:\n\nWindows (for custom game builds only): C:\\game. Example: \"C:\\game\\MyGame\\server.exe\"\n\nLinux: /local/game. Examples: \"/local/game/MyGame/server.exe\" or \"/local/game/MyRealtimeScript.js\"", + "type": "string", + "maxLength": 1024 + } + }, + "required": [ + "ConcurrentExecutions", + "LaunchPath" + ] + }, + "TargetConfiguration": { + "description": "Settings for a target-based scaling policy. A target-based policy tracks a particular fleet metric specifies a target value for the metric. As player usage changes, the policy triggers Amazon GameLift to adjust capacity so that the metric returns to the target value. The target configuration specifies settings as needed for the target based policy, including the target value.", + "additionalProperties": false, + "type": "object", + "properties": { + "TargetValue": { + "description": "Desired value to use with a target-based scaling policy. The value must be relevant for whatever metric the scaling policy is using. For example, in a policy using the metric PercentAvailableGameSessions, the target value should be the preferred size of the fleet's buffer (the percent of capacity that should be idle and ready for new game sessions).", + "type": "number" + } + }, + "required": [ + "TargetValue" + ] + }, + "RuntimeConfiguration": { + "description": "A collection of server process configurations that describe the processes to run on each instance in a fleet. All fleets must have a runtime configuration. Each instance in the fleet maintains server processes as specified in the runtime configuration, launching new ones as existing processes end. Each instance regularly checks for an updated runtime configuration makes adjustments as called for.\n\nThe runtime configuration enables the instances in a fleet to run multiple processes simultaneously. Potential scenarios are as follows: (1) Run multiple processes of a single game server executable to maximize usage of your hosting resources. (2) Run one or more processes of different executables, such as your game server and a metrics tracking program. (3) Run multiple processes of a single game server but with different launch parameters, for example to run one process on each instance in debug mode.\n\nAn Amazon GameLift instance is limited to 50 processes running simultaneously. A runtime configuration must specify fewer than this limit. To calculate the total number of processes specified in a runtime configuration, add the values of the ConcurrentExecutions parameter for each ServerProcess object in the runtime configuration.", + "additionalProperties": false, + "type": "object", + "properties": { + "ServerProcesses": { + "maxItems": 50, + "description": "A collection of server process configurations that describe which server processes to run on each instance in a fleet.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ServerProcess" + } + }, + "MaxConcurrentGameSessionActivations": { + "description": "The maximum number of game sessions with status ACTIVATING to allow on an instance simultaneously. This setting limits the amount of instance resources that can be used for new game activations at any one time.", + "maximum": 2147483647, + "type": "integer", + "minimum": 1 + }, + "GameSessionActivationTimeoutSeconds": { + "description": "The maximum amount of time (in seconds) that a game session can remain in status ACTIVATING. If the game session is not active before the timeout, activation is terminated and the game session status is changed to TERMINATED.", + "maximum": 600, + "type": "integer", + "minimum": 1 + } + } + }, + "LocationConfiguration": { + "description": "A remote location where a multi-location fleet can deploy EC2 instances for game hosting.", + "additionalProperties": false, + "type": "object", + "properties": { + "LocationCapacity": { + "$ref": "#/definitions/LocationCapacity" + }, + "Location": { + "$ref": "#/definitions/Location" + } + }, + "required": [ + "Location" + ] + }, + "AnywhereConfiguration": { + "description": "Configuration for Anywhere fleet.", + "additionalProperties": false, + "properties": { + "Cost": { + "minLength": 1, + "pattern": "^\\d{1,5}(?:\\.\\d{1,5})?$", + "description": "Cost of compute can be specified on Anywhere Fleets to prioritize placement across Queue destinations based on Cost.", + "type": "string", + "maxLength": 11 + } + }, + "required": [ + "Cost" + ] + }, + "ResourceCreationLimitPolicy": { + "description": "A policy that limits the number of game sessions a player can create on the same fleet. This optional policy gives game owners control over how players can consume available game server resources. A resource creation policy makes the following statement: \"An individual player can create a maximum number of new game sessions within a specified time period\".\n\nThe policy is evaluated when a player tries to create a new game session. For example, assume you have a policy of 10 new game sessions and a time period of 60 minutes. On receiving a CreateGameSession request, Amazon GameLift checks that the player (identified by CreatorId) has created fewer than 10 game sessions in the past 60 minutes.", + "additionalProperties": false, + "type": "object", + "properties": { + "PolicyPeriodInMinutes": { + "description": "The time span used in evaluating the resource creation limit policy.", + "type": "integer", + "minimum": 0 + }, + "NewGameSessionsPerCreator": { + "description": "The maximum number of game sessions that an individual can create during the policy period.", + "type": "integer", + "minimum": 0 + } + } + }, + "LocationCapacity": { + "description": "Current resource capacity settings in a specified fleet or location. The location value might refer to a fleet's remote location or its home Region.", + "additionalProperties": false, + "type": "object", + "properties": { + "MinSize": { + "description": "The minimum value allowed for the fleet's instance count for a location. When creating a new fleet, GameLift automatically sets this value to \"0\". After the fleet is active, you can change this value.", + "type": "integer", + "minimum": 0 + }, + "DesiredEC2Instances": { + "description": "The number of EC2 instances you want to maintain in the specified fleet location. This value must fall between the minimum and maximum size limits.", + "type": "integer", + "minimum": 0 + }, + "MaxSize": { + "description": "The maximum value that is allowed for the fleet's instance count for a location. When creating a new fleet, GameLift automatically sets this value to \"1\". Once the fleet is active, you can change this value.", + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "DesiredEC2Instances", + "MinSize", + "MaxSize" + ] + }, + "CertificateConfiguration": { + "description": "Information about the use of a TLS/SSL certificate for a fleet. TLS certificate generation is enabled at the fleet level, with one certificate generated for the fleet. When this feature is enabled, the certificate can be retrieved using the GameLift Server SDK call GetInstanceCertificate. All instances in a fleet share the same certificate.", + "additionalProperties": false, + "type": "object", + "properties": { + "CertificateType": { + "type": "string", + "enum": [ + "DISABLED", + "GENERATED" + ] + } + }, + "required": [ + "CertificateType" + ] + }, + "IpPermission": { + "description": "A range of IP addresses and port settings that allow inbound traffic to connect to server processes on an Amazon GameLift hosting resource. New game sessions that are started on the fleet are assigned an IP address/port number combination, which must fall into the fleet's allowed ranges. For fleets created with a custom game server, the ranges reflect the server's game session assignments. For Realtime Servers fleets, Amazon GameLift automatically opens two port ranges, one for TCP messaging and one for UDP, for use by the Realtime servers.", + "additionalProperties": false, + "type": "object", + "properties": { + "IpRange": { + "pattern": "(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(/([0-9]|[1-2][0-9]|3[0-2]))$)", + "description": "A range of allowed IP addresses. This value must be expressed in CIDR notation. Example: \"000.000.000.000/[subnet mask]\" or optionally the shortened version \"0.0.0.0/[subnet mask]\".", + "type": "string" + }, + "FromPort": { + "description": "A starting value for a range of allowed port numbers.", + "maximum": 60000, + "type": "integer", + "minimum": 1 + }, + "ToPort": { + "description": "An ending value for a range of allowed port numbers. Port numbers are end-inclusive. This value must be higher than FromPort.", + "maximum": 60000, + "type": "integer", + "minimum": 1 + }, + "Protocol": { + "description": "The network communication protocol used by the fleet.", + "type": "string", + "enum": [ + "TCP", + "UDP" + ] + } + }, + "required": [ + "FromPort", + "IpRange", + "Protocol", + "ToPort" + ] + }, + "Location": { + "minLength": 1, + "pattern": "^[A-Za-z0-9\\-]+", + "type": "string", + "maxLength": 64 + } + }, + "properties": { + "ScalingPolicies": { + "maxItems": 50, + "description": "A list of rules that control how a fleet is scaled.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ScalingPolicy" + } + }, + "Description": { + "minLength": 1, + "description": "A human-readable description of a fleet.", + "type": "string", + "maxLength": 1024 + }, + "PeerVpcId": { + "minLength": 1, + "pattern": "^vpc-\\S+", + "description": "A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the VPC Dashboard in the AWS Management Console.", + "type": "string", + "maxLength": 1024 + }, + "ApplyCapacity": { + "description": "Determines whether to apply fleet or location capacities on fleet creation.", + "type": "string", + "enum": [ + "ON_UPDATE", + "ON_CREATE_AND_UPDATE" + ] + }, + "EC2InboundPermissions": { + "maxItems": 50, + "description": "A range of IP addresses and port settings that allow inbound traffic to connect to server processes on an Amazon GameLift server.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/IpPermission" + } + }, + "ComputeType": { + "description": "ComputeType to differentiate EC2 hardware managed by GameLift and Anywhere hardware managed by the customer.", + "type": "string", + "enum": [ + "EC2", + "ANYWHERE" + ] + }, + "Name": { + "minLength": 1, + "description": "A descriptive label that is associated with a fleet. Fleet names do not need to be unique.", + "type": "string", + "maxLength": 1024 + }, + "AnywhereConfiguration": { + "description": "Configuration for Anywhere fleet.", + "$ref": "#/definitions/AnywhereConfiguration" + }, + "InstanceRoleARN": { + "minLength": 1, + "pattern": "^arn:aws(-.*)?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$", + "description": "A unique identifier for an AWS IAM role that manages access to your AWS services. With an instance role ARN set, any application that runs on an instance in this fleet can assume the role, including install scripts, server processes, and daemons (background processes). Create a role or look up a role's ARN from the IAM dashboard in the AWS Management Console.", + "type": "string" + }, + "FleetId": { + "pattern": "^fleet-\\S+", + "description": "Unique fleet ID", + "type": "string" + }, + "CertificateConfiguration": { + "description": "Indicates whether to generate a TLS/SSL certificate for the new fleet. TLS certificates are used for encrypting traffic between game clients and game servers running on GameLift. If this parameter is not set, certificate generation is disabled. This fleet setting cannot be changed once the fleet is created.", + "$ref": "#/definitions/CertificateConfiguration" + }, + "InstanceRoleCredentialsProvider": { + "description": "Credentials provider implementation that loads credentials from the Amazon EC2 Instance Metadata Service.", + "type": "string", + "enum": [ + "SHARED_CREDENTIAL_FILE" + ] + }, + "DesiredEC2Instances": { + "description": "[DEPRECATED] The number of EC2 instances that you want this fleet to host. When creating a new fleet, GameLift automatically sets this value to \"1\" and initiates a single instance. Once the fleet is active, update this value to trigger GameLift to add or remove instances from the fleet.", + "type": "integer", + "minimum": 0 + }, + "ServerLaunchParameters": { + "minLength": 1, + "description": "This parameter is no longer used but is retained for backward compatibility. Instead, specify server launch parameters in the RuntimeConfiguration parameter. A request must specify either a runtime configuration or values for both ServerLaunchParameters and ServerLaunchPath.", + "type": "string", + "maxLength": 1024 + }, + "FleetType": { + "description": "Indicates whether to use On-Demand instances or Spot instances for this fleet. If empty, the default is ON_DEMAND. Both categories of instances use identical hardware and configurations based on the instance type selected for this fleet.", + "type": "string", + "enum": [ + "ON_DEMAND", + "SPOT" + ] + }, + "Locations": { + "minItems": 1, + "maxItems": 100, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/LocationConfiguration" + } + }, + "NewGameSessionProtectionPolicy": { + "description": "A game session protection policy to apply to all game sessions hosted on instances in this fleet. When protected, active game sessions cannot be terminated during a scale-down event. If this parameter is not set, instances in this fleet default to no protection. You can change a fleet's protection policy to affect future game sessions on the fleet. You can also set protection for individual game sessions.", + "type": "string", + "enum": [ + "FullProtection", + "NoProtection" + ] + }, + "ScriptId": { + "pattern": "^script-\\S+|^arn:.*:script/script-\\S+", + "description": "A unique identifier for a Realtime script to be deployed on a new Realtime Servers fleet. The script must have been successfully uploaded to Amazon GameLift. This fleet setting cannot be changed once the fleet is created.\n\nNote: It is not currently possible to use the !Ref command to reference a script created with a CloudFormation template for the fleet property ScriptId. Instead, use Fn::GetAtt Script.Arn or Fn::GetAtt Script.Id to retrieve either of these properties as input for ScriptId. Alternatively, enter a ScriptId string manually.", + "type": "string" + }, + "MaxSize": { + "description": "[DEPRECATED] The maximum value that is allowed for the fleet's instance count. When creating a new fleet, GameLift automatically sets this value to \"1\". Once the fleet is active, you can change this value.", + "type": "integer", + "minimum": 0 + }, + "RuntimeConfiguration": { + "description": "Instructions for launching server processes on each instance in the fleet. Server processes run either a custom game build executable or a Realtime script. The runtime configuration defines the server executables or launch script file, launch parameters, and the number of processes to run concurrently on each instance. When creating a fleet, the runtime configuration must have at least one server process configuration; otherwise the request fails with an invalid request exception.\n\nThis parameter is required unless the parameters ServerLaunchPath and ServerLaunchParameters are defined. Runtime configuration has replaced these parameters, but fleets that use them will continue to work.", + "$ref": "#/definitions/RuntimeConfiguration" + }, + "LogPaths": { + "description": "This parameter is no longer used. When hosting a custom game build, specify where Amazon GameLift should store log files using the Amazon GameLift server API call ProcessReady()", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "ServerLaunchPath": { + "minLength": 1, + "description": "This parameter is no longer used. Instead, specify a server launch path using the RuntimeConfiguration parameter. Requests that specify a server launch path and launch parameters instead of a runtime configuration will continue to work.", + "type": "string", + "maxLength": 1024 + }, + "MinSize": { + "description": "[DEPRECATED] The minimum value allowed for the fleet's instance count. When creating a new fleet, GameLift automatically sets this value to \"0\". After the fleet is active, you can change this value.", + "type": "integer", + "minimum": 0 + }, + "PeerVpcAwsAccountId": { + "minLength": 1, + "pattern": "^[0-9]{12}$", + "description": "A unique identifier for the AWS account with the VPC that you want to peer your Amazon GameLift fleet with. You can find your account ID in the AWS Management Console under account settings.", + "type": "string", + "maxLength": 1024 + }, + "MetricGroups": { + "maxItems": 1, + "description": "The name of an Amazon CloudWatch metric group. A metric group aggregates the metrics for all fleets in the group. Specify a string containing the metric group name. You can use an existing name or use a new name to create a new metric group. Currently, this parameter can have only one string.", + "insertionOrder": false, + "type": "array", + "items": { + "type": "string" + } + }, + "BuildId": { + "pattern": "^build-\\S+|^arn:.*:build/build-\\S+", + "description": "A unique identifier for a build to be deployed on the new fleet. If you are deploying the fleet with a custom game build, you must specify this property. The build must have been successfully uploaded to Amazon GameLift and be in a READY status. This fleet setting cannot be changed once the fleet is created.", + "type": "string" + }, + "ResourceCreationLimitPolicy": { + "description": "A policy that limits the number of game sessions an individual player can create over a span of time for this fleet.", + "$ref": "#/definitions/ResourceCreationLimitPolicy" + }, + "EC2InstanceType": { + "pattern": "^.*..*$", + "description": "The name of an EC2 instance type that is supported in Amazon GameLift. A fleet instance type determines the computing resources of each instance in the fleet, including CPU, memory, storage, and networking capacity. Amazon GameLift supports the following EC2 instance types. See Amazon EC2 Instance Types for detailed descriptions.", + "type": "string" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/gameservergroup.json b/internal/aws/cfn/schemas/aws/gamelift/gameservergroup.json new file mode 100644 index 00000000..140d6974 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/gameservergroup.json @@ -0,0 +1,445 @@ +{ + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "typeName": "AWS::GameLift::GameServerGroup", + "description": "The AWS::GameLift::GameServerGroup resource creates an Amazon GameLift (GameLift) GameServerGroup.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "definitions": { + "AutoScalingPolicy": { + "type": "object", + "description": "Configuration settings to define a scaling policy for the Auto Scaling group that is optimized for game hosting", + "properties": { + "EstimatedInstanceWarmup": { + "$ref": "#/definitions/EstimatedInstanceWarmup" + }, + "TargetTrackingConfiguration": { + "$ref": "#/definitions/TargetTrackingConfiguration" + } + }, + "required": [ + "TargetTrackingConfiguration" + ], + "additionalProperties": false + }, + "EstimatedInstanceWarmup": { + "type": "number", + "description": "Length of time, in seconds, it takes for a new instance to start new game server processes and register with GameLift FleetIQ." + }, + "TargetTrackingConfiguration": { + "type": "object", + "description": "Settings for a target-based scaling policy applied to Auto Scaling group.", + "properties": { + "TargetValue": { + "$ref": "#/definitions/TargetValue" + } + }, + "required": [ + "TargetValue" + ], + "additionalProperties": false + }, + "TargetValue": { + "type": "number", + "description": "Desired value to use with a game server group target-based scaling policy." + }, + "BalancingStrategy": { + "type": "string", + "description": "The fallback balancing method to use for the game server group when Spot Instances in a Region become unavailable or are not viable for game hosting.", + "enum": [ + "SPOT_ONLY", + "SPOT_PREFERRED", + "ON_DEMAND_ONLY" + ] + }, + "DeleteOption": { + "description": "The type of delete to perform.", + "type": "string", + "enum": [ + "SAFE_DELETE", + "FORCE_DELETE", + "RETAIN" + ] + }, + "GameServerGroupName": { + "type": "string", + "description": "An identifier for the new game server group.", + "pattern": "[a-zA-Z0-9-\\.]+", + "minLength": 1, + "maxLength": 128 + }, + "GameServerProtectionPolicy": { + "type": "string", + "description": "A flag that indicates whether instances in the game server group are protected from early termination.", + "enum": [ + "NO_PROTECTION", + "FULL_PROTECTION" + ] + }, + "GameServerGroupArn": { + "description": "A generated unique ID for the game server group.", + "type": "string", + "pattern": "^arn:.*:gameservergroup\\/[a-zA-Z0-9-\\.]*", + "minLength": 1, + "maxLength": 256 + }, + "InstanceDefinitions": { + "type": "array", + "description": "A set of EC2 instance types to use when creating instances in the group.", + "items": { + "$ref": "#/definitions/InstanceDefinition" + }, + "maxItems": 20, + "minItems": 2, + "insertionOrder": false + }, + "InstanceDefinition": { + "type": "object", + "description": "An allowed instance type for your game server group.", + "properties": { + "InstanceType": { + "$ref": "#/definitions/InstanceType" + }, + "WeightedCapacity": { + "$ref": "#/definitions/WeightedCapacity" + } + }, + "required": [ + "InstanceType" + ], + "additionalProperties": false + }, + "InstanceType": { + "type": "string", + "description": "An EC2 instance type designation." + }, + "WeightedCapacity": { + "type": "string", + "description": "Instance weighting that indicates how much this instance type contributes to the total capacity of a game server group.", + "pattern": "^[\\u0031-\\u0039][\\u0030-\\u0039]{0,2}$" + }, + "LaunchTemplate": { + "type": "object", + "description": "The EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group.", + "properties": { + "LaunchTemplateId": { + "$ref": "#/definitions/LaunchTemplateId" + }, + "LaunchTemplateName": { + "$ref": "#/definitions/LaunchTemplateName" + }, + "Version": { + "$ref": "#/definitions/Version" + } + }, + "additionalProperties": false + }, + "LaunchTemplateId": { + "type": "string", + "description": "A unique identifier for an existing EC2 launch template." + }, + "LaunchTemplateName": { + "type": "string", + "description": "A readable identifier for an existing EC2 launch template." + }, + "Version": { + "type": "string", + "description": "The version of the EC2 launch template to use." + }, + "MaxSize": { + "type": "number", + "description": "The maximum number of instances allowed in the EC2 Auto Scaling group.", + "minimum": 1 + }, + "MinSize": { + "type": "number", + "description": "The minimum number of instances allowed in the EC2 Auto Scaling group.", + "minimum": 0 + }, + "RoleArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access your EC2 Auto Scaling groups.", + "pattern": "^arn:.*:role\\/[\\w+=,.@-]+", + "minLength": 1, + "maxLength": 256 + }, + "Tags": { + "type": "array", + "description": "A list of labels to assign to the new game server group resource.", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 200, + "insertionOrder": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key for a developer-defined key:value pair for tagging an AWS resource." + }, + "Value": { + "type": "string", + "description": "The value for a developer-defined key:value pair for tagging an AWS resource." + } + }, + "additionalProperties": false + }, + "VpcSubnets": { + "type": "array", + "description": "A list of virtual private cloud (VPC) subnets to use with instances in the game server group.", + "items": { + "type": "string", + "pattern": "^subnet-[0-9a-z]+$", + "minLength": 15, + "maxLength": 24 + }, + "minItems": 1, + "maxItems": 20, + "insertionOrder": false + }, + "GameServerGroup": { + "type": "object", + "description": "Properties that describe a game server group resource. A game server group manages certain properties of a corresponding EC2 Auto Scaling group.", + "properties": { + "AutoScalingGroupArn": { + "$ref": "#/definitions/AutoScalingGroupArn" + }, + "BalancingStrategy": { + "$ref": "#/definitions/BalancingStrategy" + }, + "CreationTime": { + "$ref": "#/definitions/CreationTime" + }, + "GameServerGroupArn": { + "$ref": "#/definitions/GameServerGroupArn" + }, + "GameServerGroupName": { + "$ref": "#/definitions/GameServerGroupName" + }, + "GameServerProtectionPolicy": { + "$ref": "#/definitions/GameServerProtectionPolicy" + }, + "InstanceDefinitions": { + "$ref": "#/definitions/InstanceDefinitions" + }, + "LastUpdatedTime": { + "$ref": "#/definitions/LastUpdatedTime" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "Status": { + "$ref": "#/definitions/Status" + }, + "StatusReason": { + "$ref": "#/definitions/StatusReason" + }, + "SuspendedActions": { + "$ref": "#/definitions/SuspendedActions" + } + }, + "additionalProperties": false + }, + "AutoScalingGroupArn": { + "type": "string", + "description": "A generated unique ID for the EC2 Auto Scaling group that is associated with this game server group.", + "minLength": 0, + "maxLength": 256, + "pattern": "[ -퟿-�𐀀-􏿿\r\n\t]*" + }, + "CreationTime": { + "type": "string", + "description": "A timestamp that indicates when this data object was created." + }, + "LastUpdatedTime": { + "type": "string", + "description": "A timestamp that indicates when this game server group was last updated." + }, + "Status": { + "type": "string", + "description": "The current status of the game server group.", + "enum": [ + "NEW", + "ACTIVATING", + "ACTIVE", + "DELETE_SCHEDULED", + "DELETING", + "DELETED", + "ERROR" + ] + }, + "StatusReason": { + "type": "string", + "description": "Additional information about the current game server group status.", + "minLength": 1, + "maxLength": 1024 + }, + "SuspendedActions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "REPLACE_INSTANCE_TYPES" + ] + } + } + }, + "properties": { + "AutoScalingGroupArn": { + "description": "A generated unique ID for the EC2 Auto Scaling group that is associated with this game server group.", + "$ref": "#/definitions/AutoScalingGroupArn" + }, + "AutoScalingPolicy": { + "description": "Configuration settings to define a scaling policy for the Auto Scaling group that is optimized for game hosting", + "$ref": "#/definitions/AutoScalingPolicy" + }, + "BalancingStrategy": { + "description": "The fallback balancing method to use for the game server group when Spot Instances in a Region become unavailable or are not viable for game hosting.", + "$ref": "#/definitions/BalancingStrategy" + }, + "DeleteOption": { + "description": "The type of delete to perform.", + "$ref": "#/definitions/DeleteOption" + }, + "GameServerGroupArn": { + "description": "A generated unique ID for the game server group.", + "$ref": "#/definitions/GameServerGroupArn" + }, + "GameServerGroupName": { + "description": "An identifier for the new game server group.", + "$ref": "#/definitions/GameServerGroupName" + }, + "GameServerProtectionPolicy": { + "description": "A flag that indicates whether instances in the game server group are protected from early termination.", + "$ref": "#/definitions/GameServerProtectionPolicy" + }, + "InstanceDefinitions": { + "description": "A set of EC2 instance types to use when creating instances in the group.", + "$ref": "#/definitions/InstanceDefinitions" + }, + "LaunchTemplate": { + "description": "The EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group.", + "$ref": "#/definitions/LaunchTemplate" + }, + "MaxSize": { + "description": "The maximum number of instances allowed in the EC2 Auto Scaling group.", + "$ref": "#/definitions/MaxSize" + }, + "MinSize": { + "description": "The minimum number of instances allowed in the EC2 Auto Scaling group.", + "$ref": "#/definitions/MinSize" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access your EC2 Auto Scaling groups.", + "$ref": "#/definitions/RoleArn" + }, + "Tags": { + "description": "A list of labels to assign to the new game server group resource.", + "$ref": "#/definitions/Tags" + }, + "VpcSubnets": { + "description": "A list of virtual private cloud (VPC) subnets to use with instances in the game server group.", + "$ref": "#/definitions/VpcSubnets" + } + }, + "required": [ + "GameServerGroupName", + "InstanceDefinitions", + "RoleArn" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/GameServerGroupArn", + "/properties/AutoScalingGroupArn" + ], + "writeOnlyProperties": [ + "/properties/DeleteOption", + "/properties/LaunchTemplate", + "/properties/MinSize", + "/properties/MaxSize", + "/properties/AutoScalingPolicy", + "/properties/VpcSubnets", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/GameServerGroupArn" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:CreateGameServerGroup", + "gamelift:TagResource", + "gamelift:DescribeGameServerGroup", + "iam:assumeRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeSubnets", + "ec2:RunInstances", + "ec2:CreateTags", + "ec2:DescribeLaunchTemplateVersions", + "autoscaling:CreateAutoScalingGroup", + "autoscaling:DescribeLifecycleHooks", + "autoscaling:DescribeNotificationConfigurations", + "autoscaling:CreateAutoScalingGroup", + "autoscaling:CreateOrUpdateTags", + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:ExitStandby", + "autoscaling:PutLifecycleHook", + "autoscaling:PutScalingPolicy", + "autoscaling:ResumeProcesses", + "autoscaling:SetInstanceProtection", + "autoscaling:UpdateAutoScalingGroup", + "events:PutRule", + "events:PutTargets" + ] + }, + "read": { + "permissions": [ + "gamelift:DescribeGameServerGroup" + ] + }, + "update": { + "permissions": [ + "gamelift:UpdateGameServerGroup", + "iam:assumeRole", + "iam:PassRole", + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:UpdateAutoScalingGroup", + "autoscaling:SetInstanceProtection" + ] + }, + "delete": { + "permissions": [ + "gamelift:DeleteGameServerGroup", + "gamelift:DescribeGameServerGroup", + "iam:assumeRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeSubnets", + "ec2:DescribeLaunchTemplateVersions", + "autoscaling:CreateAutoScalingGroup", + "autoscaling:DescribeLifecycleHooks", + "autoscaling:DescribeNotificationConfigurations", + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:ExitStandby", + "autoscaling:PutLifecycleHook", + "autoscaling:PutScalingPolicy", + "autoscaling:ResumeProcesses", + "autoscaling:SetInstanceProtection", + "autoscaling:UpdateAutoScalingGroup", + "autoscaling:DeleteAutoScalingGroup", + "events:PutRule", + "events:PutTargets" + ] + }, + "list": { + "permissions": [ + "gamelift:ListGameServerGroups" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/gamesessionqueue.json b/internal/aws/cfn/schemas/aws/gamelift/gamesessionqueue.json new file mode 100644 index 00000000..e297f23a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/gamesessionqueue.json @@ -0,0 +1,247 @@ +{ + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "typeName": "AWS::GameLift::GameSessionQueue", + "description": "The AWS::GameLift::GameSessionQueue resource creates an Amazon GameLift (GameLift) game session queue.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "tagging": { + "taggable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "GameSessionQueueDestination": { + "type": "object", + "description": "A fleet or alias designated in a game session queue.", + "properties": { + "DestinationArn": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z0-9:/-]+" + } + }, + "additionalProperties": false + }, + "PlayerLatencyPolicy": { + "type": "object", + "description": "Sets a latency cap for individual players when placing a game session.", + "properties": { + "MaximumIndividualPlayerLatencyMilliseconds": { + "type": "integer", + "description": "The maximum latency value that is allowed for any player, in milliseconds. All policies must have a value set for this property.", + "minimum": 0 + }, + "PolicyDurationSeconds": { + "type": "integer", + "description": "The length of time, in seconds, that the policy is enforced while placing a new game session.", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "AllowedLocations": { + "type": "array", + "insertionOrder": false, + "description": "A list of locations to allow game session placement in, in the form of AWS Region codes such as us-west-2.", + "minItems": 1, + "maxItems": 100, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-z]+(-([a-z]+|\\d))*" + } + }, + "FilterConfiguration": { + "type": "object", + "properties": { + "AllowedLocations": { + "$ref": "#/definitions/AllowedLocations" + } + }, + "additionalProperties": false + }, + "LocationOrder": { + "description": "The prioritization order to use for fleet locations, when the PriorityOrder property includes LOCATION.", + "type": "array", + "insertionOrder": true, + "minItems": 1, + "maxItems": 100, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[A-Za-z0-9\\-]+" + } + }, + "PriorityOrder": { + "description": "The recommended sequence to use when prioritizing where to place new game sessions.", + "type": "array", + "insertionOrder": true, + "minItems": 1, + "maxItems": 4, + "items": { + "type": "string", + "enum": [ + "LATENCY", + "COST", + "DESTINATION", + "LOCATION" + ] + } + }, + "PriorityConfiguration": { + "type": "object", + "properties": { + "LocationOrder": { + "$ref": "#/definitions/LocationOrder" + }, + "PriorityOrder": { + "$ref": "#/definitions/PriorityOrder" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "A descriptive label that is associated with game session queue. Queue names must be unique within each Region.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9-]+" + }, + "TimeoutInSeconds": { + "description": "The maximum time, in seconds, that a new game session placement request remains in the queue.", + "type": "integer", + "minimum": 0 + }, + "Destinations": { + "description": "A list of fleets and/or fleet aliases that can be used to fulfill game session placement requests in the queue.", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/GameSessionQueueDestination" + } + }, + "PlayerLatencyPolicies": { + "description": "A set of policies that act as a sliding cap on player latency.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PlayerLatencyPolicy" + } + }, + "CustomEventData": { + "description": "Information that is added to all events that are related to this game session queue.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[\\s\\S]*" + }, + "NotificationTarget": { + "description": "An SNS topic ARN that is set up to receive game session placement notifications.", + "type": "string", + "minLength": 1, + "maxLength": 300, + "pattern": "[a-zA-Z0-9:_-]*(\\.fifo)?" + }, + "FilterConfiguration": { + "description": "A list of locations where a queue is allowed to place new game sessions.", + "type": "object", + "$ref": "#/definitions/FilterConfiguration" + }, + "PriorityConfiguration": { + "description": "Custom settings to use when prioritizing destinations and locations for game session placements.", + "type": "object", + "$ref": "#/definitions/PriorityConfiguration" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) that is assigned to a Amazon GameLift game session queue resource and uniquely identifies it.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:.*:gamesessionqueue\\/[a-zA-Z0-9-]+" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:CreateGameSessionQueue", + "gamelift:ListTagsForResource", + "gamelift:TagResource" + ] + }, + "read": { + "permissions": [ + "gamelift:DescribeGameSessionQueues", + "gamelift:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "gamelift:DescribeGameSessionQueues", + "gamelift:DeleteGameSessionQueue" + ] + }, + "update": { + "permissions": [ + "gamelift:UpdateGameSessionQueue", + "gamelift:ListTagsForResource", + "gamelift:TagResource", + "gamelift:UntagResource" + ] + }, + "list": { + "permissions": [ + "gamelift:DescribeGameSessionQueues" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/location.json b/internal/aws/cfn/schemas/aws/gamelift/location.json new file mode 100644 index 00000000..c9225697 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/location.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "typeName": "AWS::GameLift::Location", + "description": "The AWS::GameLift::Location resource creates an Amazon GameLift (GameLift) custom location.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "tagging": { + "taggable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "LocationName": { + "type": "string", + "minLength": 8, + "maxLength": 64, + "pattern": "^custom-[A-Za-z0-9\\-]+" + }, + "LocationArn": { + "type": "string", + "pattern": "^arn:.*:location/custom-\\S+" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "LocationName" + ], + "createOnlyProperties": [ + "/properties/LocationName" + ], + "readOnlyProperties": [ + "/properties/LocationArn" + ], + "primaryIdentifier": [ + "/properties/LocationName" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:CreateLocation", + "gamelift:ListLocations", + "gamelift:ListTagsForResource", + "gamelift:TagResource" + ] + }, + "read": { + "permissions": [ + "gamelift:ListLocations", + "gamelift:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "gamelift:DeleteLocation" + ] + }, + "list": { + "permissions": [ + "gamelift:ListLocations" + ] + }, + "update": { + "permissions": [ + "gamelift:ListLocations", + "gamelift:ListTagsForResource", + "gamelift:TagResource", + "gamelift:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/matchmakingconfiguration.json b/internal/aws/cfn/schemas/aws/gamelift/matchmakingconfiguration.json new file mode 100644 index 00000000..ea1096da --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/matchmakingconfiguration.json @@ -0,0 +1,230 @@ +{ + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "typeName": "AWS::GameLift::MatchmakingConfiguration", + "description": "The AWS::GameLift::MatchmakingConfiguration resource creates an Amazon GameLift (GameLift) matchmaking configuration.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "tagging": { + "taggable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "GameProperty": { + "description": "A key-value pair that contains information about a game session.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The game property identifier.", + "maxLength": 32 + }, + "Value": { + "type": "string", + "description": "The game property value.", + "maxLength": 96 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AcceptanceRequired": { + "description": "A flag that indicates whether a match that was created with this configuration must be accepted by the matched players", + "type": "boolean" + }, + "AcceptanceTimeoutSeconds": { + "description": "The length of time (in seconds) to wait for players to accept a proposed match, if acceptance is required.", + "type": "integer", + "minimum": 1, + "maximum": 600 + }, + "AdditionalPlayerCount": { + "description": "The number of player slots in a match to keep open for future players.", + "type": "integer", + "minimum": 0 + }, + "BackfillMode": { + "description": "The method used to backfill game sessions created with this matchmaking configuration.", + "type": "string", + "enum": [ + "AUTOMATIC", + "MANUAL" + ] + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) that is assigned to a Amazon GameLift matchmaking configuration resource and uniquely identifies it.", + "type": "string", + "pattern": "^arn:.*:matchmakingconfiguration\\/[a-zA-Z0-9-\\.]*" + }, + "CreationTime": { + "description": "A time stamp indicating when this data object was created.", + "type": "string" + }, + "CustomEventData": { + "description": "Information to attach to all events related to the matchmaking configuration.", + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "Description": { + "description": "A descriptive label that is associated with matchmaking configuration.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "FlexMatchMode": { + "description": "Indicates whether this matchmaking configuration is being used with Amazon GameLift hosting or as a standalone matchmaking solution.", + "type": "string", + "enum": [ + "STANDALONE", + "WITH_QUEUE" + ] + }, + "GameProperties": { + "description": "A set of custom properties for a game session, formatted as key:value pairs.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 16, + "items": { + "$ref": "#/definitions/GameProperty" + } + }, + "GameSessionData": { + "description": "A set of custom game session properties, formatted as a single string value.", + "type": "string", + "minLength": 1, + "maxLength": 4096 + }, + "GameSessionQueueArns": { + "description": "The Amazon Resource Name (ARN) that is assigned to a Amazon GameLift game session queue resource and uniquely identifies it.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "[a-zA-Z0-9:/-]+", + "minLength": 1, + "maxLength": 256 + } + }, + "Name": { + "description": "A unique identifier for the matchmaking configuration.", + "type": "string", + "pattern": "[a-zA-Z0-9-\\.]*", + "maxLength": 128 + }, + "NotificationTarget": { + "description": "An SNS topic ARN that is set up to receive matchmaking notifications.", + "type": "string", + "pattern": "[a-zA-Z0-9:_/-]*(.fifo)?", + "minLength": 0, + "maxLength": 300 + }, + "RequestTimeoutSeconds": { + "description": "The maximum duration, in seconds, that a matchmaking ticket can remain in process before timing out.", + "type": "integer", + "minimum": 1, + "maximum": 43200 + }, + "RuleSetArn": { + "description": "The Amazon Resource Name (ARN) associated with the GameLift matchmaking rule set resource that this configuration uses.", + "type": "string", + "pattern": "^arn:.*:matchmakingruleset\\/[a-zA-Z0-9-\\.]*" + }, + "RuleSetName": { + "description": "A unique identifier for the matchmaking rule set to use with this configuration.", + "type": "string", + "pattern": "[a-zA-Z0-9-\\.]*", + "maxLength": 128 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "AcceptanceRequired", + "Name", + "RequestTimeoutSeconds", + "RuleSetName" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:CreateMatchmakingConfiguration", + "gamelift:ListTagsForResource", + "gamelift:TagResource", + "gamelift:DescribeMatchmakingConfigurations" + ] + }, + "read": { + "permissions": [ + "gamelift:DescribeMatchmakingConfigurations", + "gamelift:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "gamelift:DescribeMatchmakingConfigurations", + "gamelift:DeleteMatchmakingConfiguration" + ] + }, + "list": { + "permissions": [ + "gamelift:DescribeMatchmakingConfigurations" + ] + }, + "update": { + "permissions": [ + "gamelift:DescribeMatchmakingConfigurations", + "gamelift:UpdateMatchmakingConfiguration", + "gamelift:ListTagsForResource", + "gamelift:TagResource", + "gamelift:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/matchmakingruleset.json b/internal/aws/cfn/schemas/aws/gamelift/matchmakingruleset.json new file mode 100644 index 00000000..0e87df79 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/matchmakingruleset.json @@ -0,0 +1,122 @@ +{ + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "typeName": "AWS::GameLift::MatchmakingRuleSet", + "description": "The AWS::GameLift::MatchmakingRuleSet resource creates an Amazon GameLift (GameLift) matchmaking rule set.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "tagging": { + "taggable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "A unique identifier for the matchmaking rule set.", + "type": "string", + "maxLength": 128, + "pattern": "[a-zA-Z0-9-\\.]*" + }, + "RuleSetBody": { + "description": "A collection of matchmaking rules, formatted as a JSON string.", + "type": "string", + "minLength": 1, + "maxLength": 65535 + }, + "CreationTime": { + "description": "A time stamp indicating when this data object was created. Format is a number expressed in Unix time as milliseconds.", + "type": "string" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) that is assigned to a Amazon GameLift matchmaking rule set resource and uniquely identifies it.", + "type": "string", + "pattern": "^arn:.*:matchmakingruleset\\/[a-zA-Z0-9-\\.]*" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "RuleSetBody" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/RuleSetBody" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:CreateMatchmakingRuleSet", + "gamelift:DescribeMatchmakingRuleSets", + "gamelift:ValidateMatchmakingRuleSet", + "gamelift:ListTagsForResource", + "gamelift:TagResource" + ] + }, + "read": { + "permissions": [ + "gamelift:DescribeMatchmakingRuleSets", + "gamelift:ValidateMatchmakingRuleSet", + "gamelift:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "gamelift:DeleteMatchmakingRuleSet" + ] + }, + "update": { + "permissions": [ + "gamelift:DescribeMatchmakingRuleSets", + "gamelift:ListTagsForResource", + "gamelift:TagResource", + "gamelift:UntagResource" + ] + }, + "list": { + "permissions": [ + "gamelift:DescribeMatchmakingRuleSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/gamelift/script.json b/internal/aws/cfn/schemas/aws/gamelift/script.json new file mode 100644 index 00000000..5505e85e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/gamelift/script.json @@ -0,0 +1,168 @@ +{ + "$schema": "https://schema.cloudformation.us-east-1.amazonaws.com/provider.definition.schema.v1.json", + "typeName": "AWS::GameLift::Script", + "description": "The AWS::GameLift::Script resource creates a new script record for your Realtime Servers script. Realtime scripts are JavaScript that provide configuration settings and optional custom game logic for your game. The script is deployed when you create a Realtime Servers fleet to host your game sessions. Script logic is executed during an active game session.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-gamelift.git", + "tagging": { + "taggable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "S3Location": { + "$comment": "Contains object details present in the S3 Bucket", + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "description": "An Amazon S3 bucket identifier. This is the name of the S3 bucket.", + "type": "string", + "minLength": 1 + }, + "Key": { + "description": "The name of the zip file that contains the script files.", + "type": "string", + "minLength": 1 + }, + "ObjectVersion": { + "description": "The version of the file, if object versioning is turned on for the bucket. Amazon GameLift uses this information when retrieving files from your S3 bucket. To retrieve a specific version of the file, provide an object version. To retrieve the latest version of the file, do not set this parameter.", + "type": "string", + "minLength": 1 + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) for an IAM role that allows Amazon GameLift to access the S3 bucket.", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "Bucket", + "Key", + "RoleArn" + ] + } + }, + "properties": { + "Name": { + "type": "string", + "description": "A descriptive label that is associated with a script. Script names do not need to be unique.", + "minLength": 1, + "maxLength": 1024 + }, + "StorageLocation": { + "type": "object", + "description": "The location of the Amazon S3 bucket where a zipped file containing your Realtime scripts is stored. The storage location must specify the Amazon S3 bucket name, the zip file name (the \"key\"), and a role ARN that allows Amazon GameLift to access the Amazon S3 storage location. The S3 bucket must be in the same Region where you want to create a new script. By default, Amazon GameLift uploads the latest version of the zip file; if you have S3 object versioning turned on, you can use the ObjectVersion parameter to specify an earlier version.", + "$ref": "#/definitions/S3Location" + }, + "Version": { + "description": "The version that is associated with a script. Version strings do not need to be unique.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreationTime": { + "description": "A time stamp indicating when this data object was created. Format is a number expressed in Unix time as milliseconds (for example \"1469498468.057\").", + "type": "string" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) that is assigned to a Amazon GameLift script resource and uniquely identifies it. ARNs are unique across all Regions. In a GameLift script ARN, the resource ID matches the Id value.", + "pattern": "^arn:.*:script\\/script-\\S+", + "type": "string" + }, + "Id": { + "description": "A unique identifier for the Realtime script", + "pattern": "^script-\\S+", + "type": "string" + }, + "SizeOnDisk": { + "description": "The file size of the uploaded Realtime script, expressed in bytes. When files are uploaded from an S3 location, this value remains at \"0\".", + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false, + "required": [ + "StorageLocation" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/CreationTime", + "/properties/Arn", + "/properties/SizeOnDisk" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "gamelift:CreateScript", + "gamelift:ListTagsForResource", + "gamelift:TagResource", + "gamelift:DescribeScript", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "gamelift:DescribeScript", + "gamelift:ListScripts", + "gamelift:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "gamelift:DeleteScript" + ] + }, + "list": { + "permissions": [ + "gamelift:ListScripts", + "gamelift:DescribeScript" + ] + }, + "update": { + "permissions": [ + "gamelift:DescribeScript", + "gamelift:UpdateScript", + "gamelift:ListTagsForResource", + "gamelift:TagResource", + "gamelift:UntagResource", + "iam:PassRole" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/globalaccelerator/accelerator.json b/internal/aws/cfn/schemas/aws/globalaccelerator/accelerator.json new file mode 100644 index 00000000..9d378b20 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/globalaccelerator/accelerator.json @@ -0,0 +1,151 @@ +{ + "typeName": "AWS::GlobalAccelerator::Accelerator", + "description": "Resource Type definition for AWS::GlobalAccelerator::Accelerator", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-globalaccelerator", + "definitions": { + "Tag": { + "description": "Tag is a key-value pair associated with accelerator.", + "type": "object", + "properties": { + "Key": { + "description": "Key of the tag. Value can be 1 to 127 characters.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "description": "Value for the tag. Value can be 1 to 255 characters.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + }, + "IpAddress": { + "pattern": "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$", + "description": "An IPV4 address", + "type": "string" + } + }, + "properties": { + "Name": { + "description": "Name of accelerator.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]{0,64}$", + "minLength": 1, + "maxLength": 64 + }, + "IpAddressType": { + "description": "IP Address type.", + "type": "string", + "default": "IPV4", + "enum": [ + "IPV4", + "DUAL_STACK" + ] + }, + "IpAddresses": { + "description": "The IP addresses from BYOIP Prefix pool.", + "default": null, + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/IpAddress" + } + }, + "Enabled": { + "description": "Indicates whether an accelerator is enabled. The value is true or false.", + "default": true, + "type": "boolean" + }, + "DnsName": { + "description": "The Domain Name System (DNS) name that Global Accelerator creates that points to your accelerator's static IPv4 addresses.", + "type": "string" + }, + "Ipv4Addresses": { + "description": "The IPv4 addresses assigned to the accelerator.", + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "Ipv6Addresses": { + "description": "The IPv6 addresses assigned if the accelerator is dualstack", + "default": null, + "insertionOrder": true, + "type": "array", + "items": { + "type": "string" + } + }, + "DualStackDnsName": { + "description": "The Domain Name System (DNS) name that Global Accelerator creates that points to your accelerator's static IPv4 and IPv6 addresses.", + "type": "string" + }, + "AcceleratorArn": { + "description": "The Amazon Resource Name (ARN) of the accelerator.", + "type": "string" + }, + "Tags": { + "insertionOrder": true, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "Name" + ], + "handlers": { + "create": { + "permissions": [ + "globalaccelerator:CreateAccelerator", + "globalaccelerator:DescribeAccelerator", + "globalaccelerator:TagResource" + ] + }, + "read": { + "permissions": [ + "globalaccelerator:DescribeAccelerator" + ] + }, + "update": { + "permissions": [ + "globalaccelerator:UpdateAccelerator", + "globalaccelerator:TagResource", + "globalaccelerator:UntagResource", + "globalaccelerator:DescribeAccelerator" + ] + }, + "delete": { + "permissions": [ + "globalaccelerator:UpdateAccelerator", + "globalaccelerator:DeleteAccelerator", + "globalaccelerator:DescribeAccelerator" + ] + }, + "list": { + "permissions": [ + "globalaccelerator:ListAccelerators" + ] + } + }, + "readOnlyProperties": [ + "/properties/AcceleratorArn", + "/properties/DnsName", + "/properties/Ipv4Addresses", + "/properties/Ipv6Addresses", + "/properties/DualStackDnsName" + ], + "primaryIdentifier": [ + "/properties/AcceleratorArn" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/globalaccelerator/endpointgroup.json b/internal/aws/cfn/schemas/aws/globalaccelerator/endpointgroup.json new file mode 100644 index 00000000..7cd94270 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/globalaccelerator/endpointgroup.json @@ -0,0 +1,181 @@ +{ + "typeName": "AWS::GlobalAccelerator::EndpointGroup", + "description": "Resource Type definition for AWS::GlobalAccelerator::EndpointGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-globalaccelerator", + "definitions": { + "EndpointConfiguration": { + "description": "The configuration for a given endpoint", + "type": "object", + "properties": { + "EndpointId": { + "description": "Id of the endpoint. For Network/Application Load Balancer this value is the ARN. For EIP, this value is the allocation ID. For EC2 instances, this is the EC2 instance ID", + "type": "string" + }, + "AttachmentArn": { + "description": "Attachment ARN that provides access control to the cross account endpoint. Not required for resources hosted in the same account as the endpoint group.", + "type": "string" + }, + "Weight": { + "description": "The weight for the endpoint.", + "type": "integer", + "minimum": 0, + "maximum": 255, + "default": 100 + }, + "ClientIPPreservationEnabled": { + "description": "true if client ip should be preserved", + "type": "boolean", + "default": true + } + }, + "required": [ + "EndpointId" + ], + "additionalProperties": false + }, + "Port": { + "description": "A network port number", + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "PortOverride": { + "description": "listener to endpoint port mapping.", + "type": "object", + "properties": { + "ListenerPort": { + "$ref": "#/definitions/Port" + }, + "EndpointPort": { + "$ref": "#/definitions/Port" + } + }, + "required": [ + "ListenerPort", + "EndpointPort" + ], + "additionalProperties": false + } + }, + "properties": { + "ListenerArn": { + "description": "The Amazon Resource Name (ARN) of the listener", + "type": "string" + }, + "EndpointGroupRegion": { + "description": "The name of the AWS Region where the endpoint group is located", + "type": "string" + }, + "EndpointConfigurations": { + "description": "The list of endpoint objects.", + "type": "array", + "items": { + "$ref": "#/definitions/EndpointConfiguration" + } + }, + "TrafficDialPercentage": { + "description": "The percentage of traffic to sent to an AWS Region", + "type": "number", + "minimum": 0, + "maximum": 100, + "default": 100 + }, + "HealthCheckPort": { + "description": "The port that AWS Global Accelerator uses to check the health of endpoints in this endpoint group.", + "type": "integer", + "minimum": -1, + "maximum": 65535, + "default": -1 + }, + "HealthCheckProtocol": { + "description": "The protocol that AWS Global Accelerator uses to check the health of endpoints in this endpoint group.", + "type": "string", + "default": "TCP", + "enum": [ + "TCP", + "HTTP", + "HTTPS" + ] + }, + "HealthCheckPath": { + "description": "", + "type": "string", + "default": "/" + }, + "HealthCheckIntervalSeconds": { + "description": "The time in seconds between each health check for an endpoint. Must be a value of 10 or 30", + "type": "integer", + "default": 30 + }, + "ThresholdCount": { + "description": "The number of consecutive health checks required to set the state of the endpoint to unhealthy.", + "type": "integer", + "default": 3 + }, + "EndpointGroupArn": { + "description": "The Amazon Resource Name (ARN) of the endpoint group", + "type": "string" + }, + "PortOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/PortOverride" + } + } + }, + "required": [ + "ListenerArn", + "EndpointGroupRegion" + ], + "createOnlyProperties": [ + "/properties/EndpointGroupRegion", + "/properties/ListenerArn" + ], + "writeOnlyProperties": [ + "/properties/EndpointConfigurations/*/AttachmentArn" + ], + "readOnlyProperties": [ + "/properties/EndpointGroupArn" + ], + "primaryIdentifier": [ + "/properties/EndpointGroupArn" + ], + "handlers": { + "create": { + "permissions": [ + "globalaccelerator:CreateEndpointGroup", + "globalaccelerator:DescribeEndpointGroup", + "globalaccelerator:DescribeAccelerator", + "globalaccelerator:DescribeListener", + "globalaccelerator:ListAccelerators", + "globalaccelerator:ListListeners" + ] + }, + "read": { + "permissions": [ + "globalaccelerator:DescribeEndpointGroup" + ] + }, + "update": { + "permissions": [ + "globalaccelerator:UpdateEndpointGroup", + "globalaccelerator:DescribeEndpointGroup", + "globalaccelerator:DescribeListener", + "globalaccelerator:DescribeAccelerator" + ] + }, + "delete": { + "permissions": [ + "globalaccelerator:DeleteEndpointGroup", + "globalaccelerator:DescribeEndpointGroup", + "globalaccelerator:DescribeAccelerator" + ] + }, + "list": { + "permissions": [ + "globalaccelerator:ListEndpointGroups" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/globalaccelerator/listener.json b/internal/aws/cfn/schemas/aws/globalaccelerator/listener.json new file mode 100644 index 00000000..55f03657 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/globalaccelerator/listener.json @@ -0,0 +1,112 @@ +{ + "typeName": "AWS::GlobalAccelerator::Listener", + "description": "Resource Type definition for AWS::GlobalAccelerator::Listener", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-globalaccelerator", + "definitions": { + "Port": { + "description": "A network port number", + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "PortRange": { + "description": "A port range to support for connections from clients to your accelerator.", + "type": "object", + "properties": { + "FromPort": { + "$ref": "#/definitions/Port" + }, + "ToPort": { + "$ref": "#/definitions/Port" + } + }, + "required": [ + "FromPort", + "ToPort" + ], + "additionalProperties": false + } + }, + "properties": { + "ListenerArn": { + "description": "The Amazon Resource Name (ARN) of the listener.", + "type": "string" + }, + "AcceleratorArn": { + "description": "The Amazon Resource Name (ARN) of the accelerator.", + "type": "string" + }, + "PortRanges": { + "type": "array", + "items": { + "$ref": "#/definitions/PortRange" + } + }, + "Protocol": { + "description": "The protocol for the listener.", + "type": "string", + "default": "TCP", + "enum": [ + "TCP", + "UDP" + ] + }, + "ClientAffinity": { + "description": "Client affinity lets you direct all requests from a user to the same endpoint.", + "type": "string", + "default": "NONE", + "enum": [ + "NONE", + "SOURCE_IP" + ] + } + }, + "required": [ + "AcceleratorArn", + "PortRanges", + "Protocol" + ], + "createOnlyProperties": [ + "/properties/AcceleratorArn" + ], + "readOnlyProperties": [ + "/properties/ListenerArn" + ], + "primaryIdentifier": [ + "/properties/ListenerArn" + ], + "handlers": { + "create": { + "permissions": [ + "globalaccelerator:CreateListener", + "globalaccelerator:DescribeListener", + "globalaccelerator:DescribeAccelerator" + ] + }, + "read": { + "permissions": [ + "globalaccelerator:DescribeListener" + ] + }, + "update": { + "permissions": [ + "globalaccelerator:UpdateListener", + "globalaccelerator:DescribeListener", + "globalaccelerator:DescribeAccelerator" + ] + }, + "delete": { + "permissions": [ + "globalaccelerator:DescribeListener", + "globalaccelerator:DeleteListener", + "globalaccelerator:DescribeAccelerator" + ] + }, + "list": { + "permissions": [ + "globalaccelerator:ListListeners" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/glue/classifier.json b/internal/aws/cfn/schemas/aws/glue/classifier.json new file mode 100644 index 00000000..789a8cf2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/classifier.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::Glue::Classifier", + "description": "Resource Type definition for AWS::Glue::Classifier", + "additionalProperties": false, + "properties": { + "XMLClassifier": { + "$ref": "#/definitions/XMLClassifier" + }, + "CsvClassifier": { + "$ref": "#/definitions/CsvClassifier" + }, + "Id": { + "type": "string" + }, + "GrokClassifier": { + "$ref": "#/definitions/GrokClassifier" + }, + "JsonClassifier": { + "$ref": "#/definitions/JsonClassifier" + } + }, + "definitions": { + "XMLClassifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "RowTag": { + "type": "string" + }, + "Classification": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "RowTag", + "Classification" + ] + }, + "JsonClassifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "JsonPath": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "JsonPath" + ] + }, + "CsvClassifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContainsCustomDatatype": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "QuoteSymbol": { + "type": "string" + }, + "ContainsHeader": { + "type": "string" + }, + "Delimiter": { + "type": "string" + }, + "Header": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AllowSingleColumn": { + "type": "boolean" + }, + "CustomDatatypeConfigured": { + "type": "boolean" + }, + "DisableValueTrimming": { + "type": "boolean" + }, + "Name": { + "type": "string" + } + } + }, + "GrokClassifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomPatterns": { + "type": "string" + }, + "GrokPattern": { + "type": "string" + }, + "Classification": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "GrokPattern", + "Classification" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/connection.json b/internal/aws/cfn/schemas/aws/glue/connection.json new file mode 100644 index 00000000..8c128c26 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/connection.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::Glue::Connection", + "description": "Resource Type definition for AWS::Glue::Connection", + "additionalProperties": false, + "properties": { + "ConnectionInput": { + "$ref": "#/definitions/ConnectionInput" + }, + "CatalogId": { + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "ConnectionInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "ConnectionType": { + "type": "string" + }, + "MatchCriteria": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "PhysicalConnectionRequirements": { + "$ref": "#/definitions/PhysicalConnectionRequirements" + }, + "ConnectionProperties": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ConnectionType" + ] + }, + "PhysicalConnectionRequirements": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailabilityZone": { + "type": "string" + }, + "SecurityGroupIdList": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SubnetId": { + "type": "string" + } + } + } + }, + "required": [ + "ConnectionInput", + "CatalogId" + ], + "createOnlyProperties": [ + "/properties/CatalogId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/crawler.json b/internal/aws/cfn/schemas/aws/glue/crawler.json new file mode 100644 index 00000000..ea0eb327 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/crawler.json @@ -0,0 +1,294 @@ +{ + "typeName": "AWS::Glue::Crawler", + "description": "Resource Type definition for AWS::Glue::Crawler", + "additionalProperties": false, + "properties": { + "Classifiers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Description": { + "type": "string" + }, + "SchemaChangePolicy": { + "$ref": "#/definitions/SchemaChangePolicy" + }, + "Configuration": { + "type": "string" + }, + "RecrawlPolicy": { + "$ref": "#/definitions/RecrawlPolicy" + }, + "DatabaseName": { + "type": "string" + }, + "Targets": { + "$ref": "#/definitions/Targets" + }, + "CrawlerSecurityConfiguration": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Role": { + "type": "string" + }, + "Schedule": { + "$ref": "#/definitions/Schedule" + }, + "Id": { + "type": "string" + }, + "TablePrefix": { + "type": "string" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "S3Target": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "Path": { + "type": "string" + }, + "SampleSize": { + "type": "integer" + }, + "Exclusions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DlqEventQueueArn": { + "type": "string" + }, + "EventQueueArn": { + "type": "string" + } + } + }, + "SchemaChangePolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "UpdateBehavior": { + "type": "string" + }, + "DeleteBehavior": { + "type": "string" + } + } + }, + "IcebergTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "Paths": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Exclusions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MaximumTraversalDepth": { + "type": "integer" + } + } + }, + "Schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScheduleExpression": { + "type": "string" + } + } + }, + "RecrawlPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecrawlBehavior": { + "type": "string" + } + } + }, + "MongoDBTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "Path": { + "type": "string" + } + } + }, + "DeltaTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "CreateNativeDeltaTable": { + "type": "boolean" + }, + "WriteManifest": { + "type": "boolean" + }, + "DeltaTables": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "JdbcTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "Path": { + "type": "string" + }, + "Exclusions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "Targets": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Targets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/S3Target" + } + }, + "CatalogTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CatalogTarget" + } + }, + "DeltaTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/DeltaTarget" + } + }, + "MongoDBTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MongoDBTarget" + } + }, + "JdbcTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/JdbcTarget" + } + }, + "DynamoDBTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/DynamoDBTarget" + } + }, + "IcebergTargets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/IcebergTarget" + } + } + } + }, + "DynamoDBTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string" + } + } + }, + "CatalogTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "DatabaseName": { + "type": "string" + }, + "DlqEventQueueArn": { + "type": "string" + }, + "Tables": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "EventQueueArn": { + "type": "string" + } + } + } + }, + "required": [ + "Role", + "Targets" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/database.json b/internal/aws/cfn/schemas/aws/glue/database.json new file mode 100644 index 00000000..ba8fad47 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/database.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::Glue::Database", + "description": "Resource Type definition for AWS::Glue::Database", + "additionalProperties": false, + "properties": { + "CatalogId": { + "type": "string" + }, + "DatabaseInput": { + "$ref": "#/definitions/DatabaseInput" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "DatabaseIdentifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "Region": { + "type": "string" + }, + "CatalogId": { + "type": "string" + } + } + }, + "PrincipalPrivileges": { + "type": "object", + "additionalProperties": false, + "properties": { + "Permissions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Principal": { + "$ref": "#/definitions/DataLakePrincipal" + } + } + }, + "DataLakePrincipal": { + "type": "object", + "additionalProperties": false, + "properties": { + "DataLakePrincipalIdentifier": { + "type": "string" + } + } + }, + "FederatedDatabase": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "Identifier": { + "type": "string" + } + } + }, + "DatabaseInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "LocationUri": { + "type": "string" + }, + "CreateTableDefaultPermissions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/PrincipalPrivileges" + } + }, + "Description": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "TargetDatabase": { + "$ref": "#/definitions/DatabaseIdentifier" + }, + "FederatedDatabase": { + "$ref": "#/definitions/FederatedDatabase" + }, + "Name": { + "type": "string" + } + } + } + }, + "required": [ + "DatabaseInput", + "CatalogId" + ], + "createOnlyProperties": [ + "/properties/CatalogId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/datacatalogencryptionsettings.json b/internal/aws/cfn/schemas/aws/glue/datacatalogencryptionsettings.json new file mode 100644 index 00000000..7ee82d08 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/datacatalogencryptionsettings.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::Glue::DataCatalogEncryptionSettings", + "description": "Resource Type definition for AWS::Glue::DataCatalogEncryptionSettings", + "additionalProperties": false, + "properties": { + "CatalogId": { + "type": "string" + }, + "DataCatalogEncryptionSettings": { + "$ref": "#/definitions/DataCatalogEncryptionSettings" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "ConnectionPasswordEncryption": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "type": "string" + }, + "ReturnConnectionPasswordEncrypted": { + "type": "boolean" + } + } + }, + "EncryptionAtRest": { + "type": "object", + "additionalProperties": false, + "properties": { + "CatalogEncryptionMode": { + "type": "string" + }, + "CatalogEncryptionServiceRole": { + "type": "string" + }, + "SseAwsKmsKeyId": { + "type": "string" + } + } + }, + "DataCatalogEncryptionSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionPasswordEncryption": { + "$ref": "#/definitions/ConnectionPasswordEncryption" + }, + "EncryptionAtRest": { + "$ref": "#/definitions/EncryptionAtRest" + } + } + } + }, + "required": [ + "DataCatalogEncryptionSettings", + "CatalogId" + ], + "createOnlyProperties": [ + "/properties/CatalogId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/dataqualityruleset.json b/internal/aws/cfn/schemas/aws/glue/dataqualityruleset.json new file mode 100644 index 00000000..442c5fea --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/dataqualityruleset.json @@ -0,0 +1,48 @@ +{ + "typeName": "AWS::Glue::DataQualityRuleset", + "description": "Resource Type definition for AWS::Glue::DataQualityRuleset", + "additionalProperties": false, + "properties": { + "Ruleset": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "TargetTable": { + "$ref": "#/definitions/DataQualityTargetTable" + }, + "Id": { + "type": "string" + }, + "ClientToken": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "DataQualityTargetTable": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "TableName": { + "type": "string" + } + } + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/devendpoint.json b/internal/aws/cfn/schemas/aws/glue/devendpoint.json new file mode 100644 index 00000000..6da8f10e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/devendpoint.json @@ -0,0 +1,75 @@ +{ + "typeName": "AWS::Glue::DevEndpoint", + "description": "Resource Type definition for AWS::Glue::DevEndpoint", + "additionalProperties": false, + "properties": { + "ExtraJarsS3Path": { + "type": "string" + }, + "PublicKey": { + "type": "string" + }, + "NumberOfNodes": { + "type": "integer" + }, + "Arguments": { + "type": "object" + }, + "SubnetId": { + "type": "string" + }, + "PublicKeys": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "RoleArn": { + "type": "string" + }, + "WorkerType": { + "type": "string" + }, + "EndpointName": { + "type": "string" + }, + "GlueVersion": { + "type": "string" + }, + "ExtraPythonLibsS3Path": { + "type": "string" + }, + "SecurityConfiguration": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "NumberOfWorkers": { + "type": "integer" + }, + "Tags": { + "type": "object" + } + }, + "required": [ + "RoleArn" + ], + "createOnlyProperties": [ + "/properties/EndpointName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/job.json b/internal/aws/cfn/schemas/aws/glue/job.json new file mode 100644 index 00000000..18282be0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/job.json @@ -0,0 +1,134 @@ +{ + "typeName": "AWS::Glue::Job", + "description": "Resource Type definition for AWS::Glue::Job", + "additionalProperties": false, + "properties": { + "Connections": { + "$ref": "#/definitions/ConnectionsList" + }, + "MaxRetries": { + "type": "number" + }, + "Description": { + "type": "string" + }, + "Timeout": { + "type": "integer" + }, + "AllocatedCapacity": { + "type": "number" + }, + "Name": { + "type": "string" + }, + "Role": { + "type": "string" + }, + "DefaultArguments": { + "type": "object" + }, + "NotificationProperty": { + "$ref": "#/definitions/NotificationProperty" + }, + "WorkerType": { + "type": "string" + }, + "ExecutionClass": { + "type": "string" + }, + "LogUri": { + "type": "string" + }, + "Command": { + "$ref": "#/definitions/JobCommand" + }, + "GlueVersion": { + "type": "string" + }, + "ExecutionProperty": { + "$ref": "#/definitions/ExecutionProperty" + }, + "SecurityConfiguration": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "NumberOfWorkers": { + "type": "integer" + }, + "Tags": { + "type": "object" + }, + "MaxCapacity": { + "type": "number" + }, + "NonOverridableArguments": { + "type": "object" + } + }, + "definitions": { + "NotificationProperty": { + "type": "object", + "additionalProperties": false, + "properties": { + "NotifyDelayAfter": { + "type": "integer" + } + } + }, + "JobCommand": { + "type": "object", + "additionalProperties": false, + "properties": { + "Runtime": { + "type": "string" + }, + "ScriptLocation": { + "type": "string" + }, + "PythonVersion": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "ExecutionProperty": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxConcurrentRuns": { + "type": "number" + } + } + }, + "ConnectionsList": { + "type": "object", + "additionalProperties": false, + "properties": { + "Connections": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "Role", + "Command" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/mltransform.json b/internal/aws/cfn/schemas/aws/glue/mltransform.json new file mode 100644 index 00000000..da441ef7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/mltransform.json @@ -0,0 +1,163 @@ +{ + "typeName": "AWS::Glue::MLTransform", + "description": "Resource Type definition for AWS::Glue::MLTransform", + "additionalProperties": false, + "properties": { + "MaxRetries": { + "type": "integer" + }, + "Description": { + "type": "string" + }, + "TransformEncryption": { + "$ref": "#/definitions/TransformEncryption" + }, + "Timeout": { + "type": "integer" + }, + "Name": { + "type": "string" + }, + "Role": { + "type": "string" + }, + "WorkerType": { + "type": "string" + }, + "GlueVersion": { + "type": "string" + }, + "TransformParameters": { + "$ref": "#/definitions/TransformParameters" + }, + "Id": { + "type": "string" + }, + "InputRecordTables": { + "$ref": "#/definitions/InputRecordTables" + }, + "NumberOfWorkers": { + "type": "integer" + }, + "Tags": { + "type": "object" + }, + "MaxCapacity": { + "type": "number" + } + }, + "definitions": { + "GlueTables": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionName": { + "type": "string" + }, + "DatabaseName": { + "type": "string" + }, + "TableName": { + "type": "string" + }, + "CatalogId": { + "type": "string" + } + }, + "required": [ + "TableName", + "DatabaseName" + ] + }, + "TransformEncryption": { + "type": "object", + "additionalProperties": false, + "properties": { + "TaskRunSecurityConfigurationName": { + "type": "string" + }, + "MLUserDataEncryption": { + "$ref": "#/definitions/MLUserDataEncryption" + } + } + }, + "MLUserDataEncryption": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "type": "string" + }, + "MLUserDataEncryptionMode": { + "type": "string" + } + }, + "required": [ + "MLUserDataEncryptionMode" + ] + }, + "TransformParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "TransformType": { + "type": "string" + }, + "FindMatchesParameters": { + "$ref": "#/definitions/FindMatchesParameters" + } + }, + "required": [ + "TransformType" + ] + }, + "InputRecordTables": { + "type": "object", + "additionalProperties": false, + "properties": { + "GlueTables": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/GlueTables" + } + } + } + }, + "FindMatchesParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "PrecisionRecallTradeoff": { + "type": "number" + }, + "EnforceProvidedLabels": { + "type": "boolean" + }, + "PrimaryKeyColumnName": { + "type": "string" + }, + "AccuracyCostTradeoff": { + "type": "number" + } + }, + "required": [ + "PrimaryKeyColumnName" + ] + } + }, + "required": [ + "Role", + "TransformParameters", + "InputRecordTables" + ], + "createOnlyProperties": [ + "/properties/InputRecordTables" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/partition.json b/internal/aws/cfn/schemas/aws/glue/partition.json new file mode 100644 index 00000000..d8e37265 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/partition.json @@ -0,0 +1,221 @@ +{ + "typeName": "AWS::Glue::Partition", + "description": "Resource Type definition for AWS::Glue::Partition", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "TableName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "CatalogId": { + "type": "string" + }, + "PartitionInput": { + "$ref": "#/definitions/PartitionInput" + } + }, + "definitions": { + "SchemaReference": { + "type": "object", + "additionalProperties": false, + "properties": { + "SchemaId": { + "$ref": "#/definitions/SchemaId" + }, + "SchemaVersionId": { + "type": "string" + }, + "SchemaVersionNumber": { + "type": "integer" + } + } + }, + "Order": { + "type": "object", + "additionalProperties": false, + "properties": { + "Column": { + "type": "string" + }, + "SortOrder": { + "type": "integer" + } + }, + "required": [ + "Column" + ] + }, + "SkewedInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "SkewedColumnValues": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SkewedColumnValueLocationMaps": { + "type": "object" + }, + "SkewedColumnNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "Column": { + "type": "object", + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "StorageDescriptor": { + "type": "object", + "additionalProperties": false, + "properties": { + "StoredAsSubDirectories": { + "type": "boolean" + }, + "Parameters": { + "type": "object" + }, + "BucketColumns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "NumberOfBuckets": { + "type": "integer" + }, + "OutputFormat": { + "type": "string" + }, + "Columns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Column" + } + }, + "SerdeInfo": { + "$ref": "#/definitions/SerdeInfo" + }, + "SortColumns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Order" + } + }, + "Compressed": { + "type": "boolean" + }, + "SchemaReference": { + "$ref": "#/definitions/SchemaReference" + }, + "SkewedInfo": { + "$ref": "#/definitions/SkewedInfo" + }, + "InputFormat": { + "type": "string" + }, + "Location": { + "type": "string" + } + } + }, + "SchemaId": { + "type": "object", + "additionalProperties": false, + "properties": { + "RegistryName": { + "type": "string" + }, + "SchemaName": { + "type": "string" + }, + "SchemaArn": { + "type": "string" + } + } + }, + "SerdeInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "Parameters": { + "type": "object" + }, + "SerializationLibrary": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "PartitionInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "StorageDescriptor": { + "$ref": "#/definitions/StorageDescriptor" + }, + "Values": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Parameters": { + "type": "object" + } + }, + "required": [ + "Values" + ] + } + }, + "required": [ + "TableName", + "DatabaseName", + "CatalogId", + "PartitionInput" + ], + "createOnlyProperties": [ + "/properties/TableName", + "/properties/DatabaseName", + "/properties/CatalogId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/registry.json b/internal/aws/cfn/schemas/aws/glue/registry.json new file mode 100644 index 00000000..0f3fae6f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/registry.json @@ -0,0 +1,105 @@ +{ + "typeName": "AWS::Glue::Registry", + "description": "This resource creates a Registry for authoring schemas as part of Glue Schema Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "description": "A key to identify the tag.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "Corresponding tag value for the key.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "Amazon Resource Name for the created Registry.", + "type": "string", + "pattern": "arn:aws(-(cn|us-gov|iso(-[bef])?))?:glue:.*" + }, + "Name": { + "description": "Name of the registry to be created of max length of 255, and may only contain letters, numbers, hyphen, underscore, dollar sign, or hash mark. No whitespace.", + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "Description": { + "description": "A description of the registry. If description is not provided, there will not be any default value for this.", + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "Tags": { + "description": "List of tags to tag the Registry", + "type": "array", + "minItems": 0, + "maxItems": 10, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalProperties": false, + "required": [ + "Name" + ], + "handlers": { + "create": { + "permissions": [ + "glue:CreateRegistry", + "glue:GetRegistry", + "glue:GetTags" + ] + }, + "read": { + "permissions": [ + "glue:GetRegistry", + "glue:GetTags" + ] + }, + "delete": { + "permissions": [ + "glue:GetRegistry", + "glue:DeleteRegistry" + ] + }, + "update": { + "permissions": [ + "glue:UpdateRegistry", + "glue:GetRegistry", + "glue:TagResource", + "glue:UntagResource", + "glue:GetTags" + ] + }, + "list": { + "permissions": [ + "glue:ListRegistries" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/glue/schema.json b/internal/aws/cfn/schemas/aws/glue/schema.json new file mode 100644 index 00000000..7b3c3785 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/schema.json @@ -0,0 +1,190 @@ +{ + "typeName": "AWS::Glue::Schema", + "description": "This resource represents a schema of Glue Schema Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", + "definitions": { + "Registry": { + "type": "object", + "description": "Identifier for the registry which the schema is part of.", + "properties": { + "Name": { + "description": "Name of the registry in which the schema will be created.", + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "Arn": { + "description": "Amazon Resource Name for the Registry.", + "type": "string", + "pattern": "arn:aws(-(cn|us-gov|iso(-[bef])?))?:glue:.*" + } + }, + "additionalProperties": false + }, + "SchemaVersion": { + "type": "object", + "description": "Specify checkpoint version for update. This is only required to update the Compatibility.", + "properties": { + "IsLatest": { + "description": "Indicates if the latest version needs to be updated.", + "type": "boolean" + }, + "VersionNumber": { + "description": "Indicates the version number in the schema to update.", + "type": "integer", + "minimum": 1, + "maximum": 100000 + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "description": "A key to identify the tag.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "Corresponding tag value for the key.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "Amazon Resource Name for the Schema.", + "type": "string", + "pattern": "arn:aws(-(cn|us-gov|iso(-[bef])?))?:glue:.*" + }, + "Registry": { + "$ref": "#/definitions/Registry" + }, + "Name": { + "description": "Name of the schema.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Description": { + "description": "A description of the schema. If description is not provided, there will not be any default value for this.", + "type": "string", + "minLength": 0, + "maxLength": 1000 + }, + "DataFormat": { + "description": "Data format name to use for the schema. Accepted values: 'AVRO', 'JSON', 'PROTOBUF'", + "type": "string", + "enum": [ + "AVRO", + "JSON", + "PROTOBUF" + ] + }, + "Compatibility": { + "description": "Compatibility setting for the schema.", + "type": "string", + "enum": [ + "NONE", + "DISABLED", + "BACKWARD", + "BACKWARD_ALL", + "FORWARD", + "FORWARD_ALL", + "FULL", + "FULL_ALL" + ] + }, + "SchemaDefinition": { + "description": "Definition for the initial schema version in plain-text.", + "type": "string", + "minLength": 1, + "maxLength": 170000 + }, + "CheckpointVersion": { + "$ref": "#/definitions/SchemaVersion" + }, + "Tags": { + "description": "List of tags to tag the schema", + "type": "array", + "minItems": 0, + "maxItems": 10, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "InitialSchemaVersionId": { + "type": "string", + "description": "Represents the version ID associated with the initial schema version.", + "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "DataFormat", + "SchemaDefinition", + "Compatibility" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/InitialSchemaVersionId" + ], + "createOnlyProperties": [ + "/properties/Registry", + "/properties/Name", + "/properties/DataFormat", + "/properties/SchemaDefinition" + ], + "writeOnlyProperties": [ + "/properties/SchemaDefinition" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "glue:CreateSchema" + ] + }, + "read": { + "permissions": [ + "glue:GetSchemaVersion", + "glue:GetSchema", + "glue:GetTags" + ] + }, + "delete": { + "permissions": [ + "glue:DeleteSchema", + "glue:GetSchema" + ] + }, + "update": { + "permissions": [ + "glue:UpdateSchema", + "glue:GetSchemaVersion", + "glue:GetSchema", + "glue:GetTags", + "glue:TagResource", + "glue:UntagResource" + ] + }, + "list": { + "permissions": [ + "glue:ListSchemas" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/glue/schemaversion.json b/internal/aws/cfn/schemas/aws/glue/schemaversion.json new file mode 100644 index 00000000..020b1225 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/schemaversion.json @@ -0,0 +1,97 @@ +{ + "typeName": "AWS::Glue::SchemaVersion", + "description": "This resource represents an individual schema version of a schema defined in Glue Schema Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", + "definitions": { + "Schema": { + "description": "Identifier for the schema where the schema version will be created.", + "type": "object", + "properties": { + "SchemaArn": { + "description": "Amazon Resource Name for the Schema. This attribute can be used to uniquely represent the Schema.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn):glue:.*" + }, + "SchemaName": { + "description": "Name of the schema. This parameter requires RegistryName to be provided.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "RegistryName": { + "description": "Name of the registry to identify where the Schema is located.", + "type": "string", + "maxLength": 255, + "minLength": 1 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Schema": { + "$ref": "#/definitions/Schema" + }, + "SchemaDefinition": { + "type": "string", + "description": "Complete definition of the schema in plain-text.", + "minLength": 1, + "maxLength": 170000 + }, + "VersionId": { + "type": "string", + "description": "Represents the version ID associated with the schema version.", + "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + } + }, + "required": [ + "Schema", + "SchemaDefinition" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/VersionId" + ], + "createOnlyProperties": [ + "/properties/Schema", + "/properties/SchemaDefinition" + ], + "primaryIdentifier": [ + "/properties/VersionId" + ], + "handlers": { + "create": { + "permissions": [ + "glue:RegisterSchemaVersion", + "glue:GetSchemaVersion", + "glue:GetSchemaByDefinition" + ] + }, + "read": { + "permissions": [ + "glue:GetSchemaVersion" + ] + }, + "delete": { + "permissions": [ + "glue:DeleteSchemaVersions", + "glue:GetSchemaVersion" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "Schema": { + "$ref": "resource-schema.json#/properties/Schema" + } + }, + "required": [ + "Schema" + ] + }, + "permissions": [ + "glue:ListSchemaVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/glue/schemaversionmetadata.json b/internal/aws/cfn/schemas/aws/glue/schemaversionmetadata.json new file mode 100644 index 00000000..9128102d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/schemaversionmetadata.json @@ -0,0 +1,72 @@ +{ + "typeName": "AWS::Glue::SchemaVersionMetadata", + "description": "This resource adds Key-Value metadata to a Schema version of Glue Schema Registry.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", + "properties": { + "SchemaVersionId": { + "type": "string", + "description": "Represents the version ID associated with the schema version.", + "pattern": "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" + }, + "Key": { + "type": "string", + "description": "Metadata key", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "Metadata value", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "SchemaVersionId", + "Key", + "Value" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/SchemaVersionId", + "/properties/Key", + "/properties/Value" + ], + "primaryIdentifier": [ + "/properties/SchemaVersionId", + "/properties/Key", + "/properties/Value" + ], + "handlers": { + "create": { + "permissions": [ + "glue:putSchemaVersionMetadata" + ] + }, + "read": { + "permissions": [ + "glue:querySchemaVersionMetadata" + ] + }, + "delete": { + "permissions": [ + "glue:removeSchemaVersionMetadata" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "SchemaVersionId": { + "$ref": "resource-schema.json#/properties/SchemaVersionId" + } + }, + "required": [ + "SchemaVersionId" + ] + }, + "permissions": [ + "glue:querySchemaVersionMetadata" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/glue/securityconfiguration.json b/internal/aws/cfn/schemas/aws/glue/securityconfiguration.json new file mode 100644 index 00000000..109ba5d6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/securityconfiguration.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::Glue::SecurityConfiguration", + "description": "Resource Type definition for AWS::Glue::SecurityConfiguration", + "additionalProperties": false, + "properties": { + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration" + }, + "Name": { + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "S3Encryptions": { + "type": "object", + "additionalProperties": false + }, + "EncryptionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Encryptions": { + "$ref": "#/definitions/S3Encryptions" + }, + "JobBookmarksEncryption": { + "$ref": "#/definitions/JobBookmarksEncryption" + }, + "CloudWatchEncryption": { + "$ref": "#/definitions/CloudWatchEncryption" + } + } + }, + "CloudWatchEncryption": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyArn": { + "type": "string" + }, + "CloudWatchEncryptionMode": { + "type": "string" + } + } + }, + "JobBookmarksEncryption": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyArn": { + "type": "string" + }, + "JobBookmarksEncryptionMode": { + "type": "string" + } + } + } + }, + "required": [ + "EncryptionConfiguration", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/table.json b/internal/aws/cfn/schemas/aws/glue/table.json new file mode 100644 index 00000000..c9b2f348 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/table.json @@ -0,0 +1,284 @@ +{ + "typeName": "AWS::Glue::Table", + "description": "Resource Type definition for AWS::Glue::Table", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "TableInput": { + "$ref": "#/definitions/TableInput" + }, + "OpenTableFormatInput": { + "$ref": "#/definitions/OpenTableFormatInput" + }, + "Id": { + "type": "string" + }, + "CatalogId": { + "type": "string" + } + }, + "definitions": { + "TableIdentifier": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "Region": { + "type": "string" + }, + "CatalogId": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "Order": { + "type": "object", + "additionalProperties": false, + "properties": { + "Column": { + "type": "string" + }, + "SortOrder": { + "type": "integer" + } + }, + "required": [ + "Column", + "SortOrder" + ] + }, + "SchemaReference": { + "type": "object", + "additionalProperties": false, + "properties": { + "SchemaId": { + "$ref": "#/definitions/SchemaId" + }, + "SchemaVersionId": { + "type": "string" + }, + "SchemaVersionNumber": { + "type": "integer" + } + } + }, + "TableInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "Owner": { + "type": "string" + }, + "ViewOriginalText": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "TableType": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "ViewExpandedText": { + "type": "string" + }, + "StorageDescriptor": { + "$ref": "#/definitions/StorageDescriptor" + }, + "TargetTable": { + "$ref": "#/definitions/TableIdentifier" + }, + "PartitionKeys": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Column" + } + }, + "Retention": { + "type": "integer" + }, + "Name": { + "type": "string" + } + } + }, + "MetadataOperation": { + "type": "object", + "additionalProperties": false + }, + "OpenTableFormatInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "IcebergInput": { + "$ref": "#/definitions/IcebergInput" + } + } + }, + "SkewedInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "SkewedColumnValues": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SkewedColumnValueLocationMaps": { + "type": "object" + }, + "SkewedColumnNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "Column": { + "type": "object", + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "StorageDescriptor": { + "type": "object", + "additionalProperties": false, + "properties": { + "StoredAsSubDirectories": { + "type": "boolean" + }, + "Parameters": { + "type": "object" + }, + "BucketColumns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "NumberOfBuckets": { + "type": "integer" + }, + "OutputFormat": { + "type": "string" + }, + "Columns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Column" + } + }, + "SerdeInfo": { + "$ref": "#/definitions/SerdeInfo" + }, + "SortColumns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Order" + } + }, + "Compressed": { + "type": "boolean" + }, + "SchemaReference": { + "$ref": "#/definitions/SchemaReference" + }, + "SkewedInfo": { + "$ref": "#/definitions/SkewedInfo" + }, + "InputFormat": { + "type": "string" + }, + "Location": { + "type": "string" + } + } + }, + "SchemaId": { + "type": "object", + "additionalProperties": false, + "properties": { + "RegistryName": { + "type": "string" + }, + "SchemaName": { + "type": "string" + }, + "SchemaArn": { + "type": "string" + } + } + }, + "IcebergInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetadataOperation": { + "$ref": "#/definitions/MetadataOperation" + }, + "Version": { + "type": "string" + } + } + }, + "SerdeInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "Parameters": { + "type": "object" + }, + "SerializationLibrary": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + } + }, + "required": [ + "TableInput", + "DatabaseName", + "CatalogId" + ], + "createOnlyProperties": [ + "/properties/DatabaseName", + "/properties/CatalogId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/trigger.json b/internal/aws/cfn/schemas/aws/glue/trigger.json new file mode 100644 index 00000000..7c5cc0e4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/trigger.json @@ -0,0 +1,146 @@ +{ + "typeName": "AWS::Glue::Trigger", + "description": "Resource Type definition for AWS::Glue::Trigger", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "StartOnCreation": { + "type": "boolean" + }, + "Description": { + "type": "string" + }, + "Actions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Action" + } + }, + "EventBatchingCondition": { + "$ref": "#/definitions/EventBatchingCondition" + }, + "WorkflowName": { + "type": "string" + }, + "Schedule": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + }, + "Predicate": { + "$ref": "#/definitions/Predicate" + } + }, + "definitions": { + "Condition": { + "type": "object", + "additionalProperties": false, + "properties": { + "JobName": { + "type": "string" + }, + "CrawlerName": { + "type": "string" + }, + "State": { + "type": "string" + }, + "CrawlState": { + "type": "string" + }, + "LogicalOperator": { + "type": "string" + } + } + }, + "NotificationProperty": { + "type": "object", + "additionalProperties": false, + "properties": { + "NotifyDelayAfter": { + "type": "integer" + } + } + }, + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "NotificationProperty": { + "$ref": "#/definitions/NotificationProperty" + }, + "CrawlerName": { + "type": "string" + }, + "Timeout": { + "type": "integer" + }, + "JobName": { + "type": "string" + }, + "Arguments": { + "type": "object" + }, + "SecurityConfiguration": { + "type": "string" + } + } + }, + "EventBatchingCondition": { + "type": "object", + "additionalProperties": false, + "properties": { + "BatchSize": { + "type": "integer" + }, + "BatchWindow": { + "type": "integer" + } + }, + "required": [ + "BatchSize" + ] + }, + "Predicate": { + "type": "object", + "additionalProperties": false, + "properties": { + "Logical": { + "type": "string" + }, + "Conditions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Condition" + } + } + } + } + }, + "required": [ + "Type", + "Actions" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/WorkflowName", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/glue/workflow.json b/internal/aws/cfn/schemas/aws/glue/workflow.json new file mode 100644 index 00000000..7428dec4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/glue/workflow.json @@ -0,0 +1,34 @@ +{ + "typeName": "AWS::Glue::Workflow", + "description": "Resource Type definition for AWS::Glue::Workflow", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "DefaultRunProperties": { + "type": "object" + }, + "Name": { + "type": "string" + }, + "MaxConcurrentRuns": { + "type": "integer" + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/grafana/workspace.json b/internal/aws/cfn/schemas/aws/grafana/workspace.json new file mode 100644 index 00000000..18f0300b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/grafana/workspace.json @@ -0,0 +1,495 @@ +{ + "typeName": "AWS::Grafana::Workspace", + "description": "Definition of AWS::Grafana::Workspace Resource Type", + "definitions": { + "AssertionAttributes": { + "type": "object", + "description": "Maps Grafana friendly names to the IdPs SAML attributes.", + "properties": { + "Name": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "Name of the attribute within the SAML assert to use as the users name in Grafana." + }, + "Login": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "Name of the attribute within the SAML assert to use as the users login handle in Grafana." + }, + "Email": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "Name of the attribute within the SAML assert to use as the users email in Grafana." + }, + "Groups": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "Name of the attribute within the SAML assert to use as the users groups in Grafana." + }, + "Role": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "Name of the attribute within the SAML assert to use as the users roles in Grafana." + }, + "Org": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "Name of the attribute within the SAML assert to use as the users organizations in Grafana." + } + }, + "additionalProperties": false + }, + "IdpMetadata": { + "type": "object", + "description": "IdP Metadata used to configure SAML authentication in Grafana.", + "properties": { + "Url": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "description": "URL that vends the IdPs metadata." + }, + "Xml": { + "type": "string", + "description": "XML blob of the IdPs metadata." + } + }, + "additionalProperties": false + }, + "RoleValues": { + "type": "object", + "description": "Maps SAML roles to the Grafana Editor and Admin roles.", + "properties": { + "Editor": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "A single SAML role." + }, + "description": "List of SAML roles which will be mapped into the Grafana Editor role." + }, + "Admin": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "A single SAML role." + }, + "description": "List of SAML roles which will be mapped into the Grafana Admin role." + } + }, + "additionalProperties": false + }, + "SamlConfiguration": { + "type": "object", + "description": "SAML configuration data associated with an AMG workspace.", + "properties": { + "IdpMetadata": { + "$ref": "#/definitions/IdpMetadata" + }, + "AssertionAttributes": { + "$ref": "#/definitions/AssertionAttributes" + }, + "RoleValues": { + "$ref": "#/definitions/RoleValues" + }, + "AllowedOrganizations": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "A single SAML organization." + }, + "description": "List of SAML organizations allowed to access Grafana." + }, + "LoginValidityDuration": { + "type": "number", + "description": "The maximum lifetime an authenticated user can be logged in (in minutes) before being required to re-authenticate." + } + }, + "required": [ + "IdpMetadata" + ], + "additionalProperties": false + }, + "NetworkAccessControl": { + "type": "object", + "description": "The configuration settings for Network Access Control.", + "properties": { + "PrefixListIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 5, + "items": { + "type": "string", + "minLength": 1, + "description": "Prefix List Ids" + }, + "description": "The list of prefix list IDs. A prefix list is a list of CIDR ranges of IP addresses. The IP addresses specified are allowed to access your workspace. If the list is not included in the configuration then no IP addresses will be allowed to access the workspace." + }, + "VpceIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 5, + "items": { + "type": "string", + "minLength": 1, + "description": "VPCE Ids" + }, + "description": "The list of Amazon VPC endpoint IDs for the workspace. If a NetworkAccessConfiguration is specified then only VPC endpoints specified here will be allowed to access the workspace." + } + }, + "additionalProperties": false + }, + "VpcConfiguration": { + "type": "object", + "description": "The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to.", + "properties": { + "SecurityGroupIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "maxItems": 5, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "description": "VPC Security Group Id" + }, + "description": "The list of Amazon EC2 security group IDs attached to the Amazon VPC for your Grafana workspace to connect." + }, + "SubnetIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 2, + "maxItems": 6, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "description": "VPC Subnet Id" + }, + "description": "The list of Amazon EC2 subnet IDs created in the Amazon VPC for your Grafana workspace to connect." + } + }, + "required": [ + "SecurityGroupIds", + "SubnetIds" + ], + "additionalProperties": false + }, + "AccountAccessType": { + "type": "string", + "description": "These enums represent valid account access types. Specifically these enums determine whether the workspace can access AWS resources in the AWS account only, or whether it can also access resources in other accounts in the same organization. If the value CURRENT_ACCOUNT is used, a workspace role ARN must be provided. If the value is ORGANIZATION, a list of organizational units must be provided.", + "enum": [ + "CURRENT_ACCOUNT", + "ORGANIZATION" + ] + }, + "AuthenticationProviderTypes": { + "type": "string", + "description": "Valid workspace authentication providers.", + "enum": [ + "AWS_SSO", + "SAML" + ] + }, + "DataSourceType": { + "type": "string", + "description": "These enums represent valid AWS data sources that can be queried via the Grafana workspace. These data sources are primarily used to help customers visualize which data sources have been added to a service managed workspace IAM role.", + "enum": [ + "AMAZON_OPENSEARCH_SERVICE", + "CLOUDWATCH", + "PROMETHEUS", + "XRAY", + "TIMESTREAM", + "SITEWISE", + "ATHENA", + "REDSHIFT" + ] + }, + "NotificationDestinationType": { + "type": "string", + "description": "These enums represent valid AWS notification destinations that the Grafana workspace has permission to use. These notification destinations are primarily used to help customers visualize which destinations have been added to a service managed IAM role.", + "enum": [ + "SNS" + ] + }, + "PermissionType": { + "type": "string", + "description": "These enums represent valid permission types to use when creating or configuring a Grafana workspace. The SERVICE_MANAGED permission type means the Managed Grafana service will create a workspace IAM role on your behalf. The CUSTOMER_MANAGED permission type means that the customer is expected to provide an IAM role that the Grafana workspace can use to query data sources.", + "enum": [ + "CUSTOMER_MANAGED", + "SERVICE_MANAGED" + ] + }, + "WorkspaceStatus": { + "type": "string", + "description": "These enums represent the status of a workspace.", + "enum": [ + "ACTIVE", + "CREATING", + "DELETING", + "FAILED", + "UPDATING", + "UPGRADING", + "VERSION_UPDATING", + "DELETION_FAILED", + "CREATION_FAILED", + "UPDATE_FAILED", + "UPGRADE_FAILED", + "LICENSE_REMOVAL_FAILED", + "VERSION_UPDATE_FAILED" + ] + }, + "SamlConfigurationStatus": { + "type": "string", + "description": "Valid SAML configuration statuses.", + "enum": [ + "CONFIGURED", + "NOT_CONFIGURED" + ] + } + }, + "properties": { + "AuthenticationProviders": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AuthenticationProviderTypes" + }, + "description": "List of authentication providers to enable." + }, + "SsoClientId": { + "type": "string", + "description": "The client ID of the AWS SSO Managed Application." + }, + "SamlConfiguration": { + "$ref": "#/definitions/SamlConfiguration" + }, + "NetworkAccessControl": { + "$ref": "#/definitions/NetworkAccessControl" + }, + "VpcConfiguration": { + "$ref": "#/definitions/VpcConfiguration" + }, + "SamlConfigurationStatus": { + "$ref": "#/definitions/SamlConfigurationStatus" + }, + "ClientToken": { + "type": "string", + "pattern": "^[!-~]{1,64}$", + "description": "A unique, case-sensitive, user-provided identifier to ensure the idempotency of the request." + }, + "Status": { + "$ref": "#/definitions/WorkspaceStatus" + }, + "CreationTimestamp": { + "type": "string", + "description": "Timestamp when the workspace was created.", + "format": "date-time" + }, + "ModificationTimestamp": { + "type": "string", + "description": "Timestamp when the workspace was last modified", + "format": "date-time" + }, + "GrafanaVersion": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "description": "The version of Grafana to support in your workspace." + }, + "Endpoint": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "description": "Endpoint for the Grafana workspace." + }, + "AccountAccessType": { + "$ref": "#/definitions/AccountAccessType" + }, + "OrganizationRoleName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "description": "The name of an IAM role that already exists to use with AWS Organizations to access AWS data sources and notification channels in other accounts in an organization." + }, + "PermissionType": { + "$ref": "#/definitions/PermissionType" + }, + "StackSetName": { + "type": "string", + "description": "The name of the AWS CloudFormation stack set to use to generate IAM roles to be used for this workspace." + }, + "DataSources": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DataSourceType" + }, + "description": "List of data sources on the service managed IAM role." + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 0, + "description": "Description of a workspace." + }, + "Id": { + "type": "string", + "pattern": "^g-[0-9a-f]{10}$", + "description": "The id that uniquely identifies a Grafana workspace." + }, + "Name": { + "type": "string", + "pattern": "^[a-zA-Z0-9-._~]{1,255}$", + "description": "The user friendly name of a workspace." + }, + "NotificationDestinations": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/NotificationDestinationType" + }, + "description": "List of notification destinations on the customers service managed IAM role that the Grafana workspace can query." + }, + "OrganizationalUnits": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "description": "Id of an organizational unit." + }, + "description": "List of Organizational Units containing AWS accounts the Grafana workspace can pull data from." + }, + "RoleArn": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "description": "IAM Role that will be used to grant the Grafana workspace access to a customers AWS resources." + }, + "PluginAdminEnabled": { + "type": "boolean", + "description": "Allow workspace admins to install plugins" + } + }, + "required": [ + "AuthenticationProviders", + "PermissionType", + "AccountAccessType" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/SsoClientId", + "/properties/SamlConfigurationStatus", + "/properties/Endpoint", + "/properties/Status", + "/properties/CreationTimestamp", + "/properties/ModificationTimestamp" + ], + "writeOnlyProperties": [ + "/properties/ClientToken" + ], + "createOnlyProperties": [ + "/properties/ClientToken" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "grafana:CreateWorkspace", + "grafana:DescribeWorkspace", + "grafana:DescribeWorkspaceAuthentication", + "grafana:DescribeWorkspaceConfiguration", + "grafana:UpdateWorkspaceAuthentication", + "sso:DescribeRegisteredRegions", + "sso:CreateManagedApplicationInstance", + "organizations:DescribeOrganization", + "sso:GetSharedSsoConfiguration", + "iam:PassRole", + "ec2:GetManagedPrefixListEntries", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "iam:CreateServiceLinkedRole", + "sso:ListApplicationInstances", + "sso:GetApplicationInstance" + ] + }, + "read": { + "permissions": [ + "grafana:DescribeWorkspace", + "grafana:DescribeWorkspaceAuthentication", + "grafana:DescribeWorkspaceConfiguration" + ] + }, + "update": { + "permissions": [ + "grafana:DescribeWorkspace", + "grafana:DescribeWorkspaceAuthentication", + "grafana:DescribeWorkspaceConfiguration", + "grafana:UpdateWorkspace", + "grafana:UpdateWorkspaceAuthentication", + "grafana:UpdateWorkspaceConfiguration", + "sso:DescribeRegisteredRegions", + "sso:CreateManagedApplicationInstance", + "ec2:GetManagedPrefixListEntries", + "iam:PassRole", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "iam:CreateServiceLinkedRole", + "sso:ListApplicationInstances", + "sso:GetApplicationInstance" + ] + }, + "delete": { + "permissions": [ + "grafana:DeleteWorkspace", + "grafana:DescribeWorkspace", + "grafana:DescribeWorkspaceAuthentication", + "grafana:DescribeWorkspaceConfiguration", + "sso:DeleteManagedApplicationInstance", + "sso:DescribeRegisteredRegions" + ] + }, + "list": { + "permissions": [ + "grafana:ListWorkspaces", + "grafana:DescribeWorkspaceAuthentication", + "grafana:DescribeWorkspaceConfiguration" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/connectordefinition.json b/internal/aws/cfn/schemas/aws/greengrass/connectordefinition.json new file mode 100644 index 00000000..7f4d6a72 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/connectordefinition.json @@ -0,0 +1,76 @@ +{ + "typeName": "AWS::Greengrass::ConnectorDefinition", + "description": "Resource Type definition for AWS::Greengrass::ConnectorDefinition", + "additionalProperties": false, + "properties": { + "LatestVersionArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/ConnectorDefinitionVersion" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "ConnectorDefinitionVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "Connectors": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Connector" + } + } + }, + "required": [ + "Connectors" + ] + }, + "Connector": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectorArn": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "ConnectorArn", + "Id" + ] + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/connectordefinitionversion.json b/internal/aws/cfn/schemas/aws/greengrass/connectordefinitionversion.json new file mode 100644 index 00000000..3d5c11d3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/connectordefinitionversion.json @@ -0,0 +1,55 @@ +{ + "typeName": "AWS::Greengrass::ConnectorDefinitionVersion", + "description": "Resource Type definition for AWS::Greengrass::ConnectorDefinitionVersion", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Connectors": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Connector" + } + }, + "ConnectorDefinitionId": { + "type": "string" + } + }, + "definitions": { + "Connector": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectorArn": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "ConnectorArn", + "Id" + ] + } + }, + "required": [ + "Connectors", + "ConnectorDefinitionId" + ], + "createOnlyProperties": [ + "/properties/ConnectorDefinitionId", + "/properties/Connectors" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/coredefinition.json b/internal/aws/cfn/schemas/aws/greengrass/coredefinition.json new file mode 100644 index 00000000..470ac289 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/coredefinition.json @@ -0,0 +1,80 @@ +{ + "typeName": "AWS::Greengrass::CoreDefinition", + "description": "Resource Type definition for AWS::Greengrass::CoreDefinition", + "additionalProperties": false, + "properties": { + "LatestVersionArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/CoreDefinitionVersion" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "CoreDefinitionVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "Cores": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Core" + } + } + }, + "required": [ + "Cores" + ] + }, + "Core": { + "type": "object", + "additionalProperties": false, + "properties": { + "SyncShadow": { + "type": "boolean" + }, + "ThingArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "CertificateArn": { + "type": "string" + } + }, + "required": [ + "ThingArn", + "Id", + "CertificateArn" + ] + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/coredefinitionversion.json b/internal/aws/cfn/schemas/aws/greengrass/coredefinitionversion.json new file mode 100644 index 00000000..26ebdaea --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/coredefinitionversion.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::Greengrass::CoreDefinitionVersion", + "description": "Resource Type definition for AWS::Greengrass::CoreDefinitionVersion", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Cores": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Core" + } + }, + "CoreDefinitionId": { + "type": "string" + } + }, + "definitions": { + "Core": { + "type": "object", + "additionalProperties": false, + "properties": { + "SyncShadow": { + "type": "boolean" + }, + "ThingArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "CertificateArn": { + "type": "string" + } + }, + "required": [ + "ThingArn", + "Id", + "CertificateArn" + ] + } + }, + "required": [ + "Cores", + "CoreDefinitionId" + ], + "createOnlyProperties": [ + "/properties/Cores", + "/properties/CoreDefinitionId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/devicedefinition.json b/internal/aws/cfn/schemas/aws/greengrass/devicedefinition.json new file mode 100644 index 00000000..970001de --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/devicedefinition.json @@ -0,0 +1,80 @@ +{ + "typeName": "AWS::Greengrass::DeviceDefinition", + "description": "Resource Type definition for AWS::Greengrass::DeviceDefinition", + "additionalProperties": false, + "properties": { + "LatestVersionArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/DeviceDefinitionVersion" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "DeviceDefinitionVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "Devices": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Device" + } + } + }, + "required": [ + "Devices" + ] + }, + "Device": { + "type": "object", + "additionalProperties": false, + "properties": { + "SyncShadow": { + "type": "boolean" + }, + "ThingArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "CertificateArn": { + "type": "string" + } + }, + "required": [ + "ThingArn", + "Id", + "CertificateArn" + ] + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/devicedefinitionversion.json b/internal/aws/cfn/schemas/aws/greengrass/devicedefinitionversion.json new file mode 100644 index 00000000..80594e7a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/devicedefinitionversion.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::Greengrass::DeviceDefinitionVersion", + "description": "Resource Type definition for AWS::Greengrass::DeviceDefinitionVersion", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DeviceDefinitionId": { + "type": "string" + }, + "Devices": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Device" + } + } + }, + "definitions": { + "Device": { + "type": "object", + "additionalProperties": false, + "properties": { + "SyncShadow": { + "type": "boolean" + }, + "ThingArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "CertificateArn": { + "type": "string" + } + }, + "required": [ + "ThingArn", + "Id", + "CertificateArn" + ] + } + }, + "required": [ + "Devices", + "DeviceDefinitionId" + ], + "createOnlyProperties": [ + "/properties/DeviceDefinitionId", + "/properties/Devices" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/functiondefinition.json b/internal/aws/cfn/schemas/aws/greengrass/functiondefinition.json new file mode 100644 index 00000000..e4e42a90 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/functiondefinition.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::Greengrass::FunctionDefinition", + "description": "Resource Type definition for AWS::Greengrass::FunctionDefinition", + "additionalProperties": false, + "properties": { + "LatestVersionArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/FunctionDefinitionVersion" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "FunctionDefinitionVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultConfig": { + "$ref": "#/definitions/DefaultConfig" + }, + "Functions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Function" + } + } + }, + "required": [ + "Functions" + ] + }, + "DefaultConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Execution": { + "$ref": "#/definitions/Execution" + } + }, + "required": [ + "Execution" + ] + }, + "Function": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string" + }, + "FunctionConfiguration": { + "$ref": "#/definitions/FunctionConfiguration" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "FunctionArn", + "FunctionConfiguration", + "Id" + ] + }, + "Execution": { + "type": "object", + "additionalProperties": false, + "properties": { + "IsolationMode": { + "type": "string" + }, + "RunAs": { + "$ref": "#/definitions/RunAs" + } + } + }, + "FunctionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "MemorySize": { + "type": "integer" + }, + "Pinned": { + "type": "boolean" + }, + "ExecArgs": { + "type": "string" + }, + "Timeout": { + "type": "integer" + }, + "EncodingType": { + "type": "string" + }, + "Environment": { + "$ref": "#/definitions/Environment" + }, + "Executable": { + "type": "string" + } + } + }, + "RunAs": { + "type": "object", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "integer" + }, + "Gid": { + "type": "integer" + } + } + }, + "Environment": { + "type": "object", + "additionalProperties": false, + "properties": { + "Variables": { + "type": "object" + }, + "Execution": { + "$ref": "#/definitions/Execution" + }, + "ResourceAccessPolicies": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ResourceAccessPolicy" + } + }, + "AccessSysfs": { + "type": "boolean" + } + } + }, + "ResourceAccessPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceId": { + "type": "string" + }, + "Permission": { + "type": "string" + } + }, + "required": [ + "ResourceId" + ] + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/functiondefinitionversion.json b/internal/aws/cfn/schemas/aws/greengrass/functiondefinitionversion.json new file mode 100644 index 00000000..8c2eabb6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/functiondefinitionversion.json @@ -0,0 +1,160 @@ +{ + "typeName": "AWS::Greengrass::FunctionDefinitionVersion", + "description": "Resource Type definition for AWS::Greengrass::FunctionDefinitionVersion", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DefaultConfig": { + "$ref": "#/definitions/DefaultConfig" + }, + "Functions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Function" + } + }, + "FunctionDefinitionId": { + "type": "string" + } + }, + "definitions": { + "DefaultConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Execution": { + "$ref": "#/definitions/Execution" + } + }, + "required": [ + "Execution" + ] + }, + "Function": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string" + }, + "FunctionConfiguration": { + "$ref": "#/definitions/FunctionConfiguration" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "FunctionArn", + "FunctionConfiguration", + "Id" + ] + }, + "Execution": { + "type": "object", + "additionalProperties": false, + "properties": { + "IsolationMode": { + "type": "string" + }, + "RunAs": { + "$ref": "#/definitions/RunAs" + } + } + }, + "FunctionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "MemorySize": { + "type": "integer" + }, + "Pinned": { + "type": "boolean" + }, + "ExecArgs": { + "type": "string" + }, + "Timeout": { + "type": "integer" + }, + "EncodingType": { + "type": "string" + }, + "Environment": { + "$ref": "#/definitions/Environment" + }, + "Executable": { + "type": "string" + } + } + }, + "RunAs": { + "type": "object", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "integer" + }, + "Gid": { + "type": "integer" + } + } + }, + "Environment": { + "type": "object", + "additionalProperties": false, + "properties": { + "Variables": { + "type": "object" + }, + "Execution": { + "$ref": "#/definitions/Execution" + }, + "ResourceAccessPolicies": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ResourceAccessPolicy" + } + }, + "AccessSysfs": { + "type": "boolean" + } + } + }, + "ResourceAccessPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceId": { + "type": "string" + }, + "Permission": { + "type": "string" + } + }, + "required": [ + "ResourceId" + ] + } + }, + "required": [ + "FunctionDefinitionId", + "Functions" + ], + "createOnlyProperties": [ + "/properties/Functions", + "/properties/FunctionDefinitionId", + "/properties/DefaultConfig" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/group.json b/internal/aws/cfn/schemas/aws/greengrass/group.json new file mode 100644 index 00000000..2e29ce0d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/group.json @@ -0,0 +1,75 @@ +{ + "typeName": "AWS::Greengrass::Group", + "description": "Resource Type definition for AWS::Greengrass::Group", + "additionalProperties": false, + "properties": { + "RoleAttachedAt": { + "type": "string" + }, + "LatestVersionArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/GroupVersion" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "GroupVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "LoggerDefinitionVersionArn": { + "type": "string" + }, + "DeviceDefinitionVersionArn": { + "type": "string" + }, + "FunctionDefinitionVersionArn": { + "type": "string" + }, + "CoreDefinitionVersionArn": { + "type": "string" + }, + "ResourceDefinitionVersionArn": { + "type": "string" + }, + "ConnectorDefinitionVersionArn": { + "type": "string" + }, + "SubscriptionDefinitionVersionArn": { + "type": "string" + } + } + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/RoleAttachedAt", + "/properties/Id", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/groupversion.json b/internal/aws/cfn/schemas/aws/greengrass/groupversion.json new file mode 100644 index 00000000..f3e7d181 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/groupversion.json @@ -0,0 +1,53 @@ +{ + "typeName": "AWS::Greengrass::GroupVersion", + "description": "Resource Type definition for AWS::Greengrass::GroupVersion", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "LoggerDefinitionVersionArn": { + "type": "string" + }, + "DeviceDefinitionVersionArn": { + "type": "string" + }, + "FunctionDefinitionVersionArn": { + "type": "string" + }, + "CoreDefinitionVersionArn": { + "type": "string" + }, + "ResourceDefinitionVersionArn": { + "type": "string" + }, + "ConnectorDefinitionVersionArn": { + "type": "string" + }, + "SubscriptionDefinitionVersionArn": { + "type": "string" + }, + "GroupId": { + "type": "string" + } + }, + "required": [ + "GroupId" + ], + "createOnlyProperties": [ + "/properties/CoreDefinitionVersionArn", + "/properties/DeviceDefinitionVersionArn", + "/properties/ConnectorDefinitionVersionArn", + "/properties/SubscriptionDefinitionVersionArn", + "/properties/LoggerDefinitionVersionArn", + "/properties/GroupId", + "/properties/ResourceDefinitionVersionArn", + "/properties/FunctionDefinitionVersionArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/loggerdefinition.json b/internal/aws/cfn/schemas/aws/greengrass/loggerdefinition.json new file mode 100644 index 00000000..2ee2c0a3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/loggerdefinition.json @@ -0,0 +1,84 @@ +{ + "typeName": "AWS::Greengrass::LoggerDefinition", + "description": "Resource Type definition for AWS::Greengrass::LoggerDefinition", + "additionalProperties": false, + "properties": { + "LatestVersionArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/LoggerDefinitionVersion" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "LoggerDefinitionVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "Loggers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Logger" + } + } + }, + "required": [ + "Loggers" + ] + }, + "Logger": { + "type": "object", + "additionalProperties": false, + "properties": { + "Space": { + "type": "integer" + }, + "Type": { + "type": "string" + }, + "Level": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Component": { + "type": "string" + } + }, + "required": [ + "Type", + "Level", + "Id", + "Component" + ] + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/loggerdefinitionversion.json b/internal/aws/cfn/schemas/aws/greengrass/loggerdefinitionversion.json new file mode 100644 index 00000000..1c7cafe2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/loggerdefinitionversion.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::Greengrass::LoggerDefinitionVersion", + "description": "Resource Type definition for AWS::Greengrass::LoggerDefinitionVersion", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "LoggerDefinitionId": { + "type": "string" + }, + "Loggers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Logger" + } + } + }, + "definitions": { + "Logger": { + "type": "object", + "additionalProperties": false, + "properties": { + "Space": { + "type": "integer" + }, + "Type": { + "type": "string" + }, + "Level": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Component": { + "type": "string" + } + }, + "required": [ + "Type", + "Level", + "Id", + "Component" + ] + } + }, + "required": [ + "Loggers", + "LoggerDefinitionId" + ], + "createOnlyProperties": [ + "/properties/LoggerDefinitionId", + "/properties/Loggers" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/resourcedefinition.json b/internal/aws/cfn/schemas/aws/greengrass/resourcedefinition.json new file mode 100644 index 00000000..b46c8b79 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/resourcedefinition.json @@ -0,0 +1,220 @@ +{ + "typeName": "AWS::Greengrass::ResourceDefinition", + "description": "Resource Type definition for AWS::Greengrass::ResourceDefinition", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "LatestVersionArn": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/ResourceDefinitionVersion" + } + }, + "definitions": { + "SecretsManagerSecretResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "ARN": { + "type": "string" + }, + "AdditionalStagingLabelsToDownload": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "ARN" + ] + }, + "ResourceDataContainer": { + "type": "object", + "additionalProperties": false, + "properties": { + "LocalVolumeResourceData": { + "$ref": "#/definitions/LocalVolumeResourceData" + }, + "LocalDeviceResourceData": { + "$ref": "#/definitions/LocalDeviceResourceData" + }, + "S3MachineLearningModelResourceData": { + "$ref": "#/definitions/S3MachineLearningModelResourceData" + }, + "SecretsManagerSecretResourceData": { + "$ref": "#/definitions/SecretsManagerSecretResourceData" + }, + "SageMakerMachineLearningModelResourceData": { + "$ref": "#/definitions/SageMakerMachineLearningModelResourceData" + } + } + }, + "SageMakerMachineLearningModelResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "OwnerSetting": { + "$ref": "#/definitions/ResourceDownloadOwnerSetting" + }, + "SageMakerJobArn": { + "type": "string" + }, + "DestinationPath": { + "type": "string" + } + }, + "required": [ + "DestinationPath", + "SageMakerJobArn" + ] + }, + "ResourceInstance": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceDataContainer": { + "$ref": "#/definitions/ResourceDataContainer" + }, + "Id": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ResourceDataContainer", + "Id", + "Name" + ] + }, + "LocalVolumeResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourcePath": { + "type": "string" + }, + "DestinationPath": { + "type": "string" + }, + "GroupOwnerSetting": { + "$ref": "#/definitions/GroupOwnerSetting" + } + }, + "required": [ + "SourcePath", + "DestinationPath" + ] + }, + "LocalDeviceResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourcePath": { + "type": "string" + }, + "GroupOwnerSetting": { + "$ref": "#/definitions/GroupOwnerSetting" + } + }, + "required": [ + "SourcePath" + ] + }, + "S3MachineLearningModelResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "OwnerSetting": { + "$ref": "#/definitions/ResourceDownloadOwnerSetting" + }, + "DestinationPath": { + "type": "string" + }, + "S3Uri": { + "type": "string" + } + }, + "required": [ + "DestinationPath", + "S3Uri" + ] + }, + "ResourceDownloadOwnerSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "GroupPermission": { + "type": "string" + }, + "GroupOwner": { + "type": "string" + } + }, + "required": [ + "GroupOwner", + "GroupPermission" + ] + }, + "ResourceDefinitionVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "Resources": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ResourceInstance" + } + } + }, + "required": [ + "Resources" + ] + }, + "GroupOwnerSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutoAddGroupOwner": { + "type": "boolean" + }, + "GroupOwner": { + "type": "string" + } + }, + "required": [ + "AutoAddGroupOwner" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/resourcedefinitionversion.json b/internal/aws/cfn/schemas/aws/greengrass/resourcedefinitionversion.json new file mode 100644 index 00000000..9c9ec74f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/resourcedefinitionversion.json @@ -0,0 +1,199 @@ +{ + "typeName": "AWS::Greengrass::ResourceDefinitionVersion", + "description": "Resource Type definition for AWS::Greengrass::ResourceDefinitionVersion", + "additionalProperties": false, + "properties": { + "ResourceDefinitionId": { + "type": "string" + }, + "Resources": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ResourceInstance" + } + }, + "Id": { + "type": "string" + } + }, + "definitions": { + "SecretsManagerSecretResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "ARN": { + "type": "string" + }, + "AdditionalStagingLabelsToDownload": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "ARN" + ] + }, + "ResourceDataContainer": { + "type": "object", + "additionalProperties": false, + "properties": { + "LocalVolumeResourceData": { + "$ref": "#/definitions/LocalVolumeResourceData" + }, + "LocalDeviceResourceData": { + "$ref": "#/definitions/LocalDeviceResourceData" + }, + "S3MachineLearningModelResourceData": { + "$ref": "#/definitions/S3MachineLearningModelResourceData" + }, + "SecretsManagerSecretResourceData": { + "$ref": "#/definitions/SecretsManagerSecretResourceData" + }, + "SageMakerMachineLearningModelResourceData": { + "$ref": "#/definitions/SageMakerMachineLearningModelResourceData" + } + } + }, + "SageMakerMachineLearningModelResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "OwnerSetting": { + "$ref": "#/definitions/ResourceDownloadOwnerSetting" + }, + "SageMakerJobArn": { + "type": "string" + }, + "DestinationPath": { + "type": "string" + } + }, + "required": [ + "DestinationPath", + "SageMakerJobArn" + ] + }, + "ResourceInstance": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceDataContainer": { + "$ref": "#/definitions/ResourceDataContainer" + }, + "Id": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ResourceDataContainer", + "Id", + "Name" + ] + }, + "LocalVolumeResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourcePath": { + "type": "string" + }, + "DestinationPath": { + "type": "string" + }, + "GroupOwnerSetting": { + "$ref": "#/definitions/GroupOwnerSetting" + } + }, + "required": [ + "SourcePath", + "DestinationPath" + ] + }, + "S3MachineLearningModelResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "OwnerSetting": { + "$ref": "#/definitions/ResourceDownloadOwnerSetting" + }, + "DestinationPath": { + "type": "string" + }, + "S3Uri": { + "type": "string" + } + }, + "required": [ + "DestinationPath", + "S3Uri" + ] + }, + "LocalDeviceResourceData": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourcePath": { + "type": "string" + }, + "GroupOwnerSetting": { + "$ref": "#/definitions/GroupOwnerSetting" + } + }, + "required": [ + "SourcePath" + ] + }, + "ResourceDownloadOwnerSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "GroupPermission": { + "type": "string" + }, + "GroupOwner": { + "type": "string" + } + }, + "required": [ + "GroupOwner", + "GroupPermission" + ] + }, + "GroupOwnerSetting": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutoAddGroupOwner": { + "type": "boolean" + }, + "GroupOwner": { + "type": "string" + } + }, + "required": [ + "AutoAddGroupOwner" + ] + } + }, + "required": [ + "Resources", + "ResourceDefinitionId" + ], + "createOnlyProperties": [ + "/properties/Resources", + "/properties/ResourceDefinitionId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinition.json b/internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinition.json new file mode 100644 index 00000000..3a5c5022 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinition.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::Greengrass::SubscriptionDefinition", + "description": "Resource Type definition for AWS::Greengrass::SubscriptionDefinition", + "additionalProperties": false, + "properties": { + "LatestVersionArn": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "InitialVersion": { + "$ref": "#/definitions/SubscriptionDefinitionVersion" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "SubscriptionDefinitionVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "Subscriptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Subscription" + } + } + }, + "required": [ + "Subscriptions" + ] + }, + "Subscription": { + "type": "object", + "additionalProperties": false, + "properties": { + "Target": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Source": { + "type": "string" + }, + "Subject": { + "type": "string" + } + }, + "required": [ + "Target", + "Id", + "Source", + "Subject" + ] + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/LatestVersionArn", + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/InitialVersion" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinitionversion.json b/internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinitionversion.json new file mode 100644 index 00000000..b96a58a3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrass/subscriptiondefinitionversion.json @@ -0,0 +1,60 @@ +{ + "typeName": "AWS::Greengrass::SubscriptionDefinitionVersion", + "description": "Resource Type definition for AWS::Greengrass::SubscriptionDefinitionVersion", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SubscriptionDefinitionId": { + "type": "string" + }, + "Subscriptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Subscription" + } + } + }, + "definitions": { + "Subscription": { + "type": "object", + "additionalProperties": false, + "properties": { + "Target": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Source": { + "type": "string" + }, + "Subject": { + "type": "string" + } + }, + "required": [ + "Target", + "Id", + "Source", + "Subject" + ] + } + }, + "required": [ + "SubscriptionDefinitionId", + "Subscriptions" + ], + "createOnlyProperties": [ + "/properties/Subscriptions", + "/properties/SubscriptionDefinitionId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/greengrassv2/componentversion.json b/internal/aws/cfn/schemas/aws/greengrassv2/componentversion.json new file mode 100644 index 00000000..5d27a891 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrassv2/componentversion.json @@ -0,0 +1,341 @@ +{ + "typeName": "AWS::GreengrassV2::ComponentVersion", + "description": "Resource for Greengrass component version.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-greengrassv2", + "definitions": { + "LambdaFunctionRecipeSource": { + "type": "object", + "properties": { + "LambdaArn": { + "type": "string", + "pattern": "^arn:[^:]*:lambda:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$" + }, + "ComponentName": { + "type": "string" + }, + "ComponentVersion": { + "type": "string" + }, + "ComponentPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/ComponentPlatform" + }, + "insertionOrder": false + }, + "ComponentDependencies": { + "type": "object", + "patternProperties": { + ".*": { + "$ref": "#/definitions/ComponentDependencyRequirement" + } + }, + "additionalProperties": false + }, + "ComponentLambdaParameters": { + "$ref": "#/definitions/LambdaExecutionParameters" + } + }, + "additionalProperties": false + }, + "ComponentPlatform": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Attributes": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "ComponentDependencyRequirement": { + "type": "object", + "properties": { + "VersionRequirement": { + "type": "string" + }, + "DependencyType": { + "type": "string", + "enum": [ + "SOFT", + "HARD" + ] + } + }, + "additionalProperties": false + }, + "LambdaExecutionParameters": { + "type": "object", + "properties": { + "EventSources": { + "type": "array", + "items": { + "$ref": "#/definitions/LambdaEventSource" + }, + "insertionOrder": false + }, + "MaxQueueSize": { + "type": "integer" + }, + "MaxInstancesCount": { + "type": "integer" + }, + "MaxIdleTimeInSeconds": { + "type": "integer" + }, + "TimeoutInSeconds": { + "type": "integer" + }, + "StatusTimeoutInSeconds": { + "type": "integer" + }, + "Pinned": { + "type": "boolean" + }, + "InputPayloadEncodingType": { + "type": "string", + "enum": [ + "json", + "binary" + ] + }, + "ExecArgs": { + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": true + }, + "EnvironmentVariables": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "LinuxProcessParams": { + "$ref": "#/definitions/LambdaLinuxProcessParams" + } + }, + "additionalProperties": false + }, + "LambdaEventSource": { + "type": "object", + "properties": { + "Topic": { + "type": "string" + }, + "Type": { + "type": "string", + "enum": [ + "PUB_SUB", + "IOT_CORE" + ] + } + }, + "additionalProperties": false + }, + "LambdaLinuxProcessParams": { + "type": "object", + "properties": { + "IsolationMode": { + "type": "string", + "enum": [ + "GreengrassContainer", + "NoContainer" + ] + }, + "ContainerParams": { + "$ref": "#/definitions/LambdaContainerParams" + } + }, + "additionalProperties": false + }, + "LambdaContainerParams": { + "type": "object", + "properties": { + "MemorySizeInKB": { + "type": "integer" + }, + "MountROSysfs": { + "type": "boolean" + }, + "Volumes": { + "type": "array", + "items": { + "$ref": "#/definitions/LambdaVolumeMount" + }, + "insertionOrder": false + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/definitions/LambdaDeviceMount" + }, + "insertionOrder": false + } + }, + "additionalProperties": false + }, + "LambdaVolumeMount": { + "type": "object", + "properties": { + "SourcePath": { + "$ref": "#/definitions/FilesystemPath" + }, + "DestinationPath": { + "$ref": "#/definitions/FilesystemPath" + }, + "Permission": { + "$ref": "#/definitions/LambdaFilesystemPermission" + }, + "AddGroupOwner": { + "$ref": "#/definitions/LambdaAddGroupOwnerBoolean" + } + }, + "additionalProperties": false + }, + "LambdaDeviceMount": { + "type": "object", + "properties": { + "Path": { + "$ref": "#/definitions/FilesystemPath" + }, + "Permission": { + "$ref": "#/definitions/LambdaFilesystemPermission" + }, + "AddGroupOwner": { + "$ref": "#/definitions/LambdaAddGroupOwnerBoolean" + } + }, + "additionalProperties": false + }, + "FilesystemPath": { + "type": "string" + }, + "LambdaFilesystemPermission": { + "type": "string", + "enum": [ + "ro", + "rw" + ] + }, + "LambdaAddGroupOwnerBoolean": { + "type": "boolean" + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "ComponentName": { + "type": "string" + }, + "ComponentVersion": { + "type": "string" + }, + "InlineRecipe": { + "type": "string" + }, + "LambdaFunction": { + "$ref": "#/definitions/LambdaFunctionRecipeSource" + }, + "Tags": { + "type": "object", + "patternProperties": { + "^(?!aws:)[a-zA-Z+-=._:/]{1,128}$": { + "type": "string", + "maxLength": 256 + } + }, + "maxProperties": 50, + "additionalProperties": false + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/LambdaFunction", + "/properties/InlineRecipe" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/ComponentName", + "/properties/ComponentVersion" + ], + "writeOnlyProperties": [ + "/properties/LambdaFunction", + "/properties/InlineRecipe" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/ComponentName", + "/properties/ComponentVersion" + ] + ], + "handlers": { + "create": { + "permissions": [ + "greengrass:CreateComponentVersion", + "greengrass:DescribeComponent", + "greengrass:ListTagsForResource", + "greengrass:TagResource", + "lambda:GetFunction", + "s3:GetObject" + ] + }, + "read": { + "permissions": [ + "greengrass:DescribeComponent", + "greengrass:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "greengrass:DescribeComponent", + "greengrass:ListTagsForResource", + "greengrass:TagResource", + "greengrass:UntagResource" + ] + }, + "delete": { + "permissions": [ + "greengrass:DeleteComponent" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "Arn": { + "type": "string" + } + }, + "required": [ + "Arn" + ] + }, + "permissions": [ + "greengrass:ListComponentVersions" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/greengrassv2/deployment.json b/internal/aws/cfn/schemas/aws/greengrassv2/deployment.json new file mode 100644 index 00000000..d73c382d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/greengrassv2/deployment.json @@ -0,0 +1,393 @@ +{ + "typeName": "AWS::GreengrassV2::Deployment", + "description": "Resource for Greengrass V2 deployment.", + "definitions": { + "ComponentDeploymentSpecification": { + "type": "object", + "properties": { + "ComponentVersion": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "ConfigurationUpdate": { + "$ref": "#/definitions/ComponentConfigurationUpdate" + }, + "RunWith": { + "$ref": "#/definitions/ComponentRunWith" + } + }, + "additionalProperties": false + }, + "SystemResourceLimits": { + "type": "object", + "properties": { + "Memory": { + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 9223372036854771712 + }, + "Cpus": { + "type": "number", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "ComponentRunWith": { + "type": "object", + "properties": { + "PosixUser": { + "type": "string", + "minLength": 1 + }, + "SystemResourceLimits": { + "$ref": "#/definitions/SystemResourceLimits" + }, + "WindowsUser": { + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": false + }, + "ComponentConfigurationUpdate": { + "type": "object", + "properties": { + "Merge": { + "type": "string", + "minLength": 1, + "maxLength": 10485760 + }, + "Reset": { + "type": "array", + "items": { + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "insertionOrder": false + } + }, + "additionalProperties": false + }, + "DeploymentIoTJobConfiguration": { + "type": "object", + "properties": { + "JobExecutionsRolloutConfig": { + "$ref": "#/definitions/IoTJobExecutionsRolloutConfig" + }, + "AbortConfig": { + "$ref": "#/definitions/IoTJobAbortConfig" + }, + "TimeoutConfig": { + "$ref": "#/definitions/IoTJobTimeoutConfig" + } + }, + "additionalProperties": false + }, + "IoTJobExecutionsRolloutConfig": { + "type": "object", + "properties": { + "ExponentialRate": { + "$ref": "#/definitions/IoTJobExponentialRolloutRate" + }, + "MaximumPerMinute": { + "type": "integer", + "minimum": 1, + "maximum": 1000 + } + }, + "additionalProperties": false + }, + "IoTJobAbortConfig": { + "type": "object", + "properties": { + "CriteriaList": { + "type": "array", + "items": { + "$ref": "#/definitions/IoTJobAbortCriteria" + }, + "minItems": 1, + "insertionOrder": false + } + }, + "required": [ + "CriteriaList" + ], + "additionalProperties": false + }, + "IoTJobAbortCriteria": { + "type": "object", + "properties": { + "FailureType": { + "type": "string", + "enum": [ + "FAILED", + "REJECTED", + "TIMED_OUT", + "ALL" + ] + }, + "Action": { + "type": "string", + "enum": [ + "CANCEL" + ] + }, + "ThresholdPercentage": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "MinNumberOfExecutedThings": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + } + }, + "required": [ + "FailureType", + "Action", + "ThresholdPercentage", + "MinNumberOfExecutedThings" + ], + "additionalProperties": false + }, + "IoTJobTimeoutConfig": { + "type": "object", + "properties": { + "InProgressTimeoutInMinutes": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647 + } + }, + "additionalProperties": false + }, + "IoTJobExponentialRolloutRate": { + "type": "object", + "properties": { + "BaseRatePerMinute": { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + "IncrementFactor": { + "type": "number", + "minimum": 1, + "maximum": 5 + }, + "RateIncreaseCriteria": { + "$ref": "#/definitions/IoTJobRateIncreaseCriteria" + } + }, + "required": [ + "BaseRatePerMinute", + "IncrementFactor", + "RateIncreaseCriteria" + ], + "additionalProperties": false + }, + "IoTJobRateIncreaseCriteria": { + "type": "object", + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "NumberOfNotifiedThings": { + "$ref": "#/definitions/NumberOfThings" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "NumberOfSucceededThings": { + "$ref": "#/definitions/NumberOfThings" + } + } + } + ] + }, + "NumberOfThings": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + }, + "DeploymentPolicies": { + "type": "object", + "properties": { + "FailureHandlingPolicy": { + "type": "string", + "enum": [ + "ROLLBACK", + "DO_NOTHING" + ] + }, + "ComponentUpdatePolicy": { + "$ref": "#/definitions/DeploymentComponentUpdatePolicy" + }, + "ConfigurationValidationPolicy": { + "$ref": "#/definitions/DeploymentConfigurationValidationPolicy" + } + }, + "additionalProperties": false + }, + "DeploymentComponentUpdatePolicy": { + "type": "object", + "properties": { + "TimeoutInSeconds": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + }, + "Action": { + "type": "string", + "enum": [ + "NOTIFY_COMPONENTS", + "SKIP_NOTIFY_COMPONENTS" + ] + } + }, + "additionalProperties": false + }, + "DeploymentConfigurationValidationPolicy": { + "type": "object", + "properties": { + "TimeoutInSeconds": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + } + }, + "additionalProperties": false + } + }, + "properties": { + "TargetArn": { + "type": "string", + "pattern": "arn:[^:]*:iot:[^:]*:[0-9]+:(thing|thinggroup)/.+" + }, + "ParentTargetArn": { + "type": "string", + "pattern": "arn:[^:]*:iot:[^:]*:[0-9]+:thinggroup/.+" + }, + "DeploymentId": { + "type": "string", + "pattern": ".+" + }, + "DeploymentName": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Components": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/ComponentDeploymentSpecification" + } + }, + "additionalProperties": false + }, + "IotJobConfiguration": { + "$ref": "#/definitions/DeploymentIoTJobConfiguration" + }, + "DeploymentPolicies": { + "$ref": "#/definitions/DeploymentPolicies" + }, + "Tags": { + "type": "object", + "patternProperties": { + ".*": { + "type": "string", + "maxLength": 256 + } + }, + "maxProperties": 200, + "additionalProperties": false + } + }, + "required": [ + "TargetArn" + ], + "primaryIdentifier": [ + "/properties/DeploymentId" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/DeploymentId" + ], + "createOnlyProperties": [ + "/properties/TargetArn", + "/properties/ParentTargetArn", + "/properties/DeploymentName", + "/properties/Components", + "/properties/IotJobConfiguration", + "/properties/DeploymentPolicies" + ], + "handlers": { + "create": { + "permissions": [ + "greengrass:CreateDeployment", + "greengrass:GetDeployment", + "greengrass:TagResource", + "iot:CancelJob", + "iot:CreateJob", + "iot:DeleteThingShadow", + "iot:DescribeJob", + "iot:DescribeThing", + "iot:DescribeThingGroup", + "iot:GetThingShadow", + "iot:UpdateJob", + "iot:UpdateThingShadow" + ] + }, + "read": { + "permissions": [ + "greengrass:GetDeployment", + "iot:DescribeJob", + "iot:DescribeThing", + "iot:DescribeThingGroup", + "iot:GetThingShadow" + ] + }, + "update": { + "permissions": [ + "greengrass:GetDeployment", + "greengrass:TagResource", + "greengrass:UntagResource", + "iot:DescribeJob" + ] + }, + "delete": { + "permissions": [ + "greengrass:DeleteDeployment", + "greengrass:CancelDeployment", + "iot:CancelJob", + "iot:DeleteJob", + "iot:DescribeJob" + ] + }, + "list": { + "permissions": [ + "greengrass:ListDeployments", + "iot:DescribeJob", + "iot:DescribeThing", + "iot:DescribeThingGroup", + "iot:GetThingShadow" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/groundstation/config.json b/internal/aws/cfn/schemas/aws/groundstation/config.json new file mode 100644 index 00000000..d483da0f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/groundstation/config.json @@ -0,0 +1,338 @@ +{ + "typeName": "AWS::GroundStation::Config", + "description": "AWS Ground Station config resource type for CloudFormation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ground-station.git", + "definitions": { + "JsonString": { + "type": "string", + "pattern": "^[{}\\[\\]:.,\"0-9A-z\\-_\\s]{1,8192}$" + }, + "ConfigData": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "properties": { + "AntennaDownlinkConfig": { + "$ref": "#/definitions/AntennaDownlinkConfig" + }, + "TrackingConfig": { + "$ref": "#/definitions/TrackingConfig" + }, + "DataflowEndpointConfig": { + "$ref": "#/definitions/DataflowEndpointConfig" + }, + "AntennaDownlinkDemodDecodeConfig": { + "$ref": "#/definitions/AntennaDownlinkDemodDecodeConfig" + }, + "AntennaUplinkConfig": { + "$ref": "#/definitions/AntennaUplinkConfig" + }, + "UplinkEchoConfig": { + "$ref": "#/definitions/UplinkEchoConfig" + }, + "S3RecordingConfig": { + "$ref": "#/definitions/S3RecordingConfig" + } + }, + "additionalProperties": false + }, + "EirpUnits": { + "type": "string", + "enum": [ + "dBW" + ] + }, + "Eirp": { + "type": "object", + "properties": { + "Value": { + "type": "number" + }, + "Units": { + "$ref": "#/definitions/EirpUnits" + } + }, + "additionalProperties": false + }, + "FrequencyUnits": { + "type": "string", + "enum": [ + "GHz", + "MHz", + "kHz" + ] + }, + "BandwidthUnits": { + "type": "string", + "enum": [ + "GHz", + "MHz", + "kHz" + ] + }, + "FrequencyBandwidth": { + "type": "object", + "properties": { + "Value": { + "type": "number" + }, + "Units": { + "$ref": "#/definitions/BandwidthUnits" + } + }, + "additionalProperties": false + }, + "Frequency": { + "type": "object", + "properties": { + "Value": { + "type": "number" + }, + "Units": { + "$ref": "#/definitions/FrequencyUnits" + } + }, + "additionalProperties": false + }, + "Polarization": { + "type": "string", + "enum": [ + "LEFT_HAND", + "RIGHT_HAND", + "NONE" + ] + }, + "S3KeyPrefix": { + "type": "string", + "pattern": "^([a-zA-Z0-9_\\-=/]|\\{satellite_id\\}|\\{config\\-name}|\\{s3\\-config-id}|\\{year\\}|\\{month\\}|\\{day\\}){1,900}$" + }, + "BucketArn": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "UplinkSpectrumConfig": { + "type": "object", + "properties": { + "CenterFrequency": { + "$ref": "#/definitions/Frequency" + }, + "Polarization": { + "$ref": "#/definitions/Polarization" + } + }, + "additionalProperties": false + }, + "SpectrumConfig": { + "type": "object", + "properties": { + "CenterFrequency": { + "$ref": "#/definitions/Frequency" + }, + "Bandwidth": { + "$ref": "#/definitions/FrequencyBandwidth" + }, + "Polarization": { + "$ref": "#/definitions/Polarization" + } + }, + "additionalProperties": false + }, + "AntennaDownlinkConfig": { + "type": "object", + "properties": { + "SpectrumConfig": { + "$ref": "#/definitions/SpectrumConfig" + } + }, + "additionalProperties": false + }, + "TrackingConfig": { + "type": "object", + "properties": { + "Autotrack": { + "type": "string", + "enum": [ + "REQUIRED", + "PREFERRED", + "REMOVED" + ] + } + }, + "additionalProperties": false + }, + "DataflowEndpointConfig": { + "type": "object", + "properties": { + "DataflowEndpointName": { + "type": "string" + }, + "DataflowEndpointRegion": { + "type": "string" + } + }, + "additionalProperties": false + }, + "DemodulationConfig": { + "type": "object", + "properties": { + "UnvalidatedJSON": { + "$ref": "#/definitions/JsonString" + } + }, + "additionalProperties": false + }, + "DecodeConfig": { + "type": "object", + "properties": { + "UnvalidatedJSON": { + "$ref": "#/definitions/JsonString" + } + }, + "additionalProperties": false + }, + "AntennaDownlinkDemodDecodeConfig": { + "type": "object", + "properties": { + "SpectrumConfig": { + "$ref": "#/definitions/SpectrumConfig" + }, + "DemodulationConfig": { + "$ref": "#/definitions/DemodulationConfig" + }, + "DecodeConfig": { + "$ref": "#/definitions/DecodeConfig" + } + }, + "additionalProperties": false + }, + "AntennaUplinkConfig": { + "type": "object", + "properties": { + "SpectrumConfig": { + "$ref": "#/definitions/UplinkSpectrumConfig" + }, + "TargetEirp": { + "$ref": "#/definitions/Eirp" + }, + "TransmitDisabled": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "UplinkEchoConfig": { + "type": "object", + "properties": { + "Enabled": { + "type": "boolean" + }, + "AntennaUplinkConfigArn": { + "type": "string" + } + }, + "additionalProperties": false + }, + "S3RecordingConfig": { + "type": "object", + "properties": { + "BucketArn": { + "$ref": "#/definitions/BucketArn" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "Prefix": { + "$ref": "#/definitions/S3KeyPrefix" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,128}$" + }, + "Value": { + "type": "string", + "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,256}$" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "type": "string", + "pattern": "^[ a-zA-Z0-9_:-]{1,256}$" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Type": { + "type": "string" + }, + "ConfigData": { + "$ref": "#/definitions/ConfigData" + }, + "Arn": { + "type": "string" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "Name", + "ConfigData" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "groundstation:CreateConfig", + "groundstation:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "groundstation:GetConfig", + "groundstation:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "groundstation:UpdateConfig", + "groundstation:ListTagsForResource", + "groundstation:TagResource", + "groundstation:UntagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "groundstation:DeleteConfig" + ] + }, + "list": { + "permissions": [ + "groundstation:ListConfigs" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/groundstation/dataflowendpointgroup.json b/internal/aws/cfn/schemas/aws/groundstation/dataflowendpointgroup.json new file mode 100644 index 00000000..bec69969 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/groundstation/dataflowendpointgroup.json @@ -0,0 +1,271 @@ +{ + "typeName": "AWS::GroundStation::DataflowEndpointGroup", + "description": "AWS Ground Station DataflowEndpointGroup schema for CloudFormation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ground-station.git", + "definitions": { + "SocketAddress": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Port": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "AgentStatus": { + "description": "The status of AgentEndpoint.", + "type": "string", + "enum": [ + "SUCCESS", + "FAILED", + "ACTIVE", + "INACTIVE" + ] + }, + "AuditResults": { + "description": "The results of the audit.", + "type": "string", + "enum": [ + "HEALTHY", + "UNHEALTHY" + ] + }, + "IntegerRange": { + "description": "An integer range that has a minimum and maximum value.", + "type": "object", + "properties": { + "Minimum": { + "description": "A minimum value.", + "type": "integer" + }, + "Maximum": { + "description": "A maximum value.", + "type": "integer" + } + }, + "additionalProperties": false + }, + "RangedSocketAddress": { + "description": "A socket address with a port range.", + "type": "object", + "properties": { + "Name": { + "description": "IPv4 socket address.", + "type": "string" + }, + "PortRange": { + "description": "Port range of a socket address.", + "$ref": "#/definitions/IntegerRange" + } + }, + "additionalProperties": false + }, + "ConnectionDetails": { + "description": "Egress address of AgentEndpoint with an optional mtu.", + "type": "object", + "properties": { + "SocketAddress": { + "$ref": "#/definitions/SocketAddress" + }, + "Mtu": { + "description": "Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.", + "type": "integer" + } + }, + "additionalProperties": false + }, + "RangedConnectionDetails": { + "description": "Ingress address of AgentEndpoint with a port range and an optional mtu.", + "type": "object", + "properties": { + "SocketAddress": { + "$ref": "#/definitions/RangedSocketAddress" + }, + "Mtu": { + "description": "Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.", + "type": "integer" + } + }, + "additionalProperties": false + }, + "AwsGroundStationAgentEndpoint": { + "description": "Information about AwsGroundStationAgentEndpoint.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": "^[ a-zA-Z0-9_:-]{1,256}$" + }, + "EgressAddress": { + "$ref": "#/definitions/ConnectionDetails" + }, + "IngressAddress": { + "$ref": "#/definitions/RangedConnectionDetails" + }, + "AgentStatus": { + "$ref": "#/definitions/AgentStatus" + }, + "AuditResults": { + "$ref": "#/definitions/AuditResults" + } + }, + "additionalProperties": false + }, + "DataflowEndpoint": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": "^[ a-zA-Z0-9_:-]{1,256}$" + }, + "Address": { + "$ref": "#/definitions/SocketAddress" + }, + "Mtu": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "SecurityDetails": { + "type": "object", + "properties": { + "SubnetIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "RoleArn": { + "type": "string" + } + }, + "additionalProperties": false + }, + "EndpointDetails": { + "type": "object", + "properties": { + "SecurityDetails": { + "$ref": "#/definitions/SecurityDetails" + }, + "Endpoint": { + "$ref": "#/definitions/DataflowEndpoint" + }, + "AwsGroundStationAgentEndpoint": { + "$ref": "#/definitions/AwsGroundStationAgentEndpoint" + } + }, + "oneOf": [ + { + "required": [ + "Endpoint", + "SecurityDetails" + ] + }, + { + "required": [ + "AwsGroundStationAgentEndpoint" + ] + } + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,128}$" + }, + "Value": { + "type": "string", + "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,256}$" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "EndpointDetails": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/EndpointDetails" + } + }, + "ContactPrePassDurationSeconds": { + "type": "integer", + "description": "Amount of time, in seconds, before a contact starts that the Ground Station Dataflow Endpoint Group will be in a PREPASS state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the PREPASS state." + }, + "ContactPostPassDurationSeconds": { + "type": "integer", + "description": "Amount of time, in seconds, after a contact ends that the Ground Station Dataflow Endpoint Group will be in a POSTPASS state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the POSTPASS state." + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "EndpointDetails" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "groundstation:CreateDataflowEndpointGroup", + "groundstation:GetDataflowEndpointGroup", + "groundstation:TagResource", + "iam:PassRole", + "ec2:describeAddresses", + "ec2:describeNetworkInterfaces", + "iam:createServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "groundstation:GetDataflowEndpointGroup", + "groundstation:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "groundstation:DeleteDataflowEndpointGroup", + "groundstation:GetDataflowEndpointGroup" + ] + }, + "list": { + "permissions": [ + "groundstation:ListDataflowEndpointGroups" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/groundstation/missionprofile.json b/internal/aws/cfn/schemas/aws/groundstation/missionprofile.json new file mode 100644 index 00000000..43affa3f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/groundstation/missionprofile.json @@ -0,0 +1,173 @@ +{ + "typeName": "AWS::GroundStation::MissionProfile", + "description": "AWS Ground Station Mission Profile resource type for CloudFormation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ground-station.git", + "definitions": { + "DataflowEdge": { + "type": "object", + "properties": { + "Source": { + "type": "string" + }, + "Destination": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,128}$" + }, + "Value": { + "type": "string", + "pattern": "^[ a-zA-Z0-9\\+\\-=._:/@]{1,256}$" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "StreamsKmsKey": { + "type": "object", + "properties": { + "KmsKeyArn": { + "type": "string" + }, + "KmsAliasArn": { + "type": "string" + } + }, + "oneOf": [ + { + "required": [ + "KmsKeyArn" + ] + }, + { + "required": [ + "KmsAliasArn" + ] + } + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "A name used to identify a mission profile.", + "type": "string", + "pattern": "^[ a-zA-Z0-9_:-]{1,256}$" + }, + "ContactPrePassDurationSeconds": { + "description": "Pre-pass time needed before the contact.", + "type": "integer" + }, + "ContactPostPassDurationSeconds": { + "description": "Post-pass time needed after the contact.", + "type": "integer" + }, + "MinimumViableContactDurationSeconds": { + "description": "Visibilities with shorter duration than the specified minimum viable contact duration will be ignored when searching for available contacts.", + "type": "integer" + }, + "StreamsKmsKey": { + "description": "The ARN of a KMS Key used for encrypting data during transmission from the source to destination locations.", + "$ref": "#/definitions/StreamsKmsKey" + }, + "StreamsKmsRole": { + "description": "The ARN of the KMS Key or Alias Key role used to define permissions on KMS Key usage.", + "type": "string" + }, + "DataflowEdges": { + "description": "", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/DataflowEdge" + } + }, + "TrackingConfigArn": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Region": { + "type": "string" + } + }, + "required": [ + "Name", + "MinimumViableContactDurationSeconds", + "DataflowEdges", + "TrackingConfigArn" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/Region" + ], + "primaryIdentifier": [ + "/properties/Id", + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "groundstation:CreateMissionProfile", + "groundstation:GetMissionProfile", + "groundstation:TagResource", + "iam:PassRole", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "groundstation:GetMissionProfile", + "groundstation:ListTagsForResource", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "update": { + "permissions": [ + "groundstation:UpdateMissionProfile", + "groundstation:GetMissionProfile", + "groundstation:ListTagsForResource", + "groundstation:TagResource", + "groundstation:UntagResource", + "iam:PassRole", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "delete": { + "permissions": [ + "groundstation:DeleteMissionProfile", + "groundstation:GetMissionProfile" + ] + }, + "list": { + "permissions": [ + "groundstation:ListMissionProfiles" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/guardduty/detector.json b/internal/aws/cfn/schemas/aws/guardduty/detector.json new file mode 100644 index 00000000..1eea7305 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/guardduty/detector.json @@ -0,0 +1,217 @@ +{ + "typeName": "AWS::GuardDuty::Detector", + "description": "Resource Type definition for AWS::GuardDuty::Detector", + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "FindingPublishingFrequency": { + "type": "string" + }, + "Enable": { + "type": "boolean" + }, + "DataSources": { + "$ref": "#/definitions/CFNDataSourceConfigurations" + }, + "Features": { + "type": "array", + "items": { + "$ref": "#/definitions/CFNFeatureConfiguration" + } + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/TagItem" + } + } + }, + "definitions": { + "TagItem": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "CFNS3LogsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enable": { + "type": "boolean" + } + }, + "required": [ + "Enable" + ] + }, + "CFNKubernetesAuditLogsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enable": { + "type": "boolean" + } + }, + "required": [ + "Enable" + ] + }, + "CFNKubernetesConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AuditLogs": { + "$ref": "#/definitions/CFNKubernetesAuditLogsConfiguration" + } + }, + "required": [ + "AuditLogs" + ] + }, + "CFNDataSourceConfigurations": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Logs": { + "$ref": "#/definitions/CFNS3LogsConfiguration" + }, + "Kubernetes": { + "$ref": "#/definitions/CFNKubernetesConfiguration" + }, + "MalwareProtection": { + "$ref": "#/definitions/CFNMalwareProtectionConfiguration" + } + } + }, + "CFNMalwareProtectionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScanEc2InstanceWithFindings": { + "$ref": "#/definitions/CFNScanEc2InstanceWithFindingsConfiguration" + } + } + }, + "CFNScanEc2InstanceWithFindingsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "EbsVolumes": { + "type": "boolean" + } + } + }, + "CFNFeatureConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "maxLength": 128 + }, + "Status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "AdditionalConfiguration": { + "type": "array", + "items": { + "$ref": "#/definitions/CFNFeatureAdditionalConfiguration" + } + } + }, + "required": [ + "Name", + "Status" + ] + }, + "CFNFeatureAdditionalConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Status": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + } + } + }, + "required": [ + "Enable" + ], + "handlers": { + "create": { + "permissions": [ + "guardduty:CreateDetector", + "guardduty:GetDetector", + "guardduty:TagResource", + "iam:CreateServiceLinkedRole", + "iam:GetRole" + ] + }, + "read": { + "permissions": [ + "guardduty:GetDetector" + ] + }, + "delete": { + "permissions": [ + "guardduty:ListDetectors", + "guardduty:DeleteDetector", + "guardduty:GetDetector" + ] + }, + "update": { + "permissions": [ + "guardduty:UpdateDetector", + "guardduty:GetDetector", + "guardduty:ListDetectors", + "iam:CreateServiceLinkedRole", + "iam:GetRole" + ] + }, + "list": { + "permissions": [ + "guardduty:ListDetectors" + ] + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/guardduty/filter.json b/internal/aws/cfn/schemas/aws/guardduty/filter.json new file mode 100644 index 00000000..035fdc62 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/guardduty/filter.json @@ -0,0 +1,194 @@ +{ + "typeName": "AWS::GuardDuty::Filter", + "description": "Resource Type definition for AWS::GuardDuty::Filter", + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "Action": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "DetectorId": { + "type": "string", + "minLength": 1, + "maxLength": 300 + }, + "FindingCriteria": { + "$ref": "#/definitions/FindingCriteria" + }, + "Rank": { + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/TagItem" + } + } + }, + "definitions": { + "TagItem": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "Condition": { + "type": "object", + "additionalProperties": false, + "properties": { + "Lt": { + "type": "integer" + }, + "Gt": { + "type": "integer" + }, + "Gte": { + "type": "integer" + }, + "Neq": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Eq": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Lte": { + "type": "integer" + }, + "Equals": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "GreaterThan": { + "type": "integer", + "format": "int64" + }, + "GreaterThanOrEqual": { + "type": "integer", + "format": "int64" + }, + "LessThan": { + "type": "integer", + "format": "int64" + }, + "LessThanOrEqual": { + "type": "integer", + "format": "int64" + }, + "NotEquals": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "FindingCriteria": { + "type": "object", + "additionalProperties": false, + "properties": { + "Criterion": { + "type": "object", + "patternProperties": { + "^.+$": { + "$ref": "#/definitions/Condition" + } + }, + "additionalProperties": false + } + } + } + }, + "required": [ + "FindingCriteria" + ], + "primaryIdentifier": [ + "/properties/DetectorId", + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/DetectorId", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "guardduty:CreateFilter", + "guardduty:GetFilter", + "guardduty:TagResource" + ] + }, + "read": { + "permissions": [ + "guardduty:GetFilter" + ] + }, + "delete": { + "permissions": [ + "guardduty:ListDetectors", + "guardduty:ListFilters", + "guardduty:GetFilter", + "guardduty:DeleteFilter" + ] + }, + "update": { + "permissions": [ + "guardduty:UpdateFilter", + "guardduty:GetFilter", + "guardduty:ListFilters" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DetectorId": { + "type": "string" + } + } + }, + "permissions": [ + "guardduty:ListFilters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/guardduty/ipset.json b/internal/aws/cfn/schemas/aws/guardduty/ipset.json new file mode 100644 index 00000000..dbb8f0e3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/guardduty/ipset.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::GuardDuty::IPSet", + "description": "Resource Type definition for AWS::GuardDuty::IPSet", + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "Id": { + "type": "string" + }, + "Format": { + "type": "string" + }, + "Activate": { + "type": "boolean" + }, + "DetectorId": { + "type": "string", + "minLength": 1, + "maxLength": 300 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 300 + }, + "Location": { + "type": "string", + "minLength": 1, + "maxLength": 300 + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/TagItem" + } + } + }, + "definitions": { + "TagItem": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "Format", + "Location" + ], + "createOnlyProperties": [ + "/properties/Format", + "/properties/DetectorId" + ], + "writeOnlyProperties": [ + "/properties/Activate" + ], + "primaryIdentifier": [ + "/properties/Id", + "/properties/DetectorId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "guardduty:CreateIPSet", + "guardduty:GetIPSet", + "guardduty:TagResource", + "iam:PutRolePolicy" + ] + }, + "read": { + "permissions": [ + "guardduty:GetIPSet" + ] + }, + "delete": { + "permissions": [ + "guardduty:GetDetector", + "guardduty:ListDetectors", + "guardduty:ListIPSets", + "guardduty:GetIPSet", + "guardduty:DeleteIPSet", + "iam:DeleteRolePolicy" + ] + }, + "update": { + "permissions": [ + "guardduty:UpdateIPSet", + "guardduty:GetIPSet", + "guardduty:ListIPSets", + "iam:PutRolePolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DetectorId": { + "type": "string" + } + } + }, + "permissions": [ + "guardduty:ListIPSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/guardduty/master.json b/internal/aws/cfn/schemas/aws/guardduty/master.json new file mode 100644 index 00000000..3cbafae9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/guardduty/master.json @@ -0,0 +1,73 @@ +{ + "typeName": "AWS::GuardDuty::Master", + "description": "GuardDuty Master resource schema", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-guardduty.git", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "MasterId": { + "description": "ID of the account used as the master account.", + "type": "string" + }, + "InvitationId": { + "description": "Value used to validate the master account to the member account.", + "type": "string" + }, + "DetectorId": { + "description": "Unique ID of the detector of the GuardDuty member account.", + "type": "string" + } + }, + "required": [ + "MasterId", + "DetectorId" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/MasterId", + "/properties/InvitationId", + "/properties/DetectorId" + ], + "primaryIdentifier": [ + "/properties/DetectorId", + "/properties/MasterId" + ], + "handlers": { + "create": { + "permissions": [ + "guardduty:ListInvitations", + "guardduty:AcceptInvitation", + "guardduty:GetMasterAccount" + ] + }, + "read": { + "permissions": [ + "guardduty:GetMasterAccount" + ] + }, + "delete": { + "permissions": [ + "guardduty:DisassociateFromMasterAccount" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DetectorId": { + "type": "string" + }, + "MasterId": { + "type": "string" + } + } + }, + "permissions": [ + "guardduty:GetMasterAccount" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/guardduty/member.json b/internal/aws/cfn/schemas/aws/guardduty/member.json new file mode 100644 index 00000000..9425ff3d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/guardduty/member.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::GuardDuty::Member", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-guardduty", + "description": "Resource Type definition for AWS::GuardDuty::Member", + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "Status": { + "type": "string" + }, + "MemberId": { + "type": "string" + }, + "Email": { + "type": "string" + }, + "Message": { + "type": "string" + }, + "DisableEmailNotification": { + "type": "boolean" + }, + "DetectorId": { + "type": "string" + } + }, + "required": [ + "Email" + ], + "primaryIdentifier": [ + "/properties/DetectorId", + "/properties/MemberId" + ], + "createOnlyProperties": [ + "/properties/DetectorId", + "/properties/MemberId" + ], + "writeOnlyProperties": [ + "/properties/DisableEmailNotification", + "/properties/Message" + ], + "handlers": { + "create": { + "permissions": [ + "guardduty:CreateMembers", + "guardduty:GetMembers" + ] + }, + "read": { + "permissions": [ + "guardduty:GetMembers" + ] + }, + "delete": { + "permissions": [ + "guardduty:GetMembers", + "guardduty:DisassociateMembers", + "guardduty:DeleteMembers" + ] + }, + "update": { + "permissions": [ + "guardduty:GetMembers", + "guardduty:CreateMembers", + "guardduty:DisassociateMembers", + "guardduty:StartMonitoringMembers", + "guardduty:StopMonitoringMembers", + "guardduty:InviteMembers" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DetectorId": { + "type": "string" + } + } + }, + "permissions": [ + "guardduty:ListMembers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/guardduty/threatintelset.json b/internal/aws/cfn/schemas/aws/guardduty/threatintelset.json new file mode 100644 index 00000000..c8e4ea66 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/guardduty/threatintelset.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::GuardDuty::ThreatIntelSet", + "description": "Resource Type definition for AWS::GuardDuty::ThreatIntelSet", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-guardduty", + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "Id": { + "type": "string" + }, + "Format": { + "type": "string", + "minLength": 1, + "maxLength": 300 + }, + "Activate": { + "type": "boolean" + }, + "DetectorId": { + "type": "string", + "minLength": 1, + "maxLength": 32 + }, + "Name": { + "type": "string" + }, + "Location": { + "type": "string", + "minLength": 1, + "maxLength": 300 + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/TagItem" + } + } + }, + "definitions": { + "TagItem": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "Format", + "Location" + ], + "primaryIdentifier": [ + "/properties/Id", + "/properties/DetectorId" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Format", + "/properties/DetectorId" + ], + "writeOnlyProperties": [ + "/properties/Activate" + ], + "handlers": { + "create": { + "permissions": [ + "guardduty:CreateThreatIntelSet", + "guardduty:GetThreatIntelSet", + "guardduty:TagResource", + "iam:PutRolePolicy" + ] + }, + "read": { + "permissions": [ + "guardduty:GetThreatIntelSet" + ] + }, + "delete": { + "permissions": [ + "guardduty:ListDetectors", + "guardduty:ListThreatIntelSets", + "guardduty:DeleteThreatIntelSet", + "guardduty:GetThreatIntelSet", + "iam:DeleteRolePolicy" + ] + }, + "update": { + "permissions": [ + "guardduty:UpdateThreatIntelSet", + "guardduty:GetThreatIntelSet", + "guardduty:ListThreatIntelSets", + "iam:PutRolePolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DetectorId": { + "type": "string" + } + } + }, + "permissions": [ + "guardduty:ListThreatIntelSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/healthlake/fhirdatastore.json b/internal/aws/cfn/schemas/aws/healthlake/fhirdatastore.json new file mode 100644 index 00000000..44ab8c20 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/healthlake/fhirdatastore.json @@ -0,0 +1,296 @@ +{ + "typeName": "AWS::HealthLake::FHIRDatastore", + "description": "HealthLake FHIR Datastore", + "documentationUrl": "https://docs.aws.amazon.com/healthlake/latest/devguide/working-with-FHIR-healthlake.html", + "definitions": { + "CreatedAt": { + "description": "The time that a Data Store was created.", + "type": "object", + "properties": { + "Seconds": { + "description": "Seconds since epoch.", + "type": "string" + }, + "Nanos": { + "description": "Nanoseconds.", + "type": "integer" + } + }, + "required": [ + "Seconds", + "Nanos" + ], + "additionalProperties": false + }, + "DatastoreArn": { + "description": "The Amazon Resource Name used in the creation of the Data Store.", + "type": "string", + "pattern": "^arn:aws((-us-gov)|(-iso)|(-iso-b)|(-cn))?:healthlake:[a-zA-Z0-9-]+:[0-9]{12}:datastore/.+?" + }, + "DatastoreEndpoint": { + "description": "The AWS endpoint for the Data Store. Each Data Store will have it's own endpoint with Data Store ID in the endpoint URL.", + "type": "string", + "maxLength": 10000 + }, + "DatastoreId": { + "description": "The AWS-generated ID number for the Data Store.", + "type": "string", + "minLength": 1, + "maxLength": 32 + }, + "DatastoreName": { + "description": "The user-generated name for the Data Store.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "DatastoreStatus": { + "description": "The status of the Data Store. Possible statuses are 'CREATING', 'ACTIVE', 'DELETING', or 'DELETED'.", + "type": "string", + "enum": [ + "CREATING", + "ACTIVE", + "DELETING", + "DELETED" + ] + }, + "DatastoreTypeVersion": { + "description": "The FHIR version. Only R4 version data is supported.", + "type": "string", + "enum": [ + "R4" + ] + }, + "PreloadDataConfig": { + "description": "The preloaded data configuration for the Data Store. Only data preloaded from Synthea is supported.", + "type": "object", + "properties": { + "PreloadDataType": { + "description": "The type of preloaded data. Only Synthea preloaded data is supported.", + "type": "string", + "enum": [ + "SYNTHEA" + ] + } + }, + "required": [ + "PreloadDataType" + ], + "additionalProperties": false + }, + "SseConfiguration": { + "description": "The server-side encryption key configuration for a customer provided encryption key.", + "type": "object", + "properties": { + "KmsEncryptionConfig": { + "$ref": "#/definitions/KmsEncryptionConfig" + } + }, + "required": [ + "KmsEncryptionConfig" + ], + "additionalProperties": false + }, + "KmsEncryptionConfig": { + "description": "The customer-managed-key (CMK) used when creating a Data Store. If a customer owned key is not specified, an AWS owned key will be used for encryption.", + "type": "object", + "properties": { + "CmkType": { + "description": "The type of customer-managed-key (CMK) used for encryption. The two types of supported CMKs are customer owned CMKs and AWS owned CMKs.", + "type": "string", + "enum": [ + "CUSTOMER_MANAGED_KMS_KEY", + "AWS_OWNED_KMS_KEY" + ] + }, + "KmsKeyId": { + "description": "The KMS encryption key id/alias used to encrypt the Data Store contents at rest.", + "type": "string", + "minLength": 1, + "maxLength": 400, + "pattern": "(arn:aws((-us-gov)|(-iso)|(-iso-b)|(-cn))?:kms:)?([a-z]{2}-[a-z]+(-[a-z]+)?-\\d:)?(\\d{12}:)?(((key/)?[a-zA-Z0-9-_]+)|(alias/[a-zA-Z0-9:/_-]+))" + } + }, + "required": [ + "CmkType" + ], + "additionalProperties": false + }, + "IdentityProviderConfiguration": { + "description": "The identity provider configuration for the datastore", + "type": "object", + "properties": { + "AuthorizationStrategy": { + "description": "Type of Authorization Strategy. The two types of supported Authorization strategies are SMART_ON_FHIR_V1 and AWS_AUTH.", + "type": "string", + "enum": [ + "SMART_ON_FHIR_V1", + "AWS_AUTH" + ] + }, + "FineGrainedAuthorizationEnabled": { + "description": "Flag to indicate if fine-grained authorization will be enabled for the datastore", + "type": "boolean" + }, + "Metadata": { + "description": "The JSON metadata elements for identity provider configuration.", + "type": "string" + }, + "IdpLambdaArn": { + "description": "The Amazon Resource Name (ARN) of the Lambda function that will be used to decode the access token created by the authorization server.", + "type": "string", + "minLength": 49, + "maxLength": 256, + "pattern": "arn:aws[-a-z]*:lambda:[a-z]{2}-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9\\-_\\.]+(:(\\$LATEST|[a-zA-Z0-9\\-_]+))?" + } + }, + "required": [ + "AuthorizationStrategy" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair. A tag consists of a tag key and a tag value. Tag keys and tag values are both required, but tag values can be empty (null) strings.", + "type": "object", + "properties": { + "Key": { + "description": "The key of the tag.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value of the tag.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "CreatedAt": { + "$ref": "#/definitions/CreatedAt" + }, + "DatastoreArn": { + "$ref": "#/definitions/DatastoreArn" + }, + "DatastoreEndpoint": { + "$ref": "#/definitions/DatastoreEndpoint" + }, + "DatastoreId": { + "$ref": "#/definitions/DatastoreId" + }, + "DatastoreName": { + "$ref": "#/definitions/DatastoreName" + }, + "DatastoreStatus": { + "$ref": "#/definitions/DatastoreStatus" + }, + "DatastoreTypeVersion": { + "$ref": "#/definitions/DatastoreTypeVersion" + }, + "PreloadDataConfig": { + "$ref": "#/definitions/PreloadDataConfig" + }, + "SseConfiguration": { + "$ref": "#/definitions/SseConfiguration" + }, + "IdentityProviderConfiguration": { + "$ref": "#/definitions/IdentityProviderConfiguration" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "DatastoreTypeVersion" + ], + "readOnlyProperties": [ + "/properties/CreatedAt", + "/properties/DatastoreArn", + "/properties/DatastoreEndpoint", + "/properties/DatastoreId", + "/properties/DatastoreStatus" + ], + "primaryIdentifier": [ + "/properties/DatastoreId" + ], + "createOnlyProperties": [ + "/properties/DatastoreName", + "/properties/DatastoreTypeVersion", + "/properties/PreloadDataConfig", + "/properties/SseConfiguration", + "/properties/KmsEncryptionConfig", + "/properties/IdentityProviderConfiguration" + ], + "handlers": { + "create": { + "permissions": [ + "healthlake:CreateFHIRDatastore", + "healthlake:DescribeFHIRDatastore", + "iam:PassRole", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "ram:GetResourceShareInvitations", + "ram:AcceptResourceShareInvitation", + "glue:CreateDatabase", + "glue:DeleteDatabase", + "lambda:InvokeFunction", + "healthlake:TagResource", + "healthlake:UntagResource", + "healthlake:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "healthlake:DescribeFHIRDatastore", + "healthlake:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "healthlake:TagResource", + "healthlake:UntagResource", + "healthlake:ListTagsForResource", + "healthlake:DescribeFHIRDatastore", + "iam:PassRole", + "iam:GetRole", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "healthlake:DeleteFHIRDatastore", + "healthlake:DescribeFHIRDatastore", + "iam:PassRole", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "ram:GetResourceShareInvitations", + "ram:AcceptResourceShareInvitation", + "glue:CreateDatabase", + "glue:DeleteDatabase" + ] + }, + "list": { + "permissions": [ + "healthlake:ListFHIRDatastores" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/accesskey.json b/internal/aws/cfn/schemas/aws/iam/accesskey.json new file mode 100644 index 00000000..4925db7a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/accesskey.json @@ -0,0 +1,36 @@ +{ + "typeName": "AWS::IAM::AccessKey", + "description": "Resource Type definition for AWS::IAM::AccessKey", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SecretAccessKey": { + "type": "string" + }, + "Serial": { + "type": "integer" + }, + "Status": { + "type": "string" + }, + "UserName": { + "type": "string" + } + }, + "required": [ + "UserName" + ], + "readOnlyProperties": [ + "/properties/SecretAccessKey", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/UserName", + "/properties/Serial" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iam/group.json b/internal/aws/cfn/schemas/aws/iam/group.json new file mode 100644 index 00000000..6d01736e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/group.json @@ -0,0 +1,123 @@ +{ + "typeName": "AWS::IAM::Group", + "description": "Creates a new group.\n For information about the number of groups you can create, see [Limitations on Entities](https://docs.aws.amazon.com/IAM/latest/UserGuide/LimitationsOnEntities.html) in the *User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "definitions": { + "Policy": { + "type": "object", + "additionalProperties": false, + "properties": { + "PolicyDocument": { + "description": "The policy document.", + "type": [ + "string", + "object" + ] + }, + "PolicyName": { + "description": "The friendly name (not ARN) identifying the policy.", + "type": "string" + } + }, + "required": [ + "PolicyDocument", + "PolicyName" + ], + "description": "Contains information about an attached policy.\n An attached policy is a managed policy that has been attached to a user, group, or role.\n For more information about managed policies, see [Managed Policies and Inline Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *User Guide*." + } + }, + "properties": { + "Arn": { + "description": "", + "type": "string" + }, + "GroupName": { + "description": "The name of the group to create. Do not include the path in this value.\n The group name must be unique within the account. Group names are not distinguished by case. For example, you cannot create groups named both \"ADMINS\" and \"admins\". If you don't specify a name, CFN generates a unique physical ID and uses that ID for the group name.\n If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.\n If you specify a name, you must specify the ``CAPABILITY_NAMED_IAM`` value to acknowledge your template's capabilities. For more information, see [Acknowledging Resources in Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities).\n Naming an IAM resource can cause an unrecoverable error if you reuse the same template in multiple Regions. To prevent this, we recommend using ``Fn::Join`` and ``AWS::Region`` to create a Region-specific name, as in the following example: ``{\"Fn::Join\": [\"\", [{\"Ref\": \"AWS::Region\"}, {\"Ref\": \"MyResourceName\"}]]}``.", + "type": "string" + }, + "ManagedPolicyArns": { + "description": "The Amazon Resource Name (ARN) of the IAM policy you want to attach.\n For more information about ARNs, see [Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the *General Reference*.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Path": { + "description": "The path to the group. For more information about paths, see [IAM identifiers](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the *IAM User Guide*.\n This parameter is optional. If it is not included, it defaults to a slash (/).\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (``\\u0021``) through the DEL character (``\\u007F``), including most punctuation characters, digits, and upper and lowercased letters.", + "type": "string" + }, + "Policies": { + "description": "Adds or updates an inline policy document that is embedded in the specified IAM group. To view AWS::IAM::Group snippets, see [Declaring an Group Resource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-iam.html#scenario-iam-group).\n The name of each inline policy for a role, user, or group must be unique. If you don't choose unique names, updates to the IAM identity will fail. \n For information about limits on the number of inline policies that you can embed in a group, see [Limitations on Entities](https://docs.aws.amazon.com/IAM/latest/UserGuide/LimitationsOnEntities.html) in the *User Guide*.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Policy" + } + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/GroupName" + ], + "primaryIdentifier": [ + "/properties/GroupName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateGroup", + "iam:PutGroupPolicy", + "iam:AttachGroupPolicy", + "iam:GetGroupPolicy", + "iam:GetGroup" + ] + }, + "read": { + "permissions": [ + "iam:GetGroup", + "iam:ListGroupPolicies", + "iam:GetGroupPolicy", + "iam:ListAttachedGroupPolicies" + ] + }, + "update": { + "permissions": [ + "iam:GetGroup", + "iam:UpdateGroup", + "iam:DetachGroupPolicy", + "iam:AttachGroupPolicy", + "iam:DeleteGroupPolicy", + "iam:PutGroupPolicy", + "iam:GetGroupPolicy" + ] + }, + "delete": { + "permissions": [ + "iam:GetGroup", + "iam:DeleteGroup", + "iam:ListAttachedGroupPolicies", + "iam:ListGroupPolicies", + "iam:DetachGroupPolicy", + "iam:DeleteGroupPolicy", + "iam:GetGroupPolicy" + ] + }, + "list": { + "permissions": [ + "iam:ListGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/grouppolicy.json b/internal/aws/cfn/schemas/aws/iam/grouppolicy.json new file mode 100644 index 00000000..3007759e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/grouppolicy.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::IAM::GroupPolicy", + "description": "Adds or updates an inline policy document that is embedded in the specified IAM group.\n A group can also have managed policies attached to it. To attach a managed policy to a group, use [AWS::IAM::Group](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html). To create a new managed policy, use [AWS::IAM::ManagedPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html). For information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *IAM User Guide*.\n For information about the maximum number of inline policies that you can embed in a group, see [IAM and quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the *IAM User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "additionalProperties": false, + "properties": { + "PolicyDocument": { + "description": "The policy document.\n You must provide policies in JSON format in IAM. However, for CFN templates formatted in YAML, you can provide the policy in JSON or YAML format. CFN always converts a YAML policy to JSON format before submitting it to IAM.\n The [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex) used to validate this parameter is a string of characters consisting of the following:\n + Any printable ASCII character ranging from the space character (``\\u0020``) through the end of the ASCII character range\n + The printable characters in the Basic Latin and Latin-1 Supplement character set (through ``\\u00FF``)\n + The special characters tab (``\\u0009``), line feed (``\\u000A``), and carriage return (``\\u000D``)", + "type": "object" + }, + "PolicyName": { + "description": "The name of the policy document.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-", + "type": "string" + }, + "GroupName": { + "description": "The name of the group to associate the policy with.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-.", + "type": "string" + } + }, + "required": [ + "PolicyName", + "GroupName" + ], + "createOnlyProperties": [ + "/properties/PolicyName", + "/properties/GroupName" + ], + "primaryIdentifier": [ + "/properties/PolicyName", + "/properties/GroupName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:PutGroupPolicy", + "iam:GetGroupPolicy" + ] + }, + "read": { + "permissions": [ + "iam:GetGroupPolicy" + ] + }, + "update": { + "permissions": [ + "iam:PutGroupPolicy", + "iam:GetGroupPolicy" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteGroupPolicy", + "iam:GetGroupPolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/instanceprofile.json b/internal/aws/cfn/schemas/aws/iam/instanceprofile.json new file mode 100644 index 00000000..767fde79 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/instanceprofile.json @@ -0,0 +1,77 @@ +{ + "typeName": "AWS::IAM::InstanceProfile", + "description": "Creates a new instance profile. For information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html).\n For information about the number of instance profiles you can create, see [object quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the *User Guide*.", + "additionalProperties": false, + "properties": { + "Path": { + "type": "string", + "description": "The path to the instance profile. For more information about paths, see [IAM Identifiers](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the *IAM User Guide*.\n This parameter is optional. If it is not included, it defaults to a slash (/).\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (``\\u0021``) through the DEL character (``\\u007F``), including most punctuation characters, digits, and upper and lowercased letters." + }, + "Roles": { + "type": "array", + "description": "The name of the role to associate with the instance profile. Only one role can be assigned to an EC2 instance at a time, and all applications on the instance share the same role and permissions.", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "InstanceProfileName": { + "type": "string", + "description": "The name of the instance profile to create.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-" + }, + "Arn": { + "type": "string", + "description": "" + } + }, + "taggable": false, + "required": [ + "Roles" + ], + "createOnlyProperties": [ + "/properties/InstanceProfileName", + "/properties/Path" + ], + "primaryIdentifier": [ + "/properties/InstanceProfileName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateInstanceProfile", + "iam:PassRole", + "iam:AddRoleToInstanceProfile", + "iam:GetInstanceProfile" + ] + }, + "read": { + "permissions": [ + "iam:GetInstanceProfile" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "iam:RemoveRoleFromInstanceProfile", + "iam:AddRoleToInstanceProfile", + "iam:GetInstanceProfile" + ] + }, + "delete": { + "permissions": [ + "iam:GetInstanceProfile", + "iam:RemoveRoleFromInstanceProfile", + "iam:DeleteInstanceProfile" + ] + }, + "list": { + "permissions": [ + "iam:ListInstanceProfiles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/managedpolicy.json b/internal/aws/cfn/schemas/aws/iam/managedpolicy.json new file mode 100644 index 00000000..a2000c2b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/managedpolicy.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::IAM::ManagedPolicy", + "description": "Resource Type definition for AWS::IAM::ManagedPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string", + "description": "A friendly description of the policy." + }, + "Groups": { + "insertionOrder": false, + "type": "array", + "description": "The name (friendly name, not ARN) of the group to attach the policy to.", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ManagedPolicyName": { + "type": "string", + "description": "The friendly name of the policy." + }, + "Path": { + "type": "string", + "description": "The path for the policy." + }, + "PolicyDocument": { + "type": [ + "object", + "string" + ], + "description": "The JSON policy document that you want to use as the content for the new policy." + }, + "Roles": { + "insertionOrder": false, + "type": "array", + "description": "The name (friendly name, not ARN) of the role to attach the policy to.", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Users": { + "insertionOrder": false, + "type": "array", + "description": "The name (friendly name, not ARN) of the IAM user to attach the policy to.", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "PolicyArn": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the managed policy" + }, + "AttachmentCount": { + "type": "integer", + "description": "The number of entities (users, groups, and roles) that the policy is attached to." + }, + "CreateDate": { + "type": "string", + "description": "The date and time, in ISO 8601 date-time format, when the policy was created." + }, + "UpdateDate": { + "type": "string", + "description": "The date and time, in ISO 8601 date-time format, when the policy was last updated." + }, + "DefaultVersionId": { + "type": "string", + "description": "The identifier for the version of the policy that is set as the default version." + }, + "IsAttachable": { + "type": "boolean", + "description": "Specifies whether the policy can be attached to an IAM user, group, or role." + }, + "PermissionsBoundaryUsageCount": { + "type": "integer", + "description": "The number of entities (users and roles) for which the policy is used to set the permissions boundary." + }, + "PolicyId": { + "type": "string", + "description": "The stable and unique string identifying the policy." + } + }, + "required": [ + "PolicyDocument" + ], + "createOnlyProperties": [ + "/properties/ManagedPolicyName", + "/properties/Description", + "/properties/Path" + ], + "readOnlyProperties": [ + "/properties/PolicyArn", + "/properties/AttachmentCount", + "/properties/CreateDate", + "/properties/DefaultVersionId", + "/properties/IsAttachable", + "/properties/PermissionsBoundaryUsageCount", + "/properties/PolicyId", + "/properties/UpdateDate" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "primaryIdentifier": [ + "/properties/PolicyArn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreatePolicy", + "iam:AttachGroupPolicy", + "iam:AttachUserPolicy", + "iam:AttachRolePolicy" + ] + }, + "read": { + "permissions": [ + "iam:GetPolicy", + "iam:ListEntitiesForPolicy", + "iam:GetPolicyVersion" + ] + }, + "update": { + "permissions": [ + "iam:DetachRolePolicy", + "iam:GetPolicy", + "iam:ListPolicyVersions", + "iam:DetachGroupPolicy", + "iam:DetachUserPolicy", + "iam:CreatePolicyVersion", + "iam:DeletePolicyVersion", + "iam:AttachGroupPolicy", + "iam:AttachUserPolicy", + "iam:AttachRolePolicy" + ] + }, + "delete": { + "permissions": [ + "iam:DetachRolePolicy", + "iam:GetPolicy", + "iam:ListPolicyVersions", + "iam:DetachGroupPolicy", + "iam:DetachUserPolicy", + "iam:DeletePolicyVersion", + "iam:DeletePolicy", + "iam:ListEntitiesForPolicy" + ] + }, + "list": { + "permissions": [ + "iam:ListPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/oidcprovider.json b/internal/aws/cfn/schemas/aws/iam/oidcprovider.json new file mode 100644 index 00000000..da25f5fd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/oidcprovider.json @@ -0,0 +1,125 @@ +{ + "typeName": "AWS::IAM::OIDCProvider", + "description": "Resource Type definition for AWS::IAM::OIDCProvider", + "additionalProperties": false, + "properties": { + "ClientIdList": { + "type": "array", + "insertionOrder": false, + "items": { + "minLength": 1, + "maxLength": 255, + "type": "string" + } + }, + "Url": { + "minLength": 1, + "maxLength": 255, + "type": "string" + }, + "ThumbprintList": { + "type": "array", + "insertionOrder": false, + "items": { + "minLength": 40, + "maxLength": 40, + "pattern": "[0-9A-Fa-f]{40}", + "type": "string" + }, + "maxItems": 5 + }, + "Arn": { + "description": "Amazon Resource Name (ARN) of the OIDC provider", + "minLength": 20, + "maxLength": 2048, + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "ThumbprintList" + ], + "createOnlyProperties": [ + "/properties/Url" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateOpenIDConnectProvider", + "iam:TagOpenIDConnectProvider", + "iam:GetOpenIDConnectProvider" + ] + }, + "read": { + "permissions": [ + "iam:GetOpenIDConnectProvider" + ] + }, + "update": { + "permissions": [ + "iam:UpdateOpenIDConnectProviderThumbprint", + "iam:RemoveClientIDFromOpenIDConnectProvider", + "iam:AddClientIDToOpenIDConnectProvider", + "iam:GetOpenIDConnectProvider", + "iam:TagOpenIDConnectProvider", + "iam:UntagOpenIDConnectProvider", + "iam:ListOpenIDConnectProviderTags" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteOpenIDConnectProvider" + ] + }, + "list": { + "permissions": [ + "iam:ListOpenIDConnectProvider", + "iam:GetOpenIDConnectProvider" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/policy.json b/internal/aws/cfn/schemas/aws/iam/policy.json new file mode 100644 index 00000000..fabfae44 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/policy.json @@ -0,0 +1,97 @@ +{ + "typeName": "AWS::IAM::Policy", + "description": "Adds or updates an inline policy document that is embedded in the specified IAM group, user or role.\n An IAM user can also have a managed policy attached to it. For information about policies, see [Managed Policies and Inline Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *User Guide*.\n The Groups, Roles, and Users properties are optional. However, you must specify at least one of these properties.\n For information about policy documents see [Creating policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) in the *User Guide*.\n For information about limits on the number of inline policies that you can embed in an identity, see [Limitations on Entities](https://docs.aws.amazon.com/IAM/latest/UserGuide/LimitationsOnEntities.html) in the *User Guide*.\n This resource does not support [drift detection](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). The following", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "properties": { + "Id": { + "description": "", + "type": "string" + }, + "Groups": { + "description": "The name of the group to associate the policy with.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "PolicyDocument": { + "description": "The policy document.\n You must provide policies in JSON format in IAM. However, for CFN templates formatted in YAML, you can provide the policy in JSON or YAML format. CFN always converts a YAML policy to JSON format before submitting it to IAM.\n The [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex) used to validate this parameter is a string of characters consisting of the following:\n + Any printable ASCII character ranging from the space character (``\\u0020``) through the end of the ASCII character range\n + The printable characters in the Basic Latin and Latin-1 Supplement character set (through ``\\u00FF``)\n + The special characters tab (``\\u0009``), line feed (``\\u000A``), and carriage return (``\\u000D``)", + "type": [ + "object", + "string" + ], + "minLength": 1, + "maxLength": 131072 + }, + "PolicyName": { + "description": "The name of the policy document.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Roles": { + "description": "The name of the role to associate the policy with.\n This parameter allows (per its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-\n If an external policy (such as ``AWS::IAM::Policy`` or ``AWS::IAM::ManagedPolicy``) has a ``Ref`` to a role and if a resource (such as ``AWS::ECS::Service``) also has a ``Ref`` to the same role, add a ``DependsOn`` attribute to the resource to make the resource depend on the external policy. This dependency ensures that the role's policy is available throughout the resource's lifecycle. For example, when you delete a stack with an ``AWS::ECS::Service`` resource, the ``DependsOn`` attribute ensures that CFN deletes the ``AWS::ECS::Service`` resource before deleting its role's policy.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Users": { + "description": "The name of the user to associate the policy with.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "taggable": false, + "required": [ + "PolicyDocument", + "PolicyName" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iam:GetUserPolicy", + "iam:GetRolePolicy", + "iam:GetGroupPolicy", + "iam:PutUserPolicy", + "iam:PutRolePolicy", + "iam:PutGroupPolicy" + ], + "timeoutInMinutes": 2160 + }, + "update": { + "permissions": [ + "iam:PutUserPolicy", + "iam:PutRolePolicy", + "iam:PutGroupPolicy", + "iam:DeleteRolePolicy", + "iam:DeleteUserPolicy", + "iam:DeleteGroupPolicy" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "iam:DeleteRolePolicy", + "iam:DeleteUserPolicy", + "iam:DeleteGroupPolicy" + ], + "timeoutInMinutes": 2160 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/role.json b/internal/aws/cfn/schemas/aws/iam/role.json new file mode 100644 index 00000000..c13bfa6a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/role.json @@ -0,0 +1,189 @@ +{ + "typeName": "AWS::IAM::Role", + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-resource-schema/master/src/main/resources/schema/provider.definition.schema.v1.json", + "description": "Creates a new role for your AWS-account.\n For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the *IAM User Guide*. For information about quotas for role names and the number of roles you can create, see [IAM and quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the *IAM User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "definitions": { + "Policy": { + "description": "Contains information about an attached policy.\n An attached policy is a managed policy that has been attached to a user, group, or role.\n For more information about managed policies, refer to [Managed Policies and Inline Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "PolicyDocument": { + "description": "The entire contents of the policy that defines permissions. For more information, see [Overview of JSON policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json).", + "type": [ + "string", + "object" + ] + }, + "PolicyName": { + "description": "The friendly name (not ARN) identifying the policy.", + "type": "string" + } + }, + "required": [ + "PolicyName", + "PolicyDocument" + ] + }, + "Tag": { + "description": "A structure that represents user-provided metadata that can be associated with an IAM resource. For more information about tagging, see [Tagging IAM resources](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) in the *IAM User Guide*.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name that can be used to look up or retrieve the associated value. For example, ``Department`` or ``Cost Center`` are common choices." + }, + "Value": { + "type": "string", + "description": "The value associated with this tag. For example, tags with a key name of ``Department`` could have values such as ``Human Resources``, ``Accounting``, and ``Support``. Tags with a key name of ``Cost Center`` might have values that consist of the number associated with the different cost centers in your company. Typically, many resources have tags with the same key name but with different values.\n AWS always interprets the tag ``Value`` as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "", + "type": "string" + }, + "AssumeRolePolicyDocument": { + "description": "The trust policy that is associated with this role. Trust policies define which entities can assume the role. You can associate only one trust policy with a role. For an example of a policy that can be used to assume a role, see [Template Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#aws-resource-iam-role--examples). For more information about the elements that you can use in an IAM policy, see [Policy Elements Reference](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) in the *User Guide*.", + "type": [ + "object", + "string" + ] + }, + "Description": { + "description": "A description of the role that you provide.", + "type": "string" + }, + "ManagedPolicyArns": { + "description": "A list of Amazon Resource Names (ARNs) of the IAM managed policies that you want to attach to the role.\n For more information about ARNs, see [Amazon Resource Names (ARNs) and Service Namespaces](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the *General Reference*.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "MaxSessionDuration": { + "description": "The maximum session duration (in seconds) that you want to set for the specified role. If you do not specify a value for this setting, the default value of one hour is applied. This setting can have a value from 1 hour to 12 hours.\n Anyone who assumes the role from the CLI or API can use the ``DurationSeconds`` API parameter or the ``duration-seconds`` CLI parameter to request a longer session. The ``MaxSessionDuration`` setting determines the maximum duration that can be requested using the ``DurationSeconds`` parameter. If users don't specify a value for the ``DurationSeconds`` parameter, their security credentials are valid for one hour by default. This applies when you use the ``AssumeRole*`` API operations or the ``assume-role*`` CLI operations but does not apply when you use those operations to create a console URL. For more information, see [Using IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) in the *IAM User Guide*.", + "type": "integer" + }, + "Path": { + "description": "The path to the role. For more information about paths, see [IAM Identifiers](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the *IAM User Guide*.\n This parameter is optional. If it is not included, it defaults to a slash (/).\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (``\\u0021``) through the DEL character (``\\u007F``), including most punctuation characters, digits, and upper and lowercased letters.", + "default": "/", + "type": "string" + }, + "PermissionsBoundary": { + "description": "The ARN of the policy used to set the permissions boundary for the role.\n For more information about permissions boundaries, see [Permissions boundaries for IAM identities](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) in the *IAM User Guide*.", + "type": "string" + }, + "Policies": { + "description": "Adds or updates an inline policy document that is embedded in the specified IAM role.\n When you embed an inline policy in a role, the inline policy is used as part of the role's access (permissions) policy. The role's trust policy is created at the same time as the role. You can update a role's trust policy later. For more information about IAM roles, go to [Using Roles to Delegate Permissions and Federate Identities](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html).\n A role can also have an attached managed policy. For information about policies, see [Managed Policies and Inline Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *User Guide*.\n For information about limits on the number of inline policies that you can embed with a role, see [Limitations on Entities](https://docs.aws.amazon.com/IAM/latest/UserGuide/LimitationsOnEntities.html) in the *User Guide*.\n If an external policy (such as ``AWS::IAM::Policy`` or", + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Policy" + } + }, + "RoleId": { + "description": "", + "type": "string" + }, + "RoleName": { + "description": "A name for the IAM role, up to 64 characters in length. For valid values, see the ``RoleName`` parameter for the [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) action in the *User Guide*.\n This parameter allows (per its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-. The role name must be unique within the account. Role names are not distinguished by case. For example, you cannot create roles named both \"Role1\" and \"role1\".\n If you don't specify a name, CFN generates a unique physical ID and uses that ID for the role name.\n If you specify a name, you must specify the ``CAPABILITY_NAMED_IAM`` value to acknowledge your template's capabilities. For more information, see [Acknowledging Resources in Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/Use", + "type": "string" + }, + "Tags": { + "description": "A list of tags that are attached to the role. For more information about tagging, see [Tagging IAM resources](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) in the *IAM User Guide*.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "AssumeRolePolicyDocument" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/RoleId" + ], + "createOnlyProperties": [ + "/properties/Path", + "/properties/RoleName" + ], + "primaryIdentifier": [ + "/properties/RoleName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "iam:CreateRole", + "iam:PutRolePolicy", + "iam:AttachRolePolicy", + "iam:GetRolePolicy", + "iam:TagRole", + "iam:UntagRole", + "iam:GetRole" + ] + }, + "read": { + "permissions": [ + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:ListRolePolicies", + "iam:GetRolePolicy" + ] + }, + "update": { + "permissions": [ + "iam:UpdateRole", + "iam:UpdateRoleDescription", + "iam:UpdateAssumeRolePolicy", + "iam:DetachRolePolicy", + "iam:AttachRolePolicy", + "iam:DeleteRolePermissionsBoundary", + "iam:PutRolePermissionsBoundary", + "iam:DeleteRolePolicy", + "iam:PutRolePolicy", + "iam:TagRole", + "iam:UntagRole" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteRole", + "iam:DetachRolePolicy", + "iam:DeleteRolePolicy", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:ListRolePolicies", + "iam:TagRole", + "iam:UntagRole" + ] + }, + "list": { + "permissions": [ + "iam:ListRoles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/rolepolicy.json b/internal/aws/cfn/schemas/aws/iam/rolepolicy.json new file mode 100644 index 00000000..810eb2f2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/rolepolicy.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::IAM::RolePolicy", + "description": "Adds or updates an inline policy document that is embedded in the specified IAM role.\n When you embed an inline policy in a role, the inline policy is used as part of the role's access (permissions) policy. The role's trust policy is created at the same time as the role, using [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html). You can update a role's trust policy using [UpdateAssumeRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAssumeRolePolicy.html). For information about roles, see [roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html) in the *IAM User Guide*.\n A role can also have a managed policy attached to it. To attach a managed policy to a role, use [AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html). To create a new managed policy, use [AWS::IAM::ManagedPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html). For information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *IAM User Guide*.\n For information about the maximum number of inline policies that you can embed with a role, see [IAM and quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the *IAM User Guide*.", + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "properties": { + "PolicyDocument": { + "description": "The policy document.\n You must provide policies in JSON format in IAM. However, for CFN templates formatted in YAML, you can provide the policy in JSON or YAML format. CFN always converts a YAML policy to JSON format before submitting it to IAM.\n The [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex) used to validate this parameter is a string of characters consisting of the following:\n + Any printable ASCII character ranging from the space character (``\\u0020``) through the end of the ASCII character range\n + The printable characters in the Basic Latin and Latin-1 Supplement character set (through ``\\u00FF``)\n + The special characters tab (``\\u0009``), line feed (``\\u000A``), and carriage return (``\\u000D``)", + "type": "object" + }, + "PolicyName": { + "description": "The name of the policy document.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-", + "type": "string" + }, + "RoleName": { + "description": "The name of the role to associate the policy with.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-", + "type": "string" + } + }, + "required": [ + "PolicyName", + "RoleName" + ], + "primaryIdentifier": [ + "/properties/PolicyName", + "/properties/RoleName" + ], + "createOnlyProperties": [ + "/properties/PolicyName", + "/properties/RoleName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:PutRolePolicy", + "iam:GetRolePolicy" + ] + }, + "read": { + "permissions": [ + "iam:GetRolePolicy" + ] + }, + "update": { + "permissions": [ + "iam:PutRolePolicy", + "iam:GetRolePolicy" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteRolePolicy", + "iam:GetRolePolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/samlprovider.json b/internal/aws/cfn/schemas/aws/iam/samlprovider.json new file mode 100644 index 00000000..09bc5a5e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/samlprovider.json @@ -0,0 +1,109 @@ +{ + "typeName": "AWS::IAM::SAMLProvider", + "description": "Resource Type definition for AWS::IAM::SAMLProvider", + "additionalProperties": false, + "properties": { + "Name": { + "minLength": 1, + "maxLength": 128, + "pattern": "[\\w._-]+", + "type": "string" + }, + "SamlMetadataDocument": { + "minLength": 1000, + "maxLength": 10000000, + "type": "string" + }, + "Arn": { + "description": "Amazon Resource Name (ARN) of the SAML provider", + "minLength": 1, + "maxLength": 1600, + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "SamlMetadataDocument" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateSAMLProvider", + "iam:GetSAMLProvider", + "iam:TagSAMLProvider" + ] + }, + "read": { + "permissions": [ + "iam:GetSAMLProvider" + ] + }, + "update": { + "permissions": [ + "iam:UpdateSAMLProvider", + "iam:GetSAMLProvider", + "iam:TagSAMLProvider", + "iam:ListSAMLProviderTags", + "iam:UntagSAMLProvider" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteSAMLProvider" + ] + }, + "list": { + "permissions": [ + "iam:ListSAMLProviders", + "iam:GetSAMLProvider" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/servercertificate.json b/internal/aws/cfn/schemas/aws/iam/servercertificate.json new file mode 100644 index 00000000..8307b732 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/servercertificate.json @@ -0,0 +1,132 @@ +{ + "typeName": "AWS::IAM::ServerCertificate", + "description": "Resource Type definition for AWS::IAM::ServerCertificate", + "additionalProperties": false, + "properties": { + "CertificateBody": { + "minLength": 1, + "maxLength": 16384, + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+", + "type": "string" + }, + "CertificateChain": { + "minLength": 1, + "maxLength": 2097152, + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+", + "type": "string" + }, + "ServerCertificateName": { + "minLength": 1, + "maxLength": 128, + "pattern": "[\\w+=,.@-]+", + "type": "string" + }, + "Path": { + "minLength": 1, + "maxLength": 512, + "pattern": "(\\u002F)|(\\u002F[\\u0021-\\u007F]+\\u002F)", + "type": "string" + }, + "PrivateKey": { + "minLength": 1, + "maxLength": 16384, + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+", + "type": "string" + }, + "Arn": { + "description": "Amazon Resource Name (ARN) of the server certificate", + "minLength": 1, + "maxLength": 1600, + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "createOnlyProperties": [ + "/properties/ServerCertificateName", + "/properties/PrivateKey", + "/properties/CertificateBody", + "/properties/CertificateChain" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/PrivateKey", + "/properties/CertificateBody", + "/properties/CertificateChain" + ], + "primaryIdentifier": [ + "/properties/ServerCertificateName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:UploadServerCertificate", + "iam:TagServerCertificate", + "iam:GetServerCertificate" + ] + }, + "read": { + "permissions": [ + "iam:GetServerCertificate" + ] + }, + "update": { + "permissions": [ + "iam:TagServerCertificate", + "iam:UntagServerCertificate", + "iam:ListServerCertificateTags", + "iam:GetServerCertificate" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteServerCertificate" + ] + }, + "list": { + "permissions": [ + "iam:ListServerCertificates", + "iam:GetServerCertificate" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/servicelinkedrole.json b/internal/aws/cfn/schemas/aws/iam/servicelinkedrole.json new file mode 100644 index 00000000..62485a30 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/servicelinkedrole.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::IAM::ServiceLinkedRole", + "description": "Resource Type definition for AWS::IAM::ServiceLinkedRole", + "additionalProperties": false, + "properties": { + "RoleName": { + "description": "The name of the role.", + "type": "string" + }, + "CustomSuffix": { + "description": "A string that you provide, which is combined with the service-provided prefix to form the complete role name.", + "type": "string" + }, + "Description": { + "description": "The description of the role.", + "type": "string" + }, + "AWSServiceName": { + "description": "The service principal for the AWS service to which this role is attached.", + "type": "string" + } + }, + "required": [], + "createOnlyProperties": [ + "/properties/CustomSuffix", + "/properties/AWSServiceName" + ], + "primaryIdentifier": [ + "/properties/RoleName" + ], + "readOnlyProperties": [ + "/properties/RoleName" + ], + "writeOnlyProperties": [ + "/properties/CustomSuffix", + "/properties/AWSServiceName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "iam:GetRole" + ] + }, + "read": { + "permissions": [ + "iam:GetRole" + ] + }, + "update": { + "permissions": [ + "iam:UpdateRole", + "iam:GetRole" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteServiceLinkedRole", + "iam:GetServiceLinkedRoleDeletionStatus", + "iam:GetRole" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/user.json b/internal/aws/cfn/schemas/aws/iam/user.json new file mode 100644 index 00000000..fa5719d6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/user.json @@ -0,0 +1,210 @@ +{ + "typeName": "AWS::IAM::User", + "description": "Creates a new IAM user for your AWS-account.\n For information about quotas for the number of IAM users you can create, see [IAM and quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the *IAM User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "additionalProperties": false, + "properties": { + "Path": { + "description": "The path for the user name. For more information about paths, see [IAM identifiers](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the *IAM User Guide*.\n This parameter is optional. If it is not included, it defaults to a slash (/).\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of either a forward slash (/) by itself or a string that must begin and end with forward slashes. In addition, it can contain any ASCII character from the ! (``\\u0021``) through the DEL character (``\\u007F``), including most punctuation characters, digits, and upper and lowercased letters.", + "type": "string" + }, + "ManagedPolicyArns": { + "description": "A list of Amazon Resource Names (ARNs) of the IAM managed policies that you want to attach to the user.\n For more information about ARNs, see [Amazon Resource Names (ARNs) and Service Namespaces](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the *General Reference*.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Policies": { + "description": "Adds or updates an inline policy document that is embedded in the specified IAM user. To view AWS::IAM::User snippets, see [Declaring an User Resource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-iam.html#scenario-iam-user).\n The name of each policy for a role, user, or group must be unique. If you don't choose unique names, updates to the IAM identity will fail. \n For information about limits on the number of inline policies that you can embed in a user, see [Limitations on Entities](https://docs.aws.amazon.com/IAM/latest/UserGuide/LimitationsOnEntities.html) in the *User Guide*.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Policy" + } + }, + "UserName": { + "description": "The name of the user to create. Do not include the path in this value.\n This parameter allows (per its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-. The user name must be unique within the account. User names are not distinguished by case. For example, you cannot create users named both \"John\" and \"john\".\n If you don't specify a name, CFN generates a unique physical ID and uses that ID for the user name.\n If you specify a name, you must specify the ``CAPABILITY_NAMED_IAM`` value to acknowledge your template's capabilities. For more information, see [Acknowledging Resources in Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities).\n Naming an IAM resource can cause an unrecoverable error if you reuse the same template in multiple Regions. To prevent this, we recommend using ``Fn::Join`` and ``AWS::Region`` to create a Region-specific name, as in the following example: ``{\"Fn::Join\": [\"\", [{\"Ref\": \"AWS::Region\"}, {\"Ref\": \"MyResourceName\"}]]}``.", + "type": "string" + }, + "Groups": { + "description": "A list of group names to which you want to add the user.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Arn": { + "description": "", + "type": "string" + }, + "LoginProfile": { + "description": "Creates a password for the specified IAM user. A password allows an IAM user to access AWS services through the console.\n You can use the CLI, the AWS API, or the *Users* page in the IAM console to create a password for any IAM user. Use [ChangePassword](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ChangePassword.html) to update your own existing password in the *My Security Credentials* page in the console.\n For more information about managing passwords, see [Managing passwords](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html) in the *User Guide*.", + "$ref": "#/definitions/LoginProfile" + }, + "Tags": { + "description": "A list of tags that you want to attach to the new user. Each tag consists of a key name and an associated value. For more information about tagging, see [Tagging IAM resources](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) in the *IAM User Guide*.\n If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "PermissionsBoundary": { + "description": "The ARN of the managed policy that is used to set the permissions boundary for the user.\n A permissions boundary policy defines the maximum permissions that identity-based policies can grant to an entity, but does not grant permissions. Permissions boundaries do not define the maximum permissions that a resource-based policy can grant to an entity. To learn more, see [Permissions boundaries for IAM entities](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) in the *IAM User Guide*.\n For more information about policy types, see [Policy types](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policy-types) in the *IAM User Guide*.", + "type": "string" + } + }, + "definitions": { + "Policy": { + "description": "Contains information about an attached policy.\n An attached policy is a managed policy that has been attached to a user, group, or role.\n For more information about managed policies, refer to [Managed Policies and Inline Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "PolicyDocument": { + "description": "The entire contents of the policy that defines permissions. For more information, see [Overview of JSON policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json).", + "type": [ + "object", + "string" + ] + }, + "PolicyName": { + "description": "The friendly name (not ARN) identifying the policy.", + "type": "string" + } + }, + "required": [ + "PolicyName", + "PolicyDocument" + ] + }, + "Tag": { + "description": "A structure that represents user-provided metadata that can be associated with an IAM resource. For more information about tagging, see [Tagging IAM resources](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) in the *IAM User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name that can be used to look up or retrieve the associated value. For example, ``Department`` or ``Cost Center`` are common choices." + }, + "Value": { + "type": "string", + "description": "The value associated with this tag. For example, tags with a key name of ``Department`` could have values such as ``Human Resources``, ``Accounting``, and ``Support``. Tags with a key name of ``Cost Center`` might have values that consist of the number associated with the different cost centers in your company. Typically, many resources have tags with the same key name but with different values.\n AWS always interprets the tag ``Value`` as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code." + } + }, + "required": [ + "Key", + "Value" + ] + }, + "LoginProfile": { + "description": "Creates a password for the specified user, giving the user the ability to access AWS services through the console. For more information about managing passwords, see [Managing Passwords](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html) in the *User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "PasswordResetRequired": { + "description": "Specifies whether the user is required to set a new password on next sign-in.", + "type": "boolean" + }, + "Password": { + "description": "The user's password.", + "type": "string" + } + }, + "required": [ + "Password" + ] + } + }, + "createOnlyProperties": [ + "/properties/UserName" + ], + "primaryIdentifier": [ + "/properties/UserName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/LoginProfile/Password" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "iam:CreateLoginProfile", + "iam:AddUserToGroup", + "iam:PutUserPolicy", + "iam:AttachUserPolicy", + "iam:CreateUser", + "iam:GetUser", + "iam:TagUser" + ] + }, + "read": { + "permissions": [ + "iam:GetUserPolicy", + "iam:ListGroupsForUser", + "iam:ListAttachedUserPolicies", + "iam:ListUserPolicies", + "iam:GetUser", + "iam:GetLoginProfile" + ] + }, + "update": { + "permissions": [ + "iam:UpdateLoginProfile", + "iam:UpdateUser", + "iam:PutUserPermissionsBoundary", + "iam:AttachUserPolicy", + "iam:DeleteUserPolicy", + "iam:DeleteUserPermissionsBoundary", + "iam:TagUser", + "iam:UntagUser", + "iam:CreateLoginProfile", + "iam:RemoveUserFromGroup", + "iam:AddUserToGroup", + "iam:PutUserPolicy", + "iam:DetachUserPolicy", + "iam:GetLoginProfile", + "iam:DeleteLoginProfile", + "iam:GetUser", + "iam:ListUserTags" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteAccessKey", + "iam:RemoveUserFromGroup", + "iam:DeleteUserPolicy", + "iam:DeleteUser", + "iam:DetachUserPolicy", + "iam:DeleteLoginProfile", + "iam:ListAccessKeys", + "iam:GetUserPolicy", + "iam:ListGroupsForUser", + "iam:ListAttachedUserPolicies", + "iam:ListUserPolicies", + "iam:GetUser", + "iam:GetLoginProfile" + ] + }, + "list": { + "permissions": [ + "iam:listUsers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/userpolicy.json b/internal/aws/cfn/schemas/aws/iam/userpolicy.json new file mode 100644 index 00000000..2038ae1a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/userpolicy.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::IAM::UserPolicy", + "description": "Adds or updates an inline policy document that is embedded in the specified IAM user.\n An IAM user can also have a managed policy attached to it. To attach a managed policy to a user, use [AWS::IAM::User](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html). To create a new managed policy, use [AWS::IAM::ManagedPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html). For information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the *IAM User Guide*.\n For information about the maximum number of inline policies that you can embed in a user, see [IAM and quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the *IAM User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "additionalProperties": false, + "properties": { + "PolicyDocument": { + "description": "The policy document.\n You must provide policies in JSON format in IAM. However, for CFN templates formatted in YAML, you can provide the policy in JSON or YAML format. CFN always converts a YAML policy to JSON format before submitting it to IAM.\n The [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex) used to validate this parameter is a string of characters consisting of the following:\n + Any printable ASCII character ranging from the space character (``\\u0020``) through the end of the ASCII character range\n + The printable characters in the Basic Latin and Latin-1 Supplement character set (through ``\\u00FF``)\n + The special characters tab (``\\u0009``), line feed (``\\u000A``), and carriage return (``\\u000D``)", + "type": "object" + }, + "PolicyName": { + "description": "The name of the policy document.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-", + "type": "string" + }, + "UserName": { + "description": "The name of the user to associate the policy with.\n This parameter allows (through its [regex pattern](https://docs.aws.amazon.com/http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-", + "type": "string" + } + }, + "required": [ + "PolicyName", + "UserName" + ], + "createOnlyProperties": [ + "/properties/PolicyName", + "/properties/UserName" + ], + "primaryIdentifier": [ + "/properties/PolicyName", + "/properties/UserName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:PutUserPolicy", + "iam:GetUserPolicy" + ] + }, + "read": { + "permissions": [ + "iam:GetUserPolicy" + ] + }, + "update": { + "permissions": [ + "iam:PutUserPolicy", + "iam:GetUserPolicy" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteUserPolicy", + "iam:GetUserPolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iam/usertogroupaddition.json b/internal/aws/cfn/schemas/aws/iam/usertogroupaddition.json new file mode 100644 index 00000000..8322c208 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/usertogroupaddition.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::IAM::UserToGroupAddition", + "description": "Resource Type definition for AWS::IAM::UserToGroupAddition", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "GroupName": { + "type": "string" + }, + "Users": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "GroupName", + "Users" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iam/virtualmfadevice.json b/internal/aws/cfn/schemas/aws/iam/virtualmfadevice.json new file mode 100644 index 00000000..10d18536 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iam/virtualmfadevice.json @@ -0,0 +1,109 @@ +{ + "typeName": "AWS::IAM::VirtualMFADevice", + "description": "Resource Type definition for AWS::IAM::VirtualMFADevice", + "additionalProperties": false, + "properties": { + "VirtualMfaDeviceName": { + "minLength": 1, + "maxLength": 226, + "pattern": "[\\w+=,.@-]+", + "type": "string" + }, + "Path": { + "minLength": 1, + "maxLength": 512, + "pattern": "(\\u002F)|(\\u002F[\\u0021-\\u007F]+\\u002F)", + "type": "string" + }, + "SerialNumber": { + "minLength": 9, + "maxLength": 256, + "pattern": "[\\w+=/:,.@-]+", + "type": "string" + }, + "Users": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "createOnlyProperties": [ + "/properties/VirtualMfaDeviceName", + "/properties/Base32StringSeed", + "/properties/Path" + ], + "readOnlyProperties": [ + "/properties/SerialNumber" + ], + "primaryIdentifier": [ + "/properties/SerialNumber" + ], + "required": [ + "Users" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateVirtualMFADevice", + "iam:EnableMFADevice", + "iam:ListVirtualMFADevices" + ] + }, + "read": { + "permissions": [ + "iam:ListVirtualMFADevices" + ] + }, + "update": { + "permissions": [ + "iam:TagMFADevice", + "iam:UntagMFADevice" + ] + }, + "delete": { + "permissions": [ + "iam:DeleteVirtualMFADevice", + "iam:DeactivateMFADevice" + ] + }, + "list": { + "permissions": [ + "iam:ListVirtualMFADevices" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/identitystore/group.json b/internal/aws/cfn/schemas/aws/identitystore/group.json new file mode 100644 index 00000000..523014b9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/identitystore/group.json @@ -0,0 +1,96 @@ +{ + "typeName": "AWS::IdentityStore::Group", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-identitystore", + "description": "Resource Type definition for AWS::IdentityStore::Group", + "properties": { + "Description": { + "description": "A string containing the description of the group.", + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}\\t\\n\\r  ]+$" + }, + "DisplayName": { + "description": "A string containing the name of the group. This value is commonly displayed when the group is referenced.", + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}\\t\\n\\r ]+$" + }, + "GroupId": { + "description": "The unique identifier for a group in the identity store.", + "type": "string", + "maxLength": 47, + "minLength": 1, + "pattern": "^([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$" + }, + "IdentityStoreId": { + "description": "The globally unique identifier for the identity store.", + "type": "string", + "maxLength": 36, + "minLength": 1, + "pattern": "^d-[0-9a-f]{10}$|^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "IdentityStoreId", + "DisplayName" + ], + "readOnlyProperties": [ + "/properties/GroupId" + ], + "createOnlyProperties": [ + "/properties/IdentityStoreId" + ], + "primaryIdentifier": [ + "/properties/GroupId", + "/properties/IdentityStoreId" + ], + "handlers": { + "create": { + "permissions": [ + "identitystore:CreateGroup", + "identitystore:DescribeGroup" + ] + }, + "read": { + "permissions": [ + "identitystore:DescribeGroup" + ] + }, + "update": { + "permissions": [ + "identitystore:DescribeGroup", + "identitystore:UpdateGroup" + ] + }, + "delete": { + "permissions": [ + "identitystore:DescribeGroup", + "identitystore:DeleteGroup" + ] + }, + "list": { + "permissions": [ + "identitystore:ListGroups" + ], + "handlerSchema": { + "properties": { + "IdentityStoreId": { + "$ref": "resource-schema.json#/properties/IdentityStoreId" + } + }, + "required": [ + "IdentityStoreId" + ] + } + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/identitystore/groupmembership.json b/internal/aws/cfn/schemas/aws/identitystore/groupmembership.json new file mode 100644 index 00000000..52c856cb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/identitystore/groupmembership.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::IdentityStore::GroupMembership", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-identitystore", + "description": "Resource Type Definition for AWS:IdentityStore::GroupMembership", + "definitions": { + "MemberId": { + "description": "An object containing the identifier of a group member.", + "type": "object", + "title": "UserId", + "properties": { + "UserId": { + "description": "The identifier for a user in the identity store.", + "type": "string", + "maxLength": 47, + "minLength": 1, + "pattern": "^([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$" + } + }, + "required": [ + "UserId" + ], + "additionalProperties": false + } + }, + "properties": { + "GroupId": { + "description": "The unique identifier for a group in the identity store.", + "type": "string", + "maxLength": 47, + "minLength": 1, + "pattern": "^([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$" + }, + "IdentityStoreId": { + "description": "The globally unique identifier for the identity store.", + "type": "string", + "maxLength": 36, + "minLength": 1, + "pattern": "^d-[0-9a-f]{10}$|^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "MemberId": { + "description": "An object containing the identifier of a group member.", + "$ref": "#/definitions/MemberId" + }, + "MembershipId": { + "description": "The identifier for a GroupMembership in the identity store.", + "type": "string", + "maxLength": 47, + "minLength": 1, + "pattern": "^([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "IdentityStoreId", + "GroupId", + "MemberId" + ], + "readOnlyProperties": [ + "/properties/MembershipId" + ], + "createOnlyProperties": [ + "/properties/IdentityStoreId", + "/properties/GroupId", + "/properties/MemberId" + ], + "primaryIdentifier": [ + "/properties/MembershipId", + "/properties/IdentityStoreId" + ], + "handlers": { + "create": { + "permissions": [ + "identitystore:CreateGroupMembership", + "identitystore:DescribeGroupMembership" + ] + }, + "read": { + "permissions": [ + "identitystore:DescribeGroupMembership" + ] + }, + "delete": { + "permissions": [ + "identitystore:DeleteGroupMembership", + "identitystore:DescribeGroupMembership" + ] + }, + "list": { + "permissions": [ + "identitystore:ListGroupMemberships" + ], + "handlerSchema": { + "properties": { + "IdentityStoreId": { + "$ref": "resource-schema.json#/properties/IdentityStoreId" + }, + "GroupId": { + "$ref": "resource-schema.json#/properties/GroupId" + } + }, + "required": [ + "IdentityStoreId", + "GroupId" + ] + } + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/imagebuilder/component.json b/internal/aws/cfn/schemas/aws/imagebuilder/component.json new file mode 100644 index 00000000..2e818bc1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/imagebuilder/component.json @@ -0,0 +1,169 @@ +{ + "typeName": "AWS::ImageBuilder::Component", + "description": "Resource schema for AWS::ImageBuilder::Component", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the component.", + "type": "string" + }, + "Name": { + "description": "The name of the component.", + "type": "string" + }, + "Version": { + "description": "The version of the component.", + "type": "string" + }, + "Description": { + "description": "The description of the component.", + "type": "string" + }, + "ChangeDescription": { + "description": "The change description of the component.", + "type": "string" + }, + "Type": { + "description": "The type of the component denotes whether the component is used to build the image or only to test it. ", + "type": "string", + "enum": [ + "BUILD", + "TEST" + ] + }, + "Platform": { + "description": "The platform of the component.", + "type": "string", + "enum": [ + "Windows", + "Linux" + ] + }, + "Data": { + "description": "The data of the component.", + "type": "string", + "minLength": 1, + "maxLength": 16000 + }, + "KmsKeyId": { + "description": "The KMS key identifier used to encrypt the component.", + "type": "string" + }, + "Encrypted": { + "description": "The encryption status of the component.", + "type": "boolean" + }, + "Tags": { + "description": "The tags associated with the component.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + }, + "Uri": { + "description": "The uri of the component.", + "type": "string" + }, + "SupportedOsVersions": { + "description": "The operating system (OS) version supported by the component.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Platform", + "Version" + ], + "oneOf": [ + { + "required": [ + "Data" + ] + }, + { + "required": [ + "Uri" + ] + } + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Type", + "/properties/Encrypted" + ], + "writeOnlyProperties": [ + "/properties/Data", + "/properties/Uri", + "/properties/Platform" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Version", + "/properties/ChangeDescription", + "/properties/Description", + "/properties/Platform", + "/properties/Data", + "/properties/Uri", + "/properties/KmsKeyId", + "/properties/SupportedOsVersions", + "/properties/Tags" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "iam:GetRole", + "kms:GenerateDataKey*", + "kms:Encrypt", + "kms:Decrypt", + "s3:GetObject", + "s3:HeadBucket", + "s3:GetBucketLocation", + "imagebuilder:TagResource", + "imagebuilder:GetComponent", + "imagebuilder:CreateComponent" + ] + }, + "read": { + "permissions": [ + "imagebuilder:GetComponent" + ] + }, + "delete": { + "permissions": [ + "imagebuilder:GetComponent", + "imagebuilder:UnTagResource", + "imagebuilder:DeleteComponent" + ] + }, + "list": { + "permissions": [ + "imagebuilder:ListComponents" + ], + "handlerSchema": { + "properties": { + "Arn": { + "$ref": "resource-schema.json#/properties/Arn" + } + }, + "required": [ + "Arn" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/imagebuilder/containerrecipe.json b/internal/aws/cfn/schemas/aws/imagebuilder/containerrecipe.json new file mode 100644 index 00000000..bfc9471a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/imagebuilder/containerrecipe.json @@ -0,0 +1,340 @@ +{ + "typeName": "AWS::ImageBuilder::ContainerRecipe", + "description": "Resource schema for AWS::ImageBuilder::ContainerRecipe", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the container recipe.", + "type": "string" + }, + "Name": { + "description": "The name of the container recipe.", + "type": "string" + }, + "Description": { + "description": "The description of the container recipe.", + "type": "string" + }, + "Version": { + "description": "The semantic version of the container recipe (..).", + "type": "string" + }, + "Components": { + "description": "Components for build and test that are included in the container recipe.", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ComponentConfiguration" + } + }, + "InstanceConfiguration": { + "additionalProperties": false, + "description": "A group of options that can be used to configure an instance for building and testing container images.", + "$ref": "#/definitions/InstanceConfiguration" + }, + "DockerfileTemplateData": { + "description": "Dockerfiles are text documents that are used to build Docker containers, and ensure that they contain all of the elements required by the application running inside. The template data consists of contextual variables where Image Builder places build information or scripts, based on your container image recipe.", + "type": "string" + }, + "DockerfileTemplateUri": { + "description": "The S3 URI for the Dockerfile that will be used to build your container image.", + "type": "string" + }, + "PlatformOverride": { + "description": "Specifies the operating system platform when you use a custom source image.", + "type": "string", + "enum": [ + "Windows", + "Linux" + ] + }, + "ContainerType": { + "description": "Specifies the type of container, such as Docker.", + "type": "string", + "enum": [ + "DOCKER" + ] + }, + "ImageOsVersionOverride": { + "description": "Specifies the operating system version for the source image.", + "type": "string" + }, + "TargetRepository": { + "description": "The destination repository for the container image.", + "$ref": "#/definitions/TargetContainerRepository" + }, + "KmsKeyId": { + "description": "Identifies which KMS key is used to encrypt the container image.", + "type": "string" + }, + "ParentImage": { + "description": "The source image for the container recipe.", + "type": "string" + }, + "WorkingDirectory": { + "description": "The working directory to be used during build and test workflows.", + "type": "string" + }, + "Tags": { + "description": "Tags that are attached to the container recipe.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + } + }, + "definitions": { + "ComponentConfiguration": { + "description": "Configuration details of the component.", + "type": "object", + "additionalProperties": false, + "properties": { + "ComponentArn": { + "description": "The Amazon Resource Name (ARN) of the component.", + "type": "string" + }, + "Parameters": { + "description": "A group of parameter settings that are used to configure the component for a specific recipe.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ComponentParameter" + } + } + } + }, + "InstanceConfiguration": { + "description": "A group of options that can be used to configure an instance for building and testing container images.", + "type": "object", + "additionalProperties": false, + "properties": { + "Image": { + "description": "The AMI ID to use as the base image for a container build and test instance. If not specified, Image Builder will use the appropriate ECS-optimized AMI as a base image.", + "type": "string" + }, + "BlockDeviceMappings": { + "description": "Defines the block devices to attach for building an instance from this Image Builder AMI.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/InstanceBlockDeviceMapping" + } + } + } + }, + "InstanceBlockDeviceMapping": { + "description": "Defines block device mappings for the instance used to configure your image. ", + "type": "object", + "additionalProperties": false, + "properties": { + "DeviceName": { + "description": "The device to which these mappings apply.", + "type": "string" + }, + "VirtualName": { + "description": "Use to manage instance ephemeral devices.", + "type": "string" + }, + "NoDevice": { + "description": "Use to remove a mapping from the parent image.", + "type": "string" + }, + "Ebs": { + "description": "Use to manage Amazon EBS-specific configuration for this mapping.", + "$ref": "#/definitions/EbsInstanceBlockDeviceSpecification" + } + } + }, + "EbsInstanceBlockDeviceSpecification": { + "additionalProperties": false, + "description": "Amazon EBS-specific block device mapping specifications. ", + "type": "object", + "properties": { + "Encrypted": { + "description": "Use to configure device encryption.", + "type": "boolean" + }, + "DeleteOnTermination": { + "description": "Use to configure delete on termination of the associated device.", + "type": "boolean" + }, + "Iops": { + "description": "Use to configure device IOPS.", + "type": "integer" + }, + "KmsKeyId": { + "description": "Use to configure the KMS key to use when encrypting the device.", + "type": "string" + }, + "SnapshotId": { + "description": "The snapshot that defines the device contents.", + "type": "string" + }, + "Throughput": { + "description": "For GP3 volumes only - The throughput in MiB/s that the volume supports.", + "type": "integer" + }, + "VolumeSize": { + "description": "Use to override the device's volume size.", + "type": "integer" + }, + "VolumeType": { + "description": "Use to override the device's volume type.", + "type": "string", + "enum": [ + "standard", + "io1", + "io2", + "gp2", + "gp3", + "sc1", + "st1" + ] + } + } + }, + "TargetContainerRepository": { + "description": "The container repository where the output container image is stored.", + "type": "object", + "additionalProperties": false, + "properties": { + "Service": { + "description": "Specifies the service in which this image was registered.", + "type": "string", + "enum": [ + "ECR" + ] + }, + "RepositoryName": { + "description": "The name of the container repository where the output container image is stored. This name is prefixed by the repository location.", + "type": "string" + } + } + }, + "ComponentParameter": { + "additionalProperties": false, + "description": "Contains a key/value pair that sets the named component parameter.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the component parameter to set.", + "type": "string" + }, + "Value": { + "description": "Sets the value for the named component parameter.", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "Name", + "Value" + ] + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "DockerfileTemplateData", + "Name", + "Version", + "Components", + "ParentImage", + "TargetRepository", + "ContainerType" + ] + }, + { + "required": [ + "DockerfileTemplateUri", + "Name", + "Version", + "Components", + "ParentImage", + "TargetRepository", + "ContainerType" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Version", + "/properties/ContainerType", + "/properties/TargetRepository", + "/properties/InstanceConfiguration", + "/properties/ParentImage", + "/properties/Description", + "/properties/DockerfileTemplateUri", + "/properties/DockerfileTemplateData", + "/properties/ImageOsVersionOverride", + "/properties/KmsKeyId", + "/properties/PlatformOverride", + "/properties/WorkingDirectory", + "/properties/Components", + "/properties/Tags" + ], + "writeOnlyProperties": [ + "/properties/DockerfileTemplateData", + "/properties/DockerfileTemplateUri", + "/properties/ImageOsVersionOverride", + "/properties/PlatformOverride" + ], + "propertyTransform": { + "/properties/InstanceConfiguration/BlockDeviceMappings/*/Ebs/VolumeType": "$uppercase(VolumeType)" + }, + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "imagebuilder:GetComponent", + "imagebuilder:TagResource", + "imagebuilder:GetContainerRecipe", + "imagebuilder:CreateContainerRecipe", + "imagebuilder:GetImage", + "kms:Encrypt", + "kms:Decrypt", + "kms:ReEncryptFrom", + "kms:ReEncryptTo", + "kms:GenerateDataKey*", + "s3:GetObject", + "s3:ListBucket", + "ecr:DescribeRepositories", + "ec2:DescribeImages" + ] + }, + "read": { + "permissions": [ + "imagebuilder:GetContainerRecipe" + ] + }, + "delete": { + "permissions": [ + "imagebuilder:UnTagResource", + "imagebuilder:GetContainerRecipe", + "imagebuilder:DeleteContainerRecipe" + ] + }, + "list": { + "permissions": [ + "imagebuilder:ListContainerRecipes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/imagebuilder/distributionconfiguration.json b/internal/aws/cfn/schemas/aws/imagebuilder/distributionconfiguration.json new file mode 100644 index 00000000..e9171503 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/imagebuilder/distributionconfiguration.json @@ -0,0 +1,340 @@ +{ + "typeName": "AWS::ImageBuilder::DistributionConfiguration", + "description": "Resource schema for AWS::ImageBuilder::DistributionConfiguration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the distribution configuration.", + "type": "string" + }, + "Name": { + "description": "The name of the distribution configuration.", + "type": "string" + }, + "Description": { + "description": "The description of the distribution configuration.", + "type": "string" + }, + "Distributions": { + "description": "The distributions of the distribution configuration.", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Distribution" + } + }, + "Tags": { + "description": "The tags associated with the component.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + } + }, + "definitions": { + "Distribution": { + "description": "The distributions of the distribution configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "Region": { + "description": "region", + "type": "string" + }, + "AmiDistributionConfiguration": { + "$ref": "#/definitions/AmiDistributionConfiguration" + }, + "ContainerDistributionConfiguration": { + "$ref": "#/definitions/ContainerDistributionConfiguration" + }, + "LicenseConfigurationArns": { + "description": "The License Manager Configuration to associate with the AMI in the specified Region.", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/LicenseConfigurationArn" + } + }, + "LaunchTemplateConfigurations": { + "description": "A group of launchTemplateConfiguration settings that apply to image distribution.", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/LaunchTemplateConfiguration" + } + }, + "FastLaunchConfigurations": { + "description": "The Windows faster-launching configurations to use for AMI distribution.", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/FastLaunchConfiguration" + } + } + }, + "required": [ + "Region" + ] + }, + "AmiDistributionConfiguration": { + "description": "The specific AMI settings (for example, launch permissions, AMI tags).", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "The name of the AMI distribution configuration.", + "type": "string" + }, + "KmsKeyId": { + "description": "The KMS key identifier used to encrypt the distributed image.", + "type": "string" + }, + "Description": { + "description": "The description of the AMI distribution configuration.", + "type": "string" + }, + "AmiTags": { + "description": "The tags to apply to AMIs distributed to this Region.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + }, + "TargetAccountIds": { + "description": "The ID of accounts to which you want to distribute an image.", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "LaunchPermissionConfiguration": { + "$ref": "#/definitions/LaunchPermissionConfiguration" + } + } + }, + "ContainerDistributionConfiguration": { + "description": "Container distribution settings for encryption, licensing, and sharing in a specific Region.", + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "description": "The description of the container distribution configuration.", + "type": "string" + }, + "ContainerTags": { + "description": "Tags that are attached to the container distribution configuration.", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "TargetRepository": { + "description": "The destination repository for the container distribution configuration.", + "$ref": "#/definitions/TargetContainerRepository" + } + } + }, + "LaunchTemplateConfiguration": { + "description": "launchTemplateConfiguration settings that apply to image distribution.", + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateId": { + "description": "Identifies the EC2 launch template to use.", + "type": "string" + }, + "AccountId": { + "description": "The account ID that this configuration applies to.", + "type": "string" + }, + "SetDefaultVersion": { + "description": "Set the specified EC2 launch template as the default launch template for the specified account.", + "type": "boolean" + } + } + }, + "FastLaunchConfiguration": { + "description": "The Windows faster-launching configuration to use for AMI distribution.", + "type": "object", + "additionalProperties": false, + "properties": { + "AccountId": { + "description": "The owner account ID for the fast-launch enabled Windows AMI.", + "type": "string" + }, + "Enabled": { + "description": "A Boolean that represents the current state of faster launching for the Windows AMI. Set to true to start using Windows faster launching, or false to stop using it.", + "type": "boolean" + }, + "LaunchTemplate": { + "description": "The launch template that the fast-launch enabled Windows AMI uses when it launches Windows instances to create pre-provisioned snapshots.", + "$ref": "#/definitions/FastLaunchLaunchTemplateSpecification" + }, + "MaxParallelLaunches": { + "description": "The maximum number of parallel instances that are launched for creating resources.", + "type": "integer" + }, + "SnapshotConfiguration": { + "description": "Configuration settings for managing the number of snapshots that are created from pre-provisioned instances for the Windows AMI when faster launching is enabled.", + "$ref": "#/definitions/FastLaunchSnapshotConfiguration" + } + } + }, + "LaunchPermissionConfiguration": { + "description": "Launch permissions can be used to configure which AWS accounts can use the AMI to launch instances.", + "type": "object", + "additionalProperties": false, + "properties": { + "UserIds": { + "description": "The AWS account ID.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "UserGroups": { + "description": "The name of the group.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "OrganizationArns": { + "description": "The ARN for an Amazon Web Services Organization that you want to share your AMI with.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "OrganizationalUnitArns": { + "description": "The ARN for an Organizations organizational unit (OU) that you want to share your AMI with.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + } + } + }, + "LicenseConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the License Manager configuration.", + "type": "string" + }, + "TargetContainerRepository": { + "description": "The destination repository for the container image.", + "type": "object", + "additionalProperties": false, + "properties": { + "Service": { + "description": "The service of target container repository.", + "type": "string", + "enum": [ + "ECR" + ] + }, + "RepositoryName": { + "description": "The repository name of target container repository.", + "type": "string" + } + } + }, + "FastLaunchLaunchTemplateSpecification": { + "description": "The launch template that the fast-launch enabled Windows AMI uses when it launches Windows instances to create pre-provisioned snapshots.", + "type": "object", + "additionalProperties": false, + "properties": { + "LaunchTemplateId": { + "description": "The ID of the launch template to use for faster launching for a Windows AMI.", + "type": "string" + }, + "LaunchTemplateName": { + "description": "The name of the launch template to use for faster launching for a Windows AMI.", + "type": "string" + }, + "LaunchTemplateVersion": { + "description": "The version of the launch template to use for faster launching for a Windows AMI.", + "type": "string" + } + } + }, + "FastLaunchSnapshotConfiguration": { + "description": "Configuration settings for managing the number of snapshots that are created from pre-provisioned instances for the Windows AMI when faster launching is enabled.", + "type": "object", + "additionalProperties": false, + "properties": { + "TargetResourceCount": { + "description": "The number of pre-provisioned snapshots to keep on hand for a fast-launch enabled Windows AMI.", + "type": "integer" + } + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Distributions" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "ec2:DescribeLaunchTemplates", + "ec2:CreateLaunchTemplateVersion", + "ec2:ModifyLaunchTemplate", + "imagebuilder:TagResource", + "imagebuilder:GetDistributionConfiguration", + "imagebuilder:CreateDistributionConfiguration" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeLaunchTemplates", + "ec2:CreateLaunchTemplateVersion", + "ec2:ModifyLaunchTemplate", + "imagebuilder:GetDistributionConfiguration", + "imagebuilder:UpdateDistributionConfiguration" + ] + }, + "read": { + "permissions": [ + "imagebuilder:GetDistributionConfiguration" + ] + }, + "delete": { + "permissions": [ + "imagebuilder:GetDistributionConfiguration", + "imagebuilder:UnTagResource", + "imagebuilder:DeleteDistributionConfiguration" + ] + }, + "list": { + "permissions": [ + "imagebuilder:ListDistributionConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/imagebuilder/image.json b/internal/aws/cfn/schemas/aws/imagebuilder/image.json new file mode 100644 index 00000000..a6ff3d50 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/imagebuilder/image.json @@ -0,0 +1,263 @@ +{ + "typeName": "AWS::ImageBuilder::Image", + "description": "Resource schema for AWS::ImageBuilder::Image", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the image.", + "type": "string" + }, + "Name": { + "description": "The name of the image.", + "type": "string" + }, + "ImageTestsConfiguration": { + "description": "The image tests configuration used when creating this image.", + "$ref": "#/definitions/ImageTestsConfiguration" + }, + "ImageRecipeArn": { + "description": "The Amazon Resource Name (ARN) of the image recipe that defines how images are configured, tested, and assessed.", + "type": "string" + }, + "ContainerRecipeArn": { + "description": "The Amazon Resource Name (ARN) of the container recipe that defines how images are configured and tested.", + "type": "string" + }, + "DistributionConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the distribution configuration.", + "type": "string" + }, + "InfrastructureConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the infrastructure configuration.", + "type": "string" + }, + "Workflows": { + "description": "Workflows to define the image build process", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/WorkflowConfiguration" + } + }, + "ImageId": { + "description": "The AMI ID of the EC2 AMI in current region.", + "type": "string" + }, + "ImageUri": { + "description": "URI for containers created in current Region with default ECR image tag", + "type": "string" + }, + "EnhancedImageMetadataEnabled": { + "description": "Collects additional information about the image being created, including the operating system (OS) version and package list.", + "type": "boolean" + }, + "ImageScanningConfiguration": { + "description": "Contains settings for vulnerability scans.", + "$ref": "#/definitions/ImageScanningConfiguration" + }, + "ExecutionRole": { + "description": "The execution role name/ARN for the image build, if provided", + "type": "string" + }, + "Tags": { + "description": "The tags associated with the image.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + } + }, + "definitions": { + "ImageTestsConfiguration": { + "description": "The image tests configuration used when creating this image.", + "type": "object", + "additionalProperties": false, + "properties": { + "ImageTestsEnabled": { + "description": "ImageTestsEnabled", + "type": "boolean" + }, + "TimeoutMinutes": { + "description": "TimeoutMinutes", + "type": "integer", + "minimum": 60, + "maximum": 1440 + } + } + }, + "ImageScanningConfiguration": { + "description": "Contains settings for Image Builder image resource and container image scans.", + "type": "object", + "additionalProperties": false, + "properties": { + "EcrConfiguration": { + "description": "Contains ECR settings for vulnerability scans.", + "$ref": "#/definitions/EcrConfiguration" + }, + "ImageScanningEnabled": { + "description": "This sets whether Image Builder keeps a snapshot of the vulnerability scans that Amazon Inspector runs against the build instance when you create a new image.", + "type": "boolean" + } + } + }, + "EcrConfiguration": { + "description": "Settings for Image Builder to configure the ECR repository and output container images that are scanned.", + "type": "object", + "additionalProperties": false, + "properties": { + "ContainerTags": { + "description": "Tags for Image Builder to apply the output container image that is scanned. Tags can help you identify and manage your scanned images.", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "RepositoryName": { + "description": "The name of the container repository that Amazon Inspector scans to identify findings for your container images. The name includes the path for the repository location. If you don?t provide this information, Image Builder creates a repository in your account named image-builder-image-scanning-repository to use for vulnerability scans for your output container images.", + "type": "string" + } + } + }, + "WorkflowConfiguration": { + "description": "The workflow configuration of the image", + "type": "object", + "additionalProperties": false, + "properties": { + "WorkflowArn": { + "description": "The Amazon Resource Name (ARN) of the workflow", + "type": "string" + }, + "Parameters": { + "description": "The parameters associated with the workflow", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/WorkflowParameter" + } + }, + "ParallelGroup": { + "description": "The parallel group name", + "type": "string" + }, + "OnFailure": { + "description": "Define execution decision in case of workflow failure", + "type": "string", + "enum": [ + "CONTINUE", + "ABORT" + ] + } + } + }, + "WorkflowParameter": { + "description": "A parameter associated with the workflow", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/WorkflowParameterValue" + } + } + } + }, + "WorkflowParameterValue": { + "description": "The value associated with the workflow parameter", + "type": "string" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "ContainerRecipeArn", + "InfrastructureConfigurationArn" + ] + }, + { + "required": [ + "ImageRecipeArn", + "InfrastructureConfigurationArn" + ] + } + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Name", + "/properties/ImageId", + "/properties/ImageUri" + ], + "createOnlyProperties": [ + "/properties/ImageRecipeArn", + "/properties/ContainerRecipeArn", + "/properties/InfrastructureConfigurationArn", + "/properties/Workflows", + "/properties/DistributionConfigurationArn", + "/properties/ImageTestsConfiguration", + "/properties/ImageScanningConfiguration", + "/properties/EnhancedImageMetadataEnabled", + "/properties/Tags" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "ecr:BatchGetRepositoryScanningConfiguration", + "iam:GetRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "imagebuilder:GetImageRecipe", + "imagebuilder:GetInfrastructureConfiguration", + "imagebuilder:GetDistributionConfiguration", + "imagebuilder:GetWorkflow", + "imagebuilder:GetImage", + "imagebuilder:CreateImage", + "imagebuilder:TagResource", + "inspector2:BatchGetAccountStatus" + ], + "timeoutInMinutes": 720 + }, + "read": { + "permissions": [ + "imagebuilder:GetImage" + ] + }, + "delete": { + "permissions": [ + "imagebuilder:GetImage", + "imagebuilder:DeleteImage", + "imagebuilder:UnTagResource", + "imagebuilder:CancelImageCreation" + ] + }, + "list": { + "permissions": [ + "imagebuilder:ListImages" + ], + "handlerSchema": { + "properties": { + "Arn": { + "$ref": "resource-schema.json#/properties/Arn" + } + }, + "required": [ + "Arn" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/imagebuilder/imagepipeline.json b/internal/aws/cfn/schemas/aws/imagebuilder/imagepipeline.json new file mode 100644 index 00000000..93c1a661 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/imagebuilder/imagepipeline.json @@ -0,0 +1,277 @@ +{ + "typeName": "AWS::ImageBuilder::ImagePipeline", + "description": "Resource schema for AWS::ImageBuilder::ImagePipeline", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the image pipeline.", + "type": "string" + }, + "Name": { + "description": "The name of the image pipeline.", + "type": "string" + }, + "Description": { + "description": "The description of the image pipeline.", + "type": "string" + }, + "ImageTestsConfiguration": { + "description": "The image tests configuration of the image pipeline.", + "$ref": "#/definitions/ImageTestsConfiguration" + }, + "Status": { + "description": "The status of the image pipeline.", + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "Schedule": { + "description": "The schedule of the image pipeline.", + "$ref": "#/definitions/Schedule" + }, + "ImageRecipeArn": { + "description": "The Amazon Resource Name (ARN) of the image recipe that defines how images are configured, tested, and assessed.", + "type": "string" + }, + "ContainerRecipeArn": { + "description": "The Amazon Resource Name (ARN) of the container recipe that defines how images are configured and tested.", + "type": "string" + }, + "DistributionConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the distribution configuration associated with this image pipeline.", + "type": "string" + }, + "InfrastructureConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the infrastructure configuration associated with this image pipeline.", + "type": "string" + }, + "Workflows": { + "description": "Workflows to define the image build process", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/WorkflowConfiguration" + } + }, + "EnhancedImageMetadataEnabled": { + "description": "Collects additional information about the image being created, including the operating system (OS) version and package list.", + "type": "boolean" + }, + "ImageScanningConfiguration": { + "description": "Contains settings for vulnerability scans.", + "$ref": "#/definitions/ImageScanningConfiguration" + }, + "ExecutionRole": { + "description": "The execution role name/ARN for the image build, if provided", + "type": "string" + }, + "Tags": { + "description": "The tags of this image pipeline.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + } + }, + "definitions": { + "ImageTestsConfiguration": { + "description": "Image tests configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "ImageTestsEnabled": { + "description": "Defines if tests should be executed when building this image.", + "type": "boolean" + }, + "TimeoutMinutes": { + "description": "The maximum time in minutes that tests are permitted to run.", + "type": "integer", + "minimum": 60, + "maximum": 1440 + } + } + }, + "ImageScanningConfiguration": { + "description": "Determines if tests should run after building the image. Image Builder defaults to enable tests to run following the image build, before image distribution.", + "type": "object", + "additionalProperties": false, + "properties": { + "EcrConfiguration": { + "description": "Contains ECR settings for vulnerability scans.", + "$ref": "#/definitions/EcrConfiguration" + }, + "ImageScanningEnabled": { + "description": "This sets whether Image Builder keeps a snapshot of the vulnerability scans that Amazon Inspector runs against the build instance when you create a new image.", + "type": "boolean" + } + } + }, + "EcrConfiguration": { + "description": "Settings for Image Builder to configure the ECR repository and output container images that are scanned.", + "type": "object", + "additionalProperties": false, + "properties": { + "ContainerTags": { + "description": "Tags for Image Builder to apply the output container image that is scanned. Tags can help you identify and manage your scanned images.", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "RepositoryName": { + "description": "The name of the container repository that Amazon Inspector scans to identify findings for your container images. The name includes the path for the repository location. If you don't provide this information, Image Builder creates a repository in your account named image-builder-image-scanning-repository to use for vulnerability scans for your output container images.", + "type": "string" + } + } + }, + "Schedule": { + "description": "The schedule of the image pipeline.", + "type": "object", + "additionalProperties": false, + "properties": { + "ScheduleExpression": { + "description": "The expression determines how often EC2 Image Builder evaluates your pipelineExecutionStartCondition.", + "type": "string" + }, + "PipelineExecutionStartCondition": { + "description": "The condition configures when the pipeline should trigger a new image build.", + "type": "string", + "enum": [ + "EXPRESSION_MATCH_ONLY", + "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE" + ] + } + } + }, + "WorkflowConfiguration": { + "description": "The workflow configuration of the image", + "type": "object", + "additionalProperties": false, + "properties": { + "WorkflowArn": { + "description": "The Amazon Resource Name (ARN) of the workflow", + "type": "string" + }, + "Parameters": { + "description": "The parameters associated with the workflow", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/WorkflowParameter" + } + }, + "ParallelGroup": { + "description": "The parallel group name", + "type": "string" + }, + "OnFailure": { + "description": "Define execution decision in case of workflow failure", + "type": "string", + "enum": [ + "CONTINUE", + "ABORT" + ] + } + } + }, + "WorkflowParameter": { + "description": "A parameter associated with the workflow", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/WorkflowParameterValue" + } + } + } + }, + "WorkflowParameterValue": { + "description": "The value associated with the workflow parameter", + "type": "string" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "Name", + "ContainerRecipeArn", + "InfrastructureConfigurationArn" + ] + }, + { + "required": [ + "Name", + "ImageRecipeArn", + "InfrastructureConfigurationArn" + ] + } + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "ecr:BatchGetRepositoryScanningConfiguration", + "iam:GetRole", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "imagebuilder:TagResource", + "imagebuilder:GetImagePipeline", + "imagebuilder:GetImageRecipe", + "imagebuilder:GetInfrastructureConfiguration", + "imagebuilder:GetDistributionConfiguration", + "imagebuilder:CreateImagePipeline", + "imagebuilder:GetWorkflow", + "inspector2:BatchGetAccountStatus" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "imagebuilder:GetImagePipeline", + "imagebuilder:UpdateImagePipeline", + "imagebuilder:GetWorkflow" + ] + }, + "read": { + "permissions": [ + "imagebuilder:GetImagePipeline" + ] + }, + "delete": { + "permissions": [ + "imagebuilder:UnTagResource", + "imagebuilder:GetImagePipeline", + "imagebuilder:DeleteImagePipeline" + ] + }, + "list": { + "permissions": [ + "imagebuilder:ListImagePipelines" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/imagebuilder/imagerecipe.json b/internal/aws/cfn/schemas/aws/imagebuilder/imagerecipe.json new file mode 100644 index 00000000..e7b93d55 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/imagebuilder/imagerecipe.json @@ -0,0 +1,262 @@ +{ + "typeName": "AWS::ImageBuilder::ImageRecipe", + "description": "Resource schema for AWS::ImageBuilder::ImageRecipe", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the image recipe.", + "type": "string" + }, + "Name": { + "description": "The name of the image recipe.", + "type": "string" + }, + "Description": { + "description": "The description of the image recipe.", + "type": "string" + }, + "Version": { + "description": "The version of the image recipe.", + "type": "string" + }, + "Components": { + "description": "The components of the image recipe.", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ComponentConfiguration" + } + }, + "BlockDeviceMappings": { + "description": "The block device mappings to apply when creating images from this recipe.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/InstanceBlockDeviceMapping" + } + }, + "ParentImage": { + "description": "The parent image of the image recipe.", + "type": "string" + }, + "WorkingDirectory": { + "description": "The working directory to be used during build and test workflows.", + "type": "string" + }, + "AdditionalInstanceConfiguration": { + "description": "Specify additional settings and launch scripts for your build instances.", + "$ref": "#/definitions/AdditionalInstanceConfiguration" + }, + "Tags": { + "description": "The tags of the image recipe.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + } + }, + "definitions": { + "ComponentConfiguration": { + "description": "Configuration details of the component.", + "type": "object", + "additionalProperties": false, + "properties": { + "ComponentArn": { + "description": "The Amazon Resource Name (ARN) of the component.", + "type": "string" + }, + "Parameters": { + "description": "A group of parameter settings that are used to configure the component for a specific recipe.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ComponentParameter" + } + } + } + }, + "InstanceBlockDeviceMapping": { + "description": "Defines block device mappings for the instance used to configure your image. ", + "type": "object", + "additionalProperties": false, + "properties": { + "DeviceName": { + "description": "The device to which these mappings apply.", + "type": "string" + }, + "VirtualName": { + "description": "Use to manage instance ephemeral devices.", + "type": "string" + }, + "NoDevice": { + "description": "Use to remove a mapping from the parent image.", + "type": "string" + }, + "Ebs": { + "description": "Use to manage Amazon EBS-specific configuration for this mapping.", + "$ref": "#/definitions/EbsInstanceBlockDeviceSpecification" + } + } + }, + "EbsInstanceBlockDeviceSpecification": { + "description": "Amazon EBS-specific block device mapping specifications. ", + "type": "object", + "additionalProperties": false, + "properties": { + "Encrypted": { + "description": "Use to configure device encryption.", + "type": "boolean" + }, + "DeleteOnTermination": { + "description": "Use to configure delete on termination of the associated device.", + "type": "boolean" + }, + "Iops": { + "description": "Use to configure device IOPS.", + "type": "integer" + }, + "KmsKeyId": { + "description": "Use to configure the KMS key to use when encrypting the device.", + "type": "string" + }, + "SnapshotId": { + "description": "The snapshot that defines the device contents.", + "type": "string" + }, + "Throughput": { + "description": "For GP3 volumes only - The throughput in MiB/s that the volume supports.", + "type": "integer" + }, + "VolumeSize": { + "description": "Use to override the device's volume size.", + "type": "integer" + }, + "VolumeType": { + "description": "Use to override the device's volume type.", + "type": "string", + "enum": [ + "standard", + "io1", + "io2", + "gp2", + "gp3", + "sc1", + "st1" + ] + } + } + }, + "AdditionalInstanceConfiguration": { + "additionalProperties": false, + "description": "Specify additional settings and launch scripts for your build instances.", + "type": "object", + "properties": { + "SystemsManagerAgent": { + "description": "Contains settings for the SSM agent on your build instance.", + "$ref": "#/definitions/SystemsManagerAgent" + }, + "UserDataOverride": { + "description": "Use this property to provide commands or a command script to run when you launch your build instance.", + "type": "string" + } + } + }, + "SystemsManagerAgent": { + "additionalProperties": false, + "description": "Contains settings for the SSM agent on your build instance.", + "type": "object", + "properties": { + "UninstallAfterBuild": { + "description": "Controls whether the SSM agent is removed from your final build image, prior to creating the new AMI. If this is set to true, then the agent is removed from the final image. If it's set to false, then the agent is left in, so that it is included in the new AMI. The default value is false.", + "type": "boolean" + } + } + }, + "ComponentParameter": { + "additionalProperties": false, + "description": "Contains a key/value pair that sets the named component parameter.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the component parameter to set.", + "type": "string" + }, + "Value": { + "description": "Sets the value for the named component parameter.", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "Name", + "Value" + ] + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Version", + "Components", + "ParentImage" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Version", + "/properties/Components", + "/properties/ParentImage", + "/properties/Description", + "/properties/BlockDeviceMappings", + "/properties/WorkingDirectory", + "/properties/Tags" + ], + "propertyTransform": { + "/properties/BlockDeviceMappings/*/Ebs/VolumeType": "$uppercase(VolumeType)" + }, + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "imagebuilder:GetComponent", + "imagebuilder:GetImage", + "imagebuilder:TagResource", + "imagebuilder:GetImageRecipe", + "imagebuilder:CreateImageRecipe", + "ec2:DescribeImages" + ] + }, + "read": { + "permissions": [ + "imagebuilder:GetImageRecipe" + ] + }, + "delete": { + "permissions": [ + "imagebuilder:UnTagResource", + "imagebuilder:GetImageRecipe", + "imagebuilder:DeleteImageRecipe" + ] + }, + "list": { + "permissions": [ + "imagebuilder:ListImageRecipes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/imagebuilder/infrastructureconfiguration.json b/internal/aws/cfn/schemas/aws/imagebuilder/infrastructureconfiguration.json new file mode 100644 index 00000000..488427b7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/imagebuilder/infrastructureconfiguration.json @@ -0,0 +1,204 @@ +{ + "typeName": "AWS::ImageBuilder::InfrastructureConfiguration", + "description": "Resource schema for AWS::ImageBuilder::InfrastructureConfiguration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the infrastructure configuration.", + "type": "string" + }, + "Name": { + "description": "The name of the infrastructure configuration.", + "type": "string" + }, + "Description": { + "description": "The description of the infrastructure configuration.", + "type": "string" + }, + "InstanceTypes": { + "description": "The instance types of the infrastructure configuration.", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "description": "The security group IDs of the infrastructure configuration.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Logging": { + "description": "The logging configuration of the infrastructure configuration.", + "$ref": "#/definitions/Logging" + }, + "SubnetId": { + "description": "The subnet ID of the infrastructure configuration.", + "type": "string" + }, + "KeyPair": { + "description": "The EC2 key pair of the infrastructure configuration..", + "type": "string" + }, + "TerminateInstanceOnFailure": { + "description": "The terminate instance on failure configuration of the infrastructure configuration.", + "type": "boolean" + }, + "InstanceProfileName": { + "description": "The instance profile of the infrastructure configuration.", + "type": "string" + }, + "InstanceMetadataOptions": { + "description": "The instance metadata option settings for the infrastructure configuration.", + "$ref": "#/definitions/InstanceMetadataOptions" + }, + "SnsTopicArn": { + "description": "The SNS Topic Amazon Resource Name (ARN) of the infrastructure configuration.", + "type": "string" + }, + "ResourceTags": { + "description": "The tags attached to the resource created by Image Builder.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + }, + "Tags": { + "description": "The tags associated with the component.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".{1,}": { + "type": "string" + } + } + } + }, + "definitions": { + "TagMap": { + "description": "TagMap", + "type": "object", + "additionalProperties": false, + "properties": { + "TagKey": { + "description": "TagKey", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "TagValue": { + "description": "TagValue", + "type": "string", + "minLength": 1, + "maxLength": 256 + } + } + }, + "Logging": { + "description": "The logging configuration of the infrastructure configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "S3Logs": { + "$ref": "#/definitions/S3Logs" + } + } + }, + "InstanceMetadataOptions": { + "description": "The instance metadata option settings for the infrastructure configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "HttpPutResponseHopLimit": { + "description": "Limit the number of hops that an instance metadata request can traverse to reach its destination.", + "type": "integer" + }, + "HttpTokens": { + "description": "Indicates whether a signed token header is required for instance metadata retrieval requests. The values affect the response as follows: ", + "type": "string", + "enum": [ + "required", + "optional" + ] + } + } + }, + "S3Logs": { + "description": "The S3 path in which to store the logs.", + "type": "object", + "additionalProperties": false, + "properties": { + "S3BucketName": { + "description": "S3BucketName", + "type": "string" + }, + "S3KeyPrefix": { + "description": "S3KeyPrefix", + "type": "string" + } + } + } + }, + "required": [ + "Name", + "InstanceProfileName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "iam:GetRole", + "iam:GetInstanceProfile", + "iam:CreateServiceLinkedRole", + "sns:Publish", + "imagebuilder:TagResource", + "imagebuilder:GetInfrastructureConfiguration", + "imagebuilder:CreateInfrastructureConfiguration" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "sns:Publish", + "imagebuilder:GetInfrastructureConfiguration", + "imagebuilder:UpdateInfrastructureConfiguration" + ] + }, + "read": { + "permissions": [ + "imagebuilder:GetInfrastructureConfiguration" + ] + }, + "delete": { + "permissions": [ + "imagebuilder:UnTagResource", + "imagebuilder:GetInfrastructureConfiguration", + "imagebuilder:DeleteInfrastructureConfiguration" + ] + }, + "list": { + "permissions": [ + "imagebuilder:ListInfrastructureConfigurations" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/inspector/assessmenttarget.json b/internal/aws/cfn/schemas/aws/inspector/assessmenttarget.json new file mode 100644 index 00000000..62df42e1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/inspector/assessmenttarget.json @@ -0,0 +1,56 @@ +{ + "typeName": "AWS::Inspector::AssessmentTarget", + "description": "Resource Type definition for AWS::Inspector::AssessmentTarget", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "AssessmentTargetName": { + "type": "string" + }, + "ResourceGroupArn": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AssessmentTargetName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "taggable": false, + "handlers": { + "create": { + "permissions": [ + "inspector:CreateAssessmentTarget", + "inspector:ListAssessmentTargets", + "inspector:DescribeAssessmentTargets" + ] + }, + "update": { + "permissions": [ + "inspector:DescribeAssessmentTargets", + "inspector:UpdateAssessmentTarget" + ] + }, + "read": { + "permissions": [ + "inspector:DescribeAssessmentTargets" + ] + }, + "delete": { + "permissions": [ + "inspector:DeleteAssessmentTarget" + ] + }, + "list": { + "permissions": [ + "inspector:ListAssessmentTargets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/inspector/assessmenttemplate.json b/internal/aws/cfn/schemas/aws/inspector/assessmenttemplate.json new file mode 100644 index 00000000..75a4d24f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/inspector/assessmenttemplate.json @@ -0,0 +1,94 @@ +{ + "typeName": "AWS::Inspector::AssessmentTemplate", + "description": "Resource Type definition for AWS::Inspector::AssessmentTemplate", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "AssessmentTargetArn": { + "type": "string" + }, + "DurationInSeconds": { + "type": "integer" + }, + "AssessmentTemplateName": { + "type": "string" + }, + "RulesPackageArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "UserAttributesForFindings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "AssessmentTargetArn", + "DurationInSeconds", + "RulesPackageArns" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/DurationInSeconds", + "/properties/AssessmentTemplateName", + "/properties/UserAttributesForFindings", + "/properties/AssessmentTargetArn", + "/properties/RulesPackageArns" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "taggable": false, + "handlers": { + "create": { + "permissions": [ + "inspector:CreateAssessmentTemplate", + "inspector:ListAssessmentTemplates", + "inspector:DescribeAssessmentTemplates" + ] + }, + "read": { + "permissions": [ + "inspector:DescribeAssessmentTemplates" + ] + }, + "delete": { + "permissions": [ + "inspector:DeleteAssessmentTemplate" + ] + }, + "list": { + "permissions": [ + "inspector:ListAssessmentTemplates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/inspector/resourcegroup.json b/internal/aws/cfn/schemas/aws/inspector/resourcegroup.json new file mode 100644 index 00000000..089c18d9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/inspector/resourcegroup.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::Inspector::ResourceGroup", + "description": "Resource Type definition for AWS::Inspector::ResourceGroup", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "ResourceGroupTags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "ResourceGroupTags" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ResourceGroupTags" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "taggable": false, + "handlers": { + "create": { + "permissions": [ + "inspector:CreateResourceGroup" + ] + }, + "read": { + "permissions": [ + "inspector:CreateResourceGroup" + ] + }, + "delete": { + "permissions": [ + "inspector:CreateResourceGroup" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/inspectorv2/filter.json b/internal/aws/cfn/schemas/aws/inspectorv2/filter.json new file mode 100644 index 00000000..571f33cb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/inspectorv2/filter.json @@ -0,0 +1,372 @@ +{ + "typeName": "AWS::InspectorV2::Filter", + "description": "Inspector Filter resource schema", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-inspector.git", + "definitions": { + "StringComparison": { + "type": "string", + "enum": [ + "EQUALS", + "PREFIX", + "NOT_EQUALS" + ] + }, + "StringInput": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "StringFilter": { + "type": "object", + "required": [ + "Comparison", + "Value" + ], + "properties": { + "Comparison": { + "$ref": "#/definitions/StringComparison" + }, + "Value": { + "$ref": "#/definitions/StringInput" + } + }, + "additionalProperties": false + }, + "StringFilterList": { + "type": "array", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "insertionOrder": false, + "maxItems": 10, + "minItems": 1 + }, + "Timestamp": { + "type": "integer", + "format": "int64" + }, + "DateFilter": { + "type": "object", + "properties": { + "EndInclusive": { + "$ref": "#/definitions/Timestamp" + }, + "StartInclusive": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false + }, + "DateFilterList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DateFilter" + }, + "maxItems": 10, + "minItems": 1 + }, + "Port": { + "type": "integer", + "maximum": 65535, + "minimum": 0 + }, + "PortRangeFilter": { + "type": "object", + "properties": { + "BeginInclusive": { + "$ref": "#/definitions/Port" + }, + "EndInclusive": { + "$ref": "#/definitions/Port" + } + }, + "additionalProperties": false + }, + "PortRangeFilterList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PortRangeFilter" + }, + "maxItems": 10, + "minItems": 1 + }, + "NumberFilter": { + "type": "object", + "properties": { + "LowerInclusive": { + "type": "number" + }, + "UpperInclusive": { + "type": "number" + } + }, + "additionalProperties": false + }, + "NumberFilterList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/NumberFilter" + }, + "maxItems": 10, + "minItems": 1 + }, + "MapComparison": { + "type": "string", + "enum": [ + "EQUALS" + ] + }, + "MapFilter": { + "type": "object", + "required": [ + "Comparison" + ], + "properties": { + "Comparison": { + "$ref": "#/definitions/MapComparison" + }, + "Key": { + "$ref": "#/definitions/MapKey" + }, + "Value": { + "$ref": "#/definitions/MapValue" + } + }, + "additionalProperties": false + }, + "MapFilterList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MapFilter" + }, + "maxItems": 10, + "minItems": 1 + }, + "PackageFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Architecture": { + "$ref": "#/definitions/StringFilter" + }, + "Epoch": { + "$ref": "#/definitions/NumberFilter" + }, + "Name": { + "$ref": "#/definitions/StringFilter" + }, + "Release": { + "$ref": "#/definitions/StringFilter" + }, + "SourceLayerHash": { + "$ref": "#/definitions/StringFilter" + }, + "Version": { + "$ref": "#/definitions/StringFilter" + } + } + }, + "PackageFilterList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PackageFilter" + }, + "maxItems": 10, + "minItems": 1 + }, + "FilterCriteria": { + "type": "object", + "additionalProperties": false, + "properties": { + "AwsAccountId": { + "$ref": "#/definitions/StringFilterList" + }, + "ComponentId": { + "$ref": "#/definitions/StringFilterList" + }, + "ComponentType": { + "$ref": "#/definitions/StringFilterList" + }, + "Ec2InstanceImageId": { + "$ref": "#/definitions/StringFilterList" + }, + "Ec2InstanceSubnetId": { + "$ref": "#/definitions/StringFilterList" + }, + "Ec2InstanceVpcId": { + "$ref": "#/definitions/StringFilterList" + }, + "EcrImageArchitecture": { + "$ref": "#/definitions/StringFilterList" + }, + "EcrImageHash": { + "$ref": "#/definitions/StringFilterList" + }, + "EcrImageTags": { + "$ref": "#/definitions/StringFilterList" + }, + "EcrImagePushedAt": { + "$ref": "#/definitions/DateFilterList" + }, + "EcrImageRegistry": { + "$ref": "#/definitions/StringFilterList" + }, + "EcrImageRepositoryName": { + "$ref": "#/definitions/StringFilterList" + }, + "FindingArn": { + "$ref": "#/definitions/StringFilterList" + }, + "FindingStatus": { + "$ref": "#/definitions/StringFilterList" + }, + "FindingType": { + "$ref": "#/definitions/StringFilterList" + }, + "FirstObservedAt": { + "$ref": "#/definitions/DateFilterList" + }, + "InspectorScore": { + "$ref": "#/definitions/NumberFilterList" + }, + "LastObservedAt": { + "$ref": "#/definitions/DateFilterList" + }, + "NetworkProtocol": { + "$ref": "#/definitions/StringFilterList" + }, + "PortRange": { + "$ref": "#/definitions/PortRangeFilterList" + }, + "RelatedVulnerabilities": { + "$ref": "#/definitions/StringFilterList" + }, + "ResourceId": { + "$ref": "#/definitions/StringFilterList" + }, + "ResourceTags": { + "$ref": "#/definitions/MapFilterList" + }, + "ResourceType": { + "$ref": "#/definitions/StringFilterList" + }, + "Severity": { + "$ref": "#/definitions/StringFilterList" + }, + "Title": { + "$ref": "#/definitions/StringFilterList" + }, + "UpdatedAt": { + "$ref": "#/definitions/DateFilterList" + }, + "VendorSeverity": { + "$ref": "#/definitions/StringFilterList" + }, + "VulnerabilityId": { + "$ref": "#/definitions/StringFilterList" + }, + "VulnerabilitySource": { + "$ref": "#/definitions/StringFilterList" + }, + "VulnerablePackages": { + "$ref": "#/definitions/PackageFilterList" + } + } + }, + "FilterAction": { + "type": "string", + "enum": [ + "NONE", + "SUPPRESS" + ] + }, + "MapKey": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "MapValue": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "properties": { + "Name": { + "description": "Findings filter name.", + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Description": { + "description": "Findings filter description.", + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FilterCriteria": { + "description": "Findings filter criteria.", + "$ref": "#/definitions/FilterCriteria" + }, + "FilterAction": { + "description": "Findings filter action.", + "$ref": "#/definitions/FilterAction" + }, + "Arn": { + "description": "Findings filter ARN.", + "type": "string", + "maxLength": 128, + "minLength": 1 + } + }, + "tagging": { + "taggable": false + }, + "required": [ + "Name", + "FilterCriteria", + "FilterAction" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "inspector2:CreateFilter", + "inspector2:ListFilters" + ] + }, + "read": { + "permissions": [ + "inspector2:ListFilters" + ] + }, + "update": { + "permissions": [ + "inspector2:ListFilters", + "inspector2:UpdateFilter" + ] + }, + "delete": { + "permissions": [ + "inspector2:DeleteFilter", + "inspector2:ListFilters" + ] + }, + "list": { + "permissions": [ + "inspector2:ListFilters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/internetmonitor/monitor.json b/internal/aws/cfn/schemas/aws/internetmonitor/monitor.json new file mode 100644 index 00000000..131ee301 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/internetmonitor/monitor.json @@ -0,0 +1,293 @@ +{ + "typeName": "AWS::InternetMonitor::Monitor", + "description": "Represents a monitor, which defines the monitoring boundaries for measurements that Internet Monitor publishes information about for an application", + "definitions": { + "MonitorConfigState": { + "type": "string", + "enum": [ + "PENDING", + "ACTIVE", + "INACTIVE", + "ERROR" + ] + }, + "MonitorProcessingStatusCode": { + "type": "string", + "enum": [ + "OK", + "INACTIVE", + "COLLECTING_DATA", + "INSUFFICIENT_DATA", + "FAULT_SERVICE", + "FAULT_ACCESS_CLOUDWATCH" + ] + }, + "Tag": { + "description": "The metadata that you apply to the cluster to help you categorize and organize them. Each tag consists of a key and an optional value, both of which you define.", + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + }, + "iso8601UTC": { + "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + }, + "InternetMeasurementsLogDelivery": { + "type": "object", + "properties": { + "S3Config": { + "$ref": "#/definitions/S3Config" + } + }, + "additionalProperties": false + }, + "S3Config": { + "type": "object", + "properties": { + "BucketName": { + "type": "string", + "minLength": 3 + }, + "BucketPrefix": { + "type": "string" + }, + "LogDeliveryStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + } + }, + "additionalProperties": false + }, + "HealthEventsConfig": { + "type": "object", + "properties": { + "AvailabilityScoreThreshold": { + "type": "number", + "minimum": 0.0, + "maximum": 100.0 + }, + "PerformanceScoreThreshold": { + "type": "number", + "minimum": 0.0, + "maximum": 100.0 + }, + "AvailabilityLocalHealthEventsConfig": { + "$ref": "#/definitions/LocalHealthEventsConfig" + }, + "PerformanceLocalHealthEventsConfig": { + "$ref": "#/definitions/LocalHealthEventsConfig" + } + }, + "additionalProperties": false + }, + "LocalHealthEventsConfig": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "HealthScoreThreshold": { + "type": "number", + "minimum": 0.0, + "maximum": 100.0 + }, + "MinTrafficImpact": { + "type": "number", + "minimum": 0.0, + "maximum": 100.0 + } + }, + "additionalProperties": false + } + }, + "properties": { + "CreatedAt": { + "$ref": "#/definitions/iso8601UTC" + }, + "ModifiedAt": { + "$ref": "#/definitions/iso8601UTC" + }, + "MonitorArn": { + "type": "string", + "maxLength": 512, + "minLength": 20, + "pattern": "^arn:.*" + }, + "MonitorName": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^[a-zA-Z0-9_.-]+$" + }, + "LinkedAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^(\\d{12})$" + }, + "IncludeLinkedAccounts": { + "type": "boolean" + }, + "ProcessingStatus": { + "$ref": "#/definitions/MonitorProcessingStatusCode" + }, + "ProcessingStatusInfo": { + "type": "string" + }, + "Resources": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:.*" + } + }, + "ResourcesToAdd": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20 + } + }, + "ResourcesToRemove": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20 + } + }, + "Status": { + "$ref": "#/definitions/MonitorConfigState" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "MaxCityNetworksToMonitor": { + "type": "integer", + "minimum": 1, + "maximum": 500000 + }, + "TrafficPercentageToMonitor": { + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "InternetMeasurementsLogDelivery": { + "$ref": "#/definitions/InternetMeasurementsLogDelivery" + }, + "HealthEventsConfig": { + "$ref": "#/definitions/HealthEventsConfig" + } + }, + "readOnlyProperties": [ + "/properties/CreatedAt", + "/properties/ModifiedAt", + "/properties/MonitorArn", + "/properties/ProcessingStatus", + "/properties/ProcessingStatusInfo" + ], + "writeOnlyProperties": [ + "/properties/ResourcesToAdd", + "/properties/ResourcesToRemove", + "/properties/LinkedAccountId", + "/properties/IncludeLinkedAccounts" + ], + "createOnlyProperties": [ + "/properties/MonitorName" + ], + "primaryIdentifier": [ + "/properties/MonitorName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": false, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "internetmonitor:CreateMonitor", + "internetmonitor:GetMonitor", + "internetmonitor:TagResource", + "internetmonitor:UntagResource", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "s3:ListBucket", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "internetmonitor:GetMonitor", + "internetmonitor:ListTagsForResource", + "logs:GetLogDelivery" + ] + }, + "update": { + "permissions": [ + "internetmonitor:CreateMonitor", + "internetmonitor:GetMonitor", + "internetmonitor:UpdateMonitor", + "internetmonitor:TagResource", + "internetmonitor:UntagResource", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "s3:ListBucket", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "internetmonitor:UpdateMonitor", + "internetmonitor:DeleteMonitor", + "internetmonitor:GetMonitor", + "logs:DeleteLogDelivery" + ] + }, + "list": { + "permissions": [ + "internetmonitor:ListMonitors", + "internetmonitor:GetMonitor", + "logs:GetLogDelivery" + ] + } + }, + "additionalProperties": false, + "required": [ + "MonitorName" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iot/accountauditconfiguration.json b/internal/aws/cfn/schemas/aws/iot/accountauditconfiguration.json new file mode 100644 index 00000000..54d2af21 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/accountauditconfiguration.json @@ -0,0 +1,171 @@ +{ + "typeName": "AWS::IoT::AccountAuditConfiguration", + "description": "Configures the Device Defender audit settings for this account. Settings include how audit notifications are sent and which audit checks are enabled or disabled.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "definitions": { + "AuditCheckConfigurations": { + "description": "Specifies which audit checks are enabled and disabled for this account.", + "type": "object", + "properties": { + "AuthenticatedCognitoRoleOverlyPermissiveCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "CaCertificateExpiringCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "CaCertificateKeyQualityCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "ConflictingClientIdsCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "DeviceCertificateExpiringCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "DeviceCertificateKeyQualityCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "DeviceCertificateSharedCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "IotPolicyOverlyPermissiveCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "IotRoleAliasAllowsAccessToUnusedServicesCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "IotRoleAliasOverlyPermissiveCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "LoggingDisabledCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "RevokedCaCertificateStillActiveCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "RevokedDeviceCertificateStillActiveCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "UnauthenticatedCognitoRoleOverlyPermissiveCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "IntermediateCaRevokedForActiveDeviceCertificatesCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + }, + "IoTPolicyPotentialMisConfigurationCheck": { + "$ref": "#/definitions/AuditCheckConfiguration" + } + }, + "additionalProperties": false + }, + "AuditNotificationTargetConfigurations": { + "description": "Information about the targets to which audit notifications are sent.", + "type": "object", + "properties": { + "Sns": { + "$ref": "#/definitions/AuditNotificationTarget" + } + }, + "additionalProperties": false + }, + "AuditCheckConfiguration": { + "description": "The configuration for a specific audit check.", + "type": "object", + "properties": { + "Enabled": { + "description": "True if the check is enabled.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "AuditNotificationTarget": { + "type": "object", + "properties": { + "TargetArn": { + "description": "The ARN of the target (SNS topic) to which audit notifications are sent.", + "type": "string", + "maxLength": 2048 + }, + "RoleArn": { + "description": "The ARN of the role that grants permission to send notifications to the target.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Enabled": { + "description": "True if notifications to the target are enabled.", + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "properties": { + "AccountId": { + "description": "Your 12-digit account ID (used as the primary identifier for the CloudFormation resource).", + "type": "string", + "minLength": 12, + "maxLength": 12 + }, + "AuditCheckConfigurations": { + "$ref": "#/definitions/AuditCheckConfigurations" + }, + "AuditNotificationTargetConfigurations": { + "$ref": "#/definitions/AuditNotificationTargetConfigurations" + }, + "RoleArn": { + "description": "The ARN of the role that grants permission to AWS IoT to access information about your devices, policies, certificates and other items as required when performing an audit.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/AccountId" + ], + "required": [ + "AccountId", + "AuditCheckConfigurations", + "RoleArn" + ], + "createOnlyProperties": [ + "/properties/AccountId" + ], + "handlers": { + "create": { + "permissions": [ + "iot:UpdateAccountAuditConfiguration", + "iot:DescribeAccountAuditConfiguration", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iot:DescribeAccountAuditConfiguration" + ] + }, + "update": { + "permissions": [ + "iot:UpdateAccountAuditConfiguration", + "iot:DescribeAccountAuditConfiguration", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeAccountAuditConfiguration", + "iot:DeleteAccountAuditConfiguration" + ] + }, + "list": { + "permissions": [ + "iot:DescribeAccountAuditConfiguration" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/authorizer.json b/internal/aws/cfn/schemas/aws/iot/authorizer.json new file mode 100644 index 00000000..e85a5553 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/authorizer.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::IoT::Authorizer", + "description": "Creates an authorizer.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "AuthorizerFunctionArn": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "AuthorizerName": { + "type": "string", + "pattern": "[\\w=,@-]+", + "minLength": 1, + "maxLength": 128 + }, + "SigningDisabled": { + "type": "boolean" + }, + "Status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "TokenKeyName": { + "type": "string" + }, + "TokenSigningPublicKeys": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9:_-]+": { + "type": "string", + "maxLength": 5120 + } + } + }, + "EnableCachingForHttp": { + "type": "boolean" + }, + "Tags": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "AuthorizerFunctionArn" + ], + "createOnlyProperties": [ + "/properties/SigningDisabled", + "/properties/AuthorizerName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/AuthorizerName" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateAuthorizer", + "iot:DescribeAuthorizer", + "iot:TagResource", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeAuthorizer", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:UpdateAuthorizer", + "iot:DescribeAuthorizer", + "iot:TagResource", + "iot:UntagResource", + "iot:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iot:UpdateAuthorizer", + "iot:DeleteAuthorizer", + "iot:DescribeAuthorizer" + ] + }, + "list": { + "permissions": [ + "iot:ListAuthorizers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/billinggroup.json b/internal/aws/cfn/schemas/aws/iot/billinggroup.json new file mode 100644 index 00000000..a31e20a9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/billinggroup.json @@ -0,0 +1,120 @@ +{ + "typeName": "AWS::IoT::BillingGroup", + "description": "Resource Type definition for AWS::IoT::BillingGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "BillingGroupName": { + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "BillingGroupProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "BillingGroupDescription": { + "type": "string", + "maxLength": 2028, + "pattern": "[\\p{Graph}\\x20]*" + } + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/BillingGroupName" + ], + "primaryIdentifier": [ + "/properties/BillingGroupName" + ], + "handlers": { + "create": { + "permissions": [ + "iot:DescribeBillingGroup", + "iot:ListTagsForResource", + "iot:CreateBillingGroup", + "iot:TagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeBillingGroup", + "iot:DeleteBillingGroup" + ] + }, + "list": { + "permissions": [ + "iot:ListBillingGroups", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeBillingGroup", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:DescribeBillingGroup", + "iot:UpdateBillingGroup", + "iot:ListTagsForResource", + "iot:TagResource", + "iot:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/cacertificate.json b/internal/aws/cfn/schemas/aws/iot/cacertificate.json new file mode 100644 index 00000000..1f2e16c6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/cacertificate.json @@ -0,0 +1,179 @@ +{ + "typeName": "AWS::IoT::CACertificate", + "description": "Registers a CA Certificate in IoT.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "RegistrationConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TemplateBody": { + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 0, + "maxLength": 10240 + }, + "RoleArn": { + "type": "string", + "pattern": "arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+", + "minLength": 20, + "maxLength": 2048 + }, + "TemplateName": { + "type": "string", + "pattern": "^[0-9A-Za-z_-]+$", + "minLength": 1, + "maxLength": 36 + } + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "CACertificatePem": { + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 65536 + }, + "VerificationCertificatePem": { + "type": "string", + "description": "The private key verification certificate.", + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 65536 + }, + "Status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "CertificateMode": { + "type": "string", + "enum": [ + "DEFAULT", + "SNI_ONLY" + ] + }, + "AutoRegistrationStatus": { + "type": "string", + "enum": [ + "ENABLE", + "DISABLE" + ] + }, + "RemoveAutoRegistration": { + "type": "boolean" + }, + "RegistrationConfig": { + "$ref": "#/definitions/RegistrationConfig" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "CACertificatePem", + "Status" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/VerificationCertificatePem", + "/properties/CertificateMode", + "/properties/CACertificatePem" + ], + "writeOnlyProperties": [ + "/properties/VerificationCertificatePem", + "/properties/RemoveAutoRegistration" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "iot:RegisterCACertificate", + "iot:DescribeCACertificate", + "iot:TagResource", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeCACertificate", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "iot:UpdateCACertificate", + "iot:DescribeCACertificate", + "iot:TagResource", + "iot:UntagResource", + "iot:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iot:UpdateCACertificate", + "iot:DeleteCACertificate", + "iot:DescribeCACertificate" + ] + }, + "list": { + "permissions": [ + "iot:ListCACertificates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/certificate.json b/internal/aws/cfn/schemas/aws/iot/certificate.json new file mode 100644 index 00000000..06748cdf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/certificate.json @@ -0,0 +1,104 @@ +{ + "typeName": "AWS::IoT::Certificate", + "description": "Use the AWS::IoT::Certificate resource to declare an AWS IoT X.509 certificate.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": {}, + "properties": { + "CACertificatePem": { + "type": "string", + "minLength": 1, + "maxLength": 65536 + }, + "CertificatePem": { + "type": "string", + "minLength": 1, + "maxLength": 65536 + }, + "CertificateSigningRequest": { + "type": "string" + }, + "CertificateMode": { + "type": "string", + "enum": [ + "DEFAULT", + "SNI_ONLY" + ] + }, + "Status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE", + "REVOKED", + "PENDING_TRANSFER", + "PENDING_ACTIVATION" + ] + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "Status" + ], + "createOnlyProperties": [ + "/properties/CertificateSigningRequest", + "/properties/CACertificatePem", + "/properties/CertificatePem", + "/properties/CertificateMode" + ], + "writeOnlyProperties": [ + "/properties/CertificateSigningRequest", + "/properties/CACertificatePem" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateCertificateFromCsr", + "iot:RegisterCertificate", + "iot:RegisterCertificateWithoutCA", + "iot:DescribeCertificate" + ] + }, + "read": { + "permissions": [ + "iot:DescribeCertificate" + ] + }, + "update": { + "permissions": [ + "iot:UpdateCertificate", + "iot:DescribeCertificate" + ] + }, + "delete": { + "permissions": [ + "iot:DeleteCertificate", + "iot:UpdateCertificate", + "iot:DescribeCertificate" + ] + }, + "list": { + "permissions": [ + "iot:ListCertificates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/custommetric.json b/internal/aws/cfn/schemas/aws/iot/custommetric.json new file mode 100644 index 00000000..63d131eb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/custommetric.json @@ -0,0 +1,117 @@ +{ + "typeName": "AWS::IoT::CustomMetric", + "description": "A custom metric published by your devices to Device Defender.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag's value.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "MetricName": { + "description": "The name of the custom metric. This will be used in the metric report submitted from the device/thing. Shouldn't begin with aws: . Cannot be updated once defined.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "DisplayName": { + "description": "Field represents a friendly name in the console for the custom metric; it doesn't have to be unique. Don't use this name as the metric identifier in the device metric report. Can be updated once defined.", + "type": "string", + "maxLength": 128 + }, + "MetricType": { + "description": "The type of the custom metric. Types include string-list, ip-address-list, number-list, and number.", + "type": "string", + "enum": [ + "string-list", + "ip-address-list", + "number-list", + "number" + ] + }, + "MetricArn": { + "description": "The Amazon Resource Number (ARN) of the custom metric.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "MetricType" + ], + "createOnlyProperties": [ + "/properties/MetricName", + "/properties/MetricType" + ], + "readOnlyProperties": [ + "/properties/MetricArn" + ], + "primaryIdentifier": [ + "/properties/MetricName" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateCustomMetric", + "iot:TagResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeCustomMetric", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:UpdateCustomMetric", + "iot:ListTagsForResource", + "iot:UntagResource", + "iot:TagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeCustomMetric", + "iot:DeleteCustomMetric" + ] + }, + "list": { + "permissions": [ + "iot:ListCustomMetrics" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/dimension.json b/internal/aws/cfn/schemas/aws/iot/dimension.json new file mode 100644 index 00000000..cac5077d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/dimension.json @@ -0,0 +1,121 @@ +{ + "typeName": "AWS::IoT::Dimension", + "description": "A dimension can be used to limit the scope of a metric used in a security profile for AWS IoT Device Defender.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag's value.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "A unique identifier for the dimension.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "Type": { + "description": "Specifies the type of the dimension.", + "type": "string", + "enum": [ + "TOPIC_FILTER" + ] + }, + "StringValues": { + "description": "Specifies the value or list of values for the dimension.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "minItems": 1, + "maxItems": 5 + }, + "Tags": { + "description": "Metadata that can be used to manage the dimension.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "The ARN (Amazon resource name) of the created dimension.", + "type": "string" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Name" + ], + "required": [ + "Type", + "StringValues" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateDimension", + "iot:TagResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeDimension", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:UpdateDimension", + "iot:ListTagsForResource", + "iot:UntagResource", + "iot:TagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeDimension", + "iot:DeleteDimension" + ] + }, + "list": { + "permissions": [ + "iot:ListDimensions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/domainconfiguration.json b/internal/aws/cfn/schemas/aws/iot/domainconfiguration.json new file mode 100644 index 00000000..159586d1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/domainconfiguration.json @@ -0,0 +1,224 @@ +{ + "typeName": "AWS::IoT::DomainConfiguration", + "description": "Create and manage a Domain Configuration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AuthorizerConfig": { + "type": "object", + "properties": { + "AllowAuthorizerOverride": { + "type": "boolean" + }, + "DefaultAuthorizerName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[\\w=,@-]+$" + } + }, + "additionalProperties": false + }, + "ServerCertificateConfig": { + "type": "object", + "properties": { + "EnableOCSPCheck": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "ServerCertificateSummary": { + "type": "object", + "properties": { + "ServerCertificateArn": { + "type": "string", + "pattern": "^arn:aws(-cn|-us-gov|-iso-b|-iso)?:acm:[a-z]{2}-(gov-|iso-|isob-)?[a-z]{4,9}-\\d{1}:\\d{12}:certificate/[a-zA-Z0-9/-]+$", + "minLength": 1, + "maxLength": 2048 + }, + "ServerCertificateStatus": { + "type": "string", + "enum": [ + "INVALID", + "VALID" + ] + }, + "ServerCertificateStatusDetail": { + "type": "string" + } + }, + "additionalProperties": false + }, + "TlsConfig": { + "type": "object", + "properties": { + "SecurityPolicy": { + "type": "string", + "maxLength": 128 + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "DomainConfigurationName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[\\w.-]+$" + }, + "AuthorizerConfig": { + "$ref": "#/definitions/AuthorizerConfig" + }, + "DomainName": { + "type": "string", + "minLength": 1, + "maxLength": 253 + }, + "ServerCertificateArns": { + "type": "array", + "minItems": 0, + "maxItems": 1, + "insertionOrder": true, + "items": { + "type": "string", + "pattern": "^arn:aws(-cn|-us-gov|-iso-b|-iso)?:acm:[a-z]{2}-(gov-|iso-|isob-)?[a-z]{4,9}-\\d{1}:\\d{12}:certificate/[a-zA-Z0-9/-]+$", + "minLength": 1, + "maxLength": 2048 + } + }, + "ServiceType": { + "type": "string", + "enum": [ + "DATA", + "CREDENTIAL_PROVIDER", + "JOBS" + ] + }, + "ValidationCertificateArn": { + "type": "string", + "pattern": "^arn:aws(-cn|-us-gov|-iso-b|-iso)?:acm:[a-z]{2}-(gov-|iso-|isob-)?[a-z]{4,9}-\\d{1}:\\d{12}:certificate/[a-zA-Z0-9/-]+$" + }, + "Arn": { + "type": "string" + }, + "DomainConfigurationStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "DomainType": { + "type": "string", + "enum": [ + "ENDPOINT", + "AWS_MANAGED", + "CUSTOMER_MANAGED" + ] + }, + "ServerCertificateConfig": { + "$ref": "#/definitions/ServerCertificateConfig" + }, + "ServerCertificates": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ServerCertificateSummary" + } + }, + "TlsConfig": { + "$ref": "#/definitions/TlsConfig" + }, + "Tags": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [], + "createOnlyProperties": [ + "/properties/DomainConfigurationName", + "/properties/DomainName", + "/properties/ServiceType", + "/properties/ValidationCertificateArn", + "/properties/ServerCertificateArns" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/DomainType", + "/properties/ServerCertificates" + ], + "writeOnlyProperties": [ + "/properties/ValidationCertificateArn", + "/properties/ServerCertificateArns" + ], + "primaryIdentifier": [ + "/properties/DomainConfigurationName" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateDomainConfiguration", + "iot:UpdateDomainConfiguration", + "iot:DescribeDomainConfiguration", + "iot:TagResource", + "iot:ListTagsForResource", + "acm:GetCertificate" + ] + }, + "read": { + "permissions": [ + "iot:DescribeDomainConfiguration", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:UpdateDomainConfiguration", + "iot:DescribeDomainConfiguration", + "iot:ListTagsForResource", + "iot:TagResource", + "iot:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeDomainConfiguration", + "iot:DeleteDomainConfiguration", + "iot:UpdateDomainConfiguration" + ] + }, + "list": { + "permissions": [ + "iot:ListDomainConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/fleetmetric.json b/internal/aws/cfn/schemas/aws/iot/fleetmetric.json new file mode 100644 index 00000000..dcd5d55d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/fleetmetric.json @@ -0,0 +1,173 @@ +{ + "typeName": "AWS::IoT::FleetMetric", + "description": "An aggregated metric of certain devices in your fleet", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "taggable": true, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag's value", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + }, + "AggregationType": { + "description": "Aggregation types supported by Fleet Indexing", + "type": "object", + "properties": { + "Name": { + "description": "Fleet Indexing aggregation type names such as Statistics, Percentiles and Cardinality", + "type": "string" + }, + "Values": { + "description": "Fleet Indexing aggregation type values", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "iso8601UTC": { + "description": "The datetime value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ss.sssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + } + }, + "properties": { + "MetricName": { + "description": "The name of the fleet metric", + "type": "string" + }, + "Description": { + "description": "The description of a fleet metric", + "type": "string" + }, + "QueryString": { + "description": "The Fleet Indexing query used by a fleet metric", + "type": "string" + }, + "Period": { + "description": "The period of metric emission in seconds", + "type": "integer" + }, + "AggregationField": { + "description": "The aggregation field to perform aggregation and metric emission", + "type": "string" + }, + "QueryVersion": { + "description": "The version of a Fleet Indexing query used by a fleet metric", + "type": "string" + }, + "IndexName": { + "description": "The index name of a fleet metric", + "type": "string" + }, + "Unit": { + "description": "The unit of data points emitted by a fleet metric", + "type": "string" + }, + "AggregationType": { + "$ref": "#/definitions/AggregationType" + }, + "MetricArn": { + "description": "The Amazon Resource Number (ARN) of a fleet metric metric", + "type": "string" + }, + "CreationDate": { + "description": "The creation date of a fleet metric", + "$ref": "#/definitions/iso8601UTC" + }, + "LastModifiedDate": { + "description": "The last modified date of a fleet metric", + "$ref": "#/definitions/iso8601UTC" + }, + "Version": { + "description": "The version of a fleet metric", + "type": "number" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "MetricName" + ], + "readOnlyProperties": [ + "/properties/MetricArn", + "/properties/CreationDate", + "/properties/LastModifiedDate", + "/properties/Version" + ], + "createOnlyProperties": [ + "/properties/MetricName" + ], + "primaryIdentifier": [ + "/properties/MetricName" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateFleetMetric", + "iot:DescribeFleetMetric", + "iot:TagResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeFleetMetric", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:UpdateFleetMetric", + "iot:DescribeFleetMetric", + "iot:ListTagsForResource", + "iot:UntagResource", + "iot:TagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DeleteFleetMetric", + "iot:DescribeFleetMetric" + ] + }, + "list": { + "permissions": [ + "iot:ListFleetMetrics" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/jobtemplate.json b/internal/aws/cfn/schemas/aws/iot/jobtemplate.json new file mode 100644 index 00000000..0630ca69 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/jobtemplate.json @@ -0,0 +1,403 @@ +{ + "typeName": "AWS::IoT::JobTemplate", + "description": "Job templates enable you to preconfigure jobs so that you can deploy them to multiple sets of target devices.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "documentationUrl": "https://docs.aws.amazon.com/iot/latest/developerguide/job-templates.html", + "definitions": { + "ExponentialRolloutRate": { + "description": "Allows you to create an exponential rate of rollout for a job.", + "type": "object", + "properties": { + "BaseRatePerMinute": { + "description": "The minimum number of things that will be notified of a pending job, per minute at the start of job rollout. This parameter allows you to define the initial rate of rollout.", + "$ref": "#/definitions/BaseRatePerMinute" + }, + "IncrementFactor": { + "description": "The exponential factor to increase the rate of rollout for a job.", + "$ref": "#/definitions/IncrementFactor" + }, + "RateIncreaseCriteria": { + "description": "The criteria to initiate the increase in rate of rollout for a job.", + "type": "object", + "$ref": "#/definitions/RateIncreaseCriteria" + } + }, + "additionalProperties": false, + "required": [ + "BaseRatePerMinute", + "IncrementFactor", + "RateIncreaseCriteria" + ] + }, + "BaseRatePerMinute": { + "type": "integer", + "minimum": 1 + }, + "IncrementFactor": { + "type": "number", + "minimum": 1, + "maximum": 5 + }, + "RateIncreaseCriteria": { + "type": "object", + "properties": { + "NumberOfNotifiedThings": { + "$ref": "#/definitions/NumberOfNotifiedThings" + }, + "NumberOfSucceededThings": { + "$ref": "#/definitions/NumberOfSucceededThings" + } + }, + "additionalProperties": false + }, + "NumberOfNotifiedThings": { + "type": "integer", + "minimum": 1 + }, + "NumberOfSucceededThings": { + "type": "integer", + "minimum": 1 + }, + "MaximumPerMinute": { + "type": "integer", + "minimum": 1 + }, + "AbortCriteria": { + "description": "The criteria that determine when and how a job abort takes place.", + "type": "object", + "properties": { + "Action": { + "description": "The type of job action to take to initiate the job abort.", + "$ref": "#/definitions/Action" + }, + "FailureType": { + "description": "The type of job execution failures that can initiate a job abort.", + "$ref": "#/definitions/FailureType" + }, + "MinNumberOfExecutedThings": { + "description": "The minimum number of things which must receive job execution notifications before the job can be aborted.", + "$ref": "#/definitions/MinNumberOfExecutedThings" + }, + "ThresholdPercentage": { + "description": "The minimum percentage of job execution failures that must occur to initiate the job abort.", + "$ref": "#/definitions/ThresholdPercentage" + } + }, + "additionalProperties": false, + "required": [ + "Action", + "FailureType", + "MinNumberOfExecutedThings", + "ThresholdPercentage" + ] + }, + "Action": { + "type": "string", + "enum": [ + "CANCEL" + ] + }, + "FailureType": { + "type": "string", + "enum": [ + "FAILED", + "REJECTED", + "TIMED_OUT", + "ALL" + ] + }, + "MinNumberOfExecutedThings": { + "type": "integer", + "minimum": 1 + }, + "ThresholdPercentage": { + "type": "number", + "maximum": 100 + }, + "InProgressTimeoutInMinutes": { + "description": "Specifies the amount of time, in minutes, this device has to finish execution of this job.", + "type": "integer", + "minimum": 1, + "maximum": 10080 + }, + "RoleArn": { + "description": "The ARN of an IAM role that grants grants permission to download files from the S3 bucket where the job data/updates are stored. The role must also grant permission for IoT to download the files.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "ExpiresInSec": { + "description": "How number (in seconds) pre-signed URLs are valid.", + "type": "integer", + "minimum": 60, + "maximum": 3600 + }, + "RetryCriteria": { + "description": "Specifies how many times a failure type should be retried.", + "type": "object", + "properties": { + "NumberOfRetries": { + "type": "integer", + "minimum": 0, + "maximum": 10 + }, + "FailureType": { + "$ref": "#/definitions/JobRetryFailureType" + } + }, + "additionalProperties": false + }, + "JobRetryFailureType": { + "type": "string", + "enum": [ + "FAILED", + "TIMED_OUT", + "ALL" + ] + }, + "MaintenanceWindow": { + "description": "Specifies a start time and duration for a scheduled Job.", + "type": "object", + "properties": { + "StartTime": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "DurationInMinutes": { + "type": "integer", + "minimum": 1, + "maximum": 1430 + } + }, + "additionalProperties": false + }, + "DestinationPackageVersion": { + "description": "Specifies target package version ARNs for a software update job.", + "type": "string", + "minLength": 1, + "maxLength": 1600 + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag's value.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "JobArn": { + "description": "Optional for copying a JobTemplate from a pre-existing Job configuration.", + "type": "string" + }, + "JobTemplateId": { + "type": "string", + "pattern": "[a-zA-Z0-9_-]+", + "minLength": 1, + "maxLength": 64 + }, + "Description": { + "description": "A description of the Job Template.", + "type": "string", + "pattern": "[^\\p{C}]+", + "maxLength": 2028 + }, + "Document": { + "description": "The job document. Required if you don't specify a value for documentSource.", + "type": "string", + "maxLength": 32768 + }, + "DocumentSource": { + "description": "An S3 link to the job document to use in the template. Required if you don't specify a value for document.", + "type": "string", + "minLength": 1, + "maxLength": 1350 + }, + "TimeoutConfig": { + "description": "Specifies the amount of time each device has to finish its execution of the job.", + "type": "object", + "properties": { + "InProgressTimeoutInMinutes": { + "$ref": "#/definitions/InProgressTimeoutInMinutes" + } + }, + "required": [ + "InProgressTimeoutInMinutes" + ], + "additionalProperties": false + }, + "JobExecutionsRolloutConfig": { + "description": "Allows you to create a staged rollout of a job.", + "type": "object", + "properties": { + "ExponentialRolloutRate": { + "description": "The rate of increase for a job rollout. This parameter allows you to define an exponential rate for a job rollout.", + "$ref": "#/definitions/ExponentialRolloutRate" + }, + "MaximumPerMinute": { + "description": "The maximum number of things that will be notified of a pending job, per minute. This parameter allows you to create a staged rollout.", + "$ref": "#/definitions/MaximumPerMinute" + } + }, + "additionalProperties": false + }, + "AbortConfig": { + "description": "The criteria that determine when and how a job abort takes place.", + "type": "object", + "properties": { + "CriteriaList": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/AbortCriteria" + } + } + }, + "required": [ + "CriteriaList" + ], + "additionalProperties": false + }, + "PresignedUrlConfig": { + "type": "object", + "description": "Configuration for pre-signed S3 URLs.", + "properties": { + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "ExpiresInSec": { + "$ref": "#/definitions/ExpiresInSec" + } + }, + "required": [ + "RoleArn" + ], + "additionalProperties": false + }, + "JobExecutionsRetryConfig": { + "type": "object", + "properties": { + "RetryCriteriaList": { + "type": "array", + "insertionOrder": false, + "minItems": 1, + "maxItems": 2, + "items": { + "$ref": "#/definitions/RetryCriteria" + } + } + }, + "additionalProperties": false + }, + "MaintenanceWindows": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MaintenanceWindow" + } + }, + "DestinationPackageVersions": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DestinationPackageVersion" + } + }, + "Tags": { + "description": "Metadata that can be used to manage the JobTemplate.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "JobTemplateId", + "Description" + ], + "taggable": true, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/JobArn", + "/properties/Tags", + "/properties/Document", + "/properties/DocumentSource", + "/properties/TimeoutConfig", + "/properties/JobExecutionsRolloutConfig", + "/properties/AbortConfig", + "/properties/PresignedUrlConfig", + "/properties/DestinationPackageVersions", + "/properties/JobExecutionsRetryConfig", + "/properties/MaintenanceWindows" + ], + "createOnlyProperties": [ + "/properties/JobTemplateId", + "/properties/JobArn", + "/properties/Description", + "/properties/Document", + "/properties/DocumentSource", + "/properties/TimeoutConfig", + "/properties/JobExecutionsRolloutConfig", + "/properties/AbortConfig", + "/properties/PresignedUrlConfig", + "/properties/Tags", + "/properties/DestinationPackageVersions", + "/properties/JobExecutionsRetryConfig", + "/properties/MaintenanceWindows" + ], + "primaryIdentifier": [ + "/properties/JobTemplateId" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateJobTemplate", + "iam:PassRole", + "s3:GetObject", + "iot:TagResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeJobTemplate" + ] + }, + "delete": { + "permissions": [ + "iot:DeleteJobTemplate" + ] + }, + "list": { + "permissions": [ + "iot:ListJobTemplates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/logging.json b/internal/aws/cfn/schemas/aws/iot/logging.json new file mode 100644 index 00000000..e822ca7b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/logging.json @@ -0,0 +1,78 @@ +{ + "typeName": "AWS::IoT::Logging", + "description": "Logging Options enable you to configure your IoT V2 logging role and default logging level so that you can monitor progress events logs as it passes from your devices through Iot core service.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "documentationUrl": "https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html", + "definitions": {}, + "properties": { + "AccountId": { + "description": "Your 12-digit account ID (used as the primary identifier for the CloudFormation resource).", + "type": "string", + "minLength": 12, + "maxLength": 12, + "pattern": "^[0-9]{12}$" + }, + "RoleArn": { + "description": "The ARN of the role that allows IoT to write to Cloudwatch logs.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "DefaultLogLevel": { + "description": "The log level to use. Valid values are: ERROR, WARN, INFO, DEBUG, or DISABLED.", + "type": "string", + "enum": [ + "ERROR", + "WARN", + "INFO", + "DEBUG", + "DISABLED" + ] + } + }, + "additionalProperties": false, + "required": [ + "AccountId", + "RoleArn", + "DefaultLogLevel" + ], + "taggable": false, + "primaryIdentifier": [ + "/properties/AccountId" + ], + "createOnlyProperties": [ + "/properties/AccountId" + ], + "handlers": { + "create": { + "permissions": [ + "iot:SetV2LoggingOptions", + "iot:GetV2LoggingOptions", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iot:GetV2LoggingOptions" + ] + }, + "update": { + "permissions": [ + "iot:SetV2LoggingOptions", + "iot:GetV2LoggingOptions", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iot:SetV2LoggingOptions", + "iot:GetV2LoggingOptions" + ] + }, + "list": { + "permissions": [ + "iot:GetV2LoggingOptions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/mitigationaction.json b/internal/aws/cfn/schemas/aws/iot/mitigationaction.json new file mode 100644 index 00000000..5b1e59f5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/mitigationaction.json @@ -0,0 +1,259 @@ +{ + "typeName": "AWS::IoT::MitigationAction", + "description": "Mitigation actions can be used to take actions to mitigate issues that were found in an Audit finding or Detect violation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag's value.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + }, + "ActionParams": { + "type": "object", + "description": "The set of parameters for this mitigation action. You can specify only one type of parameter (in other words, you can apply only one action for each defined mitigation action).", + "properties": { + "AddThingsToThingGroupParams": { + "$ref": "#/definitions/AddThingsToThingGroupParams" + }, + "EnableIoTLoggingParams": { + "$ref": "#/definitions/EnableIoTLoggingParams" + }, + "PublishFindingToSnsParams": { + "$ref": "#/definitions/PublishFindingToSnsParams" + }, + "ReplaceDefaultPolicyVersionParams": { + "$ref": "#/definitions/ReplaceDefaultPolicyVersionParams" + }, + "UpdateCACertificateParams": { + "$ref": "#/definitions/UpdateCACertificateParams" + }, + "UpdateDeviceCertificateParams": { + "$ref": "#/definitions/UpdateDeviceCertificateParams" + } + }, + "additionalProperties": false + }, + "AddThingsToThingGroupParams": { + "description": "Parameters to define a mitigation action that moves devices associated with a certificate to one or more specified thing groups, typically for quarantine.", + "type": "object", + "properties": { + "OverrideDynamicGroups": { + "type": "boolean", + "description": "Specifies if this mitigation action can move the things that triggered the mitigation action out of one or more dynamic thing groups." + }, + "ThingGroupNames": { + "description": "The list of groups to which you want to add the things that triggered the mitigation action.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "minItems": 1, + "maxItems": 10, + "insertionOrder": false + } + }, + "required": [ + "ThingGroupNames" + ], + "additionalProperties": false + }, + "EnableIoTLoggingParams": { + "description": "Parameters to define a mitigation action that enables AWS IoT logging at a specified level of detail.", + "type": "object", + "properties": { + "LogLevel": { + "type": "string", + "enum": [ + "DEBUG", + "INFO", + "ERROR", + "WARN", + "UNSET_VALUE" + ], + "description": " Specifies which types of information are logged." + }, + "RoleArnForLogging": { + "description": " The ARN of the IAM role used for logging.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "LogLevel", + "RoleArnForLogging" + ], + "additionalProperties": false + }, + "PublishFindingToSnsParams": { + "type": "object", + "description": "Parameters, to define a mitigation action that publishes findings to Amazon SNS. You can implement your own custom actions in response to the Amazon SNS messages.", + "properties": { + "TopicArn": { + "type": "string", + "description": "The ARN of the topic to which you want to publish the findings.", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "TopicArn" + ], + "additionalProperties": false + }, + "ReplaceDefaultPolicyVersionParams": { + "type": "object", + "description": "Parameters to define a mitigation action that adds a blank policy to restrict permissions.", + "properties": { + "TemplateName": { + "type": "string", + "enum": [ + "BLANK_POLICY", + "UNSET_VALUE" + ] + } + }, + "required": [ + "TemplateName" + ], + "additionalProperties": false + }, + "UpdateCACertificateParams": { + "type": "object", + "description": "Parameters to define a mitigation action that changes the state of the CA certificate to inactive.", + "properties": { + "Action": { + "type": "string", + "enum": [ + "DEACTIVATE", + "UNSET_VALUE" + ] + } + }, + "required": [ + "Action" + ], + "additionalProperties": false + }, + "UpdateDeviceCertificateParams": { + "type": "object", + "description": "Parameters to define a mitigation action that changes the state of the device certificate to inactive.", + "properties": { + "Action": { + "type": "string", + "enum": [ + "DEACTIVATE", + "UNSET_VALUE" + ] + } + }, + "required": [ + "Action" + ], + "additionalProperties": false + } + }, + "properties": { + "ActionName": { + "description": "A unique identifier for the mitigation action.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "RoleArn": { + "type": "string" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ActionParams": { + "$ref": "#/definitions/ActionParams" + }, + "MitigationActionArn": { + "type": "string" + }, + "MitigationActionId": { + "type": "string" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ActionName" + ], + "required": [ + "RoleArn", + "ActionParams" + ], + "createOnlyProperties": [ + "/properties/ActionName" + ], + "readOnlyProperties": [ + "/properties/MitigationActionArn", + "/properties/MitigationActionId" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateMitigationAction", + "iot:DescribeMitigationAction", + "iot:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iot:DescribeMitigationAction", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:UpdateMitigationAction", + "iot:ListTagsForResource", + "iot:UntagResource", + "iot:TagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeMitigationAction", + "iot:DeleteMitigationAction" + ] + }, + "list": { + "permissions": [ + "iot:ListMitigationActions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/policy.json b/internal/aws/cfn/schemas/aws/iot/policy.json new file mode 100644 index 00000000..61837bac --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/policy.json @@ -0,0 +1,110 @@ +{ + "typeName": "AWS::IoT::Policy", + "description": "Resource Type definition for AWS::IoT::Policy", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "PolicyDocument": { + "type": [ + "object", + "string" + ], + "minLength": 1, + "maxLength": 404600 + }, + "PolicyName": { + "type": "string" + }, + "Tags": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "PolicyDocument" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/PolicyName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreatePolicy", + "iot:GetPolicy", + "iot:TagResource", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:GetPolicy", + "iot:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iot:DeletePolicy", + "iot:GetPolicy", + "iot:ListPolicyVersions", + "iot:DeletePolicyVersion" + ] + }, + "update": { + "permissions": [ + "iot:GetPolicy", + "iot:ListPolicyVersions", + "iot:CreatePolicyVersion", + "iot:DeletePolicyVersion", + "iot:SetDefaultPolicyVersion", + "iot:TagResource", + "iot:UntagResource", + "iot:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "iot:ListPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/policyprincipalattachment.json b/internal/aws/cfn/schemas/aws/iot/policyprincipalattachment.json new file mode 100644 index 00000000..91f54bf7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/policyprincipalattachment.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::IoT::PolicyPrincipalAttachment", + "description": "Resource Type definition for AWS::IoT::PolicyPrincipalAttachment", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "PolicyName": { + "type": "string" + }, + "Principal": { + "type": "string" + } + }, + "required": [ + "Principal", + "PolicyName" + ], + "createOnlyProperties": [ + "/properties/PolicyName", + "/properties/Principal" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iot/provisioningtemplate.json b/internal/aws/cfn/schemas/aws/iot/provisioningtemplate.json new file mode 100644 index 00000000..5ea75178 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/provisioningtemplate.json @@ -0,0 +1,140 @@ +{ + "typeName": "AWS::IoT::ProvisioningTemplate", + "description": "Creates a fleet provisioning template.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "ProvisioningHook": { + "type": "object", + "properties": { + "TargetArn": { + "type": "string" + }, + "PayloadVersion": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "TemplateArn": { + "type": "string" + }, + "TemplateName": { + "type": "string", + "pattern": "^[0-9A-Za-z_-]+$", + "minLength": 1, + "maxLength": 36 + }, + "Description": { + "type": "string", + "maxLength": 500 + }, + "Enabled": { + "type": "boolean" + }, + "ProvisioningRoleArn": { + "type": "string" + }, + "TemplateBody": { + "type": "string" + }, + "TemplateType": { + "type": "string", + "enum": [ + "FLEET_PROVISIONING", + "JITP" + ] + }, + "PreProvisioningHook": { + "$ref": "#/definitions/ProvisioningHook" + }, + "Tags": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "ProvisioningRoleArn", + "TemplateBody" + ], + "createOnlyProperties": [ + "/properties/TemplateName", + "/properties/TemplateType" + ], + "readOnlyProperties": [ + "/properties/TemplateArn" + ], + "primaryIdentifier": [ + "/properties/TemplateName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "iot:CreateProvisioningTemplate", + "iot:DescribeProvisioningTemplate", + "iot:TagResource", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeProvisioningTemplate", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "iot:UpdateProvisioningTemplate", + "iot:CreateProvisioningTemplateVersion", + "iot:ListProvisioningTemplateVersions", + "iot:DeleteProvisioningTemplateVersion", + "iot:DescribeProvisioningTemplate", + "iot:TagResource", + "iot:UntagResource", + "iot:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iot:DeleteProvisioningTemplate", + "iot:DescribeProvisioningTemplate" + ] + }, + "list": { + "permissions": [ + "iot:ListProvisioningTemplates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/resourcespecificlogging.json b/internal/aws/cfn/schemas/aws/iot/resourcespecificlogging.json new file mode 100644 index 00000000..6a82668a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/resourcespecificlogging.json @@ -0,0 +1,92 @@ +{ + "typeName": "AWS::IoT::ResourceSpecificLogging", + "description": "Resource-specific logging allows you to specify a logging level for a specific thing group.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "documentationUrl": "https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html", + "definitions": {}, + "properties": { + "TargetType": { + "description": "The target type. Value must be THING_GROUP, CLIENT_ID, SOURCE_IP, PRINCIPAL_ID, or EVENT_TYPE.", + "type": "string", + "enum": [ + "THING_GROUP", + "CLIENT_ID", + "SOURCE_IP", + "PRINCIPAL_ID", + "EVENT_TYPE" + ] + }, + "TargetName": { + "description": "The target name.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9.:\\s_\\-]+" + }, + "LogLevel": { + "description": "The log level for a specific target. Valid values are: ERROR, WARN, INFO, DEBUG, or DISABLED.", + "type": "string", + "enum": [ + "ERROR", + "WARN", + "INFO", + "DEBUG", + "DISABLED" + ] + }, + "TargetId": { + "description": "Unique Id for a Target (TargetType:TargetName), this will be internally built to serve as primary identifier for a log target.", + "type": "string", + "minLength": 13, + "maxLength": 140, + "pattern": "[a-zA-Z0-9.:\\s_\\-]+" + } + }, + "createOnlyProperties": [ + "/properties/TargetName", + "/properties/TargetType" + ], + "readOnlyProperties": [ + "/properties/TargetId" + ], + "additionalProperties": false, + "required": [ + "TargetName", + "TargetType", + "LogLevel" + ], + "taggable": false, + "primaryIdentifier": [ + "/properties/TargetId" + ], + "handlers": { + "create": { + "permissions": [ + "iot:ListV2LoggingLevels", + "iot:SetV2LoggingLevel" + ] + }, + "read": { + "permissions": [ + "iot:ListV2LoggingLevels" + ] + }, + "update": { + "permissions": [ + "iot:ListV2LoggingLevels", + "iot:SetV2LoggingLevel" + ] + }, + "delete": { + "permissions": [ + "iot:ListV2LoggingLevels", + "iot:DeleteV2LoggingLevel" + ] + }, + "list": { + "permissions": [ + "iot:ListV2LoggingLevels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/rolealias.json b/internal/aws/cfn/schemas/aws/iot/rolealias.json new file mode 100644 index 00000000..d649325d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/rolealias.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::IoT::RoleAlias", + "description": "Use the AWS::IoT::RoleAlias resource to declare an AWS IoT RoleAlias.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "RoleAlias": { + "type": "string", + "pattern": "[\\w=,@-]+", + "minLength": 1, + "maxLength": 128 + }, + "RoleAliasArn": { + "type": "string", + "pattern": "[\\w=,@-]+", + "minLength": 1, + "maxLength": 128 + }, + "RoleArn": { + "type": "string", + "pattern": "arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+", + "minLength": 20, + "maxLength": 2048 + }, + "CredentialDurationSeconds": { + "type": "integer", + "minimum": 900, + "maximum": 43200, + "default": 3600 + }, + "Tags": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "RoleArn" + ], + "readOnlyProperties": [ + "/properties/RoleAliasArn" + ], + "createOnlyProperties": [ + "/properties/RoleAlias" + ], + "primaryIdentifier": [ + "/properties/RoleAlias" + ], + "handlers": { + "create": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "iot:CreateRoleAlias", + "iot:DescribeRoleAlias", + "iot:TagResource", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "iot:DescribeRoleAlias", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:GetRole", + "iam:PassRole", + "iot:UpdateRoleAlias", + "iot:DescribeRoleAlias", + "iot:TagResource", + "iot:UntagResource", + "iot:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iot:DeleteRoleAlias", + "iot:DescribeRoleAlias" + ] + }, + "list": { + "permissions": [ + "iot:ListRoleAliases" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/scheduledaudit.json b/internal/aws/cfn/schemas/aws/iot/scheduledaudit.json new file mode 100644 index 00000000..3a5f847c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/scheduledaudit.json @@ -0,0 +1,141 @@ +{ + "typeName": "AWS::IoT::ScheduledAudit", + "description": "Scheduled audits can be used to specify the checks you want to perform during an audit and how often the audit should be run.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag's value.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "ScheduledAuditName": { + "description": "The name you want to give to the scheduled audit.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "Frequency": { + "description": "How often the scheduled audit takes place. Can be one of DAILY, WEEKLY, BIWEEKLY, or MONTHLY.", + "type": "string", + "enum": [ + "DAILY", + "WEEKLY", + "BIWEEKLY", + "MONTHLY" + ] + }, + "DayOfMonth": { + "description": "The day of the month on which the scheduled audit takes place. Can be 1 through 31 or LAST. This field is required if the frequency parameter is set to MONTHLY.", + "type": "string", + "pattern": "^([1-9]|[12][0-9]|3[01])$|^LAST$|^UNSET_VALUE$" + }, + "DayOfWeek": { + "description": "The day of the week on which the scheduled audit takes place. Can be one of SUN, MON, TUE,WED, THU, FRI, or SAT. This field is required if the frequency parameter is set to WEEKLY or BIWEEKLY.", + "type": "string", + "enum": [ + "SUN", + "MON", + "TUE", + "WED", + "THU", + "FRI", + "SAT", + "UNSET_VALUE" + ] + }, + "TargetCheckNames": { + "description": "Which checks are performed during the scheduled audit. Checks must be enabled for your account.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "ScheduledAuditArn": { + "description": "The ARN (Amazon resource name) of the scheduled audit.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ScheduledAuditName" + ], + "required": [ + "Frequency", + "TargetCheckNames" + ], + "createOnlyProperties": [ + "/properties/ScheduledAuditName" + ], + "readOnlyProperties": [ + "/properties/ScheduledAuditArn" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateScheduledAudit", + "iot:DescribeScheduledAudit", + "iot:TagResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeScheduledAudit", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:UpdateScheduledAudit", + "iot:ListTagsForResource", + "iot:UntagResource", + "iot:TagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeScheduledAudit", + "iot:DeleteScheduledAudit" + ] + }, + "list": { + "permissions": [ + "iot:ListScheduledAudits" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/securityprofile.json b/internal/aws/cfn/schemas/aws/iot/securityprofile.json new file mode 100644 index 00000000..057b7f19 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/securityprofile.json @@ -0,0 +1,427 @@ +{ + "typeName": "AWS::IoT::SecurityProfile", + "description": "A security profile defines a set of expected behaviors for devices in your account.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iot.git", + "definitions": { + "Behavior": { + "description": "A security profile behavior.", + "type": "object", + "properties": { + "Name": { + "description": "The name for the behavior.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "Metric": { + "description": "What is measured by the behavior.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "MetricDimension": { + "$ref": "#/definitions/MetricDimension" + }, + "Criteria": { + "$ref": "#/definitions/BehaviorCriteria" + }, + "SuppressAlerts": { + "description": "Manage Detect alarm SNS notifications by setting behavior notification to on or suppressed. Detect will continue to performing device behavior evaluations. However, suppressed alarms wouldn't be forwarded for SNS notification.", + "type": "boolean" + }, + "ExportMetric": { + "$ref": "#/definitions/ExportMetric" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "ExportMetric": { + "description": "Flag to enable/disable metrics export for metric to be retained.", + "type": "boolean" + }, + "MetricDimension": { + "description": "The dimension of a metric.", + "type": "object", + "properties": { + "DimensionName": { + "description": "A unique identifier for the dimension.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "Operator": { + "description": "Defines how the dimensionValues of a dimension are interpreted.", + "type": "string", + "enum": [ + "IN", + "NOT_IN" + ] + } + }, + "required": [ + "DimensionName" + ], + "additionalProperties": false + }, + "BehaviorCriteria": { + "description": "The criteria by which the behavior is determined to be normal.", + "type": "object", + "properties": { + "ComparisonOperator": { + "description": "The operator that relates the thing measured (metric) to the criteria (containing a value or statisticalThreshold).", + "type": "string", + "enum": [ + "less-than", + "less-than-equals", + "greater-than", + "greater-than-equals", + "in-cidr-set", + "not-in-cidr-set", + "in-port-set", + "not-in-port-set", + "in-set", + "not-in-set" + ] + }, + "Value": { + "$ref": "#/definitions/MetricValue" + }, + "DurationSeconds": { + "type": "integer", + "description": "Use this to specify the time duration over which the behavior is evaluated." + }, + "ConsecutiveDatapointsToAlarm": { + "description": "If a device is in violation of the behavior for the specified number of consecutive datapoints, an alarm occurs. If not specified, the default is 1.", + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "ConsecutiveDatapointsToClear": { + "description": "If an alarm has occurred and the offending device is no longer in violation of the behavior for the specified number of consecutive datapoints, the alarm is cleared. If not specified, the default is 1.", + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "StatisticalThreshold": { + "$ref": "#/definitions/StatisticalThreshold" + }, + "MlDetectionConfig": { + "$ref": "#/definitions/MachineLearningDetectionConfig" + } + }, + "additionalProperties": false + }, + "MetricValue": { + "description": "The value to be compared with the metric.", + "type": "object", + "properties": { + "Count": { + "description": "If the ComparisonOperator calls for a numeric value, use this to specify that (integer) numeric value to be compared with the metric.", + "type": "string", + "minimum": 0 + }, + "Cidrs": { + "description": "If the ComparisonOperator calls for a set of CIDRs, use this to specify that set to be compared with the metric.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Ports": { + "description": "If the ComparisonOperator calls for a set of ports, use this to specify that set to be compared with the metric.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "integer", + "minimum": 0, + "maximum": 65535 + } + }, + "Number": { + "description": "The numeral value of a metric.", + "type": "number" + }, + "Numbers": { + "description": "The numeral values of a metric.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "number" + } + }, + "Strings": { + "description": "The string values of a metric.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "StatisticalThreshold": { + "description": "A statistical ranking (percentile) which indicates a threshold value by which a behavior is determined to be in compliance or in violation of the behavior.", + "type": "object", + "properties": { + "Statistic": { + "description": "The percentile which resolves to a threshold value by which compliance with a behavior is determined", + "type": "string", + "enum": [ + "Average", + "p0", + "p0.1", + "p0.01", + "p1", + "p10", + "p50", + "p90", + "p99", + "p99.9", + "p99.99", + "p100" + ] + } + }, + "additionalProperties": false + }, + "MachineLearningDetectionConfig": { + "description": "The configuration of an ML Detect Security Profile.", + "type": "object", + "properties": { + "ConfidenceLevel": { + "description": "The sensitivity of anomalous behavior evaluation. Can be Low, Medium, or High.", + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ] + } + }, + "additionalProperties": false + }, + "AlertTarget": { + "description": "A structure containing the alert target ARN and the role ARN.", + "type": "object", + "properties": { + "AlertTargetArn": { + "description": "The ARN of the notification target to which alerts are sent.", + "type": "string", + "maxLength": 2048 + }, + "RoleArn": { + "description": "The ARN of the role that grants permission to send alerts to the notification target.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "AlertTargetArn", + "RoleArn" + ], + "additionalProperties": false + }, + "MetricToRetain": { + "description": "The metric you want to retain. Dimensions are optional.", + "type": "object", + "properties": { + "Metric": { + "description": "What is measured by the behavior.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "MetricDimension": { + "$ref": "#/definitions/MetricDimension" + }, + "ExportMetric": { + "$ref": "#/definitions/ExportMetric" + } + }, + "required": [ + "Metric" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag's value.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "SecurityProfileName": { + "description": "A unique identifier for the security profile.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "SecurityProfileDescription": { + "description": "A description of the security profile.", + "type": "string", + "maxLength": 1000 + }, + "Behaviors": { + "description": "Specifies the behaviors that, when violated by a device (thing), cause an alert.", + "type": "array", + "maxLength": 100, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Behavior" + } + }, + "AlertTargets": { + "description": "Specifies the destinations to which alerts are sent.", + "type": "object", + "patternProperties": { + "[a-zA-Z0-9:_-]+": { + "$ref": "#/definitions/AlertTarget" + } + }, + "additionalProperties": false + }, + "AdditionalMetricsToRetainV2": { + "description": "A list of metrics whose data is retained (stored). By default, data is retained for any metric used in the profile's behaviors, but it is also retained for any metric specified here.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricToRetain" + } + }, + "MetricsExportConfig": { + "description": "A structure containing the mqtt topic for metrics export.", + "type": "object", + "properties": { + "MqttTopic": { + "description": "The topic for metrics export.", + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "RoleArn": { + "description": "The ARN of the role that grants permission to publish to mqtt topic.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "MqttTopic", + "RoleArn" + ], + "additionalProperties": false + }, + "Tags": { + "description": "Metadata that can be used to manage the security profile.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TargetArns": { + "description": "A set of target ARNs that the security profile is attached to.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "description": "The ARN of the target to which the security profile is attached.", + "type": "string", + "maxLength": 2048 + } + }, + "SecurityProfileArn": { + "description": "The ARN (Amazon resource name) of the created security profile.", + "type": "string" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/SecurityProfileName" + ], + "required": [], + "createOnlyProperties": [ + "/properties/SecurityProfileName" + ], + "readOnlyProperties": [ + "/properties/SecurityProfileArn" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateSecurityProfile", + "iot:AttachSecurityProfile", + "iot:DescribeSecurityProfile", + "iot:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iot:DescribeSecurityProfile", + "iot:ListTagsForResource", + "iot:ListTargetsForSecurityProfile" + ] + }, + "update": { + "permissions": [ + "iot:UpdateSecurityProfile", + "iot:ListTargetsForSecurityProfile", + "iot:AttachSecurityProfile", + "iot:DetachSecurityProfile", + "iot:ListTagsForResource", + "iot:UntagResource", + "iot:TagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeSecurityProfile", + "iot:DeleteSecurityProfile" + ] + }, + "list": { + "permissions": [ + "iot:ListSecurityProfiles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/thing.json b/internal/aws/cfn/schemas/aws/iot/thing.json new file mode 100644 index 00000000..3f3ebec9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/thing.json @@ -0,0 +1,85 @@ +{ + "typeName": "AWS::IoT::Thing", + "description": "Resource Type definition for AWS::IoT::Thing", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "AttributePayload": { + "$ref": "#/definitions/AttributePayload" + }, + "ThingName": { + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + } + }, + "definitions": { + "AttributePayload": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9_.,@/:#-]+": { + "type": "string" + } + } + } + } + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": true + }, + "createOnlyProperties": [ + "/properties/ThingName" + ], + "primaryIdentifier": [ + "/properties/ThingName" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iot:CreateThing", + "iot:DescribeThing" + ] + }, + "delete": { + "permissions": [ + "iot:DeleteThing", + "iot:DescribeThing" + ] + }, + "list": { + "permissions": [ + "iot:ListThings" + ] + }, + "read": { + "permissions": [ + "iot:DescribeThing" + ] + }, + "update": { + "permissions": [ + "iot:UpdateThing", + "iot:DescribeThing" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/thinggroup.json b/internal/aws/cfn/schemas/aws/iot/thinggroup.json new file mode 100644 index 00000000..189d487a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/thinggroup.json @@ -0,0 +1,153 @@ +{ + "typeName": "AWS::IoT::ThingGroup", + "description": "Resource Type definition for AWS::IoT::ThingGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "ThingGroupName": { + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "ParentGroupName": { + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "QueryString": { + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "ThingGroupProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttributePayload": { + "$ref": "#/definitions/AttributePayload" + }, + "ThingGroupDescription": { + "type": "string", + "pattern": "[\\p{Graph}\\x20]*", + "maxLength": 2028 + } + } + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "AttributePayload": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9_.,@/:#-]+": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/ThingGroupName", + "/properties/ParentGroupName" + ], + "primaryIdentifier": [ + "/properties/ThingGroupName" + ], + "handlers": { + "create": { + "permissions": [ + "iot:DescribeThingGroup", + "iot:ListTagsForResource", + "iot:CreateThingGroup", + "iot:CreateDynamicThingGroup", + "iot:TagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeThingGroup", + "iot:DeleteThingGroup", + "iot:DeleteDynamicThingGroup" + ] + }, + "list": { + "permissions": [ + "iot:ListThingGroups", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeThingGroup", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:ListTagsForResource", + "iot:DescribeThingGroup", + "iot:UpdateThingGroup", + "iot:UpdateDynamicThingGroup", + "iot:TagResource", + "iot:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/thingprincipalattachment.json b/internal/aws/cfn/schemas/aws/iot/thingprincipalattachment.json new file mode 100644 index 00000000..a98d2fb6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/thingprincipalattachment.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::IoT::ThingPrincipalAttachment", + "description": "Resource Type definition for AWS::IoT::ThingPrincipalAttachment", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Principal": { + "type": "string" + }, + "ThingName": { + "type": "string" + } + }, + "required": [ + "Principal", + "ThingName" + ], + "createOnlyProperties": [ + "/properties/ThingName", + "/properties/Principal" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iot/thingtype.json b/internal/aws/cfn/schemas/aws/iot/thingtype.json new file mode 100644 index 00000000..33efc629 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/thingtype.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::IoT::ThingType", + "description": "Resource Type definition for AWS::IoT::ThingType", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "ThingTypeName": { + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 128 + }, + "DeprecateThingType": { + "type": "boolean" + }, + "ThingTypeProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "SearchableAttributes": { + "type": "array", + "maxItems": 3, + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string", + "pattern": "[a-zA-Z0-9_.,@/:#-]+", + "maxLength": 128 + } + }, + "ThingTypeDescription": { + "pattern": "[\\p{Graph}\\x20]*", + "type": "string", + "maxLength": 2028 + } + } + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/ThingTypeName", + "/properties/ThingTypeProperties" + ], + "primaryIdentifier": [ + "/properties/ThingTypeName" + ], + "handlers": { + "create": { + "permissions": [ + "iot:DescribeThingType", + "iot:ListTagsForResource", + "iot:CreateThingType", + "iot:DeprecateThingType", + "iot:TagResource" + ] + }, + "delete": { + "permissions": [ + "iot:DescribeThingType", + "iot:DeleteThingType", + "iot:DeprecateThingType" + ] + }, + "list": { + "permissions": [ + "iot:ListThingTypes", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:DescribeThingType", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iot:DescribeThingType", + "iot:UpdateThingType", + "iot:ListTagsForResource", + "iot:TagResource", + "iot:UntagResource", + "iot:DeprecateThingType" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/topicrule.json b/internal/aws/cfn/schemas/aws/iot/topicrule.json new file mode 100644 index 00000000..7832ddce --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/topicrule.json @@ -0,0 +1,1005 @@ +{ + "typeName": "AWS::IoT::TopicRule", + "description": "Resource Type definition for AWS::IoT::TopicRule", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "RuleName": { + "type": "string" + }, + "TopicRulePayload": { + "$ref": "#/definitions/TopicRulePayload" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "TopicRulePayload": { + "type": "object", + "additionalProperties": false, + "properties": { + "RuleDisabled": { + "type": "boolean" + }, + "ErrorAction": { + "$ref": "#/definitions/Action" + }, + "Description": { + "type": "string" + }, + "AwsIotSqlVersion": { + "type": "string" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + }, + "Sql": { + "type": "string" + } + }, + "required": [ + "Actions", + "Sql" + ] + }, + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudwatchAlarm": { + "$ref": "#/definitions/CloudwatchAlarmAction" + }, + "CloudwatchLogs": { + "$ref": "#/definitions/CloudwatchLogsAction" + }, + "CloudwatchMetric": { + "$ref": "#/definitions/CloudwatchMetricAction" + }, + "DynamoDB": { + "$ref": "#/definitions/DynamoDBAction" + }, + "DynamoDBv2": { + "$ref": "#/definitions/DynamoDBv2Action" + }, + "Elasticsearch": { + "$ref": "#/definitions/ElasticsearchAction" + }, + "Firehose": { + "$ref": "#/definitions/FirehoseAction" + }, + "Http": { + "$ref": "#/definitions/HttpAction" + }, + "IotAnalytics": { + "$ref": "#/definitions/IotAnalyticsAction" + }, + "IotEvents": { + "$ref": "#/definitions/IotEventsAction" + }, + "IotSiteWise": { + "$ref": "#/definitions/IotSiteWiseAction" + }, + "Kafka": { + "$ref": "#/definitions/KafkaAction" + }, + "Kinesis": { + "$ref": "#/definitions/KinesisAction" + }, + "Lambda": { + "$ref": "#/definitions/LambdaAction" + }, + "Location": { + "$ref": "#/definitions/LocationAction" + }, + "OpenSearch": { + "$ref": "#/definitions/OpenSearchAction" + }, + "Republish": { + "$ref": "#/definitions/RepublishAction" + }, + "S3": { + "$ref": "#/definitions/S3Action" + }, + "Sns": { + "$ref": "#/definitions/SnsAction" + }, + "Sqs": { + "$ref": "#/definitions/SqsAction" + }, + "StepFunctions": { + "$ref": "#/definitions/StepFunctionsAction" + }, + "Timestream": { + "$ref": "#/definitions/TimestreamAction" + } + } + }, + "CloudwatchAlarmAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "StateValue": { + "type": "string" + }, + "AlarmName": { + "type": "string" + }, + "StateReason": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "AlarmName", + "StateReason", + "StateValue", + "RoleArn" + ] + }, + "CloudwatchLogsAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroupName": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "BatchMode": { + "type": "boolean" + } + }, + "required": [ + "LogGroupName", + "RoleArn" + ] + }, + "CloudwatchMetricAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "type": "string" + }, + "MetricValue": { + "type": "string" + }, + "MetricNamespace": { + "type": "string" + }, + "MetricUnit": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "MetricTimestamp": { + "type": "string" + } + }, + "required": [ + "MetricName", + "MetricValue", + "MetricNamespace", + "MetricUnit", + "RoleArn" + ] + }, + "DynamoDBAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "TableName": { + "type": "string" + }, + "PayloadField": { + "type": "string" + }, + "RangeKeyField": { + "type": "string" + }, + "HashKeyField": { + "type": "string" + }, + "RangeKeyValue": { + "type": "string" + }, + "RangeKeyType": { + "type": "string" + }, + "HashKeyType": { + "type": "string" + }, + "HashKeyValue": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "TableName", + "HashKeyField", + "HashKeyValue", + "RoleArn" + ] + }, + "DynamoDBv2Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "PutItem": { + "$ref": "#/definitions/PutItemInput" + }, + "RoleArn": { + "type": "string" + } + } + }, + "PutItemInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "TableName": { + "type": "string" + } + }, + "required": [ + "TableName" + ] + }, + "ElasticsearchAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Index": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Endpoint": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "Type", + "Endpoint", + "Index", + "Id", + "RoleArn" + ] + }, + "FirehoseAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeliveryStreamName": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "Separator": { + "type": "string" + }, + "BatchMode": { + "type": "boolean" + } + }, + "required": [ + "DeliveryStreamName", + "RoleArn" + ] + }, + "HttpAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConfirmationUrl": { + "type": "string" + }, + "Headers": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/HttpActionHeader" + } + }, + "Url": { + "type": "string" + }, + "Auth": { + "$ref": "#/definitions/HttpAuthorization" + } + }, + "required": [ + "Url" + ] + }, + "HttpActionHeader": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "HttpAuthorization": { + "type": "object", + "additionalProperties": false, + "properties": { + "Sigv4": { + "$ref": "#/definitions/SigV4Authorization" + } + } + }, + "SigV4Authorization": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceName": { + "type": "string" + }, + "SigningRegion": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "ServiceName", + "SigningRegion", + "RoleArn" + ] + }, + "IotAnalyticsAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "type": "string" + }, + "ChannelName": { + "type": "string" + }, + "BatchMode": { + "type": "boolean" + } + }, + "required": [ + "ChannelName", + "RoleArn" + ] + }, + "IotEventsAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputName": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "MessageId": { + "type": "string" + }, + "BatchMode": { + "type": "boolean" + } + }, + "required": [ + "InputName", + "RoleArn" + ] + }, + "IotSiteWiseAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "type": "string" + }, + "PutAssetPropertyValueEntries": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/PutAssetPropertyValueEntry" + } + } + }, + "required": [ + "PutAssetPropertyValueEntries", + "RoleArn" + ] + }, + "PutAssetPropertyValueEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "PropertyAlias": { + "type": "string" + }, + "PropertyValues": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AssetPropertyValue" + } + }, + "AssetId": { + "type": "string" + }, + "EntryId": { + "type": "string" + }, + "PropertyId": { + "type": "string" + } + }, + "required": [ + "PropertyValues" + ] + }, + "AssetPropertyValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "$ref": "#/definitions/AssetPropertyVariant" + }, + "Timestamp": { + "$ref": "#/definitions/AssetPropertyTimestamp" + }, + "Quality": { + "type": "string" + } + }, + "required": [ + "Value", + "Timestamp" + ] + }, + "AssetPropertyVariant": { + "type": "object", + "additionalProperties": false, + "properties": { + "StringValue": { + "type": "string" + }, + "DoubleValue": { + "type": "string" + }, + "BooleanValue": { + "type": "string" + }, + "IntegerValue": { + "type": "string" + } + } + }, + "AssetPropertyTimestamp": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimeInSeconds": { + "type": "string" + }, + "OffsetInNanos": { + "type": "string" + } + }, + "required": [ + "TimeInSeconds" + ] + }, + "KafkaAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationArn": { + "type": "string" + }, + "Topic": { + "type": "string" + }, + "Key": { + "type": "string" + }, + "Partition": { + "type": "string" + }, + "ClientProperties": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".*": { + "type": "string" + } + }, + "minProperties": 1 + }, + "Headers": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/KafkaActionHeader" + } + } + }, + "required": [ + "DestinationArn", + "Topic", + "ClientProperties" + ] + }, + "KafkaActionHeader": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "KinesisAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "PartitionKey": { + "type": "string" + }, + "StreamName": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "StreamName", + "RoleArn" + ] + }, + "LambdaAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string" + } + } + }, + "LocationAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "type": "string" + }, + "TrackerName": { + "type": "string" + }, + "DeviceId": { + "type": "string" + }, + "Latitude": { + "type": "string" + }, + "Longitude": { + "type": "string" + }, + "Timestamp": { + "$ref": "#/definitions/Timestamp" + } + }, + "required": [ + "RoleArn", + "TrackerName", + "DeviceId", + "Latitude", + "Longitude" + ] + }, + "Timestamp": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Unit": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Value" + ] + }, + "OpenSearchAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Index": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Endpoint": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "Type", + "Endpoint", + "Index", + "Id", + "RoleArn" + ] + }, + "RepublishAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Qos": { + "type": "integer" + }, + "Topic": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "Headers": { + "$ref": "#/definitions/RepublishActionHeaders" + } + }, + "required": [ + "Topic", + "RoleArn" + ] + }, + "RepublishActionHeaders": { + "type": "object", + "additionalProperties": false, + "properties": { + "PayloadFormatIndicator": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "ContentType": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "ResponseTopic": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "CorrelationData": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "MessageExpiry": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "UserProperties": { + "$ref": "#/definitions/UserProperties" + } + } + }, + "UserProperties": { + "type": "array", + "minItems": 1, + "maxItems": 100, + "items": { + "$ref": "#/definitions/UserProperty" + } + }, + "UserProperty": { + "type": "object", + "additionalProperties": false, + "required": [ + "Key", + "Value" + ], + "properties": { + "Key": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + } + }, + "S3Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketName": { + "type": "string" + }, + "Key": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "CannedAcl": { + "$ref": "#/definitions/CannedAccessControlList" + } + }, + "required": [ + "BucketName", + "Key", + "RoleArn" + ] + }, + "CannedAccessControlList": { + "type": "string", + "enum": [ + "private", + "public-read", + "public-read-write", + "aws-exec-read", + "authenticated-read", + "bucket-owner-read", + "bucket-owner-full-control", + "log-delivery-write" + ] + }, + "SnsAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetArn": { + "type": "string" + }, + "MessageFormat": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "TargetArn", + "RoleArn" + ] + }, + "StepFunctionsAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExecutionNamePrefix": { + "type": "string" + }, + "StateMachineName": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "StateMachineName", + "RoleArn" + ] + }, + "SqsAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "type": "string" + }, + "UseBase64": { + "type": "boolean" + }, + "QueueUrl": { + "type": "string" + } + }, + "required": [ + "RoleArn", + "QueueUrl" + ] + }, + "TimestreamAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "type": "string" + }, + "DatabaseName": { + "type": "string" + }, + "TableName": { + "type": "string" + }, + "Dimensions": { + "$ref": "#/definitions/TimestreamDimensionsList" + }, + "Timestamp": { + "$ref": "#/definitions/TimestreamTimestamp" + } + }, + "required": [ + "RoleArn", + "DatabaseName", + "TableName", + "Dimensions" + ] + }, + "TimestreamDimensionsList": { + "type": "array", + "minItems": 1, + "maxItems": 128, + "items": { + "$ref": "#/definitions/TimestreamDimension" + } + }, + "TimestreamDimension": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Value" + ] + }, + "TimestreamTimestamp": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "Unit": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Value", + "Unit" + ] + }, + "RoleArn": { + "type": "string" + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "TopicRulePayload" + ], + "createOnlyProperties": [ + "/properties/RuleName" + ], + "primaryIdentifier": [ + "/properties/RuleName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "iot:CreateTopicRule", + "iot:GetTopicRule", + "iot:TagResource", + "iot:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iot:GetTopicRule", + "iot:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "iot:GetTopicRule", + "iot:ListTagsForResource", + "iot:ReplaceTopicRule", + "iot:TagResource", + "iot:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iot:GetTopicRule", + "iot:DeleteTopicRule" + ] + }, + "list": { + "permissions": [ + "iot:ListTopicRules" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot/topicruledestination.json b/internal/aws/cfn/schemas/aws/iot/topicruledestination.json new file mode 100644 index 00000000..b7e5f0ac --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot/topicruledestination.json @@ -0,0 +1,123 @@ +{ + "typeName": "AWS::IoT::TopicRuleDestination", + "description": "Resource Type definition for AWS::IoT::TopicRuleDestination", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "TopicRuleDestinationStatus": { + "type": "string", + "enum": [ + "ENABLED", + "IN_PROGRESS", + "DISABLED" + ] + }, + "HttpUrlDestinationSummary": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConfirmationUrl": { + "type": "string" + } + } + }, + "VpcDestinationProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubnetIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "SecurityGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "VpcId": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + } + } + }, + "properties": { + "Arn": { + "description": "Amazon Resource Name (ARN).", + "type": "string" + }, + "Status": { + "description": "The status of the TopicRuleDestination.", + "$ref": "#/definitions/TopicRuleDestinationStatus" + }, + "HttpUrlProperties": { + "description": "HTTP URL destination properties.", + "$ref": "#/definitions/HttpUrlDestinationSummary" + }, + "StatusReason": { + "description": "The reasoning for the current status of the TopicRuleDestination.", + "type": "string" + }, + "VpcProperties": { + "description": "VPC destination properties.", + "$ref": "#/definitions/VpcDestinationProperties" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": true + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/StatusReason" + ], + "createOnlyProperties": [ + "/properties/HttpUrlProperties", + "/properties/VpcProperties" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "iot:CreateTopicRuleDestination", + "iot:GetTopicRuleDestination", + "iot:UpdateTopicRuleDestination" + ] + }, + "read": { + "permissions": [ + "iot:GetTopicRuleDestination" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "iot:GetTopicRuleDestination", + "iot:UpdateTopicRuleDestination" + ] + }, + "delete": { + "permissions": [ + "iot:GetTopicRuleDestination", + "iot:DeleteTopicRuleDestination" + ] + }, + "list": { + "permissions": [ + "iot:ListTopicRuleDestinations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iot1click/device.json b/internal/aws/cfn/schemas/aws/iot1click/device.json new file mode 100644 index 00000000..dbe53f68 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot1click/device.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::IoT1Click::Device", + "description": "Resource Type definition for AWS::IoT1Click::Device", + "additionalProperties": false, + "properties": { + "DeviceId": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "Arn": { + "type": "string" + } + }, + "required": [ + "Enabled", + "DeviceId" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/DeviceId" + ], + "createOnlyProperties": [ + "/properties/DeviceId" + ], + "primaryIdentifier": [ + "/properties/DeviceId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iot1click/placement.json b/internal/aws/cfn/schemas/aws/iot1click/placement.json new file mode 100644 index 00000000..a9a0253c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot1click/placement.json @@ -0,0 +1,36 @@ +{ + "typeName": "AWS::IoT1Click::Placement", + "description": "Resource Type definition for AWS::IoT1Click::Placement", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "PlacementName": { + "type": "string" + }, + "ProjectName": { + "type": "string" + }, + "AssociatedDevices": { + "type": "object" + }, + "Attributes": { + "type": "object" + } + }, + "required": [ + "ProjectName" + ], + "createOnlyProperties": [ + "/properties/PlacementName", + "/properties/AssociatedDevices", + "/properties/ProjectName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iot1click/project.json b/internal/aws/cfn/schemas/aws/iot1click/project.json new file mode 100644 index 00000000..2c504f46 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iot1click/project.json @@ -0,0 +1,49 @@ +{ + "typeName": "AWS::IoT1Click::Project", + "description": "Resource Type definition for AWS::IoT1Click::Project", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ProjectName": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "PlacementTemplate": { + "$ref": "#/definitions/PlacementTemplate" + } + }, + "definitions": { + "PlacementTemplate": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeviceTemplates": { + "type": "object" + }, + "DefaultAttributes": { + "type": "object" + } + } + } + }, + "required": [ + "PlacementTemplate" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/ProjectName" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iotanalytics/channel.json b/internal/aws/cfn/schemas/aws/iotanalytics/channel.json new file mode 100644 index 00000000..7a0e0d02 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotanalytics/channel.json @@ -0,0 +1,151 @@ +{ + "typeName": "AWS::IoTAnalytics::Channel", + "description": "Resource Type definition for AWS::IoTAnalytics::Channel", + "additionalProperties": false, + "taggable": true, + "properties": { + "ChannelStorage": { + "$ref": "#/definitions/ChannelStorage" + }, + "ChannelName": { + "type": "string", + "pattern": "(^(?!_{2}))(^[a-zA-Z0-9_]+$)", + "minLength": 1, + "maxLength": 128 + }, + "Id": { + "type": "string" + }, + "RetentionPeriod": { + "$ref": "#/definitions/RetentionPeriod" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "CustomerManagedS3": { + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "type": "string", + "pattern": "^[a-zA-Z0-9.\\-_]*$", + "minLength": 3, + "maxLength": 255 + }, + "RoleArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "KeyPrefix": { + "type": "string", + "pattern": "^[a-zA-Z0-9!_.*'()/{}:-]*/$", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Bucket", + "RoleArn" + ] + }, + "ServiceManagedS3": { + "type": "object", + "additionalProperties": false + }, + "ChannelStorage": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceManagedS3": { + "$ref": "#/definitions/ServiceManagedS3" + }, + "CustomerManagedS3": { + "$ref": "#/definitions/CustomerManagedS3" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "RetentionPeriod": { + "type": "object", + "additionalProperties": false, + "properties": { + "NumberOfDays": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + }, + "Unlimited": { + "type": "boolean" + } + } + } + }, + "primaryIdentifier": [ + "/properties/ChannelName" + ], + "createOnlyProperties": [ + "/properties/ChannelName" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotanalytics:CreateChannel" + ] + }, + "read": { + "permissions": [ + "iotanalytics:DescribeChannel", + "iotanalytics:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotanalytics:UpdateChannel", + "iotanalytics:TagResource", + "iotanalytics:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotanalytics:DeleteChannel" + ] + }, + "list": { + "permissions": [ + "iotanalytics:ListChannels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotanalytics/dataset.json b/internal/aws/cfn/schemas/aws/iotanalytics/dataset.json new file mode 100644 index 00000000..6c641120 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotanalytics/dataset.json @@ -0,0 +1,523 @@ +{ + "typeName": "AWS::IoTAnalytics::Dataset", + "description": "Resource Type definition for AWS::IoTAnalytics::Dataset", + "additionalProperties": false, + "taggable": true, + "properties": { + "Actions": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/definitions/Action" + } + }, + "LateDataRules": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LateDataRule" + } + }, + "DatasetName": { + "type": "string", + "pattern": "(^(?!_{2}))(^[a-zA-Z0-9_]+$)", + "minLength": 1, + "maxLength": 128 + }, + "ContentDeliveryRules": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 0, + "maxItems": 20, + "items": { + "$ref": "#/definitions/DatasetContentDeliveryRule" + } + }, + "Triggers": { + "type": "array", + "minItems": 0, + "maxItems": 5, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Trigger" + } + }, + "VersioningConfiguration": { + "$ref": "#/definitions/VersioningConfiguration" + }, + "Id": { + "type": "string" + }, + "RetentionPeriod": { + "$ref": "#/definitions/RetentionPeriod" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "DatasetContentVersionValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatasetName": { + "type": "string", + "pattern": "(^(?!_{2}))(^[a-zA-Z0-9_]+$)", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "DatasetName" + ] + }, + "GlueConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string", + "minLength": 1, + "maxLength": 150 + }, + "TableName": { + "type": "string", + "minLength": 1, + "maxLength": 150 + } + }, + "required": [ + "TableName", + "DatabaseName" + ] + }, + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "ActionName": { + "type": "string", + "pattern": "^[a-zA-Z0-9_]+$", + "minLength": 1, + "maxLength": 128 + }, + "ContainerAction": { + "$ref": "#/definitions/ContainerAction" + }, + "QueryAction": { + "$ref": "#/definitions/QueryAction" + } + }, + "required": [ + "ActionName" + ] + }, + "Variable": { + "type": "object", + "additionalProperties": false, + "properties": { + "VariableName": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "DatasetContentVersionValue": { + "$ref": "#/definitions/DatasetContentVersionValue" + }, + "StringValue": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "DoubleValue": { + "type": "number" + }, + "OutputFileUriValue": { + "$ref": "#/definitions/OutputFileUriValue" + } + }, + "required": [ + "VariableName" + ] + }, + "IotEventsDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputName": { + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", + "minLength": 1, + "maxLength": 128 + }, + "RoleArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "InputName", + "RoleArn" + ] + }, + "LateDataRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "RuleConfiguration": { + "$ref": "#/definitions/LateDataRuleConfiguration" + }, + "RuleName": { + "type": "string", + "pattern": "^[a-zA-Z0-9_]+$", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "RuleConfiguration" + ] + }, + "DeltaTimeSessionWindowConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimeoutInMinutes": { + "type": "integer", + "minimum": 1, + "maximum": 60 + } + }, + "required": [ + "TimeoutInMinutes" + ] + }, + "QueryAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Filters": { + "type": "array", + "minItems": 0, + "maxItems": 1, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Filter" + } + }, + "SqlQuery": { + "type": "string" + } + }, + "required": [ + "SqlQuery" + ] + }, + "VersioningConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Unlimited": { + "type": "boolean" + }, + "MaxVersions": { + "type": "integer", + "minimum": 1, + "maximum": 1000 + } + } + }, + "RetentionPeriod": { + "type": "object", + "additionalProperties": false, + "properties": { + "NumberOfDays": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + }, + "Unlimited": { + "type": "boolean" + } + } + }, + "ResourceConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "VolumeSizeInGB": { + "type": "integer", + "minimum": 1, + "maximum": 50 + }, + "ComputeType": { + "type": "string", + "enum": [ + "ACU_1", + "ACU_2" + ] + } + }, + "required": [ + "VolumeSizeInGB", + "ComputeType" + ] + }, + "DatasetContentDeliveryRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/DatasetContentDeliveryRuleDestination" + }, + "EntryName": { + "type": "string" + } + }, + "required": [ + "Destination" + ] + }, + "Trigger": { + "type": "object", + "additionalProperties": false, + "properties": { + "TriggeringDataset": { + "$ref": "#/definitions/TriggeringDataset" + }, + "Schedule": { + "$ref": "#/definitions/Schedule" + } + } + }, + "DeltaTime": { + "type": "object", + "additionalProperties": false, + "properties": { + "OffsetSeconds": { + "type": "integer" + }, + "TimeExpression": { + "type": "string" + } + }, + "required": [ + "TimeExpression", + "OffsetSeconds" + ] + }, + "ContainerAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Variables": { + "type": "array", + "minItems": 0, + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Variable" + } + }, + "ExecutionRoleArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Image": { + "type": "string", + "maxLength": 255 + }, + "ResourceConfiguration": { + "$ref": "#/definitions/ResourceConfiguration" + } + }, + "required": [ + "ExecutionRoleArn", + "Image", + "ResourceConfiguration" + ] + }, + "Filter": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeltaTime": { + "$ref": "#/definitions/DeltaTime" + } + } + }, + "OutputFileUriValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileName": { + "type": "string", + "pattern": "^[\\w\\.-]{1,255}$" + } + }, + "required": [ + "FileName" + ] + }, + "Schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScheduleExpression": { + "type": "string" + } + }, + "required": [ + "ScheduleExpression" + ] + }, + "S3DestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "GlueConfiguration": { + "$ref": "#/definitions/GlueConfiguration" + }, + "Bucket": { + "type": "string", + "pattern": "^[a-zA-Z0-9.\\-_]*$", + "minLength": 3, + "maxLength": 255 + }, + "Key": { + "type": "string", + "pattern": "^[a-zA-Z0-9!_.*'()/{}:-]*$", + "minLength": 1, + "maxLength": 255 + }, + "RoleArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "Bucket", + "Key", + "RoleArn" + ] + }, + "LateDataRuleConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeltaTimeSessionWindowConfiguration": { + "$ref": "#/definitions/DeltaTimeSessionWindowConfiguration" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DatasetContentDeliveryRuleDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "IotEventsDestinationConfiguration": { + "$ref": "#/definitions/IotEventsDestinationConfiguration" + }, + "S3DestinationConfiguration": { + "$ref": "#/definitions/S3DestinationConfiguration" + } + } + }, + "TriggeringDataset": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatasetName": { + "type": "string", + "pattern": "(^(?!_{2}))(^[a-zA-Z0-9_]+$)", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "DatasetName" + ] + } + }, + "required": [ + "Actions" + ], + "primaryIdentifier": [ + "/properties/DatasetName" + ], + "createOnlyProperties": [ + "/properties/DatasetName" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotanalytics:CreateDataset" + ] + }, + "read": { + "permissions": [ + "iotanalytics:DescribeDataset", + "iotanalytics:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotanalytics:UpdateDataset", + "iotanalytics:TagResource", + "iotanalytics:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotanalytics:DeleteDataset" + ] + }, + "list": { + "permissions": [ + "iotanalytics:ListDatasets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotanalytics/datastore.json b/internal/aws/cfn/schemas/aws/iotanalytics/datastore.json new file mode 100644 index 00000000..8b097674 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotanalytics/datastore.json @@ -0,0 +1,305 @@ +{ + "typeName": "AWS::IoTAnalytics::Datastore", + "description": "Resource Type definition for AWS::IoTAnalytics::Datastore", + "additionalProperties": false, + "taggable": true, + "properties": { + "DatastoreStorage": { + "$ref": "#/definitions/DatastoreStorage" + }, + "DatastoreName": { + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "minLength": 1, + "maxLength": 128 + }, + "DatastorePartitions": { + "$ref": "#/definitions/DatastorePartitions" + }, + "Id": { + "type": "string" + }, + "FileFormatConfiguration": { + "$ref": "#/definitions/FileFormatConfiguration" + }, + "RetentionPeriod": { + "$ref": "#/definitions/RetentionPeriod" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "DatastoreStorage": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceManagedS3": { + "$ref": "#/definitions/ServiceManagedS3" + }, + "CustomerManagedS3": { + "$ref": "#/definitions/CustomerManagedS3" + }, + "IotSiteWiseMultiLayerStorage": { + "$ref": "#/definitions/IotSiteWiseMultiLayerStorage" + } + } + }, + "SchemaDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "Columns": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 100, + "items": { + "$ref": "#/definitions/Column" + } + } + } + }, + "JsonConfiguration": { + "type": "object", + "additionalProperties": false + }, + "ParquetConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "SchemaDefinition": { + "$ref": "#/definitions/SchemaDefinition" + } + } + }, + "FileFormatConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "JsonConfiguration": { + "$ref": "#/definitions/JsonConfiguration" + }, + "ParquetConfiguration": { + "$ref": "#/definitions/ParquetConfiguration" + } + } + }, + "Column": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Type", + "Name" + ] + }, + "CustomerManagedS3": { + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "type": "string", + "pattern": "[a-zA-Z0-9.\\-_]*", + "minLength": 3, + "maxLength": 255 + }, + "RoleArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "KeyPrefix": { + "type": "string", + "pattern": "[a-zA-Z0-9!_.*'()/{}:-]*/", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Bucket", + "RoleArn" + ] + }, + "IotSiteWiseMultiLayerStorage": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomerManagedS3Storage": { + "$ref": "#/definitions/CustomerManagedS3Storage" + } + } + }, + "CustomerManagedS3Storage": { + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "type": "string", + "pattern": "[a-zA-Z0-9.\\-_]*", + "minLength": 3, + "maxLength": 255 + }, + "KeyPrefix": { + "type": "string", + "pattern": "[a-zA-Z0-9!_.*'()/{}:-]*/", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Bucket" + ] + }, + "ServiceManagedS3": { + "type": "object", + "additionalProperties": false + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "RetentionPeriod": { + "type": "object", + "additionalProperties": false, + "properties": { + "NumberOfDays": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + }, + "Unlimited": { + "type": "boolean" + } + } + }, + "DatastorePartitions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Partitions": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 0, + "maxItems": 25, + "items": { + "$ref": "#/definitions/DatastorePartition" + } + } + } + }, + "DatastorePartition": { + "type": "object", + "additionalProperties": false, + "properties": { + "Partition": { + "$ref": "#/definitions/Partition" + }, + "TimestampPartition": { + "$ref": "#/definitions/TimestampPartition" + } + } + }, + "Partition": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttributeName": { + "type": "string", + "pattern": "[a-zA-Z0-9_]+" + } + }, + "required": [ + "AttributeName" + ] + }, + "TimestampPartition": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttributeName": { + "type": "string", + "pattern": "[a-zA-Z0-9_]+" + }, + "TimestampFormat": { + "type": "string", + "pattern": "[a-zA-Z0-9\\s\\[\\]_,.'/:-]*" + } + }, + "required": [ + "AttributeName" + ] + } + }, + "primaryIdentifier": [ + "/properties/DatastoreName" + ], + "createOnlyProperties": [ + "/properties/DatastoreName" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotanalytics:CreateDatastore" + ] + }, + "read": { + "permissions": [ + "iotanalytics:DescribeDatastore", + "iotanalytics:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotanalytics:UpdateDatastore", + "iotanalytics:TagResource", + "iotanalytics:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotanalytics:DeleteDatastore" + ] + }, + "list": { + "permissions": [ + "iotanalytics:ListDatastores" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotanalytics/pipeline.json b/internal/aws/cfn/schemas/aws/iotanalytics/pipeline.json new file mode 100644 index 00000000..4fa65f5f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotanalytics/pipeline.json @@ -0,0 +1,443 @@ +{ + "typeName": "AWS::IoTAnalytics::Pipeline", + "description": "Resource Type definition for AWS::IoTAnalytics::Pipeline", + "additionalProperties": false, + "taggable": true, + "properties": { + "Id": { + "type": "string" + }, + "PipelineName": { + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "minLength": 1, + "maxLength": 128 + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "PipelineActivities": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 25, + "items": { + "$ref": "#/definitions/Activity" + } + } + }, + "definitions": { + "Activity": { + "type": "object", + "additionalProperties": false, + "properties": { + "SelectAttributes": { + "$ref": "#/definitions/SelectAttributes" + }, + "Datastore": { + "$ref": "#/definitions/Datastore" + }, + "Filter": { + "$ref": "#/definitions/Filter" + }, + "AddAttributes": { + "$ref": "#/definitions/AddAttributes" + }, + "Channel": { + "$ref": "#/definitions/Channel" + }, + "DeviceShadowEnrich": { + "$ref": "#/definitions/DeviceShadowEnrich" + }, + "Math": { + "$ref": "#/definitions/Math" + }, + "Lambda": { + "$ref": "#/definitions/Lambda" + }, + "DeviceRegistryEnrich": { + "$ref": "#/definitions/DeviceRegistryEnrich" + }, + "RemoveAttributes": { + "$ref": "#/definitions/RemoveAttributes" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DeviceShadowEnrich": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attribute": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "ThingName": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "RoleArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Attribute", + "ThingName", + "RoleArn", + "Name" + ] + }, + "Filter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Filter": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Filter", + "Name" + ] + }, + "RemoveAttributes": { + "type": "object", + "additionalProperties": false, + "properties": { + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Attributes": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Attributes", + "Name" + ] + }, + "Datastore": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatastoreName": { + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "minLength": 1, + "maxLength": 128 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "DatastoreName", + "Name" + ] + }, + "Channel": { + "type": "object", + "additionalProperties": false, + "properties": { + "ChannelName": { + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "minLength": 1, + "maxLength": 128 + }, + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "ChannelName", + "Name" + ] + }, + "SelectAttributes": { + "type": "object", + "additionalProperties": false, + "properties": { + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Attributes": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Name", + "Attributes" + ] + }, + "Lambda": { + "type": "object", + "additionalProperties": false, + "properties": { + "BatchSize": { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "LambdaName": { + "type": "string", + "pattern": "[a-zA-Z0-9_-]+", + "minLength": 1, + "maxLength": 64 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "LambdaName", + "Name", + "BatchSize" + ] + }, + "DeviceRegistryEnrich": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attribute": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "ThingName": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "RoleArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Attribute", + "ThingName", + "RoleArn", + "Name" + ] + }, + "AddAttributes": { + "type": "object", + "additionalProperties": false, + "properties": { + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Attributes": { + "type": "object", + "minProperties": 1, + "maxProperties": 50, + "patternProperties": { + "^.*$": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Attributes", + "Name" + ] + }, + "Math": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attribute": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Next": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Math": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Attribute", + "Math", + "Name" + ] + } + }, + "required": [ + "PipelineActivities" + ], + "primaryIdentifier": [ + "/properties/PipelineName" + ], + "createOnlyProperties": [ + "/properties/PipelineName" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotanalytics:CreatePipeline" + ] + }, + "read": { + "permissions": [ + "iotanalytics:DescribePipeline", + "iotanalytics:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotanalytics:UpdatePipeline", + "iotanalytics:TagResource", + "iotanalytics:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotanalytics:DeletePipeline" + ] + }, + "list": { + "permissions": [ + "iotanalytics:ListPipelines" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotcoredeviceadvisor/suitedefinition.json b/internal/aws/cfn/schemas/aws/iotcoredeviceadvisor/suitedefinition.json new file mode 100644 index 00000000..d64988d6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotcoredeviceadvisor/suitedefinition.json @@ -0,0 +1,196 @@ +{ + "typeName": "AWS::IoTCoreDeviceAdvisor::SuiteDefinition", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-device-advisor.git", + "definitions": { + "DeviceUnderTest": { + "type": "object", + "properties": { + "CertificateArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "ThingArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "additionalProperties": false + }, + "SuiteDefinitionName": { + "type": "string", + "description": "The Name of the suite definition.", + "minLength": 1, + "maxLength": 256 + }, + "RootGroup": { + "type": "string", + "description": "The root group of the test suite.", + "minLength": 1, + "maxLength": 2048 + }, + "Devices": { + "type": "array", + "description": "The devices being tested in the test suite", + "minItems": 0, + "maxItems": 2, + "items": { + "$ref": "#/definitions/DeviceUnderTest" + } + }, + "DevicePermissionRoleArn": { + "type": "string", + "description": "The device permission role arn of the test suite.", + "minLength": 20, + "maxLength": 2048 + }, + "IntendedForQualification": { + "description": "Whether the tests are intended for qualification in a suite.", + "type": "boolean" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "SuiteDefinitionConfiguration": { + "type": "object", + "properties": { + "DevicePermissionRoleArn": { + "$ref": "#/definitions/DevicePermissionRoleArn" + }, + "Devices": { + "$ref": "#/definitions/Devices" + }, + "IntendedForQualification": { + "$ref": "#/definitions/IntendedForQualification" + }, + "RootGroup": { + "$ref": "#/definitions/RootGroup" + }, + "SuiteDefinitionName": { + "$ref": "#/definitions/SuiteDefinitionName" + } + }, + "required": [ + "DevicePermissionRoleArn", + "RootGroup" + ], + "additionalProperties": false + }, + "SuiteDefinitionId": { + "type": "string", + "maxLength": 36, + "minLength": 12, + "description": "The unique identifier for the suite definition." + }, + "SuiteDefinitionArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "description": "The Amazon Resource name for the suite definition." + }, + "SuiteDefinitionVersion": { + "type": "string", + "maxLength": 255, + "minLength": 2, + "description": "The suite definition version of a test suite." + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "SuiteDefinitionConfiguration" + ], + "readOnlyProperties": [ + "/properties/SuiteDefinitionId", + "/properties/SuiteDefinitionArn", + "/properties/SuiteDefinitionVersion" + ], + "primaryIdentifier": [ + "/properties/SuiteDefinitionId" + ], + "handlers": { + "create": { + "permissions": [ + "iot:DescribeCertificate", + "iot:DescribeThing", + "iot:GetPolicy", + "iot:ListAttachedPolicies", + "iot:ListCertificates", + "iot:ListPrincipalPolicies", + "iot:ListTagsForResource", + "iot:ListThingPrincipals", + "iot:ListThings", + "iotdeviceadvisor:CreateSuiteDefinition", + "iotdeviceadvisor:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iotdeviceadvisor:GetSuiteDefinition", + "iotdeviceadvisor:TagResource" + ] + }, + "update": { + "permissions": [ + "iot:DescribeCertificate", + "iot:DescribeThing", + "iot:GetPolicy", + "iot:ListAttachedPolicies", + "iot:ListCertificates", + "iot:ListPrincipalPolicies", + "iot:ListTagsForResource", + "iot:ListThingPrincipals", + "iot:ListThings", + "iotdeviceadvisor:UpdateSuiteDefinition", + "iotdeviceadvisor:GetSuiteDefinition", + "iotdeviceadvisor:UntagResource", + "iotdeviceadvisor:TagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iotdeviceadvisor:GetSuiteDefinition", + "iotdeviceadvisor:DeleteSuiteDefinition" + ] + }, + "list": { + "permissions": [ + "iotdeviceadvisor:ListSuiteDefinitions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotevents/alarmmodel.json b/internal/aws/cfn/schemas/aws/iotevents/alarmmodel.json new file mode 100644 index 00000000..27e71fd2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotevents/alarmmodel.json @@ -0,0 +1,561 @@ +{ + "typeName": "AWS::IoTEvents::AlarmModel", + "description": "The AWS::IoTEvents::AlarmModel resource creates a alarm model. AWS IoT Events alarms help you monitor your data for changes. The data can be metrics that you measure for your equipment and processes. You can create alarms that send notifications when a threshold is breached. Alarms help you detect issues, streamline maintenance, and optimize performance of your equipment and processes.\n\nAlarms are instances of alarm models. The alarm model specifies what to detect, when to send notifications, who gets notified, and more. You can also specify one or more supported actions that occur when the alarm state changes. AWS IoT Events routes input attributes derived from your data to the appropriate alarms. If the data that you're monitoring is outside the specified range, the alarm is invoked. You can also acknowledge the alarms or set them to the snooze mode.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AlarmRule": { + "type": "object", + "description": "Defines when your alarm is invoked.", + "additionalProperties": false, + "properties": { + "SimpleRule": { + "$ref": "#/definitions/SimpleRule" + } + } + }, + "SimpleRule": { + "type": "object", + "additionalProperties": false, + "description": "A rule that compares an input property value to a threshold value with a comparison operator.", + "properties": { + "InputProperty": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "description": "The value on the left side of the comparison operator. You can specify an AWS IoT Events input attribute as an input property." + }, + "ComparisonOperator": { + "type": "string", + "enum": [ + "GREATER", + "GREATER_OR_EQUAL", + "LESS", + "LESS_OR_EQUAL", + "EQUAL", + "NOT_EQUAL" + ], + "description": "The comparison operator." + }, + "Threshold": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "description": "The value on the right side of the comparison operator. You can enter a number or specify an AWS IoT Events input attribute." + } + }, + "required": [ + "InputProperty", + "ComparisonOperator", + "Threshold" + ] + }, + "AlarmEventActions": { + "type": "object", + "additionalProperties": false, + "description": "Contains information about one or more alarm actions.", + "properties": { + "AlarmActions": { + "$ref": "#/definitions/AlarmActions" + } + } + }, + "AlarmCapabilities": { + "type": "object", + "description": "Contains the configuration information of alarm state changes", + "additionalProperties": false, + "properties": { + "InitializationConfiguration": { + "$ref": "#/definitions/InitializationConfiguration" + }, + "AcknowledgeFlow": { + "$ref": "#/definitions/AcknowledgeFlow" + } + } + }, + "AlarmActions": { + "type": "array", + "description": "Specifies one or more supported actions to receive notifications when the alarm state changes.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AlarmAction" + } + }, + "AlarmAction": { + "type": "object", + "additionalProperties": false, + "description": "The actions to be performed.", + "properties": { + "DynamoDB": { + "$ref": "#/definitions/DynamoDB" + }, + "DynamoDBv2": { + "$ref": "#/definitions/DynamoDBv2" + }, + "Firehose": { + "$ref": "#/definitions/Firehose" + }, + "IotEvents": { + "$ref": "#/definitions/IotEvents" + }, + "IotSiteWise": { + "$ref": "#/definitions/IotSiteWise" + }, + "IotTopicPublish": { + "$ref": "#/definitions/IotTopicPublish" + }, + "Lambda": { + "$ref": "#/definitions/Lambda" + }, + "Sns": { + "$ref": "#/definitions/Sns" + }, + "Sqs": { + "$ref": "#/definitions/Sqs" + } + } + }, + "DynamoDB": { + "type": "object", + "additionalProperties": false, + "description": "Writes to the DynamoDB table that you created. The default action payload contains all attribute-value pairs that have the information about the alarm model instance and the event that triggered the action. You can also customize the [payload](https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html). One column of the DynamoDB table receives all attribute-value pairs in the payload that you specify. For more information, see [Actions](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html) in *AWS IoT Events Developer Guide*.", + "properties": { + "HashKeyField": { + "type": "string", + "description": "The name of the hash key (also called the partition key)." + }, + "HashKeyType": { + "type": "string", + "description": "The data type for the hash key (also called the partition key). You can specify the following values:\n\n* `STRING` - The hash key is a string.\n\n* `NUMBER` - The hash key is a number.\n\nIf you don't specify `hashKeyType`, the default value is `STRING`." + }, + "HashKeyValue": { + "type": "string", + "description": "The value of the hash key (also called the partition key)." + }, + "Operation": { + "type": "string", + "description": "The type of operation to perform. You can specify the following values:\n\n* `INSERT` - Insert data as a new item into the DynamoDB table. This item uses the specified hash key as a partition key. If you specified a range key, the item uses the range key as a sort key.\n\n* `UPDATE` - Update an existing item of the DynamoDB table with new data. This item's partition key must match the specified hash key. If you specified a range key, the range key must match the item's sort key.\n\n* `DELETE` - Delete an existing item of the DynamoDB table. This item's partition key must match the specified hash key. If you specified a range key, the range key must match the item's sort key.\n\nIf you don't specify this parameter, AWS IoT Events triggers the `INSERT` operation." + }, + "Payload": { + "$ref": "#/definitions/Payload" + }, + "PayloadField": { + "type": "string", + "description": "The name of the DynamoDB column that receives the action payload.\n\nIf you don't specify this parameter, the name of the DynamoDB column is `payload`." + }, + "RangeKeyField": { + "type": "string", + "description": "The name of the range key (also called the sort key)." + }, + "RangeKeyType": { + "type": "string", + "description": "The data type for the range key (also called the sort key), You can specify the following values:\n\n* `STRING` - The range key is a string.\n\n* `NUMBER` - The range key is number.\n\nIf you don't specify `rangeKeyField`, the default value is `STRING`." + }, + "RangeKeyValue": { + "type": "string", + "description": "The value of the range key (also called the sort key)." + }, + "TableName": { + "type": "string", + "description": "The name of the DynamoDB table." + } + }, + "required": [ + "HashKeyField", + "HashKeyValue", + "TableName" + ] + }, + "DynamoDBv2": { + "type": "object", + "additionalProperties": false, + "description": "Defines an action to write to the Amazon DynamoDB table that you created. The default action payload contains all attribute-value pairs that have the information about the alarm model instance and the event that triggered the action. You can also customize the [payload](https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html). A separate column of the DynamoDB table receives one attribute-value pair in the payload that you specify.\n\nYou can use expressions for parameters that are strings. For more information, see [Expressions](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html) in the *AWS IoT Events Developer Guide*.", + "properties": { + "Payload": { + "$ref": "#/definitions/Payload" + }, + "TableName": { + "type": "string", + "description": "The name of the DynamoDB table." + } + }, + "required": [ + "TableName" + ] + }, + "Firehose": { + "type": "object", + "additionalProperties": false, + "description": "Sends information about the alarm model instance and the event that triggered the action to an Amazon Kinesis Data Firehose delivery stream.", + "properties": { + "DeliveryStreamName": { + "type": "string", + "description": "The name of the Kinesis Data Firehose delivery stream where the data is written." + }, + "Payload": { + "$ref": "#/definitions/Payload" + }, + "Separator": { + "type": "string", + "description": "A character separator that is used to separate records written to the Kinesis Data Firehose delivery stream. Valid values are: '\\n' (newline), '\\t' (tab), '\\r\\n' (Windows newline), ',' (comma).", + "pattern": "([\\n\\t])|(\\r\\n)|(,)" + } + }, + "required": [ + "DeliveryStreamName" + ] + }, + "IotEvents": { + "type": "object", + "additionalProperties": false, + "description": "Sends an AWS IoT Events input, passing in information about the alarm model instance and the event that triggered the action.", + "properties": { + "InputName": { + "type": "string", + "description": "The name of the AWS IoT Events input where the data is sent.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$" + }, + "Payload": { + "$ref": "#/definitions/Payload" + } + }, + "required": [ + "InputName" + ] + }, + "IotSiteWise": { + "type": "object", + "additionalProperties": false, + "description": "Sends information about the alarm model instance and the event that triggered the action to a specified asset property in AWS IoT SiteWise.", + "properties": { + "AssetId": { + "type": "string", + "description": "The ID of the asset that has the specified property. You can specify an expression." + }, + "EntryId": { + "type": "string", + "description": "A unique identifier for this entry. You can use the entry ID to track which data entry causes an error in case of failure. The default is a new unique identifier. You can also specify an expression." + }, + "PropertyAlias": { + "type": "string", + "description": "The alias of the asset property. You can also specify an expression." + }, + "PropertyId": { + "type": "string", + "description": "The ID of the asset property. You can specify an expression." + }, + "PropertyValue": { + "$ref": "#/definitions/AssetPropertyValue" + } + } + }, + "IotTopicPublish": { + "type": "object", + "additionalProperties": false, + "description": "Information required to publish the MQTT message through the AWS IoT message broker.", + "properties": { + "MqttTopic": { + "type": "string", + "description": "The MQTT topic of the message. You can use a string expression that includes variables (`$variable.`) and input values (`$input..`) as the topic string.", + "minLength": 1, + "maxLength": 128 + }, + "Payload": { + "$ref": "#/definitions/Payload" + } + }, + "required": [ + "MqttTopic" + ] + }, + "Lambda": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string", + "description": "The ARN of the Lambda function that is executed.", + "minLength": 1, + "maxLength": 2048 + }, + "Payload": { + "$ref": "#/definitions/Payload" + } + }, + "required": [ + "FunctionArn" + ] + }, + "Sns": { + "type": "object", + "additionalProperties": false, + "description": "Information required to publish the Amazon SNS message.", + "properties": { + "Payload": { + "$ref": "#/definitions/Payload" + }, + "TargetArn": { + "type": "string", + "description": "The ARN of the Amazon SNS target where the message is sent.", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": [ + "TargetArn" + ] + }, + "Sqs": { + "type": "object", + "additionalProperties": false, + "properties": { + "Payload": { + "$ref": "#/definitions/Payload" + }, + "QueueUrl": { + "type": "string", + "description": "The URL of the SQS queue where the data is written." + }, + "UseBase64": { + "type": "boolean", + "description": "Set this to `TRUE` if you want the data to be base-64 encoded before it is written to the queue. Otherwise, set this to `FALSE`." + } + }, + "required": [ + "QueueUrl" + ] + }, + "Payload": { + "type": "object", + "additionalProperties": false, + "description": "Information needed to configure the payload.\n\nBy default, AWS IoT Events generates a standard payload in JSON for any action. This action payload contains all attribute-value pairs that have the information about the alarm model instance and the event triggered the action. To configure the action payload, you can use `contentExpression`.", + "properties": { + "ContentExpression": { + "type": "string", + "description": "The content of the payload. You can use a string expression that includes quoted strings (`''`), variables (`$variable.`), input values (`$input..`), string concatenations, and quoted strings that contain `${}` as the content. The recommended maximum size of a content expression is 1 KB.", + "minLength": 1 + }, + "Type": { + "type": "string", + "description": "The value of the payload type can be either `STRING` or `JSON`." + } + }, + "required": [ + "ContentExpression", + "Type" + ] + }, + "InitializationConfiguration": { + "type": "object", + "description": "Specifies the default alarm state. The configuration applies to all alarms that were created based on this alarm model.", + "additionalProperties": false, + "properties": { + "DisabledOnInitialization": { + "type": "boolean", + "description": "The value must be TRUE or FALSE. If FALSE, all alarm instances created based on the alarm model are activated. The default value is TRUE.", + "default": "true" + } + }, + "required": [ + "DisabledOnInitialization" + ] + }, + "AcknowledgeFlow": { + "type": "object", + "description": "Specifies whether to get notified for alarm state changes.", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean", + "description": "The value must be TRUE or FALSE. If TRUE, you receive a notification when the alarm state changes. You must choose to acknowledge the notification before the alarm state can return to NORMAL. If FALSE, you won't receive notifications. The alarm automatically changes to the NORMAL state when the input property value returns to the specified range.", + "default": "true" + } + } + }, + "AssetPropertyValue": { + "type": "object", + "additionalProperties": false, + "description": "A structure that contains value information. For more information, see [AssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetPropertyValue.html) in the *AWS IoT SiteWise API Reference*.", + "properties": { + "Quality": { + "type": "string", + "description": "The quality of the asset property value. The value must be `GOOD`, `BAD`, or `UNCERTAIN`. You can also specify an expression." + }, + "Timestamp": { + "$ref": "#/definitions/AssetPropertyTimestamp" + }, + "Value": { + "$ref": "#/definitions/AssetPropertyVariant" + } + }, + "required": [ + "Value" + ] + }, + "AssetPropertyTimestamp": { + "type": "object", + "additionalProperties": false, + "description": "A structure that contains timestamp information. For more information, see [TimeInNanos](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_TimeInNanos.html) in the *AWS IoT SiteWise API Reference*.", + "properties": { + "OffsetInNanos": { + "type": "string", + "description": "The timestamp, in seconds, in the Unix epoch format. The valid range is between `1-31556889864403199`. You can also specify an expression." + }, + "TimeInSeconds": { + "type": "string", + "description": "The nanosecond offset converted from `timeInSeconds`. The valid range is between `0-999999999`. You can also specify an expression." + } + }, + "required": [ + "TimeInSeconds" + ] + }, + "AssetPropertyVariant": { + "type": "object", + "additionalProperties": false, + "description": "A structure that contains an asset property value. For more information, see [Variant](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_Variant.html) in the *AWS IoT SiteWise API Reference*.", + "properties": { + "BooleanValue": { + "type": "string", + "description": "The asset property value is a Boolean value that must be `TRUE` or `FALSE`. You can also specify an expression. If you use an expression, the evaluated result should be a Boolean value." + }, + "DoubleValue": { + "type": "string", + "description": "The asset property value is a double. You can also specify an expression. If you use an expression, the evaluated result should be a double." + }, + "IntegerValue": { + "type": "string", + "description": "The asset property value is an integer. You can also specify an expression. If you use an expression, the evaluated result should be an integer." + }, + "StringValue": { + "type": "string", + "description": "The asset property value is a string. You can also specify an expression. If you use an expression, the evaluated result should be a string." + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "description": "Tags to be applied to Input.", + "properties": { + "Key": { + "description": "Key of the Tag.", + "type": "string" + }, + "Value": { + "description": "Value of the Tag.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "AlarmModelName": { + "type": "string", + "description": "The name of the alarm model.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_-]+$" + }, + "AlarmModelDescription": { + "type": "string", + "description": "A brief description of the alarm model.", + "maxLength": 1024 + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the role that grants permission to AWS IoT Events to perform its operations.", + "minLength": 1, + "maxLength": 2048 + }, + "Key": { + "type": "string", + "description": "The value used to identify a alarm instance. When a device or system sends input, a new alarm instance with a unique key value is created. AWS IoT Events can continue to route input to its corresponding alarm instance based on this identifying information.\n\nThis parameter uses a JSON-path expression to select the attribute-value pair in the message payload that is used for identification. To route the message to the correct alarm instance, the device must send a message payload that contains the same attribute-value.", + "minLength": 1, + "maxLength": 128, + "pattern": "^((`[\\w\\- ]+`)|([\\w\\-]+))(\\.((`[\\w\\- ]+`)|([\\w\\-]+)))*$" + }, + "Severity": { + "type": "integer", + "description": "A non-negative integer that reflects the severity level of the alarm.\n\n", + "minimum": 0, + "maximum": 2147483647 + }, + "AlarmRule": { + "$ref": "#/definitions/AlarmRule" + }, + "AlarmEventActions": { + "$ref": "#/definitions/AlarmEventActions" + }, + "AlarmCapabilities": { + "$ref": "#/definitions/AlarmCapabilities" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.\n\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "RoleArn", + "AlarmRule" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/AlarmModelName" + ], + "createOnlyProperties": [ + "/properties/AlarmModelName", + "/properties/Key" + ], + "handlers": { + "create": { + "permissions": [ + "iotevents:CreateAlarmModel", + "iotevents:UpdateInputRouting", + "iotevents:DescribeAlarmModel", + "iotevents:ListTagsForResource", + "iotevents:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iotevents:DescribeAlarmModel", + "iotevents:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotevents:UpdateAlarmModel", + "iotevents:UpdateInputRouting", + "iotevents:DescribeAlarmModel", + "iotevents:ListTagsForResource", + "iotevents:UntagResource", + "iotevents:TagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iotevents:DeleteAlarmModel", + "iotevents:DescribeAlarmModel" + ] + }, + "list": { + "permissions": [ + "iotevents:ListAlarmModels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotevents/detectormodel.json b/internal/aws/cfn/schemas/aws/iotevents/detectormodel.json new file mode 100644 index 00000000..af4a01b0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotevents/detectormodel.json @@ -0,0 +1,727 @@ +{ + "typeName": "AWS::IoTEvents::DetectorModel", + "description": "The AWS::IoTEvents::DetectorModel resource creates a detector model. You create a *detector model* (a model of your equipment or process) using *states*. For each state, you define conditional (Boolean) logic that evaluates the incoming inputs to detect significant events. When an event is detected, it can change the state or trigger custom-built or predefined actions using other AWS services. You can define additional events that trigger actions when entering or exiting a state and, optionally, when a condition is met. For more information, see [How to Use AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/how-to-use-iotevents.html) in the *AWS IoT Events Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "DetectorModelDefinition": { + "type": "object", + "additionalProperties": false, + "description": "Information that defines how a detector operates.", + "properties": { + "InitialStateName": { + "type": "string", + "description": "The state that is entered at the creation of each detector (instance).", + "minLength": 1, + "maxLength": 128 + }, + "States": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "Information about the states of the detector.", + "minItems": 1, + "items": { + "$ref": "#/definitions/State" + } + } + }, + "required": [ + "States", + "InitialStateName" + ] + }, + "State": { + "type": "object", + "additionalProperties": false, + "description": "Information that defines a state of a detector.", + "properties": { + "OnEnter": { + "$ref": "#/definitions/OnEnter" + }, + "OnExit": { + "$ref": "#/definitions/OnExit" + }, + "OnInput": { + "$ref": "#/definitions/OnInput" + }, + "StateName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "description": "The name of the state." + } + }, + "required": [ + "StateName" + ] + }, + "OnEnter": { + "type": "object", + "additionalProperties": false, + "description": "When entering this state, perform these `actions` if the `condition` is `TRUE`.", + "properties": { + "Events": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "Specifies the `actions` that are performed when the state is entered and the `condition` is `TRUE`.", + "items": { + "$ref": "#/definitions/Event" + } + } + } + }, + "OnExit": { + "type": "object", + "additionalProperties": false, + "description": "When exiting this state, perform these `actions` if the specified `condition` is `TRUE`.", + "properties": { + "Events": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "Specifies the `actions` that are performed when the state is exited and the `condition` is `TRUE`.", + "items": { + "$ref": "#/definitions/Event" + } + } + } + }, + "OnInput": { + "type": "object", + "additionalProperties": false, + "description": "When an input is received and the `condition` is `TRUE`, perform the specified `actions`.", + "properties": { + "Events": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "Specifies the `actions` performed when the `condition` evaluates to `TRUE`.", + "items": { + "$ref": "#/definitions/Event" + } + }, + "TransitionEvents": { + "type": "array", + "uniqueItems": false, + "insertionOrder": true, + "description": "Specifies the `actions` performed, and the next `state` entered, when a `condition` evaluates to `TRUE`.", + "items": { + "$ref": "#/definitions/TransitionEvent" + } + } + } + }, + "Event": { + "type": "object", + "additionalProperties": false, + "description": "Specifies the `actions` to be performed when the `condition` evaluates to `TRUE`.", + "properties": { + "Actions": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "The actions to be performed.", + "items": { + "$ref": "#/definitions/Action" + } + }, + "Condition": { + "type": "string", + "description": "The Boolean expression that, when `TRUE`, causes the `actions` to be performed. If not present, the `actions` are performed (=`TRUE`). If the expression result is not a `Boolean` value, the `actions` are not performed (=`FALSE`).", + "maxLength": 512 + }, + "EventName": { + "type": "string", + "description": "The name of the event.", + "maxLength": 128 + } + }, + "required": [ + "EventName" + ] + }, + "TransitionEvent": { + "type": "object", + "additionalProperties": false, + "description": "Specifies the `actions `performed and the next `state` entered when a `condition` evaluates to `TRUE`.", + "properties": { + "Actions": { + "type": "array", + "description": "The actions to be performed.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Action" + } + }, + "Condition": { + "type": "string", + "description": "A Boolean expression that when `TRUE` causes the `actions` to be performed and the `nextState` to be entered.", + "maxLength": 512 + }, + "EventName": { + "type": "string", + "description": "The name of the event.", + "minLength": 1, + "maxLength": 128 + }, + "NextState": { + "type": "string", + "description": "The next state to enter.", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Condition", + "EventName", + "NextState" + ] + }, + "Action": { + "type": "object", + "additionalProperties": false, + "description": "The actions to be performed.", + "properties": { + "ClearTimer": { + "$ref": "#/definitions/ClearTimer" + }, + "DynamoDB": { + "$ref": "#/definitions/DynamoDB" + }, + "DynamoDBv2": { + "$ref": "#/definitions/DynamoDBv2" + }, + "Firehose": { + "$ref": "#/definitions/Firehose" + }, + "IotEvents": { + "$ref": "#/definitions/IotEvents" + }, + "IotSiteWise": { + "$ref": "#/definitions/IotSiteWise" + }, + "IotTopicPublish": { + "$ref": "#/definitions/IotTopicPublish" + }, + "Lambda": { + "$ref": "#/definitions/Lambda" + }, + "ResetTimer": { + "$ref": "#/definitions/ResetTimer" + }, + "SetTimer": { + "$ref": "#/definitions/SetTimer" + }, + "SetVariable": { + "$ref": "#/definitions/SetVariable" + }, + "Sns": { + "$ref": "#/definitions/Sns" + }, + "Sqs": { + "$ref": "#/definitions/Sqs" + } + } + }, + "ClearTimer": { + "type": "object", + "additionalProperties": false, + "description": "Information needed to clear the timer.", + "properties": { + "TimerName": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "TimerName" + ] + }, + "DynamoDB": { + "type": "object", + "additionalProperties": false, + "description": "Writes to the DynamoDB table that you created. The default action payload contains all attribute-value pairs that have the information about the detector model instance and the event that triggered the action. You can also customize the [payload](https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html). One column of the DynamoDB table receives all attribute-value pairs in the payload that you specify. For more information, see [Actions](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html) in *AWS IoT Events Developer Guide*.", + "properties": { + "HashKeyField": { + "type": "string", + "description": "The name of the hash key (also called the partition key)." + }, + "HashKeyType": { + "type": "string", + "description": "The data type for the hash key (also called the partition key). You can specify the following values:\n\n* `STRING` - The hash key is a string.\n\n* `NUMBER` - The hash key is a number.\n\nIf you don't specify `hashKeyType`, the default value is `STRING`." + }, + "HashKeyValue": { + "type": "string", + "description": "The value of the hash key (also called the partition key)." + }, + "Operation": { + "type": "string", + "description": "The type of operation to perform. You can specify the following values:\n\n* `INSERT` - Insert data as a new item into the DynamoDB table. This item uses the specified hash key as a partition key. If you specified a range key, the item uses the range key as a sort key.\n\n* `UPDATE` - Update an existing item of the DynamoDB table with new data. This item's partition key must match the specified hash key. If you specified a range key, the range key must match the item's sort key.\n\n* `DELETE` - Delete an existing item of the DynamoDB table. This item's partition key must match the specified hash key. If you specified a range key, the range key must match the item's sort key.\n\nIf you don't specify this parameter, AWS IoT Events triggers the `INSERT` operation." + }, + "Payload": { + "$ref": "#/definitions/Payload" + }, + "PayloadField": { + "type": "string", + "description": "The name of the DynamoDB column that receives the action payload.\n\nIf you don't specify this parameter, the name of the DynamoDB column is `payload`." + }, + "RangeKeyField": { + "type": "string", + "description": "The name of the range key (also called the sort key)." + }, + "RangeKeyType": { + "type": "string", + "description": "The data type for the range key (also called the sort key), You can specify the following values:\n\n* `STRING` - The range key is a string.\n\n* `NUMBER` - The range key is number.\n\nIf you don't specify `rangeKeyField`, the default value is `STRING`." + }, + "RangeKeyValue": { + "type": "string", + "description": "The value of the range key (also called the sort key)." + }, + "TableName": { + "type": "string", + "description": "The name of the DynamoDB table." + } + }, + "required": [ + "HashKeyField", + "HashKeyValue", + "TableName" + ] + }, + "DynamoDBv2": { + "type": "object", + "additionalProperties": false, + "description": "Defines an action to write to the Amazon DynamoDB table that you created. The default action payload contains all attribute-value pairs that have the information about the detector model instance and the event that triggered the action. You can also customize the [payload](https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html). A separate column of the DynamoDB table receives one attribute-value pair in the payload that you specify.\n\nYou can use expressions for parameters that are strings. For more information, see [Expressions](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html) in the *AWS IoT Events Developer Guide*.", + "properties": { + "Payload": { + "$ref": "#/definitions/Payload" + }, + "TableName": { + "type": "string", + "description": "The name of the DynamoDB table." + } + }, + "required": [ + "TableName" + ] + }, + "Firehose": { + "type": "object", + "additionalProperties": false, + "description": "Sends information about the detector model instance and the event that triggered the action to an Amazon Kinesis Data Firehose delivery stream.", + "properties": { + "DeliveryStreamName": { + "type": "string", + "description": "The name of the Kinesis Data Firehose delivery stream where the data is written." + }, + "Payload": { + "$ref": "#/definitions/Payload" + }, + "Separator": { + "type": "string", + "description": "A character separator that is used to separate records written to the Kinesis Data Firehose delivery stream. Valid values are: '\\n' (newline), '\\t' (tab), '\\r\\n' (Windows newline), ',' (comma).", + "pattern": "([\\n\\t])|(\\r\\n)|(,)" + } + }, + "required": [ + "DeliveryStreamName" + ] + }, + "IotEvents": { + "type": "object", + "additionalProperties": false, + "description": "Sends an AWS IoT Events input, passing in information about the detector model instance and the event that triggered the action.", + "properties": { + "InputName": { + "type": "string", + "description": "The name of the AWS IoT Events input where the data is sent.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$" + }, + "Payload": { + "$ref": "#/definitions/Payload" + } + }, + "required": [ + "InputName" + ] + }, + "IotSiteWise": { + "type": "object", + "additionalProperties": false, + "description": "Sends information about the detector model instance and the event that triggered the action to a specified asset property in AWS IoT SiteWise.", + "properties": { + "AssetId": { + "type": "string", + "description": "The ID of the asset that has the specified property. You can specify an expression." + }, + "EntryId": { + "type": "string", + "description": "A unique identifier for this entry. You can use the entry ID to track which data entry causes an error in case of failure. The default is a new unique identifier. You can also specify an expression." + }, + "PropertyAlias": { + "type": "string", + "description": "The alias of the asset property. You can also specify an expression." + }, + "PropertyId": { + "type": "string", + "description": "The ID of the asset property. You can specify an expression." + }, + "PropertyValue": { + "$ref": "#/definitions/AssetPropertyValue" + } + }, + "required": [ + "PropertyValue" + ] + }, + "IotTopicPublish": { + "type": "object", + "additionalProperties": false, + "description": "Information required to publish the MQTT message through the AWS IoT message broker.", + "properties": { + "MqttTopic": { + "type": "string", + "description": "The MQTT topic of the message. You can use a string expression that includes variables (`$variable.`) and input values (`$input..`) as the topic string.", + "minLength": 1, + "maxLength": 128 + }, + "Payload": { + "$ref": "#/definitions/Payload" + } + }, + "required": [ + "MqttTopic" + ] + }, + "Lambda": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string", + "description": "The ARN of the Lambda function that is executed.", + "minLength": 1, + "maxLength": 2048 + }, + "Payload": { + "$ref": "#/definitions/Payload" + } + }, + "required": [ + "FunctionArn" + ] + }, + "ResetTimer": { + "type": "object", + "additionalProperties": false, + "description": "Information required to reset the timer. The timer is reset to the previously evaluated result of the duration. The duration expression isn't reevaluated when you reset the timer.", + "properties": { + "TimerName": { + "type": "string", + "description": "The name of the timer to reset.", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "TimerName" + ] + }, + "SetTimer": { + "type": "object", + "additionalProperties": false, + "description": "Information needed to set the timer.", + "properties": { + "DurationExpression": { + "type": "string", + "description": "The duration of the timer, in seconds. You can use a string expression that includes numbers, variables (`$variable.`), and input values (`$input..`) as the duration. The range of the duration is `1-31622400` seconds. To ensure accuracy, the minimum duration is `60` seconds. The evaluated result of the duration is rounded down to the nearest whole number.", + "minLength": 1, + "maxLength": 1024 + }, + "Seconds": { + "type": "integer", + "description": "The number of seconds until the timer expires. The minimum value is `60` seconds to ensure accuracy. The maximum value is `31622400` seconds.", + "minimum": 60, + "maximum": 31622400 + }, + "TimerName": { + "type": "string", + "description": "The name of the timer.", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "TimerName" + ] + }, + "SetVariable": { + "type": "object", + "additionalProperties": false, + "description": "Information about the variable and its new value.", + "properties": { + "Value": { + "type": "string", + "description": "The new value of the variable.", + "minLength": 1, + "maxLength": 1024 + }, + "VariableName": { + "type": "string", + "description": "The name of the variable.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$" + } + }, + "required": [ + "Value", + "VariableName" + ] + }, + "Sns": { + "type": "object", + "additionalProperties": false, + "description": "Information required to publish the Amazon SNS message.", + "properties": { + "Payload": { + "$ref": "#/definitions/Payload" + }, + "TargetArn": { + "type": "string", + "description": "The ARN of the Amazon SNS target where the message is sent.", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": [ + "TargetArn" + ] + }, + "Sqs": { + "type": "object", + "additionalProperties": false, + "properties": { + "Payload": { + "$ref": "#/definitions/Payload" + }, + "QueueUrl": { + "type": "string", + "description": "The URL of the SQS queue where the data is written." + }, + "UseBase64": { + "type": "boolean", + "description": "Set this to `TRUE` if you want the data to be base-64 encoded before it is written to the queue. Otherwise, set this to `FALSE`." + } + }, + "required": [ + "QueueUrl" + ] + }, + "AssetPropertyValue": { + "type": "object", + "additionalProperties": false, + "description": "A structure that contains value information. For more information, see [AssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetPropertyValue.html) in the *AWS IoT SiteWise API Reference*.", + "properties": { + "Quality": { + "type": "string", + "description": "The quality of the asset property value. The value must be `GOOD`, `BAD`, or `UNCERTAIN`. You can also specify an expression." + }, + "Timestamp": { + "$ref": "#/definitions/AssetPropertyTimestamp" + }, + "Value": { + "$ref": "#/definitions/AssetPropertyVariant" + } + }, + "required": [ + "Value" + ] + }, + "AssetPropertyTimestamp": { + "type": "object", + "additionalProperties": false, + "description": "A structure that contains timestamp information. For more information, see [TimeInNanos](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_TimeInNanos.html) in the *AWS IoT SiteWise API Reference*.", + "properties": { + "OffsetInNanos": { + "type": "string", + "description": "The timestamp, in seconds, in the Unix epoch format. The valid range is between `1-31556889864403199`. You can also specify an expression." + }, + "TimeInSeconds": { + "type": "string", + "description": "The nanosecond offset converted from `timeInSeconds`. The valid range is between `0-999999999`. You can also specify an expression." + } + }, + "required": [ + "TimeInSeconds" + ] + }, + "AssetPropertyVariant": { + "type": "object", + "additionalProperties": false, + "description": "A structure that contains an asset property value. For more information, see [Variant](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_Variant.html) in the *AWS IoT SiteWise API Reference*.", + "properties": { + "BooleanValue": { + "type": "string", + "description": "The asset property value is a Boolean value that must be `TRUE` or `FALSE`. You can also specify an expression. If you use an expression, the evaluated result should be a Boolean value." + }, + "DoubleValue": { + "type": "string", + "description": "The asset property value is a double. You can also specify an expression. If you use an expression, the evaluated result should be a double." + }, + "IntegerValue": { + "type": "string", + "description": "The asset property value is an integer. You can also specify an expression. If you use an expression, the evaluated result should be an integer." + }, + "StringValue": { + "type": "string", + "description": "The asset property value is a string. You can also specify an expression. If you use an expression, the evaluated result should be a string." + } + } + }, + "Payload": { + "type": "object", + "additionalProperties": false, + "description": "Information needed to configure the payload.\n\nBy default, AWS IoT Events generates a standard payload in JSON for any action. This action payload contains all attribute-value pairs that have the information about the detector model instance and the event triggered the action. To configure the action payload, you can use `contentExpression`.", + "properties": { + "ContentExpression": { + "type": "string", + "description": "The content of the payload. You can use a string expression that includes quoted strings (`''`), variables (`$variable.`), input values (`$input..`), string concatenations, and quoted strings that contain `${}` as the content. The recommended maximum size of a content expression is 1 KB.", + "minLength": 1 + }, + "Type": { + "type": "string", + "description": "The value of the payload type can be either `STRING` or `JSON`." + } + }, + "required": [ + "ContentExpression", + "Type" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "description": "Tags to be applied to Input.", + "properties": { + "Key": { + "description": "Key of the Tag.", + "type": "string" + }, + "Value": { + "description": "Value of the Tag.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "DetectorModelDefinition": { + "$ref": "#/definitions/DetectorModelDefinition" + }, + "DetectorModelDescription": { + "type": "string", + "description": "A brief description of the detector model.", + "maxLength": 1024 + }, + "DetectorModelName": { + "type": "string", + "description": "The name of the detector model.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_-]+$" + }, + "EvaluationMethod": { + "type": "string", + "description": "Information about the order in which events are evaluated and how actions are executed.", + "enum": [ + "BATCH", + "SERIAL" + ] + }, + "Key": { + "type": "string", + "description": "The value used to identify a detector instance. When a device or system sends input, a new detector instance with a unique key value is created. AWS IoT Events can continue to route input to its corresponding detector instance based on this identifying information.\n\nThis parameter uses a JSON-path expression to select the attribute-value pair in the message payload that is used for identification. To route the message to the correct detector instance, the device must send a message payload that contains the same attribute-value.", + "minLength": 1, + "maxLength": 128, + "pattern": "^((`[\\w\\- ]+`)|([\\w\\-]+))(\\.((`[\\w\\- ]+`)|([\\w\\-]+)))*$" + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the role that grants permission to AWS IoT Events to perform its operations.", + "minLength": 1, + "maxLength": 2048 + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.\n\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "DetectorModelDefinition", + "RoleArn" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/DetectorModelName" + ], + "createOnlyProperties": [ + "/properties/DetectorModelName", + "/properties/Key" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotevents:CreateDetectorModel", + "iotevents:UpdateInputRouting", + "iotevents:DescribeDetectorModel", + "iotevents:ListTagsForResource", + "iotevents:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iotevents:DescribeDetectorModel", + "iotevents:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotevents:UpdateDetectorModel", + "iotevents:UpdateInputRouting", + "iotevents:DescribeDetectorModel", + "iotevents:ListTagsForResource", + "iotevents:UntagResource", + "iotevents:TagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iotevents:DeleteDetectorModel", + "iotevents:DescribeDetectorModel" + ] + }, + "list": { + "permissions": [ + "iotevents:ListDetectorModels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotevents/input.json b/internal/aws/cfn/schemas/aws/iotevents/input.json new file mode 100644 index 00000000..f588a9c9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotevents/input.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::IoTEvents::Input", + "description": "The AWS::IoTEvents::Input resource creates an input. To monitor your devices and processes, they must have a way to get telemetry data into AWS IoT Events. This is done by sending messages as *inputs* to AWS IoT Events. For more information, see [How to Use AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/how-to-use-iotevents.html) in the *AWS IoT Events Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotevents.git", + "definitions": { + "InputDefinition": { + "type": "object", + "additionalProperties": false, + "description": "The definition of the input.", + "properties": { + "Attributes": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "description": "The attributes from the JSON payload that are made available by the input. Inputs are derived from messages sent to the AWS IoT Events system using `BatchPutMessage`. Each such message contains a JSON payload, and those attributes (and their paired values) specified here are available for use in the `condition` expressions used by detectors that monitor this input.", + "minItems": 1, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Attribute" + } + } + }, + "required": [ + "Attributes" + ] + }, + "Attribute": { + "type": "object", + "additionalProperties": false, + "description": "The attributes from the JSON payload that are made available by the input. Inputs are derived from messages sent to the AWS IoT Events system using `BatchPutMessage`. Each such message contains a JSON payload, and those attributes (and their paired values) specified here are available for use in the `condition` expressions used by detectors that monitor this input.", + "properties": { + "JsonPath": { + "description": "An expression that specifies an attribute-value pair in a JSON structure. Use this to specify an attribute from the JSON payload that is made available by the input. Inputs are derived from messages sent to AWS IoT Events (`BatchPutMessage`). Each such message contains a JSON payload. The attribute (and its paired value) specified here are available for use in the `condition` expressions used by detectors.\n\n_Syntax_: `....`", + "minLength": 1, + "maxLength": 128, + "pattern": "^((`[a-zA-Z0-9_\\- ]+`)|([a-zA-Z0-9_\\-]+))(\\.((`[a-zA-Z0-9_\\- ]+`)|([a-zA-Z0-9_\\-]+)))*$", + "type": "string" + } + }, + "required": [ + "JsonPath" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "description": "Tags to be applied to Input.", + "properties": { + "Key": { + "description": "Key of the Tag.", + "type": "string" + }, + "Value": { + "description": "Value of the Tag.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "InputDefinition": { + "$ref": "#/definitions/InputDefinition" + }, + "InputDescription": { + "description": "A brief description of the input.", + "minLength": 1, + "maxLength": 1024, + "type": "string" + }, + "InputName": { + "description": "The name of the input.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.\n\nFor more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "InputDefinition" + ], + "primaryIdentifier": [ + "/properties/InputName" + ], + "createOnlyProperties": [ + "/properties/InputName" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotevents:CreateInput", + "iotevents:TagResource", + "iotevents:DescribeInput", + "iotevents:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotevents:DescribeInput", + "iotevents:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotevents:UpdateInput", + "iotevents:DescribeInput", + "iotevents:ListTagsForResource", + "iotevents:UntagResource", + "iotevents:TagResource" + ] + }, + "delete": { + "permissions": [ + "iotevents:DeleteInput", + "iotevents:DescribeInput" + ] + }, + "list": { + "permissions": [ + "iotevents:ListInputs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotfleethub/application.json b/internal/aws/cfn/schemas/aws/iotfleethub/application.json new file mode 100644 index 00000000..45122496 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotfleethub/application.json @@ -0,0 +1,156 @@ +{ + "typeName": "AWS::IoTFleetHub::Application", + "description": "Resource schema for AWS::IoTFleetHub::Application", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotfleethub.git", + "definitions": { + "Tag": { + "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "ApplicationId": { + "description": "The ID of the application.", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", + "minLength": 36, + "maxLength": 36 + }, + "ApplicationArn": { + "description": "The ARN of the application.", + "type": "string", + "pattern": "^arn:[!-~]+$", + "minLength": 1, + "maxLength": 1600 + }, + "ApplicationName": { + "description": "Application Name, should be between 1 and 256 characters.", + "type": "string", + "pattern": "^[ -~]*$", + "minLength": 1, + "maxLength": 256 + }, + "ApplicationDescription": { + "description": "Application Description, should be between 1 and 2048 characters.", + "type": "string", + "pattern": "^[ -~]*$", + "minLength": 1, + "maxLength": 2048 + }, + "ApplicationUrl": { + "description": "The URL of the application.", + "type": "string" + }, + "ApplicationState": { + "description": "The current state of the application.", + "type": "string" + }, + "ApplicationCreationDate": { + "description": "When the Application was created", + "type": "integer" + }, + "ApplicationLastUpdateDate": { + "description": "When the Application was last updated", + "type": "integer" + }, + "RoleArn": { + "description": "The ARN of the role that the web application assumes when it interacts with AWS IoT Core. For more info on configuring this attribute, see https://docs.aws.amazon.com/iot/latest/apireference/API_iotfleethub_CreateApplication.html#API_iotfleethub_CreateApplication_RequestSyntax", + "type": "string", + "pattern": "^arn:[!-~]+$", + "minLength": 1, + "maxLength": 1600 + }, + "SsoClientId": { + "description": "The AWS SSO application generated client ID (used with AWS SSO APIs).", + "type": "string" + }, + "ErrorMessage": { + "description": "A message indicating why Create or Delete Application failed.", + "type": "string" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the application.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + } + }, + "additionalProperties": false, + "required": [ + "ApplicationName", + "RoleArn" + ], + "readOnlyProperties": [ + "/properties/ApplicationArn", + "/properties/ApplicationId", + "/properties/ApplicationUrl", + "/properties/ApplicationState", + "/properties/ApplicationCreationDate", + "/properties/ApplicationLastUpdateDate", + "/properties/SsoClientId", + "/properties/ErrorMessage" + ], + "primaryIdentifier": [ + "/properties/ApplicationId" + ], + "handlers": { + "create": { + "permissions": [ + "iotfleethub:CreateApplication", + "iotfleethub:TagResource", + "iam:PassRole", + "sso:CreateManagedApplicationInstance", + "sso:DescribeRegisteredRegions" + ] + }, + "read": { + "permissions": [ + "iotfleethub:DescribeApplication" + ] + }, + "update": { + "permissions": [ + "iotfleethub:UpdateApplication", + "iotfleethub:DescribeApplication", + "iotfleethub:TagResource", + "iotfleethub:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotfleethub:DeleteApplication", + "iotfleethub:DescribeApplication", + "sso:DeleteManagedApplicationInstance" + ] + }, + "list": { + "permissions": [ + "iotfleethub:ListApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotfleetwise/campaign.json b/internal/aws/cfn/schemas/aws/iotfleetwise/campaign.json new file mode 100644 index 00000000..2f2676c3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotfleetwise/campaign.json @@ -0,0 +1,453 @@ +{ + "typeName": "AWS::IoTFleetWise::Campaign", + "description": "Definition of AWS::IoTFleetWise::Campaign Resource Type", + "definitions": { + "Compression": { + "type": "string", + "enum": [ + "OFF", + "SNAPPY" + ], + "default": "OFF" + }, + "DataDestinationConfig": { + "oneOf": [ + { + "additionalProperties": false, + "type": "object", + "title": "S3Config", + "properties": { + "S3Config": { + "$ref": "#/definitions/S3Config" + } + }, + "required": [ + "S3Config" + ] + }, + { + "additionalProperties": false, + "type": "object", + "title": "TimestreamConfig", + "properties": { + "TimestreamConfig": { + "$ref": "#/definitions/TimestreamConfig" + } + }, + "required": [ + "TimestreamConfig" + ] + } + ] + }, + "S3Config": { + "additionalProperties": false, + "type": "object", + "properties": { + "BucketArn": { + "maxLength": 100, + "type": "string", + "pattern": "^arn:(aws[a-zA-Z0-9-]*):s3:::.+$", + "minLength": 16 + }, + "DataFormat": { + "$ref": "#/definitions/DataFormat" + }, + "StorageCompressionFormat": { + "$ref": "#/definitions/StorageCompressionFormat" + }, + "Prefix": { + "maxLength": 512, + "type": "string", + "pattern": "^[a-zA-Z0-9-_:./!*'()]+$", + "minLength": 1 + } + }, + "required": [ + "BucketArn" + ] + }, + "TimestreamConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "TimestreamTableArn": { + "maxLength": 2048, + "type": "string", + "pattern": "^arn:(aws[a-zA-Z0-9-]*):timestream:[a-zA-Z0-9-]+:[0-9]{12}:database\\/[a-zA-Z0-9_.-]+\\/table\\/[a-zA-Z0-9_.-]+$", + "minLength": 20 + }, + "ExecutionRoleArn": { + "maxLength": 2048, + "type": "string", + "pattern": "^arn:(aws[a-zA-Z0-9-]*):iam::(\\d{12})?:(role((\\u002F)|(\\u002F[\\u0021-\\u007F]+\\u002F))[\\w+=,.@-]+)$", + "minLength": 20 + } + }, + "required": [ + "TimestreamTableArn", + "ExecutionRoleArn" + ] + }, + "UpdateCampaignAction": { + "type": "string", + "enum": [ + "APPROVE", + "SUSPEND", + "RESUME", + "UPDATE" + ] + }, + "CampaignStatus": { + "type": "string", + "enum": [ + "CREATING", + "WAITING_FOR_APPROVAL", + "RUNNING", + "SUSPENDED" + ] + }, + "DiagnosticsMode": { + "type": "string", + "enum": [ + "OFF", + "SEND_ACTIVE_DTCS" + ], + "default": "OFF" + }, + "SignalInformation": { + "additionalProperties": false, + "type": "object", + "properties": { + "MaxSampleCount": { + "maximum": 4294967295, + "type": "number", + "minimum": 1 + }, + "Name": { + "minLength": 1, + "pattern": "^[\\w|*|-]+(\\.[\\w|*|-]+)*$", + "type": "string", + "maxLength": 150 + }, + "MinimumSamplingIntervalMs": { + "maximum": 4294967295, + "type": "number", + "minimum": 0 + } + }, + "required": [ + "Name" + ] + }, + "TimeBasedCollectionScheme": { + "additionalProperties": false, + "type": "object", + "properties": { + "PeriodMs": { + "maximum": 60000, + "type": "number", + "minimum": 10000 + } + }, + "required": [ + "PeriodMs" + ] + }, + "SpoolingMode": { + "type": "string", + "enum": [ + "OFF", + "TO_DISK" + ], + "default": "OFF" + }, + "TriggerMode": { + "type": "string", + "enum": [ + "ALWAYS", + "RISING_EDGE" + ] + }, + "DataFormat": { + "type": "string", + "enum": [ + "JSON", + "PARQUET" + ] + }, + "StorageCompressionFormat": { + "type": "string", + "enum": [ + "NONE", + "GZIP" + ] + }, + "CollectionScheme": { + "oneOf": [ + { + "additionalProperties": false, + "type": "object", + "title": "TimeBasedCollectionScheme", + "properties": { + "TimeBasedCollectionScheme": { + "$ref": "#/definitions/TimeBasedCollectionScheme" + } + }, + "required": [ + "TimeBasedCollectionScheme" + ] + }, + { + "additionalProperties": false, + "type": "object", + "title": "ConditionBasedCollectionScheme", + "properties": { + "ConditionBasedCollectionScheme": { + "$ref": "#/definitions/ConditionBasedCollectionScheme" + } + }, + "required": [ + "ConditionBasedCollectionScheme" + ] + } + ] + }, + "ConditionBasedCollectionScheme": { + "additionalProperties": false, + "type": "object", + "properties": { + "MinimumTriggerIntervalMs": { + "maximum": 4294967295, + "type": "number", + "minimum": 0 + }, + "Expression": { + "minLength": 1, + "type": "string", + "maxLength": 2048 + }, + "TriggerMode": { + "$ref": "#/definitions/TriggerMode" + }, + "ConditionLanguageVersion": { + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "Expression" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Status": { + "$ref": "#/definitions/CampaignStatus" + }, + "Action": { + "$ref": "#/definitions/UpdateCampaignAction" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Compression": { + "$ref": "#/definitions/Compression" + }, + "Description": { + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$", + "type": "string", + "maxLength": 2048 + }, + "Priority": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "SignalsToCollect": { + "minItems": 0, + "maxItems": 1000, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/SignalInformation" + } + }, + "DataDestinationConfigs": { + "minItems": 1, + "maxItems": 1, + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/DataDestinationConfig" + } + }, + "StartTime": { + "format": "date-time", + "type": "string", + "default": "0" + }, + "Name": { + "minLength": 1, + "pattern": "^[a-zA-Z\\d\\-_:]+$", + "type": "string", + "maxLength": 100 + }, + "ExpiryTime": { + "format": "date-time", + "type": "string", + "default": "253402214400" + }, + "LastModificationTime": { + "type": "string", + "format": "date-time" + }, + "SpoolingMode": { + "$ref": "#/definitions/SpoolingMode" + }, + "SignalCatalogArn": { + "type": "string" + }, + "PostTriggerCollectionDuration": { + "maximum": 4294967295, + "type": "number", + "minimum": 0, + "default": 0 + }, + "DataExtraDimensions": { + "minItems": 0, + "maxItems": 5, + "insertionOrder": false, + "type": "array", + "items": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9_.]+$", + "type": "string", + "maxLength": 150 + } + }, + "DiagnosticsMode": { + "$ref": "#/definitions/DiagnosticsMode" + }, + "TargetArn": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "CollectionScheme": { + "$ref": "#/definitions/CollectionScheme" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 50, + "minItems": 0 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Status", + "/properties/CreationTime", + "/properties/LastModificationTime" + ], + "writeOnlyProperties": [ + "/properties/Action" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/TargetArn", + "/properties/SignalCatalogArn", + "/properties/PostTriggerCollectionDuration", + "/properties/DiagnosticsMode", + "/properties/SpoolingMode", + "/properties/CollectionScheme", + "/properties/Priority", + "/properties/Compression", + "/properties/StartTime", + "/properties/ExpiryTime" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Name" + ], + "required": [ + "Name", + "Action", + "CollectionScheme", + "SignalCatalogArn", + "TargetArn" + ], + "handlers": { + "read": { + "permissions": [ + "iotfleetwise:GetCampaign", + "iotfleetwise:ListTagsForResource" + ] + }, + "create": { + "permissions": [ + "iotfleetwise:CreateCampaign", + "iotfleetwise:GetCampaign", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource", + "iam:PassRole", + "timestream:DescribeEndpoints", + "timestream:DescribeTable" + ] + }, + "update": { + "permissions": [ + "iotfleetwise:GetCampaign", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:UpdateCampaign", + "iotfleetwise:TagResource", + "iotfleetwise:UntagResource" + ] + }, + "list": { + "permissions": [ + "iotfleetwise:ListCampaigns", + "iotfleetwise:GetCampaign" + ] + }, + "delete": { + "permissions": [ + "iotfleetwise:DeleteCampaign", + "iotfleetwise:GetCampaign" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotfleetwise/decodermanifest.json b/internal/aws/cfn/schemas/aws/iotfleetwise/decodermanifest.json new file mode 100644 index 00000000..2b2bd865 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotfleetwise/decodermanifest.json @@ -0,0 +1,491 @@ +{ + "typeName": "AWS::IoTFleetWise::DecoderManifest", + "description": "Definition of AWS::IoTFleetWise::DecoderManifest Resource Type", + "definitions": { + "CanInterface": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + "ProtocolName": { + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "ProtocolVersion": { + "type": "string", + "maxLength": 50, + "minLength": 1 + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "CanSignal": { + "type": "object", + "properties": { + "MessageId": { + "type": [ + "integer", + "string" + ] + }, + "IsBigEndian": { + "type": [ + "boolean", + "string" + ] + }, + "IsSigned": { + "type": [ + "boolean", + "string" + ] + }, + "StartBit": { + "type": [ + "integer", + "string" + ] + }, + "Offset": { + "type": [ + "number", + "string" + ] + }, + "Factor": { + "type": [ + "number", + "string" + ] + }, + "Length": { + "type": [ + "integer", + "string" + ] + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1 + } + }, + "required": [ + "Factor", + "IsBigEndian", + "IsSigned", + "Length", + "MessageId", + "Offset", + "StartBit" + ], + "additionalProperties": false + }, + "ManifestStatus": { + "type": "string", + "enum": [ + "ACTIVE", + "DRAFT" + ], + "default": "DRAFT" + }, + "CanNetworkInterface": { + "type": "object", + "properties": { + "InterfaceId": { + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "Type": { + "type": "string", + "enum": [ + "CAN_INTERFACE" + ] + }, + "CanInterface": { + "$ref": "#/definitions/CanInterface" + } + }, + "required": [ + "InterfaceId", + "Type", + "CanInterface" + ], + "additionalProperties": false + }, + "ObdNetworkInterface": { + "type": "object", + "properties": { + "InterfaceId": { + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "Type": { + "type": "string", + "enum": [ + "OBD_INTERFACE" + ] + }, + "ObdInterface": { + "$ref": "#/definitions/ObdInterface" + } + }, + "required": [ + "InterfaceId", + "Type", + "ObdInterface" + ], + "additionalProperties": false + }, + "ObdInterface": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + "RequestMessageId": { + "type": [ + "integer", + "string" + ] + }, + "ObdStandard": { + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "PidRequestIntervalSeconds": { + "type": [ + "integer", + "string" + ] + }, + "DtcRequestIntervalSeconds": { + "type": [ + "integer", + "string" + ] + }, + "UseExtendedIds": { + "type": [ + "boolean", + "string" + ] + }, + "HasTransmissionEcu": { + "type": [ + "boolean", + "string" + ] + } + }, + "required": [ + "Name", + "RequestMessageId" + ], + "additionalProperties": false + }, + "ObdSignal": { + "type": "object", + "properties": { + "PidResponseLength": { + "type": [ + "integer", + "string" + ] + }, + "ServiceMode": { + "type": [ + "integer", + "string" + ] + }, + "Pid": { + "type": [ + "integer", + "string" + ] + }, + "Scaling": { + "type": [ + "number", + "string" + ] + }, + "Offset": { + "type": [ + "number", + "string" + ] + }, + "StartByte": { + "type": [ + "integer", + "string" + ] + }, + "ByteLength": { + "type": [ + "integer", + "string" + ] + }, + "BitRightShift": { + "type": [ + "integer", + "string" + ] + }, + "BitMaskLength": { + "type": [ + "integer", + "string" + ] + } + }, + "required": [ + "ByteLength", + "Offset", + "Pid", + "PidResponseLength", + "Scaling", + "ServiceMode", + "StartByte" + ], + "additionalProperties": false + }, + "CanSignalDecoder": { + "type": "object", + "properties": { + "FullyQualifiedName": { + "type": "string", + "maxLength": 150, + "minLength": 1 + }, + "Type": { + "type": "string", + "enum": [ + "CAN_SIGNAL" + ] + }, + "InterfaceId": { + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "CanSignal": { + "$ref": "#/definitions/CanSignal" + } + }, + "required": [ + "FullyQualifiedName", + "InterfaceId", + "Type", + "CanSignal" + ], + "additionalProperties": false + }, + "ObdSignalDecoder": { + "type": "object", + "properties": { + "FullyQualifiedName": { + "type": "string", + "maxLength": 150, + "minLength": 1 + }, + "Type": { + "type": "string", + "enum": [ + "OBD_SIGNAL" + ] + }, + "InterfaceId": { + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "ObdSignal": { + "$ref": "#/definitions/ObdSignal" + } + }, + "required": [ + "FullyQualifiedName", + "InterfaceId", + "Type", + "ObdSignal" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + }, + "LastModificationTime": { + "type": "string", + "format": "date-time" + }, + "ModelManifestArn": { + "type": "string" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[a-zA-Z\\d\\-_:]+$" + }, + "NetworkInterfaces": { + "insertionOrder": false, + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/definitions/CanNetworkInterface" + }, + { + "$ref": "#/definitions/ObdNetworkInterface" + } + ] + }, + "maxItems": 500, + "minItems": 1 + }, + "SignalDecoders": { + "insertionOrder": false, + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/definitions/CanSignalDecoder" + }, + { + "$ref": "#/definitions/ObdSignalDecoder" + } + ] + }, + "maxItems": 500, + "minItems": 1 + }, + "Status": { + "$ref": "#/definitions/ManifestStatus" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50, + "minItems": 0, + "insertionOrder": false, + "uniqueItems": true + } + }, + "required": [ + "Name", + "ModelManifestArn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/LastModificationTime" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/ModelManifestArn" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "iotfleetwise:CreateDecoderManifest", + "iotfleetwise:GetDecoderManifest", + "iotfleetwise:UpdateDecoderManifest", + "iotfleetwise:ListDecoderManifestSignals", + "iotfleetwise:ListDecoderManifestNetworkInterfaces", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource" + ] + }, + "read": { + "permissions": [ + "iotfleetwise:GetDecoderManifest", + "iotfleetwise:ListDecoderManifestSignals", + "iotfleetwise:ListDecoderManifestNetworkInterfaces", + "iotfleetwise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotfleetwise:UpdateDecoderManifest", + "iotfleetwise:GetDecoderManifest", + "iotfleetwise:ListDecoderManifestSignals", + "iotfleetwise:ListDecoderManifestNetworkInterfaces", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource", + "iotfleetwise:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotfleetwise:DeleteDecoderManifest", + "iotfleetwise:GetDecoderManifest" + ] + }, + "list": { + "permissions": [ + "iotfleetwise:ListDecoderManifests" + ] + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/iotfleetwise/fleet.json b/internal/aws/cfn/schemas/aws/iotfleetwise/fleet.json new file mode 100644 index 00000000..492af20c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotfleetwise/fleet.json @@ -0,0 +1,125 @@ +{ + "typeName": "AWS::IoTFleetWise::Fleet", + "description": "Definition of AWS::IoTFleetWise::Fleet Resource Type", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + }, + "Id": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[a-zA-Z0-9:_-]+$" + }, + "LastModificationTime": { + "type": "string", + "format": "date-time" + }, + "SignalCatalogArn": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 50, + "minItems": 0 + } + }, + "required": [ + "Id", + "SignalCatalogArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/LastModificationTime" + ], + "createOnlyProperties": [ + "/properties/Id", + "/properties/SignalCatalogArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotfleetwise:GetFleet", + "iotfleetwise:CreateFleet", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:ListVehiclesInFleet", + "iotfleetwise:TagResource" + ] + }, + "read": { + "permissions": [ + "iotfleetwise:GetFleet", + "iotfleetwise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotfleetwise:GetFleet", + "iotfleetwise:UpdateFleet", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource", + "iotfleetwise:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotfleetwise:GetFleet", + "iotfleetwise:DeleteFleet" + ] + }, + "list": { + "permissions": [ + "iotfleetwise:ListFleets" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/iotfleetwise/modelmanifest.json b/internal/aws/cfn/schemas/aws/iotfleetwise/modelmanifest.json new file mode 100644 index 00000000..1a9fa612 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotfleetwise/modelmanifest.json @@ -0,0 +1,147 @@ +{ + "typeName": "AWS::IoTFleetWise::ModelManifest", + "description": "Definition of AWS::IoTFleetWise::ModelManifest Resource Type", + "definitions": { + "ManifestStatus": { + "type": "string", + "enum": [ + "ACTIVE", + "DRAFT" + ], + "default": "DRAFT" + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + }, + "LastModificationTime": { + "type": "string", + "format": "date-time" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[a-zA-Z\\d\\-_:]+$" + }, + "Nodes": { + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "type": "array", + "items": { + "type": "string" + } + }, + "SignalCatalogArn": { + "type": "string" + }, + "Status": { + "$ref": "#/definitions/ManifestStatus" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 50, + "minItems": 0 + } + }, + "required": [ + "SignalCatalogArn", + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/LastModificationTime" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "iotfleetwise:CreateModelManifest", + "iotfleetwise:GetModelManifest", + "iotfleetwise:UpdateModelManifest", + "iotfleetwise:ListModelManifestNodes", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource" + ] + }, + "read": { + "permissions": [ + "iotfleetwise:GetModelManifest", + "iotfleetwise:ListModelManifestNodes", + "iotfleetwise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotfleetwise:UpdateModelManifest", + "iotfleetwise:GetModelManifest", + "iotfleetwise:ListModelManifestNodes", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource", + "iotfleetwise:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotfleetwise:DeleteModelManifest", + "iotfleetwise:GetModelManifest" + ] + }, + "list": { + "permissions": [ + "iotfleetwise:ListModelManifests" + ] + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/iotfleetwise/signalcatalog.json b/internal/aws/cfn/schemas/aws/iotfleetwise/signalcatalog.json new file mode 100644 index 00000000..488cccf0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotfleetwise/signalcatalog.json @@ -0,0 +1,371 @@ +{ + "typeName": "AWS::IoTFleetWise::SignalCatalog", + "description": "Definition of AWS::IoTFleetWise::SignalCatalog Resource Type", + "definitions": { + "Actuator": { + "type": "object", + "properties": { + "FullyQualifiedName": { + "type": "string" + }, + "DataType": { + "$ref": "#/definitions/NodeDataType" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + }, + "Unit": { + "type": "string" + }, + "AllowedValues": { + "$ref": "#/definitions/AllowedValues" + }, + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + }, + "AssignedValue": { + "type": "string" + } + }, + "required": [ + "DataType", + "FullyQualifiedName" + ], + "additionalProperties": false + }, + "AllowedValues": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "minItems": 1 + }, + "Attribute": { + "type": "object", + "properties": { + "FullyQualifiedName": { + "type": "string" + }, + "DataType": { + "$ref": "#/definitions/NodeDataType" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + }, + "Unit": { + "type": "string" + }, + "AllowedValues": { + "$ref": "#/definitions/AllowedValues" + }, + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + }, + "AssignedValue": { + "type": "string" + }, + "DefaultValue": { + "type": "string" + } + }, + "required": [ + "DataType", + "FullyQualifiedName" + ], + "additionalProperties": false + }, + "Branch": { + "type": "object", + "properties": { + "FullyQualifiedName": { + "type": "string" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + } + }, + "required": [ + "FullyQualifiedName" + ], + "additionalProperties": false + }, + "Node": { + "oneOf": [ + { + "type": "object", + "title": "Branch", + "properties": { + "Branch": { + "$ref": "#/definitions/Branch" + } + }, + "additionalProperties": false + }, + { + "type": "object", + "title": "Sensor", + "properties": { + "Sensor": { + "$ref": "#/definitions/Sensor" + } + }, + "additionalProperties": false + }, + { + "type": "object", + "title": "Actuator", + "properties": { + "Actuator": { + "$ref": "#/definitions/Actuator" + } + }, + "additionalProperties": false + }, + { + "type": "object", + "title": "Attribute", + "properties": { + "Attribute": { + "$ref": "#/definitions/Attribute" + } + }, + "additionalProperties": false + } + ] + }, + "NodeCounts": { + "type": "object", + "properties": { + "TotalNodes": { + "type": "number" + }, + "TotalBranches": { + "type": "number" + }, + "TotalSensors": { + "type": "number" + }, + "TotalAttributes": { + "type": "number" + }, + "TotalActuators": { + "type": "number" + } + }, + "additionalProperties": false + }, + "NodeDataType": { + "type": "string", + "enum": [ + "INT8", + "UINT8", + "INT16", + "UINT16", + "INT32", + "UINT32", + "INT64", + "UINT64", + "BOOLEAN", + "FLOAT", + "DOUBLE", + "STRING", + "UNIX_TIMESTAMP", + "INT8_ARRAY", + "UINT8_ARRAY", + "INT16_ARRAY", + "UINT16_ARRAY", + "INT32_ARRAY", + "UINT32_ARRAY", + "INT64_ARRAY", + "UINT64_ARRAY", + "BOOLEAN_ARRAY", + "FLOAT_ARRAY", + "DOUBLE_ARRAY", + "STRING_ARRAY", + "UNIX_TIMESTAMP_ARRAY", + "UNKNOWN" + ] + }, + "Sensor": { + "type": "object", + "properties": { + "FullyQualifiedName": { + "type": "string" + }, + "DataType": { + "$ref": "#/definitions/NodeDataType" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + }, + "Unit": { + "type": "string" + }, + "AllowedValues": { + "$ref": "#/definitions/AllowedValues" + }, + "Min": { + "type": "number" + }, + "Max": { + "type": "number" + } + }, + "required": [ + "DataType", + "FullyQualifiedName" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "CreationTime": { + "format": "date-time", + "type": "string" + }, + "Description": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[^\\u0000-\\u001F\\u007F]+$" + }, + "LastModificationTime": { + "format": "date-time", + "type": "string" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[a-zA-Z\\d\\-_:]+$" + }, + "NodeCounts": { + "$ref": "#/definitions/NodeCounts" + }, + "Nodes": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Node" + }, + "maxItems": 500, + "minItems": 1 + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 50, + "minItems": 0 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/LastModificationTime", + "/properties/NodeCounts/TotalNodes", + "/properties/NodeCounts/TotalBranches", + "/properties/NodeCounts/TotalSensors", + "/properties/NodeCounts/TotalAttributes", + "/properties/NodeCounts/TotalActuators" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "iotfleetwise:GetSignalCatalog", + "iotfleetwise:CreateSignalCatalog", + "iotfleetwise:ListSignalCatalogNodes", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource" + ] + }, + "read": { + "permissions": [ + "iotfleetwise:GetSignalCatalog", + "iotfleetwise:ListSignalCatalogNodes", + "iotfleetwise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotfleetwise:GetSignalCatalog", + "iotfleetwise:UpdateSignalCatalog", + "iotfleetwise:ListSignalCatalogNodes", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource", + "iotfleetwise:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotfleetwise:GetSignalCatalog", + "iotfleetwise:DeleteSignalCatalog" + ] + }, + "list": { + "permissions": [ + "iotfleetwise:ListSignalCatalogs" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/iotfleetwise/vehicle.json b/internal/aws/cfn/schemas/aws/iotfleetwise/vehicle.json new file mode 100644 index 00000000..0297ce89 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotfleetwise/vehicle.json @@ -0,0 +1,150 @@ +{ + "typeName": "AWS::IoTFleetWise::Vehicle", + "description": "Definition of AWS::IoTFleetWise::Vehicle Resource Type", + "definitions": { + "VehicleAssociationBehavior": { + "type": "string", + "enum": [ + "CreateIotThing", + "ValidateIotThingExists" + ] + }, + "attributesMap": { + "type": "object", + "patternProperties": { + "^[a-zA-Z0-9_.-]+$": { + "type": "string" + } + }, + "minProperties": 1, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "AssociationBehavior": { + "$ref": "#/definitions/VehicleAssociationBehavior" + }, + "Attributes": { + "$ref": "#/definitions/attributesMap" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "DecoderManifestArn": { + "type": "string" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[a-zA-Z\\d\\-_:]+$" + }, + "LastModificationTime": { + "type": "string", + "format": "date-time" + }, + "ModelManifestArn": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": false, + "uniqueItems": true, + "maxItems": 50, + "minItems": 0 + } + }, + "required": [ + "Name", + "DecoderManifestArn", + "ModelManifestArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/LastModificationTime" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/AssociationBehavior" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "iotfleetwise:GetVehicle", + "iotfleetwise:CreateVehicle", + "iot:CreateThing", + "iot:DescribeThing", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:ListVehicles", + "iotfleetwise:TagResource" + ] + }, + "read": { + "permissions": [ + "iotfleetwise:GetVehicle", + "iotfleetwise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotfleetwise:GetVehicle", + "iotfleetwise:UpdateVehicle", + "iotfleetwise:ListTagsForResource", + "iotfleetwise:TagResource", + "iotfleetwise:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotfleetwise:GetVehicle", + "iotfleetwise:DeleteVehicle" + ] + }, + "list": { + "permissions": [ + "iotfleetwise:ListVehicles" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/iotsitewise/accesspolicy.json b/internal/aws/cfn/schemas/aws/iotsitewise/accesspolicy.json new file mode 100644 index 00000000..823d577e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotsitewise/accesspolicy.json @@ -0,0 +1,156 @@ +{ + "typeName": "AWS::IoTSiteWise::AccessPolicy", + "description": "Resource schema for AWS::IoTSiteWise::AccessPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git", + "definitions": { + "User": { + "description": "Contains information for a user identity in an access policy.", + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "description": "The AWS SSO ID of the user.", + "type": "string" + } + } + }, + "IamUser": { + "description": "Contains information for an IAM user identity in an access policy.", + "type": "object", + "additionalProperties": false, + "properties": { + "arn": { + "description": "The ARN of the IAM user.", + "type": "string" + } + } + }, + "IamRole": { + "description": "Contains information for an IAM role identity in an access policy.", + "type": "object", + "additionalProperties": false, + "properties": { + "arn": { + "description": "The ARN of the IAM role.", + "type": "string" + } + } + }, + "Portal": { + "description": "A portal resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "description": "The ID of the portal.", + "type": "string" + } + } + }, + "Project": { + "description": "A project resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "description": "The ID of the project.", + "type": "string" + } + } + }, + "AccessPolicyIdentity": { + "description": "The identity for this access policy. Choose either an SSO user or group or an IAM user or role.", + "type": "object", + "additionalProperties": false, + "properties": { + "User": { + "$ref": "#/definitions/User" + }, + "IamUser": { + "$ref": "#/definitions/IamUser" + }, + "IamRole": { + "$ref": "#/definitions/IamRole" + } + } + }, + "AccessPolicyResource": { + "description": "The AWS IoT SiteWise Monitor resource for this access policy. Choose either portal or project but not both.", + "type": "object", + "additionalProperties": false, + "properties": { + "Portal": { + "$ref": "#/definitions/Portal" + }, + "Project": { + "$ref": "#/definitions/Project" + } + } + } + }, + "properties": { + "AccessPolicyId": { + "description": "The ID of the access policy.", + "type": "string" + }, + "AccessPolicyArn": { + "description": "The ARN of the access policy.", + "type": "string" + }, + "AccessPolicyIdentity": { + "description": "The identity for this access policy. Choose either a user or a group but not both.", + "$ref": "#/definitions/AccessPolicyIdentity" + }, + "AccessPolicyPermission": { + "description": "The permission level for this access policy. Valid values are ADMINISTRATOR or VIEWER.", + "type": "string" + }, + "AccessPolicyResource": { + "description": "The AWS IoT SiteWise Monitor resource for this access policy. Choose either portal or project but not both.", + "$ref": "#/definitions/AccessPolicyResource" + } + }, + "additionalProperties": false, + "taggable": false, + "required": [ + "AccessPolicyIdentity", + "AccessPolicyPermission", + "AccessPolicyResource" + ], + "readOnlyProperties": [ + "/properties/AccessPolicyArn", + "/properties/AccessPolicyId" + ], + "primaryIdentifier": [ + "/properties/AccessPolicyId" + ], + "handlers": { + "create": { + "permissions": [ + "iotsitewise:CreateAccessPolicy" + ] + }, + "read": { + "permissions": [ + "iotsitewise:DescribeAccessPolicy" + ] + }, + "update": { + "permissions": [ + "iotsitewise:DescribeAccessPolicy", + "iotsitewise:UpdateAccessPolicy" + ] + }, + "delete": { + "permissions": [ + "iotsitewise:DescribeAccessPolicy", + "iotsitewise:DeleteAccessPolicy" + ] + }, + "list": { + "permissions": [ + "iotsitewise:ListAccessPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotsitewise/asset.json b/internal/aws/cfn/schemas/aws/iotsitewise/asset.json new file mode 100644 index 00000000..2933d1a9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotsitewise/asset.json @@ -0,0 +1,237 @@ +{ + "typeName": "AWS::IoTSiteWise::Asset", + "description": "Resource schema for AWS::IoTSiteWise::Asset", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git", + "definitions": { + "AssetProperty": { + "description": "The asset property's definition, alias, unit, and notification state.", + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "description": "Customer provided actual UUID for property", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "ExternalId": { + "description": "String-friendly customer provided external ID", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "LogicalId": { + "description": "Customer provided ID for property.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[^\\u0000-\\u001F\\u007F]+" + }, + "Alias": { + "description": "The property alias that identifies the property.", + "type": "string" + }, + "NotificationState": { + "description": "The MQTT notification state (ENABLED or DISABLED) for this asset property.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "Unit": { + "description": "The unit of measure (such as Newtons or RPM) of the asset property. If you don't specify a value for this parameter, the service uses the value of the assetModelProperty in the asset model.", + "type": "string" + } + } + }, + "AssetHierarchy": { + "description": "A hierarchy specifies allowed parent/child asset relationships.", + "type": "object", + "additionalProperties": false, + "required": [ + "ChildAssetId" + ], + "properties": { + "Id": { + "description": "Customer provided actual UUID for property", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "ExternalId": { + "description": "String-friendly customer provided external ID", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "LogicalId": { + "description": "The LogicalID of a hierarchy in the parent asset's model.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[^\\u0000-\\u001F\\u007F]+" + }, + "ChildAssetId": { + "description": "The ID of the child asset to be associated.", + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "AssetId": { + "description": "The ID of the asset", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "AssetExternalId": { + "description": "The External ID of the asset", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "AssetModelId": { + "description": "The ID of the asset model from which to create the asset.", + "type": "string" + }, + "AssetArn": { + "description": "The ARN of the asset", + "type": "string" + }, + "AssetName": { + "description": "A unique, friendly name for the asset.", + "type": "string" + }, + "AssetDescription": { + "description": "A description for the asset", + "type": "string" + }, + "AssetProperties": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AssetProperty" + } + }, + "AssetHierarchies": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AssetHierarchy" + } + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the asset.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "AssetName", + "AssetModelId" + ], + "readOnlyProperties": [ + "/properties/AssetArn", + "/properties/AssetId", + "/properties/AssetProperties/*/Id", + "/properties/AssetHierarchies/*/Id" + ], + "primaryIdentifier": [ + "/properties/AssetId" + ], + "handlers": { + "create": { + "permissions": [ + "iotsitewise:AssociateAssets", + "iotsitewise:CreateAsset", + "iotsitewise:DescribeAsset", + "iotsitewise:DescribeAssetModel", + "iotsitewise:ListAssociatedAssets", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetProperties", + "iotsitewise:ListAssetModelCompositeModels", + "iotsitewise:UpdateAssetProperty" + ] + }, + "read": { + "permissions": [ + "iotsitewise:DescribeAsset", + "iotsitewise:DescribeAssetModel", + "iotsitewise:ListAssociatedAssets", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetModelCompositeModels", + "iotsitewise:ListAssetProperties", + "iotsitewise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotsitewise:AssociateAssets", + "iotsitewise:DescribeAsset", + "iotsitewise:DescribeAssetModel", + "iotsitewise:DisassociateAssets", + "iotsitewise:ListAssociatedAssets", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iotsitewise:UpdateAsset", + "iotsitewise:UpdateAssetProperty", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetProperties", + "iotsitewise:ListAssetModelCompositeModels", + "iotsitewise:UntagResource" + ] + }, + "delete": { + "permissions": [ + "iotsitewise:DeleteAsset", + "iotsitewise:DescribeAsset", + "iotsitewise:DescribeAssetModel", + "iotsitewise:DisassociateAssets", + "iotsitewise:ListAssociatedAssets", + "iotsitewise:ListAssetProperties", + "iotsitewise:ListTagsForResource", + "iotsitewise:ListAssetModelCompositeModels", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetProperties" + ] + }, + "list": { + "permissions": [ + "iotsitewise:ListAssetModels", + "iotsitewise:ListAssets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotsitewise/assetmodel.json b/internal/aws/cfn/schemas/aws/iotsitewise/assetmodel.json new file mode 100644 index 00000000..f5452254 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotsitewise/assetmodel.json @@ -0,0 +1,566 @@ +{ + "typeName": "AWS::IoTSiteWise::AssetModel", + "description": "Resource schema for AWS::IoTSiteWise::AssetModel", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git", + "definitions": { + "AssetModelCompositeModel": { + "description": "Contains a composite model definition in an asset model. This composite model definition is applied to all assets created from the asset model.", + "type": "object", + "additionalProperties": false, + "required": [ + "Name", + "Type" + ], + "properties": { + "Id": { + "description": "The Actual ID of the composite model", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "ExternalId": { + "description": "The External ID of the composite model", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "ComposedAssetModelId": { + "description": "The component model ID for which the composite model is composed of", + "type": "string" + }, + "ParentAssetModelCompositeModelExternalId": { + "description": "The parent composite model External ID", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "Path": { + "description": "The path of the composite model. This is only for derived composite models", + "type": "array", + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "Description": { + "description": "A description for the asset composite model.", + "type": "string" + }, + "Name": { + "description": "A unique, friendly name for the asset composite model.", + "type": "string" + }, + "Type": { + "description": "The type of the composite model. For alarm composite models, this type is AWS/ALARM", + "type": "string" + }, + "CompositeModelProperties": { + "description": "The property definitions of the asset model. You can specify up to 200 properties per asset model.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AssetModelProperty" + } + } + } + }, + "PropertyPathDefinition": { + "description": "The definition for property path which is used to reference properties in transforms/metrics", + "type": "object", + "additionalProperties": false, + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "The name of the property", + "type": "string" + } + } + }, + "AssetModelProperty": { + "description": "Contains information about an asset model property.", + "type": "object", + "additionalProperties": false, + "required": [ + "Name", + "DataType", + "Type" + ], + "properties": { + "LogicalId": { + "description": "Customer provided Logical ID for property.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[^\\u0000-\\u001F\\u007F]+" + }, + "Id": { + "description": "The ID of the Asset Model Property", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "ExternalId": { + "description": "The External ID of the Asset Model Property", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "Name": { + "description": "The name of the asset model property.", + "type": "string" + }, + "DataType": { + "description": "The data type of the asset model property.", + "$ref": "#/definitions/DataType" + }, + "DataTypeSpec": { + "description": "The data type of the structure for this property.", + "$ref": "#/definitions/DataTypeSpec" + }, + "Unit": { + "description": "The unit of the asset model property, such as Newtons or RPM.", + "type": "string" + }, + "Type": { + "description": "The property type", + "$ref": "#/definitions/PropertyType" + } + } + }, + "DataType": { + "type": "string", + "enum": [ + "STRING", + "INTEGER", + "DOUBLE", + "BOOLEAN", + "STRUCT" + ] + }, + "DataTypeSpec": { + "type": "string", + "enum": [ + "AWS/ALARM_STATE" + ] + }, + "PropertyType": { + "description": "Contains a property type, which can be one of attribute, measurement, metric, or transform.", + "type": "object", + "additionalProperties": false, + "required": [ + "TypeName" + ], + "properties": { + "TypeName": { + "$ref": "#/definitions/TypeName" + }, + "Attribute": { + "$ref": "#/definitions/Attribute" + }, + "Transform": { + "$ref": "#/definitions/Transform" + }, + "Metric": { + "$ref": "#/definitions/Metric" + } + } + }, + "TypeName": { + "type": "string", + "enum": [ + "Measurement", + "Attribute", + "Transform", + "Metric" + ] + }, + "Attribute": { + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultValue": { + "type": "string" + } + } + }, + "Transform": { + "type": "object", + "additionalProperties": false, + "properties": { + "Expression": { + "description": "The mathematical expression that defines the transformation function. You can specify up to 10 functions per expression.", + "type": "string" + }, + "Variables": { + "description": "The list of variables used in the expression.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ExpressionVariable" + } + } + }, + "required": [ + "Expression", + "Variables" + ] + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "Expression": { + "description": "The mathematical expression that defines the metric aggregation function. You can specify up to 10 functions per expression.", + "type": "string" + }, + "Variables": { + "description": "The list of variables used in the expression.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/ExpressionVariable" + } + }, + "Window": { + "description": "The window (time interval) over which AWS IoT SiteWise computes the metric's aggregation expression", + "$ref": "#/definitions/MetricWindow" + } + }, + "required": [ + "Expression", + "Variables", + "Window" + ] + }, + "MetricWindow": { + "description": "Contains a time interval window used for data aggregate computations (for example, average, sum, count, and so on).", + "type": "object", + "additionalProperties": false, + "properties": { + "Tumbling": { + "$ref": "#/definitions/TumblingWindow" + } + } + }, + "TumblingWindow": { + "description": "Contains a tumbling window, which is a repeating fixed-sized, non-overlapping, and contiguous time interval. This window is used in metric and aggregation computations.", + "type": "object", + "additionalProperties": false, + "properties": { + "Interval": { + "$ref": "#/definitions/Interval" + }, + "Offset": { + "$ref": "#/definitions/Offset" + } + }, + "required": [ + "Interval" + ] + }, + "Interval": { + "description": "The time interval for the tumbling window.", + "type": "string" + }, + "Offset": { + "description": "The shift or reference point on timeline for the contiguous time intervals.", + "type": "string" + }, + "ExpressionVariable": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "The friendly name of the variable to be used in the expression.", + "type": "string" + }, + "Value": { + "description": "The variable that identifies an asset property from which to use values.", + "$ref": "#/definitions/VariableValue" + } + }, + "required": [ + "Name", + "Value" + ] + }, + "VariableValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "PropertyLogicalId": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[^\\u0000-\\u001F\\u007F]+" + }, + "PropertyId": { + "description": "The ID of the property that is trying to be referenced", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "PropertyExternalId": { + "description": "The External ID of the property that is trying to be referenced", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "PropertyPath": { + "description": "The path of the property that is trying to be referenced", + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/PropertyPathDefinition" + } + }, + "HierarchyLogicalId": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[^\\u0000-\\u001F\\u007F]+" + }, + "HierarchyId": { + "description": "The ID of the hierarchy that is trying to be referenced", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "HierarchyExternalId": { + "description": "The External ID of the hierarchy that is trying to be referenced", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + } + } + }, + "AssetModelHierarchy": { + "description": "Contains information about an asset model hierarchy.", + "type": "object", + "additionalProperties": false, + "required": [ + "Name", + "ChildAssetModelId" + ], + "properties": { + "Id": { + "description": "Customer provided actual ID for hierarchy", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "ExternalId": { + "description": "Customer provided external ID for hierarchy", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "LogicalId": { + "description": "Customer provided logical ID for hierarchy.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[^\\u0000-\\u001F\\u007F]+" + }, + "Name": { + "description": "The name of the asset model hierarchy.", + "type": "string" + }, + "ChildAssetModelId": { + "description": "The ID of the asset model. All assets in this hierarchy must be instances of the child AssetModelId asset model.", + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "AssetModelId": { + "description": "The ID of the asset model.", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "AssetModelType": { + "description": "The type of the asset model (ASSET_MODEL OR COMPONENT_MODEL)", + "type": "string" + }, + "AssetModelExternalId": { + "description": "The external ID of the asset model.", + "type": "string", + "minLength": 2, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+" + }, + "AssetModelArn": { + "description": "The ARN of the asset model, which has the following format.", + "type": "string" + }, + "AssetModelName": { + "description": "A unique, friendly name for the asset model.", + "type": "string" + }, + "AssetModelDescription": { + "description": "A description for the asset model.", + "type": "string" + }, + "AssetModelProperties": { + "description": "The property definitions of the asset model. You can specify up to 200 properties per asset model.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AssetModelProperty" + } + }, + "AssetModelCompositeModels": { + "description": "The composite asset models that are part of this asset model. Composite asset models are asset models that contain specific properties.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AssetModelCompositeModel" + } + }, + "AssetModelHierarchies": { + "description": "The hierarchy definitions of the asset model. Each hierarchy specifies an asset model whose assets can be children of any other assets created from this asset model. You can specify up to 10 hierarchies per asset model.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AssetModelHierarchy" + } + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the asset model.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "AssetModelName" + ], + "writeOnlyProperties": [ + "/properties/AssetModelProperties/*/DataTypeSpec", + "/properties/AssetModelProperties/*/Type/Transform/Variables/*/Value/HierarchyLogicalId", + "/properties/AssetModelProperties/*/Type/Transform/Variables/*/Value/HierarchyId", + "/properties/AssetModelProperties/*/Type/Metric/Variables/*/Value/HierarchyId", + "/properties/AssetModelProperties/*/Type/Transform/Variables/*/Value/HierarchyExternalId", + "/properties/AssetModelProperties/*/Type/Metric/Variables/*/Value/PropertyPath/*/Name", + "/properties/AssetModelProperties/*/Type/Transform/Variables/*/Value/PropertyPath/*/Name", + "/properties/AssetModelProperties/*/Type/Transform/Variables/*/Value/HierarchyExternalId", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Transform/Variables/*/Value/HierarchyId", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Metric/Variables/*/Value/HierarchyId", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Transform/Variables/*/Value/HierarchyLogicalId", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Transform/Variables/*/Value/HierarchyExternalId", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Transform/Variables/*/Value/PropertyPath/*/Name", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Metric/Variables/*/Value/PropertyPath/*/Name", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/DataTypeSpec" + ], + "readOnlyProperties": [ + "/properties/AssetModelArn", + "/properties/AssetModelId", + "/properties/AssetModelProperties/*/Id", + "/properties/AssetModelProperties/*/Type/Transform/Variables/*/Value/PropertyId", + "/properties/AssetModelProperties/*/Type/Metric/Variables/*/Value/PropertyId", + "/properties/AssetModelHierarchies/*/Id", + "/properties/AssetModelCompositeModels/*/Id", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Id", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Transform/Variables/*/Value/PropertyId", + "/properties/AssetModelCompositeModels/*/CompositeModelProperties/*/Type/Metric/Variables/*/Value/PropertyId" + ], + "createOnlyProperties": [ + "/properties/AssetModelType" + ], + "primaryIdentifier": [ + "/properties/AssetModelId" + ], + "handlers": { + "create": { + "permissions": [ + "iotsitewise:CreateAssetModel", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iotsitewise:DescribeAssetModel", + "iotsitewise:UpdateAssetModel", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetModelCompositeModels", + "iotsitewise:UpdateAssetModelCompositeModel", + "iotsitewise:DescribeAssetModelCompositeModel", + "iotsitewise:CreateAssetModelCompositeModel" + ] + }, + "read": { + "permissions": [ + "iotsitewise:DescribeAssetModel", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:DescribeAssetModelCompositeModel", + "iotsitewise:ListAssetModelCompositeModels", + "iotsitewise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotsitewise:DescribeAssetModel", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iotsitewise:UntagResource", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetModelCompositeModels", + "iotsitewise:CreateAssetModelCompositeModel", + "iotsitewise:UpdateAssetModelCompositeModel", + "iotsitewise:DeleteAssetModelCompositeModel", + "iotsitewise:DescribeAssetModelCompositeModel", + "iotsitewise:UpdateAssetModel" + ] + }, + "delete": { + "permissions": [ + "iotsitewise:DescribeAssetModel", + "iotsitewise:DeleteAssetModel", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetModelCompositeModels" + ] + }, + "list": { + "permissions": [ + "iotsitewise:DescribeAssetModel", + "iotsitewise:ListAssetModels", + "iotsitewise:ListTagsForResource", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetModelCompositeModels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotsitewise/dashboard.json b/internal/aws/cfn/schemas/aws/iotsitewise/dashboard.json new file mode 100644 index 00000000..f4e08e6c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotsitewise/dashboard.json @@ -0,0 +1,125 @@ +{ + "typeName": "AWS::IoTSiteWise::Dashboard", + "description": "Resource schema for AWS::IoTSiteWise::Dashboard", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotsitewise.git", + "definitions": { + "Tag": { + "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "ProjectId": { + "description": "The ID of the project in which to create the dashboard.", + "type": "string" + }, + "DashboardId": { + "description": "The ID of the dashboard.", + "type": "string" + }, + "DashboardName": { + "description": "A friendly name for the dashboard.", + "type": "string" + }, + "DashboardDescription": { + "description": "A description for the dashboard.", + "type": "string" + }, + "DashboardDefinition": { + "description": "The dashboard definition specified in a JSON literal.", + "type": "string" + }, + "DashboardArn": { + "description": "The ARN of the dashboard.", + "type": "string" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the dashboard.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "DashboardDefinition", + "DashboardDescription", + "DashboardName" + ], + "readOnlyProperties": [ + "/properties/DashboardArn", + "/properties/DashboardId" + ], + "createOnlyProperties": [ + "/properties/ProjectId" + ], + "primaryIdentifier": [ + "/properties/DashboardId" + ], + "additionalIdentifiers": [ + [ + "/properties/DashboardArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "iotsitewise:CreateDashboard", + "iotsitewise:DescribeDashboard", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iotsitewise:DescribeAsset", + "iotsitewise:DescribeAssetModel", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetModelCompositeModels" + ] + }, + "read": { + "permissions": [ + "iotsitewise:DescribeDashboard", + "iotsitewise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotsitewise:DescribeDashboard", + "iotsitewise:UpdateDashboard", + "iotsitewise:TagResource", + "iotsitewise:UntagResource", + "iotsitewise:ListTagsForResource", + "iotsitewise:DescribeAsset", + "iotsitewise:DescribeAssetModel", + "iotsitewise:ListAssetModelProperties", + "iotsitewise:ListAssetModelCompositeModels" + ] + }, + "delete": { + "permissions": [ + "iotsitewise:DescribeDashboard", + "iotsitewise:DeleteDashboard" + ] + }, + "list": { + "permissions": [ + "iotsitewise:ListDashboards" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotsitewise/gateway.json b/internal/aws/cfn/schemas/aws/iotsitewise/gateway.json new file mode 100644 index 00000000..322d8458 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotsitewise/gateway.json @@ -0,0 +1,196 @@ +{ + "typeName": "AWS::IoTSiteWise::Gateway", + "description": "Resource schema for AWS::IoTSiteWise::Gateway", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git", + "definitions": { + "GatewayPlatform": { + "description": "Contains a gateway's platform information.", + "type": "object", + "additionalProperties": false, + "properties": { + "Greengrass": { + "description": "A gateway that runs on AWS IoT Greengrass V1.", + "$ref": "#/definitions/Greengrass" + }, + "GreengrassV2": { + "description": "A gateway that runs on AWS IoT Greengrass V2.", + "$ref": "#/definitions/GreengrassV2" + } + }, + "oneOf": [ + { + "required": [ + "Greengrass" + ] + }, + { + "required": [ + "GreengrassV2" + ] + } + ] + }, + "Greengrass": { + "description": "Contains the ARN of AWS IoT Greengrass Group V1 that the gateway runs on.", + "type": "object", + "additionalProperties": false, + "properties": { + "GroupArn": { + "description": "The ARN of the Greengrass group.", + "type": "string" + } + }, + "required": [ + "GroupArn" + ] + }, + "GreengrassV2": { + "description": "Contains the CoreDeviceThingName of AWS IoT Greengrass Group V2 that the gateway runs on.", + "type": "object", + "additionalProperties": false, + "properties": { + "CoreDeviceThingName": { + "description": "The name of the CoreDevice in GreenGrass V2.", + "type": "string" + } + }, + "required": [ + "CoreDeviceThingName" + ] + }, + "Tag": { + "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "CapabilityNamespace": { + "description": "The namespace of the capability configuration.", + "type": "string" + }, + "CapabilityConfiguration": { + "description": "The JSON document that defines the gateway capability's configuration.", + "type": "string" + }, + "GatewayCapabilitySummary": { + "description": "Contains a summary of a gateway capability configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "CapabilityNamespace": { + "$ref": "#/definitions/CapabilityNamespace" + }, + "CapabilityConfiguration": { + "$ref": "#/definitions/CapabilityConfiguration" + } + }, + "required": [ + "CapabilityNamespace" + ] + } + }, + "properties": { + "GatewayName": { + "description": "A unique, friendly name for the gateway.", + "type": "string" + }, + "GatewayPlatform": { + "description": "The gateway's platform. You can only specify one platform in a gateway.", + "$ref": "#/definitions/GatewayPlatform" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the gateway.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "GatewayId": { + "description": "The ID of the gateway device.", + "type": "string" + }, + "GatewayCapabilitySummaries": { + "description": "A list of gateway capability summaries that each contain a namespace and status.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/GatewayCapabilitySummary" + } + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "GatewayName", + "GatewayPlatform" + ], + "readOnlyProperties": [ + "/properties/GatewayId" + ], + "createOnlyProperties": [ + "/properties/GatewayPlatform" + ], + "primaryIdentifier": [ + "/properties/GatewayId" + ], + "handlers": { + "create": { + "permissions": [ + "iotsitewise:CreateGateway", + "iotsitewise:DescribeGateway", + "iotsitewise:DescribeGatewayCapabilityConfiguration", + "iotsitewise:UpdateGatewayCapabilityConfiguration", + "iam:PassRole", + "iam:GetRole", + "greengrass:GetCoreDevice", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iot:DescribeThing" + ] + }, + "read": { + "permissions": [ + "iotsitewise:DescribeGateway", + "iotsitewise:DescribeGatewayCapabilityConfiguration", + "iotsitewise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotsitewise:UpdateGateway", + "iotsitewise:UpdateGatewayCapabilityConfiguration", + "iotsitewise:TagResource", + "iotsitewise:UntagResource", + "iotsitewise:DescribeGateway", + "iotsitewise:DescribeGatewayCapabilityConfiguration", + "iotsitewise:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotsitewise:DescribeGateway", + "iotsitewise:DescribeGatewayCapabilityConfiguration", + "iotsitewise:DeleteGateway" + ] + }, + "list": { + "permissions": [ + "iotsitewise:ListGateways" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotsitewise/portal.json b/internal/aws/cfn/schemas/aws/iotsitewise/portal.json new file mode 100644 index 00000000..56744899 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotsitewise/portal.json @@ -0,0 +1,160 @@ +{ + "typeName": "AWS::IoTSiteWise::Portal", + "description": "Resource schema for AWS::IoTSiteWise::Portal", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iotsitewise.git", + "definitions": { + "Tag": { + "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "PortalAuthMode": { + "description": "The service to use to authenticate users to the portal. Choose from SSO or IAM. You can't change this value after you create a portal.", + "type": "string" + }, + "PortalArn": { + "description": "The ARN of the portal, which has the following format.", + "type": "string" + }, + "PortalClientId": { + "description": "The AWS SSO application generated client ID (used with AWS SSO APIs).", + "type": "string" + }, + "PortalContactEmail": { + "description": "The AWS administrator's contact email address.", + "type": "string" + }, + "PortalDescription": { + "description": "A description for the portal.", + "type": "string" + }, + "PortalId": { + "description": "The ID of the portal.", + "type": "string" + }, + "PortalName": { + "description": "A friendly name for the portal.", + "type": "string" + }, + "PortalStartUrl": { + "description": "The public root URL for the AWS IoT AWS IoT SiteWise Monitor application portal.", + "type": "string" + }, + "RoleArn": { + "description": "The ARN of a service role that allows the portal's users to access your AWS IoT SiteWise resources on your behalf.", + "type": "string" + }, + "NotificationSenderEmail": { + "description": "The email address that sends alarm notifications.", + "type": "string" + }, + "Alarms": { + "type": "object", + "description": "Contains the configuration information of an alarm created in an AWS IoT SiteWise Monitor portal. You can use the alarm to monitor an asset property and get notified when the asset property value is outside a specified range.", + "additionalProperties": false, + "properties": { + "AlarmRoleArn": { + "type": "string", + "description": "The ARN of the IAM role that allows the alarm to perform actions and access AWS resources and services, such as AWS IoT Events." + }, + "NotificationLambdaArn": { + "type": "string", + "description": "The ARN of the AWS Lambda function that manages alarm notifications. For more information, see Managing alarm notifications in the AWS IoT Events Developer Guide." + } + } + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the portal.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "PortalContactEmail", + "PortalName", + "RoleArn" + ], + "createOnlyProperties": [ + "/properties/PortalAuthMode" + ], + "readOnlyProperties": [ + "/properties/PortalArn", + "/properties/PortalClientId", + "/properties/PortalId", + "/properties/PortalStartUrl" + ], + "primaryIdentifier": [ + "/properties/PortalId" + ], + "additionalIdentifiers": [ + [ + "/properties/PortalArn" + ] + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "iotsitewise:CreatePortal", + "iotsitewise:DescribePortal", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iam:PassRole", + "sso:CreateManagedApplicationInstance", + "sso:DescribeRegisteredRegions" + ] + }, + "read": { + "permissions": [ + "iotsitewise:DescribePortal", + "iotsitewise:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotsitewise:DescribePortal", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iotsitewise:UpdatePortal", + "iotsitewise:UntagResource", + "iam:PassRole", + "sso:GetManagedApplicationInstance", + "sso:UpdateApplicationInstanceDisplayData" + ] + }, + "delete": { + "permissions": [ + "iotsitewise:DescribePortal", + "iotsitewise:DeletePortal", + "sso:DeleteManagedApplicationInstance" + ] + }, + "list": { + "permissions": [ + "iotsitewise:ListPortals" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotsitewise/project.json b/internal/aws/cfn/schemas/aws/iotsitewise/project.json new file mode 100644 index 00000000..7b6bf153 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotsitewise/project.json @@ -0,0 +1,125 @@ +{ + "typeName": "AWS::IoTSiteWise::Project", + "description": "Resource schema for AWS::IoTSiteWise::Project", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-IoTSiteWise.git", + "definitions": { + "AssetId": { + "description": "The ID of the asset", + "type": "string" + }, + "Tag": { + "description": "To add or update tag, provide both key and value. To delete tag, provide only tag key to be deleted", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "PortalId": { + "description": "The ID of the portal in which to create the project.", + "type": "string" + }, + "ProjectId": { + "description": "The ID of the project.", + "type": "string" + }, + "ProjectName": { + "description": "A friendly name for the project.", + "type": "string" + }, + "ProjectDescription": { + "description": "A description for the project.", + "type": "string" + }, + "ProjectArn": { + "description": "The ARN of the project.", + "type": "string" + }, + "AssetIds": { + "description": "The IDs of the assets to be associated to the project.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/AssetId" + } + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the project.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "PortalId", + "ProjectName" + ], + "readOnlyProperties": [ + "/properties/ProjectId", + "/properties/ProjectArn" + ], + "createOnlyProperties": [ + "/properties/PortalId" + ], + "primaryIdentifier": [ + "/properties/ProjectId" + ], + "handlers": { + "create": { + "permissions": [ + "iotsitewise:CreateProject", + "iotsitewise:DescribeProject", + "iotsitewise:ListProjectAssets", + "iotsitewise:ListTagsForResource", + "iotsitewise:TagResource", + "iotsitewise:BatchAssociateProjectAssets" + ] + }, + "read": { + "permissions": [ + "iotsitewise:DescribeProject", + "iotsitewise:ListTagsForResource", + "iotsitewise:ListProjectAssets" + ] + }, + "update": { + "permissions": [ + "iotsitewise:DescribeProject", + "iotsitewise:UpdateProject", + "iotsitewise:BatchAssociateProjectAssets", + "iotsitewise:BatchDisAssociateProjectAssets", + "iotsitewise:ListProjectAssets", + "iotsitewise:TagResource", + "iotsitewise:UntagResource", + "iotsitewise:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotsitewise:DescribeProject", + "iotsitewise:DeleteProject" + ] + }, + "list": { + "permissions": [ + "iotsitewise:ListProjects" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotthingsgraph/flowtemplate.json b/internal/aws/cfn/schemas/aws/iotthingsgraph/flowtemplate.json new file mode 100644 index 00000000..6c81695f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotthingsgraph/flowtemplate.json @@ -0,0 +1,43 @@ +{ + "typeName": "AWS::IoTThingsGraph::FlowTemplate", + "description": "Resource Type definition for AWS::IoTThingsGraph::FlowTemplate", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "CompatibleNamespaceVersion": { + "type": "number" + }, + "Definition": { + "$ref": "#/definitions/DefinitionDocument" + } + }, + "definitions": { + "DefinitionDocument": { + "type": "object", + "additionalProperties": false, + "properties": { + "Language": { + "type": "string" + }, + "Text": { + "type": "string" + } + }, + "required": [ + "Language", + "Text" + ] + } + }, + "required": [ + "Definition" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/iottwinmaker/componenttype.json b/internal/aws/cfn/schemas/aws/iottwinmaker/componenttype.json new file mode 100644 index 00000000..42979de3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iottwinmaker/componenttype.json @@ -0,0 +1,558 @@ +{ + "typeName": "AWS::IoTTwinMaker::ComponentType", + "description": "Resource schema for AWS::IoTTwinMaker::ComponentType", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iottwinmaker", + "definitions": { + "DateTimeFormat": { + "type": "string", + "format": "date-time" + }, + "ParentComponentType": { + "type": "string", + "pattern": "[a-zA-Z_\\.\\-0-9:]+" + }, + "PropertyName": { + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+" + }, + "RequiredProperty": { + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+" + }, + "LambdaFunction": { + "type": "object", + "properties": { + "Arn": { + "type": "string", + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):lambda:[a-z0-9-]+:[0-9]{12}:function:[\\/a-zA-Z0-9_-]+", + "minLength": 1, + "maxLength": 128 + } + }, + "additionalProperties": false, + "required": [ + "Arn" + ] + }, + "DataConnector": { + "description": "The data connector.", + "type": "object", + "properties": { + "IsNative": { + "description": "A Boolean value that specifies whether the data connector is native to IoT TwinMaker.", + "type": "boolean" + }, + "Lambda": { + "description": "The Lambda function associated with this data connector.", + "$ref": "#/definitions/LambdaFunction" + } + }, + "additionalProperties": false + }, + "Function": { + "description": "The function of component type.", + "type": "object", + "properties": { + "ImplementedBy": { + "description": "The data connector.", + "$ref": "#/definitions/DataConnector" + }, + "RequiredProperties": { + "description": "The required properties of the function.", + "type": "array", + "minItems": 1, + "maxItems": 256, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RequiredProperty" + } + }, + "Scope": { + "description": "The scope of the function.", + "type": "string", + "enum": [ + "ENTITY", + "WORKSPACE" + ] + } + }, + "additionalProperties": false + }, + "DataValue": { + "description": "An object that specifies a value for a property.", + "type": "object", + "properties": { + "BooleanValue": { + "description": "A Boolean value.", + "type": "boolean" + }, + "DoubleValue": { + "description": "A double value.", + "type": "number" + }, + "Expression": { + "description": "An expression that produces the value.", + "type": "string", + "pattern": "(^\\$\\{Parameters\\.[a-zA-z]+([a-zA-z_0-9]*)}$)", + "minLength": 1, + "maxLength": 316 + }, + "IntegerValue": { + "description": "An integer value.", + "type": "integer" + }, + "ListValue": { + "description": "A list of multiple values.", + "type": "array", + "minItems": 0, + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DataValue" + } + }, + "LongValue": { + "description": "A long value.", + "type": "number" + }, + "StringValue": { + "description": "A string value.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 256 + }, + "MapValue": { + "description": "An object that maps strings to multiple DataValue objects. \n\n", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/DataValue" + } + }, + "additionalProperties": false + }, + "RelationshipValue": { + "description": "A value that relates a component to another component.", + "type": "object", + "properties": { + "TargetComponentName": { + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + }, + "TargetEntityId": { + "type": "string", + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|^[a-zA-Z0-9][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9]+", + "minLength": 1, + "maxLength": 128 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "Relationship": { + "description": "The type of the relationship.", + "type": "object", + "properties": { + "RelationshipType": { + "description": "The type of the relationship.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 256 + }, + "TargetComponentTypeId": { + "description": "The ID of the target component type associated with this relationship.", + "type": "string", + "pattern": "[a-zA-Z_\\.\\-0-9:]+", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "DataType": { + "description": "An object that specifies the data type of a property.", + "type": "object", + "properties": { + "AllowedValues": { + "description": "The allowed values for this data type.", + "type": "array", + "minItems": 0, + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DataValue" + } + }, + "NestedType": { + "description": "The nested type in the data type.", + "$ref": "#/definitions/DataType" + }, + "Relationship": { + "description": "A relationship that associates a component with another component.", + "$ref": "#/definitions/Relationship" + }, + "Type": { + "description": "The underlying type of the data type.", + "type": "string", + "enum": [ + "RELATIONSHIP", + "STRING", + "LONG", + "BOOLEAN", + "INTEGER", + "DOUBLE", + "LIST", + "MAP" + ] + }, + "UnitOfMeasure": { + "description": "The unit of measure used in this data type.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Type" + ] + }, + "PropertyDefinition": { + "description": "An object that sets information about a property.", + "type": "object", + "properties": { + "Configurations": { + "description": "An object that specifies information about a property.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "DataType": { + "description": "An object that contains information about the data type.", + "$ref": "#/definitions/DataType" + }, + "DefaultValue": { + "description": "An object that contains the default value.", + "$ref": "#/definitions/DataValue" + }, + "IsExternalId": { + "description": "A Boolean value that specifies whether the property ID comes from an external data store.", + "type": "boolean" + }, + "IsRequiredInEntity": { + "description": "A Boolean value that specifies whether the property is required.", + "type": "boolean" + }, + "IsStoredExternally": { + "description": "A Boolean value that specifies whether the property is stored externally.", + "type": "boolean" + }, + "IsTimeSeries": { + "description": "A Boolean value that specifies whether the property consists of time series data.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "PropertyGroup": { + "description": "An object that sets information about a property group.", + "type": "object", + "properties": { + "GroupType": { + "description": "The type of property group.", + "type": "string", + "enum": [ + "TABULAR" + ] + }, + "PropertyNames": { + "description": "The list of property names in the property group.", + "type": "array", + "minItems": 1, + "maxItems": 256, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PropertyName" + } + } + }, + "additionalProperties": false + }, + "CompositeComponentType": { + "description": "An object that sets information about a composite component type.", + "type": "object", + "properties": { + "ComponentTypeId": { + "description": "The id of the composite component type.", + "type": "string", + "pattern": "[a-zA-Z_\\.\\-0-9:]+", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "Status": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "CREATING", + "UPDATING", + "DELETING", + "ACTIVE", + "ERROR" + ] + }, + "Error": { + "type": "object", + "anyOf": [ + { + "description": "Empty Error object.", + "type": "object", + "additionalProperties": false + }, + { + "description": "Error object with Message and Code.", + "type": "object", + "properties": { + "Message": { + "type": "string", + "minLength": 0, + "maxLength": 2048 + }, + "Code": { + "type": "string", + "enum": [ + "VALIDATION_ERROR", + "INTERNAL_FAILURE" + ] + } + }, + "additionalProperties": false + } + ] + } + }, + "additionalProperties": false + } + }, + "properties": { + "WorkspaceId": { + "description": "The ID of the workspace that contains the component type.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z_0-9][a-zA-Z_\\-0-9]*[a-zA-Z0-9]+" + }, + "ComponentTypeId": { + "description": "The ID of the component type.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z_\\.\\-0-9:]+" + }, + "Description": { + "description": "The description of the component type.", + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "ExtendsFrom": { + "description": "Specifies the parent component type to extend.", + "type": "array", + "minItems": 1, + "maxItems": 256, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ParentComponentType" + } + }, + "Functions": { + "description": "a Map of functions in the component type. Each function's key must be unique to this map.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/Function" + } + } + }, + "IsSingleton": { + "description": "A Boolean value that specifies whether an entity can have more than one component of this type.", + "type": "boolean" + }, + "PropertyDefinitions": { + "description": "An map of the property definitions in the component type. Each property definition's key must be unique to this map.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/PropertyDefinition" + } + }, + "additionalProperties": false + }, + "PropertyGroups": { + "description": "An map of the property groups in the component type. Each property group's key must be unique to this map.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/PropertyGroup" + } + }, + "additionalProperties": false + }, + "CompositeComponentTypes": { + "description": "An map of the composite component types in the component type. Each composite component type's key must be unique to this map.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/CompositeComponentType" + } + }, + "additionalProperties": false + }, + "Arn": { + "description": "The ARN of the component type.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):iottwinmaker:[a-z0-9-]+:[0-9]{12}:[\\/a-zA-Z0-9_\\-\\.:]+" + }, + "CreationDateTime": { + "description": "The date and time when the component type was created.", + "$ref": "#/definitions/DateTimeFormat" + }, + "UpdateDateTime": { + "description": "The last date and time when the component type was updated.", + "$ref": "#/definitions/DateTimeFormat" + }, + "Status": { + "description": "The current status of the component type.", + "$ref": "#/definitions/Status" + }, + "IsAbstract": { + "description": "A Boolean value that specifies whether the component type is abstract.", + "type": "boolean" + }, + "IsSchemaInitialized": { + "description": "A Boolean value that specifies whether the component type has a schema initializer and that the schema initializer has run.", + "type": "boolean" + }, + "Tags": { + "type": "object", + "description": "A map of key-value pairs to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "maxProperties": 50, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "WorkspaceId", + "ComponentTypeId" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationDateTime", + "/properties/UpdateDateTime", + "/properties/Status", + "/properties/IsAbstract", + "/properties/IsSchemaInitialized" + ], + "createOnlyProperties": [ + "/properties/WorkspaceId", + "/properties/ComponentTypeId" + ], + "primaryIdentifier": [ + "/properties/WorkspaceId", + "/properties/ComponentTypeId" + ], + "handlers": { + "create": { + "permissions": [ + "iottwinmaker:CreateComponentType", + "iottwinmaker:GetComponentType", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource" + ] + }, + "read": { + "permissions": [ + "iottwinmaker:GetComponentType", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iottwinmaker:GetComponentType", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource", + "iottwinmaker:UntagResource", + "iottwinmaker:UpdateComponentType" + ] + }, + "delete": { + "permissions": [ + "iottwinmaker:DeleteComponentType", + "iottwinmaker:GetComponentType", + "iottwinmaker:GetWorkspace" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "WorkspaceId": { + "type": "string", + "$ref": "resource-schema.json#/properties/WorkspaceId" + } + }, + "required": [ + "WorkspaceId" + ] + }, + "permissions": [ + "iottwinmaker:GetComponentType", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListComponentTypes", + "iottwinmaker:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iottwinmaker/entity.json b/internal/aws/cfn/schemas/aws/iottwinmaker/entity.json new file mode 100644 index 00000000..199c8263 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iottwinmaker/entity.json @@ -0,0 +1,600 @@ +{ + "typeName": "AWS::IoTTwinMaker::Entity", + "description": "Resource schema for AWS::IoTTwinMaker::Entity", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iottwinmaker", + "definitions": { + "DateTimeFormat": { + "type": "string", + "format": "date-time" + }, + "Relationship": { + "description": "The type of the relationship.", + "type": "object", + "properties": { + "RelationshipType": { + "description": "The type of the relationship.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 256 + }, + "TargetComponentTypeId": { + "description": "The ID of the target component type associated with this relationship.", + "type": "string", + "pattern": "[a-zA-Z_\\.\\-0-9:]+", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "PropertyDefinitionConfiguration": { + "description": "An object that specifies information about a property configuration.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "DataType": { + "description": "An object that specifies the data type of a property.", + "type": "object", + "properties": { + "AllowedValues": { + "description": "The allowed values for this data type.", + "type": "array", + "minItems": 0, + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DataValue" + } + }, + "NestedType": { + "description": "The nested type in the data type.", + "$ref": "#/definitions/DataType" + }, + "Relationship": { + "description": "A relationship that associates a component with another component.", + "$ref": "#/definitions/Relationship" + }, + "Type": { + "description": "The underlying type of the data type.", + "type": "string", + "enum": [ + "RELATIONSHIP", + "STRING", + "LONG", + "BOOLEAN", + "INTEGER", + "DOUBLE", + "LIST", + "MAP" + ] + }, + "UnitOfMeasure": { + "description": "The unit of measure used in this data type.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "DataValue": { + "description": "An object that specifies a value for a property.", + "type": "object", + "properties": { + "BooleanValue": { + "description": "A Boolean value.", + "type": "boolean" + }, + "DoubleValue": { + "description": "A double value.", + "type": "number" + }, + "Expression": { + "description": "An expression that produces the value.", + "type": "string", + "pattern": "(^\\$\\{Parameters\\.[a-zA-z]+([a-zA-z_0-9]*)}$)", + "minLength": 1, + "maxLength": 316 + }, + "IntegerValue": { + "description": "An integer value.", + "type": "integer" + }, + "ListValue": { + "description": "A list of multiple values.", + "type": "array", + "minItems": 0, + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DataValue" + } + }, + "LongValue": { + "description": "A long value.", + "type": "number" + }, + "StringValue": { + "description": "A string value.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 256 + }, + "MapValue": { + "description": "An object that maps strings to multiple DataValue objects.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/DataValue" + } + }, + "additionalProperties": false + }, + "RelationshipValue": { + "description": "A value that relates a component to another component.", + "type": "object", + "properties": { + "TargetComponentName": { + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + }, + "TargetEntityId": { + "type": "string", + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|^[a-zA-Z0-9][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9]+", + "minLength": 1, + "maxLength": 128 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "Definition": { + "description": "An object that specifies information about a property definition.", + "type": "object", + "properties": { + "Configuration": { + "description": "An object that specifies information about a property configuration.", + "$ref": "#/definitions/PropertyDefinitionConfiguration" + }, + "DataType": { + "description": "An object that contains information about the data type.", + "$ref": "#/definitions/DataType" + }, + "DefaultValue": { + "description": "An object that contains the default value.", + "$ref": "#/definitions/DataValue" + }, + "IsExternalId": { + "description": "A Boolean value that specifies whether the property ID comes from an external data store.", + "type": "boolean" + }, + "IsFinal": { + "description": "A Boolean value that specifies whether the property definition can be updated.", + "type": "boolean" + }, + "IsImported": { + "description": "A Boolean value that specifies whether the property definition is imported from an external data store.", + "type": "boolean" + }, + "IsInherited": { + "description": "A Boolean value that specifies whether the property definition is inherited from a parent entity.", + "type": "boolean" + }, + "IsRequiredInEntity": { + "description": "A Boolean value that specifies whether the property is required.", + "type": "boolean" + }, + "IsStoredExternally": { + "description": "A Boolean value that specifies whether the property is stored externally.", + "type": "boolean" + }, + "IsTimeSeries": { + "description": "A Boolean value that specifies whether the property consists of time series data.", + "type": "boolean" + } + }, + "additionalProperties": false + }, + "Property": { + "description": "An object that specifies information about a property.", + "type": "object", + "properties": { + "Definition": { + "description": "The definition of the property.", + "$ref": "#/definitions/Definition" + }, + "Value": { + "description": "The value of the property.", + "$ref": "#/definitions/DataValue" + } + }, + "additionalProperties": false + }, + "PropertyName": { + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+" + }, + "PropertyGroup": { + "description": "An object that specifies information about a property group.", + "type": "object", + "properties": { + "GroupType": { + "description": "The type of property group.", + "type": "string", + "enum": [ + "TABULAR" + ] + }, + "PropertyNames": { + "description": "The list of property names in the property group.", + "type": "array", + "minItems": 1, + "maxItems": 256, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PropertyName" + } + } + }, + "additionalProperties": false + }, + "Component": { + "type": "object", + "properties": { + "ComponentName": { + "description": "The name of the component.", + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + }, + "ComponentTypeId": { + "description": "The ID of the component type.", + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + }, + "Description": { + "description": "The description of the component.", + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "DefinedIn": { + "description": "The name of the property definition set in the component.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Properties": { + "description": "An object that maps strings to the properties to set in the component type. Each string in the mapping must be unique to this object.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/Property" + } + }, + "additionalProperties": false + }, + "PropertyGroups": { + "description": "An object that maps strings to the property groups to set in the component type. Each string in the mapping must be unique to this object.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/PropertyGroup" + } + }, + "additionalProperties": false + }, + "Status": { + "description": "The current status of the entity.", + "$ref": "#/definitions/Status" + } + }, + "additionalProperties": false + }, + "CompositeComponent": { + "type": "object", + "properties": { + "ComponentName": { + "description": "The name of the component.", + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + }, + "ComponentPath": { + "description": "The path of the component.", + "type": "string", + "pattern": "[a-zA-Z_\\-0-9/]+", + "minLength": 1, + "maxLength": 256 + }, + "ComponentTypeId": { + "description": "The ID of the component type.", + "type": "string", + "pattern": "[a-zA-Z_\\-0-9]+", + "minLength": 1, + "maxLength": 256 + }, + "Description": { + "description": "The description of the component.", + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "Properties": { + "description": "An object that maps strings to the properties to set in the component type. Each string in the mapping must be unique to this object.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/Property" + } + }, + "additionalProperties": false + }, + "PropertyGroups": { + "description": "An object that maps strings to the property groups to set in the component type. Each string in the mapping must be unique to this object.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/PropertyGroup" + } + }, + "additionalProperties": false + }, + "Status": { + "description": "The current status of the component.", + "$ref": "#/definitions/Status" + } + }, + "additionalProperties": false + }, + "Status": { + "type": "object", + "properties": { + "State": { + "type": "string", + "enum": [ + "CREATING", + "UPDATING", + "DELETING", + "ACTIVE", + "ERROR" + ] + }, + "Error": { + "type": "object", + "anyOf": [ + { + "description": "Empty Error object.", + "type": "object", + "additionalProperties": false + }, + { + "description": "Error object with Message and Code.", + "type": "object", + "properties": { + "Message": { + "type": "string", + "minLength": 0, + "maxLength": 2048 + }, + "Code": { + "type": "string", + "enum": [ + "VALIDATION_ERROR", + "INTERNAL_FAILURE" + ] + } + }, + "additionalProperties": false + } + ] + } + }, + "additionalProperties": false + } + }, + "properties": { + "EntityId": { + "description": "The ID of the entity.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|^[a-zA-Z0-9][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9]+" + }, + "EntityName": { + "description": "The name of the entity.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z_0-9-.][a-zA-Z_0-9-. ]*[a-zA-Z0-9]+" + }, + "Status": { + "description": "The current status of the entity.", + "$ref": "#/definitions/Status" + }, + "HasChildEntities": { + "description": "A Boolean value that specifies whether the entity has child entities or not.", + "type": "boolean" + }, + "ParentEntityId": { + "description": "The ID of the parent entity.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "\\$ROOT|^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|^[a-zA-Z0-9][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9]+" + }, + "Arn": { + "description": "The ARN of the entity.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):iottwinmaker:[a-z0-9-]+:[0-9]{12}:[\\/a-zA-Z0-9_\\-\\.:]+" + }, + "Description": { + "description": "The description of the entity.", + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "CreationDateTime": { + "description": "The date and time when the entity was created.", + "$ref": "#/definitions/DateTimeFormat" + }, + "UpdateDateTime": { + "description": "The last date and time when the entity was updated.", + "$ref": "#/definitions/DateTimeFormat" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "WorkspaceId": { + "description": "The ID of the workspace.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z_0-9][a-zA-Z_\\-0-9]*[a-zA-Z0-9]+" + }, + "Components": { + "description": "A map that sets information about a component type.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "$ref": "#/definitions/Component" + } + }, + "additionalProperties": false + }, + "CompositeComponents": { + "description": "A map that sets information about a composite component.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9/]+": { + "$ref": "#/definitions/CompositeComponent" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "WorkspaceId", + "EntityName" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationDateTime", + "/properties/UpdateDateTime", + "/properties/Status", + "/properties/HasChildEntities" + ], + "createOnlyProperties": [ + "/properties/WorkspaceId", + "/properties/EntityId" + ], + "primaryIdentifier": [ + "/properties/WorkspaceId", + "/properties/EntityId" + ], + "handlers": { + "create": { + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:CreateEntity", + "iottwinmaker:GetEntity", + "iottwinmaker:ListComponents", + "iottwinmaker:ListProperties", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource" + ] + }, + "read": { + "permissions": [ + "iottwinmaker:GetComponentType", + "iottwinmaker:GetEntity", + "iottwinmaker:ListComponents", + "iottwinmaker:ListProperties", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListEntities", + "iottwinmaker:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iottwinmaker:GetComponentType", + "iottwinmaker:GetEntity", + "iottwinmaker:ListComponents", + "iottwinmaker:ListProperties", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource", + "iottwinmaker:UntagResource", + "iottwinmaker:UpdateEntity", + "iottwinmaker:UpdateComponentType" + ] + }, + "delete": { + "permissions": [ + "iottwinmaker:GetEntity", + "iottwinmaker:GetWorkspace", + "iottwinmaker:DeleteEntity" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "WorkspaceId": { + "type": "string", + "$ref": "resource-schema.json#/properties/WorkspaceId" + } + }, + "required": [ + "WorkspaceId" + ] + }, + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:GetEntity", + "iottwinmaker:ListEntities" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iottwinmaker/scene.json b/internal/aws/cfn/schemas/aws/iottwinmaker/scene.json new file mode 100644 index 00000000..d1230271 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iottwinmaker/scene.json @@ -0,0 +1,189 @@ +{ + "typeName": "AWS::IoTTwinMaker::Scene", + "description": "Resource schema for AWS::IoTTwinMaker::Scene", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iottwinmaker", + "definitions": { + "DateTimeFormat": { + "type": "string", + "format": "date-time" + } + }, + "properties": { + "SceneId": { + "description": "The ID of the scene.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z_0-9][a-zA-Z_\\-0-9]*[a-zA-Z0-9]+" + }, + "Arn": { + "description": "The ARN of the scene.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):iottwinmaker:[a-z0-9-]+:[0-9]{12}:[\\/a-zA-Z0-9_\\-\\.:]+" + }, + "Description": { + "description": "The description of the scene.", + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "ContentLocation": { + "description": "The relative path that specifies the location of the content definition file.", + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "[sS]3://[A-Za-z0-9._/-]+" + }, + "CreationDateTime": { + "description": "The date and time when the scene was created.", + "$ref": "#/definitions/DateTimeFormat" + }, + "UpdateDateTime": { + "description": "The date and time of the current update.", + "$ref": "#/definitions/DateTimeFormat" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "WorkspaceId": { + "description": "The ID of the scene.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z_0-9][a-zA-Z_\\-0-9]*[a-zA-Z0-9]+" + }, + "Capabilities": { + "description": "A list of capabilities that the scene uses to render.", + "type": "array", + "minItems": 0, + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": ".*" + } + }, + "SceneMetadata": { + "description": "A key-value pair of scene metadata for the scene.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "type": "string", + "minLength": 0, + "maxLength": 2048 + } + }, + "minLength": 0, + "maxLength": 50, + "additionalProperties": false + }, + "GeneratedSceneMetadata": { + "description": "A key-value pair of generated scene metadata for the scene.", + "type": "object", + "patternProperties": { + "[a-zA-Z_\\-0-9]+": { + "type": "string", + "minLength": 0, + "maxLength": 2048 + } + }, + "minLength": 0, + "maxLength": 50, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "WorkspaceId", + "SceneId", + "ContentLocation" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationDateTime", + "/properties/UpdateDateTime", + "/properties/GeneratedSceneMetadata" + ], + "createOnlyProperties": [ + "/properties/SceneId", + "/properties/WorkspaceId" + ], + "primaryIdentifier": [ + "/properties/WorkspaceId", + "/properties/SceneId" + ], + "handlers": { + "create": { + "permissions": [ + "iottwinmaker:CreateScene", + "iottwinmaker:GetScene", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource" + ] + }, + "read": { + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:GetScene", + "iottwinmaker:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iottwinmaker:GetScene", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource", + "iottwinmaker:UntagResource", + "iottwinmaker:UpdateScene" + ] + }, + "delete": { + "permissions": [ + "iottwinmaker:DeleteScene", + "iottwinmaker:GetScene", + "iottwinmaker:GetWorkspace" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "WorkspaceId": { + "type": "string", + "$ref": "resource-schema.json#/properties/WorkspaceId" + } + }, + "required": [ + "WorkspaceId" + ] + }, + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:ListScenes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iottwinmaker/syncjob.json b/internal/aws/cfn/schemas/aws/iottwinmaker/syncjob.json new file mode 100644 index 00000000..512b05b2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iottwinmaker/syncjob.json @@ -0,0 +1,141 @@ +{ + "typeName": "AWS::IoTTwinMaker::SyncJob", + "description": "Resource schema for AWS::IoTTwinMaker::SyncJob", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iottwinmaker", + "definitions": { + "DateTimeFormat": { + "type": "string", + "format": "date-time" + } + }, + "properties": { + "WorkspaceId": { + "description": "The ID of the workspace.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z_0-9][a-zA-Z_\\-0-9]*[a-zA-Z0-9]+" + }, + "SyncSource": { + "description": "The source of the SyncJob.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "SyncRole": { + "description": "The IAM Role that execute SyncJob.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):iam::[0-9]{12}:role/.*" + }, + "CreationDateTime": { + "description": "The date and time when the sync job was created.", + "$ref": "#/definitions/DateTimeFormat" + }, + "UpdateDateTime": { + "description": "The date and time when the sync job was updated.", + "$ref": "#/definitions/DateTimeFormat" + }, + "Arn": { + "description": "The ARN of the SyncJob.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):iottwinmaker:[a-z0-9-]+:[0-9]{12}:[\\/a-zA-Z0-9_\\-\\.:]+" + }, + "State": { + "description": "The state of SyncJob.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z_\\-0-9]+" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "WorkspaceId", + "SyncSource", + "SyncRole" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationDateTime", + "/properties/UpdateDateTime", + "/properties/State" + ], + "createOnlyProperties": [ + "/properties/WorkspaceId", + "/properties/SyncSource", + "/properties/SyncRole", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/WorkspaceId", + "/properties/SyncSource" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "iottwinmaker:CreateSyncJob", + "iottwinmaker:GetSyncJob", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource" + ] + }, + "read": { + "permissions": [ + "iottwinmaker:GetSyncJob", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iottwinmaker:DeleteSyncJob", + "iottwinmaker:GetSyncJob", + "iottwinmaker:GetWorkspace" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "WorkspaceId": { + "type": "string", + "$ref": "resource-schema.json#/properties/WorkspaceId" + } + }, + "required": [ + "WorkspaceId" + ] + }, + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListSyncJobs", + "iottwinmaker:ListTagsForResource" + ] + } + }, + "replacementStrategy": "delete_then_create" +} diff --git a/internal/aws/cfn/schemas/aws/iottwinmaker/workspace.json b/internal/aws/cfn/schemas/aws/iottwinmaker/workspace.json new file mode 100644 index 00000000..74e825d5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iottwinmaker/workspace.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::IoTTwinMaker::Workspace", + "description": "Resource schema for AWS::IoTTwinMaker::Workspace", + "definitions": { + "DateTimeFormat": { + "type": "string", + "format": "date-time" + } + }, + "properties": { + "WorkspaceId": { + "description": "The ID of the workspace.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z_0-9][a-zA-Z_\\-0-9]*[a-zA-Z0-9]+" + }, + "Arn": { + "description": "The ARN of the workspace.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):iottwinmaker:[a-z0-9-]+:[0-9]{12}:[\\/a-zA-Z0-9_\\-\\.:]+" + }, + "Description": { + "description": "The description of the workspace.", + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "Role": { + "description": "The ARN of the execution role associated with the workspace.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:((aws)|(aws-cn)|(aws-us-gov)):iam::[0-9]{12}:role/.*" + }, + "S3Location": { + "description": "The ARN of the S3 bucket where resources associated with the workspace are stored.", + "type": "string" + }, + "CreationDateTime": { + "description": "The date and time when the workspace was created.", + "$ref": "#/definitions/DateTimeFormat" + }, + "UpdateDateTime": { + "description": "The date and time of the current update.", + "$ref": "#/definitions/DateTimeFormat" + }, + "Tags": { + "type": "object", + "description": "A map of key-value pairs to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "maxProperties": 50, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "WorkspaceId", + "Role", + "S3Location" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationDateTime", + "/properties/UpdateDateTime" + ], + "createOnlyProperties": [ + "/properties/WorkspaceId" + ], + "primaryIdentifier": [ + "/properties/WorkspaceId" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "iottwinmaker:CreateWorkspace", + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource" + ] + }, + "read": { + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:TagResource", + "iottwinmaker:UntagResource", + "iottwinmaker:UpdateWorkspace" + ] + }, + "delete": { + "permissions": [ + "iottwinmaker:DeleteWorkspace", + "iottwinmaker:GetWorkspace" + ] + }, + "list": { + "permissions": [ + "iottwinmaker:GetWorkspace", + "iottwinmaker:ListTagsForResource", + "iottwinmaker:ListWorkspaces" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/destination.json b/internal/aws/cfn/schemas/aws/iotwireless/destination.json new file mode 100644 index 00000000..0de3f8c6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/destination.json @@ -0,0 +1,120 @@ +{ + "typeName": "AWS::IoTWireless::Destination", + "description": "Destination's resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Unique name of destination", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "maxLength": 128 + }, + "Expression": { + "description": "Destination expression", + "type": "string" + }, + "ExpressionType": { + "description": "Must be RuleName", + "type": "string", + "enum": [ + "RuleName", + "MqttTopic", + "SnsTopic" + ] + }, + "Description": { + "description": "Destination description", + "type": "string", + "maxLength": 2048 + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the destination.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "RoleArn": { + "description": "AWS role ARN that grants access", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "Arn": { + "description": "Destination arn. Returned after successful create.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Expression", + "ExpressionType" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "iotwireless:CreateDestination", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetDestination", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "iotwireless:UpdateDestination", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteDestination" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListDestinations", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/deviceprofile.json b/internal/aws/cfn/schemas/aws/iotwireless/deviceprofile.json new file mode 100644 index 00000000..136d06c9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/deviceprofile.json @@ -0,0 +1,186 @@ +{ + "typeName": "AWS::IoTWireless::DeviceProfile", + "description": "Device Profile's resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "LoRaWANDeviceProfile": { + "type": "object", + "additionalProperties": false, + "properties": { + "SupportsClassB": { + "type": "boolean" + }, + "ClassBTimeout": { + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "PingSlotPeriod": { + "type": "integer", + "minimum": 128, + "maximum": 4096 + }, + "PingSlotDr": { + "type": "integer", + "minimum": 0, + "maximum": 15 + }, + "PingSlotFreq": { + "type": "integer", + "minimum": 1000000, + "maximum": 16700000 + }, + "SupportsClassC": { + "type": "boolean" + }, + "ClassCTimeout": { + "type": "integer", + "minimum": 0, + "maximum": 1000 + }, + "MacVersion": { + "type": "string", + "maxLength": 64 + }, + "RegParamsRevision": { + "type": "string", + "maxLength": 64 + }, + "RxDelay1": { + "type": "integer", + "minimum": 0, + "maximum": 15 + }, + "RxDrOffset1": { + "type": "integer", + "minimum": 0, + "maximum": 7 + }, + "RxFreq2": { + "type": "integer", + "minimum": 1000000, + "maximum": 16700000 + }, + "RxDataRate2": { + "type": "integer", + "minimum": 0, + "maximum": 15 + }, + "FactoryPresetFreqsList": { + "type": "array", + "maxItems": 20, + "items": { + "$ref": "#/definitions/FactoryPresetFreq" + } + }, + "MaxEirp": { + "type": "integer", + "minimum": 0, + "maximum": 15 + }, + "MaxDutyCycle": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "SupportsJoin": { + "type": "boolean" + }, + "RfRegion": { + "type": "string", + "maxLength": 64 + }, + "Supports32BitFCnt": { + "type": "boolean" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "FactoryPresetFreq": { + "type": "integer", + "minimum": 1000000, + "maximum": 16700000 + } + }, + "properties": { + "Name": { + "description": "Name of service profile", + "type": "string", + "maxLength": 256 + }, + "LoRaWAN": { + "description": "LoRaWANDeviceProfile supports all LoRa specific attributes for service profile for CreateDeviceProfile operation", + "$ref": "#/definitions/LoRaWANDeviceProfile" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the device profile.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "Service profile Arn. Returned after successful create.", + "type": "string" + }, + "Id": { + "description": "Service profile Id. Returned after successful create.", + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateDeviceProfile", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetDeviceProfile", + "iotwireless:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteDeviceProfile" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListDeviceProfiles", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/fuotatask.json b/internal/aws/cfn/schemas/aws/iotwireless/fuotatask.json new file mode 100644 index 00000000..d35c8304 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/fuotatask.json @@ -0,0 +1,170 @@ +{ + "typeName": "AWS::IoTWireless::FuotaTask", + "description": "Create and manage FUOTA tasks.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "taggable": true, + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "LoRaWAN": { + "type": "object", + "properties": { + "StartTime": { + "description": "FUOTA task LoRaWAN start time", + "type": "string", + "maxLength": 64 + }, + "RfRegion": { + "description": "FUOTA task LoRaWAN RF region", + "type": "string", + "minLength": 1, + "maxLength": 64 + } + }, + "additionalProperties": false, + "required": [ + "RfRegion" + ] + } + }, + "properties": { + "Name": { + "description": "Name of FUOTA task", + "type": "string", + "maxLength": 256 + }, + "Description": { + "description": "FUOTA task description", + "type": "string", + "maxLength": 2048 + }, + "LoRaWAN": { + "description": "FUOTA task LoRaWAN", + "$ref": "#/definitions/LoRaWAN" + }, + "FirmwareUpdateImage": { + "description": "FUOTA task firmware update image binary S3 link", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "FirmwareUpdateRole": { + "description": "FUOTA task firmware IAM role for reading S3", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Arn": { + "description": "FUOTA task arn. Returned after successful create.", + "type": "string" + }, + "Id": { + "description": "FUOTA task id. Returned after successful create.", + "type": "string", + "maxLength": 256 + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the FUOTA task.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "FuotaTaskStatus": { + "description": "FUOTA task status. Returned after successful read.", + "type": "string" + }, + "AssociateWirelessDevice": { + "description": "Wireless device to associate. Only for update request.", + "type": "string", + "maxLength": 256 + }, + "DisassociateWirelessDevice": { + "description": "Wireless device to disassociate. Only for update request.", + "type": "string", + "maxLength": 256 + }, + "AssociateMulticastGroup": { + "description": "Multicast group to associate. Only for update request.", + "type": "string", + "maxLength": 256 + }, + "DisassociateMulticastGroup": { + "description": "Multicast group to disassociate. Only for update request.", + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "LoRaWAN", + "FirmwareUpdateImage", + "FirmwareUpdateRole" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/FuotaTaskStatus", + "/properties/LoRaWAN/StartTime" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateFuotaTask", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource", + "iam:GetRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetFuotaTask", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "iotwireless:UpdateFuotaTask", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource", + "iotwireless:AssociateMulticastGroupWithFuotaTask", + "iotwireless:DisassociateMulticastGroupFromFuotaTask", + "iotwireless:AssociateWirelessDeviceWithFuotaTask", + "iotwireless:DisassociateWirelessDeviceFromFuotaTask" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteFuotaTask" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListFuotaTasks", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/multicastgroup.json b/internal/aws/cfn/schemas/aws/iotwireless/multicastgroup.json new file mode 100644 index 00000000..fc795352 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/multicastgroup.json @@ -0,0 +1,152 @@ +{ + "typeName": "AWS::IoTWireless::MulticastGroup", + "description": "Create and manage Multicast groups.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "taggable": true, + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "LoRaWAN": { + "type": "object", + "properties": { + "RfRegion": { + "description": "Multicast group LoRaWAN RF region", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "DlClass": { + "description": "Multicast group LoRaWAN DL Class", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "NumberOfDevicesRequested": { + "description": "Multicast group number of devices requested. Returned after successful read.", + "type": "integer" + }, + "NumberOfDevicesInGroup": { + "description": "Multicast group number of devices in group. Returned after successful read.", + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "RfRegion", + "DlClass" + ] + } + }, + "properties": { + "Name": { + "description": "Name of Multicast group", + "type": "string", + "maxLength": 256 + }, + "Description": { + "description": "Multicast group description", + "type": "string", + "maxLength": 2048 + }, + "LoRaWAN": { + "description": "Multicast group LoRaWAN", + "$ref": "#/definitions/LoRaWAN" + }, + "Arn": { + "description": "Multicast group arn. Returned after successful create.", + "type": "string" + }, + "Id": { + "description": "Multicast group id. Returned after successful create.", + "type": "string", + "maxLength": 256 + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the Multicast group.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Status": { + "description": "Multicast group status. Returned after successful read.", + "type": "string" + }, + "AssociateWirelessDevice": { + "description": "Wireless device to associate. Only for update request.", + "type": "string", + "maxLength": 256 + }, + "DisassociateWirelessDevice": { + "description": "Wireless device to disassociate. Only for update request.", + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "LoRaWAN" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/Status", + "/properties/LoRaWAN/NumberOfDevicesRequested", + "/properties/LoRaWAN/NumberOfDevicesInGroup" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateMulticastGroup", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetMulticastGroup", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotwireless:UpdateMulticastGroup", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource", + "iotwireless:AssociateWirelessDeviceWithMulticastGroup", + "iotwireless:DisassociateWirelessDeviceFromMulticastGroup" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteMulticastGroup" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListMulticastGroups", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/networkanalyzerconfiguration.json b/internal/aws/cfn/schemas/aws/iotwireless/networkanalyzerconfiguration.json new file mode 100644 index 00000000..3e786449 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/networkanalyzerconfiguration.json @@ -0,0 +1,157 @@ +{ + "typeName": "AWS::IoTWireless::NetworkAnalyzerConfiguration", + "description": "Create and manage NetworkAnalyzerConfiguration resource.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "WirelessDeviceFrameInfo": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "LogLevel": { + "type": "string", + "enum": [ + "INFO", + "ERROR", + "DISABLED" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of the network analyzer configuration", + "type": "string", + "pattern": "^[a-zA-Z0-9-_]+$", + "maxLength": 1024 + }, + "Description": { + "description": "The description of the new resource", + "type": "string", + "maxLength": 2048 + }, + "TraceContent": { + "description": "Trace content for your wireless gateway and wireless device resources", + "type": "object", + "additionalProperties": false, + "properties": { + "WirelessDeviceFrameInfo": { + "$ref": "#/definitions/WirelessDeviceFrameInfo" + }, + "LogLevel": { + "$ref": "#/definitions/LogLevel" + } + } + }, + "WirelessDevices": { + "description": "List of wireless gateway resources that have been added to the network analyzer configuration", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "maxItems": 250 + }, + "WirelessGateways": { + "description": "List of wireless gateway resources that have been added to the network analyzer configuration", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + }, + "maxItems": 250 + }, + "Arn": { + "description": "Arn for network analyzer configuration, Returned upon successful create.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateNetworkAnalyzerConfiguration", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetNetworkAnalyzerConfiguration", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotwireless:UpdateNetworkAnalyzerConfiguration", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteNetworkAnalyzerConfiguration" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListNetworkAnalyzerConfigurations", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/partneraccount.json b/internal/aws/cfn/schemas/aws/iotwireless/partneraccount.json new file mode 100644 index 00000000..ad534200 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/partneraccount.json @@ -0,0 +1,166 @@ +{ + "typeName": "AWS::IoTWireless::PartnerAccount", + "description": "Create and manage partner account", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "SidewalkAccountInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "AppServerPrivateKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{64}", + "minLength": 1, + "maxLength": 4096 + } + }, + "required": [ + "AppServerPrivateKey" + ] + }, + "SidewalkAccountInfoWithFingerprint": { + "type": "object", + "additionalProperties": false, + "properties": { + "AmazonId": { + "type": "string", + "maxLength": 2048 + }, + "Fingerprint": { + "type": "string", + "pattern": "[a-fA-F0-9]{64}", + "minLength": 64, + "maxLength": 64 + }, + "Arn": { + "type": "string" + } + } + }, + "SidewalkUpdateAccount": { + "type": "object", + "additionalProperties": false, + "properties": { + "AppServerPrivateKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{64}", + "minLength": 1, + "maxLength": 4096 + } + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Sidewalk": { + "description": "The Sidewalk account credentials.", + "$ref": "#/definitions/SidewalkAccountInfo" + }, + "PartnerAccountId": { + "description": "The partner account ID to disassociate from the AWS account", + "type": "string", + "maxLength": 256 + }, + "PartnerType": { + "description": "The partner type", + "type": "string", + "enum": [ + "Sidewalk" + ] + }, + "SidewalkResponse": { + "description": "The Sidewalk account credentials.", + "$ref": "#/definitions/SidewalkAccountInfoWithFingerprint" + }, + "AccountLinked": { + "description": "Whether the partner account is linked to the AWS account.", + "type": "boolean" + }, + "SidewalkUpdate": { + "description": "The Sidewalk account credentials.", + "$ref": "#/definitions/SidewalkUpdateAccount" + }, + "Fingerprint": { + "description": "The fingerprint of the Sidewalk application server private key.", + "type": "string" + }, + "Arn": { + "description": "PartnerAccount arn. Returned after successful create.", + "type": "string" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the destination.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Fingerprint" + ], + "writeOnlyProperties": [ + "/properties/SidewalkUpdate", + "/properties/Sidewalk" + ], + "createOnlyProperties": [ + "/properties/PartnerAccountId" + ], + "primaryIdentifier": [ + "/properties/PartnerAccountId" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotwireless:AssociateAwsAccountWithPartnerAccount", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetPartnerAccount", + "iotwireless:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListPartnerAccounts", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotwireless:UpdatePartnerAccount", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DisassociateAwsAccountFromPartnerAccount" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/serviceprofile.json b/internal/aws/cfn/schemas/aws/iotwireless/serviceprofile.json new file mode 100644 index 00000000..82c3e4b8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/serviceprofile.json @@ -0,0 +1,168 @@ +{ + "typeName": "AWS::IoTWireless::ServiceProfile", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "LoRaWANServiceProfile": { + "type": "object", + "additionalProperties": false, + "properties": { + "UlRate": { + "type": "integer" + }, + "UlBucketSize": { + "type": "integer" + }, + "UlRatePolicy": { + "type": "string" + }, + "DlRate": { + "type": "integer" + }, + "DlBucketSize": { + "type": "integer" + }, + "DlRatePolicy": { + "type": "string" + }, + "AddGwMetadata": { + "type": "boolean" + }, + "DevStatusReqFreq": { + "type": "integer" + }, + "ReportDevStatusBattery": { + "type": "boolean" + }, + "ReportDevStatusMargin": { + "type": "boolean" + }, + "DrMin": { + "type": "integer" + }, + "DrMax": { + "type": "integer" + }, + "ChannelMask": { + "type": "string" + }, + "PrAllowed": { + "type": "boolean" + }, + "HrAllowed": { + "type": "boolean" + }, + "RaAllowed": { + "type": "boolean" + }, + "NwkGeoLoc": { + "type": "boolean" + }, + "TargetPer": { + "type": "integer" + }, + "MinGwDiversity": { + "type": "integer" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of service profile", + "type": "string", + "maxLength": 256 + }, + "LoRaWAN": { + "description": "LoRaWAN supports all LoRa specific attributes for service profile for CreateServiceProfile operation", + "$ref": "#/definitions/LoRaWANServiceProfile" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the service profile.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "Service profile Arn. Returned after successful create.", + "type": "string" + }, + "Id": { + "description": "Service profile Id. Returned after successful create.", + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/LoRaWAN/UlRate", + "/properties/LoRaWAN/UlBucketSize", + "/properties/LoRaWAN/UlRatePolicy", + "/properties/LoRaWAN/DlRate", + "/properties/LoRaWAN/DlBucketSize", + "/properties/LoRaWAN/DlRatePolicy", + "/properties/LoRaWAN/DevStatusReqFreq", + "/properties/LoRaWAN/ReportDevStatusBattery", + "/properties/LoRaWAN/ReportDevStatusMargin", + "/properties/LoRaWAN/DrMin", + "/properties/LoRaWAN/DrMax", + "/properties/LoRaWAN/ChannelMask", + "/properties/LoRaWAN/HrAllowed", + "/properties/LoRaWAN/NwkGeoLoc", + "/properties/LoRaWAN/TargetPer", + "/properties/LoRaWAN/MinGwDiversity" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateServiceProfile", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetServiceProfile", + "iotwireless:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteServiceProfile" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListServiceProfiles", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/taskdefinition.json b/internal/aws/cfn/schemas/aws/iotwireless/taskdefinition.json new file mode 100644 index 00000000..18fda4c2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/taskdefinition.json @@ -0,0 +1,182 @@ +{ + "typeName": "AWS::IoTWireless::TaskDefinition", + "description": "Creates a gateway task definition.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "LoRaWANGatewayVersion": { + "type": "object", + "additionalProperties": false, + "properties": { + "PackageVersion": { + "type": "string", + "minLength": 1, + "maxLength": 32 + }, + "Model": { + "type": "string", + "minLength": 1, + "maxLength": 4096 + }, + "Station": { + "type": "string", + "minLength": 1, + "maxLength": 4096 + } + } + }, + "LoRaWANUpdateGatewayTaskCreate": { + "type": "object", + "additionalProperties": false, + "properties": { + "UpdateSignature": { + "type": "string", + "minLength": 1, + "maxLength": 4096 + }, + "SigKeyCrc": { + "type": "integer", + "format": "int64" + }, + "CurrentVersion": { + "$ref": "#/definitions/LoRaWANGatewayVersion" + }, + "UpdateVersion": { + "$ref": "#/definitions/LoRaWANGatewayVersion" + } + } + }, + "UpdateWirelessGatewayTaskCreate": { + "type": "object", + "additionalProperties": false, + "properties": { + "UpdateDataSource": { + "type": "string", + "minLength": 1, + "maxLength": 4096 + }, + "UpdateDataRole": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "LoRaWAN": { + "$ref": "#/definitions/LoRaWANUpdateGatewayTaskCreate" + } + } + }, + "LoRaWANUpdateGatewayTaskEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "CurrentVersion": { + "$ref": "#/definitions/LoRaWANGatewayVersion" + }, + "UpdateVersion": { + "$ref": "#/definitions/LoRaWANGatewayVersion" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the new resource.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "AutoCreateTasks": { + "description": "Whether to automatically create tasks using this task definition for all gateways with the specified current version. If false, the task must me created by calling CreateWirelessGatewayTask.", + "type": "boolean" + }, + "Update": { + "description": "Information about the gateways to update.", + "$ref": "#/definitions/UpdateWirelessGatewayTaskCreate" + }, + "LoRaWANUpdateGatewayTaskEntry": { + "description": "The list of task definitions.", + "$ref": "#/definitions/LoRaWANUpdateGatewayTaskEntry" + }, + "Id": { + "description": "The ID of the new wireless gateway task definition", + "type": "string", + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + }, + "TaskDefinitionType": { + "description": "A filter to list only the wireless gateway task definitions that use this task definition type", + "type": "string", + "enum": [ + "UPDATE" + ] + }, + "Arn": { + "description": "TaskDefinition arn. Returned after successful create.", + "type": "string" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the destination.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "AutoCreateTasks" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateWirelessGatewayTaskDefinition", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource", + "iam:GetRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetWirelessGatewayTaskDefinition", + "iotwireless:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteWirelessGatewayTaskDefinition" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListWirelessGatewayTaskDefinitions", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/wirelessdevice.json b/internal/aws/cfn/schemas/aws/iotwireless/wirelessdevice.json new file mode 100644 index 00000000..e43748dd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/wirelessdevice.json @@ -0,0 +1,357 @@ +{ + "typeName": "AWS::IoTWireless::WirelessDevice", + "description": "Create and manage wireless gateways, including LoRa gateways.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "OtaaV10x": { + "type": "object", + "additionalProperties": false, + "properties": { + "AppKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + }, + "AppEui": { + "type": "string", + "pattern": "[a-fA-F0-9]{16}" + } + }, + "required": [ + "AppKey", + "AppEui" + ] + }, + "OtaaV11": { + "type": "object", + "additionalProperties": false, + "properties": { + "AppKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + }, + "NwkKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + }, + "JoinEui": { + "type": "string", + "pattern": "[a-fA-F0-9]{16}" + } + }, + "required": [ + "AppKey", + "NwkKey", + "JoinEui" + ] + }, + "SessionKeysAbpV11": { + "type": "object", + "additionalProperties": false, + "properties": { + "FNwkSIntKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + }, + "SNwkSIntKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + }, + "NwkSEncKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + }, + "AppSKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + } + }, + "required": [ + "FNwkSIntKey", + "SNwkSIntKey", + "NwkSEncKey", + "AppSKey" + ] + }, + "AbpV11": { + "type": "object", + "additionalProperties": false, + "properties": { + "DevAddr": { + "type": "string", + "pattern": "[a-fA-F0-9]{8}" + }, + "SessionKeys": { + "$ref": "#/definitions/SessionKeysAbpV11" + } + }, + "required": [ + "DevAddr", + "SessionKeys" + ] + }, + "SessionKeysAbpV10x": { + "type": "object", + "additionalProperties": false, + "properties": { + "NwkSKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + }, + "AppSKey": { + "type": "string", + "pattern": "[a-fA-F0-9]{32}" + } + }, + "required": [ + "NwkSKey", + "AppSKey" + ] + }, + "AbpV10x": { + "type": "object", + "additionalProperties": false, + "properties": { + "DevAddr": { + "type": "string", + "pattern": "[a-fA-F0-9]{8}" + }, + "SessionKeys": { + "$ref": "#/definitions/SessionKeysAbpV10x" + } + }, + "required": [ + "DevAddr", + "SessionKeys" + ] + }, + "FPorts": { + "type": "object", + "additionalProperties": false, + "properties": { + "Applications": { + "description": "A list of optional LoRaWAN application information, which can be used for geolocation.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Application" + } + } + } + }, + "LoRaWANDevice": { + "type": "object", + "additionalProperties": false, + "properties": { + "DevEui": { + "type": "string", + "pattern": "[a-f0-9]{16}" + }, + "DeviceProfileId": { + "type": "string", + "maxLength": 256 + }, + "ServiceProfileId": { + "type": "string", + "maxLength": 256 + }, + "OtaaV11": { + "$ref": "#/definitions/OtaaV11" + }, + "OtaaV10x": { + "$ref": "#/definitions/OtaaV10x" + }, + "AbpV11": { + "$ref": "#/definitions/AbpV11" + }, + "AbpV10x": { + "$ref": "#/definitions/AbpV10x" + }, + "FPorts": { + "$ref": "#/definitions/FPorts" + } + }, + "oneOf": [ + { + "required": [ + "OtaaV11" + ] + }, + { + "required": [ + "OtaaV10x" + ] + }, + { + "required": [ + "AbpV11" + ] + }, + { + "required": [ + "AbpV10x" + ] + } + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "Application": { + "description": "LoRaWAN application configuration, which can be used to perform geolocation.", + "type": "object", + "properties": { + "DestinationName": { + "description": "The name of the position data destination that describes the AWS IoT rule that processes the device's position data for use by AWS IoT Core for LoRaWAN.", + "type": "string", + "pattern": "[a-zA-Z0-9-_]+", + "maxLength": 128 + }, + "FPort": { + "description": "The Fport value.", + "type": "integer", + "minimum": 1, + "maximum": 223 + }, + "Type": { + "description": "Application type, which can be specified to obtain real-time position information of your LoRaWAN device.", + "type": "string", + "enum": [ + "SemtechGeolocation" + ] + } + }, + "additionalProperties": false + } + }, + "properties": { + "Type": { + "description": "Wireless device type, currently only Sidewalk and LoRa", + "type": "string", + "enum": [ + "Sidewalk", + "LoRaWAN" + ] + }, + "Name": { + "description": "Wireless device name", + "type": "string", + "maxLength": 256 + }, + "Description": { + "description": "Wireless device description", + "type": "string", + "maxLength": 2048 + }, + "DestinationName": { + "description": "Wireless device destination name", + "type": "string", + "maxLength": 128 + }, + "LoRaWAN": { + "description": "The combination of Package, Station and Model which represents the version of the LoRaWAN Wireless Device.", + "$ref": "#/definitions/LoRaWANDevice" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the device. Currently not supported, will not create if tags are passed.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "Wireless device arn. Returned after successful create.", + "type": "string" + }, + "Id": { + "description": "Wireless device Id. Returned after successful create.", + "type": "string", + "maxLength": 256 + }, + "ThingArn": { + "description": "Thing arn. Passed into update to associate Thing with Wireless device.", + "type": "string" + }, + "ThingName": { + "description": "Thing Arn. If there is a Thing created, this can be returned with a Get call.", + "type": "string" + }, + "LastUplinkReceivedAt": { + "description": "The date and time when the most recent uplink was received.", + "type": "string" + }, + "Positioning": { + "description": "FPort values for the GNSS, stream, and ClockSync functions of the positioning information.", + "type": "string", + "enum": [ + "Enabled", + "Disabled" + ] + } + }, + "additionalProperties": false, + "required": [ + "Type", + "DestinationName" + ], + "readOnlyProperties": [ + "/properties/ThingName", + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateWirelessDevice", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetWirelessDevice", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotwireless:UpdateWirelessDevice", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource", + "iotwireless:AssociateWirelessDeviceWithThing" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteWirelessDevice", + "iotwireless:DisassociateWirelessDeviceFromThing" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListWirelessDevices", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/wirelessdeviceimporttask.json b/internal/aws/cfn/schemas/aws/iotwireless/wirelessdeviceimporttask.json new file mode 100644 index 00000000..8d7fc05e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/wirelessdeviceimporttask.json @@ -0,0 +1,215 @@ +{ + "typeName": "AWS::IoTWireless::WirelessDeviceImportTask", + "description": "Wireless Device Import Tasks", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "DeviceCreationFileList": { + "description": "sidewalk create device's file path", + "type": "array", + "items": { + "type": "string", + "maxLength": 1024 + } + }, + "Role": { + "description": "sidewalk role", + "type": "string", + "maxLength": 2048 + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Id": { + "description": "Id for Wireless Device Import Task, Returned upon successful start.", + "type": "string", + "maxLength": 256 + }, + "Arn": { + "description": "Arn for Wireless Device Import Task, Returned upon successful start.", + "type": "string", + "maxLength": 128 + }, + "DestinationName": { + "description": "Destination Name for import task", + "type": "string", + "pattern": "[a-zA-Z0-9-_]+", + "maxLength": 128 + }, + "CreationDate": { + "description": "CreationDate for import task", + "type": "string" + }, + "Sidewalk": { + "description": "sidewalk contain file for created device and role", + "type": "object", + "additionalProperties": false, + "properties": { + "SidewalkManufacturingSn": { + "type": "string", + "maxLength": 64 + }, + "DeviceCreationFile": { + "type": "string", + "maxLength": 1024 + }, + "DeviceCreationFileList": { + "$ref": "#/definitions/DeviceCreationFileList" + }, + "Role": { + "$ref": "#/definitions/Role" + } + }, + "oneOf": [ + { + "allOf": [ + { + "required": [ + "DeviceCreationFile" + ] + }, + { + "required": [ + "Role" + ] + } + ] + }, + { + "required": [ + "SidewalkManufacturingSn" + ] + } + ] + }, + "Status": { + "description": "Status for import task", + "type": "string", + "enum": [ + "INITIALIZING", + "INITIALIZED", + "PENDING", + "COMPLETE", + "FAILED", + "DELETING" + ] + }, + "StatusReason": { + "description": "StatusReason for import task", + "type": "string" + }, + "InitializedImportedDevicesCount": { + "description": "Initialized Imported Devices Count", + "type": "integer" + }, + "PendingImportedDevicesCount": { + "description": "Pending Imported Devices Count", + "type": "integer" + }, + "OnboardedImportedDevicesCount": { + "description": "Onboarded Imported Devices Count", + "type": "integer" + }, + "FailedImportedDevicesCount": { + "description": "Failed Imported Devices Count", + "type": "integer" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "DestinationName", + "Sidewalk" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/CreationDate", + "/properties/Status", + "/properties/StatusReason", + "/properties/InitializedImportedDevicesCount", + "/properties/PendingImportedDevicesCount", + "/properties/OnboardedImportedDevicesCount", + "/properties/FailedImportedDevicesCount", + "/properties/Sidewalk/DeviceCreationFileList" + ], + "writeOnlyProperties": [ + "/properties/Sidewalk/DeviceCreationFile", + "/properties/Sidewalk/SidewalkManufacturingSn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "iotwireless:StartWirelessDeviceImportTask", + "iotwireless:StartSingleWirelessDeviceImportTask", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetWirelessDeviceImportTask", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotwireless:UpdateWirelessDeviceImportTask", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteWirelessDeviceImportTask" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListWirelessDeviceImportTasks", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/iotwireless/wirelessgateway.json b/internal/aws/cfn/schemas/aws/iotwireless/wirelessgateway.json new file mode 100644 index 00000000..09cf5d8c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/iotwireless/wirelessgateway.json @@ -0,0 +1,135 @@ +{ + "typeName": "AWS::IoTWireless::WirelessGateway", + "description": "Create and manage wireless gateways, including LoRa gateways.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "LoRaWANGateway": { + "type": "object", + "additionalProperties": false, + "properties": { + "GatewayEui": { + "type": "string", + "pattern": "^(([0-9A-Fa-f]{2}-){7}|([0-9A-Fa-f]{2}:){7}|([0-9A-Fa-f]{2}\\s){7}|([0-9A-Fa-f]{2}){7})([0-9A-Fa-f]{2})$" + }, + "RfRegion": { + "type": "string", + "maxLength": 64 + } + }, + "required": [ + "GatewayEui", + "RfRegion" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of Wireless Gateway.", + "type": "string", + "maxLength": 256 + }, + "Description": { + "description": "Description of Wireless Gateway.", + "type": "string", + "maxLength": 2048 + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the gateway.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "LoRaWAN": { + "description": "The combination of Package, Station and Model which represents the version of the LoRaWAN Wireless Gateway.", + "$ref": "#/definitions/LoRaWANGateway" + }, + "Arn": { + "description": "Arn for Wireless Gateway. Returned upon successful create.", + "type": "string" + }, + "Id": { + "description": "Id for Wireless Gateway. Returned upon successful create.", + "type": "string", + "maxLength": 256 + }, + "ThingArn": { + "description": "Thing Arn. Passed into Update to associate a Thing with the Wireless Gateway.", + "type": "string" + }, + "ThingName": { + "description": "Thing Name. If there is a Thing created, this can be returned with a Get call.", + "type": "string" + }, + "LastUplinkReceivedAt": { + "description": "The date and time when the most recent uplink was received.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "LoRaWAN" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iotwireless:CreateWirelessGateway", + "iotwireless:TagResource", + "iotwireless:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "iotwireless:GetWirelessGateway", + "iotwireless:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iotwireless:UpdateWirelessGateway", + "iotwireless:UntagResource", + "iotwireless:ListTagsForResource", + "iotwireless:AssociateWirelessGatewayWithThing" + ] + }, + "delete": { + "permissions": [ + "iotwireless:DeleteWirelessGateway", + "iotwireless:DisassociateWirelessGatewayFromThing" + ] + }, + "list": { + "permissions": [ + "iotwireless:ListWirelessGateways", + "iotwireless:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ivs/channel.json b/internal/aws/cfn/schemas/aws/ivs/channel.json new file mode 100644 index 00000000..57fd7b52 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ivs/channel.json @@ -0,0 +1,160 @@ +{ + "typeName": "AWS::IVS::Channel", + "description": "Resource Type definition for AWS::IVS::Channel", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "description": "Channel ARN is automatically generated on creation and assigned as the unique identifier.", + "type": "string", + "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:channel/[a-zA-Z0-9-]+$", + "minLength": 1, + "maxLength": 128 + }, + "Name": { + "description": "Channel", + "type": "string", + "minLength": 0, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-_]*$", + "default": "-" + }, + "Authorized": { + "description": "Whether the channel is authorized.", + "type": "boolean", + "default": false + }, + "InsecureIngest": { + "description": "Whether the channel allows insecure ingest.", + "type": "boolean", + "default": false + }, + "LatencyMode": { + "description": "Channel latency mode.", + "type": "string", + "enum": [ + "NORMAL", + "LOW" + ], + "default": "LOW" + }, + "Type": { + "description": "Channel type, which determines the allowable resolution and bitrate. If you exceed the allowable resolution or bitrate, the stream probably will disconnect immediately.", + "type": "string", + "enum": [ + "STANDARD", + "BASIC", + "ADVANCED_SD", + "ADVANCED_HD" + ], + "default": "STANDARD" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the asset model.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "PlaybackUrl": { + "description": "Channel Playback URL.", + "type": "string" + }, + "IngestEndpoint": { + "description": "Channel ingest endpoint, part of the definition of an ingest server, used when you set up streaming software.", + "type": "string" + }, + "RecordingConfigurationArn": { + "description": "Recording Configuration ARN. A value other than an empty string indicates that recording is enabled. Default: \"\" (recording is disabled).", + "type": "string", + "default": "", + "pattern": "^$|arn:aws:ivs:[a-z0-9-]+:[0-9]+:recording-configuration/[a-zA-Z0-9-]+$", + "minLength": 0, + "maxLength": 128 + }, + "Preset": { + "description": "Optional transcode preset for the channel. This is selectable only for ADVANCED_HD and ADVANCED_SD channel types. For those channel types, the default preset is HIGHER_BANDWIDTH_DELIVERY. For other channel types (BASIC and STANDARD), preset is the empty string (\"\").", + "type": "string", + "enum": [ + "HIGHER_BANDWIDTH_DELIVERY", + "CONSTRAINED_BANDWIDTH_DELIVERY" + ] + } + }, + "additionalProperties": false, + "required": [], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/PlaybackUrl", + "/properties/IngestEndpoint" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ivs:CreateChannel", + "ivs:TagResource" + ] + }, + "read": { + "permissions": [ + "ivs:GetChannel", + "ivs:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ivs:GetChannel", + "ivs:UpdateChannel", + "ivs:TagResource", + "ivs:UnTagResource", + "ivs:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "ivs:DeleteChannel", + "ivs:UnTagResource" + ] + }, + "list": { + "permissions": [ + "ivs:ListChannels", + "ivs:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ivs/playbackkeypair.json b/internal/aws/cfn/schemas/aws/ivs/playbackkeypair.json new file mode 100644 index 00000000..7845d9aa --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ivs/playbackkeypair.json @@ -0,0 +1,116 @@ +{ + "typeName": "AWS::IVS::PlaybackKeyPair", + "description": "Resource Type definition for AWS::IVS::PlaybackKeyPair", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Name": { + "description": "An arbitrary string (a nickname) assigned to a playback key pair that helps the customer identify that resource. The value does not need to be unique.", + "type": "string", + "pattern": "^[a-zA-Z0-9-_]*$", + "minLength": 0, + "maxLength": 128 + }, + "PublicKeyMaterial": { + "description": "The public portion of a customer-generated key pair.", + "type": "string" + }, + "Fingerprint": { + "description": "Key-pair identifier.", + "type": "string" + }, + "Arn": { + "description": "Key-pair identifier.", + "type": "string", + "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:playback-key/[a-zA-Z0-9-]+$", + "minLength": 1, + "maxLength": 128 + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the asset model.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Fingerprint" + ], + "writeOnlyProperties": [ + "/properties/PublicKeyMaterial" + ], + "createOnlyProperties": [ + "/properties/PublicKeyMaterial", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ivs:ImportPlaybackKeyPair", + "ivs:TagResource" + ] + }, + "read": { + "permissions": [ + "ivs:GetPlaybackKeyPair" + ] + }, + "update": { + "permissions": [ + "ivs:GetPlaybackKeyPair", + "ivs:ListTagsForResource", + "ivs:UntagResource", + "ivs:TagResource" + ] + }, + "delete": { + "permissions": [ + "ivs:DeletePlaybackKeyPair", + "ivs:UntagResource" + ] + }, + "list": { + "permissions": [ + "ivs:ListPlaybackKeyPairs", + "ivs:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ivs/recordingconfiguration.json b/internal/aws/cfn/schemas/aws/ivs/recordingconfiguration.json new file mode 100644 index 00000000..f76573ae --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ivs/recordingconfiguration.json @@ -0,0 +1,271 @@ +{ + "typeName": "AWS::IVS::RecordingConfiguration", + "description": "Resource Type definition for AWS::IVS::RecordingConfiguration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DestinationConfiguration": { + "description": "Recording Destination Configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "S3": { + "$ref": "#/definitions/S3DestinationConfiguration" + } + }, + "required": [] + }, + "S3DestinationConfiguration": { + "description": "Recording S3 Destination Configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "^[a-z0-9-.]+$" + } + }, + "required": [ + "BucketName" + ] + }, + "ThumbnailConfiguration": { + "description": "Recording Thumbnail Configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "RecordingMode": { + "description": "Thumbnail Recording Mode, which determines whether thumbnails are recorded at an interval or are disabled.", + "type": "string", + "enum": [ + "INTERVAL", + "DISABLED" + ], + "default": "INTERVAL" + }, + "TargetIntervalSeconds": { + "description": "Target Interval Seconds defines the interval at which thumbnails are recorded. This field is required if RecordingMode is INTERVAL.", + "type": "integer", + "minimum": 1, + "maximum": 60, + "default": 60 + }, + "Resolution": { + "description": "Resolution indicates the desired resolution of recorded thumbnails.", + "type": "string", + "enum": [ + "FULL_HD", + "HD", + "SD", + "LOWEST_RESOLUTION" + ] + }, + "Storage": { + "description": "Storage indicates the format in which thumbnails are recorded.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 2, + "items": { + "type": "string", + "enum": [ + "SEQUENTIAL", + "LATEST" + ] + } + } + }, + "required": [] + }, + "RenditionConfiguration": { + "description": "Rendition Configuration describes which renditions should be recorded for a stream.", + "type": "object", + "additionalProperties": false, + "properties": { + "RenditionSelection": { + "description": "Resolution Selection indicates which set of renditions are recorded for a stream.", + "type": "string", + "enum": [ + "ALL", + "NONE", + "CUSTOM" + ], + "default": "ALL" + }, + "Renditions": { + "description": "Renditions indicates which renditions are recorded for a stream.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 4, + "items": { + "type": "string", + "enum": [ + "FULL_HD", + "HD", + "SD", + "LOWEST_RESOLUTION" + ] + } + } + }, + "required": [] + } + }, + "properties": { + "Arn": { + "description": "Recording Configuration ARN is automatically generated on creation and assigned as the unique identifier.", + "type": "string", + "pattern": "^arn:aws[-a-z]*:ivs:[a-z0-9-]+:[0-9]+:recording-configuration/[a-zA-Z0-9-]+$", + "minLength": 0, + "maxLength": 128 + }, + "Name": { + "description": "Recording Configuration Name.", + "type": "string", + "minLength": 0, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-_]*$" + }, + "State": { + "description": "Recording Configuration State.", + "type": "string", + "enum": [ + "CREATING", + "CREATE_FAILED", + "ACTIVE" + ] + }, + "RecordingReconnectWindowSeconds": { + "description": "Recording Reconnect Window Seconds. (0 means disabled)", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 300 + }, + "DestinationConfiguration": { + "$ref": "#/definitions/DestinationConfiguration" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the asset model.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ThumbnailConfiguration": { + "$ref": "#/definitions/ThumbnailConfiguration" + }, + "RenditionConfiguration": { + "$ref": "#/definitions/RenditionConfiguration" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "DestinationConfiguration" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/State" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/DestinationConfiguration", + "/properties/DestinationConfiguration/S3", + "/properties/DestinationConfiguration/S3/BucketName", + "/properties/RecordingReconnectWindowSeconds", + "/properties/ThumbnailConfiguration", + "/properties/ThumbnailConfiguration/RecordingMode", + "/properties/ThumbnailConfiguration/TargetIntervalSeconds", + "/properties/ThumbnailConfiguration/Storage", + "/properties/ThumbnailConfiguration/Resolution", + "/properties/RenditionConfiguration", + "/properties/RenditionConfiguration/RenditionSelection", + "/properties/RenditionConfiguration/Renditions" + ], + "handlers": { + "create": { + "permissions": [ + "ivs:CreateRecordingConfiguration", + "ivs:GetRecordingConfiguration", + "ivs:TagResource", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy", + "iam:AttachRolePolicy", + "s3:ListBucket", + "s3:GetBucketLocation", + "cloudformation:ListExports" + ] + }, + "read": { + "permissions": [ + "ivs:GetRecordingConfiguration", + "s3:GetBucketLocation", + "ivs:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ivs:GetRecordingConfiguration", + "sts:AssumeRole", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy", + "iam:AttachRolePolicy", + "s3:ListBucket", + "ivs:TagResource", + "ivs:UntagResource", + "ivs:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "ivs:DeleteRecordingConfiguration", + "ivs:UntagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "list": { + "permissions": [ + "ivs:ListRecordingConfigurations", + "s3:GetBucketLocation", + "ivs:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ivs/streamkey.json b/internal/aws/cfn/schemas/aws/ivs/streamkey.json new file mode 100644 index 00000000..7bb60fda --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ivs/streamkey.json @@ -0,0 +1,122 @@ +{ + "typeName": "AWS::IVS::StreamKey", + "description": "Resource Type definition for AWS::IVS::StreamKey", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "description": "Stream Key ARN is automatically generated on creation and assigned as the unique identifier.", + "type": "string", + "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:stream-key/[a-zA-Z0-9-]+$", + "minLength": 1, + "maxLength": 128 + }, + "ChannelArn": { + "description": "Channel ARN for the stream.", + "type": "string", + "pattern": "^arn:aws:ivs:[a-z0-9-]+:[0-9]+:channel/[a-zA-Z0-9-]+$" + }, + "Tags": { + "description": "A list of key-value pairs that contain metadata for the asset model.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Value": { + "description": "Stream-key value.", + "type": "string" + } + }, + "additionalProperties": false, + "replacementStrategy": "delete_then_create", + "required": [ + "ChannelArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/ChannelArn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Value" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ivs:TagResource", + "ivs:UntagResource", + "ivs:CreateStreamKey" + ] + }, + "read": { + "permissions": [ + "ivs:GetStreamKey", + "ivs:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ivs:GetStreamKey", + "ivs:TagResource", + "ivs:UntagResource", + "ivs:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "ivs:DeleteStreamKey", + "ivs:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ChannelArn": { + "$ref": "resource-schema.json#/properties/ChannelArn" + } + }, + "required": [ + "ChannelArn" + ] + }, + "permissions": [ + "ivs:ListStreamKeys", + "ivs:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ivschat/loggingconfiguration.json b/internal/aws/cfn/schemas/aws/ivschat/loggingconfiguration.json new file mode 100644 index 00000000..c194448c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ivschat/loggingconfiguration.json @@ -0,0 +1,225 @@ +{ + "typeName": "AWS::IVSChat::LoggingConfiguration", + "description": "Resource type definition for AWS::IVSChat::LoggingConfiguration.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ivschat.git", + "definitions": { + "DestinationConfiguration": { + "description": "Destination configuration for IVS Chat logging.", + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogs": { + "$ref": "#/definitions/CloudWatchLogsDestinationConfiguration" + }, + "Firehose": { + "$ref": "#/definitions/FirehoseDestinationConfiguration" + }, + "S3": { + "$ref": "#/definitions/S3DestinationConfiguration" + } + }, + "required": [] + }, + "CloudWatchLogsDestinationConfiguration": { + "description": "CloudWatch destination configuration for IVS Chat logging.", + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroupName": { + "description": "Name of the Amazon CloudWatch Logs log group where chat activity will be logged.", + "type": "string", + "pattern": "^[\\.\\-_/#A-Za-z0-9]+$", + "minLength": 1, + "maxLength": 512 + } + }, + "required": [ + "LogGroupName" + ] + }, + "FirehoseDestinationConfiguration": { + "description": "Kinesis Firehose destination configuration for IVS Chat logging.", + "type": "object", + "additionalProperties": false, + "properties": { + "DeliveryStreamName": { + "description": "Name of the Amazon Kinesis Firehose delivery stream where chat activity will be logged.", + "type": "string", + "pattern": "^[a-zA-Z0-9_.-]+$", + "minLength": 1, + "maxLength": 64 + } + }, + "required": [ + "DeliveryStreamName" + ] + }, + "S3DestinationConfiguration": { + "description": "S3 destination configuration for IVS Chat logging.", + "type": "object", + "additionalProperties": false, + "properties": { + "BucketName": { + "description": "Name of the Amazon S3 bucket where chat activity will be logged.", + "type": "string", + "pattern": "^[a-z0-9-.]+$", + "minLength": 3, + "maxLength": 63 + } + }, + "required": [ + "BucketName" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "description": "LoggingConfiguration ARN is automatically generated on creation and assigned as the unique identifier.", + "type": "string", + "pattern": "^arn:aws:ivschat:[a-z0-9-]+:[0-9]+:logging-configuration/[a-zA-Z0-9-]+$", + "minLength": 1, + "maxLength": 128 + }, + "Id": { + "description": "The system-generated ID of the logging configuration.", + "type": "string", + "pattern": "^[a-zA-Z0-9]+$", + "minLength": 12, + "maxLength": 12 + }, + "DestinationConfiguration": { + "$ref": "#/definitions/DestinationConfiguration" + }, + "Name": { + "description": "The name of the logging configuration. The value does not need to be unique.", + "type": "string", + "pattern": "^[a-zA-Z0-9-_]*$", + "minLength": 0, + "maxLength": 128 + }, + "State": { + "description": "The state of the logging configuration. When the state is ACTIVE, the configuration is ready to log chat content.", + "type": "string", + "enum": [ + "CREATING", + "CREATE_FAILED", + "DELETING", + "DELETE_FAILED", + "UPDATING", + "UPDATING_FAILED", + "ACTIVE" + ] + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "DestinationConfiguration" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/State" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ivschat:CreateLoggingConfiguration", + "ivschat:GetLoggingConfiguration", + "logs:CreateLogDelivery", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "iam:CreateServiceLinkedRole", + "firehose:TagDeliveryStream", + "ivschat:TagResource" + ] + }, + "read": { + "permissions": [ + "ivschat:GetLoggingConfiguration", + "ivschat:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ivschat:UpdateLoggingConfiguration", + "ivschat:GetLoggingConfiguration", + "ivschat:TagResource", + "ivschat:UntagResource", + "ivschat:ListTagsForResource", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "iam:CreateServiceLinkedRole", + "firehose:TagDeliveryStream" + ] + }, + "delete": { + "permissions": [ + "ivschat:DeleteLoggingConfiguration", + "ivschat:GetLoggingConfiguration", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "ivschat:UntagResource", + "logs:GetLogDelivery" + ] + }, + "list": { + "permissions": [ + "ivschat:ListLoggingConfigurations", + "ivschat:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ivschat/room.json b/internal/aws/cfn/schemas/aws/ivschat/room.json new file mode 100644 index 00000000..65141bf2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ivschat/room.json @@ -0,0 +1,167 @@ +{ + "typeName": "AWS::IVSChat::Room", + "description": "Resource type definition for AWS::IVSChat::Room.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ivschat.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "MessageReviewHandler": { + "description": "Configuration information for optional review of messages.", + "type": "object", + "additionalProperties": false, + "properties": { + "FallbackResult": { + "description": "Specifies the fallback behavior if the handler does not return a valid response, encounters an error, or times out.", + "type": "string", + "enum": [ + "ALLOW", + "DENY" + ], + "default": "ALLOW" + }, + "Uri": { + "description": "Identifier of the message review handler.", + "type": "string", + "pattern": "^$|^arn:aws:lambda:[a-z0-9-]+:[0-9]{12}:function:.+", + "minLength": 0, + "maxLength": 170 + } + }, + "required": [] + } + }, + "properties": { + "Arn": { + "description": "Room ARN is automatically generated on creation and assigned as the unique identifier.", + "type": "string", + "pattern": "^arn:aws:ivschat:[a-z0-9-]+:[0-9]+:room/[a-zA-Z0-9-]+$", + "minLength": 1, + "maxLength": 128 + }, + "Id": { + "description": "The system-generated ID of the room.", + "type": "string", + "pattern": "^[a-zA-Z0-9]+$", + "minLength": 12, + "maxLength": 12 + }, + "Name": { + "description": "The name of the room. The value does not need to be unique.", + "type": "string", + "pattern": "^[a-zA-Z0-9-_]*$", + "minLength": 0, + "maxLength": 128 + }, + "LoggingConfigurationIdentifiers": { + "description": "Array of logging configuration identifiers attached to the room.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 50, + "items": { + "type": "string", + "pattern": "^arn:aws:ivschat:[a-z0-9-]+:[0-9]+:logging-configuration/[a-zA-Z0-9-]+$", + "minLength": 1, + "maxLength": 128 + } + }, + "MaximumMessageLength": { + "description": "The maximum number of characters in a single message.", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 500 + }, + "MaximumMessageRatePerSecond": { + "description": "The maximum number of messages per second that can be sent to the room.", + "type": "integer", + "minimum": 1, + "maximum": 10, + "default": 10 + }, + "MessageReviewHandler": { + "$ref": "#/definitions/MessageReviewHandler" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ivschat:CreateRoom", + "ivschat:TagResource" + ] + }, + "read": { + "permissions": [ + "ivschat:GetRoom", + "ivschat:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ivschat:UpdateRoom", + "ivschat:TagResource", + "ivschat:UntagResource", + "ivschat:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "ivschat:DeleteRoom", + "ivschat:UntagResource" + ] + }, + "list": { + "permissions": [ + "ivschat:ListRooms", + "ivschat:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kafkaconnect/connector.json b/internal/aws/cfn/schemas/aws/kafkaconnect/connector.json new file mode 100644 index 00000000..911e0258 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kafkaconnect/connector.json @@ -0,0 +1,574 @@ +{ + "typeName": "AWS::KafkaConnect::Connector", + "description": "Resource Type definition for AWS::KafkaConnect::Connector", + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kafkaconnect.git", + "properties": { + "Capacity": { + "$ref": "#/definitions/Capacity" + }, + "ConnectorArn": { + "description": "Amazon Resource Name for the created Connector.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn):kafkaconnect:.*" + }, + "ConnectorConfiguration": { + "description": "The configuration for the connector.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".*": { + "type": "string" + } + } + }, + "ConnectorDescription": { + "description": "A summary description of the connector.", + "type": "string", + "maxLength": 1024 + }, + "ConnectorName": { + "description": "The name of the connector.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "KafkaCluster": { + "$ref": "#/definitions/KafkaCluster" + }, + "KafkaClusterClientAuthentication": { + "$ref": "#/definitions/KafkaClusterClientAuthentication" + }, + "KafkaClusterEncryptionInTransit": { + "$ref": "#/definitions/KafkaClusterEncryptionInTransit" + }, + "KafkaConnectVersion": { + "description": "The version of Kafka Connect. It has to be compatible with both the Kafka cluster's version and the plugins.", + "type": "string" + }, + "LogDelivery": { + "$ref": "#/definitions/LogDelivery" + }, + "Plugins": { + "description": "List of plugins to use with the connector.", + "type": "array", + "uniqueItems": true, + "minItems": 1, + "items": { + "$ref": "#/definitions/Plugin" + }, + "insertionOrder": false + }, + "ServiceExecutionRoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role used by the connector to access Amazon S3 objects and other external resources.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn):iam:.*" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "WorkerConfiguration": { + "$ref": "#/definitions/WorkerConfiguration" + } + }, + "definitions": { + "ApacheKafkaCluster": { + "description": "Details of how to connect to an Apache Kafka cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "BootstrapServers": { + "description": "The bootstrap servers string of the Apache Kafka cluster.", + "type": "string" + }, + "Vpc": { + "$ref": "#/definitions/Vpc" + } + }, + "required": [ + "BootstrapServers", + "Vpc" + ] + }, + "AutoScaling": { + "description": "Details about auto scaling of a connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "MaxWorkerCount": { + "description": "The maximum number of workers for a connector.", + "type": "integer" + }, + "MinWorkerCount": { + "description": "The minimum number of workers for a connector.", + "type": "integer" + }, + "ScaleInPolicy": { + "$ref": "#/definitions/ScaleInPolicy" + }, + "ScaleOutPolicy": { + "$ref": "#/definitions/ScaleOutPolicy" + }, + "McuCount": { + "description": "Specifies how many MSK Connect Units (MCU) as the minimum scaling unit.", + "type": "integer", + "enum": [ + 1, + 2, + 4, + 8 + ] + } + }, + "required": [ + "MaxWorkerCount", + "MinWorkerCount", + "ScaleInPolicy", + "ScaleOutPolicy", + "McuCount" + ] + }, + "Capacity": { + "description": "Information about the capacity allocated to the connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "AutoScaling": { + "$ref": "#/definitions/AutoScaling" + }, + "ProvisionedCapacity": { + "$ref": "#/definitions/ProvisionedCapacity" + } + }, + "oneOf": [ + { + "required": [ + "AutoScaling" + ] + }, + { + "required": [ + "ProvisionedCapacity" + ] + } + ] + }, + "CloudWatchLogsLogDelivery": { + "description": "Details about delivering logs to Amazon CloudWatch Logs.", + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "description": "Specifies whether the logs get sent to the specified CloudWatch Logs destination.", + "type": "boolean" + }, + "LogGroup": { + "description": "The CloudWatch log group that is the destination for log delivery.", + "type": "string" + } + }, + "required": [ + "Enabled" + ] + }, + "CustomPlugin": { + "description": "Details about a custom plugin.", + "type": "object", + "additionalProperties": false, + "properties": { + "CustomPluginArn": { + "description": "The Amazon Resource Name (ARN) of the custom plugin to use.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn):kafkaconnect:.*" + }, + "Revision": { + "description": "The revision of the custom plugin to use.", + "type": "integer", + "format": "int64", + "minimum": 1 + } + }, + "required": [ + "CustomPluginArn", + "Revision" + ] + }, + "FirehoseLogDelivery": { + "description": "Details about delivering logs to Amazon Kinesis Data Firehose.", + "type": "object", + "additionalProperties": false, + "properties": { + "DeliveryStream": { + "description": "The Kinesis Data Firehose delivery stream that is the destination for log delivery.", + "type": "string" + }, + "Enabled": { + "description": "Specifies whether the logs get sent to the specified Kinesis Data Firehose delivery stream.", + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "KafkaCluster": { + "description": "Details of how to connect to the Kafka cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "ApacheKafkaCluster": { + "$ref": "#/definitions/ApacheKafkaCluster" + } + }, + "required": [ + "ApacheKafkaCluster" + ] + }, + "KafkaClusterClientAuthentication": { + "description": "Details of the client authentication used by the Kafka cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "AuthenticationType": { + "$ref": "#/definitions/KafkaClusterClientAuthenticationType" + } + }, + "required": [ + "AuthenticationType" + ] + }, + "KafkaClusterClientAuthenticationType": { + "description": "The type of client authentication used to connect to the Kafka cluster. Value NONE means that no client authentication is used.", + "type": "string", + "enum": [ + "NONE", + "IAM" + ] + }, + "KafkaClusterEncryptionInTransit": { + "description": "Details of encryption in transit to the Kafka cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "EncryptionType": { + "$ref": "#/definitions/KafkaClusterEncryptionInTransitType" + } + }, + "required": [ + "EncryptionType" + ] + }, + "KafkaClusterEncryptionInTransitType": { + "description": "The type of encryption in transit to the Kafka cluster.", + "type": "string", + "enum": [ + "PLAINTEXT", + "TLS" + ] + }, + "LogDelivery": { + "description": "Details of what logs are delivered and where they are delivered.", + "type": "object", + "additionalProperties": false, + "properties": { + "WorkerLogDelivery": { + "$ref": "#/definitions/WorkerLogDelivery" + } + }, + "required": [ + "WorkerLogDelivery" + ] + }, + "Plugin": { + "description": "Details about a Kafka Connect plugin which will be used with the connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "CustomPlugin": { + "$ref": "#/definitions/CustomPlugin" + } + }, + "required": [ + "CustomPlugin" + ] + }, + "ProvisionedCapacity": { + "description": "Details about a fixed capacity allocated to a connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "McuCount": { + "description": "Specifies how many MSK Connect Units (MCU) are allocated to the connector.", + "type": "integer", + "enum": [ + 1, + 2, + 4, + 8 + ] + }, + "WorkerCount": { + "description": "Number of workers for a connector.", + "type": "integer" + } + }, + "required": [ + "WorkerCount" + ] + }, + "S3LogDelivery": { + "description": "Details about delivering logs to Amazon S3.", + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "description": "The name of the S3 bucket that is the destination for log delivery.", + "type": "string" + }, + "Enabled": { + "description": "Specifies whether the logs get sent to the specified Amazon S3 destination.", + "type": "boolean" + }, + "Prefix": { + "description": "The S3 prefix that is the destination for log delivery.", + "type": "string" + } + }, + "required": [ + "Enabled" + ] + }, + "ScaleInPolicy": { + "description": "Information about the scale in policy of the connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "CpuUtilizationPercentage": { + "description": "Specifies the CPU utilization percentage threshold at which connector scale in should trigger.", + "type": "integer", + "minimum": 1, + "maximum": 100 + } + }, + "required": [ + "CpuUtilizationPercentage" + ] + }, + "ScaleOutPolicy": { + "description": "Information about the scale out policy of the connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "CpuUtilizationPercentage": { + "description": "Specifies the CPU utilization percentage threshold at which connector scale out should trigger.", + "type": "integer", + "minimum": 1, + "maximum": 100 + } + }, + "required": [ + "CpuUtilizationPercentage" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + }, + "Vpc": { + "description": "Information about a VPC used with the connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroups": { + "description": "The AWS security groups to associate with the elastic network interfaces in order to specify what the connector has access to.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "Subnets": { + "description": "The list of subnets to connect to in the virtual private cloud (VPC). AWS creates elastic network interfaces inside these subnets.", + "type": "array", + "uniqueItems": true, + "minItems": 1, + "items": { + "type": "string" + }, + "insertionOrder": false + } + }, + "required": [ + "SecurityGroups", + "Subnets" + ] + }, + "WorkerConfiguration": { + "description": "Specifies the worker configuration to use with the connector.", + "type": "object", + "additionalProperties": false, + "properties": { + "Revision": { + "description": "The revision of the worker configuration to use.", + "type": "integer", + "minimum": 1, + "format": "int64" + }, + "WorkerConfigurationArn": { + "description": "The Amazon Resource Name (ARN) of the worker configuration to use.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn):kafkaconnect:.*" + } + }, + "required": [ + "Revision", + "WorkerConfigurationArn" + ] + }, + "WorkerLogDelivery": { + "description": "Specifies where worker logs are delivered.", + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogs": { + "$ref": "#/definitions/CloudWatchLogsLogDelivery" + }, + "Firehose": { + "$ref": "#/definitions/FirehoseLogDelivery" + }, + "S3": { + "$ref": "#/definitions/S3LogDelivery" + } + } + } + }, + "required": [ + "Capacity", + "ConnectorConfiguration", + "ConnectorName", + "KafkaConnectVersion", + "KafkaCluster", + "KafkaClusterClientAuthentication", + "KafkaClusterEncryptionInTransit", + "Plugins", + "ServiceExecutionRoleArn" + ], + "primaryIdentifier": [ + "/properties/ConnectorArn" + ], + "additionalIdentifiers": [ + [ + "/properties/ConnectorName" + ] + ], + "readOnlyProperties": [ + "/properties/ConnectorArn" + ], + "replacementStrategy": "delete_then_create", + "createOnlyProperties": [ + "/properties/ConnectorConfiguration", + "/properties/ConnectorDescription", + "/properties/ConnectorName", + "/properties/KafkaCluster", + "/properties/KafkaClusterClientAuthentication", + "/properties/KafkaClusterEncryptionInTransit", + "/properties/KafkaConnectVersion", + "/properties/LogDelivery", + "/properties/Plugins", + "/properties/ServiceExecutionRoleArn", + "/properties/WorkerConfiguration" + ], + "handlers": { + "create": { + "permissions": [ + "kafkaconnect:CreateConnector", + "kafkaconnect:DescribeConnector", + "kafkaconnect:TagResource", + "kafkaconnect:ListTagsForResource", + "iam:CreateServiceLinkedRole", + "iam:PassRole", + "ec2:CreateNetworkInterface", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "firehose:TagDeliveryStream" + ] + }, + "read": { + "permissions": [ + "kafkaconnect:DescribeConnector", + "kafkaconnect:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "kafkaconnect:DeleteConnector", + "kafkaconnect:DescribeConnector", + "logs:DeleteLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries" + ] + }, + "update": { + "permissions": [ + "kafkaconnect:UpdateConnector", + "kafkaconnect:DescribeConnector", + "kafkaconnect:TagResource", + "kafkaconnect:ListTagsForResource", + "kafkaconnect:UntagResource", + "iam:CreateServiceLinkedRole", + "logs:UpdateLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "firehose:TagDeliveryStream" + ] + }, + "list": { + "permissions": [ + "kafkaconnect:ListConnectors" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kendra/datasource.json b/internal/aws/cfn/schemas/aws/kendra/datasource.json new file mode 100644 index 00000000..e99286ff --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kendra/datasource.json @@ -0,0 +1,1783 @@ +{ + "typeName": "AWS::Kendra::DataSource", + "description": "Kendra DataSource", + "sourceUrl": "https://docs.aws.amazon.com/kendra/latest/dg/hiw-data-source.html", + "definitions": { + "IndexId": { + "description": "ID of Index", + "type": "string", + "minLength": 36, + "maxLength": 36 + }, + "Tag": { + "description": "A label for tagging Kendra resources", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TagList": { + "description": "List of tags", + "type": "array", + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "DataSourceInclusionsExclusionsStrings": { + "type": "array", + "maxItems": 100, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 50 + } + }, + "S3Path": { + "type": "object", + "properties": { + "Bucket": { + "$ref": "#/definitions/S3BucketName" + }, + "Key": { + "$ref": "#/definitions/S3ObjectKey" + } + }, + "additionalProperties": false, + "required": [ + "Bucket", + "Key" + ] + }, + "S3BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]" + }, + "S3ObjectKey": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "DocumentsMetadataConfiguration": { + "type": "object", + "properties": { + "S3Prefix": { + "$ref": "#/definitions/S3ObjectKey" + } + }, + "additionalProperties": false + }, + "AccessControlListConfiguration": { + "type": "object", + "properties": { + "KeyPath": { + "$ref": "#/definitions/S3ObjectKey" + } + }, + "additionalProperties": false + }, + "S3DataSourceConfiguration": { + "description": "S3 data source configuration", + "type": "object", + "properties": { + "BucketName": { + "$ref": "#/definitions/S3BucketName" + }, + "InclusionPrefixes": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "InclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "DocumentsMetadataConfiguration": { + "$ref": "#/definitions/DocumentsMetadataConfiguration" + }, + "AccessControlListConfiguration": { + "$ref": "#/definitions/AccessControlListConfiguration" + } + }, + "additionalProperties": false, + "required": [ + "BucketName" + ] + }, + "Url": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^(https?|ftp|file)://([^\\s]*)" + }, + "SecretArn": { + "type": "string", + "minLength": 1, + "maxLength": 1284, + "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}" + }, + "DataSourceVpcConfiguration": { + "type": "object", + "properties": { + "SubnetIds": { + "type": "array", + "maxItems": 6, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 200, + "pattern": "[\\-0-9a-zA-Z]+" + } + }, + "SecurityGroupIds": { + "type": "array", + "maxItems": 10, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 200, + "pattern": "[\\-0-9a-zA-Z]+" + } + } + }, + "additionalProperties": false, + "required": [ + "SubnetIds", + "SecurityGroupIds" + ] + }, + "DataSourceFieldName": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "DataSourceToIndexFieldMapping": { + "type": "object", + "properties": { + "DataSourceFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DateFieldFormat": { + "$ref": "#/definitions/DateFieldFormat" + }, + "IndexFieldName": { + "$ref": "#/definitions/IndexFieldName" + } + }, + "additionalProperties": false, + "required": [ + "DataSourceFieldName", + "IndexFieldName" + ] + }, + "DateFieldFormat": { + "type": "string", + "minLength": 4, + "maxLength": 40 + }, + "IndexFieldName": { + "type": "string", + "minLength": 1, + "maxLength": 30 + }, + "DataSourceToIndexFieldMappingList": { + "type": "array", + "maxItems": 100, + "items": { + "$ref": "#/definitions/DataSourceToIndexFieldMapping" + } + }, + "DisableLocalGroups": { + "type": "boolean" + }, + "SharePointConfiguration": { + "description": "SharePoint configuration", + "type": "object", + "properties": { + "SharePointVersion": { + "type": "string", + "enum": [ + "SHAREPOINT_ONLINE", + "SHAREPOINT_2013", + "SHAREPOINT_2016" + ] + }, + "Urls": { + "type": "array", + "maxItems": 100, + "items": { + "$ref": "#/definitions/Url" + } + }, + "SecretArn": { + "$ref": "#/definitions/SecretArn" + }, + "CrawlAttachments": { + "type": "boolean" + }, + "UseChangeLog": { + "type": "boolean" + }, + "InclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "VpcConfiguration": { + "$ref": "#/definitions/DataSourceVpcConfiguration" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + }, + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DisableLocalGroups": { + "$ref": "#/definitions/DisableLocalGroups" + }, + "SslCertificateS3Path": { + "$ref": "#/definitions/S3Path" + } + }, + "additionalProperties": false, + "required": [ + "Urls", + "SecretArn", + "SharePointVersion" + ] + }, + "SalesforceConfiguration": { + "type": "object", + "properties": { + "ServerUrl": { + "$ref": "#/definitions/Url" + }, + "SecretArn": { + "$ref": "#/definitions/SecretArn" + }, + "StandardObjectConfigurations": { + "$ref": "#/definitions/SalesforceStandardObjectConfigurationList" + }, + "KnowledgeArticleConfiguration": { + "$ref": "#/definitions/SalesforceKnowledgeArticleConfiguration" + }, + "ChatterFeedConfiguration": { + "$ref": "#/definitions/SalesforceChatterFeedConfiguration" + }, + "CrawlAttachments": { + "type": "boolean" + }, + "StandardObjectAttachmentConfiguration": { + "$ref": "#/definitions/SalesforceStandardObjectAttachmentConfiguration" + }, + "IncludeAttachmentFilePatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExcludeAttachmentFilePatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + } + }, + "additionalProperties": false, + "required": [ + "ServerUrl", + "SecretArn" + ] + }, + "SalesforceStandardObjectConfigurationList": { + "type": "array", + "minItems": 1, + "maxItems": 17, + "items": { + "$ref": "#/definitions/SalesforceStandardObjectConfiguration" + } + }, + "SalesforceStandardObjectConfiguration": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/SalesforceStandardObjectName" + }, + "DocumentDataFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "DocumentDataFieldName" + ] + }, + "SalesforceStandardObjectName": { + "type": "string", + "enum": [ + "ACCOUNT", + "CAMPAIGN", + "CASE", + "CONTACT", + "CONTRACT", + "DOCUMENT", + "GROUP", + "IDEA", + "LEAD", + "OPPORTUNITY", + "PARTNER", + "PRICEBOOK", + "PRODUCT", + "PROFILE", + "SOLUTION", + "TASK", + "USER" + ] + }, + "SalesforceKnowledgeArticleConfiguration": { + "type": "object", + "properties": { + "IncludedStates": { + "$ref": "#/definitions/SalesforceKnowledgeArticleStateList" + }, + "StandardKnowledgeArticleTypeConfiguration": { + "$ref": "#/definitions/SalesforceStandardKnowledgeArticleTypeConfiguration" + }, + "CustomKnowledgeArticleTypeConfigurations": { + "$ref": "#/definitions/SalesforceCustomKnowledgeArticleTypeConfigurationList" + } + }, + "additionalProperties": false, + "required": [ + "IncludedStates" + ] + }, + "SalesforceKnowledgeArticleStateList": { + "type": "array", + "minItems": 1, + "maxItems": 3, + "items": { + "$ref": "#/definitions/SalesforceKnowledgeArticleState" + } + }, + "SalesforceKnowledgeArticleState": { + "type": "string", + "enum": [ + "DRAFT", + "PUBLISHED", + "ARCHIVED" + ] + }, + "SalesforceStandardKnowledgeArticleTypeConfiguration": { + "type": "object", + "properties": { + "DocumentDataFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + } + }, + "additionalProperties": false, + "required": [ + "DocumentDataFieldName" + ] + }, + "SalesforceCustomKnowledgeArticleTypeConfigurationList": { + "type": "array", + "minItems": 1, + "maxItems": 10, + "items": { + "$ref": "#/definitions/SalesforceCustomKnowledgeArticleTypeConfiguration" + } + }, + "SalesforceCustomKnowledgeArticleTypeConfiguration": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/SalesforceCustomKnowledgeArticleTypeName" + }, + "DocumentDataFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "DocumentDataFieldName" + ] + }, + "SalesforceCustomKnowledgeArticleTypeName": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "SalesforceChatterFeedConfiguration": { + "type": "object", + "properties": { + "DocumentDataFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + }, + "IncludeFilterTypes": { + "$ref": "#/definitions/SalesforceChatterFeedIncludeFilterTypes" + } + }, + "additionalProperties": false, + "required": [ + "DocumentDataFieldName" + ] + }, + "SalesforceChatterFeedIncludeFilterTypes": { + "type": "array", + "minItems": 1, + "maxItems": 2, + "items": { + "$ref": "#/definitions/SalesforceChatterFeedIncludeFilterType" + } + }, + "SalesforceChatterFeedIncludeFilterType": { + "type": "string", + "enum": [ + "ACTIVE_USER", + "STANDARD_USER" + ] + }, + "SalesforceStandardObjectAttachmentConfiguration": { + "type": "object", + "properties": { + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + } + }, + "additionalProperties": false + }, + "DatabaseConfiguration": { + "type": "object", + "properties": { + "DatabaseEngineType": { + "$ref": "#/definitions/DatabaseEngineType" + }, + "ConnectionConfiguration": { + "$ref": "#/definitions/ConnectionConfiguration" + }, + "VpcConfiguration": { + "$ref": "#/definitions/DataSourceVpcConfiguration" + }, + "ColumnConfiguration": { + "$ref": "#/definitions/ColumnConfiguration" + }, + "AclConfiguration": { + "$ref": "#/definitions/AclConfiguration" + }, + "SqlConfiguration": { + "$ref": "#/definitions/SqlConfiguration" + } + }, + "additionalProperties": false, + "required": [ + "ConnectionConfiguration", + "ColumnConfiguration", + "DatabaseEngineType" + ] + }, + "DatabaseEngineType": { + "type": "string", + "enum": [ + "RDS_AURORA_MYSQL", + "RDS_AURORA_POSTGRESQL", + "RDS_MYSQL", + "RDS_POSTGRESQL" + ] + }, + "ConnectionConfiguration": { + "type": "object", + "properties": { + "DatabaseHost": { + "$ref": "#/definitions/DatabaseHost" + }, + "DatabasePort": { + "$ref": "#/definitions/DatabasePort" + }, + "DatabaseName": { + "$ref": "#/definitions/DatabaseName" + }, + "TableName": { + "$ref": "#/definitions/TableName" + }, + "SecretArn": { + "$ref": "#/definitions/SecretArn" + } + }, + "additionalProperties": false, + "required": [ + "DatabaseHost", + "DatabasePort", + "DatabaseName", + "TableName", + "SecretArn" + ] + }, + "DatabaseHost": { + "type": "string", + "minLength": 1, + "maxLength": 253 + }, + "DatabasePort": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "DatabaseName": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "TableName": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "ColumnConfiguration": { + "type": "object", + "properties": { + "DocumentIdColumnName": { + "$ref": "#/definitions/ColumnName" + }, + "DocumentDataColumnName": { + "$ref": "#/definitions/ColumnName" + }, + "DocumentTitleColumnName": { + "$ref": "#/definitions/ColumnName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + }, + "ChangeDetectingColumns": { + "$ref": "#/definitions/ChangeDetectingColumns" + } + }, + "additionalProperties": false, + "required": [ + "DocumentIdColumnName", + "DocumentDataColumnName", + "ChangeDetectingColumns" + ] + }, + "ChangeDetectingColumns": { + "type": "array", + "minItems": 1, + "maxItems": 5, + "items": { + "$ref": "#/definitions/ColumnName" + } + }, + "ColumnName": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "SqlConfiguration": { + "type": "object", + "properties": { + "QueryIdentifiersEnclosingOption": { + "$ref": "#/definitions/QueryIdentifiersEnclosingOption" + } + }, + "additionalProperties": false + }, + "QueryIdentifiersEnclosingOption": { + "type": "string", + "enum": [ + "DOUBLE_QUOTES", + "NONE" + ] + }, + "AclConfiguration": { + "type": "object", + "properties": { + "AllowedGroupsColumnName": { + "$ref": "#/definitions/ColumnName" + } + }, + "additionalProperties": false, + "required": [ + "AllowedGroupsColumnName" + ] + }, + "OneDriveConfiguration": { + "type": "object", + "properties": { + "TenantDomain": { + "$ref": "#/definitions/TenantDomain" + }, + "SecretArn": { + "$ref": "#/definitions/SecretArn" + }, + "OneDriveUsers": { + "$ref": "#/definitions/OneDriveUsers" + }, + "InclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + }, + "DisableLocalGroups": { + "$ref": "#/definitions/DisableLocalGroups" + } + }, + "additionalProperties": false, + "required": [ + "TenantDomain", + "SecretArn", + "OneDriveUsers" + ] + }, + "TenantDomain": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-z]{2,}$" + }, + "OneDriveUsers": { + "type": "object", + "properties": { + "OneDriveUserList": { + "$ref": "#/definitions/OneDriveUserList" + }, + "OneDriveUserS3Path": { + "$ref": "#/definitions/S3Path" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "OneDriveUserList" + ] + }, + { + "required": [ + "OneDriveUserS3Path" + ] + } + ] + }, + "OneDriveUserList": { + "type": "array", + "minItems": 1, + "maxItems": 100, + "items": { + "$ref": "#/definitions/OneDriveUser" + } + }, + "OneDriveUser": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^(?!\\s).+@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + }, + "ServiceNowConfiguration": { + "type": "object", + "properties": { + "HostUrl": { + "$ref": "#/definitions/ServiceNowHostUrl" + }, + "SecretArn": { + "$ref": "#/definitions/SecretArn" + }, + "ServiceNowBuildVersion": { + "$ref": "#/definitions/ServiceNowBuildVersionType" + }, + "AuthenticationType": { + "$ref": "#/definitions/ServiceNowAuthenticationType" + }, + "KnowledgeArticleConfiguration": { + "$ref": "#/definitions/ServiceNowKnowledgeArticleConfiguration" + }, + "ServiceCatalogConfiguration": { + "$ref": "#/definitions/ServiceNowServiceCatalogConfiguration" + } + }, + "additionalProperties": false, + "required": [ + "HostUrl", + "SecretArn", + "ServiceNowBuildVersion" + ] + }, + "ServiceNowBuildVersionType": { + "type": "string", + "enum": [ + "LONDON", + "OTHERS" + ] + }, + "ServiceNowAuthenticationType": { + "type": "string", + "enum": [ + "HTTP_BASIC", + "OAUTH2" + ] + }, + "ServiceNowServiceCatalogConfiguration": { + "type": "object", + "properties": { + "CrawlAttachments": { + "type": "boolean" + }, + "IncludeAttachmentFilePatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExcludeAttachmentFilePatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "DocumentDataFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + } + }, + "additionalProperties": false, + "required": [ + "DocumentDataFieldName" + ] + }, + "ServiceNowHostUrl": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^(?!(^(https?|ftp|file):\\/\\/))[a-z0-9-]+(\\.service-now\\.com)$" + }, + "ServiceNowKnowledgeArticleConfiguration": { + "type": "object", + "properties": { + "CrawlAttachments": { + "type": "boolean" + }, + "IncludeAttachmentFilePatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExcludeAttachmentFilePatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "DocumentDataFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "DocumentTitleFieldName": { + "$ref": "#/definitions/DataSourceFieldName" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + }, + "FilterQuery": { + "$ref": "#/definitions/ServiceNowKnowledgeArticleFilterQuery" + } + }, + "additionalProperties": false, + "required": [ + "DocumentDataFieldName" + ] + }, + "ServiceNowKnowledgeArticleFilterQuery": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "ConfluenceConfiguration": { + "type": "object", + "properties": { + "ServerUrl": { + "$ref": "#/definitions/Url" + }, + "SecretArn": { + "$ref": "#/definitions/SecretArn" + }, + "Version": { + "$ref": "#/definitions/ConfluenceVersion" + }, + "SpaceConfiguration": { + "$ref": "#/definitions/ConfluenceSpaceConfiguration" + }, + "PageConfiguration": { + "$ref": "#/definitions/ConfluencePageConfiguration" + }, + "BlogConfiguration": { + "$ref": "#/definitions/ConfluenceBlogConfiguration" + }, + "AttachmentConfiguration": { + "$ref": "#/definitions/ConfluenceAttachmentConfiguration" + }, + "VpcConfiguration": { + "$ref": "#/definitions/DataSourceVpcConfiguration" + }, + "InclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + } + }, + "additionalProperties": false, + "required": [ + "ServerUrl", + "SecretArn", + "Version" + ] + }, + "ConfluenceVersion": { + "type": "string", + "enum": [ + "CLOUD", + "SERVER" + ] + }, + "ConfluenceSpaceConfiguration": { + "type": "object", + "properties": { + "CrawlPersonalSpaces": { + "type": "boolean" + }, + "CrawlArchivedSpaces": { + "type": "boolean" + }, + "IncludeSpaces": { + "$ref": "#/definitions/ConfluenceSpaceList" + }, + "ExcludeSpaces": { + "$ref": "#/definitions/ConfluenceSpaceList" + }, + "SpaceFieldMappings": { + "$ref": "#/definitions/ConfluenceSpaceFieldMappingsList" + } + }, + "additionalProperties": false + }, + "ConfluenceSpaceFieldMappingsList": { + "type": "array", + "minItems": 1, + "maxItems": 4, + "items": { + "$ref": "#/definitions/ConfluenceSpaceToIndexFieldMapping" + } + }, + "ConfluenceSpaceToIndexFieldMapping": { + "type": "object", + "properties": { + "DataSourceFieldName": { + "$ref": "#/definitions/ConfluenceSpaceFieldName" + }, + "DateFieldFormat": { + "$ref": "#/definitions/DateFieldFormat" + }, + "IndexFieldName": { + "$ref": "#/definitions/IndexFieldName" + } + }, + "additionalProperties": false, + "required": [ + "DataSourceFieldName", + "IndexFieldName" + ] + }, + "ConfluenceSpaceFieldName": { + "type": "string", + "enum": [ + "DISPLAY_URL", + "ITEM_TYPE", + "SPACE_KEY", + "URL" + ] + }, + "ConfluenceSpaceList": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/ConfluenceSpaceIdentifier" + } + }, + "ConfluenceSpaceIdentifier": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "ConfluencePageConfiguration": { + "type": "object", + "properties": { + "PageFieldMappings": { + "$ref": "#/definitions/ConfluencePageFieldMappingsList" + } + }, + "additionalProperties": false + }, + "ConfluencePageFieldMappingsList": { + "type": "array", + "minItems": 1, + "maxItems": 12, + "items": { + "$ref": "#/definitions/ConfluencePageToIndexFieldMapping" + } + }, + "ConfluencePageToIndexFieldMapping": { + "type": "object", + "properties": { + "DataSourceFieldName": { + "$ref": "#/definitions/ConfluencePageFieldName" + }, + "DateFieldFormat": { + "$ref": "#/definitions/DateFieldFormat" + }, + "IndexFieldName": { + "$ref": "#/definitions/IndexFieldName" + } + }, + "additionalProperties": false, + "required": [ + "DataSourceFieldName", + "IndexFieldName" + ] + }, + "ConfluencePageFieldName": { + "type": "string", + "enum": [ + "AUTHOR", + "CONTENT_STATUS", + "CREATED_DATE", + "DISPLAY_URL", + "ITEM_TYPE", + "LABELS", + "MODIFIED_DATE", + "PARENT_ID", + "SPACE_KEY", + "SPACE_NAME", + "URL", + "VERSION" + ] + }, + "ConfluenceBlogConfiguration": { + "type": "object", + "properties": { + "BlogFieldMappings": { + "$ref": "#/definitions/ConfluenceBlogFieldMappingsList" + } + }, + "additionalProperties": false + }, + "ConfluenceBlogFieldMappingsList": { + "type": "array", + "minItems": 1, + "maxItems": 9, + "items": { + "$ref": "#/definitions/ConfluenceBlogToIndexFieldMapping" + } + }, + "ConfluenceBlogToIndexFieldMapping": { + "type": "object", + "properties": { + "DataSourceFieldName": { + "$ref": "#/definitions/ConfluenceBlogFieldName" + }, + "DateFieldFormat": { + "$ref": "#/definitions/DateFieldFormat" + }, + "IndexFieldName": { + "$ref": "#/definitions/IndexFieldName" + } + }, + "additionalProperties": false, + "required": [ + "DataSourceFieldName", + "IndexFieldName" + ] + }, + "ConfluenceBlogFieldName": { + "type": "string", + "enum": [ + "AUTHOR", + "DISPLAY_URL", + "ITEM_TYPE", + "LABELS", + "PUBLISH_DATE", + "SPACE_KEY", + "SPACE_NAME", + "URL", + "VERSION" + ] + }, + "ConfluenceAttachmentConfiguration": { + "type": "object", + "properties": { + "CrawlAttachments": { + "type": "boolean" + }, + "AttachmentFieldMappings": { + "$ref": "#/definitions/ConfluenceAttachmentFieldMappingsList" + } + }, + "additionalProperties": false + }, + "ConfluenceAttachmentFieldMappingsList": { + "type": "array", + "minItems": 1, + "maxItems": 11, + "items": { + "$ref": "#/definitions/ConfluenceAttachmentToIndexFieldMapping" + } + }, + "ConfluenceAttachmentToIndexFieldMapping": { + "type": "object", + "properties": { + "DataSourceFieldName": { + "$ref": "#/definitions/ConfluenceAttachmentFieldName" + }, + "DateFieldFormat": { + "$ref": "#/definitions/DateFieldFormat" + }, + "IndexFieldName": { + "$ref": "#/definitions/IndexFieldName" + } + }, + "additionalProperties": false, + "required": [ + "DataSourceFieldName", + "IndexFieldName" + ] + }, + "GoogleDriveConfiguration": { + "type": "object", + "properties": { + "SecretArn": { + "$ref": "#/definitions/SecretArn" + }, + "InclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + }, + "ExcludeMimeTypes": { + "$ref": "#/definitions/ExcludeMimeTypesList" + }, + "ExcludeUserAccounts": { + "$ref": "#/definitions/ExcludeUserAccountsList" + }, + "ExcludeSharedDrives": { + "$ref": "#/definitions/ExcludeSharedDrivesList" + } + }, + "additionalProperties": false, + "required": [ + "SecretArn" + ] + }, + "ExcludeMimeTypesList": { + "type": "array", + "minItems": 0, + "maxItems": 30, + "items": { + "$ref": "#/definitions/MimeType" + } + }, + "MimeType": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "ExcludeUserAccountsList": { + "type": "array", + "minItems": 0, + "maxItems": 100, + "items": { + "$ref": "#/definitions/UserAccount" + } + }, + "UserAccount": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "ExcludeSharedDrivesList": { + "type": "array", + "minItems": 0, + "maxItems": 100, + "items": { + "$ref": "#/definitions/SharedDriveId" + } + }, + "SharedDriveId": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "ConfluenceAttachmentFieldName": { + "type": "string", + "enum": [ + "AUTHOR", + "CONTENT_TYPE", + "CREATED_DATE", + "DISPLAY_URL", + "FILE_SIZE", + "ITEM_TYPE", + "PARENT_ID", + "SPACE_KEY", + "SPACE_NAME", + "URL", + "VERSION" + ] + }, + "WebCrawlerSiteMap": { + "type": "string", + "pattern": "^(https?):\\/\\/([^\\s]*)", + "minLength": 1, + "maxLength": 2048 + }, + "WebCrawlerSiteMaps": { + "type": "array", + "minItems": 0, + "maxItems": 3, + "items": { + "$ref": "#/definitions/WebCrawlerSiteMap" + } + }, + "WebCrawlerSiteMapsConfiguration": { + "type": "object", + "properties": { + "SiteMaps": { + "$ref": "#/definitions/WebCrawlerSiteMaps" + } + }, + "additionalProperties": false, + "required": [ + "SiteMaps" + ] + }, + "WebCrawlerSeedUrl": { + "type": "string", + "pattern": "^(https?)://([^\\s]*)", + "minLength": 1, + "maxLength": 2048 + }, + "WebCrawlerSeedUrlList": { + "type": "array", + "minItems": 0, + "maxItems": 100, + "items": { + "$ref": "#/definitions/WebCrawlerSeedUrl" + } + }, + "WebCrawlerSeedUrlConfiguration": { + "type": "object", + "properties": { + "SeedUrls": { + "$ref": "#/definitions/WebCrawlerSeedUrlList" + }, + "WebCrawlerMode": { + "type": "string", + "enum": [ + "HOST_ONLY", + "SUBDOMAINS", + "EVERYTHING" + ] + } + }, + "additionalProperties": false, + "required": [ + "SeedUrls" + ] + }, + "WebCrawlerUrls": { + "type": "object", + "properties": { + "SeedUrlConfiguration": { + "$ref": "#/definitions/WebCrawlerSeedUrlConfiguration" + }, + "SiteMapsConfiguration": { + "$ref": "#/definitions/WebCrawlerSiteMapsConfiguration" + } + }, + "additionalProperties": false + }, + "ProxyConfiguration": { + "type": "object", + "properties": { + "Host": { + "type": "string", + "pattern": "([^\\s]*)", + "minLength": 1, + "maxLength": 253 + }, + "Port": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "Credentials": { + "$ref": "#/definitions/SecretArn" + } + }, + "additionalProperties": false, + "required": [ + "Host", + "Port" + ] + }, + "WebCrawlerBasicAuthentication": { + "type": "object", + "properties": { + "Host": { + "type": "string", + "pattern": "([^\\s]*)", + "minLength": 1, + "maxLength": 253 + }, + "Port": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "Credentials": { + "$ref": "#/definitions/SecretArn" + } + }, + "additionalProperties": false, + "required": [ + "Host", + "Port", + "Credentials" + ] + }, + "WebCrawlerBasicAuthenticationList": { + "type": "array", + "maxItems": 10, + "items": { + "$ref": "#/definitions/WebCrawlerBasicAuthentication" + } + }, + "WebCrawlerAuthenticationConfiguration": { + "type": "object", + "properties": { + "BasicAuthentication": { + "$ref": "#/definitions/WebCrawlerBasicAuthenticationList" + } + }, + "additionalProperties": false + }, + "WebCrawlerConfiguration": { + "type": "object", + "properties": { + "Urls": { + "$ref": "#/definitions/WebCrawlerUrls" + }, + "CrawlDepth": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "MaxLinksPerPage": { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + "MaxContentSizePerPageInMegaBytes": { + "type": "number", + "minimum": 0, + "maximum": 50 + }, + "MaxUrlsPerMinuteCrawlRate": { + "type": "integer", + "minimum": 1, + "maximum": 300 + }, + "UrlInclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "UrlExclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ProxyConfiguration": { + "$ref": "#/definitions/ProxyConfiguration" + }, + "AuthenticationConfiguration": { + "$ref": "#/definitions/WebCrawlerAuthenticationConfiguration" + } + }, + "additionalProperties": false, + "required": [ + "Urls" + ] + }, + "WorkDocsConfiguration": { + "type": "object", + "properties": { + "OrganizationId": { + "type": "string", + "minLength": 12, + "maxLength": 12, + "pattern": "d-[0-9a-fA-F]{10}" + }, + "CrawlComments": { + "type": "boolean" + }, + "UseChangeLog": { + "type": "boolean" + }, + "InclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "ExclusionPatterns": { + "$ref": "#/definitions/DataSourceInclusionsExclusionsStrings" + }, + "FieldMappings": { + "$ref": "#/definitions/DataSourceToIndexFieldMappingList" + } + }, + "additionalProperties": false, + "required": [ + "OrganizationId" + ] + }, + "DataSourceConfiguration": { + "type": "object", + "properties": { + "S3Configuration": { + "$ref": "#/definitions/S3DataSourceConfiguration" + }, + "SharePointConfiguration": { + "$ref": "#/definitions/SharePointConfiguration" + }, + "SalesforceConfiguration": { + "$ref": "#/definitions/SalesforceConfiguration" + }, + "OneDriveConfiguration": { + "$ref": "#/definitions/OneDriveConfiguration" + }, + "ServiceNowConfiguration": { + "$ref": "#/definitions/ServiceNowConfiguration" + }, + "DatabaseConfiguration": { + "$ref": "#/definitions/DatabaseConfiguration" + }, + "ConfluenceConfiguration": { + "$ref": "#/definitions/ConfluenceConfiguration" + }, + "GoogleDriveConfiguration": { + "$ref": "#/definitions/GoogleDriveConfiguration" + }, + "WebCrawlerConfiguration": { + "$ref": "#/definitions/WebCrawlerConfiguration" + }, + "WorkDocsConfiguration": { + "$ref": "#/definitions/WorkDocsConfiguration" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "S3Configuration" + ] + }, + { + "required": [ + "SharePointConfiguration" + ] + }, + { + "required": [ + "SalesforceConfiguration" + ] + }, + { + "required": [ + "OneDriveConfiguration" + ] + }, + { + "required": [ + "ServiceNowConfiguration" + ] + }, + { + "required": [ + "DatabaseConfiguration" + ] + }, + { + "required": [ + "ConfluenceConfiguration" + ] + }, + { + "required": [ + "GoogleDriveConfiguration" + ] + }, + { + "required": [ + "WebCrawlerConfiguration" + ] + }, + { + "required": [ + "WorkDocsConfiguration" + ] + } + ] + }, + "Name": { + "description": "Name of data source", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "Type": { + "description": "Data source type", + "type": "string", + "enum": [ + "S3", + "SHAREPOINT", + "SALESFORCE", + "ONEDRIVE", + "SERVICENOW", + "DATABASE", + "CUSTOM", + "CONFLUENCE", + "GOOGLEDRIVE", + "WEBCRAWLER", + "WORKDOCS" + ] + }, + "Description": { + "description": "Description of data source", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "LanguageCode": { + "description": "The code for a language.", + "type": "string", + "minLength": 2, + "maxLength": 10, + "pattern": "[a-zA-Z-]*" + }, + "RoleArn": { + "description": "Role ARN", + "type": "string", + "minLength": 1, + "maxLength": 1284, + "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}" + }, + "Schedule": { + "description": "Schedule", + "type": "string", + "maxLength": 1000 + }, + "Id": { + "description": "ID of data source", + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "Arn": { + "type": "string", + "maxLength": 1000 + }, + "CustomDocumentEnrichmentConfiguration": { + "type": "object", + "properties": { + "InlineConfigurations": { + "$ref": "#/definitions/InlineConfigurations" + }, + "PreExtractionHookConfiguration": { + "$ref": "#/definitions/HookConfiguration" + }, + "PostExtractionHookConfiguration": { + "$ref": "#/definitions/HookConfiguration" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + } + }, + "additionalProperties": false + }, + "InlineConfigurations": { + "description": "List of InlineCustomDocumentEnrichmentConfigurations", + "type": "array", + "maxItems": 100, + "items": { + "$ref": "#/definitions/InlineCustomDocumentEnrichmentConfiguration" + } + }, + "InlineCustomDocumentEnrichmentConfiguration": { + "type": "object", + "properties": { + "Condition": { + "$ref": "#/definitions/DocumentAttributeCondition" + }, + "Target": { + "$ref": "#/definitions/DocumentAttributeTarget" + }, + "DocumentContentDeletion": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "DocumentAttributeCondition": { + "type": "object", + "properties": { + "ConditionDocumentAttributeKey": { + "$ref": "#/definitions/DocumentAttributeKey" + }, + "Operator": { + "$ref": "#/definitions/ConditionOperator" + }, + "ConditionOnValue": { + "$ref": "#/definitions/DocumentAttributeValue" + } + }, + "required": [ + "ConditionDocumentAttributeKey", + "Operator" + ], + "additionalProperties": false + }, + "DocumentAttributeTarget": { + "type": "object", + "properties": { + "TargetDocumentAttributeKey": { + "$ref": "#/definitions/DocumentAttributeKey" + }, + "TargetDocumentAttributeValueDeletion": { + "type": "boolean" + }, + "TargetDocumentAttributeValue": { + "$ref": "#/definitions/DocumentAttributeValue" + } + }, + "required": [ + "TargetDocumentAttributeKey" + ], + "additionalProperties": false + }, + "ConditionOperator": { + "type": "string", + "enum": [ + "GreaterThan", + "GreaterThanOrEquals", + "LessThan", + "LessThanOrEquals", + "Equals", + "NotEquals", + "Contains", + "NotContains", + "Exists", + "NotExists", + "BeginsWith" + ] + }, + "DocumentAttributeKey": { + "type": "string", + "minLength": 1, + "maxLength": 200, + "pattern": "[a-zA-Z0-9_][a-zA-Z0-9_-]*" + }, + "DocumentAttributeValue": { + "type": "object", + "properties": { + "StringValue": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "StringListValue": { + "type": "array", + "items": { + "type": "string" + } + }, + "LongValue": { + "$ref": "#/definitions/Long" + }, + "DateValue": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false + }, + "Long": { + "type": "integer", + "format": "int64" + }, + "Timestamp": { + "type": "string" + }, + "HookConfiguration": { + "type": "object", + "properties": { + "InvocationCondition": { + "$ref": "#/definitions/DocumentAttributeCondition" + }, + "LambdaArn": { + "$ref": "#/definitions/LambdaArn" + }, + "S3Bucket": { + "$ref": "#/definitions/S3BucketName" + } + }, + "required": [ + "LambdaArn", + "S3Bucket" + ], + "additionalProperties": false + }, + "LambdaArn": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "properties": { + "Id": { + "$ref": "#/definitions/Id" + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Name": { + "$ref": "#/definitions/Name" + }, + "IndexId": { + "$ref": "#/definitions/IndexId" + }, + "Type": { + "$ref": "#/definitions/Type" + }, + "DataSourceConfiguration": { + "$ref": "#/definitions/DataSourceConfiguration" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "Schedule": { + "$ref": "#/definitions/Schedule" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "Tags": { + "description": "Tags for labeling the data source", + "$ref": "#/definitions/TagList" + }, + "CustomDocumentEnrichmentConfiguration": { + "$ref": "#/definitions/CustomDocumentEnrichmentConfiguration" + }, + "LanguageCode": { + "$ref": "#/definitions/LanguageCode" + } + }, + "required": [ + "Name", + "IndexId", + "Type" + ], + "handlers": { + "create": { + "permissions": [ + "kendra:CreateDataSource", + "kendra:DescribeDataSource", + "kendra:ListTagsForResource", + "iam:PassRole", + "kendra:TagResource" + ] + }, + "read": { + "permissions": [ + "kendra:DescribeDataSource", + "kendra:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "kendra:DescribeDataSource", + "kendra:DeleteDataSource" + ], + "timeoutInMinutes": 720 + }, + "list": { + "permissions": [ + "kendra:ListDataSources" + ] + }, + "update": { + "permissions": [ + "kendra:DescribeDataSource", + "kendra:UpdateDataSource", + "kendra:ListTagsForResource", + "kendra:TagResource", + "kendra:UntagResource", + "iam:PassRole" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Id", + "/properties/IndexId" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Type" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kendra/faq.json b/internal/aws/cfn/schemas/aws/kendra/faq.json new file mode 100644 index 00000000..1ac52888 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kendra/faq.json @@ -0,0 +1,208 @@ +{ + "typeName": "AWS::Kendra::Faq", + "description": "A Kendra FAQ resource", + "sourceUrl": "https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html", + "definitions": { + "Tag": { + "description": "A label for tagging Kendra resources", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TagList": { + "description": "List of tags", + "type": "array", + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "IndexId": { + "description": "Unique ID of Index", + "type": "string", + "minLength": 36, + "maxLength": 36 + }, + "Description": { + "description": "Description of the FAQ", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "LanguageCode": { + "description": "The code for a language.", + "type": "string", + "minLength": 2, + "maxLength": 10, + "pattern": "[a-zA-Z-]*" + }, + "FileFormat": { + "description": "Format of the input file", + "enum": [ + "CSV", + "CSV_WITH_HEADER", + "JSON" + ], + "type": "string" + }, + "S3Path": { + "type": "object", + "properties": { + "Bucket": { + "$ref": "#/definitions/S3BucketName" + }, + "Key": { + "$ref": "#/definitions/S3ObjectKey" + } + }, + "additionalProperties": false, + "required": [ + "Bucket", + "Key" + ] + }, + "S3BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]" + }, + "S3ObjectKey": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "FaqName": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "RoleArn": { + "type": "string", + "minLength": 1, + "maxLength": 1284, + "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}" + }, + "Id": { + "description": "Unique ID of the FAQ", + "type": "string", + "minLength": 1, + "maxLength": 100 + } + }, + "properties": { + "Id": { + "$ref": "#/definitions/Id" + }, + "IndexId": { + "description": "Index ID", + "$ref": "#/definitions/IndexId" + }, + "Name": { + "description": "FAQ name", + "$ref": "#/definitions/FaqName" + }, + "Description": { + "description": "FAQ description", + "$ref": "#/definitions/Description" + }, + "FileFormat": { + "description": "FAQ file format", + "$ref": "#/definitions/FileFormat" + }, + "S3Path": { + "description": "FAQ S3 path", + "$ref": "#/definitions/S3Path" + }, + "RoleArn": { + "description": "FAQ role ARN", + "$ref": "#/definitions/RoleArn" + }, + "Tags": { + "description": "Tags for labeling the FAQ", + "$ref": "#/definitions/TagList" + }, + "Arn": { + "type": "string", + "maxLength": 1000 + }, + "LanguageCode": { + "$ref": "#/definitions/LanguageCode" + } + }, + "required": [ + "IndexId", + "Name", + "S3Path", + "RoleArn" + ], + "handlers": { + "create": { + "permissions": [ + "kendra:CreateFaq", + "kendra:DescribeFaq", + "iam:PassRole", + "kendra:ListTagsForResource", + "kendra:TagResource" + ] + }, + "update": { + "permissions": [ + "kendra:ListTagsForResource", + "kendra:UntagResource", + "kendra:TagResource" + ] + }, + "read": { + "permissions": [ + "kendra:DescribeFaq", + "kendra:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "kendra:DeleteFaq", + "kendra:DescribeFaq" + ] + }, + "list": { + "permissions": [ + "kendra:ListFaqs" + ] + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/IndexId", + "/properties/Name", + "/properties/S3Path", + "/properties/RoleArn", + "/properties/Description", + "/properties/FileFormat" + ], + "primaryIdentifier": [ + "/properties/Id", + "/properties/IndexId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kendra/index.json b/internal/aws/cfn/schemas/aws/kendra/index.json new file mode 100644 index 00000000..4c6820d6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kendra/index.json @@ -0,0 +1,444 @@ +{ + "typeName": "AWS::Kendra::Index", + "description": "A Kendra index", + "sourceUrl": "https://docs.aws.amazon.com/kendra/latest/dg/hiw-index.html", + "definitions": { + "ServerSideEncryptionConfiguration": { + "type": "object", + "properties": { + "KmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + } + }, + "additionalProperties": false + }, + "Description": { + "type": "string", + "maxLength": 1000 + }, + "KmsKeyId": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Tag": { + "description": "A label for tagging Kendra resources", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TagList": { + "description": "List of tags", + "type": "array", + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Importance": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "Freshness": { + "type": "boolean" + }, + "Duration": { + "type": "string", + "minLength": 1, + "maxLength": 10, + "pattern": "[0-9]+[s]" + }, + "Order": { + "type": "string", + "enum": [ + "ASCENDING", + "DESCENDING" + ] + }, + "Relevance": { + "type": "object", + "properties": { + "Freshness": { + "$ref": "#/definitions/Freshness" + }, + "Importance": { + "$ref": "#/definitions/Importance" + }, + "Duration": { + "$ref": "#/definitions/Duration" + }, + "RankOrder": { + "$ref": "#/definitions/Order" + }, + "ValueImportanceItems": { + "$ref": "#/definitions/ValueImportanceItems" + } + }, + "additionalProperties": false + }, + "ValueImportanceItems": { + "type": "array", + "items": { + "$ref": "#/definitions/ValueImportanceItem" + } + }, + "ValueImportanceItem": { + "type": "object", + "properties": { + "Key": { + "$ref": "#/definitions/ValueImportanceItemKey" + }, + "Value": { + "$ref": "#/definitions/Importance" + } + }, + "additionalProperties": false + }, + "ValueImportanceItemKey": { + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "Search": { + "type": "object", + "properties": { + "Facetable": { + "type": "boolean" + }, + "Searchable": { + "type": "boolean" + }, + "Displayable": { + "type": "boolean" + }, + "Sortable": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "DocumentMetadataConfigurationName": { + "type": "string", + "minLength": 1, + "maxLength": 30 + }, + "DocumentAttributeValueType": { + "type": "string", + "enum": [ + "STRING_VALUE", + "STRING_LIST_VALUE", + "LONG_VALUE", + "DATE_VALUE" + ] + }, + "DocumentMetadataConfiguration": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/DocumentMetadataConfigurationName" + }, + "Type": { + "$ref": "#/definitions/DocumentAttributeValueType" + }, + "Relevance": { + "$ref": "#/definitions/Relevance" + }, + "Search": { + "$ref": "#/definitions/Search" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Type" + ] + }, + "DocumentMetadataConfigurationList": { + "type": "array", + "maxItems": 500, + "items": { + "$ref": "#/definitions/DocumentMetadataConfiguration" + } + }, + "StorageCapacityUnits": { + "type": "integer", + "minimum": 0 + }, + "QueryCapacityUnits": { + "type": "integer", + "minimum": 0 + }, + "CapacityUnitsConfiguration": { + "type": "object", + "properties": { + "StorageCapacityUnits": { + "$ref": "#/definitions/StorageCapacityUnits" + }, + "QueryCapacityUnits": { + "$ref": "#/definitions/QueryCapacityUnits" + } + }, + "additionalProperties": false, + "required": [ + "StorageCapacityUnits", + "QueryCapacityUnits" + ] + }, + "Edition": { + "description": "Edition of index", + "type": "string", + "enum": [ + "DEVELOPER_EDITION", + "ENTERPRISE_EDITION" + ] + }, + "Name": { + "description": "Name of index", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "RoleArn": { + "description": "Role Arn", + "type": "string", + "minLength": 1, + "maxLength": 1284, + "pattern": "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}" + }, + "Id": { + "description": "Unique ID of index", + "type": "string", + "minLength": 36, + "maxLength": 36 + }, + "Arn": { + "type": "string", + "maxLength": 1000 + }, + "UserContextPolicy": { + "type": "string", + "enum": [ + "ATTRIBUTE_FILTER", + "USER_TOKEN" + ] + }, + "UserNameAttributeField": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "GroupAttributeField": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "KeyLocation": { + "type": "string", + "enum": [ + "URL", + "SECRET_MANAGER" + ] + }, + "Issuer": { + "type": "string", + "minLength": 1, + "maxLength": 65 + }, + "ClaimRegex": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "Url": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^(https?|ftp|file):\\/\\/([^\\s]*)" + }, + "JsonTokenTypeConfiguration": { + "type": "object", + "properties": { + "UserNameAttributeField": { + "$ref": "#/definitions/UserNameAttributeField" + }, + "GroupAttributeField": { + "$ref": "#/definitions/GroupAttributeField" + } + }, + "additionalProperties": false, + "required": [ + "UserNameAttributeField", + "GroupAttributeField" + ] + }, + "JwtTokenTypeConfiguration": { + "type": "object", + "properties": { + "KeyLocation": { + "$ref": "#/definitions/KeyLocation" + }, + "URL": { + "$ref": "#/definitions/Url" + }, + "SecretManagerArn": { + "$ref": "#/definitions/RoleArn" + }, + "UserNameAttributeField": { + "$ref": "#/definitions/UserNameAttributeField" + }, + "GroupAttributeField": { + "$ref": "#/definitions/GroupAttributeField" + }, + "Issuer": { + "$ref": "#/definitions/Issuer" + }, + "ClaimRegex": { + "$ref": "#/definitions/ClaimRegex" + } + }, + "additionalProperties": false, + "required": [ + "KeyLocation" + ] + }, + "UserTokenConfiguration": { + "type": "object", + "properties": { + "JwtTokenTypeConfiguration": { + "$ref": "#/definitions/JwtTokenTypeConfiguration" + }, + "JsonTokenTypeConfiguration": { + "$ref": "#/definitions/JsonTokenTypeConfiguration" + } + }, + "additionalProperties": false + }, + "UserTokenConfigurationList": { + "type": "array", + "maxItems": 1, + "items": { + "$ref": "#/definitions/UserTokenConfiguration" + } + } + }, + "properties": { + "Id": { + "$ref": "#/definitions/Id" + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Description": { + "description": "A description for the index", + "$ref": "#/definitions/Description" + }, + "ServerSideEncryptionConfiguration": { + "description": "Server side encryption configuration", + "$ref": "#/definitions/ServerSideEncryptionConfiguration" + }, + "Tags": { + "description": "Tags for labeling the index", + "$ref": "#/definitions/TagList" + }, + "Name": { + "$ref": "#/definitions/Name" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "Edition": { + "$ref": "#/definitions/Edition" + }, + "DocumentMetadataConfigurations": { + "description": "Document metadata configurations", + "$ref": "#/definitions/DocumentMetadataConfigurationList" + }, + "CapacityUnits": { + "description": "Capacity units", + "$ref": "#/definitions/CapacityUnitsConfiguration" + }, + "UserContextPolicy": { + "$ref": "#/definitions/UserContextPolicy" + }, + "UserTokenConfigurations": { + "$ref": "#/definitions/UserTokenConfigurationList" + } + }, + "required": [ + "Name", + "RoleArn", + "Edition" + ], + "handlers": { + "create": { + "permissions": [ + "kendra:CreateIndex", + "kendra:DescribeIndex", + "kendra:UpdateIndex", + "kendra:ListTagsForResource", + "iam:PassRole", + "kendra:TagResource" + ], + "timeoutInMinutes": 240 + }, + "read": { + "permissions": [ + "kendra:DescribeIndex", + "kendra:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "kendra:DescribeIndex", + "kendra:UpdateIndex", + "kendra:ListTagsForResource", + "kendra:TagResource", + "kendra:UntagResource", + "iam:PassRole" + ], + "timeoutInMinutes": 240 + }, + "delete": { + "permissions": [ + "kendra:DescribeIndex", + "kendra:DeleteIndex" + ], + "timeoutInMinutes": 720 + }, + "list": { + "permissions": [ + "kendra:ListIndices" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Edition", + "/properties/ServerSideEncryptionConfiguration" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kendraranking/executionplan.json b/internal/aws/cfn/schemas/aws/kendraranking/executionplan.json new file mode 100644 index 00000000..f81ff95a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kendraranking/executionplan.json @@ -0,0 +1,156 @@ +{ + "typeName": "AWS::KendraRanking::ExecutionPlan", + "description": "A KendraRanking Rescore execution plan", + "sourceUrl": "https://docs.aws.amazon.com/kendra/latest/dg/hiw-index.html", + "definitions": { + "Description": { + "type": "string", + "maxLength": 1000 + }, + "Tag": { + "description": "A label for tagging KendraRanking resources", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Tags": { + "description": "List of tags", + "type": "array", + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "RescoreCapacityUnits": { + "type": "integer", + "minimum": 0 + }, + "CapacityUnitsConfiguration": { + "type": "object", + "properties": { + "RescoreCapacityUnits": { + "$ref": "#/definitions/RescoreCapacityUnits" + } + }, + "additionalProperties": false, + "required": [ + "RescoreCapacityUnits" + ] + }, + "Name": { + "description": "Name of kendra ranking rescore execution plan", + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "Id": { + "description": "Unique ID of rescore execution plan", + "type": "string", + "minLength": 36, + "maxLength": 36 + }, + "Arn": { + "type": "string", + "maxLength": 1000 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "properties": { + "Id": { + "$ref": "#/definitions/Id" + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Description": { + "description": "A description for the execution plan", + "$ref": "#/definitions/Description" + }, + "Tags": { + "description": "Tags for labeling the execution plan", + "$ref": "#/definitions/Tags" + }, + "Name": { + "$ref": "#/definitions/Name" + }, + "CapacityUnits": { + "description": "Capacity units", + "$ref": "#/definitions/CapacityUnitsConfiguration" + } + }, + "required": [ + "Name" + ], + "handlers": { + "create": { + "permissions": [ + "kendra-ranking:CreateRescoreExecutionPlan", + "kendra-ranking:DescribeRescoreExecutionPlan", + "kendra-ranking:UpdateRescoreExecutionPlan", + "kendra-ranking:ListTagsForResource", + "kendra-ranking:TagResource" + ], + "timeoutInMinutes": 240 + }, + "read": { + "permissions": [ + "kendra-ranking:DescribeRescoreExecutionPlan", + "kendra-ranking:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "kendra-ranking:DescribeRescoreExecutionPlan", + "kendra-ranking:UpdateRescoreExecutionPlan", + "kendra-ranking:ListTagsForResource", + "kendra-ranking:TagResource", + "kendra-ranking:UntagResource" + ], + "timeoutInMinutes": 240 + }, + "delete": { + "permissions": [ + "kendra-ranking:DescribeRescoreExecutionPlan", + "kendra-ranking:DeleteRescoreExecutionPlan" + ], + "timeoutInMinutes": 720 + }, + "list": { + "permissions": [ + "kendra-ranking:ListRescoreExecutionPlans" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesis/stream.json b/internal/aws/cfn/schemas/aws/kinesis/stream.json new file mode 100644 index 00000000..dbeb1e9a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesis/stream.json @@ -0,0 +1,195 @@ +{ + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kinesis.git", + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": false + }, + "handlers": { + "read": { + "permissions": [ + "kinesis:DescribeStreamSummary", + "kinesis:ListTagsForStream" + ] + }, + "create": { + "permissions": [ + "kinesis:EnableEnhancedMonitoring", + "kinesis:DescribeStreamSummary", + "kinesis:CreateStream", + "kinesis:IncreaseStreamRetentionPeriod", + "kinesis:StartStreamEncryption", + "kinesis:AddTagsToStream", + "kinesis:ListTagsForStream" + ] + }, + "update": { + "permissions": [ + "kinesis:EnableEnhancedMonitoring", + "kinesis:DisableEnhancedMonitoring", + "kinesis:DescribeStreamSummary", + "kinesis:UpdateShardCount", + "kinesis:UpdateStreamMode", + "kinesis:IncreaseStreamRetentionPeriod", + "kinesis:DecreaseStreamRetentionPeriod", + "kinesis:StartStreamEncryption", + "kinesis:StopStreamEncryption", + "kinesis:AddTagsToStream", + "kinesis:RemoveTagsFromStream", + "kinesis:ListTagsForStream" + ], + "timeoutInMinutes": 240 + }, + "list": { + "permissions": [ + "kinesis:ListStreams" + ] + }, + "delete": { + "permissions": [ + "kinesis:DescribeStreamSummary", + "kinesis:DeleteStream", + "kinesis:RemoveTagsFromStream" + ] + } + }, + "typeName": "AWS::Kinesis::Stream", + "readOnlyProperties": [ + "/properties/Arn" + ], + "description": "Resource Type definition for AWS::Kinesis::Stream", + "createOnlyProperties": [ + "/properties/Name" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Name" + ], + "definitions": { + "StreamModeDetails": { + "description": "When specified, enables or updates the mode of stream. Default is PROVISIONED.", + "additionalProperties": false, + "type": "object", + "properties": { + "StreamMode": { + "description": "The mode of the stream", + "type": "string", + "enum": [ + "ON_DEMAND", + "PROVISIONED" + ] + } + }, + "required": [ + "StreamMode" + ] + }, + "StreamEncryption": { + "description": "When specified, enables or updates server-side encryption using an AWS KMS key for a specified stream. Removing this property from your stack template and updating your stack disables encryption.", + "additionalProperties": false, + "type": "object", + "properties": { + "EncryptionType": { + "description": "The encryption type to use. The only valid value is KMS. ", + "type": "string", + "enum": [ + "KMS" + ] + }, + "KeyId": { + "minLength": 1, + "description": "The GUID for the customer-managed AWS KMS key to use for encryption. This value can be a globally unique identifier, a fully specified Amazon Resource Name (ARN) to either an alias or a key, or an alias name prefixed by \"alias/\".You can also use a master key owned by Kinesis Data Streams by specifying the alias aws/kinesis.", + "anyOf": [ + { + "relationshipRef": { + "typeName": "AWS::KMS::Key", + "propertyPath": "/properties/Arn" + } + }, + { + "relationshipRef": { + "typeName": "AWS::KMS::Key", + "propertyPath": "/properties/KeyId" + } + } + ], + "type": "string", + "maxLength": 2048 + } + }, + "required": [ + "EncryptionType", + "KeyId" + ] + }, + "Tag": { + "description": "An arbitrary set of tags (key-value pairs) to associate with the Kinesis stream.", + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "minLength": 0, + "description": "The value for the tag. You can specify a value that is 0 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "maxLength": 255 + }, + "Key": { + "minLength": 1, + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "maxLength": 128 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "StreamModeDetails": { + "default": { + "StreamMode": "PROVISIONED" + }, + "description": "The mode in which the stream is running.", + "$ref": "#/definitions/StreamModeDetails" + }, + "StreamEncryption": { + "description": "When specified, enables or updates server-side encryption using an AWS KMS key for a specified stream.", + "$ref": "#/definitions/StreamEncryption" + }, + "Arn": { + "description": "The Amazon resource name (ARN) of the Kinesis stream", + "type": "string" + }, + "RetentionPeriodHours": { + "description": "The number of hours for the data records that are stored in shards to remain accessible.", + "type": "integer", + "minimum": 24 + }, + "Tags": { + "maxItems": 50, + "uniqueItems": false, + "description": "An arbitrary set of tags (key–value pairs) to associate with the Kinesis stream.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9_.-]+$", + "description": "The name of the Kinesis stream.", + "type": "string", + "maxLength": 128 + }, + "ShardCount": { + "description": "The number of shards that the stream uses. Required when StreamMode = PROVISIONED is passed.", + "type": "integer", + "minimum": 1 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kinesis/streamconsumer.json b/internal/aws/cfn/schemas/aws/kinesis/streamconsumer.json new file mode 100644 index 00000000..635fb100 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesis/streamconsumer.json @@ -0,0 +1,42 @@ +{ + "typeName": "AWS::Kinesis::StreamConsumer", + "description": "Resource Type definition for AWS::Kinesis::StreamConsumer", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ConsumerCreationTimestamp": { + "type": "string" + }, + "ConsumerName": { + "type": "string" + }, + "ConsumerARN": { + "type": "string" + }, + "ConsumerStatus": { + "type": "string" + }, + "StreamARN": { + "type": "string" + } + }, + "required": [ + "ConsumerName", + "StreamARN" + ], + "readOnlyProperties": [ + "/properties/ConsumerStatus", + "/properties/ConsumerARN", + "/properties/ConsumerCreationTimestamp", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/ConsumerName", + "/properties/StreamARN" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisanalytics/application.json b/internal/aws/cfn/schemas/aws/kinesisanalytics/application.json new file mode 100644 index 00000000..709c04ce --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisanalytics/application.json @@ -0,0 +1,231 @@ +{ + "typeName": "AWS::KinesisAnalytics::Application", + "description": "Resource Type definition for AWS::KinesisAnalytics::Application", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ApplicationName": { + "type": "string" + }, + "Inputs": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Input" + } + }, + "ApplicationDescription": { + "type": "string" + }, + "ApplicationCode": { + "type": "string" + } + }, + "definitions": { + "Input": { + "type": "object", + "additionalProperties": false, + "properties": { + "NamePrefix": { + "type": "string" + }, + "InputSchema": { + "$ref": "#/definitions/InputSchema" + }, + "KinesisStreamsInput": { + "$ref": "#/definitions/KinesisStreamsInput" + }, + "KinesisFirehoseInput": { + "$ref": "#/definitions/KinesisFirehoseInput" + }, + "InputProcessingConfiguration": { + "$ref": "#/definitions/InputProcessingConfiguration" + }, + "InputParallelism": { + "$ref": "#/definitions/InputParallelism" + } + }, + "required": [ + "NamePrefix", + "InputSchema" + ] + }, + "InputProcessingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputLambdaProcessor": { + "$ref": "#/definitions/InputLambdaProcessor" + } + } + }, + "KinesisFirehoseInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "RoleARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN", + "RoleARN" + ] + }, + "KinesisStreamsInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "RoleARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN", + "RoleARN" + ] + }, + "InputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordEncoding": { + "type": "string" + }, + "RecordColumns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/RecordColumn" + } + }, + "RecordFormat": { + "$ref": "#/definitions/RecordFormat" + } + }, + "required": [ + "RecordColumns", + "RecordFormat" + ] + }, + "InputParallelism": { + "type": "object", + "additionalProperties": false, + "properties": { + "Count": { + "type": "integer" + } + } + }, + "RecordColumn": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mapping": { + "type": "string" + }, + "SqlType": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "SqlType", + "Name" + ] + }, + "RecordFormat": { + "type": "object", + "additionalProperties": false, + "properties": { + "MappingParameters": { + "$ref": "#/definitions/MappingParameters" + }, + "RecordFormatType": { + "type": "string" + } + }, + "required": [ + "RecordFormatType" + ] + }, + "InputLambdaProcessor": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "RoleARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN", + "RoleARN" + ] + }, + "MappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "JSONMappingParameters": { + "$ref": "#/definitions/JSONMappingParameters" + }, + "CSVMappingParameters": { + "$ref": "#/definitions/CSVMappingParameters" + } + } + }, + "JSONMappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordRowPath": { + "type": "string" + } + }, + "required": [ + "RecordRowPath" + ] + }, + "CSVMappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordRowDelimiter": { + "type": "string" + }, + "RecordColumnDelimiter": { + "type": "string" + } + }, + "required": [ + "RecordColumnDelimiter", + "RecordRowDelimiter" + ] + } + }, + "required": [ + "Inputs" + ], + "createOnlyProperties": [ + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisanalytics/applicationoutput.json b/internal/aws/cfn/schemas/aws/kinesisanalytics/applicationoutput.json new file mode 100644 index 00000000..5f0b52a9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisanalytics/applicationoutput.json @@ -0,0 +1,112 @@ +{ + "typeName": "AWS::KinesisAnalytics::ApplicationOutput", + "description": "Resource Type definition for AWS::KinesisAnalytics::ApplicationOutput", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ApplicationName": { + "type": "string" + }, + "Output": { + "$ref": "#/definitions/Output" + } + }, + "definitions": { + "Output": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationSchema": { + "$ref": "#/definitions/DestinationSchema" + }, + "LambdaOutput": { + "$ref": "#/definitions/LambdaOutput" + }, + "KinesisFirehoseOutput": { + "$ref": "#/definitions/KinesisFirehoseOutput" + }, + "KinesisStreamsOutput": { + "$ref": "#/definitions/KinesisStreamsOutput" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "DestinationSchema" + ] + }, + "KinesisStreamsOutput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "RoleARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN", + "RoleARN" + ] + }, + "KinesisFirehoseOutput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "RoleARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN", + "RoleARN" + ] + }, + "LambdaOutput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + }, + "RoleARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN", + "RoleARN" + ] + }, + "DestinationSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordFormatType": { + "type": "string" + } + } + } + }, + "required": [ + "ApplicationName", + "Output" + ], + "createOnlyProperties": [ + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisanalytics/applicationreferencedatasource.json b/internal/aws/cfn/schemas/aws/kinesisanalytics/applicationreferencedatasource.json new file mode 100644 index 00000000..c5d39168 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisanalytics/applicationreferencedatasource.json @@ -0,0 +1,166 @@ +{ + "typeName": "AWS::KinesisAnalytics::ApplicationReferenceDataSource", + "description": "Resource Type definition for AWS::KinesisAnalytics::ApplicationReferenceDataSource", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ApplicationName": { + "type": "string" + }, + "ReferenceDataSource": { + "$ref": "#/definitions/ReferenceDataSource" + } + }, + "definitions": { + "ReferenceDataSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReferenceSchema": { + "$ref": "#/definitions/ReferenceSchema" + }, + "TableName": { + "type": "string" + }, + "S3ReferenceDataSource": { + "$ref": "#/definitions/S3ReferenceDataSource" + } + }, + "required": [ + "ReferenceSchema" + ] + }, + "S3ReferenceDataSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketARN": { + "type": "string" + }, + "FileKey": { + "type": "string" + }, + "ReferenceRoleARN": { + "type": "string" + } + }, + "required": [ + "BucketARN", + "FileKey", + "ReferenceRoleARN" + ] + }, + "ReferenceSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordEncoding": { + "type": "string" + }, + "RecordColumns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/RecordColumn" + } + }, + "RecordFormat": { + "$ref": "#/definitions/RecordFormat" + } + }, + "required": [ + "RecordColumns", + "RecordFormat" + ] + }, + "RecordColumn": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mapping": { + "type": "string" + }, + "SqlType": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "SqlType", + "Name" + ] + }, + "RecordFormat": { + "type": "object", + "additionalProperties": false, + "properties": { + "MappingParameters": { + "$ref": "#/definitions/MappingParameters" + }, + "RecordFormatType": { + "type": "string" + } + }, + "required": [ + "RecordFormatType" + ] + }, + "MappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "JSONMappingParameters": { + "$ref": "#/definitions/JSONMappingParameters" + }, + "CSVMappingParameters": { + "$ref": "#/definitions/CSVMappingParameters" + } + } + }, + "CSVMappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordRowDelimiter": { + "type": "string" + }, + "RecordColumnDelimiter": { + "type": "string" + } + }, + "required": [ + "RecordColumnDelimiter", + "RecordRowDelimiter" + ] + }, + "JSONMappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordRowPath": { + "type": "string" + } + }, + "required": [ + "RecordRowPath" + ] + } + }, + "required": [ + "ReferenceDataSource", + "ApplicationName" + ], + "createOnlyProperties": [ + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/application.json b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/application.json new file mode 100644 index 00000000..27505fb6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/application.json @@ -0,0 +1,983 @@ +{ + "typeName": "AWS::KinesisAnalyticsV2::Application", + "description": "Creates an Amazon Kinesis Data Analytics application. For information about creating a Kinesis Data Analytics application, see [Creating an Application](https://docs.aws.amazon.com/kinesisanalytics/latest/java/getting-started.html).", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kinesisanalyticsv2.git", + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "properties": { + "ApplicationConfiguration": { + "description": "Use this parameter to configure the application.", + "$ref": "#/definitions/ApplicationConfiguration" + }, + "ApplicationDescription": { + "description": "The description of the application.", + "type": "string", + "default": "", + "minLength": 0, + "maxLength": 1024 + }, + "ApplicationMode": { + "description": "To create a Kinesis Data Analytics Studio notebook, you must set the mode to `INTERACTIVE`. However, for a Kinesis Data Analytics for Apache Flink application, the mode is optional.", + "type": "string", + "enum": [ + "INTERACTIVE", + "STREAMING" + ] + }, + "ApplicationName": { + "description": "The name of the application.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9_.-]+$" + }, + "RuntimeEnvironment": { + "description": "The runtime environment for the application.", + "type": "string" + }, + "ServiceExecutionRole": { + "description": "Specifies the IAM role that the application uses to access external resources.", + "$ref": "#/definitions/Arn" + }, + "RunConfiguration": { + "description": "Specifies run configuration (start parameters) of a Kinesis Data Analytics application. Evaluated on update for RUNNING applications an only.", + "$ref": "#/definitions/RunConfiguration" + }, + "ApplicationMaintenanceConfiguration": { + "description": "Used to configure start of maintenance window.", + "$ref": "#/definitions/ApplicationMaintenanceConfiguration" + }, + "Tags": { + "description": "A list of one or more tags to assign to the application. A tag is a key-value pair that identifies an application. Note that the maximum number of application tags includes system tags. The maximum number of user-defined application tags is 50.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Arn": { + "description": "The Amazon Resource Name", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^arn:.*$" + }, + "ApplicationConfiguration": { + "description": "Specifies the creation parameters for a Kinesis Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "ApplicationCodeConfiguration": { + "description": "The code location and type parameters for a Flink-based Kinesis Data Analytics application.", + "$ref": "#/definitions/ApplicationCodeConfiguration" + }, + "ApplicationSnapshotConfiguration": { + "description": "Describes whether snapshots are enabled for a Flink-based Kinesis Data Analytics application.", + "$ref": "#/definitions/ApplicationSnapshotConfiguration" + }, + "EnvironmentProperties": { + "description": "Describes execution properties for a Flink-based Kinesis Data Analytics application.", + "$ref": "#/definitions/EnvironmentProperties" + }, + "FlinkApplicationConfiguration": { + "description": "The creation and update parameters for a Flink-based Kinesis Data Analytics application.", + "$ref": "#/definitions/FlinkApplicationConfiguration" + }, + "SqlApplicationConfiguration": { + "description": "The creation and update parameters for a SQL-based Kinesis Data Analytics application.", + "$ref": "#/definitions/SqlApplicationConfiguration" + }, + "ZeppelinApplicationConfiguration": { + "description": "The configuration parameters for a Kinesis Data Analytics Studio notebook.", + "$ref": "#/definitions/ZeppelinApplicationConfiguration" + }, + "VpcConfigurations": { + "description": "The array of descriptions of VPC configurations available to the application.", + "$ref": "#/definitions/VpcConfigurations" + } + } + }, + "RunConfiguration": { + "description": "Identifies the run configuration (start parameters) of a Kinesis Data Analytics application. This section is evaluated only on stack updates for applications in running RUNNING state and has no effect during manual application start.", + "type": "object", + "additionalProperties": false, + "properties": { + "ApplicationRestoreConfiguration": { + "description": "Describes the restore behavior of a restarting application.", + "$ref": "#/definitions/ApplicationRestoreConfiguration" + }, + "FlinkRunConfiguration": { + "description": "Describes the starting parameters for a Flink-based Kinesis Data Analytics application.", + "$ref": "#/definitions/FlinkRunConfiguration" + } + } + }, + "ApplicationRestoreConfiguration": { + "description": "Describes the restore behavior of a restarting application.", + "type": "object", + "additionalProperties": false, + "properties": { + "ApplicationRestoreType": { + "description": "Specifies how the application should be restored.", + "type": "string", + "enum": [ + "SKIP_RESTORE_FROM_SNAPSHOT", + "RESTORE_FROM_LATEST_SNAPSHOT", + "RESTORE_FROM_CUSTOM_SNAPSHOT" + ] + }, + "SnapshotName": { + "description": "The identifier of an existing snapshot of application state to use to restart an application. The application uses this value if RESTORE_FROM_CUSTOM_SNAPSHOT is specified for the ApplicationRestoreType.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[a-zA-Z0-9_.-]+$" + } + }, + "required": [ + "ApplicationRestoreType" + ] + }, + "FlinkRunConfiguration": { + "description": "Describes the starting parameters for a Flink-based Kinesis Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "AllowNonRestoredState": { + "description": "When restoring from a snapshot, specifies whether the runtime is allowed to skip a state that cannot be mapped to the new program. Defaults to false. If you update your application without specifying this parameter, AllowNonRestoredState will be set to false, even if it was previously set to true.", + "type": "boolean" + } + } + }, + "ApplicationCodeConfiguration": { + "description": "Describes code configuration for an application.", + "type": "object", + "additionalProperties": false, + "properties": { + "CodeContent": { + "description": "The location and type of the application code.", + "$ref": "#/definitions/CodeContent" + }, + "CodeContentType": { + "description": "Specifies whether the code content is in text or zip format.", + "type": "string", + "enum": [ + "PLAINTEXT", + "ZIPFILE" + ] + } + }, + "required": [ + "CodeContentType", + "CodeContent" + ] + }, + "CodeContent": { + "description": "Specifies either the application code, or the location of the application code, for a Flink-based Kinesis Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "ZipFileContent": { + "description": "The zip-format code for a Flink-based Kinesis Data Analytics application.", + "type": "string" + }, + "S3ContentLocation": { + "description": "Information about the Amazon S3 bucket that contains the application code.", + "$ref": "#/definitions/S3ContentLocation" + }, + "TextContent": { + "description": "The text-format code for a Flink-based Kinesis Data Analytics application.", + "type": "string", + "minLength": 1, + "maxLength": 102400 + } + } + }, + "S3ContentLocation": { + "description": "The location of an application or a custom artifact.", + "type": "object", + "additionalProperties": false, + "properties": { + "BucketARN": { + "description": "The Amazon Resource Name (ARN) for the S3 bucket containing the application code.", + "$ref": "#/definitions/Arn" + }, + "FileKey": { + "description": "The file key for the object containing the application code.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ObjectVersion": { + "description": "The version of the object containing the application code.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "BucketARN", + "FileKey" + ] + }, + "ApplicationSnapshotConfiguration": { + "description": "Describes whether snapshots are enabled for a Flink-based Kinesis Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "SnapshotsEnabled": { + "description": "Describes whether snapshots are enabled for a Flink-based Kinesis Data Analytics application.", + "type": "boolean" + } + }, + "required": [ + "SnapshotsEnabled" + ] + }, + "EnvironmentProperties": { + "description": "Describes execution properties for a Flink-based Kinesis Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "PropertyGroups": { + "description": "Describes the execution property groups.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/PropertyGroup" + } + } + } + }, + "PropertyGroup": { + "description": "Property key-value pairs passed into an application.", + "type": "object", + "additionalProperties": false, + "properties": { + "PropertyGroupId": { + "description": "Describes the key of an application execution property key-value pair.", + "type": "string", + "minLength": 1, + "maxLength": 50, + "pattern": "^[a-zA-Z0-9_.-]+$" + }, + "PropertyMap": { + "description": "Describes the value of an application execution property key-value pair.", + "type": "object", + "additionalProperties": false, + "maxProperties": 50, + "patternProperties": { + "^.{1,2048}$": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + } + } + } + }, + "FlinkApplicationConfiguration": { + "description": "Describes configuration parameters for a Flink-based Kinesis Data Analytics application or a Studio notebook.", + "type": "object", + "additionalProperties": false, + "properties": { + "CheckpointConfiguration": { + "description": "Describes an application's checkpointing configuration. Checkpointing is the process of persisting application state for fault tolerance. For more information, see Checkpoints for Fault Tolerance in the Apache Flink Documentation.", + "$ref": "#/definitions/CheckpointConfiguration" + }, + "MonitoringConfiguration": { + "description": "Describes configuration parameters for Amazon CloudWatch logging for an application.", + "$ref": "#/definitions/MonitoringConfiguration" + }, + "ParallelismConfiguration": { + "description": "Describes parameters for how an application executes multiple tasks simultaneously.", + "$ref": "#/definitions/ParallelismConfiguration" + } + } + }, + "CheckpointConfiguration": { + "description": "Describes an application's checkpointing configuration. Checkpointing is the process of persisting application state for fault tolerance. For more information, see Checkpoints for Fault Tolerance in the Apache Flink Documentation.", + "type": "object", + "additionalProperties": false, + "properties": { + "ConfigurationType": { + "description": "Describes whether the application uses Kinesis Data Analytics' default checkpointing behavior. You must set this property to `CUSTOM` in order to set the `CheckpointingEnabled`, `CheckpointInterval`, or `MinPauseBetweenCheckpoints` parameters.", + "type": "string", + "enum": [ + "DEFAULT", + "CUSTOM" + ] + }, + "CheckpointingEnabled": { + "description": "Describes whether checkpointing is enabled for a Flink-based Kinesis Data Analytics application.", + "type": "boolean" + }, + "CheckpointInterval": { + "description": "Describes the interval in milliseconds between checkpoint operations.", + "type": "integer", + "format": "int64", + "minimum": 1, + "maximum": 9223372036854775807 + }, + "MinPauseBetweenCheckpoints": { + "description": "Describes the minimum time in milliseconds after a checkpoint operation completes that a new checkpoint operation can start. If a checkpoint operation takes longer than the CheckpointInterval, the application otherwise performs continual checkpoint operations. For more information, see Tuning Checkpointing in the Apache Flink Documentation.", + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 9223372036854775807 + } + }, + "required": [ + "ConfigurationType" + ] + }, + "MonitoringConfiguration": { + "description": "Describes configuration parameters for Amazon CloudWatch logging for a Java-based Kinesis Data Analytics application. For more information about CloudWatch logging, see Monitoring.", + "type": "object", + "additionalProperties": false, + "properties": { + "ConfigurationType": { + "description": "Describes whether to use the default CloudWatch logging configuration for an application. You must set this property to CUSTOM in order to set the LogLevel or MetricsLevel parameters.", + "type": "string", + "enum": [ + "DEFAULT", + "CUSTOM" + ] + }, + "MetricsLevel": { + "description": "Describes the granularity of the CloudWatch Logs for an application. The Parallelism level is not recommended for applications with a Parallelism over 64 due to excessive costs.", + "type": "string", + "enum": [ + "APPLICATION", + "OPERATOR", + "PARALLELISM", + "TASK" + ] + }, + "LogLevel": { + "description": "Describes the verbosity of the CloudWatch Logs for an application.", + "type": "string", + "enum": [ + "DEBUG", + "INFO", + "WARN", + "ERROR" + ] + } + }, + "required": [ + "ConfigurationType" + ] + }, + "ParallelismConfiguration": { + "description": "Describes parameters for how a Flink-based Kinesis Data Analytics application executes multiple tasks simultaneously. For more information about parallelism, see Parallel Execution in the Apache Flink Documentation", + "type": "object", + "additionalProperties": false, + "properties": { + "ConfigurationType": { + "description": "Describes whether the application uses the default parallelism for the Kinesis Data Analytics service. You must set this property to `CUSTOM` in order to change your application's `AutoScalingEnabled`, `Parallelism`, or `ParallelismPerKPU` properties.", + "type": "string", + "enum": [ + "CUSTOM", + "DEFAULT" + ] + }, + "ParallelismPerKPU": { + "description": "Describes the number of parallel tasks that a Java-based Kinesis Data Analytics application can perform per Kinesis Processing Unit (KPU) used by the application. For more information about KPUs, see Amazon Kinesis Data Analytics Pricing.", + "type": "integer", + "minimum": 1 + }, + "Parallelism": { + "description": "Describes the initial number of parallel tasks that a Java-based Kinesis Data Analytics application can perform. The Kinesis Data Analytics service can increase this number automatically if ParallelismConfiguration:AutoScalingEnabled is set to true.", + "type": "integer", + "minimum": 1 + }, + "AutoScalingEnabled": { + "description": "Describes whether the Kinesis Data Analytics service can increase the parallelism of the application in response to increased throughput.", + "type": "boolean" + } + }, + "required": [ + "ConfigurationType" + ] + }, + "SqlApplicationConfiguration": { + "description": "Describes the inputs, outputs, and reference data sources for a SQL-based Kinesis Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "Inputs": { + "description": "The array of Input objects describing the input streams used by the application.", + "type": "array", + "maxItems": 1, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Input" + } + } + } + }, + "Input": { + "description": "When you configure the application input for a SQL-based Kinesis Data Analytics application, you specify the streaming source, the in-application stream name that is created, and the mapping between the two.", + "type": "object", + "additionalProperties": false, + "properties": { + "NamePrefix": { + "description": "The name prefix to use when creating an in-application stream. Suppose that you specify a prefix `\"MyInApplicationStream\"`. Kinesis Data Analytics then creates one or more (as per the InputParallelism count you specified) in-application streams with the names `\"MyInApplicationStream_001\"`, `\"MyInApplicationStream_002\"`, and so on.", + "type": "string", + "minLength": 1, + "maxLength": 32, + "pattern": "^[^-\\s<>&]*$" + }, + "InputSchema": { + "description": "Describes the format of the data in the streaming source, and how each data element maps to corresponding columns in the in-application stream that is being created.", + "$ref": "#/definitions/InputSchema" + }, + "KinesisStreamsInput": { + "description": "If the streaming source is an Amazon Kinesis data stream, identifies the stream's Amazon Resource Name (ARN).", + "$ref": "#/definitions/KinesisStreamsInput" + }, + "KinesisFirehoseInput": { + "description": "If the streaming source is an Amazon Kinesis Data Firehose delivery stream, identifies the delivery stream's ARN.", + "$ref": "#/definitions/KinesisFirehoseInput" + }, + "InputProcessingConfiguration": { + "description": "The InputProcessingConfiguration for the input. An input processor transforms records as they are received from the stream, before the application's SQL code executes. Currently, the only input processing configuration available is InputLambdaProcessor.", + "$ref": "#/definitions/InputProcessingConfiguration" + }, + "InputParallelism": { + "description": "Describes the number of in-application streams to create.", + "$ref": "#/definitions/InputParallelism" + } + }, + "required": [ + "NamePrefix", + "InputSchema" + ] + }, + "InputSchema": { + "description": "For a SQL-based Kinesis Data Analytics application, describes the format of the data in the streaming source, and how each data element maps to corresponding columns created in the in-application stream.", + "type": "object", + "additionalProperties": false, + "properties": { + "RecordEncoding": { + "description": "Specifies the encoding of the records in the streaming source. For example, UTF-8.", + "type": "string", + "enum": [ + "UTF-8" + ] + }, + "RecordColumns": { + "description": "A list of `RecordColumn` objects.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 1000, + "items": { + "$ref": "#/definitions/RecordColumn" + } + }, + "RecordFormat": { + "description": "Specifies the format of the records on the streaming source.", + "$ref": "#/definitions/RecordFormat" + } + }, + "required": [ + "RecordColumns", + "RecordFormat" + ] + }, + "RecordColumn": { + "description": "For a SQL-based Kinesis Data Analytics application, describes the mapping of each data element in the streaming source to the corresponding column in the in-application stream.\nAlso used to describe the format of the reference data source.", + "type": "object", + "additionalProperties": false, + "properties": { + "Mapping": { + "description": "A reference to the data element in the streaming input or the reference data source.", + "type": "string", + "minLength": 1, + "maxLength": 65535 + }, + "Name": { + "description": "The name of the column that is created in the in-application input stream or reference table.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[^-\\s<>&]*$" + }, + "SqlType": { + "description": "The type of column created in the in-application input stream or reference table.", + "type": "string", + "minLength": 1, + "maxLength": 100 + } + }, + "required": [ + "SqlType", + "Name" + ] + }, + "RecordFormat": { + "description": "For a SQL-based Kinesis Data Analytics application, describes the record format and relevant mapping information that should be applied to schematize the records on the stream.", + "type": "object", + "additionalProperties": false, + "properties": { + "RecordFormatType": { + "description": "The type of record format.", + "type": "string", + "enum": [ + "CSV", + "JSON" + ] + }, + "MappingParameters": { + "description": "When you configure application input at the time of creating or updating an application, provides additional mapping information specific to the record format (such as JSON, CSV, or record fields delimited by some delimiter) on the streaming source.", + "$ref": "#/definitions/MappingParameters" + } + }, + "required": [ + "RecordFormatType" + ] + }, + "MappingParameters": { + "description": "When you configure a SQL-based Kinesis Data Analytics application's input at the time of creating or updating an application, provides additional mapping information specific to the record format (such as JSON, CSV, or record fields delimited by some delimiter) on the streaming source.", + "type": "object", + "additionalProperties": false, + "properties": { + "CSVMappingParameters": { + "description": "Provides additional mapping information when the record format uses delimiters (for example, CSV).", + "$ref": "#/definitions/CSVMappingParameters" + }, + "JSONMappingParameters": { + "description": "Provides additional mapping information when JSON is the record format on the streaming source.", + "$ref": "#/definitions/JSONMappingParameters" + } + } + }, + "CSVMappingParameters": { + "description": "For a SQL-based Kinesis Data Analytics application, provides additional mapping information when the record format uses delimiters, such as CSV. For example, the following sample records use CSV format, where the records use the '\\n' as the row delimiter and a comma (\",\") as the column delimiter:\n`\"name1\", \"address1\"`\n`\"name2\", \"address2\"`", + "type": "object", + "additionalProperties": false, + "properties": { + "RecordColumnDelimiter": { + "description": "The column delimiter. For example, in a CSV format, a comma (\",\") is the typical column delimiter.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "RecordRowDelimiter": { + "description": "The row delimiter. For example, in a CSV format, '\\n' is the typical row delimiter.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "RecordRowDelimiter", + "RecordColumnDelimiter" + ] + }, + "JSONMappingParameters": { + "description": "For a SQL-based Kinesis Data Analytics application, provides additional mapping information when JSON is the record format on the streaming source.", + "type": "object", + "additionalProperties": false, + "properties": { + "RecordRowPath": { + "description": "The path to the top-level parent that contains the records.", + "type": "string", + "minLength": 1, + "maxLength": 65535, + "pattern": "^(?=^\\$)(?=^\\S+$).*$" + } + }, + "required": [ + "RecordRowPath" + ] + }, + "KinesisStreamsInput": { + "description": "Identifies a Kinesis data stream as the streaming source. You provide the stream's Amazon Resource Name (ARN).", + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "description": "The ARN of the input Kinesis data stream to read.", + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "ResourceARN" + ] + }, + "KinesisFirehoseInput": { + "description": "For a SQL-based Kinesis Data Analytics application, identifies a Kinesis Data Firehose delivery stream as the streaming source. You provide the delivery stream's Amazon Resource Name (ARN).", + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "description": "The Amazon Resource Name (ARN) of the delivery stream.", + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "ResourceARN" + ] + }, + "InputProcessingConfiguration": { + "description": "For an SQL-based Amazon Kinesis Data Analytics application, describes a processor that is used to preprocess the records in the stream before being processed by your application code. Currently, the only input processor available is Amazon Lambda.", + "type": "object", + "additionalProperties": false, + "properties": { + "InputLambdaProcessor": { + "description": "The InputLambdaProcessor that is used to preprocess the records in the stream before being processed by your application code.", + "$ref": "#/definitions/InputLambdaProcessor" + } + } + }, + "InputLambdaProcessor": { + "description": "An object that contains the Amazon Resource Name (ARN) of the Amazon Lambda function that is used to preprocess records in the stream in a SQL-based Kinesis Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "description": "The ARN of the Amazon Lambda function that operates on records in the stream.", + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "ResourceARN" + ] + }, + "InputParallelism": { + "description": "For a SQL-based Kinesis Data Analytics application, describes the number of in-application streams to create for a given streaming source.", + "type": "object", + "additionalProperties": false, + "properties": { + "Count": { + "description": "The number of in-application streams to create.", + "type": "integer", + "minimum": 1, + "maximum": 64 + } + } + }, + "ZeppelinApplicationConfiguration": { + "description": "The configuration of a Kinesis Data Analytics Studio notebook.", + "type": "object", + "additionalProperties": false, + "properties": { + "CatalogConfiguration": { + "description": "The Amazon Glue Data Catalog that you use in queries in a Kinesis Data Analytics Studio notebook.", + "$ref": "#/definitions/CatalogConfiguration" + }, + "MonitoringConfiguration": { + "description": "The monitoring configuration of a Kinesis Data Analytics Studio notebook.", + "$ref": "#/definitions/ZeppelinMonitoringConfiguration" + }, + "DeployAsApplicationConfiguration": { + "description": "The information required to deploy a Kinesis Data Analytics Studio notebook as an application with durable state.", + "$ref": "#/definitions/DeployAsApplicationConfiguration" + }, + "CustomArtifactsConfiguration": { + "description": "A list of CustomArtifactConfiguration objects.", + "$ref": "#/definitions/CustomArtifactsConfiguration" + } + } + }, + "CatalogConfiguration": { + "description": "The configuration parameters for the default Amazon Glue database. You use this database for SQL queries that you write in a Kinesis Data Analytics Studio notebook.", + "type": "object", + "additionalProperties": false, + "properties": { + "GlueDataCatalogConfiguration": { + "description": "The configuration parameters for the default Amazon Glue database. You use this database for Apache Flink SQL queries and table API transforms that you write in a Kinesis Data Analytics Studio notebook.", + "$ref": "#/definitions/GlueDataCatalogConfiguration" + } + } + }, + "GlueDataCatalogConfiguration": { + "description": "The configuration of the Glue Data Catalog that you use for Apache Flink SQL queries and table API transforms that you write in an application.", + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseARN": { + "description": "The Amazon Resource Name (ARN) of the database.", + "$ref": "#/definitions/Arn" + } + } + }, + "ZeppelinMonitoringConfiguration": { + "description": "Describes configuration parameters for Amazon CloudWatch logging for a Kinesis Data Analytics Studio notebook. For more information about CloudWatch logging, see Monitoring.", + "type": "object", + "additionalProperties": false, + "properties": { + "LogLevel": { + "description": "The verbosity of the CloudWatch Logs for an application. You can set it to `INFO`, `WARN`, `ERROR`, or `DEBUG`.", + "type": "string", + "enum": [ + "DEBUG", + "INFO", + "WARN", + "ERROR" + ] + } + } + }, + "DeployAsApplicationConfiguration": { + "description": "The information required to deploy a Kinesis Data Analytics Studio notebook as an application with durable state.", + "type": "object", + "additionalProperties": false, + "properties": { + "S3ContentLocation": { + "description": "The description of an Amazon S3 object that contains the Amazon Data Analytics application, including the Amazon Resource Name (ARN) of the S3 bucket, the name of the Amazon S3 object that contains the data, and the version number of the Amazon S3 object that contains the data.", + "$ref": "#/definitions/S3ContentBaseLocation" + } + }, + "required": [ + "S3ContentLocation" + ] + }, + "S3ContentBaseLocation": { + "description": "The base location of the Amazon Data Analytics application.", + "type": "object", + "additionalProperties": false, + "properties": { + "BucketARN": { + "description": "The Amazon Resource Name (ARN) of the S3 bucket.", + "$ref": "#/definitions/Arn" + }, + "BasePath": { + "description": "The base path for the S3 bucket.", + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^[a-zA-Z0-9/!-_.*'()]+$" + } + }, + "required": [ + "BucketARN" + ] + }, + "CustomArtifactsConfiguration": { + "description": "A list of CustomArtifactConfiguration objects.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 50, + "items": { + "description": "The configuration of connectors and user-defined functions.", + "$ref": "#/definitions/CustomArtifactConfiguration" + } + }, + "CustomArtifactConfiguration": { + "description": "The configuration of connectors and user-defined functions.", + "type": "object", + "additionalProperties": false, + "properties": { + "ArtifactType": { + "description": "Set this to either `UDF` or `DEPENDENCY_JAR`. `UDF` stands for user-defined functions. This type of artifact must be in an S3 bucket. A `DEPENDENCY_JAR` can be in either Maven or an S3 bucket.", + "type": "string", + "enum": [ + "DEPENDENCY_JAR", + "UDF" + ] + }, + "MavenReference": { + "description": "The parameters required to fully specify a Maven reference.", + "$ref": "#/definitions/MavenReference" + }, + "S3ContentLocation": { + "description": "The location of the custom artifacts.", + "$ref": "#/definitions/S3ContentLocation" + } + }, + "required": [ + "ArtifactType" + ] + }, + "MavenReference": { + "description": "The information required to specify a Maven reference. You can use Maven references to specify dependency JAR files.", + "type": "object", + "additionalProperties": false, + "properties": { + "ArtifactId": { + "description": "The artifact ID of the Maven reference.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[a-zA-Z0-9_.-]+$" + }, + "GroupId": { + "description": "The group ID of the Maven reference.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[a-zA-Z0-9_.-]+$" + }, + "Version": { + "description": "The version of the Maven reference.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[a-zA-Z0-9_.-]+$" + } + }, + "required": [ + "ArtifactId", + "GroupId", + "Version" + ] + }, + "VpcConfigurations": { + "description": "The array of descriptions of VPC configurations available to the application.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 1, + "items": { + "description": "Describes the parameters of a VPC used by the application.", + "$ref": "#/definitions/VpcConfiguration" + } + }, + "VpcConfiguration": { + "description": "Describes the parameters of a VPC used by the application.", + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "description": "The array of SecurityGroup IDs used by the VPC configuration.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 5, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "description": "The array of Subnet IDs used by the VPC configuration.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 16, + "items": { + "type": "string" + } + } + }, + "required": [ + "SecurityGroupIds", + "SubnetIds" + ] + }, + "ApplicationMaintenanceConfiguration": { + "description": "Describes the maintenance configuration for the application.", + "type": "object", + "additionalProperties": false, + "properties": { + "ApplicationMaintenanceWindowStartTime": { + "description": "The start time for the maintenance window.", + "type": "string", + "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$" + } + }, + "required": [ + "ApplicationMaintenanceWindowStartTime" + ] + }, + "Tag": { + "description": "A key-value pair that identifies an application.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that's 1 to 128 Unicode characters in length and can't be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that's 0 to 256 characters in length.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "additionalProperties": false, + "required": [ + "RuntimeEnvironment", + "ServiceExecutionRole" + ], + "createOnlyProperties": [ + "/properties/ApplicationName", + "/properties/ApplicationMode" + ], + "writeOnlyProperties": [ + "/properties/RunConfiguration", + "/properties/ApplicationConfiguration/EnvironmentProperties", + "/properties/ApplicationConfiguration/ApplicationCodeConfiguration/CodeContent/ZipFileContent" + ], + "primaryIdentifier": [ + "/properties/ApplicationName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "kinesisanalytics:CreateApplication", + "kinesisanalytics:DescribeApplication", + "kinesisanalytics:ListTagsForResource", + "kinesisanalytics:UpdateApplicationMaintenanceConfiguration" + ] + }, + "read": { + "permissions": [ + "kinesisanalytics:DescribeApplication", + "kinesisanalytics:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "kinesisanalytics:UpdateApplication", + "kinesisanalytics:DescribeApplication", + "kinesisanalytics:TagResource", + "kinesisanalytics:UntagResource", + "kinesisanalytics:AddApplicationVpcConfiguration", + "kinesisanalytics:DeleteApplicationVpcConfiguration", + "kinesisanalytics:UpdateApplicationMaintenanceConfiguration", + "kinesisanalytics:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "kinesisanalytics:DescribeApplication", + "kinesisanalytics:DeleteApplication" + ] + }, + "list": { + "permissions": [ + "kinesisanalytics:ListApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationcloudwatchloggingoption.json b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationcloudwatchloggingoption.json new file mode 100644 index 00000000..deca5b85 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationcloudwatchloggingoption.json @@ -0,0 +1,43 @@ +{ + "typeName": "AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption", + "description": "Resource Type definition for AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ApplicationName": { + "type": "string" + }, + "CloudWatchLoggingOption": { + "$ref": "#/definitions/CloudWatchLoggingOption" + } + }, + "definitions": { + "CloudWatchLoggingOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogStreamARN": { + "type": "string" + } + }, + "required": [ + "LogStreamARN" + ] + } + }, + "required": [ + "CloudWatchLoggingOption", + "ApplicationName" + ], + "createOnlyProperties": [ + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationoutput.json b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationoutput.json new file mode 100644 index 00000000..5d87ef8f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationoutput.json @@ -0,0 +1,100 @@ +{ + "typeName": "AWS::KinesisAnalyticsV2::ApplicationOutput", + "description": "Resource Type definition for AWS::KinesisAnalyticsV2::ApplicationOutput", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ApplicationName": { + "type": "string" + }, + "Output": { + "$ref": "#/definitions/Output" + } + }, + "definitions": { + "Output": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationSchema": { + "$ref": "#/definitions/DestinationSchema" + }, + "LambdaOutput": { + "$ref": "#/definitions/LambdaOutput" + }, + "KinesisFirehoseOutput": { + "$ref": "#/definitions/KinesisFirehoseOutput" + }, + "KinesisStreamsOutput": { + "$ref": "#/definitions/KinesisStreamsOutput" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "DestinationSchema" + ] + }, + "KinesisStreamsOutput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN" + ] + }, + "DestinationSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordFormatType": { + "type": "string" + } + } + }, + "KinesisFirehoseOutput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN" + ] + }, + "LambdaOutput": { + "type": "object", + "additionalProperties": false, + "properties": { + "ResourceARN": { + "type": "string" + } + }, + "required": [ + "ResourceARN" + ] + } + }, + "required": [ + "ApplicationName", + "Output" + ], + "createOnlyProperties": [ + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationreferencedatasource.json b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationreferencedatasource.json new file mode 100644 index 00000000..c913f790 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisanalyticsv2/applicationreferencedatasource.json @@ -0,0 +1,162 @@ +{ + "typeName": "AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource", + "description": "Resource Type definition for AWS::KinesisAnalyticsV2::ApplicationReferenceDataSource", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ApplicationName": { + "type": "string" + }, + "ReferenceDataSource": { + "$ref": "#/definitions/ReferenceDataSource" + } + }, + "definitions": { + "ReferenceDataSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReferenceSchema": { + "$ref": "#/definitions/ReferenceSchema" + }, + "TableName": { + "type": "string" + }, + "S3ReferenceDataSource": { + "$ref": "#/definitions/S3ReferenceDataSource" + } + }, + "required": [ + "ReferenceSchema" + ] + }, + "ReferenceSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordEncoding": { + "type": "string" + }, + "RecordColumns": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/RecordColumn" + } + }, + "RecordFormat": { + "$ref": "#/definitions/RecordFormat" + } + }, + "required": [ + "RecordColumns", + "RecordFormat" + ] + }, + "S3ReferenceDataSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketARN": { + "type": "string" + }, + "FileKey": { + "type": "string" + } + }, + "required": [ + "BucketARN", + "FileKey" + ] + }, + "RecordColumn": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mapping": { + "type": "string" + }, + "SqlType": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "SqlType", + "Name" + ] + }, + "RecordFormat": { + "type": "object", + "additionalProperties": false, + "properties": { + "MappingParameters": { + "$ref": "#/definitions/MappingParameters" + }, + "RecordFormatType": { + "type": "string" + } + }, + "required": [ + "RecordFormatType" + ] + }, + "MappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "JSONMappingParameters": { + "$ref": "#/definitions/JSONMappingParameters" + }, + "CSVMappingParameters": { + "$ref": "#/definitions/CSVMappingParameters" + } + } + }, + "JSONMappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordRowPath": { + "type": "string" + } + }, + "required": [ + "RecordRowPath" + ] + }, + "CSVMappingParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "RecordRowDelimiter": { + "type": "string" + }, + "RecordColumnDelimiter": { + "type": "string" + } + }, + "required": [ + "RecordColumnDelimiter", + "RecordRowDelimiter" + ] + } + }, + "required": [ + "ReferenceDataSource", + "ApplicationName" + ], + "createOnlyProperties": [ + "/properties/ApplicationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisfirehose/deliverystream.json b/internal/aws/cfn/schemas/aws/kinesisfirehose/deliverystream.json new file mode 100644 index 00000000..27462eef --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisfirehose/deliverystream.json @@ -0,0 +1,1433 @@ +{ + "typeName": "AWS::KinesisFirehose::DeliveryStream", + "description": "Resource Type definition for AWS::KinesisFirehose::DeliveryStream", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "DeliveryStreamEncryptionConfigurationInput": { + "$ref": "#/definitions/DeliveryStreamEncryptionConfigurationInput" + }, + "DeliveryStreamName": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "[a-zA-Z0-9._-]+" + }, + "DeliveryStreamType": { + "type": "string", + "enum": [ + "DirectPut", + "KinesisStreamAsSource", + "MSKAsSource" + ] + }, + "ElasticsearchDestinationConfiguration": { + "$ref": "#/definitions/ElasticsearchDestinationConfiguration" + }, + "AmazonopensearchserviceDestinationConfiguration": { + "$ref": "#/definitions/AmazonopensearchserviceDestinationConfiguration" + }, + "AmazonOpenSearchServerlessDestinationConfiguration": { + "$ref": "#/definitions/AmazonOpenSearchServerlessDestinationConfiguration" + }, + "ExtendedS3DestinationConfiguration": { + "$ref": "#/definitions/ExtendedS3DestinationConfiguration" + }, + "KinesisStreamSourceConfiguration": { + "$ref": "#/definitions/KinesisStreamSourceConfiguration" + }, + "MSKSourceConfiguration": { + "$ref": "#/definitions/MSKSourceConfiguration" + }, + "RedshiftDestinationConfiguration": { + "$ref": "#/definitions/RedshiftDestinationConfiguration" + }, + "S3DestinationConfiguration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "SplunkDestinationConfiguration": { + "$ref": "#/definitions/SplunkDestinationConfiguration" + }, + "HttpEndpointDestinationConfiguration": { + "$ref": "#/definitions/HttpEndpointDestinationConfiguration" + }, + "SnowflakeDestinationConfiguration": { + "$ref": "#/definitions/SnowflakeDestinationConfiguration" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1, + "maxItems": 50 + } + }, + "definitions": { + "DeliveryStreamEncryptionConfigurationInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "KeyARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "KeyType": { + "type": "string", + "enum": [ + "AWS_OWNED_CMK", + "CUSTOMER_MANAGED_CMK" + ] + } + }, + "required": [ + "KeyType" + ] + }, + "SplunkDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "HECAcknowledgmentTimeoutInSeconds": { + "type": "integer", + "minimum": 180, + "maximum": 600 + }, + "HECEndpoint": { + "type": "string", + "minLength": 0, + "maxLength": 2048 + }, + "HECEndpointType": { + "type": "string", + "enum": [ + "Raw", + "Event" + ] + }, + "HECToken": { + "type": "string", + "minLength": 0, + "maxLength": 2048 + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RetryOptions": { + "$ref": "#/definitions/SplunkRetryOptions" + }, + "S3BackupMode": { + "type": "string" + }, + "S3Configuration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "BufferingHints": { + "$ref": "#/definitions/SplunkBufferingHints" + } + }, + "required": [ + "HECEndpoint", + "S3Configuration", + "HECToken", + "HECEndpointType" + ] + }, + "HttpEndpointDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "EndpointConfiguration": { + "$ref": "#/definitions/HttpEndpointConfiguration" + }, + "RequestConfiguration": { + "$ref": "#/definitions/HttpEndpointRequestConfiguration" + }, + "BufferingHints": { + "$ref": "#/definitions/BufferingHints" + }, + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RetryOptions": { + "$ref": "#/definitions/RetryOptions" + }, + "S3BackupMode": { + "type": "string" + }, + "S3Configuration": { + "$ref": "#/definitions/S3DestinationConfiguration" + } + }, + "required": [ + "EndpointConfiguration", + "S3Configuration" + ] + }, + "KinesisStreamSourceConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "KinesisStreamARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + } + }, + "required": [ + "RoleARN", + "KinesisStreamARN" + ] + }, + "MSKSourceConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "MSKClusterARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "TopicName": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[a-zA-Z0-9\\._\\-]+" + }, + "AuthenticationConfiguration": { + "$ref": "#/definitions/AuthenticationConfiguration" + } + }, + "required": [ + "MSKClusterARN", + "TopicName", + "AuthenticationConfiguration" + ] + }, + "AuthenticationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "Connectivity": { + "type": "string", + "enum": [ + "PUBLIC", + "PRIVATE" + ] + } + }, + "required": [ + "RoleARN", + "Connectivity" + ] + }, + "VpcConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "minItems": 1, + "maxItems": 16 + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "minItems": 1, + "maxItems": 5 + } + }, + "required": [ + "RoleARN", + "SubnetIds", + "SecurityGroupIds" + ] + }, + "DocumentIdOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultDocumentIdFormat": { + "type": "string", + "enum": [ + "FIREHOSE_DEFAULT", + "NO_DOCUMENT_ID" + ] + } + }, + "required": [ + "DefaultDocumentIdFormat" + ] + }, + "ExtendedS3DestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketARN": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "arn:.*" + }, + "BufferingHints": { + "$ref": "#/definitions/BufferingHints" + }, + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "CompressionFormat": { + "type": "string", + "enum": [ + "UNCOMPRESSED", + "GZIP", + "ZIP", + "Snappy", + "HADOOP_SNAPPY" + ] + }, + "CustomTimeZone": { + "type": "string", + "minLength": 0, + "maxLength": 50 + }, + "DataFormatConversionConfiguration": { + "$ref": "#/definitions/DataFormatConversionConfiguration" + }, + "DynamicPartitioningConfiguration": { + "$ref": "#/definitions/DynamicPartitioningConfiguration" + }, + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration" + }, + "ErrorOutputPrefix": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "FileExtension": { + "type": "string", + "minLength": 0, + "maxLength": 128, + "pattern": "^$|\\.[0-9a-z!\\-_.*'()]+" + }, + "Prefix": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "S3BackupConfiguration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "S3BackupMode": { + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ] + } + }, + "required": [ + "BucketARN", + "RoleARN" + ] + }, + "S3DestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketARN": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "arn:.*" + }, + "BufferingHints": { + "$ref": "#/definitions/BufferingHints" + }, + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "CompressionFormat": { + "type": "string", + "enum": [ + "UNCOMPRESSED", + "GZIP", + "ZIP", + "Snappy", + "HADOOP_SNAPPY" + ] + }, + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration" + }, + "ErrorOutputPrefix": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "Prefix": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + } + }, + "required": [ + "BucketARN", + "RoleARN" + ] + }, + "RedshiftDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "ClusterJDBCURL": { + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "CopyCommand": { + "$ref": "#/definitions/CopyCommand" + }, + "Password": { + "type": "string", + "minLength": 6, + "maxLength": 512 + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RetryOptions": { + "$ref": "#/definitions/RedshiftRetryOptions" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "S3BackupConfiguration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "S3BackupMode": { + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ] + }, + "S3Configuration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "Username": { + "type": "string", + "minLength": 1, + "maxLength": 512 + } + }, + "required": [ + "S3Configuration", + "Username", + "ClusterJDBCURL", + "CopyCommand", + "RoleARN", + "Password" + ] + }, + "ElasticsearchDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "BufferingHints": { + "$ref": "#/definitions/ElasticsearchBufferingHints" + }, + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "DomainARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "IndexName": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "IndexRotationPeriod": { + "type": "string", + "enum": [ + "NoRotation", + "OneHour", + "OneDay", + "OneWeek", + "OneMonth" + ] + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RetryOptions": { + "$ref": "#/definitions/ElasticsearchRetryOptions" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "S3BackupMode": { + "type": "string", + "enum": [ + "FailedDocumentsOnly", + "AllDocuments" + ] + }, + "S3Configuration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "ClusterEndpoint": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "https:.*" + }, + "TypeName": { + "type": "string", + "minLength": 0, + "maxLength": 100 + }, + "VpcConfiguration": { + "$ref": "#/definitions/VpcConfiguration" + }, + "DocumentIdOptions": { + "$ref": "#/definitions/DocumentIdOptions" + } + }, + "required": [ + "IndexName", + "S3Configuration", + "RoleARN" + ] + }, + "AmazonopensearchserviceDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "BufferingHints": { + "$ref": "#/definitions/AmazonopensearchserviceBufferingHints" + }, + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "DomainARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "IndexName": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "IndexRotationPeriod": { + "type": "string", + "enum": [ + "NoRotation", + "OneHour", + "OneDay", + "OneWeek", + "OneMonth" + ] + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RetryOptions": { + "$ref": "#/definitions/AmazonopensearchserviceRetryOptions" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "S3BackupMode": { + "type": "string", + "enum": [ + "FailedDocumentsOnly", + "AllDocuments" + ] + }, + "S3Configuration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "ClusterEndpoint": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "https:.*" + }, + "TypeName": { + "type": "string", + "minLength": 0, + "maxLength": 100 + }, + "VpcConfiguration": { + "$ref": "#/definitions/VpcConfiguration" + }, + "DocumentIdOptions": { + "$ref": "#/definitions/DocumentIdOptions" + } + }, + "required": [ + "IndexName", + "S3Configuration", + "RoleARN" + ] + }, + "AmazonOpenSearchServerlessDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "BufferingHints": { + "$ref": "#/definitions/AmazonOpenSearchServerlessBufferingHints" + }, + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "IndexName": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RetryOptions": { + "$ref": "#/definitions/AmazonOpenSearchServerlessRetryOptions" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "S3BackupMode": { + "type": "string", + "enum": [ + "FailedDocumentsOnly", + "AllDocuments" + ] + }, + "S3Configuration": { + "$ref": "#/definitions/S3DestinationConfiguration" + }, + "CollectionEndpoint": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "https:.*" + }, + "VpcConfiguration": { + "$ref": "#/definitions/VpcConfiguration" + } + }, + "required": [ + "IndexName", + "S3Configuration", + "RoleARN" + ] + }, + "SnowflakeDestinationConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccountUrl": { + "type": "string", + "minLength": 24, + "maxLength": 2048, + "pattern": ".+?\\.snowflakecomputing\\.com" + }, + "PrivateKey": { + "type": "string", + "minLength": 256, + "maxLength": 4096, + "pattern": "^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$" + }, + "KeyPassphrase": { + "type": "string", + "minLength": 7, + "maxLength": 255 + }, + "User": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Database": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Schema": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Table": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "SnowflakeRoleConfiguration": { + "$ref": "#/definitions/SnowflakeRoleConfiguration" + }, + "DataLoadingOption": { + "type": "string", + "enum": [ + "JSON_MAPPING", + "VARIANT_CONTENT_MAPPING", + "VARIANT_CONTENT_AND_METADATA_MAPPING" + ] + }, + "MetaDataColumnName": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "ContentColumnName": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "SnowflakeVpcConfiguration": { + "$ref": "#/definitions/SnowflakeVpcConfiguration" + }, + "CloudWatchLoggingOptions": { + "$ref": "#/definitions/CloudWatchLoggingOptions" + }, + "ProcessingConfiguration": { + "$ref": "#/definitions/ProcessingConfiguration" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "RetryOptions": { + "$ref": "#/definitions/SnowflakeRetryOptions" + }, + "S3BackupMode": { + "type": "string", + "enum": [ + "FailedDataOnly", + "AllData" + ] + }, + "S3Configuration": { + "$ref": "#/definitions/S3DestinationConfiguration" + } + }, + "required": [ + "AccountUrl", + "PrivateKey", + "User", + "Database", + "Schema", + "Table", + "RoleARN", + "S3Configuration" + ] + }, + "BufferingHints": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalInSeconds": { + "type": "integer" + }, + "SizeInMBs": { + "type": "integer" + } + } + }, + "ProcessingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "Processors": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Processor" + } + } + } + }, + "SplunkRetryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DurationInSeconds": { + "type": "integer" + } + } + }, + "ElasticsearchRetryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DurationInSeconds": { + "type": "integer" + } + } + }, + "AmazonopensearchserviceRetryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DurationInSeconds": { + "type": "integer" + } + } + }, + "AmazonOpenSearchServerlessRetryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DurationInSeconds": { + "type": "integer" + } + } + }, + "SnowflakeRetryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DurationInSeconds": { + "type": "integer" + } + } + }, + "RedshiftRetryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DurationInSeconds": { + "type": "integer" + } + } + }, + "RetryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DurationInSeconds": { + "type": "integer" + } + } + }, + "DataFormatConversionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "InputFormatConfiguration": { + "$ref": "#/definitions/InputFormatConfiguration" + }, + "OutputFormatConfiguration": { + "$ref": "#/definitions/OutputFormatConfiguration" + }, + "SchemaConfiguration": { + "$ref": "#/definitions/SchemaConfiguration" + } + } + }, + "DynamicPartitioningConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "RetryOptions": { + "$ref": "#/definitions/RetryOptions" + } + } + }, + "CopyCommand": { + "type": "object", + "additionalProperties": false, + "properties": { + "CopyOptions": { + "type": "string", + "minLength": 0, + "maxLength": 204800 + }, + "DataTableColumns": { + "type": "string", + "minLength": 0, + "maxLength": 204800 + }, + "DataTableName": { + "type": "string", + "minLength": 1, + "maxLength": 512 + } + }, + "required": [ + "DataTableName" + ] + }, + "EncryptionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "KMSEncryptionConfig": { + "$ref": "#/definitions/KMSEncryptionConfig" + }, + "NoEncryptionConfig": { + "type": "string", + "enum": [ + "NoEncryption" + ] + } + } + }, + "ElasticsearchBufferingHints": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalInSeconds": { + "type": "integer" + }, + "SizeInMBs": { + "type": "integer" + } + } + }, + "AmazonopensearchserviceBufferingHints": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalInSeconds": { + "type": "integer" + }, + "SizeInMBs": { + "type": "integer" + } + } + }, + "AmazonOpenSearchServerlessBufferingHints": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalInSeconds": { + "type": "integer" + }, + "SizeInMBs": { + "type": "integer" + } + } + }, + "SplunkBufferingHints": { + "type": "object", + "additionalProperties": false, + "properties": { + "IntervalInSeconds": { + "type": "integer" + }, + "SizeInMBs": { + "type": "integer" + } + } + }, + "CloudWatchLoggingOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "LogGroupName": { + "type": "string" + }, + "LogStreamName": { + "type": "string" + } + } + }, + "OutputFormatConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Serializer": { + "$ref": "#/definitions/Serializer" + } + } + }, + "Processor": { + "type": "object", + "additionalProperties": false, + "properties": { + "Parameters": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ProcessorParameter" + } + }, + "Type": { + "type": "string", + "enum": [ + "RecordDeAggregation", + "Decompression", + "CloudWatchLogProcessing", + "Lambda", + "MetadataExtraction", + "AppendDelimiterToRecord" + ] + } + }, + "required": [ + "Type" + ] + }, + "KMSEncryptionConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AWSKMSKeyARN": { + "type": "string" + } + }, + "required": [ + "AWSKMSKeyARN" + ] + }, + "InputFormatConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Deserializer": { + "$ref": "#/definitions/Deserializer" + } + } + }, + "SchemaConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "CatalogId": { + "type": "string" + }, + "DatabaseName": { + "type": "string" + }, + "Region": { + "type": "string" + }, + "RoleARN": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "arn:.*" + }, + "TableName": { + "type": "string" + }, + "VersionId": { + "type": "string" + } + } + }, + "Serializer": { + "type": "object", + "additionalProperties": false, + "properties": { + "OrcSerDe": { + "$ref": "#/definitions/OrcSerDe" + }, + "ParquetSerDe": { + "$ref": "#/definitions/ParquetSerDe" + } + } + }, + "ProcessorParameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "ParameterName": { + "type": "string" + }, + "ParameterValue": { + "type": "string" + } + }, + "required": [ + "ParameterValue", + "ParameterName" + ] + }, + "Deserializer": { + "type": "object", + "additionalProperties": false, + "properties": { + "HiveJsonSerDe": { + "$ref": "#/definitions/HiveJsonSerDe" + }, + "OpenXJsonSerDe": { + "$ref": "#/definitions/OpenXJsonSerDe" + } + } + }, + "HiveJsonSerDe": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimestampFormats": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "OrcSerDe": { + "type": "object", + "additionalProperties": false, + "properties": { + "BlockSizeBytes": { + "type": "integer" + }, + "BloomFilterColumns": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "BloomFilterFalsePositiveProbability": { + "type": "number" + }, + "Compression": { + "type": "string" + }, + "DictionaryKeyThreshold": { + "type": "number" + }, + "EnablePadding": { + "type": "boolean" + }, + "FormatVersion": { + "type": "string" + }, + "PaddingTolerance": { + "type": "number" + }, + "RowIndexStride": { + "type": "integer" + }, + "StripeSizeBytes": { + "type": "integer" + } + } + }, + "ParquetSerDe": { + "type": "object", + "additionalProperties": false, + "properties": { + "BlockSizeBytes": { + "type": "integer" + }, + "Compression": { + "type": "string" + }, + "EnableDictionaryCompression": { + "type": "boolean" + }, + "MaxPaddingBytes": { + "type": "integer" + }, + "PageSizeBytes": { + "type": "integer" + }, + "WriterVersion": { + "type": "string" + } + } + }, + "OpenXJsonSerDe": { + "type": "object", + "additionalProperties": false, + "properties": { + "CaseInsensitive": { + "type": "boolean" + }, + "ColumnToJsonKeyMappings": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "ConvertDotsInJsonKeysToUnderscores": { + "type": "boolean" + } + } + }, + "HttpEndpointRequestConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContentEncoding": { + "type": "string", + "enum": [ + "NONE", + "GZIP" + ] + }, + "CommonAttributes": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/HttpEndpointCommonAttribute" + }, + "minItems": 0, + "maxItems": 50 + } + } + }, + "HttpEndpointCommonAttribute": { + "type": "object", + "additionalProperties": false, + "properties": { + "AttributeName": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "AttributeValue": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + }, + "required": [ + "AttributeName", + "AttributeValue" + ] + }, + "HttpEndpointConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Url": { + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "AccessKey": { + "type": "string", + "minLength": 0, + "maxLength": 4096 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Url" + ] + }, + "SnowflakeRoleConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "SnowflakeRole": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + } + }, + "SnowflakeVpcConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "PrivateLinkVpceId": { + "type": "string", + "minLength": 47, + "maxLength": 255, + "pattern": "([a-zA-Z0-9\\-\\_]+\\.){2,3}vpce\\.[a-zA-Z0-9\\-]*\\.vpce-svc\\-[a-zA-Z0-9\\-]{17}$" + } + }, + "required": [ + "PrivateLinkVpceId" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@%]*$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "pattern": "^[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@%]*$", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "handlers": { + "create": { + "permissions": [ + "firehose:CreateDeliveryStream", + "firehose:DescribeDeliveryStream", + "iam:GetRole", + "iam:PassRole", + "kms:CreateGrant", + "kms:DescribeKey" + ] + }, + "read": { + "permissions": [ + "firehose:DescribeDeliveryStream", + "firehose:ListTagsForDeliveryStream" + ] + }, + "update": { + "permissions": [ + "firehose:UpdateDestination", + "firehose:DescribeDeliveryStream", + "firehose:StartDeliveryStreamEncryption", + "firehose:StopDeliveryStreamEncryption", + "firehose:ListTagsForDeliveryStream", + "firehose:TagDeliveryStream", + "firehose:UntagDeliveryStream", + "kms:CreateGrant", + "kms:RevokeGrant", + "kms:DescribeKey" + ] + }, + "delete": { + "permissions": [ + "firehose:DeleteDeliveryStream", + "firehose:DescribeDeliveryStream", + "kms:RevokeGrant", + "kms:DescribeKey" + ] + }, + "list": { + "permissions": [ + "firehose:ListDeliveryStreams" + ] + } + }, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/DeliveryStreamName", + "/properties/DeliveryStreamType", + "/properties/ElasticsearchDestinationConfiguration/VpcConfiguration", + "/properties/AmazonopensearchserviceDestinationConfiguration/VpcConfiguration", + "/properties/AmazonOpenSearchServerlessDestinationConfiguration/VpcConfiguration", + "/properties/KinesisStreamSourceConfiguration", + "/properties/MSKSourceConfiguration", + "/properties/SnowflakeDestinationConfiguration/SnowflakeVpcConfiguration" + ], + "primaryIdentifier": [ + "/properties/DeliveryStreamName" + ] +} diff --git a/internal/aws/cfn/schemas/aws/kinesisvideo/signalingchannel.json b/internal/aws/cfn/schemas/aws/kinesisvideo/signalingchannel.json new file mode 100644 index 00000000..b357e193 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisvideo/signalingchannel.json @@ -0,0 +1,103 @@ +{ + "typeName": "AWS::KinesisVideo::SignalingChannel", + "description": "Resource Type Definition for AWS::KinesisVideo::SignalingChannel", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kinesisvideo.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. Specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. Specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the Kinesis Video Signaling Channel.", + "type": "string" + }, + "Name": { + "description": "The name of the Kinesis Video Signaling Channel.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z0-9_.-]+" + }, + "Type": { + "description": "The type of the Kinesis Video Signaling Channel to create. Currently, SINGLE_MASTER is the only supported channel type.", + "type": "string", + "enum": [ + "SINGLE_MASTER" + ] + }, + "MessageTtlSeconds": { + "description": "The period of time a signaling channel retains undelivered messages before they are discarded.", + "type": "integer", + "minimum": 5, + "maximum": 120 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1, + "maxItems": 50 + } + }, + "additionalProperties": false, + "required": [], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "kinesisvideo:CreateSignalingChannel", + "kinesisvideo:DescribeSignalingChannel" + ] + }, + "read": { + "permissions": [ + "kinesisvideo:DescribeSignalingChannel" + ] + }, + "update": { + "permissions": [ + "kinesisvideo:UpdateSignalingChannel", + "kinesisvideo:DescribeSignalingChannel" + ] + }, + "delete": { + "permissions": [ + "kinesisvideo:DeleteSignalingChannel", + "kinesisvideo:DescribeSignalingChannel" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kinesisvideo/stream.json b/internal/aws/cfn/schemas/aws/kinesisvideo/stream.json new file mode 100644 index 00000000..6b606deb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kinesisvideo/stream.json @@ -0,0 +1,118 @@ +{ + "typeName": "AWS::KinesisVideo::Stream", + "description": "Resource Type Definition for AWS::KinesisVideo::Stream", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kinesisvideo.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associated with the Kinesis Video Stream.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. Specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. Specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. The following characters can be used: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the Kinesis Video stream.", + "type": "string" + }, + "Name": { + "description": "The name of the Kinesis Video stream.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "[a-zA-Z0-9_.-]+" + }, + "DataRetentionInHours": { + "description": "The number of hours till which Kinesis Video will retain the data in the stream", + "type": "integer", + "minimum": 0, + "maximum": 87600 + }, + "DeviceName": { + "description": "The name of the device that is writing to the stream.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_.-]+" + }, + "KmsKeyId": { + "description": "AWS KMS key ID that Kinesis Video Streams uses to encrypt stream data.", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": ".+" + }, + "MediaType": { + "description": "The media type of the stream. Consumers of the stream can use this information when processing the stream.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[\\w\\-\\.\\+]+/[\\w\\-\\.\\+]+(,[\\w\\-\\.\\+]+/[\\w\\-\\.\\+]+)*" + }, + "Tags": { + "description": "An array of key-value pairs associated with the Kinesis Video Stream.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1, + "maxItems": 50 + } + }, + "additionalProperties": false, + "required": [], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "kinesisvideo:DescribeStream", + "kinesisvideo:CreateStream" + ] + }, + "read": { + "permissions": [ + "kinesisvideo:DescribeStream" + ] + }, + "update": { + "permissions": [ + "kinesisvideo:DescribeStream", + "kinesisvideo:UpdateStream", + "kinesisvideo:UpdateDataRetention" + ] + }, + "delete": { + "permissions": [ + "kinesisvideo:DescribeStream", + "kinesisvideo:DeleteStream" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kms/alias.json b/internal/aws/cfn/schemas/aws/kms/alias.json new file mode 100644 index 00000000..674e10c3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kms/alias.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::KMS::Alias", + "description": "The ``AWS::KMS::Alias`` resource specifies a display name for a [KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys). You can use an alias to identify a KMS key in the KMS console, in the [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) operation, and in [cryptographic operations](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations), such as [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) and [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html).\n Adding, deleting, or updating an alias can allow or deny permission to the KMS key. For details, see [ABAC for](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html) in the *Developer Guide*.\n Using an alias to refer to a KMS key can help you simplify key management. For example, an alias in your code can be associated with different KMS keys i", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "AliasName": { + "description": "Specifies the alias name. This value must begin with ``alias/`` followed by a name, such as ``alias/ExampleAlias``. \n If you change the value of the ``AliasName`` property, the existing alias is deleted and a new alias is created for the specified KMS key. This change can disrupt applications that use the alias. It can also allow or deny access to a KMS key affected by attribute-based access control (ABAC).\n The alias must be string of 1-256 characters. It can contain only alphanumeric characters, forward slashes (/), underscores (_), and dashes (-). The alias name cannot begin with ``alias/aws/``. The ``alias/aws/`` prefix is reserved for [](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk).", + "type": "string", + "pattern": "^(alias/)[a-zA-Z0-9:/_-]+$", + "minLength": 1, + "maxLength": 256 + }, + "TargetKeyId": { + "description": "Associates the alias with the specified [](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk). The KMS key must be in the same AWS-account and Region.\n A valid key ID is required. If you supply a null or empty string value, this operation returns an error.\n For help finding the key ID and ARN, see [Finding the key ID and ARN](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn) in the *Developer Guide*.\n Specify the key ID or the key ARN of the KMS key.\n For example:\n + Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab`` \n + Key ARN: ``arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`` \n \n To get the key ID and key ARN for a KMS key, use [ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) or [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html).", + "type": "string", + "minLength": 1, + "maxLength": 256, + "relationshipRef": { + "typeName": "AWS::KMS::Key", + "propertyPath": "/properties/Arn" + } + } + }, + "additionalProperties": false, + "required": [ + "AliasName", + "TargetKeyId" + ], + "createOnlyProperties": [ + "/properties/AliasName" + ], + "primaryIdentifier": [ + "/properties/AliasName" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "kms:CreateAlias" + ] + }, + "read": { + "permissions": [ + "kms:ListAliases" + ] + }, + "update": { + "permissions": [ + "kms:UpdateAlias" + ] + }, + "delete": { + "permissions": [ + "kms:DeleteAlias" + ] + }, + "list": { + "permissions": [ + "kms:ListAliases" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kms/key.json b/internal/aws/cfn/schemas/aws/kms/key.json new file mode 100644 index 00000000..4eac9d37 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kms/key.json @@ -0,0 +1,189 @@ +{ + "typeName": "AWS::KMS::Key", + "description": "The ``AWS::KMS::Key`` resource specifies an [KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) in KMSlong. You can use this resource to create symmetric encryption KMS keys, asymmetric KMS keys for encryption or signing, and symmetric HMAC KMS keys. You can use ``AWS::KMS::Key`` to create [multi-Region primary keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html#mrk-primary-key) of all supported types. To replicate a multi-Region key, use the ``AWS::KMS::ReplicaKey`` resource.\n If you change the value of the ``KeySpec``, ``KeyUsage``, ``Origin``, or ``MultiRegion`` properties of an existing KMS key, the update request fails, regardless of the value of the [UpdateReplacePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatereplacepolicy.html). This prevents you from accidentally deleting a KMS key by changing any of its immutable property values.\n KMS replaced th", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kms", + "definitions": { + "Tag": { + "description": "A key-value pair. A tag consists of a tag key and a tag value. Tag keys and tag values are both required, but tag values can be empty (null) strings.\n Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.\n For information about the rules that apply to tag keys and tag values, see [User-Defined Tag Restrictions](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html) in the *Billing and Cost Management User Guide*.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Description": { + "description": "A description of the KMS key. Use a description that helps you to distinguish this KMS key from others in the account, such as its intended use.", + "type": "string", + "minLength": 0, + "maxLength": 8192 + }, + "Enabled": { + "description": "Specifies whether the KMS key is enabled. Disabled KMS keys cannot be used in cryptographic operations.\n When ``Enabled`` is ``true``, the *key state* of the KMS key is ``Enabled``. When ``Enabled`` is ``false``, the key state of the KMS key is ``Disabled``. The default value is ``true``.\n The actual key state of the KMS key might be affected by actions taken outside of CloudFormation, such as running the [EnableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html), [DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html), or [ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) operations.\n For information about the key states of a KMS key, see [Key state: Effect on your KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html) in the *Developer Guide*.", + "type": "boolean" + }, + "EnableKeyRotation": { + "description": "Enables automatic rotation of the key material for the specified KMS key. By default, automatic key rotation is not enabled.\n KMS supports automatic rotation only for symmetric encryption KMS keys (``KeySpec`` = ``SYMMETRIC_DEFAULT``). For asymmetric KMS keys, HMAC KMS keys, and KMS keys with Origin ``EXTERNAL``, omit the ``EnableKeyRotation`` property or set it to ``false``.\n To enable automatic key rotation of the key material for a multi-Region KMS key, set ``EnableKeyRotation`` to ``true`` on the primary key (created by using ``AWS::KMS::Key``). KMS copies the rotation status to all replica keys. For details, see [Rotating multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-rotate) in the *Developer Guide*.\n When you enable automatic rotation, KMS automatically creates new key material for the KMS key one year after the enable date and every year thereafter. KMS retains all key material until you delete the KMS key. Fo", + "type": "boolean" + }, + "KeyPolicy": { + "description": "The key policy to attach to the KMS key.\n If you provide a key policy, it must meet the following criteria:\n + The key policy must allow the caller to make a subsequent [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see [Default key policy](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-root-enable-iam) in the *Developer Guide*. (To omit this condition, set ``BypassPolicyLockoutSafetyCheck`` to true.)\n + Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new AWS principal (for example, an IAM user or role), you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see [", + "type": [ + "object", + "string" + ], + "default": "{\n \"Version\": \"2012-10-17\",\n \"Id\": \"key-default\",\n \"Statement\": [\n {\n \"Sid\": \"Enable IAM User Permissions\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"arn::iam:::root\"\n },\n \"Action\": \"kms:*\",\n \"Resource\": \"*\"\n }\n ]\n}" + }, + "KeyUsage": { + "description": "Determines the [cryptographic operations](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations) for which you can use the KMS key. The default value is ``ENCRYPT_DECRYPT``. This property is required for asymmetric KMS keys and HMAC KMS keys. You can't change the ``KeyUsage`` value after the KMS key is created.\n If you change the value of the ``KeyUsage`` property on an existing KMS key, the update request fails, regardless of the value of the [UpdateReplacePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatereplacepolicy.html). This prevents you from accidentally deleting a KMS key by changing an immutable property value.\n Select only one valid value.\n + For symmetric encryption KMS keys, omit the property or specify ``ENCRYPT_DECRYPT``.\n + For asymmetric KMS keys with RSA key material, specify ``ENCRYPT_DECRYPT`` or ``SIGN_VERIFY``.\n + For asymmetric KMS keys with ECC key material, specify", + "type": "string", + "default": "ENCRYPT_DECRYPT", + "enum": [ + "ENCRYPT_DECRYPT", + "SIGN_VERIFY", + "GENERATE_VERIFY_MAC" + ] + }, + "Origin": { + "description": "The source of the key material for the KMS key. You cannot change the origin after you create the KMS key. The default is ``AWS_KMS``, which means that KMS creates the key material.\n To [create a KMS key with no key material](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-create-cmk.html) (for imported key material), set this value to ``EXTERNAL``. For more information about importing key material into KMS, see [Importing Key Material](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) in the *Developer Guide*.\n You can ignore ``ENABLED`` when Origin is ``EXTERNAL``. When a KMS key with Origin ``EXTERNAL`` is created, the key state is ``PENDING_IMPORT`` and ``ENABLED`` is ``false``. After you import the key material, ``ENABLED`` updated to ``true``. The KMS key can then be used for Cryptographic Operations. \n CFN doesn't support creating an ``Origin`` parameter of the ``AWS_CLOUDHSM`` or ``EXTERNAL_KEY_STORE`` values.", + "type": "string", + "default": "AWS_KMS", + "enum": [ + "AWS_KMS", + "EXTERNAL" + ] + }, + "KeySpec": { + "description": "Specifies the type of KMS key to create. The default value, ``SYMMETRIC_DEFAULT``, creates a KMS key with a 256-bit symmetric key for encryption and decryption. In China Regions, ``SYMMETRIC_DEFAULT`` creates a 128-bit symmetric key that uses SM4 encryption. You can't change the ``KeySpec`` value after the KMS key is created. For help choosing a key spec for your KMS key, see [Choosing a KMS key type](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-choose.html) in the *Developer Guide*.\n The ``KeySpec`` property determines the type of key material in the KMS key and the algorithms that the KMS key supports. To further restrict the algorithms that can be used with the KMS key, use a condition key in its key policy or IAM policy. For more information, see [condition keys](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms) in the *Developer Guide*.\n If you change the value of the ``KeySpec`` property on an existing KMS key, the u", + "type": "string", + "default": "SYMMETRIC_DEFAULT", + "enum": [ + "SYMMETRIC_DEFAULT", + "RSA_2048", + "RSA_3072", + "RSA_4096", + "ECC_NIST_P256", + "ECC_NIST_P384", + "ECC_NIST_P521", + "ECC_SECG_P256K1", + "HMAC_224", + "HMAC_256", + "HMAC_384", + "HMAC_512", + "SM2" + ] + }, + "MultiRegion": { + "description": "Creates a multi-Region primary key that you can replicate in other AWS-Regions. You can't change the ``MultiRegion`` value after the KMS key is created.\n For a list of AWS-Regions in which multi-Region keys are supported, see [Multi-Region keys in](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the **.\n If you change the value of the ``MultiRegion`` property on an existing KMS key, the update request fails, regardless of the value of the [UpdateReplacePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatereplacepolicy.html). This prevents you from accidentally deleting a KMS key by changing an immutable property value.\n For a multi-Region key, set to this property to ``true``. For a single-Region key, omit this property or set it to ``false``. The default value is ``false``.\n *Multi-Region keys* are an KMS feature that lets you create multiple interoperable KMS keys in different AWS-Regions. Bec", + "type": "boolean", + "default": false + }, + "PendingWindowInDays": { + "description": "Specifies the number of days in the waiting period before KMS deletes a KMS key that has been removed from a CloudFormation stack. Enter a value between 7 and 30 days. The default value is 30 days.\n When you remove a KMS key from a CloudFormation stack, KMS schedules the KMS key for deletion and starts the mandatory waiting period. The ``PendingWindowInDays`` property determines the length of waiting period. During the waiting period, the key state of KMS key is ``Pending Deletion`` or ``Pending Replica Deletion``, which prevents the KMS key from being used in cryptographic operations. When the waiting period expires, KMS permanently deletes the KMS key.\n KMS will not delete a [multi-Region primary key](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) that has replica keys. If you remove a multi-Region primary key from a CloudFormation stack, its key state changes to ``PendingReplicaDeletion`` so it cannot be replicated or used in cryptographic ope", + "type": "integer", + "minimum": 7, + "maximum": 30 + }, + "Tags": { + "description": "Assigns one or more tags to the replica key.\n Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see [ABAC for](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html) in the *Developer Guide*.\n For information about tags in KMS, see [Tagging keys](https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html) in the *Developer Guide*. For information about tags in CloudFormation, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "type": "string", + "description": "" + }, + "KeyId": { + "type": "string", + "description": "" + }, + "BypassPolicyLockoutSafetyCheck": { + "description": "Skips (\"bypasses\") the key policy lockout safety check. The default value is false.\n Setting this value to true increases the risk that the KMS key becomes unmanageable. Do not set this value to true indiscriminately.\n For more information, see [Default key policy](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#prevent-unmanageable-key) in the *Developer Guide*.\n Use this parameter only when you intend to prevent the principal that is making the request from making a subsequent [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) request on the KMS key.", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/KeyId" + ], + "primaryIdentifier": [ + "/properties/KeyId" + ], + "writeOnlyProperties": [ + "/properties/PendingWindowInDays", + "/properties/BypassPolicyLockoutSafetyCheck" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "kms:CreateKey", + "kms:EnableKeyRotation", + "kms:DisableKey", + "kms:TagResource", + "kms:PutKeyPolicy" + ] + }, + "read": { + "permissions": [ + "kms:DescribeKey", + "kms:GetKeyPolicy", + "kms:GetKeyRotationStatus", + "kms:ListResourceTags" + ] + }, + "update": { + "permissions": [ + "kms:DescribeKey", + "kms:DisableKey", + "kms:DisableKeyRotation", + "kms:EnableKey", + "kms:EnableKeyRotation", + "kms:PutKeyPolicy", + "kms:TagResource", + "kms:UntagResource", + "kms:UpdateKeyDescription", + "kms:ListResourceTags" + ] + }, + "delete": { + "permissions": [ + "kms:DescribeKey", + "kms:ScheduleKeyDeletion" + ] + }, + "list": { + "permissions": [ + "kms:ListKeys", + "kms:DescribeKey" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/kms/replicakey.json b/internal/aws/cfn/schemas/aws/kms/replicakey.json new file mode 100644 index 00000000..c460a393 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/kms/replicakey.json @@ -0,0 +1,145 @@ +{ + "typeName": "AWS::KMS::ReplicaKey", + "description": "The AWS::KMS::ReplicaKey resource specifies a multi-region replica AWS KMS key in AWS Key Management Service (AWS KMS).", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-kms", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "PrimaryKeyArn": { + "description": "Identifies the primary AWS KMS key to create a replica of. Specify the Amazon Resource Name (ARN) of the AWS KMS key. You cannot specify an alias or key ID. For help finding the ARN, see Finding the Key ID and ARN in the AWS Key Management Service Developer Guide.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "relationshipRef": { + "typeName": "AWS::KMS::Key", + "propertyPath": "/properties/Arn" + } + }, + "Description": { + "description": "A description of the AWS KMS key. Use a description that helps you to distinguish this AWS KMS key from others in the account, such as its intended use.", + "type": "string", + "minLength": 0, + "maxLength": 8192 + }, + "Enabled": { + "description": "Specifies whether the AWS KMS key is enabled. Disabled AWS KMS keys cannot be used in cryptographic operations.", + "type": "boolean" + }, + "KeyPolicy": { + "description": "The key policy that authorizes use of the AWS KMS key. The key policy must observe the following rules.", + "type": [ + "object", + "string" + ] + }, + "PendingWindowInDays": { + "description": "Specifies the number of days in the waiting period before AWS KMS deletes an AWS KMS key that has been removed from a CloudFormation stack. Enter a value between 7 and 30 days. The default value is 30 days.", + "type": "integer", + "minimum": 7, + "maximum": 30 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "type": "string" + }, + "KeyId": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "PrimaryKeyArn", + "KeyPolicy" + ], + "createOnlyProperties": [ + "/properties/PrimaryKeyArn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/KeyId" + ], + "primaryIdentifier": [ + "/properties/KeyId" + ], + "writeOnlyProperties": [ + "/properties/PendingWindowInDays" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "kms:ReplicateKey", + "kms:CreateKey", + "kms:DescribeKey", + "kms:DisableKey", + "kms:TagResource" + ] + }, + "read": { + "permissions": [ + "kms:DescribeKey", + "kms:GetKeyPolicy", + "kms:ListResourceTags" + ] + }, + "update": { + "permissions": [ + "kms:DescribeKey", + "kms:DisableKey", + "kms:EnableKey", + "kms:PutKeyPolicy", + "kms:TagResource", + "kms:UntagResource", + "kms:UpdateKeyDescription" + ] + }, + "delete": { + "permissions": [ + "kms:DescribeKey", + "kms:ScheduleKeyDeletion" + ] + }, + "list": { + "permissions": [ + "kms:ListKeys", + "kms:DescribeKey" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lakeformation/datacellsfilter.json b/internal/aws/cfn/schemas/aws/lakeformation/datacellsfilter.json new file mode 100644 index 00000000..39d6a18a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lakeformation/datacellsfilter.json @@ -0,0 +1,133 @@ +{ + "typeName": "AWS::LakeFormation::DataCellsFilter", + "description": "A resource schema representing a Lake Formation Data Cells Filter.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "CatalogIdString": { + "description": "A string representing the Catalog Id.", + "type": "string", + "minLength": 12, + "maxLength": 12 + }, + "NameString": { + "description": "A string representing a resource's name.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "RowFilter": { + "description": "An object representing the Data Cells Filter's Row Filter. Either a Filter Expression or a Wildcard is required.", + "type": "object", + "properties": { + "FilterExpression": { + "description": "A PartiQL predicate.", + "type": "string" + }, + "AllRowsWildcard": { + "description": "An empty object representing a row wildcard.", + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "ColumnNames": { + "description": "A list of column names.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/NameString" + } + }, + "ColumnWildcard": { + "description": "An object representing the Data Cells Filter's Columns. Either Column Names or a Wildcard is required.", + "type": "object", + "properties": { + "ExcludedColumnNames": { + "description": "A list of column names to be excluded from the Data Cells Filter.", + "$ref": "#/definitions/ColumnNames" + } + }, + "additionalProperties": false + } + }, + "properties": { + "TableCatalogId": { + "description": "The Catalog Id of the Table on which to create a Data Cells Filter.", + "$ref": "#/definitions/CatalogIdString" + }, + "DatabaseName": { + "description": "The name of the Database that the Table resides in.", + "$ref": "#/definitions/NameString" + }, + "TableName": { + "description": "The name of the Table to create a Data Cells Filter for.", + "$ref": "#/definitions/NameString" + }, + "Name": { + "description": "The desired name of the Data Cells Filter.", + "$ref": "#/definitions/NameString" + }, + "RowFilter": { + "description": "An object representing the Data Cells Filter's Row Filter. Either a Filter Expression or a Wildcard is required", + "$ref": "#/definitions/RowFilter" + }, + "ColumnNames": { + "description": "A list of columns to be included in this Data Cells Filter.", + "$ref": "#/definitions/ColumnNames" + }, + "ColumnWildcard": { + "description": "An object representing the Data Cells Filter's Columns. Either Column Names or a Wildcard is required", + "$ref": "#/definitions/ColumnWildcard" + } + }, + "additionalProperties": false, + "required": [ + "TableCatalogId", + "DatabaseName", + "TableName", + "Name" + ], + "createOnlyProperties": [ + "/properties/TableCatalogId", + "/properties/DatabaseName", + "/properties/TableName", + "/properties/Name", + "/properties/RowFilter", + "/properties/ColumnNames", + "/properties/ColumnWildcard" + ], + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": false + }, + "primaryIdentifier": [ + "/properties/TableCatalogId", + "/properties/DatabaseName", + "/properties/TableName", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "lakeformation:CreateDataCellsFilter", + "glue:GetTable" + ] + }, + "delete": { + "permissions": [ + "lakeformation:DeleteDataCellsFilter" + ] + }, + "read": { + "permissions": [ + "lakeformation:ListDataCellsFilter" + ] + }, + "list": { + "permissions": [ + "lakeformation:ListDataCellsFilter" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lakeformation/datalakesettings.json b/internal/aws/cfn/schemas/aws/lakeformation/datalakesettings.json new file mode 100644 index 00000000..8a178e1b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lakeformation/datalakesettings.json @@ -0,0 +1,72 @@ +{ + "typeName": "AWS::LakeFormation::DataLakeSettings", + "description": "Resource Type definition for AWS::LakeFormation::DataLakeSettings", + "additionalProperties": false, + "properties": { + "AllowExternalDataFiltering": { + "type": "boolean" + }, + "ExternalDataFilteringAllowList": { + "$ref": "#/definitions/ExternalDataFilteringAllowList" + }, + "CreateTableDefaultPermissions": { + "$ref": "#/definitions/CreateTableDefaultPermissions" + }, + "MutationType": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "AllowFullTableExternalDataAccess": { + "type": "boolean" + }, + "Admins": { + "$ref": "#/definitions/Admins" + }, + "CreateDatabaseDefaultPermissions": { + "$ref": "#/definitions/CreateDatabaseDefaultPermissions" + }, + "Id": { + "type": "string" + }, + "AuthorizedSessionTagValueList": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "TrustedResourceOwners": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "definitions": { + "ExternalDataFilteringAllowList": { + "type": "object", + "additionalProperties": false + }, + "CreateTableDefaultPermissions": { + "type": "object", + "additionalProperties": false + }, + "Admins": { + "type": "object", + "additionalProperties": false + }, + "CreateDatabaseDefaultPermissions": { + "type": "object", + "additionalProperties": false + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/lakeformation/permissions.json b/internal/aws/cfn/schemas/aws/lakeformation/permissions.json new file mode 100644 index 00000000..22e8a1be --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lakeformation/permissions.json @@ -0,0 +1,157 @@ +{ + "typeName": "AWS::LakeFormation::Permissions", + "description": "Resource Type definition for AWS::LakeFormation::Permissions", + "additionalProperties": false, + "properties": { + "Resource": { + "$ref": "#/definitions/Resource" + }, + "Permissions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Id": { + "type": "string" + }, + "DataLakePrincipal": { + "$ref": "#/definitions/DataLakePrincipal" + }, + "PermissionsWithGrantOption": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "definitions": { + "DataLakePrincipal": { + "type": "object", + "additionalProperties": false, + "properties": { + "DataLakePrincipalIdentifier": { + "type": "string" + } + } + }, + "TableResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "CatalogId": { + "type": "string" + }, + "TableWildcard": { + "$ref": "#/definitions/TableWildcard" + }, + "Name": { + "type": "string" + } + } + }, + "Resource": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseResource": { + "$ref": "#/definitions/DatabaseResource" + }, + "DataLocationResource": { + "$ref": "#/definitions/DataLocationResource" + }, + "TableWithColumnsResource": { + "$ref": "#/definitions/TableWithColumnsResource" + }, + "TableResource": { + "$ref": "#/definitions/TableResource" + } + } + }, + "DatabaseResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "CatalogId": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "DataLocationResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Resource": { + "type": "string" + }, + "CatalogId": { + "type": "string" + } + } + }, + "TableWildcard": { + "type": "object", + "additionalProperties": false + }, + "TableWithColumnsResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "type": "string" + }, + "ColumnNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "CatalogId": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "ColumnWildcard": { + "$ref": "#/definitions/ColumnWildcard" + } + } + }, + "ColumnWildcard": { + "type": "object", + "additionalProperties": false, + "properties": { + "ExcludedColumnNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "DataLakePrincipal", + "Resource" + ], + "createOnlyProperties": [ + "/properties/DataLakePrincipal", + "/properties/Resource" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/lakeformation/principalpermissions.json b/internal/aws/cfn/schemas/aws/lakeformation/principalpermissions.json new file mode 100644 index 00000000..0b47add9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lakeformation/principalpermissions.json @@ -0,0 +1,518 @@ +{ + "typeName": "AWS::LakeFormation::PrincipalPermissions", + "description": "The ``AWS::LakeFormation::PrincipalPermissions`` resource represents the permissions that a principal has on a GLUDC resource (such as GLUlong databases or GLUlong tables). When you create a ``PrincipalPermissions`` resource, the permissions are granted via the LFlong ``GrantPermissions`` API operation. When you delete a ``PrincipalPermissions`` resource, the permissions on principal-resource pair are revoked via the LFlong ``RevokePermissions`` API operation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "CatalogIdString": { + "type": "string", + "minLength": 12, + "maxLength": 12 + }, + "PathString": { + "type": "string" + }, + "ResourceArnString": { + "type": "string" + }, + "NameString": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "IAMRoleArn": { + "type": "string", + "pattern": "arn:*:iam::[0-9]*:role/.*" + }, + "LFTag": { + "type": "object", + "properties": { + "TagKey": { + "$ref": "#/definitions/LFTagKey", + "description": "The key-name for the LF-tag." + }, + "TagValues": { + "$ref": "#/definitions/TagValueList", + "description": "A list of possible values of the corresponding ``TagKey`` of an LF-tag key-value pair." + } + }, + "additionalProperties": false, + "description": "The LF-tag key and values attached to a resource." + }, + "LFTagPair": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString" + }, + "TagKey": { + "$ref": "#/definitions/LFTagKey" + }, + "TagValues": { + "$ref": "#/definitions/TagValueList" + } + }, + "additionalProperties": false, + "required": [ + "TagKey", + "TagValues" + ], + "description": "" + }, + "LFTagsList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LFTagPair" + } + }, + "Expression": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LFTag" + }, + "minItems": 1, + "maxItems": 5 + }, + "DataLakePrincipalString": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "DataLakePrincipal": { + "type": "object", + "properties": { + "DataLakePrincipalIdentifier": { + "$ref": "#/definitions/DataLakePrincipalString", + "description": "An identifier for the LFlong principal." + } + }, + "additionalProperties": false, + "description": "The LFlong principal." + }, + "ResourceType": { + "type": "string", + "enum": [ + "DATABASE", + "TABLE" + ] + }, + "CatalogResource": { + "type": "object", + "additionalProperties": false + }, + "DatabaseResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString", + "description": "The identifier for the Data Catalog. By default, it is the account ID of the caller." + }, + "Name": { + "$ref": "#/definitions/NameString", + "description": "The name of the database resource. Unique to the Data Catalog." + } + }, + "additionalProperties": false, + "required": [ + "CatalogId", + "Name" + ], + "description": "A structure for the database object." + }, + "TableWildcard": { + "type": "object", + "additionalProperties": false + }, + "TableResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString", + "description": "The identifier for the Data Catalog. By default, it is the account ID of the caller." + }, + "DatabaseName": { + "$ref": "#/definitions/NameString", + "description": "The name of the database for the table. Unique to a Data Catalog. A database is a set of associated table definitions organized into a logical group. You can Grant and Revoke database privileges to a principal." + }, + "Name": { + "$ref": "#/definitions/NameString", + "description": "The name of the table." + }, + "TableWildcard": { + "$ref": "#/definitions/TableWildcard", + "description": "A wildcard object representing every table under a database.\n At least one of ``TableResource$Name`` or ``TableResource$TableWildcard`` is required." + } + }, + "additionalProperties": false, + "required": [ + "CatalogId", + "DatabaseName" + ], + "description": "A structure for the table object. A table is a metadata definition that represents your data. You can Grant and Revoke table privileges to a principal." + }, + "ColumnNames": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/NameString" + } + }, + "ColumnWildcard": { + "type": "object", + "properties": { + "ExcludedColumnNames": { + "$ref": "#/definitions/ColumnNames", + "description": "Excludes column names. Any column with this name will be excluded." + } + }, + "additionalProperties": false, + "description": "A wildcard object, consisting of an optional list of excluded column names or indexes." + }, + "TableWithColumnsResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString", + "description": "The identifier for the GLUDC where the location is registered with LFlong." + }, + "DatabaseName": { + "$ref": "#/definitions/NameString", + "description": "The name of the database for the table with columns resource. Unique to the Data Catalog. A database is a set of associated table definitions organized into a logical group. You can Grant and Revoke database privileges to a principal." + }, + "Name": { + "$ref": "#/definitions/NameString", + "description": "The name of the table resource. A table is a metadata definition that represents your data. You can Grant and Revoke table privileges to a principal." + }, + "ColumnNames": { + "$ref": "#/definitions/ColumnNames", + "description": "The list of column names for the table. At least one of ``ColumnNames`` or ``ColumnWildcard`` is required." + }, + "ColumnWildcard": { + "$ref": "#/definitions/ColumnWildcard", + "description": "A wildcard specified by a ``ColumnWildcard`` object. At least one of ``ColumnNames`` or ``ColumnWildcard`` is required." + } + }, + "additionalProperties": false, + "required": [ + "CatalogId", + "DatabaseName", + "Name" + ], + "description": "A structure for a table with columns object. This object is only used when granting a SELECT permission.\n This object must take a value for at least one of ``ColumnsNames``, ``ColumnsIndexes``, or ``ColumnsWildcard``." + }, + "DataLocationResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString", + "description": "The identifier for the GLUDC where the location is registered with LFlong." + }, + "ResourceArn": { + "$ref": "#/definitions/ResourceArnString", + "description": "The Amazon Resource Name (ARN) that uniquely identifies the data location resource." + } + }, + "additionalProperties": false, + "required": [ + "CatalogId", + "ResourceArn" + ], + "description": "A structure for a data location object where permissions are granted or revoked." + }, + "DataCellsFilterResource": { + "type": "object", + "properties": { + "TableCatalogId": { + "$ref": "#/definitions/CatalogIdString", + "description": "The ID of the catalog to which the table belongs." + }, + "DatabaseName": { + "$ref": "#/definitions/NameString", + "description": "A database in the GLUDC." + }, + "TableName": { + "$ref": "#/definitions/NameString", + "description": "The name of the table." + }, + "Name": { + "$ref": "#/definitions/NameString", + "description": "The name given by the user to the data filter cell." + } + }, + "additionalProperties": false, + "required": [ + "TableCatalogId", + "DatabaseName", + "TableName", + "Name" + ], + "description": "A structure that describes certain columns on certain rows." + }, + "LFTagKeyResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString", + "description": "The identifier for the GLUDC where the location is registered with GLUDC." + }, + "TagKey": { + "$ref": "#/definitions/NameString", + "description": "The key-name for the LF-tag." + }, + "TagValues": { + "$ref": "#/definitions/TagValueList", + "description": "A list of possible values for the corresponding ``TagKey`` of an LF-tag key-value pair." + } + }, + "additionalProperties": false, + "required": [ + "CatalogId", + "TagKey", + "TagValues" + ], + "description": "A structure containing an LF-tag key and values for a resource." + }, + "LFTagPolicyResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString", + "description": "The identifier for the GLUDC. The GLUDC is the persistent metadata store. It contains database definitions, table definitions, and other control information to manage your LFlong environment." + }, + "ResourceType": { + "$ref": "#/definitions/ResourceType", + "description": "The resource type for which the LF-tag policy applies." + }, + "Expression": { + "$ref": "#/definitions/Expression", + "description": "A list of LF-tag conditions that apply to the resource's LF-tag policy." + } + }, + "additionalProperties": false, + "required": [ + "CatalogId", + "ResourceType", + "Expression" + ], + "description": "A list of LF-tag conditions that define a resource's LF-tag policy.\n A structure that allows an admin to grant user permissions on certain conditions. For example, granting a role access to all columns that do not have the LF-tag 'PII' in tables that have the LF-tag 'Prod'." + }, + "Resource": { + "type": "object", + "properties": { + "Catalog": { + "$ref": "#/definitions/CatalogResource", + "description": "The identifier for the Data Catalog. By default, the account ID. The Data Catalog is the persistent metadata store. It contains database definitions, table definitions, and other control information to manage your LFlong environment." + }, + "Database": { + "$ref": "#/definitions/DatabaseResource", + "description": "The database for the resource. Unique to the Data Catalog. A database is a set of associated table definitions organized into a logical group. You can Grant and Revoke database permissions to a principal." + }, + "Table": { + "$ref": "#/definitions/TableResource", + "description": "The table for the resource. A table is a metadata definition that represents your data. You can Grant and Revoke table privileges to a principal." + }, + "TableWithColumns": { + "$ref": "#/definitions/TableWithColumnsResource", + "description": "The table with columns for the resource. A principal with permissions to this resource can select metadata from the columns of a table in the Data Catalog and the underlying data in Amazon S3." + }, + "DataLocation": { + "$ref": "#/definitions/DataLocationResource", + "description": "The location of an Amazon S3 path where permissions are granted or revoked." + }, + "DataCellsFilter": { + "$ref": "#/definitions/DataCellsFilterResource", + "description": "A data cell filter." + }, + "LFTag": { + "$ref": "#/definitions/LFTagKeyResource", + "description": "The LF-tag key and values attached to a resource." + }, + "LFTagPolicy": { + "$ref": "#/definitions/LFTagPolicyResource", + "description": "A list of LF-tag conditions that define a resource's LF-tag policy." + } + }, + "additionalProperties": false, + "description": "A structure for the resource." + }, + "NullableBoolean": { + "type": [ + "boolean", + "null" + ] + }, + "Permission": { + "type": "string", + "enum": [ + "ALL", + "SELECT", + "ALTER", + "DROP", + "DELETE", + "INSERT", + "DESCRIBE", + "CREATE_DATABASE", + "CREATE_TABLE", + "DATA_LOCATION_ACCESS", + "CREATE_TAG", + "ASSOCIATE" + ] + }, + "LFTagKey": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "LFTagValue": { + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "DataLakePrincipalList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DataLakePrincipal" + } + }, + "PermissionList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Permission" + } + }, + "TagValueList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LFTagValue" + }, + "minItems": 1, + "maxItems": 50 + }, + "PrincipalResourcePair": { + "type": "object", + "properties": { + "Principal": { + "$ref": "#/definitions/DataLakePrincipal" + }, + "Resource": { + "$ref": "#/definitions/Resource" + } + }, + "additionalProperties": false, + "required": [ + "Principal", + "Resource" + ], + "description": "" + }, + "PrincipalPermissions": { + "type": "object", + "properties": { + "DataLakePrincipal": { + "$ref": "#/definitions/DataLakePrincipal" + }, + "PermissionList": { + "$ref": "#/definitions/PermissionList" + } + }, + "additionalProperties": false, + "description": "" + }, + "PrincipalPermissionsList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PrincipalPermissions" + } + } + }, + "properties": { + "Catalog": { + "$ref": "#/definitions/CatalogIdString", + "description": "The identifier for the GLUDC. By default, the account ID. The GLUDC is the persistent metadata store. It contains database definitions, table definitions, and other control information to manage your Lake Formation environment." + }, + "Principal": { + "$ref": "#/definitions/DataLakePrincipal", + "description": "The principal to be granted a permission." + }, + "Resource": { + "$ref": "#/definitions/Resource", + "description": "The resource to be granted or revoked permissions." + }, + "Permissions": { + "$ref": "#/definitions/PermissionList", + "description": "The permissions granted or revoked." + }, + "PermissionsWithGrantOption": { + "$ref": "#/definitions/PermissionList", + "description": "Indicates the ability to grant permissions (as a subset of permissions granted)." + }, + "PrincipalIdentifier": { + "type": "string", + "description": "" + }, + "ResourceIdentifier": { + "type": "string", + "description": "" + } + }, + "additionalProperties": false, + "required": [ + "Principal", + "Resource", + "Permissions", + "PermissionsWithGrantOption" + ], + "createOnlyProperties": [ + "/properties/Catalog", + "/properties/Principal", + "/properties/Resource", + "/properties/Permissions", + "/properties/PermissionsWithGrantOption" + ], + "readOnlyProperties": [ + "/properties/PrincipalIdentifier", + "/properties/ResourceIdentifier" + ], + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": false + }, + "primaryIdentifier": [ + "/properties/PrincipalIdentifier", + "/properties/ResourceIdentifier" + ], + "propertyTransform": { + "/properties/Permissions": "Permissions=[] ? null : Permissions", + "/properties/PermissionsWithGrantOption": "PermissionsWithGrantOption=[] ? null : PermissionsWithGrantOption" + }, + "handlers": { + "create": { + "permissions": [ + "lakeformation:GrantPermissions", + "lakeformation:ListPermissions", + "glue:GetTable", + "glue:GetDatabase" + ] + }, + "read": { + "permissions": [ + "lakeformation:ListPermissions", + "glue:GetTable", + "glue:GetDatabase" + ] + }, + "delete": { + "permissions": [ + "lakeformation:RevokePermissions", + "lakeformation:ListPermissions", + "glue:GetTable", + "glue:GetDatabase" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lakeformation/resource.json b/internal/aws/cfn/schemas/aws/lakeformation/resource.json new file mode 100644 index 00000000..f2687d5f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lakeformation/resource.json @@ -0,0 +1,38 @@ +{ + "typeName": "AWS::LakeFormation::Resource", + "description": "Resource Type definition for AWS::LakeFormation::Resource", + "additionalProperties": false, + "properties": { + "ResourceArn": { + "type": "string" + }, + "WithFederation": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "HybridAccessEnabled": { + "type": "boolean" + }, + "UseServiceLinkedRole": { + "type": "boolean" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "ResourceArn", + "UseServiceLinkedRole" + ], + "createOnlyProperties": [ + "/properties/ResourceArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/lakeformation/tag.json b/internal/aws/cfn/schemas/aws/lakeformation/tag.json new file mode 100644 index 00000000..99cc4e72 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lakeformation/tag.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::LakeFormation::Tag", + "description": "A resource schema representing a Lake Formation Tag.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "CatalogIdString": { + "type": "string", + "minLength": 12, + "maxLength": 12 + }, + "LFTagKey": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^([{a-zA-Z}{\\s}{0-9}_.:\\/=+\\-@%]*)$" + }, + "LFTagValue": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "^([{a-zA-Z}{\\s}{0-9}_.:\\*\\/=+\\-@%]*)$" + }, + "TagValueList": { + "type": "array", + "items": { + "$ref": "#/definitions/LFTagValue" + }, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50 + } + }, + "properties": { + "CatalogId": { + "description": "The identifier for the Data Catalog. By default, the account ID. The Data Catalog is the persistent metadata store. It contains database definitions, table definitions, and other control information to manage your Lake Formation environment.", + "$ref": "#/definitions/CatalogIdString" + }, + "TagKey": { + "description": "The key-name for the LF-tag.", + "$ref": "#/definitions/LFTagKey" + }, + "TagValues": { + "description": "A list of possible values an attribute can take.", + "$ref": "#/definitions/TagValueList" + } + }, + "additionalProperties": false, + "required": [ + "TagKey", + "TagValues" + ], + "createOnlyProperties": [ + "/properties/CatalogId", + "/properties/TagKey" + ], + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": false + }, + "primaryIdentifier": [ + "/properties/TagKey" + ], + "handlers": { + "create": { + "permissions": [ + "lakeformation:CreateLFTag" + ] + }, + "read": { + "permissions": [ + "lakeformation:GetLFTag" + ] + }, + "update": { + "permissions": [ + "lakeformation:UpdateLFTag" + ] + }, + "delete": { + "permissions": [ + "lakeformation:DeleteLFTag" + ] + }, + "list": { + "permissions": [ + "lakeformation:ListLFTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lakeformation/tagassociation.json b/internal/aws/cfn/schemas/aws/lakeformation/tagassociation.json new file mode 100644 index 00000000..86b2f3cb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lakeformation/tagassociation.json @@ -0,0 +1,241 @@ +{ + "typeName": "AWS::LakeFormation::TagAssociation", + "description": "A resource schema representing a Lake Formation Tag Association. While tag associations are not explicit Lake Formation resources, this CloudFormation resource can be used to associate tags with Lake Formation entities.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "CatalogIdString": { + "type": "string", + "minLength": 12, + "maxLength": 12 + }, + "NameString": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "LFTagPair": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString" + }, + "TagKey": { + "$ref": "#/definitions/LFTagKey" + }, + "TagValues": { + "$ref": "#/definitions/TagValueList" + } + }, + "required": [ + "CatalogId", + "TagKey", + "TagValues" + ], + "additionalProperties": false + }, + "LFTagsList": { + "type": "array", + "items": { + "$ref": "#/definitions/LFTagPair" + }, + "insertionOrder": false + }, + "DataLakePrincipalString": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "DataLakePrincipal": { + "type": "object", + "properties": { + "DataLakePrincipalIdentifier": { + "$ref": "#/definitions/DataLakePrincipalString" + } + }, + "additionalProperties": false + }, + "ResourceType": { + "type": "string", + "enum": [ + "DATABASE", + "TABLE" + ] + }, + "CatalogResource": { + "type": "object", + "additionalProperties": false + }, + "DatabaseResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString" + }, + "Name": { + "$ref": "#/definitions/NameString" + } + }, + "required": [ + "CatalogId", + "Name" + ], + "additionalProperties": false + }, + "TableWildcard": { + "type": "object", + "additionalProperties": false + }, + "TableResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString" + }, + "DatabaseName": { + "$ref": "#/definitions/NameString" + }, + "Name": { + "$ref": "#/definitions/NameString" + }, + "TableWildcard": { + "$ref": "#/definitions/TableWildcard" + } + }, + "required": [ + "CatalogId", + "DatabaseName" + ], + "additionalProperties": false + }, + "ColumnNames": { + "type": "array", + "items": { + "$ref": "#/definitions/NameString" + }, + "insertionOrder": false + }, + "TableWithColumnsResource": { + "type": "object", + "properties": { + "CatalogId": { + "$ref": "#/definitions/CatalogIdString" + }, + "DatabaseName": { + "$ref": "#/definitions/NameString" + }, + "Name": { + "$ref": "#/definitions/NameString" + }, + "ColumnNames": { + "$ref": "#/definitions/ColumnNames" + } + }, + "required": [ + "CatalogId", + "DatabaseName", + "Name", + "ColumnNames" + ], + "additionalProperties": false + }, + "Resource": { + "type": "object", + "properties": { + "Catalog": { + "$ref": "#/definitions/CatalogResource" + }, + "Database": { + "$ref": "#/definitions/DatabaseResource" + }, + "Table": { + "$ref": "#/definitions/TableResource" + }, + "TableWithColumns": { + "$ref": "#/definitions/TableWithColumnsResource" + } + }, + "additionalProperties": false + }, + "LFTagKey": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "LFTagValue": { + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "TagValueList": { + "type": "array", + "items": { + "$ref": "#/definitions/LFTagValue" + }, + "insertionOrder": false, + "minItems": 1, + "maxItems": 50 + } + }, + "properties": { + "Resource": { + "description": "Resource to tag with the Lake Formation Tags", + "$ref": "#/definitions/Resource" + }, + "LFTags": { + "description": "List of Lake Formation Tags to associate with the Lake Formation Resource", + "$ref": "#/definitions/LFTagsList" + }, + "ResourceIdentifier": { + "description": "Unique string identifying the resource. Used as primary identifier, which ideally should be a string", + "type": "string" + }, + "TagsIdentifier": { + "description": "Unique string identifying the resource's tags. Used as primary identifier, which ideally should be a string", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Resource", + "LFTags" + ], + "createOnlyProperties": [ + "/properties/Resource", + "/properties/LFTags" + ], + "readOnlyProperties": [ + "/properties/ResourceIdentifier", + "/properties/TagsIdentifier" + ], + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": false + }, + "primaryIdentifier": [ + "/properties/ResourceIdentifier", + "/properties/TagsIdentifier" + ], + "handlers": { + "create": { + "permissions": [ + "lakeformation:AddLFTagsToResource", + "glue:GetDatabase", + "glue:GetTable" + ] + }, + "read": { + "permissions": [ + "lakeformation:GetResourceLFTags", + "glue:GetDatabase", + "glue:GetTable" + ] + }, + "delete": { + "permissions": [ + "lakeformation:RemoveLFTagsFromResource", + "glue:GetDatabase", + "glue:GetTable" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/alias.json b/internal/aws/cfn/schemas/aws/lambda/alias.json new file mode 100644 index 00000000..05686e64 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/alias.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::Lambda::Alias", + "description": "Resource Type definition for AWS::Lambda::Alias", + "additionalProperties": false, + "properties": { + "FunctionName": { + "type": "string" + }, + "ProvisionedConcurrencyConfig": { + "$ref": "#/definitions/ProvisionedConcurrencyConfiguration" + }, + "Description": { + "type": "string" + }, + "FunctionVersion": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "RoutingConfig": { + "$ref": "#/definitions/AliasRoutingConfiguration" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "ProvisionedConcurrencyConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ProvisionedConcurrentExecutions": { + "type": "integer" + } + }, + "required": [ + "ProvisionedConcurrentExecutions" + ] + }, + "VersionWeight": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionWeight": { + "type": "number" + }, + "FunctionVersion": { + "type": "string" + } + }, + "required": [ + "FunctionVersion", + "FunctionWeight" + ] + }, + "AliasRoutingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AdditionalVersionWeights": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/VersionWeight" + } + } + }, + "required": [ + "AdditionalVersionWeights" + ] + } + }, + "required": [ + "FunctionName", + "FunctionVersion", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/FunctionName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/lambda/codesigningconfig.json b/internal/aws/cfn/schemas/aws/lambda/codesigningconfig.json new file mode 100644 index 00000000..75c28a58 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/codesigningconfig.json @@ -0,0 +1,111 @@ +{ + "typeName": "AWS::Lambda::CodeSigningConfig", + "description": "Resource Type definition for AWS::Lambda::CodeSigningConfig.", + "additionalProperties": false, + "properties": { + "Description": { + "description": "A description of the CodeSigningConfig", + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "AllowedPublishers": { + "description": "When the CodeSigningConfig is later on attached to a function, the function code will be expected to be signed by profiles from this list", + "$ref": "#/definitions/AllowedPublishers" + }, + "CodeSigningPolicies": { + "description": "Policies to control how to act if a signature is invalid", + "$ref": "#/definitions/CodeSigningPolicies" + }, + "CodeSigningConfigId": { + "description": "A unique identifier for CodeSigningConfig resource", + "type": "string", + "pattern": "csc-[a-zA-Z0-9-_\\.]{17}" + }, + "CodeSigningConfigArn": { + "description": "A unique Arn for CodeSigningConfig resource", + "type": "string", + "pattern": "arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:code-signing-config:csc-[a-z0-9]{17}" + } + }, + "definitions": { + "AllowedPublishers": { + "type": "object", + "description": "When the CodeSigningConfig is later on attached to a function, the function code will be expected to be signed by profiles from this list", + "additionalProperties": false, + "properties": { + "SigningProfileVersionArns": { + "type": "array", + "description": "List of Signing profile version Arns", + "minItems": 1, + "maxItems": 20, + "items": { + "type": "string", + "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", + "minLength": 12, + "maxLength": 1024 + } + } + }, + "required": [ + "SigningProfileVersionArns" + ] + }, + "CodeSigningPolicies": { + "type": "object", + "description": "Policies to control how to act if a signature is invalid", + "additionalProperties": false, + "properties": { + "UntrustedArtifactOnDeployment": { + "type": "string", + "description": "Indicates how Lambda operations involve updating the code artifact will operate. Default to Warn if not provided", + "default": "Warn", + "enum": [ + "Warn", + "Enforce" + ] + } + }, + "required": [ + "UntrustedArtifactOnDeployment" + ] + } + }, + "required": [ + "AllowedPublishers" + ], + "readOnlyProperties": [ + "/properties/CodeSigningConfigId", + "/properties/CodeSigningConfigArn" + ], + "primaryIdentifier": [ + "/properties/CodeSigningConfigArn" + ], + "handlers": { + "create": { + "permissions": [ + "lambda:CreateCodeSigningConfig" + ] + }, + "read": { + "permissions": [ + "lambda:GetCodeSigningConfig" + ] + }, + "update": { + "permissions": [ + "lambda:UpdateCodeSigningConfig" + ] + }, + "delete": { + "permissions": [ + "lambda:DeleteCodeSigningConfig" + ] + }, + "list": { + "permissions": [ + "lambda:ListCodeSigningConfigs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/eventinvokeconfig.json b/internal/aws/cfn/schemas/aws/lambda/eventinvokeconfig.json new file mode 100644 index 00000000..e815725a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/eventinvokeconfig.json @@ -0,0 +1,137 @@ +{ + "typeName": "AWS::Lambda::EventInvokeConfig", + "description": "The AWS::Lambda::EventInvokeConfig resource configures options for asynchronous invocation on a version or an alias.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "DestinationConfig": { + "description": "A destination for events after they have been sent to a function for processing.", + "type": "object", + "properties": { + "OnFailure": { + "$ref": "#/definitions/OnFailure" + }, + "OnSuccess": { + "$ref": "#/definitions/OnSuccess" + } + }, + "additionalProperties": false + }, + "OnFailure": { + "description": "The destination configuration for failed invocations.", + "type": "object", + "properties": { + "Destination": { + "description": "The Amazon Resource Name (ARN) of the destination resource.", + "type": "string", + "pattern": "^$|arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", + "minLength": 0, + "maxLength": 350 + } + }, + "required": [ + "Destination" + ], + "additionalProperties": false + }, + "OnSuccess": { + "description": "The destination configuration for successful invocations.", + "type": "object", + "properties": { + "Destination": { + "description": "The Amazon Resource Name (ARN) of the destination resource.", + "type": "string", + "pattern": "^$|arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", + "minLength": 0, + "maxLength": 350 + } + }, + "required": [ + "Destination" + ], + "additionalProperties": false + } + }, + "properties": { + "DestinationConfig": { + "$ref": "#/definitions/DestinationConfig" + }, + "FunctionName": { + "description": "The name of the Lambda function.", + "type": "string", + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?$" + }, + "MaximumEventAgeInSeconds": { + "description": "The maximum age of a request that Lambda sends to a function for processing.", + "type": "integer", + "minimum": 60, + "maximum": 21600 + }, + "MaximumRetryAttempts": { + "description": "The maximum number of times to retry when the function returns an error.", + "type": "integer", + "minimum": 0, + "maximum": 2 + }, + "Qualifier": { + "description": "The identifier of a version or alias.", + "type": "string", + "pattern": "^(|[a-zA-Z0-9$_-]{1,129})$" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "FunctionName", + "Qualifier" + ], + "primaryIdentifier": [ + "/properties/FunctionName", + "/properties/Qualifier" + ], + "createOnlyProperties": [ + "/properties/FunctionName", + "/properties/Qualifier" + ], + "handlers": { + "create": { + "permissions": [ + "lambda:PutFunctionEventInvokeConfig" + ] + }, + "read": { + "permissions": [ + "lambda:GetFunctionEventInvokeConfig" + ] + }, + "update": { + "permissions": [ + "lambda:UpdateFunctionEventInvokeConfig" + ] + }, + "delete": { + "permissions": [ + "lambda:DeleteFunctionEventInvokeConfig" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "FunctionName": { + "$ref": "resource-schema.json#/properties/FunctionName" + } + }, + "required": [ + "FunctionName" + ] + }, + "permissions": [ + "lambda:ListFunctionEventInvokeConfigs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/eventsourcemapping.json b/internal/aws/cfn/schemas/aws/lambda/eventsourcemapping.json new file mode 100644 index 00000000..2071c3da --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/eventsourcemapping.json @@ -0,0 +1,398 @@ +{ + "typeName": "AWS::Lambda::EventSourceMapping", + "description": "Resource Type definition for AWS::Lambda::EventSourceMapping", + "additionalProperties": false, + "properties": { + "Id": { + "description": "Event Source Mapping Identifier UUID.", + "type": "string", + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "minLength": 36, + "maxLength": 36 + }, + "BatchSize": { + "description": "The maximum number of items to retrieve in a single batch.", + "type": "integer", + "minimum": 1, + "maximum": 10000 + }, + "BisectBatchOnFunctionError": { + "description": "(Streams) If the function returns an error, split the batch in two and retry.", + "type": "boolean" + }, + "DestinationConfig": { + "description": "(Streams) An Amazon SQS queue or Amazon SNS topic destination for discarded records.", + "$ref": "#/definitions/DestinationConfig" + }, + "Enabled": { + "description": "Disables the event source mapping to pause polling and invocation.", + "type": "boolean" + }, + "EventSourceArn": { + "description": "The Amazon Resource Name (ARN) of the event source.", + "type": "string", + "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", + "minLength": 12, + "maxLength": 1024 + }, + "FilterCriteria": { + "description": "The filter criteria to control event filtering.", + "$ref": "#/definitions/FilterCriteria" + }, + "FunctionName": { + "description": "The name of the Lambda function.", + "type": "string", + "pattern": "(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?", + "minLength": 1, + "maxLength": 140 + }, + "MaximumBatchingWindowInSeconds": { + "description": "(Streams) The maximum amount of time to gather records before invoking the function, in seconds.", + "type": "integer", + "minimum": 0, + "maximum": 300 + }, + "MaximumRecordAgeInSeconds": { + "description": "(Streams) The maximum age of a record that Lambda sends to a function for processing.", + "type": "integer", + "minimum": -1, + "maximum": 604800 + }, + "MaximumRetryAttempts": { + "description": "(Streams) The maximum number of times to retry when the function returns an error.", + "type": "integer", + "minimum": -1, + "maximum": 10000 + }, + "ParallelizationFactor": { + "description": "(Streams) The number of batches to process from each shard concurrently.", + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "StartingPosition": { + "description": "The position in a stream from which to start reading. Required for Amazon Kinesis and Amazon DynamoDB Streams sources.", + "type": "string", + "pattern": "(LATEST|TRIM_HORIZON|AT_TIMESTAMP)+", + "minLength": 6, + "maxLength": 12 + }, + "StartingPositionTimestamp": { + "description": "With StartingPosition set to AT_TIMESTAMP, the time from which to start reading, in Unix time seconds.", + "type": "number" + }, + "Topics": { + "description": "(Kafka) A list of Kafka topics.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^[^.]([a-zA-Z0-9\\-_.]+)", + "minLength": 1, + "maxLength": 249 + }, + "minItems": 1, + "maxItems": 1 + }, + "Queues": { + "description": "(ActiveMQ) A list of ActiveMQ queues.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 1000 + }, + "minItems": 1, + "maxItems": 1 + }, + "SourceAccessConfigurations": { + "description": "A list of SourceAccessConfiguration.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SourceAccessConfiguration" + }, + "minItems": 1, + "maxItems": 22 + }, + "TumblingWindowInSeconds": { + "description": "(Streams) Tumbling window (non-overlapping time window) duration to perform aggregations.", + "type": "integer", + "minimum": 0, + "maximum": 900 + }, + "FunctionResponseTypes": { + "description": "(Streams) A list of response types supported by the function.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ReportBatchItemFailures" + ] + }, + "minLength": 0, + "maxLength": 1 + }, + "SelfManagedEventSource": { + "description": "Self-managed event source endpoints.", + "$ref": "#/definitions/SelfManagedEventSource" + }, + "AmazonManagedKafkaEventSourceConfig": { + "description": "Specific configuration settings for an MSK event source.", + "$ref": "#/definitions/AmazonManagedKafkaEventSourceConfig" + }, + "SelfManagedKafkaEventSourceConfig": { + "description": "Specific configuration settings for a Self-Managed Apache Kafka event source.", + "$ref": "#/definitions/SelfManagedKafkaEventSourceConfig" + }, + "ScalingConfig": { + "description": "The scaling configuration for the event source.", + "$ref": "#/definitions/ScalingConfig" + }, + "DocumentDBEventSourceConfig": { + "description": "Document db event source config.", + "$ref": "#/definitions/DocumentDBEventSourceConfig" + } + }, + "definitions": { + "DestinationConfig": { + "type": "object", + "additionalProperties": false, + "description": "(Streams) An Amazon SQS queue or Amazon SNS topic destination for discarded records.", + "properties": { + "OnFailure": { + "description": "The destination configuration for failed invocations.", + "$ref": "#/definitions/OnFailure" + } + } + }, + "FilterCriteria": { + "type": "object", + "description": "The filter criteria to control event filtering.", + "additionalProperties": false, + "properties": { + "Filters": { + "description": "List of filters of this FilterCriteria", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Filter" + }, + "minItems": 1, + "maxItems": 20 + } + } + }, + "Filter": { + "type": "object", + "description": "The filter object that defines parameters for ESM filtering.", + "additionalProperties": false, + "properties": { + "Pattern": { + "type": "string", + "description": "The filter pattern that defines which events should be passed for invocations.", + "pattern": ".*", + "minLength": 0, + "maxLength": 4096 + } + } + }, + "OnFailure": { + "type": "object", + "description": "A destination for events that failed processing.", + "additionalProperties": false, + "properties": { + "Destination": { + "description": "The Amazon Resource Name (ARN) of the destination resource.", + "type": "string", + "pattern": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)", + "minLength": 12, + "maxLength": 1024 + } + } + }, + "SourceAccessConfiguration": { + "type": "object", + "additionalProperties": false, + "description": "The configuration used by AWS Lambda to access event source", + "properties": { + "Type": { + "description": "The type of source access configuration.", + "enum": [ + "BASIC_AUTH", + "VPC_SUBNET", + "VPC_SECURITY_GROUP", + "SASL_SCRAM_512_AUTH", + "SASL_SCRAM_256_AUTH", + "VIRTUAL_HOST", + "CLIENT_CERTIFICATE_TLS_AUTH", + "SERVER_ROOT_CA_CERTIFICATE" + ], + "type": "string" + }, + "URI": { + "description": "The URI for the source access configuration resource.", + "type": "string", + "pattern": "[a-zA-Z0-9-\\/*:_+=.@-]*", + "minLength": 1, + "maxLength": 200 + } + } + }, + "SelfManagedEventSource": { + "type": "object", + "additionalProperties": false, + "description": "The configuration used by AWS Lambda to access a self-managed event source.", + "properties": { + "Endpoints": { + "description": "The endpoints for a self-managed event source.", + "$ref": "#/definitions/Endpoints" + } + } + }, + "Endpoints": { + "type": "object", + "additionalProperties": false, + "description": "The endpoints used by AWS Lambda to access a self-managed event source.", + "properties": { + "KafkaBootstrapServers": { + "type": "array", + "description": "A list of Kafka server endpoints.", + "uniqueItems": true, + "items": { + "type": "string", + "description": "The URL of a Kafka server.", + "pattern": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]):[0-9]{1,5}", + "minLength": 1, + "maxLength": 300 + }, + "minItems": 1, + "maxItems": 10 + } + } + }, + "ConsumerGroupId": { + "description": "The identifier for the Kafka Consumer Group to join.", + "type": "string", + "pattern": "[a-zA-Z0-9-\\/*:_+=.@-]*", + "minLength": 1, + "maxLength": 200 + }, + "AmazonManagedKafkaEventSourceConfig": { + "description": "Specific configuration settings for an MSK event source.", + "type": "object", + "additionalProperties": false, + "properties": { + "ConsumerGroupId": { + "description": "The identifier for the Kafka Consumer Group to join.", + "$ref": "#/definitions/ConsumerGroupId" + } + } + }, + "SelfManagedKafkaEventSourceConfig": { + "description": "Specific configuration settings for a Self-Managed Apache Kafka event source.", + "type": "object", + "additionalProperties": false, + "properties": { + "ConsumerGroupId": { + "description": "The identifier for the Kafka Consumer Group to join.", + "$ref": "#/definitions/ConsumerGroupId" + } + } + }, + "MaximumConcurrency": { + "description": "The maximum number of concurrent functions that an event source can invoke.", + "type": "integer", + "minimum": 2, + "maximum": 1000 + }, + "ScalingConfig": { + "description": "The scaling configuration for the event source.", + "type": "object", + "additionalProperties": false, + "properties": { + "MaximumConcurrency": { + "description": "The maximum number of concurrent functions that the event source can invoke.", + "$ref": "#/definitions/MaximumConcurrency" + } + } + }, + "DocumentDBEventSourceConfig": { + "description": "Document db event source config.", + "type": "object", + "additionalProperties": false, + "properties": { + "DatabaseName": { + "description": "The database name to connect to.", + "type": "string", + "minLength": 1, + "maxLength": 63 + }, + "CollectionName": { + "description": "The collection name to connect to.", + "type": "string", + "minLength": 1, + "maxLength": 57 + }, + "FullDocument": { + "description": "Include full document in change stream response. The default option will only send the changes made to documents to Lambda. If you want the complete document sent to Lambda, set this to UpdateLookup.", + "type": "string", + "enum": [ + "UpdateLookup", + "Default" + ] + } + } + } + }, + "required": [ + "FunctionName" + ], + "createOnlyProperties": [ + "/properties/EventSourceArn", + "/properties/StartingPosition", + "/properties/StartingPositionTimestamp", + "/properties/SelfManagedEventSource", + "/properties/AmazonManagedKafkaEventSourceConfig", + "/properties/SelfManagedKafkaEventSourceConfig" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "lambda:CreateEventSourceMapping", + "lambda:GetEventSourceMapping" + ] + }, + "delete": { + "permissions": [ + "lambda:DeleteEventSourceMapping", + "lambda:GetEventSourceMapping" + ] + }, + "list": { + "permissions": [ + "lambda:ListEventSourceMappings" + ] + }, + "read": { + "permissions": [ + "lambda:GetEventSourceMapping" + ] + }, + "update": { + "permissions": [ + "lambda:UpdateEventSourceMapping", + "lambda:GetEventSourceMapping" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/function.json b/internal/aws/cfn/schemas/aws/lambda/function.json new file mode 100644 index 00000000..9622fb3b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/function.json @@ -0,0 +1,573 @@ +{ + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": true + }, + "handlers": { + "read": { + "permissions": [ + "lambda:GetFunction", + "lambda:GetFunctionCodeSigningConfig" + ] + }, + "create": { + "permissions": [ + "lambda:CreateFunction", + "lambda:GetFunction", + "lambda:PutFunctionConcurrency", + "iam:PassRole", + "s3:GetObject", + "s3:GetObjectVersion", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "elasticfilesystem:DescribeMountTargets", + "kms:CreateGrant", + "kms:Decrypt", + "kms:Encrypt", + "kms:GenerateDataKey", + "lambda:GetCodeSigningConfig", + "lambda:GetFunctionCodeSigningConfig", + "lambda:GetLayerVersion", + "lambda:GetRuntimeManagementConfig", + "lambda:PutRuntimeManagementConfig", + "lambda:TagResource", + "lambda:GetPolicy", + "lambda:AddPermission", + "lambda:RemovePermission", + "lambda:GetResourcePolicy", + "lambda:PutResourcePolicy" + ] + }, + "update": { + "permissions": [ + "lambda:DeleteFunctionConcurrency", + "lambda:GetFunction", + "lambda:PutFunctionConcurrency", + "lambda:ListTags", + "lambda:TagResource", + "lambda:UntagResource", + "lambda:UpdateFunctionConfiguration", + "lambda:UpdateFunctionCode", + "iam:PassRole", + "s3:GetObject", + "s3:GetObjectVersion", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "elasticfilesystem:DescribeMountTargets", + "kms:CreateGrant", + "kms:Decrypt", + "kms:GenerateDataKey", + "lambda:GetRuntimeManagementConfig", + "lambda:PutRuntimeManagementConfig", + "lambda:PutFunctionCodeSigningConfig", + "lambda:DeleteFunctionCodeSigningConfig", + "lambda:GetCodeSigningConfig", + "lambda:GetFunctionCodeSigningConfig", + "lambda:GetPolicy", + "lambda:AddPermission", + "lambda:RemovePermission", + "lambda:GetResourcePolicy", + "lambda:PutResourcePolicy", + "lambda:DeleteResourcePolicy" + ] + }, + "list": { + "permissions": [ + "lambda:ListFunctions" + ] + }, + "delete": { + "permissions": [ + "lambda:DeleteFunction", + "lambda:GetFunction", + "ec2:DescribeNetworkInterfaces" + ] + } + }, + "typeName": "AWS::Lambda::Function", + "readOnlyProperties": [ + "/properties/SnapStartResponse", + "/properties/SnapStartResponse/ApplyOn", + "/properties/SnapStartResponse/OptimizationStatus", + "/properties/Arn" + ], + "description": "The ``AWS::Lambda::Function`` resource creates a Lambda function. To create a function, you need a [deployment package](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) and an [execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). The deployment package is a .zip file archive or container image that contains your function code. The execution role grants the function permission to use AWS services, such as Amazon CloudWatch Logs for log streaming and AWS X-Ray for request tracing.\n You set the package type to ``Image`` if the deployment package is a [container image](https://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html). For a container image, the code property must include the URI of a container image in the Amazon ECR registry. You do not need to specify the handler and runtime properties. \n You set the package type to ``Zip`` if the deployment package is a [.zip file archive](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html#gettingstarted-package-zip). For a .zip file archive, the code property specifies the location of the .zip file. You must also specify the handler and runtime properties. For a Python example, see [Deploy Python Lambda functions with .zip file archives](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html).\n You can use [code signing](https://docs.aws.amazon.com/lambda/latest/dg/configuration-codesigning.html) if your deployment package is a .zip file archive. To enable code signing for this function, specify the ARN of a code-signing configuration. When a user attempts to deploy a code package with ``UpdateFunctionCode``, Lambda checks that the code package has a valid signature from a trusted publisher. The code-signing configuration includes a set of signing profiles, which define the trusted publishers for this function.\n Note that you configure [provisioned concurrency](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html) on a ``AWS::Lambda::Version`` or a ``AWS::Lambda::Alias``.\n For a complete introduction to Lambda functions, see [What is Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/lambda-welcome.html) in the *Lambda developer guide.*", + "writeOnlyProperties": [ + "/properties/SnapStart", + "/properties/SnapStart/ApplyOn", + "/properties/Code", + "/properties/Code/ImageUri", + "/properties/Code/S3Bucket", + "/properties/Code/S3Key", + "/properties/Code/S3ObjectVersion", + "/properties/Code/ZipFile" + ], + "createOnlyProperties": [ + "/properties/FunctionName" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/FunctionName" + ], + "definitions": { + "ImageConfig": { + "description": "Configuration values that override the container image Dockerfile settings. For more information, see [Container image settings](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#images-parms).", + "additionalProperties": false, + "type": "object", + "properties": { + "WorkingDirectory": { + "description": "Specifies the working directory. The length of the directory string cannot exceed 1,000 characters.", + "type": "string" + }, + "Command": { + "maxItems": 1500, + "uniqueItems": true, + "description": "Specifies parameters that you want to pass in with ENTRYPOINT. You can specify a maximum of 1,500 parameters in the list.", + "type": "array", + "items": { + "type": "string" + } + }, + "EntryPoint": { + "maxItems": 1500, + "uniqueItems": true, + "description": "Specifies the entry point to their application, which is typically the location of the runtime executable. You can specify a maximum of 1,500 string entries in the list.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "TracingConfig": { + "description": "The function's [](https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html) tracing configuration. To sample and record incoming requests, set ``Mode`` to ``Active``.", + "additionalProperties": false, + "type": "object", + "properties": { + "Mode": { + "description": "The tracing mode.", + "type": "string", + "enum": [ + "Active", + "PassThrough" + ] + } + } + }, + "VpcConfig": { + "description": "The VPC security groups and subnets that are attached to a Lambda function. When you connect a function to a VPC, Lambda creates an elastic network interface for each combination of security group and subnet in the function's VPC configuration. The function can only access resources and the internet through that VPC. For more information, see [VPC Settings](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).\n When you delete a function, CFN monitors the state of its network interfaces and waits for Lambda to delete them before proceeding. If the VPC is defined in the same stack, the network interfaces need to be deleted by Lambda before CFN can delete the VPC's resources.\n To monitor network interfaces, CFN needs the ``ec2:DescribeNetworkInterfaces`` permission. It obtains this from the user or role that modifies the stack. If you don't provide this permission, CFN does not wait for network interfaces to be deleted.", + "additionalProperties": false, + "type": "object", + "properties": { + "Ipv6AllowedForDualStack": { + "description": "Allows outbound IPv6 traffic on VPC functions that are connected to dual-stack subnets.", + "type": "boolean" + }, + "SecurityGroupIds": { + "maxItems": 5, + "uniqueItems": false, + "description": "A list of VPC security group IDs.", + "type": "array", + "items": { + "type": "string" + } + }, + "SubnetIds": { + "maxItems": 16, + "uniqueItems": false, + "description": "A list of VPC subnet IDs.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "DeadLetterConfig": { + "description": "The [dead-letter queue](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#dlq) for failed asynchronous invocations.", + "additionalProperties": false, + "type": "object", + "properties": { + "TargetArn": { + "pattern": "^(arn:(aws[a-zA-Z-]*)?:[a-z0-9-.]+:.*)|()$", + "description": "The Amazon Resource Name (ARN) of an Amazon SQS queue or Amazon SNS topic.", + "type": "string" + } + } + }, + "RuntimeManagementConfig": { + "description": "Sets the runtime management configuration for a function's version. For more information, see [Runtime updates](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "UpdateRuntimeOn": { + "description": "Specify the runtime update mode.\n + *Auto (default)* - Automatically update to the most recent and secure runtime version using a [Two-phase runtime version rollout](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-two-phase). This is the best choice for most customers to ensure they always benefit from runtime updates.\n + *FunctionUpdate* - LAM updates the runtime of you function to the most recent and secure runtime version when you update your function. This approach synchronizes runtime updates with function deployments, giving you control over when runtime updates are applied and allowing you to detect and mitigate rare runtime update incompatibilities early. When using this setting, you need to regularly update your functions to keep their runtime up-to-date.\n + *Manual* - You specify a runtime version in your function configuration. The function will use this runtime version indefinitely. In the rare case where a new runtime version is incompatible with an existing function, this allows you to roll back your function to an earlier runtime version. For more information, see [Roll back a runtime version](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-rollback).\n \n *Valid Values*: ``Auto`` | ``FunctionUpdate`` | ``Manual``", + "type": "string", + "enum": [ + "Auto", + "FunctionUpdate", + "Manual" + ] + }, + "RuntimeVersionArn": { + "description": "The ARN of the runtime version you want the function to use.\n This is only required if you're using the *Manual* runtime update mode.", + "type": "string" + } + }, + "required": [ + "UpdateRuntimeOn" + ] + }, + "SnapStart": { + "description": "The function's [SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html) setting.", + "additionalProperties": false, + "type": "object", + "properties": { + "ApplyOn": { + "description": "Set ``ApplyOn`` to ``PublishedVersions`` to create a snapshot of the initialized execution environment when you publish a function version.", + "type": "string", + "enum": [ + "PublishedVersions", + "None" + ] + } + }, + "required": [ + "ApplyOn" + ] + }, + "SnapStartResponse": { + "description": "The function's [SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html) setting.", + "additionalProperties": false, + "type": "object", + "properties": { + "OptimizationStatus": { + "description": "When you provide a [qualified Amazon Resource Name (ARN)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html#versioning-versions-using), this response element indicates whether SnapStart is activated for the specified function version.", + "type": "string", + "enum": [ + "On", + "Off" + ] + }, + "ApplyOn": { + "description": "When set to ``PublishedVersions``, Lambda creates a snapshot of the execution environment when you publish a function version.", + "type": "string", + "enum": [ + "PublishedVersions", + "None" + ] + } + } + }, + "Code": { + "description": "The [deployment package](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) for a Lambda function. To deploy a function defined as a container image, you specify the location of a container image in the Amazon ECR registry. For a .zip file deployment package, you can specify the location of an object in Amazon S3. For Node.js and Python functions, you can specify the function code inline in the template.\n Changes to a deployment package in Amazon S3 or a container image in ECR are not detected automatically during stack updates. To update the function code, change the object key or version in the template.", + "additionalProperties": false, + "type": "object", + "properties": { + "S3ObjectVersion": { + "minLength": 1, + "description": "For versioned objects, the version of the deployment package object to use.", + "type": "string", + "maxLength": 1024 + }, + "S3Bucket": { + "minLength": 3, + "pattern": "^[0-9A-Za-z\\.\\-_]*(?``. To use a different log group, enter an existing log group or enter a new log group name.", + "type": "string", + "maxLength": 512 + }, + "SystemLogLevel": { + "description": "Set this property to filter the system logs for your function that Lambda sends to CloudWatch. Lambda only sends system logs at the selected level of detail and lower, where ``DEBUG`` is the highest level and ``WARN`` is the lowest.", + "type": "string", + "enum": [ + "DEBUG", + "INFO", + "WARN" + ] + } + } + }, + "Environment": { + "description": "A function's environment variable settings. You can use environment variables to adjust your function's behavior without updating code. An environment variable is a pair of strings that are stored in a function's version-specific configuration.", + "additionalProperties": false, + "type": "object", + "properties": { + "Variables": { + "patternProperties": { + "[a-zA-Z][a-zA-Z0-9_]+": { + "type": "string" + } + }, + "description": "Environment variable key-value pairs. For more information, see [Using Lambda environment variables](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html).", + "additionalProperties": false, + "type": "object" + } + } + }, + "FileSystemConfig": { + "description": "Details about the connection between a Lambda function and an [Amazon EFS file system](https://docs.aws.amazon.com/lambda/latest/dg/configuration-filesystem.html).", + "additionalProperties": false, + "type": "object", + "properties": { + "Arn": { + "pattern": "^arn:aws[a-zA-Z-]*:elasticfilesystem:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:access-point/fsap-[a-f0-9]{17}$", + "description": "The Amazon Resource Name (ARN) of the Amazon EFS access point that provides access to the file system.", + "type": "string", + "maxLength": 200 + }, + "LocalMountPath": { + "pattern": "^/mnt/[a-zA-Z0-9-_.]+$", + "description": "The path where the function can access the file system, starting with ``/mnt/``.", + "type": "string", + "maxLength": 160 + } + }, + "required": [ + "Arn", + "LocalMountPath" + ] + }, + "Tag": { + "description": "", + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "minLength": 0, + "description": "", + "type": "string", + "maxLength": 256 + }, + "Key": { + "minLength": 1, + "description": "", + "type": "string", + "maxLength": 128 + } + }, + "required": [ + "Key" + ] + }, + "EphemeralStorage": { + "description": "The size of the function's ``/tmp`` directory in MB. The default value is 512, but it can be any whole number between 512 and 10,240 MB.", + "additionalProperties": false, + "type": "object", + "properties": { + "Size": { + "description": "The size of the function's ``/tmp`` directory.", + "maximum": 10240, + "type": "integer", + "minimum": 512 + } + }, + "required": [ + "Size" + ] + } + }, + "required": [ + "Code", + "Role" + ], + "properties": { + "Description": { + "description": "A description of the function.", + "type": "string", + "maxLength": 256 + }, + "TracingConfig": { + "description": "Set ``Mode`` to ``Active`` to sample and trace a subset of incoming requests with [X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html).", + "$ref": "#/definitions/TracingConfig" + }, + "VpcConfig": { + "description": "For network connectivity to AWS resources in a VPC, specify a list of security groups and subnets in the VPC. When you connect a function to a VPC, it can access resources and the internet only through that VPC. For more information, see [Configuring a Lambda function to access resources in a VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).", + "$ref": "#/definitions/VpcConfig" + }, + "RuntimeManagementConfig": { + "description": "Sets the runtime management configuration for a function's version. For more information, see [Runtime updates](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html).", + "$ref": "#/definitions/RuntimeManagementConfig" + }, + "ReservedConcurrentExecutions": { + "description": "The number of simultaneous executions to reserve for the function.", + "type": "integer", + "minimum": 0 + }, + "SnapStart": { + "description": "The function's [SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html) setting.", + "$ref": "#/definitions/SnapStart" + }, + "FileSystemConfigs": { + "maxItems": 1, + "description": "Connection settings for an Amazon EFS file system. To connect a function to a file system, a mount target must be available in every Availability Zone that your function connects to. If your template contains an [AWS::EFS::MountTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html) resource, you must also specify a ``DependsOn`` attribute to ensure that the mount target is created or updated before the function.\n For more information about using the ``DependsOn`` attribute, see [DependsOn Attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html).", + "type": "array", + "items": { + "$ref": "#/definitions/FileSystemConfig" + } + }, + "FunctionName": { + "minLength": 1, + "description": "The name of the Lambda function, up to 64 characters in length. If you don't specify a name, CFN generates one.\n If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.", + "type": "string" + }, + "Runtime": { + "description": "The identifier of the function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). Runtime is required if the deployment package is a .zip file archive.\n The following list includes deprecated runtimes. For more information, see [Runtime deprecation policy](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy).", + "type": "string" + }, + "KmsKeyArn": { + "pattern": "^(arn:(aws[a-zA-Z-]*)?:[a-z0-9-.]+:.*)|()$", + "description": "The ARN of the KMSlong (KMS) customer managed key that's used to encrypt your function's [environment variables](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-encryption). When [Lambda SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart-security.html) is activated, Lambda also uses this key is to encrypt your function's snapshot. If you deploy your function using a container image, Lambda also uses this key to encrypt your function when it's deployed. Note that this is not the same key that's used to protect your container image in the Amazon Elastic Container Registry (Amazon ECR). If you don't provide a customer managed key, Lambda uses a default service key.", + "type": "string" + }, + "PackageType": { + "description": "The type of deployment package. Set to ``Image`` for container image and set ``Zip`` for .zip file archive.", + "type": "string", + "enum": [ + "Image", + "Zip" + ] + }, + "CodeSigningConfigArn": { + "pattern": "arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:code-signing-config:csc-[a-z0-9]{17}", + "description": "To enable code signing for this function, specify the ARN of a code-signing configuration. A code-signing configuration includes a set of signing profiles, which define the trusted publishers for this function.", + "type": "string" + }, + "Layers": { + "uniqueItems": false, + "description": "A list of [function layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) to add to the function's execution environment. Specify each layer by its ARN, including the version.", + "type": "array", + "items": { + "type": "string" + } + }, + "Tags": { + "uniqueItems": true, + "description": "A list of [tags](https://docs.aws.amazon.com/lambda/latest/dg/tagging.html) to apply to the function.", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ImageConfig": { + "description": "Configuration values that override the container image Dockerfile settings. For more information, see [Container image settings](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#images-parms).", + "$ref": "#/definitions/ImageConfig" + }, + "MemorySize": { + "description": "The amount of [memory available to the function](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-memory-console) at runtime. Increasing the function memory also increases its CPU allocation. The default value is 128 MB. The value can be any multiple of 1 MB. Note that new AWS accounts have reduced concurrency and memory quotas. AWS raises these quotas automatically based on your usage. You can also request a quota increase.", + "type": "integer" + }, + "DeadLetterConfig": { + "description": "A dead-letter queue configuration that specifies the queue or topic where Lambda sends asynchronous events when they fail processing. For more information, see [Dead-letter queues](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-dlq).", + "$ref": "#/definitions/DeadLetterConfig" + }, + "Timeout": { + "description": "The amount of time (in seconds) that Lambda allows a function to run before stopping it. The default is 3 seconds. The maximum allowed value is 900 seconds. For more information, see [Lambda execution environment](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html).", + "type": "integer", + "minimum": 1 + }, + "Handler": { + "pattern": "^[^\\s]+$", + "description": "The name of the method within your code that Lambda calls to run your function. Handler is required if the deployment package is a .zip file archive. The format includes the file name. It can also include namespaces and other qualifiers, depending on the runtime. For more information, see [Lambda programming model](https://docs.aws.amazon.com/lambda/latest/dg/foundation-progmodel.html).", + "type": "string", + "maxLength": 128 + }, + "SnapStartResponse": { + "description": "", + "$ref": "#/definitions/SnapStartResponse" + }, + "Code": { + "description": "The code for the function.", + "$ref": "#/definitions/Code" + }, + "Role": { + "pattern": "^arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$", + "description": "The Amazon Resource Name (ARN) of the function's execution role.", + "type": "string" + }, + "LoggingConfig": { + "description": "The function's Amazon CloudWatch Logs configuration settings.", + "$ref": "#/definitions/LoggingConfig" + }, + "Environment": { + "description": "Environment variables that are accessible from function code during execution.", + "$ref": "#/definitions/Environment" + }, + "Arn": { + "description": "", + "type": "string" + }, + "EphemeralStorage": { + "description": "The size of the function's ``/tmp`` directory in MB. The default value is 512, but it can be any whole number between 512 and 10,240 MB.", + "$ref": "#/definitions/EphemeralStorage" + }, + "Architectures": { + "minItems": 1, + "maxItems": 1, + "uniqueItems": true, + "description": "The instruction set architecture that the function supports. Enter a string array with one of the valid values (arm64 or x86_64). The default value is ``x86_64``.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "x86_64", + "arm64" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/layerversion.json b/internal/aws/cfn/schemas/aws/lambda/layerversion.json new file mode 100644 index 00000000..7bc8e494 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/layerversion.json @@ -0,0 +1,120 @@ +{ + "typeName": "AWS::Lambda::LayerVersion", + "description": "Resource Type definition for AWS::Lambda::LayerVersion", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "definitions": { + "Content": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3ObjectVersion": { + "description": "For versioned objects, the version of the layer archive object to use.", + "type": "string" + }, + "S3Bucket": { + "description": "The Amazon S3 bucket of the layer archive.", + "type": "string" + }, + "S3Key": { + "description": "The Amazon S3 key of the layer archive.", + "type": "string" + } + }, + "required": [ + "S3Bucket", + "S3Key" + ] + } + }, + "properties": { + "CompatibleRuntimes": { + "description": "A list of compatible function runtimes. Used for filtering with ListLayers and ListLayerVersions.", + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "LicenseInfo": { + "description": "The layer's software license.", + "type": "string" + }, + "Description": { + "description": "The description of the version.", + "type": "string" + }, + "LayerName": { + "description": "The name or Amazon Resource Name (ARN) of the layer.", + "type": "string" + }, + "Content": { + "description": "The function layer archive.", + "$ref": "#/definitions/Content" + }, + "LayerVersionArn": { + "type": "string" + }, + "CompatibleArchitectures": { + "description": "A list of compatible instruction set architectures.", + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "Content" + ], + "createOnlyProperties": [ + "/properties/CompatibleRuntimes", + "/properties/LicenseInfo", + "/properties/CompatibleArchitectures", + "/properties/LayerName", + "/properties/Description", + "/properties/Content" + ], + "readOnlyProperties": [ + "/properties/LayerVersionArn" + ], + "writeOnlyProperties": [ + "/properties/Content" + ], + "primaryIdentifier": [ + "/properties/LayerVersionArn" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "lambda:PublishLayerVersion", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "read": { + "permissions": [ + "lambda:GetLayerVersion" + ] + }, + "delete": { + "permissions": [ + "lambda:GetLayerVersion", + "lambda:DeleteLayerVersion" + ] + }, + "list": { + "permissions": [ + "lambda:ListLayerVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/layerversionpermission.json b/internal/aws/cfn/schemas/aws/lambda/layerversionpermission.json new file mode 100644 index 00000000..34df4305 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/layerversionpermission.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::Lambda::LayerVersionPermission", + "description": "Schema for Lambda LayerVersionPermission", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "additionalProperties": false, + "properties": { + "Id": { + "description": "ID generated by service", + "type": "string" + }, + "Action": { + "description": "The API action that grants access to the layer.", + "type": "string" + }, + "LayerVersionArn": { + "description": "The name or Amazon Resource Name (ARN) of the layer.", + "type": "string" + }, + "OrganizationId": { + "description": "With the principal set to *, grant permission to all accounts in the specified organization.", + "type": "string" + }, + "Principal": { + "description": "An account ID, or * to grant layer usage permission to all accounts in an organization, or all AWS accounts (if organizationId is not specified).", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "LayerVersionArn", + "Action", + "Principal" + ], + "createOnlyProperties": [ + "/properties/OrganizationId", + "/properties/Principal", + "/properties/Action", + "/properties/LayerVersionArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "lambda:AddLayerVersionPermission" + ] + }, + "read": { + "permissions": [ + "lambda:GetLayerVersionPolicy" + ] + }, + "delete": { + "permissions": [ + "lambda:GetLayerVersionPolicy", + "lambda:RemoveLayerVersionPermission" + ] + }, + "list": { + "permissions": [ + "lambda:GetLayerVersionPolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/permission.json b/internal/aws/cfn/schemas/aws/lambda/permission.json new file mode 100644 index 00000000..2adbfc88 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/permission.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::Lambda::Permission", + "description": "The ``AWS::Lambda::Permission`` resource grants an AWS service or another account permission to use a function. You can apply the policy at the function level, or specify a qualifier to restrict access to a single version or alias. If you use a qualifier, the invoker must use the full Amazon Resource Name (ARN) of that version or alias to invoke the function.\n To grant permission to another account, specify the account ID as the ``Principal``. To grant permission to an organization defined in AOlong, specify the organization ID as the ``PrincipalOrgID``. For AWS services, the principal is a domain-style identifier defined by the service, like ``s3.amazonaws.com`` or ``sns.amazonaws.com``. For AWS services, you can also specify the ARN of the associated resource as the ``SourceArn``. If you grant permission to a service principal without specifying the source, other accounts could potentially configure resources in their account to invoke your Lambda function.\n If your function has a fu", + "additionalProperties": false, + "properties": { + "Id": { + "description": "", + "type": "string", + "pattern": "^.*$", + "minLength": 1, + "maxLength": 256 + }, + "Action": { + "description": "The action that the principal can use on the function. For example, ``lambda:InvokeFunction`` or ``lambda:GetFunction``.", + "type": "string", + "pattern": "^(lambda:[*]|lambda:[a-zA-Z]+|[*])$", + "minLength": 1, + "maxLength": 256 + }, + "EventSourceToken": { + "description": "For Alexa Smart Home functions, a token that the invoker must supply.", + "type": "string", + "pattern": "^[a-zA-Z0-9._\\-]+$", + "minLength": 1, + "maxLength": 256 + }, + "FunctionName": { + "description": "The name of the Lambda function, version, or alias.\n **Name formats**\n + *Function name* ? ``my-function`` (name-only), ``my-function:v1`` (with alias).\n + *Function ARN* ? ``arn:aws:lambda:us-west-2:123456789012:function:my-function``.\n + *Partial ARN* ? ``123456789012:function:my-function``.\n \n You can append a version number or alias to any of the formats. The length constraint applies only to the full ARN. If you specify only the function name, it is limited to 64 characters in length.", + "type": "string", + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?$", + "minLength": 1, + "maxLength": 140 + }, + "FunctionUrlAuthType": { + "description": "The type of authentication that your function URL uses. Set to ``AWS_IAM`` if you want to restrict access to authenticated users only. Set to ``NONE`` if you want to bypass IAM authentication to create a public endpoint. For more information, see [Security and auth model for Lambda function URLs](https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html).", + "type": "string", + "enum": [ + "AWS_IAM", + "NONE" + ] + }, + "Principal": { + "description": "The AWS-service or AWS-account that invokes the function. If you specify a service, use ``SourceArn`` or ``SourceAccount`` to limit who can invoke the function through that service.", + "type": "string", + "pattern": "^.*$", + "minLength": 1, + "maxLength": 256 + }, + "PrincipalOrgID": { + "description": "The identifier for your organization in AOlong. Use this to grant permissions to all the AWS-accounts under this organization.", + "type": "string", + "pattern": "^o-[a-z0-9]{10,32}$", + "minLength": 12, + "maxLength": 34 + }, + "SourceAccount": { + "description": "For AWS-service, the ID of the AWS-account that owns the resource. Use this together with ``SourceArn`` to ensure that the specified account owns the resource. It is possible for an Amazon S3 bucket to be deleted by its owner and recreated by another account.", + "type": "string", + "pattern": "^\\d{12}$", + "minLength": 12, + "maxLength": 12 + }, + "SourceArn": { + "description": "For AWS-services, the ARN of the AWS resource that invokes the function. For example, an Amazon S3 bucket or Amazon SNS topic.\n Note that Lambda configures the comparison using the ``StringLike`` operator.", + "type": "string", + "pattern": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$", + "minLength": 12, + "maxLength": 1024 + } + }, + "required": [ + "FunctionName", + "Action", + "Principal" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/FunctionName", + "/properties/FunctionUrlAuthType", + "/properties/SourceAccount", + "/properties/SourceArn", + "/properties/Principal", + "/properties/PrincipalOrgID", + "/properties/Action", + "/properties/EventSourceToken" + ], + "primaryIdentifier": [ + "/properties/FunctionName", + "/properties/Id" + ], + "propertyTransform": { + "/properties/Principal": "$join([\"^arn:aws[a-zA-Z-]*:iam::\",Principal,\":[a-zA-Z-]*\"]) $OR Principal" + }, + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "lambda:AddPermission" + ] + }, + "read": { + "permissions": [ + "lambda:GetPolicy" + ] + }, + "delete": { + "permissions": [ + "lambda:RemovePermission" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "FunctionName": { + "description": "The name of the Lambda function, version, or alias.", + "type": "string", + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?$", + "minLength": 1, + "maxLength": 140 + } + }, + "required": [ + "FunctionName" + ] + }, + "permissions": [ + "lambda:GetPolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/url.json b/internal/aws/cfn/schemas/aws/lambda/url.json new file mode 100644 index 00000000..978d6aa3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/url.json @@ -0,0 +1,191 @@ +{ + "typeName": "AWS::Lambda::Url", + "description": "Resource Type definition for AWS::Lambda::Url", + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "properties": { + "TargetFunctionArn": { + "description": "The Amazon Resource Name (ARN) of the function associated with the Function URL.", + "type": "string", + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:((?!\\d+)[0-9a-zA-Z-_]+))?$" + }, + "Qualifier": { + "description": "The alias qualifier for the target function. If TargetFunctionArn is unqualified then Qualifier must be passed.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "((?!^[0-9]+$)([a-zA-Z0-9-_]+))" + }, + "AuthType": { + "description": "Can be either AWS_IAM if the requests are authorized via IAM, or NONE if no authorization is configured on the Function URL.", + "type": "string", + "enum": [ + "AWS_IAM", + "NONE" + ] + }, + "InvokeMode": { + "description": "The invocation mode for the function's URL. Set to BUFFERED if you want to buffer responses before returning them to the client. Set to RESPONSE_STREAM if you want to stream responses, allowing faster time to first byte and larger response payload sizes. If not set, defaults to BUFFERED.", + "type": "string", + "enum": [ + "BUFFERED", + "RESPONSE_STREAM" + ] + }, + "FunctionArn": { + "description": "The full Amazon Resource Name (ARN) of the function associated with the Function URL.", + "type": "string", + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:((?!\\d+)[0-9a-zA-Z-_]+))?$" + }, + "FunctionUrl": { + "description": "The generated url for this resource.", + "type": "string" + }, + "Cors": { + "$ref": "#/definitions/Cors" + } + }, + "definitions": { + "AllowHeaders": { + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "type": "array", + "minItems": 1, + "maxItems": 100, + "insertionOrder": true + }, + "AllowMethods": { + "items": { + "type": "string", + "enum": [ + "GET", + "PUT", + "HEAD", + "POST", + "PATCH", + "DELETE", + "*" + ] + }, + "type": "array", + "minItems": 1, + "maxItems": 6, + "insertionOrder": true + }, + "AllowOrigins": { + "items": { + "type": "string", + "minLength": 1, + "maxLength": 253 + }, + "type": "array", + "minItems": 1, + "maxItems": 100, + "insertionOrder": true + }, + "ExposeHeaders": { + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "type": "array", + "minItems": 1, + "maxItems": 100, + "insertionOrder": true + }, + "Cors": { + "additionalProperties": false, + "properties": { + "AllowCredentials": { + "description": "Specifies whether credentials are included in the CORS request.", + "type": "boolean" + }, + "AllowHeaders": { + "description": "Represents a collection of allowed headers.", + "$ref": "#/definitions/AllowHeaders" + }, + "AllowMethods": { + "description": "Represents a collection of allowed HTTP methods.", + "$ref": "#/definitions/AllowMethods" + }, + "AllowOrigins": { + "description": "Represents a collection of allowed origins.", + "$ref": "#/definitions/AllowOrigins" + }, + "ExposeHeaders": { + "description": "Represents a collection of exposed headers.", + "$ref": "#/definitions/ExposeHeaders" + }, + "MaxAge": { + "type": "integer", + "minimum": 0, + "maximum": 86400 + } + }, + "type": "object" + } + }, + "required": [ + "TargetFunctionArn", + "AuthType" + ], + "createOnlyProperties": [ + "/properties/TargetFunctionArn", + "/properties/Qualifier" + ], + "readOnlyProperties": [ + "/properties/FunctionUrl", + "/properties/FunctionArn" + ], + "primaryIdentifier": [ + "/properties/FunctionArn" + ], + "propertyTransform": { + "/properties/TargetFunctionArn": "$lookup($match(TargetFunctionArn,/(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-[0-9]{1}:)?([0-9]{12}:)?(function:)?([a-zA-Z0-9-_]+)(:((?![0-9]+)[0-9a-zA-Z-_]+))?/)['groups'], 'groups')[6]" + }, + "handlers": { + "create": { + "permissions": [ + "lambda:CreateFunctionUrlConfig" + ] + }, + "read": { + "permissions": [ + "lambda:GetFunctionUrlConfig" + ] + }, + "update": { + "permissions": [ + "lambda:UpdateFunctionUrlConfig" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "TargetFunctionArn": { + "description": "The Amazon Resource Name (ARN) of the function associated with the Function URL.", + "type": "string", + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:((?!\\d+)[0-9a-zA-Z-_]+))?$" + } + }, + "required": [ + "TargetFunctionArn" + ] + }, + "permissions": [ + "lambda:ListFunctionUrlConfigs" + ] + }, + "delete": { + "permissions": [ + "lambda:DeleteFunctionUrlConfig" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lambda/version.json b/internal/aws/cfn/schemas/aws/lambda/version.json new file mode 100644 index 00000000..06255b8a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lambda/version.json @@ -0,0 +1,151 @@ +{ + "typeName": "AWS::Lambda::Version", + "description": "Resource Type definition for AWS::Lambda::Version", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string", + "description": "The ARN of the version." + }, + "Version": { + "type": "string", + "description": "The version number." + }, + "CodeSha256": { + "type": "string", + "description": "Only publish a version if the hash value matches the value that's specified. Use this option to avoid publishing a version if the function code has changed since you last updated it. Updates are not supported for this property." + }, + "Description": { + "type": "string", + "description": "A description for the version to override the description in the function configuration. Updates are not supported for this property.", + "minLength": 0, + "maxLength": 256 + }, + "FunctionName": { + "type": "string", + "description": "The name of the Lambda function.", + "minLength": 1, + "maxLength": 140, + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?$" + }, + "ProvisionedConcurrencyConfig": { + "description": "Specifies a provisioned concurrency configuration for a function's version. Updates are not supported for this property.", + "$ref": "#/definitions/ProvisionedConcurrencyConfiguration" + }, + "RuntimePolicy": { + "description": "Specifies the runtime management configuration of a function. Displays runtimeVersionArn only for Manual.", + "$ref": "#/definitions/RuntimePolicy" + } + }, + "definitions": { + "ProvisionedConcurrencyConfiguration": { + "type": "object", + "description": "A provisioned concurrency configuration for a function's version.", + "additionalProperties": false, + "properties": { + "ProvisionedConcurrentExecutions": { + "type": "integer", + "description": "The amount of provisioned concurrency to allocate for the version." + } + }, + "required": [ + "ProvisionedConcurrentExecutions" + ] + }, + "RuntimePolicy": { + "type": "object", + "description": "Runtime Management Config of a function.", + "additionalProperties": false, + "properties": { + "RuntimeVersionArn": { + "type": "string", + "description": "The ARN of the runtime the function is configured to use. If the runtime update mode is manual, the ARN is returned, otherwise null is returned.", + "minLength": 26, + "maxLength": 2048, + "pattern": "^arn:(aws[a-zA-Z-]*):lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}::runtime:.+$" + }, + "UpdateRuntimeOn": { + "type": "string", + "description": "The runtime update mode." + } + }, + "required": [ + "UpdateRuntimeOn" + ] + } + }, + "required": [ + "FunctionName" + ], + "readOnlyProperties": [ + "/properties/Version", + "/properties/FunctionArn" + ], + "createOnlyProperties": [ + "/properties/FunctionName", + "/properties/Description", + "/properties/CodeSha256", + "/properties/ProvisionedConcurrencyConfig", + "/properties/RuntimePolicy" + ], + "primaryIdentifier": [ + "/properties/FunctionArn" + ], + "propertyTransform": { + "/properties/FunctionName": "$split(FunctionName, \":\")[-1] $OR FunctionName" + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "lambda:PublishVersion", + "lambda:GetFunctionConfiguration", + "lambda:PutProvisionedConcurrencyConfig", + "lambda:GetProvisionedConcurrencyConfig", + "lambda:PutRuntimeManagementConfig", + "lambda:GetRuntimeManagementConfig" + ], + "timeoutInMinutes": 180 + }, + "read": { + "permissions": [ + "lambda:GetFunctionConfiguration", + "lambda:GetProvisionedConcurrencyConfig", + "lambda:GetRuntimeManagementConfig" + ] + }, + "delete": { + "permissions": [ + "lambda:GetFunctionConfiguration", + "lambda:DeleteFunction" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "FunctionName": { + "description": "The name of the Lambda function, version, or alias.", + "type": "string", + "pattern": "^(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?$", + "minLength": 1, + "maxLength": 140 + } + }, + "required": [ + "FunctionName" + ] + }, + "permissions": [ + "lambda:ListVersionsByFunction" + ] + }, + "update": { + "permissions": [] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lex/bot.json b/internal/aws/cfn/schemas/aws/lex/bot.json new file mode 100644 index 00000000..ee17f572 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lex/bot.json @@ -0,0 +1,2339 @@ +{ + "typeName": "AWS::Lex::Bot", + "description": "Amazon Lex conversational bot performing automated tasks such as ordering a pizza, booking a hotel, and so on.", + "sourceUrl": "https://docs.aws.amazon.com/lexv2/latest/dg/build-create.html", + "definitions": { + "BotAliasLocaleSettingsList": { + "description": "A list of bot alias locale settings to add to the bot alias.", + "type": "array", + "uniqueItems": true, + "maxItems": 50, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/BotAliasLocaleSettingsItem" + } + }, + "BotAliasLocaleSettingsItem": { + "description": "A locale setting in alias", + "type": "object", + "properties": { + "LocaleId": { + "description": "A string used to identify the locale", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "BotAliasLocaleSetting": { + "$ref": "#/definitions/BotAliasLocaleSettings" + } + }, + "required": [ + "LocaleId", + "BotAliasLocaleSetting" + ], + "additionalProperties": false + }, + "BotAliasLocaleSettings": { + "description": "You can use this parameter to specify a specific Lambda function to run different functions in different locales.", + "type": "object", + "properties": { + "CodeHookSpecification": { + "$ref": "#/definitions/CodeHookSpecification" + }, + "Enabled": { + "type": "boolean", + "description": "Whether the Lambda code hook is enabled" + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false + }, + "CodeHookSpecification": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "LambdaCodeHook": { + "$ref": "#/definitions/LambdaCodeHook" + } + }, + "required": [ + "LambdaCodeHook" + ], + "additionalProperties": false + }, + "LambdaCodeHook": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "CodeHookInterfaceVersion": { + "description": "The version of the request-response that you want Amazon Lex to use to invoke your Lambda function.", + "type": "string", + "minLength": 1, + "maxLength": 5 + }, + "LambdaArn": { + "description": "The Amazon Resource Name (ARN) of the Lambda function.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "CodeHookInterfaceVersion", + "LambdaArn" + ], + "additionalProperties": false + }, + "ConversationLogSettings": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "AudioLogSettings": { + "$ref": "#/definitions/AudioLogSettings" + }, + "TextLogSettings": { + "$ref": "#/definitions/TextLogSettings" + } + }, + "additionalProperties": false + }, + "AudioLogSettings": { + "description": "List of audio log settings that pertain to the conversation log settings for the bot's TestBotAlias.", + "type": "array", + "maxItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AudioLogSetting" + } + }, + "TextLogSettings": { + "description": "List of text log settings that pertain to the conversation log settings for the bot's TestBotAlias", + "type": "array", + "maxItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TextLogSetting" + } + }, + "AudioLogSetting": { + "description": "Settings for logging audio of conversations between Amazon Lex and a user. You specify whether to log audio and the Amazon S3 bucket where the audio file is stored.", + "type": "object", + "properties": { + "Destination": { + "$ref": "#/definitions/AudioLogDestination" + }, + "Enabled": { + "type": "boolean", + "description": "" + } + }, + "required": [ + "Destination", + "Enabled" + ], + "additionalProperties": false + }, + "TextLogSetting": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "Destination": { + "$ref": "#/definitions/TextLogDestination" + }, + "Enabled": { + "type": "boolean", + "description": "" + } + }, + "required": [ + "Destination", + "Enabled" + ], + "additionalProperties": false + }, + "AudioLogDestination": { + "description": "The location of audio log files collected when conversation logging is enabled for a bot.", + "type": "object", + "properties": { + "S3Bucket": { + "$ref": "#/definitions/S3BucketLogDestination" + } + }, + "required": [ + "S3Bucket" + ], + "additionalProperties": false + }, + "TextLogDestination": { + "description": "Defines the Amazon CloudWatch Logs destination log group for conversation text logs.", + "type": "object", + "properties": { + "CloudWatch": { + "$ref": "#/definitions/CloudWatchLogGroupLogDestination" + } + }, + "required": [ + "CloudWatch" + ], + "additionalProperties": false + }, + "CloudWatchLogGroupLogDestination": { + "type": "object", + "properties": { + "CloudWatchLogGroupArn": { + "description": "A string used to identify the groupArn for the Cloudwatch Log Group", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "LogPrefix": { + "description": "A string containing the value for the Log Prefix", + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + }, + "required": [ + "CloudWatchLogGroupArn", + "LogPrefix" + ], + "additionalProperties": false + }, + "S3BucketLogDestination": { + "description": "Specifies an Amazon S3 bucket for logging audio conversations", + "type": "object", + "properties": { + "S3BucketArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of an Amazon S3 bucket where audio log files are stored.", + "minLength": 1, + "maxLength": 2048, + "pattern": "^arn:[\\w\\-]+:s3:::[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$" + }, + "LogPrefix": { + "type": "string", + "description": "The Amazon S3 key of the deployment package.", + "minLength": 0, + "maxLength": 1024 + }, + "KmsKeyArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS) key for encrypting audio log files stored in an S3 bucket.", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:[\\w\\-]+:kms:[\\w\\-]+:[\\d]{12}:(?:key\\/[\\w\\-]+|alias\\/[a-zA-Z0-9:\\/_\\-]{1,256})$" + } + }, + "required": [ + "LogPrefix", + "S3BucketArn" + ], + "additionalProperties": false + }, + "TestBotAliasSettings": { + "description": "Configuring the test bot alias settings for a given bot", + "type": "object", + "properties": { + "BotAliasLocaleSettings": { + "$ref": "#/definitions/BotAliasLocaleSettingsList" + }, + "ConversationLogSettings": { + "$ref": "#/definitions/ConversationLogSettings" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "SentimentAnalysisSettings": { + "description": "Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances.", + "type": "object", + "properties": { + "DetectSentiment": { + "type": "boolean", + "description": "Enable to call Amazon Comprehend for Sentiment natively within Lex" + } + }, + "required": [ + "DetectSentiment" + ], + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM role that has permission to access the bot.", + "type": "string", + "minLength": 32, + "maxLength": 2048, + "pattern": "^arn:aws[a-zA-Z-]*:iam::[0-9]{12}:role/.*$" + }, + "Id": { + "description": "Unique ID of resource", + "type": "string", + "minLength": 10, + "maxLength": 10, + "pattern": "^[0-9a-zA-Z]+$" + }, + "BotArn": { + "type": "string", + "minLength": 1, + "maxLength": 1011, + "pattern": "^arn:aws[a-zA-Z-]*:lex:[a-z]+-[a-z]+-[0-9]:[0-9]{12}:bot/[0-9a-zA-Z]+$" + }, + "Name": { + "description": "Unique name for a resource.", + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "^([0-9a-zA-Z][_-]?)+$" + }, + "Description": { + "description": "A description of the resource", + "type": "string", + "maxLength": 200 + }, + "DataPrivacy": { + "description": "Provides information on additional privacy protections Amazon Lex should use with the bot's data.", + "type": "object", + "properties": { + "ChildDirected": { + "type": "boolean", + "description": "Specify whether your use of Amazon Lex is related to application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA)." + } + }, + "required": [ + "ChildDirected" + ], + "additionalProperties": false + }, + "IdleSessionTTLInSeconds": { + "description": "The time, in seconds, that Amazon Lex should keep information about a user's conversation with the bot.", + "type": "integer", + "minimum": 60, + "maximum": 86400 + }, + "Utterance": { + "description": "The sample utterance that Amazon Lex uses to build its machine-learning model to recognize intents/slots.", + "type": "string" + }, + "SampleUtterance": { + "description": "A sample utterance that invokes an intent or respond to a slot elicitation prompt.", + "type": "object", + "properties": { + "Utterance": { + "$ref": "#/definitions/Utterance" + } + }, + "required": [ + "Utterance" + ], + "additionalProperties": false + }, + "SampleUtterancesList": { + "description": "An array of sample utterances", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SampleUtterance" + } + }, + "Tag": { + "description": "A key-value pair for tagging Lex resources", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "LocaleId": { + "description": "The identifier of the language and locale that the bot will be used in.", + "type": "string" + }, + "VoiceSettings": { + "description": "Settings for using an Amazon Polly voice to communicate with a user.", + "type": "object", + "properties": { + "VoiceId": { + "type": "string", + "description": "The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user." + }, + "Engine": { + "type": "string", + "description": "Indicates the type of Amazon Polly voice that Amazon Lex should use for voice interaction with the user. For more information, see the engine parameter of the SynthesizeSpeech operation in the Amazon Polly developer guide.", + "enum": [ + "standard", + "neural" + ] + } + }, + "required": [ + "VoiceId" + ], + "additionalProperties": false + }, + "ConfidenceThreshold": { + "description": "The specified confidence threshold for inserting the AMAZON.FallbackIntent and AMAZON.KendraSearchIntent intents.", + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "ParentIntentSignature": { + "description": "A unique identifier for the built-in intent to base this intent on.", + "type": "string" + }, + "DialogCodeHookSetting": { + "description": "Settings that determine the Lambda function that Amazon Lex uses for processing user responses.", + "type": "object", + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false + }, + "FulfillmentStartResponseSpecification": { + "description": "Provides settings for a message that is sent to the user when a fulfillment Lambda function starts running.", + "type": "object", + "properties": { + "MessageGroups": { + "$ref": "#/definitions/MessageGroupsList" + }, + "DelayInSeconds": { + "description": "The delay between when the Lambda fulfillment function starts running and the start message is played. If the Lambda function returns before the delay is over, the start message isn't played.", + "type": "integer", + "minimum": 1, + "maximum": 900 + }, + "AllowInterrupt": { + "description": "Determines whether the user can interrupt the start message while it is playing.", + "type": "boolean" + } + }, + "required": [ + "DelayInSeconds", + "MessageGroups" + ], + "additionalProperties": false + }, + "FulfillmentUpdateResponseSpecification": { + "description": "Provides settings for a message that is sent periodically to the user while a fulfillment Lambda function is running.", + "type": "object", + "properties": { + "MessageGroups": { + "$ref": "#/definitions/MessageGroupsList" + }, + "FrequencyInSeconds": { + "description": "The frequency that a message is sent to the user. When the period ends, Amazon Lex chooses a message from the message groups and plays it to the user. If the fulfillment Lambda returns before the first period ends, an update message is not played to the user.", + "type": "integer", + "minimum": 1, + "maximum": 900 + }, + "AllowInterrupt": { + "description": "Determines whether the user can interrupt an update message while it is playing.", + "type": "boolean" + } + }, + "required": [ + "FrequencyInSeconds", + "MessageGroups" + ], + "additionalProperties": false + }, + "FulfillmentUpdatesSpecification": { + "description": "Provides information for updating the user on the progress of fulfilling an intent.", + "type": "object", + "properties": { + "StartResponse": { + "$ref": "#/definitions/FulfillmentStartResponseSpecification" + }, + "UpdateResponse": { + "$ref": "#/definitions/FulfillmentUpdateResponseSpecification" + }, + "TimeoutInSeconds": { + "description": "The length of time that the fulfillment Lambda function should run before it times out.", + "type": "integer", + "minimum": 1, + "maximum": 900 + }, + "Active": { + "description": "Determines whether fulfillment updates are sent to the user. When this field is true, updates are sent.", + "type": "boolean" + } + }, + "required": [ + "Active" + ], + "additionalProperties": false + }, + "PostFulfillmentStatusSpecification": { + "description": "Provides a setting that determines whether the post-fulfillment response is sent to the user.", + "type": "object", + "properties": { + "SuccessResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "SuccessNextStep": { + "description": "Specifies the next step in the conversation that Amazon Lex invokes when the fulfillment code hook completes successfully.", + "$ref": "#/definitions/DialogState" + }, + "SuccessConditional": { + "description": "A list of conditional branches to evaluate after the fulfillment code hook finishes successfully.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "FailureResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "FailureNextStep": { + "description": "Specifies the next step the bot runs after the fulfillment code hook throws an exception or returns with the State field of the Intent object set to Failed.", + "$ref": "#/definitions/DialogState" + }, + "FailureConditional": { + "description": "A list of conditional branches to evaluate after the fulfillment code hook throws an exception or returns with the State field of the Intent object set to Failed.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "TimeoutResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "TimeoutNextStep": { + "description": "Specifies the next step that the bot runs when the fulfillment code hook times out.", + "$ref": "#/definitions/DialogState" + }, + "TimeoutConditional": { + "description": "A list of conditional branches to evaluate if the fulfillment code hook times out.", + "$ref": "#/definitions/ConditionalSpecification" + } + }, + "required": [], + "additionalProperties": false + }, + "FulfillmentCodeHookSetting": { + "description": "Settings that determine if a Lambda function should be invoked to fulfill a specific intent.", + "type": "object", + "properties": { + "FulfillmentUpdatesSpecification": { + "$ref": "#/definitions/FulfillmentUpdatesSpecification" + }, + "PostFulfillmentStatusSpecification": { + "$ref": "#/definitions/PostFulfillmentStatusSpecification" + }, + "Enabled": { + "type": "boolean" + }, + "IsActive": { + "description": "Determines whether the fulfillment code hook is used. When active is false, the code hook doesn't run.", + "type": "boolean" + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false + }, + "Button": { + "description": "A button to use on a response card used to gather slot values from a user.", + "type": "object", + "properties": { + "Text": { + "description": "The text that appears on the button.", + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "Value": { + "description": "The value returned to Amazon Lex when the user chooses this button.", + "type": "string", + "minLength": 1, + "maxLength": 50 + } + }, + "required": [ + "Text", + "Value" + ], + "additionalProperties": false + }, + "AttachmentTitle": { + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "AttachmentUrl": { + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "ImageResponseCard": { + "description": "A message that defines a response card that the client application can show to the user.", + "type": "object", + "properties": { + "Title": { + "description": "The title to display on the response card.", + "$ref": "#/definitions/AttachmentTitle" + }, + "Subtitle": { + "description": "The subtitle to display on the response card.", + "$ref": "#/definitions/AttachmentTitle" + }, + "ImageUrl": { + "description": "The URL of an image to display on the response card.", + "$ref": "#/definitions/AttachmentUrl" + }, + "Buttons": { + "description": "A list of buttons that should be displayed on the response card.", + "type": "array", + "maxItems": 5, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Button" + } + } + }, + "required": [ + "Title" + ], + "additionalProperties": false + }, + "PlainTextMessage": { + "description": "A message in plain text format.", + "type": "object", + "properties": { + "Value": { + "description": "The message to send to the user.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "CustomPayload": { + "description": "A message in a custom format defined by the client application.", + "type": "object", + "properties": { + "Value": { + "description": "The string that is sent to your application.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "SSMLMessage": { + "description": "A message in Speech Synthesis Markup Language (SSML).", + "type": "object", + "properties": { + "Value": { + "description": "The SSML text that defines the prompt.", + "type": "string", + "minLength": 1, + "maxLength": 1000 + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "Message": { + "description": "The primary message that Amazon Lex should send to the user.", + "type": "object", + "properties": { + "PlainTextMessage": { + "$ref": "#/definitions/PlainTextMessage" + }, + "CustomPayload": { + "$ref": "#/definitions/CustomPayload" + }, + "SSMLMessage": { + "$ref": "#/definitions/SSMLMessage" + }, + "ImageResponseCard": { + "$ref": "#/definitions/ImageResponseCard" + } + }, + "required": [], + "additionalProperties": false + }, + "MessageGroup": { + "description": "One or more messages that Amazon Lex can send to the user.", + "type": "object", + "properties": { + "Message": { + "$ref": "#/definitions/Message" + }, + "Variations": { + "description": "Message variations to send to the user.", + "type": "array", + "maxItems": 2, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Message" + } + } + }, + "required": [ + "Message" + ], + "additionalProperties": false + }, + "MessageGroupsList": { + "description": "One to 5 message groups that contain update messages. Amazon Lex chooses one of the messages to play to the user.", + "type": "array", + "minItems": 1, + "maxItems": 5, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MessageGroup" + } + }, + "PromptMaxRetries": { + "description": "The maximum number of times the bot tries to elicit a response from the user using this prompt.", + "type": "integer", + "minimum": 0, + "maximum": 5 + }, + "MessageSelectionStrategy": { + "description": "Indicates how a message is selected from a message group among retries.", + "type": "string", + "enum": [ + "Random", + "Ordered" + ] + }, + "AllowedInputTypes": { + "description": "Specifies the allowed input types.", + "type": "object", + "properties": { + "AllowAudioInput": { + "description": "Indicates whether audio input is allowed.", + "type": "boolean" + }, + "AllowDTMFInput": { + "description": "Indicates whether DTMF input is allowed.", + "type": "boolean" + } + }, + "required": [ + "AllowAudioInput", + "AllowDTMFInput" + ], + "additionalProperties": false + }, + "DTMFSpecification": { + "description": "Specifies the settings on DTMF input.", + "type": "object", + "properties": { + "DeletionCharacter": { + "description": "The DTMF character that clears the accumulated DTMF digits and immediately ends the input.", + "type": "string", + "pattern": "^[A-D0-9#*]{1}$" + }, + "EndCharacter": { + "description": "The DTMF character that immediately ends input. If the user does not press this character, the input ends after the end timeout.", + "type": "string", + "pattern": "^[A-D0-9#*]{1}$" + }, + "EndTimeoutMs": { + "description": "How long the bot should wait after the last DTMF character input before assuming that the input has concluded.", + "type": "integer", + "minimum": 1 + }, + "MaxLength": { + "description": "The maximum number of DTMF digits allowed in an utterance.", + "type": "integer", + "minimum": 1, + "maximum": 1024 + } + }, + "required": [ + "DeletionCharacter", + "EndCharacter", + "EndTimeoutMs", + "MaxLength" + ], + "additionalProperties": false + }, + "AudioSpecification": { + "description": "Specifies the audio input specifications.", + "type": "object", + "properties": { + "EndTimeoutMs": { + "description": "Time for which a bot waits after the customer stops speaking to assume the utterance is finished.", + "type": "integer", + "minimum": 1 + }, + "MaxLengthMs": { + "description": "Time for how long Amazon Lex waits before speech input is truncated and the speech is returned to application.", + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "EndTimeoutMs", + "MaxLengthMs" + ], + "additionalProperties": false + }, + "AudioAndDTMFInputSpecification": { + "description": "Specifies the audio and DTMF input specification.", + "type": "object", + "properties": { + "StartTimeoutMs": { + "description": "Time for which a bot waits before assuming that the customer isn't going to speak or press a key. This timeout is shared between Audio and DTMF inputs.", + "type": "integer", + "minimum": 1 + }, + "DTMFSpecification": { + "$ref": "#/definitions/DTMFSpecification" + }, + "AudioSpecification": { + "$ref": "#/definitions/AudioSpecification" + } + }, + "required": [ + "StartTimeoutMs" + ], + "additionalProperties": false + }, + "TextInputSpecification": { + "description": "Specifies the text input specifications.", + "type": "object", + "properties": { + "StartTimeoutMs": { + "description": "Time for which a bot waits before re-prompting a customer for text input.", + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "StartTimeoutMs" + ], + "additionalProperties": false + }, + "PromptAttemptSpecification": { + "description": "Specifies the settings on a prompt attempt.", + "type": "object", + "properties": { + "AllowedInputTypes": { + "$ref": "#/definitions/AllowedInputTypes" + }, + "AllowInterrupt": { + "description": "Indicates whether the user can interrupt a speech prompt attempt from the bot.", + "type": "boolean" + }, + "AudioAndDTMFInputSpecification": { + "$ref": "#/definitions/AudioAndDTMFInputSpecification" + }, + "TextInputSpecification": { + "$ref": "#/definitions/TextInputSpecification" + } + }, + "required": [ + "AllowedInputTypes" + ], + "additionalProperties": false + }, + "PromptSpecification": { + "description": "Prompts the user to confirm the intent.", + "type": "object", + "properties": { + "MessageGroupsList": { + "$ref": "#/definitions/MessageGroupsList" + }, + "MaxRetries": { + "$ref": "#/definitions/PromptMaxRetries" + }, + "AllowInterrupt": { + "description": "Indicates whether the user can interrupt a speech prompt from the bot.", + "type": "boolean" + }, + "MessageSelectionStrategy": { + "$ref": "#/definitions/MessageSelectionStrategy" + }, + "PromptAttemptsSpecification": { + "description": "Specifies the advanced settings on each attempt of the prompt.", + "type": "object", + "patternProperties": { + "^(Initial|Retry1|Retry2|Retry3|Retry4|Retry5)$": { + "$ref": "#/definitions/PromptAttemptSpecification" + } + }, + "additionalProperties": false + } + }, + "required": [ + "MessageGroupsList", + "MaxRetries" + ], + "additionalProperties": false + }, + "ResponseSpecification": { + "description": "A list of message groups that Amazon Lex uses to respond the user input.", + "type": "object", + "properties": { + "MessageGroupsList": { + "$ref": "#/definitions/MessageGroupsList" + }, + "AllowInterrupt": { + "description": "Indicates whether the user can interrupt a speech prompt from the bot.", + "type": "boolean" + } + }, + "required": [ + "MessageGroupsList" + ], + "additionalProperties": false + }, + "StillWaitingResponseFrequency": { + "description": "How often a message should be sent to the user in seconds.", + "type": "integer", + "minimum": 1, + "maximum": 300 + }, + "StillWaitingResponseTimeout": { + "description": "If Amazon Lex waits longer than this length of time in seconds for a response, it will stop sending messages.", + "type": "integer", + "minimum": 1, + "maximum": 900 + }, + "StillWaitingResponseSpecification": { + "description": "StillWaitingResponseSpecification.", + "type": "object", + "properties": { + "MessageGroupsList": { + "$ref": "#/definitions/MessageGroupsList" + }, + "FrequencyInSeconds": { + "$ref": "#/definitions/StillWaitingResponseFrequency" + }, + "TimeoutInSeconds": { + "$ref": "#/definitions/StillWaitingResponseTimeout" + }, + "AllowInterrupt": { + "description": "Indicates whether the user can interrupt a speech prompt from the bot.", + "type": "boolean" + } + }, + "required": [ + "MessageGroupsList", + "FrequencyInSeconds", + "TimeoutInSeconds" + ], + "additionalProperties": false + }, + "IntentConfirmationSetting": { + "description": "Provides a prompt for making sure that the user is ready for the intent to be fulfilled.", + "type": "object", + "properties": { + "PromptSpecification": { + "description": "Prompts the user to confirm the intent. This question should have a yes or no answer.", + "$ref": "#/definitions/PromptSpecification" + }, + "IsActive": { + "description": "Specifies whether the intent's confirmation is sent to the user. When this field is false, confirmation and declination responses aren't sent. If the active field isn't specified, the default is true.", + "type": "boolean" + }, + "ConfirmationResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "ConfirmationNextStep": { + "description": "Specifies the next step that the bot executes when the customer confirms the intent.", + "$ref": "#/definitions/DialogState" + }, + "ConfirmationConditional": { + "description": "A list of conditional branches to evaluate after the intent is closed.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "DeclinationResponse": { + "description": "When the user answers \"no\" to the question defined in promptSpecification, Amazon Lex responds with this response to acknowledge that the intent was canceled.", + "$ref": "#/definitions/ResponseSpecification" + }, + "DeclinationNextStep": { + "description": "Specifies the next step that the bot executes when the customer declines the intent.", + "$ref": "#/definitions/DialogState" + }, + "DeclinationConditional": { + "description": "A list of conditional branches to evaluate after the intent is declined.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "FailureResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "FailureNextStep": { + "description": "The next step to take in the conversation if the confirmation step fails.", + "$ref": "#/definitions/DialogState" + }, + "FailureConditional": { + "description": "Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "CodeHook": { + "description": "The DialogCodeHookInvocationSetting object associated with intent's confirmation step. The dialog code hook is triggered based on these invocation settings when the confirmation next step or declination next step or failure next step is InvokeDialogCodeHook.", + "$ref": "#/definitions/DialogCodeHookInvocationSetting" + }, + "ElicitationCodeHook": { + "description": "The DialogCodeHookInvocationSetting used when the code hook is invoked during confirmation prompt retries.", + "$ref": "#/definitions/ElicitationCodeHookInvocationSetting" + } + }, + "required": [ + "PromptSpecification" + ], + "additionalProperties": false + }, + "IntentClosingSetting": { + "description": "Provides a statement the Amazon Lex conveys to the user when the intent is successfully fulfilled.", + "type": "object", + "properties": { + "ClosingResponse": { + "description": "The response that Amazon Lex sends to the user when the intent is complete.", + "$ref": "#/definitions/ResponseSpecification" + }, + "IsActive": { + "description": "Specifies whether an intent's closing response is used. When this field is false, the closing response isn't sent to the user. If the active field isn't specified, the default is true.", + "type": "boolean" + }, + "Conditional": { + "description": "A list of conditional branches associated with the intent's closing response. These branches are executed when the nextStep attribute is set to EvalutateConditional.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "NextStep": { + "description": "Specifies the next step that the bot executes after playing the intent's closing response.", + "$ref": "#/definitions/DialogState" + } + }, + "additionalProperties": false + }, + "InputContext": { + "description": "InputContext specified for the intent.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the context.", + "$ref": "#/definitions/Name" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "InputContextsList": { + "description": "The list of input contexts specified for the intent.", + "type": "array", + "maxItems": 5, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/InputContext" + } + }, + "ContextTimeToLiveInSeconds": { + "description": "The amount of time, in seconds, that the output context should remain active.", + "type": "integer", + "minimum": 5, + "maximum": 86400 + }, + "ContextTurnsToLive": { + "description": "The number of conversation turns that the output context should remain active.", + "type": "integer", + "minimum": 1, + "maximum": 20 + }, + "OutputContext": { + "description": "A session context that is activated when an intent is fulfilled.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/Name" + }, + "TimeToLiveInSeconds": { + "$ref": "#/definitions/ContextTimeToLiveInSeconds" + }, + "TurnsToLive": { + "$ref": "#/definitions/ContextTurnsToLive" + } + }, + "required": [ + "Name", + "TimeToLiveInSeconds", + "TurnsToLive" + ], + "additionalProperties": false + }, + "OutputContextsList": { + "description": "A list of contexts that the intent activates when it is fulfilled.", + "type": "array", + "maxItems": 10, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/OutputContext" + } + }, + "KendraIndexArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon Kendra index that you want the AMAZON.KendraSearchIntent intent to search.", + "type": "string", + "minLength": 32, + "maxLength": 2048, + "pattern": "^arn:aws[a-zA-Z-]*:kendra:[a-z]+-[a-z]+-[0-9]:[0-9]{12}:index/[a-zA-Z0-9][a-zA-Z0-9_-]*$" + }, + "QueryFilterString": { + "description": "A query filter that Amazon Lex sends to Amazon Kendra to filter the response from a query.", + "type": "string", + "minLength": 1, + "maxLength": 5000 + }, + "KendraConfiguration": { + "description": "Configuration for searching a Amazon Kendra index specified for the intent.", + "type": "object", + "properties": { + "KendraIndex": { + "$ref": "#/definitions/KendraIndexArn" + }, + "QueryFilterStringEnabled": { + "description": "Determines whether the AMAZON.KendraSearchIntent intent uses a custom query string to query the Amazon Kendra index.", + "type": "boolean" + }, + "QueryFilterString": { + "$ref": "#/definitions/QueryFilterString" + } + }, + "required": [ + "KendraIndex" + ], + "additionalProperties": false + }, + "PriorityValue": { + "description": "The priority that a slot should be elicited.", + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "SlotPriority": { + "description": "The priority that Amazon Lex should use when eliciting slot values from a user.", + "type": "object", + "properties": { + "Priority": { + "$ref": "#/definitions/PriorityValue" + }, + "SlotName": { + "description": "The name of the slot.", + "$ref": "#/definitions/Name" + } + }, + "required": [ + "SlotName", + "Priority" + ], + "additionalProperties": false + }, + "SlotPrioritiesList": { + "description": "List for slot priorities", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SlotPriority" + } + }, + "Intent": { + "description": "Represents an action that the user wants to perform.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the intent.", + "$ref": "#/definitions/Name" + }, + "Description": { + "description": "Description of thr intent.", + "$ref": "#/definitions/Description" + }, + "ParentIntentSignature": { + "$ref": "#/definitions/ParentIntentSignature" + }, + "SampleUtterances": { + "description": "A sample utterance that invokes an intent or respond to a slot elicitation prompt.", + "$ref": "#/definitions/SampleUtterancesList" + }, + "DialogCodeHook": { + "$ref": "#/definitions/DialogCodeHookSetting" + }, + "FulfillmentCodeHook": { + "$ref": "#/definitions/FulfillmentCodeHookSetting" + }, + "IntentConfirmationSetting": { + "$ref": "#/definitions/IntentConfirmationSetting" + }, + "IntentClosingSetting": { + "$ref": "#/definitions/IntentClosingSetting" + }, + "InitialResponseSetting": { + "description": "Configuration setting for a response sent to the user before Amazon Lex starts eliciting slots.", + "$ref": "#/definitions/InitialResponseSetting" + }, + "InputContexts": { + "$ref": "#/definitions/InputContextsList" + }, + "OutputContexts": { + "$ref": "#/definitions/OutputContextsList" + }, + "KendraConfiguration": { + "$ref": "#/definitions/KendraConfiguration" + }, + "SlotPriorities": { + "$ref": "#/definitions/SlotPrioritiesList" + }, + "Slots": { + "description": "List of slots", + "type": "array", + "maxItems": 100, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Slot" + } + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "ParentSlotTypeSignature": { + "description": "The built-in slot type used as a parent of this slot type.", + "type": "string" + }, + "SlotTypeName": { + "description": "The slot type name that is used in the slot. Allows for custom and built-in slot type names", + "type": "string" + }, + "SampleValue": { + "description": "Defines one of the values for a slot type.", + "type": "object", + "properties": { + "Value": { + "description": "The value that can be used for a slot type.", + "type": "string", + "minLength": 1, + "maxLength": 140 + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "SynonymList": { + "description": "Additional values related to the slot type entry.", + "type": "array", + "maxItems": 10000, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SampleValue" + } + }, + "SlotTypeValue": { + "description": "Value that the slot type can take.", + "type": "object", + "properties": { + "SampleValue": { + "$ref": "#/definitions/SampleValue" + }, + "Synonyms": { + "$ref": "#/definitions/SynonymList" + } + }, + "required": [ + "SampleValue" + ], + "additionalProperties": false + }, + "SlotTypeValues": { + "description": "A List of slot type values", + "type": "array", + "maxItems": 10000, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SlotTypeValue" + } + }, + "SlotValueResolutionStrategy": { + "type": "string", + "enum": [ + "ORIGINAL_VALUE", + "TOP_RESOLUTION" + ] + }, + "SlotValueRegexFilter": { + "description": "A regular expression used to validate the value of a slot.", + "type": "object", + "properties": { + "Pattern": { + "description": "Regex pattern", + "type": "string", + "minLength": 1, + "maxLength": 300 + } + }, + "required": [ + "Pattern" + ], + "additionalProperties": false + }, + "AudioRecognitionStrategy": { + "description": "Enables using slot values as a custom vocabulary when recognizing user utterances.", + "type": "string", + "enum": [ + "UseSlotValuesAsCustomVocabulary" + ] + }, + "AdvancedRecognitionSetting": { + "description": "Provides settings that enable advanced recognition settings for slot values.", + "type": "object", + "properties": { + "AudioRecognitionStrategy": { + "$ref": "#/definitions/AudioRecognitionStrategy" + } + }, + "additionalProperties": false + }, + "SlotValueSelectionSetting": { + "description": "Contains settings used by Amazon Lex to select a slot value.", + "type": "object", + "properties": { + "ResolutionStrategy": { + "$ref": "#/definitions/SlotValueResolutionStrategy" + }, + "RegexFilter": { + "$ref": "#/definitions/SlotValueRegexFilter" + }, + "AdvancedRecognitionSetting": { + "$ref": "#/definitions/AdvancedRecognitionSetting" + } + }, + "required": [ + "ResolutionStrategy" + ], + "additionalProperties": false + }, + "S3BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$" + }, + "S3ObjectKey": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "[\\.\\-\\!\\*\\_\\'\\(\\)a-zA-Z0-9][\\.\\-\\!\\*\\_\\'\\(\\)\\/a-zA-Z0-9]*$" + }, + "GrammarSlotTypeSource": { + "description": "Describes the Amazon S3 bucket name and location for the grammar that is the source for the slot type.", + "type": "object", + "properties": { + "S3BucketName": { + "description": "The name of the S3 bucket that contains the grammar source.", + "$ref": "#/definitions/S3BucketName" + }, + "S3ObjectKey": { + "description": "The path to the grammar in the S3 bucket.", + "$ref": "#/definitions/S3ObjectKey" + }, + "KmsKeyArn": { + "description": "The Amazon KMS key required to decrypt the contents of the grammar, if any.", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:[\\w\\-]+:kms:[\\w\\-]+:[\\d]{12}:(?:key\\/[\\w\\-]+|alias\\/[a-zA-Z0-9:\\/_\\-]{1,256})$" + } + }, + "required": [ + "S3BucketName", + "S3ObjectKey" + ], + "additionalProperties": false + }, + "GrammarSlotTypeSetting": { + "description": "Settings required for a slot type based on a grammar that you provide.", + "type": "object", + "properties": { + "Source": { + "$ref": "#/definitions/GrammarSlotTypeSource" + } + }, + "additionalProperties": false + }, + "ExternalSourceSetting": { + "description": "Provides information about the external source of the slot type's definition.", + "type": "object", + "properties": { + "GrammarSlotTypeSetting": { + "$ref": "#/definitions/GrammarSlotTypeSetting" + } + }, + "additionalProperties": false + }, + "SlotType": { + "description": "A custom, extended built-in or a grammar slot type.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/Name" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "ParentSlotTypeSignature": { + "$ref": "#/definitions/ParentSlotTypeSignature" + }, + "SlotTypeValues": { + "$ref": "#/definitions/SlotTypeValues" + }, + "ValueSelectionSetting": { + "$ref": "#/definitions/SlotValueSelectionSetting" + }, + "ExternalSourceSetting": { + "$ref": "#/definitions/ExternalSourceSetting" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "CustomVocabularyItem": { + "description": "A custom vocabulary item that contains the phrase to recognize and a weight to give the boost.", + "type": "object", + "properties": { + "Phrase": { + "description": "Phrase that should be recognized.", + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "Weight": { + "description": "The degree to which the phrase recognition is boosted. The weight 0 means that no boosting will be applied and the entry will only be used for performing replacements using the displayAs field.", + "type": "integer", + "minimum": 0, + "maximum": 3 + }, + "DisplayAs": { + "description": "Defines how you want your phrase to look in your transcription output.", + "type": "string", + "minLength": 1, + "maxLength": 100 + } + }, + "required": [ + "Phrase" + ], + "additionalProperties": false + }, + "CustomVocabularyItems": { + "type": "array", + "maxItems": 500, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CustomVocabularyItem" + } + }, + "CustomVocabulary": { + "description": "A custom vocabulary is a list of specific phrases that you want Amazon Lex V2 to recognize in the audio input.", + "type": "object", + "properties": { + "CustomVocabularyItems": { + "$ref": "#/definitions/CustomVocabularyItems" + } + }, + "required": [ + "CustomVocabularyItems" + ], + "additionalProperties": false + }, + "SlotDefaultValue": { + "description": "The default value to use when a user doesn't provide a value for a slot.", + "type": "object", + "properties": { + "DefaultValue": { + "description": "The default value to use when a user doesn't provide a value for a slot.", + "type": "string", + "minLength": 1, + "maxLength": 202 + } + }, + "required": [ + "DefaultValue" + ], + "additionalProperties": false + }, + "SlotDefaultValueSpecification": { + "description": "A list of values that Amazon Lex should use as the default value for a slot.", + "type": "object", + "properties": { + "DefaultValueList": { + "description": "A list of slot default values", + "type": "array", + "maxItems": 10, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SlotDefaultValue" + } + } + }, + "required": [ + "DefaultValueList" + ], + "additionalProperties": false + }, + "SlotConstraint": { + "type": "string", + "enum": [ + "Required", + "Optional" + ] + }, + "WaitAndContinueSpecification": { + "description": "The prompts that Amazon Lex uses while a bot is waiting for customer input.", + "type": "object", + "properties": { + "WaitingResponse": { + "description": "The response that Amazon Lex sends to indicate that the bot is waiting for the conversation to continue.", + "$ref": "#/definitions/ResponseSpecification" + }, + "ContinueResponse": { + "description": "The response that Amazon Lex sends to indicate that the bot is ready to continue the conversation.", + "$ref": "#/definitions/ResponseSpecification" + }, + "StillWaitingResponse": { + "description": "The response that Amazon Lex sends periodically to the user to indicate that the bot is still waiting for input from the user.", + "$ref": "#/definitions/StillWaitingResponseSpecification" + }, + "IsActive": { + "description": "Specifies whether the bot will wait for a user to respond.", + "type": "boolean" + } + }, + "required": [ + "WaitingResponse", + "ContinueResponse" + ], + "additionalProperties": false + }, + "SlotValueElicitationSetting": { + "description": "Settings that you can use for eliciting a slot value.", + "type": "object", + "properties": { + "DefaultValueSpecification": { + "description": "A list of default values for a slot.", + "$ref": "#/definitions/SlotDefaultValueSpecification" + }, + "SlotConstraint": { + "description": "Specifies whether the slot is required or optional.", + "$ref": "#/definitions/SlotConstraint" + }, + "PromptSpecification": { + "description": "The prompt that Amazon Lex uses to elicit the slot value from the user.", + "$ref": "#/definitions/PromptSpecification" + }, + "SampleUtterances": { + "description": "If you know a specific pattern that users might respond to an Amazon Lex request for a slot value, you can provide those utterances to improve accuracy.", + "$ref": "#/definitions/SampleUtterancesList" + }, + "WaitAndContinueSpecification": { + "description": "Specifies the prompts that Amazon Lex uses while a bot is waiting for customer input.", + "$ref": "#/definitions/WaitAndContinueSpecification" + }, + "SlotCaptureSetting": { + "description": "Specifies the next stage in the conversation after capturing the slot.", + "$ref": "#/definitions/SlotCaptureSetting" + } + }, + "required": [ + "SlotConstraint" + ], + "additionalProperties": false + }, + "ObfuscationSetting": { + "description": "Determines whether Amazon Lex obscures slot values in conversation logs.", + "type": "object", + "properties": { + "ObfuscationSettingType": { + "description": "Value that determines whether Amazon Lex obscures slot values in conversation logs. The default is to obscure the values.", + "type": "string", + "enum": [ + "None", + "DefaultObfuscation" + ] + } + }, + "required": [ + "ObfuscationSettingType" + ], + "additionalProperties": false + }, + "MultipleValuesSetting": { + "description": "Indicates whether a slot can return multiple values.", + "type": "object", + "properties": { + "AllowMultipleValues": { + "type": "boolean" + } + }, + "required": [], + "additionalProperties": false + }, + "Slot": { + "description": "A slot is a variable needed to fulfill an intent, where an intent can require zero or more slots.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/Name" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "SlotTypeName": { + "$ref": "#/definitions/SlotTypeName" + }, + "ValueElicitationSetting": { + "$ref": "#/definitions/SlotValueElicitationSetting" + }, + "ObfuscationSetting": { + "$ref": "#/definitions/ObfuscationSetting" + }, + "MultipleValuesSetting": { + "$ref": "#/definitions/MultipleValuesSetting" + } + }, + "required": [ + "Name", + "SlotTypeName", + "ValueElicitationSetting" + ], + "additionalProperties": false + }, + "BotLocale": { + "description": "A locale in the bot, which contains the intents and slot types that the bot uses in conversations with users in the specified language and locale.", + "type": "object", + "properties": { + "LocaleId": { + "$ref": "#/definitions/LocaleId" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "VoiceSettings": { + "$ref": "#/definitions/VoiceSettings" + }, + "NluConfidenceThreshold": { + "$ref": "#/definitions/ConfidenceThreshold" + }, + "Intents": { + "description": "List of intents", + "type": "array", + "maxItems": 1000, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Intent" + } + }, + "SlotTypes": { + "description": "List of SlotTypes", + "type": "array", + "maxItems": 250, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SlotType" + } + }, + "CustomVocabulary": { + "$ref": "#/definitions/CustomVocabulary" + } + }, + "required": [ + "LocaleId", + "NluConfidenceThreshold" + ], + "additionalProperties": false + }, + "S3Location": { + "description": "S3 location of bot definitions zip file, if it's not defined inline in CloudFormation.", + "type": "object", + "properties": { + "S3Bucket": { + "description": "An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account.", + "$ref": "#/definitions/S3BucketName" + }, + "S3ObjectKey": { + "description": "The Amazon S3 key of the deployment package.", + "$ref": "#/definitions/S3ObjectKey" + }, + "S3ObjectVersion": { + "type": "string", + "description": "For versioned objects, the version of the deployment package object to use. If not specified, the current object version will be used.", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "S3Bucket", + "S3ObjectKey" + ], + "additionalProperties": false + }, + "Condition": { + "description": "Provides an expression that evaluates to true or false.", + "type": "object", + "properties": { + "ExpressionString": { + "description": "The expression string that is evaluated.", + "$ref": "#/definitions/ConditionExpression" + } + }, + "required": [ + "ExpressionString" + ], + "additionalProperties": false + }, + "Conditional": { + "description": "Contains conditional branches to fork the conversation flow.", + "type": "object", + "properties": { + "IsActive": { + "type": "boolean" + }, + "ConditionalBranches": { + "$ref": "#/definitions/ConditionalBranches" + } + }, + "required": [ + "IsActive", + "ConditionalBranches" + ], + "additionalProperties": false + }, + "ConditionalSpecification": { + "description": "Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition.", + "type": "object", + "properties": { + "IsActive": { + "description": "Determines whether a conditional branch is active. When active is false, the conditions are not evaluated.", + "type": "boolean" + }, + "ConditionalBranches": { + "description": "A list of conditional branches. A conditional branch is made up of a condition, a response and a next step. The response and next step are executed when the condition is true.", + "$ref": "#/definitions/ConditionalBranches" + }, + "DefaultBranch": { + "description": "The conditional branch that should be followed when the conditions for other branches are not satisfied. A conditional branch is made up of a condition, a response and a next step.", + "$ref": "#/definitions/DefaultConditionalBranch" + } + }, + "required": [ + "IsActive", + "ConditionalBranches", + "DefaultBranch" + ], + "additionalProperties": false + }, + "DefaultConditionalBranch": { + "description": "A set of actions that Amazon Lex should run if none of the other conditions are met.", + "type": "object", + "properties": { + "NextStep": { + "description": "The next step in the conversation.", + "$ref": "#/definitions/DialogState" + }, + "Response": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + } + }, + "additionalProperties": false + }, + "ConditionalBranch": { + "description": "A set of actions that Amazon Lex should run if the condition is matched.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the branch.", + "$ref": "#/definitions/Name" + }, + "Condition": { + "description": "Contains the expression to evaluate. If the condition is true, the branch's actions are taken.", + "$ref": "#/definitions/Condition" + }, + "NextStep": { + "description": "The next step in the conversation.", + "$ref": "#/definitions/DialogState" + }, + "Response": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + } + }, + "required": [ + "Name", + "Condition", + "NextStep" + ], + "additionalProperties": false + }, + "ConditionalBranches": { + "description": "A list of 1 to 4 conditional branches to fork the conversation flow.", + "type": "array", + "minItems": 1, + "maxItems": 4, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ConditionalBranch" + } + }, + "InitialResponseSetting": { + "description": "Configuration setting for a response sent to the user before Amazon Lex starts eliciting slots.", + "type": "object", + "properties": { + "InitialResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "NextStep": { + "description": "The next step in the conversation.", + "$ref": "#/definitions/DialogState" + }, + "Conditional": { + "description": "Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "CodeHook": { + "description": "Settings that specify the dialog code hook that is called by Amazon Lex at a step of the conversation.", + "$ref": "#/definitions/DialogCodeHookInvocationSetting" + } + }, + "additionalProperties": false + }, + "ConditionExpression": { + "description": "Expression that is evaluated to true or false at runtime.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "DialogCodeHookInvocationSetting": { + "description": "Settings that specify the dialog code hook that is called by Amazon Lex at a step of the conversation.", + "type": "object", + "properties": { + "EnableCodeHookInvocation": { + "description": "Indicates whether a Lambda function should be invoked for the dialog.", + "type": "boolean" + }, + "IsActive": { + "description": "Determines whether a dialog code hook is used when the intent is activated.", + "type": "boolean" + }, + "InvocationLabel": { + "description": "A label that indicates the dialog step from which the dialog code hook is happening.", + "$ref": "#/definitions/Name" + }, + "PostCodeHookSpecification": { + "description": "Contains the responses and actions that Amazon Lex takes after the Lambda function is complete.", + "$ref": "#/definitions/PostDialogCodeHookInvocationSpecification" + } + }, + "required": [ + "IsActive", + "EnableCodeHookInvocation", + "PostCodeHookSpecification" + ], + "additionalProperties": false + }, + "ElicitationCodeHookInvocationSetting": { + "description": "Settings that specify the dialog code hook that is called by Amazon Lex between eliciting slot values.", + "type": "object", + "properties": { + "EnableCodeHookInvocation": { + "description": "Indicates whether a Lambda function should be invoked for the dialog.", + "type": "boolean" + }, + "InvocationLabel": { + "description": "A label that indicates the dialog step from which the dialog code hook is happening.", + "$ref": "#/definitions/Name" + } + }, + "required": [ + "EnableCodeHookInvocation" + ], + "additionalProperties": false + }, + "PostDialogCodeHookInvocationSpecification": { + "description": "Specifies next steps to run after the dialog code hook finishes.", + "type": "object", + "properties": { + "SuccessResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "SuccessNextStep": { + "description": "Specifics the next step the bot runs after the dialog code hook finishes successfully.", + "$ref": "#/definitions/DialogState" + }, + "SuccessConditional": { + "description": "A list of conditional branches to evaluate after the dialog code hook finishes successfully.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "FailureResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "FailureNextStep": { + "description": "Specifies the next step the bot runs after the dialog code hook throws an exception or returns with the State field of the Intent object set to Failed.", + "$ref": "#/definitions/DialogState" + }, + "FailureConditional": { + "description": "A list of conditional branches to evaluate after the dialog code hook throws an exception or returns with the State field of the Intent object set to Failed.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "TimeoutResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "TimeoutNextStep": { + "description": "Specifies the next step that the bot runs when the code hook times out.", + "$ref": "#/definitions/DialogState" + }, + "TimeoutConditional": { + "description": "A list of conditional branches to evaluate if the code hook times out.", + "$ref": "#/definitions/ConditionalSpecification" + } + }, + "additionalProperties": false + }, + "DialogState": { + "description": "The current state of the conversation with the user.", + "type": "object", + "properties": { + "DialogAction": { + "description": "Defines the action that the bot executes at runtime when the conversation reaches this step.", + "$ref": "#/definitions/DialogAction" + }, + "Intent": { + "description": "Override settings to configure the intent state.", + "$ref": "#/definitions/IntentOverride" + }, + "SessionAttributes": { + "description": "List of session attributes to be applied when the conversation reaches this step.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SessionAttribute" + } + } + }, + "additionalProperties": false + }, + "DialogAction": { + "description": "Defines the action that the bot executes at runtime when the conversation reaches this step.", + "type": "object", + "properties": { + "Type": { + "description": "The action that the bot should execute.", + "$ref": "#/definitions/DialogActionType" + }, + "SlotToElicit": { + "description": "If the dialog action is ElicitSlot, defines the slot to elicit from the user.", + "$ref": "#/definitions/Name" + }, + "SuppressNextMessage": { + "description": "When true the next message for the intent is not used.", + "type": "boolean" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "DialogActionType": { + "description": "The possible values of actions that the conversation can take.", + "type": "string", + "enum": [ + "CloseIntent", + "ConfirmIntent", + "ElicitIntent", + "ElicitSlot", + "StartIntent", + "FulfillIntent", + "EndConversation", + "EvaluateConditional", + "InvokeDialogCodeHook" + ] + }, + "SessionAttribute": { + "description": "Key/value pair representing session-specific context information. It contains application information passed between Amazon Lex and a client application.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "IntentOverride": { + "description": "Override settings to configure the intent state.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the intent. Only required when you're switching intents.", + "$ref": "#/definitions/Name" + }, + "Slots": { + "description": "A map of all of the slot value overrides for the intent.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SlotValueOverrideMap" + } + } + }, + "additionalProperties": false + }, + "SlotValueOverrideMap": { + "description": "A map of slot names and their overridden values.", + "type": "object", + "properties": { + "SlotName": { + "$ref": "#/definitions/Name" + }, + "SlotValueOverride": { + "$ref": "#/definitions/SlotValueOverride" + } + }, + "additionalProperties": false + }, + "SlotValueOverride": { + "description": "The slot values that Amazon Lex uses when it sets slot values in a dialog step.", + "type": "object", + "properties": { + "Shape": { + "description": "When the shape value is List, it indicates that the values field contains a list of slot values. When the value is Scalar, it indicates that the value field contains a single value.", + "$ref": "#/definitions/SlotShape" + }, + "Value": { + "description": "The current value of the slot.", + "$ref": "#/definitions/SlotValue" + }, + "Values": { + "description": "A list of one or more values that the user provided for the slot. For example, for a slot that elicits pizza toppings, the values might be \"pepperoni\" and \"pineapple.\"", + "$ref": "#/definitions/SlotValues" + } + }, + "additionalProperties": false + }, + "SlotValue": { + "description": "The value to set in a slot.", + "type": "object", + "properties": { + "InterpretedValue": { + "description": "The value that Amazon Lex determines for the slot.", + "type": "string", + "minLength": 1, + "maxLength": 202 + } + }, + "additionalProperties": false + }, + "SlotValues": { + "description": "An array of values that slots should be set to", + "type": "array", + "items": { + "$ref": "#/definitions/SlotValueOverride" + } + }, + "SlotShape": { + "description": "The different shapes that a slot can be in during a conversation.", + "type": "string", + "enum": [ + "Scalar", + "List" + ] + }, + "SlotCaptureSetting": { + "description": "Settings used when Amazon Lex successfully captures a slot value from a user.", + "type": "object", + "properties": { + "CaptureResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "CaptureNextStep": { + "description": "Specifies the next step that the bot runs when the slot value is captured before the code hook times out.", + "$ref": "#/definitions/DialogState" + }, + "CaptureConditional": { + "description": "A list of conditional branches to evaluate after the slot value is captured.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "FailureResponse": { + "description": "Specifies a list of message groups that Amazon Lex uses to respond the user input.", + "$ref": "#/definitions/ResponseSpecification" + }, + "FailureNextStep": { + "description": "Specifies the next step that the bot runs when the slot value code is not recognized.", + "$ref": "#/definitions/DialogState" + }, + "FailureConditional": { + "description": "A list of conditional branches to evaluate when the slot value isn't captured.", + "$ref": "#/definitions/ConditionalSpecification" + }, + "CodeHook": { + "description": "Code hook called after Amazon Lex successfully captures a slot value.", + "$ref": "#/definitions/DialogCodeHookInvocationSetting" + }, + "ElicitationCodeHook": { + "description": "Code hook called when Amazon Lex doesn't capture a slot value.", + "$ref": "#/definitions/ElicitationCodeHookInvocationSetting" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Id": { + "$ref": "#/definitions/Id" + }, + "Arn": { + "$ref": "#/definitions/BotArn" + }, + "Name": { + "$ref": "#/definitions/Name" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "DataPrivacy": { + "description": "Data privacy setting of the Bot.", + "type": "object", + "properties": { + "ChildDirected": { + "type": "boolean", + "description": "" + } + }, + "required": [ + "ChildDirected" + ], + "additionalProperties": false + }, + "IdleSessionTTLInSeconds": { + "description": "IdleSessionTTLInSeconds of the resource", + "type": "integer", + "minimum": 60, + "maximum": 86400 + }, + "BotLocales": { + "description": "List of bot locales", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/BotLocale" + } + }, + "BotFileS3Location": { + "$ref": "#/definitions/S3Location" + }, + "BotTags": { + "description": "A list of tags to add to the bot, which can only be added at bot creation.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TestBotAliasTags": { + "description": "A list of tags to add to the test alias for a bot, , which can only be added at bot/bot alias creation.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AutoBuildBotLocales": { + "description": "Specifies whether to build the bot locales after bot creation completes.", + "type": "boolean" + }, + "TestBotAliasSettings": { + "$ref": "#/definitions/TestBotAliasSettings" + } + }, + "taggable": true, + "additionalProperties": false, + "required": [ + "Name", + "RoleArn", + "DataPrivacy", + "IdleSessionTTLInSeconds" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/BotLocales", + "/properties/BotFileS3Location", + "/properties/AutoBuildBotLocales", + "/properties/BotTags", + "/properties/TestBotAliasTags" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "lex:DescribeBot", + "lex:CreateUploadUrl", + "lex:StartImport", + "lex:DescribeImport", + "lex:ListTagsForResource", + "lex:TagResource", + "lex:CreateBot", + "lex:CreateBotLocale", + "lex:CreateIntent", + "lex:CreateSlot", + "lex:CreateSlotType", + "lex:UpdateBot", + "lex:UpdateBotLocale", + "lex:UpdateIntent", + "lex:UpdateSlot", + "lex:UpdateSlotType", + "lex:DeleteBotLocale", + "lex:DeleteIntent", + "lex:DeleteSlot", + "lex:DeleteSlotType", + "lex:DescribeBotLocale", + "lex:BuildBotLocale", + "lex:ListBots", + "lex:ListBotLocales", + "lex:CreateCustomVocabulary", + "lex:UpdateCustomVocabulary", + "lex:DeleteCustomVocabulary", + "s3:GetObject", + "lex:UpdateBotAlias" + ] + }, + "read": { + "permissions": [ + "lex:DescribeBot", + "lex:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "lex:DescribeBot", + "lex:CreateUploadUrl", + "lex:StartImport", + "lex:DescribeImport", + "lex:ListTagsForResource", + "lex:TagResource", + "lex:UntagResource", + "lex:CreateBot", + "lex:CreateBotLocale", + "lex:CreateIntent", + "lex:CreateSlot", + "lex:CreateSlotType", + "lex:UpdateBot", + "lex:UpdateBotLocale", + "lex:UpdateIntent", + "lex:UpdateSlot", + "lex:UpdateSlotType", + "lex:DeleteBotLocale", + "lex:DeleteIntent", + "lex:DeleteSlot", + "lex:DeleteSlotType", + "lex:DescribeBotLocale", + "lex:BuildBotLocale", + "lex:ListBots", + "lex:ListBotLocales", + "lex:CreateCustomVocabulary", + "lex:UpdateCustomVocabulary", + "lex:DeleteCustomVocabulary", + "s3:GetObject", + "lex:UpdateBotAlias" + ] + }, + "delete": { + "permissions": [ + "lex:DeleteBot", + "lex:DescribeBot", + "lex:DeleteBotLocale", + "lex:DeleteIntent", + "lex:DeleteSlotType", + "lex:DeleteSlot", + "lex:DeleteBotVersion", + "lex:DeleteBotChannel", + "lex:DeleteBotAlias", + "lex:DeleteCustomVocabulary" + ] + }, + "list": { + "permissions": [ + "lex:ListBots" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lex/botalias.json b/internal/aws/cfn/schemas/aws/lex/botalias.json new file mode 100644 index 00000000..9bb31282 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lex/botalias.json @@ -0,0 +1,410 @@ +{ + "typeName": "AWS::Lex::BotAlias", + "description": "A Bot Alias enables you to change the version of a bot without updating applications that use the bot", + "sourceUrl": "https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBotAlias.html", + "definitions": { + "LocaleId": { + "description": "The identifier of the language and locale that the bot alias will be configured in.", + "type": "string" + }, + "BotAliasLocaleSettingsList": { + "description": "A list of bot alias locale settings to add to the bot alias.", + "type": "array", + "uniqueItems": true, + "maxItems": 50, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/BotAliasLocaleSettingsItem" + } + }, + "BotAliasStatus": { + "type": "string", + "enum": [ + "Creating", + "Available", + "Deleting", + "Failed" + ] + }, + "BotAliasLocaleSettingsItem": { + "description": "A locale setting in alias", + "type": "object", + "properties": { + "LocaleId": { + "description": "A string used to identify the locale", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "BotAliasLocaleSetting": { + "$ref": "#/definitions/BotAliasLocaleSettings" + } + }, + "required": [ + "LocaleId", + "BotAliasLocaleSetting" + ], + "additionalProperties": false + }, + "BotAliasLocaleSettings": { + "description": "You can use this parameter to specify a specific Lambda function to run different functions in different locales.", + "type": "object", + "properties": { + "CodeHookSpecification": { + "$ref": "#/definitions/CodeHookSpecification" + }, + "Enabled": { + "type": "boolean", + "description": "Whether the Lambda code hook is enabled" + } + }, + "required": [ + "Enabled" + ], + "additionalProperties": false + }, + "CodeHookSpecification": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "LambdaCodeHook": { + "$ref": "#/definitions/LambdaCodeHook" + } + }, + "required": [ + "LambdaCodeHook" + ], + "additionalProperties": false + }, + "LambdaCodeHook": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "CodeHookInterfaceVersion": { + "description": "The version of the request-response that you want Amazon Lex to use to invoke your Lambda function.", + "type": "string", + "minLength": 1, + "maxLength": 5 + }, + "LambdaArn": { + "description": "The Amazon Resource Name (ARN) of the Lambda function.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "required": [ + "CodeHookInterfaceVersion", + "LambdaArn" + ], + "additionalProperties": false + }, + "ConversationLogSettings": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "AudioLogSettings": { + "$ref": "#/definitions/AudioLogSettings" + }, + "TextLogSettings": { + "$ref": "#/definitions/TextLogSettings" + } + }, + "additionalProperties": false + }, + "AudioLogSettings": { + "description": "List of audio log settings", + "type": "array", + "maxItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AudioLogSetting" + } + }, + "TextLogSettings": { + "description": "List of text log settings", + "type": "array", + "maxItems": 1, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TextLogSetting" + } + }, + "AudioLogSetting": { + "description": "Settings for logging audio of conversations between Amazon Lex and a user. You specify whether to log audio and the Amazon S3 bucket where the audio file is stored.", + "type": "object", + "properties": { + "Destination": { + "$ref": "#/definitions/AudioLogDestination" + }, + "Enabled": { + "type": "boolean", + "description": "" + } + }, + "required": [ + "Destination", + "Enabled" + ], + "additionalProperties": false + }, + "TextLogSetting": { + "description": "Contains information about code hooks that Amazon Lex calls during a conversation.", + "type": "object", + "properties": { + "Destination": { + "$ref": "#/definitions/TextLogDestination" + }, + "Enabled": { + "type": "boolean", + "description": "" + } + }, + "required": [ + "Destination", + "Enabled" + ], + "additionalProperties": false + }, + "AudioLogDestination": { + "description": "The location of audio log files collected when conversation logging is enabled for a bot.", + "type": "object", + "properties": { + "S3Bucket": { + "$ref": "#/definitions/S3BucketLogDestination" + } + }, + "required": [ + "S3Bucket" + ], + "additionalProperties": false + }, + "TextLogDestination": { + "description": "Defines the Amazon CloudWatch Logs destination log group for conversation text logs.", + "type": "object", + "properties": { + "CloudWatch": { + "$ref": "#/definitions/CloudWatchLogGroupLogDestination" + } + }, + "required": [ + "CloudWatch" + ], + "additionalProperties": false + }, + "CloudWatchLogGroupLogDestination": { + "type": "object", + "properties": { + "CloudWatchLogGroupArn": { + "description": "A string used to identify the groupArn for the Cloudwatch Log Group", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "LogPrefix": { + "description": "A string containing the value for the Log Prefix", + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + }, + "required": [ + "CloudWatchLogGroupArn", + "LogPrefix" + ], + "additionalProperties": false + }, + "S3BucketLogDestination": { + "description": "Specifies an Amazon S3 bucket for logging audio conversations", + "type": "object", + "properties": { + "S3BucketArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of an Amazon S3 bucket where audio log files are stored.", + "minLength": 1, + "maxLength": 2048, + "pattern": "^arn:[\\w\\-]+:s3:::[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$" + }, + "LogPrefix": { + "type": "string", + "description": "The Amazon S3 key of the deployment package.", + "minLength": 0, + "maxLength": 1024 + }, + "KmsKeyArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS) key for encrypting audio log files stored in an S3 bucket.", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:[\\w\\-]+:kms:[\\w\\-]+:[\\d]{12}:(?:key\\/[\\w\\-]+|alias\\/[a-zA-Z0-9:\\/_\\-]{1,256})$" + } + }, + "required": [ + "LogPrefix", + "S3BucketArn" + ], + "additionalProperties": false + }, + "Id": { + "description": "Unique ID of resource", + "type": "string", + "minLength": 10, + "maxLength": 10, + "pattern": "^[0-9a-zA-Z]+$" + }, + "Name": { + "description": "A unique identifier for a resource.", + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "^([0-9a-zA-Z][_-]?)+$" + }, + "BotVersion": { + "description": "The version of a bot.", + "type": "string", + "minLength": 1, + "maxLength": 5, + "pattern": "^(DRAFT|[0-9]+)$" + }, + "Description": { + "description": "A description of the bot alias. Use the description to help identify the bot alias in lists.", + "type": "string", + "maxLength": 200 + }, + "Arn": { + "type": "string", + "maxLength": 1000 + }, + "Tag": { + "description": "A label for tagging Lex resources", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "BotAliasId": { + "$ref": "#/definitions/Id" + }, + "BotId": { + "$ref": "#/definitions/Id" + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "BotAliasStatus": { + "$ref": "#/definitions/BotAliasStatus" + }, + "BotAliasLocaleSettings": { + "$ref": "#/definitions/BotAliasLocaleSettingsList" + }, + "BotAliasName": { + "$ref": "#/definitions/Name" + }, + "BotVersion": { + "$ref": "#/definitions/BotVersion" + }, + "ConversationLogSettings": { + "$ref": "#/definitions/ConversationLogSettings" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "SentimentAnalysisSettings": { + "description": "Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances.", + "type": "object", + "properties": { + "DetectSentiment": { + "type": "boolean", + "description": "Enable to call Amazon Comprehend for Sentiment natively within Lex" + } + }, + "required": [ + "DetectSentiment" + ], + "additionalProperties": false + }, + "BotAliasTags": { + "description": "A list of tags to add to the bot alias.", + "type": "array", + "uniqueItems": true, + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "taggable": false, + "additionalProperties": false, + "required": [ + "BotId", + "BotAliasName" + ], + "readOnlyProperties": [ + "/properties/BotAliasId", + "/properties/Arn", + "/properties/BotAliasStatus" + ], + "primaryIdentifier": [ + "/properties/BotAliasId", + "/properties/BotId" + ], + "createOnlyProperties": [ + "/properties/BotId" + ], + "writeOnlyProperties": [ + "/properties/BotAliasTags" + ], + "handlers": { + "create": { + "permissions": [ + "lex:CreateBotAlias", + "lex:DescribeBot" + ] + }, + "update": { + "permissions": [ + "lex:UpdateBotAlias", + "lex:DescribeBotAlias", + "lex:ListTagsForResource", + "lex:TagResource", + "lex:UntagResource" + ] + }, + "read": { + "permissions": [ + "lex:DescribeBotAlias" + ] + }, + "delete": { + "permissions": [ + "lex:DeleteBotAlias" + ] + }, + "list": { + "permissions": [ + "lex:ListBotAliases" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lex/botversion.json b/internal/aws/cfn/schemas/aws/lex/botversion.json new file mode 100644 index 00000000..6004850b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lex/botversion.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::Lex::BotVersion", + "description": "A version is a numbered snapshot of your work that you can publish for use in different parts of your workflow, such as development, beta deployment, and production.", + "sourceUrl": "https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBotVersion.html", + "definitions": { + "Id": { + "description": "Unique ID of resource", + "type": "string", + "minLength": 10, + "maxLength": 10, + "pattern": "^[0-9a-zA-Z]+$" + }, + "Description": { + "description": "A description of the version. Use the description to help identify the version in lists.", + "type": "string", + "maxLength": 200 + }, + "LocaleId": { + "description": "The identifier of the language and locale that the bot will be used in.", + "type": "string" + }, + "BotVersion": { + "description": "The version of a bot.", + "type": "string", + "minLength": 1, + "maxLength": 5, + "pattern": "^(DRAFT|[0-9]+)$" + }, + "BotVersionLocaleDetails": { + "description": "The version of a bot used for a bot locale.", + "type": "object", + "properties": { + "SourceBotVersion": { + "$ref": "#/definitions/BotVersion" + } + }, + "required": [ + "SourceBotVersion" + ], + "additionalProperties": false + }, + "BotVersionLocaleSpecification": { + "type": "object", + "properties": { + "LocaleId": { + "$ref": "#/definitions/LocaleId" + }, + "BotVersionLocaleDetails": { + "$ref": "#/definitions/BotVersionLocaleDetails" + } + }, + "required": [ + "LocaleId", + "BotVersionLocaleDetails" + ], + "additionalProperties": false + }, + "BotVersionLocaleSpecificationList": { + "description": "Specifies the locales that Amazon Lex adds to this version. You can choose the Draft version or any other previously published version for each locale.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/BotVersionLocaleSpecification" + } + } + }, + "properties": { + "BotId": { + "$ref": "#/definitions/Id" + }, + "BotVersion": { + "$ref": "#/definitions/BotVersion" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "BotVersionLocaleSpecification": { + "$ref": "#/definitions/BotVersionLocaleSpecificationList" + } + }, + "taggable": false, + "additionalProperties": false, + "required": [ + "BotId", + "BotVersionLocaleSpecification" + ], + "readOnlyProperties": [ + "/properties/BotVersion" + ], + "createOnlyProperties": [ + "/properties/BotId" + ], + "writeOnlyProperties": [ + "/properties/BotVersionLocaleSpecification" + ], + "primaryIdentifier": [ + "/properties/BotId", + "/properties/BotVersion" + ], + "handlers": { + "create": { + "permissions": [ + "lex:CreateBotVersion", + "lex:DescribeBotVersion", + "lex:DescribeBot", + "lex:DescribeBotLocale", + "lex:BuildBotLocale" + ] + }, + "read": { + "permissions": [ + "lex:DescribeBotVersion" + ] + }, + "delete": { + "permissions": [ + "lex:DeleteBotVersion", + "lex:DescribeBotVersion" + ] + }, + "list": { + "permissions": [ + "lex:ListBotVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lex/resourcepolicy.json b/internal/aws/cfn/schemas/aws/lex/resourcepolicy.json new file mode 100644 index 00000000..65502b9a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lex/resourcepolicy.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::Lex::ResourcePolicy", + "description": "A resource policy with specified policy statements that attaches to a Lex bot or bot alias.", + "sourceUrl": "https://docs.aws.amazon.com/lexv2/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-resource-based-policies", + "definitions": { + "ResourceArn": { + "description": "The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to.", + "type": "string", + "minLength": 1, + "maxLength": 1011 + }, + "Policy": { + "description": "A resource policy to add to the resource. The policy is a JSON structure following the IAM syntax that contains one or more statements that define the policy.", + "type": "object" + }, + "RevisionId": { + "description": "The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource.", + "type": "string", + "minLength": 1, + "maxLength": 5, + "pattern": "^[0-9]+$" + }, + "PhysicalId": { + "description": "The Physical ID of the resource policy.", + "type": "string" + } + }, + "properties": { + "ResourceArn": { + "$ref": "#/definitions/ResourceArn" + }, + "RevisionId": { + "$ref": "#/definitions/RevisionId" + }, + "Policy": { + "$ref": "#/definitions/Policy" + }, + "Id": { + "$ref": "#/definitions/PhysicalId" + } + }, + "taggable": false, + "additionalProperties": false, + "required": [ + "ResourceArn", + "Policy" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/ResourceArn" + ] + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/RevisionId" + ], + "handlers": { + "create": { + "permissions": [ + "lex:CreateResourcePolicy", + "lex:DescribeResourcePolicy" + ] + }, + "read": { + "permissions": [ + "lex:DescribeResourcePolicy" + ] + }, + "update": { + "permissions": [ + "lex:UpdateResourcePolicy", + "lex:DescribeResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "lex:DeleteResourcePolicy", + "lex:DescribeResourcePolicy" + ] + }, + "list": { + "permissions": [ + "lex:DescribeResourcePolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/licensemanager/grant.json b/internal/aws/cfn/schemas/aws/licensemanager/grant.json new file mode 100644 index 00000000..d7aa892d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/licensemanager/grant.json @@ -0,0 +1,91 @@ +{ + "typeName": "AWS::LicenseManager::Grant", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "type": "string", + "maxLength": 2048 + } + }, + "properties": { + "GrantArn": { + "description": "Arn of the grant.", + "$ref": "#/definitions/Arn" + }, + "GrantName": { + "description": "Name for the created Grant.", + "type": "string" + }, + "LicenseArn": { + "description": "License Arn for the grant.", + "$ref": "#/definitions/Arn" + }, + "HomeRegion": { + "description": "Home region for the created grant.", + "type": "string" + }, + "Version": { + "description": "The version of the grant.", + "type": "string" + }, + "AllowedOperations": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Principals": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Arn" + } + }, + "Status": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [], + "readOnlyProperties": [ + "/properties/GrantArn", + "/properties/Version" + ], + "writeOnlyProperties": [ + "/properties/Principals", + "/properties/AllowedOperations", + "/properties/Status" + ], + "primaryIdentifier": [ + "/properties/GrantArn" + ], + "handlers": { + "create": { + "permissions": [ + "license-manager:CreateGrant" + ] + }, + "read": { + "permissions": [ + "license-manager:GetGrant" + ] + }, + "update": { + "permissions": [ + "license-manager:CreateGrantVersion" + ] + }, + "delete": { + "permissions": [ + "license-manager:DeleteGrant" + ] + }, + "list": { + "permissions": [ + "license-manager:ListDistributedGrants" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/licensemanager/license.json b/internal/aws/cfn/schemas/aws/licensemanager/license.json new file mode 100644 index 00000000..0d3102b3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/licensemanager/license.json @@ -0,0 +1,241 @@ +{ + "typeName": "AWS::LicenseManager::License", + "description": "Resource Type definition for AWS::LicenseManager::License", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-licensemanager.git", + "definitions": { + "ValidityDateFormat": { + "type": "object", + "additionalProperties": false, + "properties": { + "Begin": { + "description": "Validity begin date for the license.", + "type": "string", + "format": "date-time" + }, + "End": { + "description": "Validity begin date for the license.", + "type": "string", + "format": "date-time" + } + }, + "required": [ + "Begin", + "End" + ] + }, + "IssuerData": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "SignKey": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "Entitlement": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + }, + "MaxCount": { + "type": "integer" + }, + "Overage": { + "type": "boolean" + }, + "Unit": { + "type": "string" + }, + "AllowCheckIn": { + "type": "boolean" + } + }, + "required": [ + "Name", + "Unit" + ], + "additionalProperties": false + }, + "ConsumptionConfiguration": { + "type": "object", + "properties": { + "RenewType": { + "type": "string" + }, + "ProvisionalConfiguration": { + "$ref": "#/definitions/ProvisionalConfiguration" + }, + "BorrowConfiguration": { + "$ref": "#/definitions/BorrowConfiguration" + } + }, + "additionalProperties": false + }, + "ProvisionalConfiguration": { + "type": "object", + "properties": { + "MaxTimeToLiveInMinutes": { + "type": "integer" + } + }, + "required": [ + "MaxTimeToLiveInMinutes" + ], + "additionalProperties": false + }, + "BorrowConfiguration": { + "type": "object", + "properties": { + "MaxTimeToLiveInMinutes": { + "type": "integer" + }, + "AllowEarlyCheckIn": { + "type": "boolean" + } + }, + "required": [ + "MaxTimeToLiveInMinutes", + "AllowEarlyCheckIn" + ], + "additionalProperties": false + }, + "Metadata": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Name", + "Value" + ], + "additionalProperties": false + }, + "LicenseStatus": { + "type": "string" + }, + "Arn": { + "type": "string", + "maxLength": 2048 + } + }, + "properties": { + "ProductSKU": { + "description": "ProductSKU of the license.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Issuer": { + "$ref": "#/definitions/IssuerData" + }, + "LicenseName": { + "description": "Name for the created license.", + "type": "string" + }, + "ProductName": { + "description": "Product name for the created license.", + "type": "string" + }, + "HomeRegion": { + "description": "Home region for the created license.", + "type": "string" + }, + "Validity": { + "$ref": "#/definitions/ValidityDateFormat" + }, + "Entitlements": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Entitlement" + } + }, + "Beneficiary": { + "description": "Beneficiary of the license.", + "type": "string" + }, + "ConsumptionConfiguration": { + "$ref": "#/definitions/ConsumptionConfiguration" + }, + "LicenseMetadata": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Metadata" + } + }, + "LicenseArn": { + "description": "Amazon Resource Name is a unique name for each resource.", + "$ref": "#/definitions/Arn" + }, + "Status": { + "$ref": "#/definitions/LicenseStatus" + }, + "Version": { + "description": "The version of the license.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "LicenseName", + "ProductName", + "Issuer", + "HomeRegion", + "Validity", + "ConsumptionConfiguration", + "Entitlements" + ], + "writeOnlyProperties": [ + "/properties/Status" + ], + "readOnlyProperties": [ + "/properties/LicenseArn", + "/properties/Version" + ], + "primaryIdentifier": [ + "/properties/LicenseArn" + ], + "handlers": { + "create": { + "permissions": [ + "license-manager:CreateLicense" + ] + }, + "read": { + "permissions": [ + "license-manager:GetLicense" + ] + }, + "update": { + "permissions": [ + "license-manager:CreateLicenseVersion" + ] + }, + "delete": { + "permissions": [ + "license-manager:DeleteLicense" + ] + }, + "list": { + "permissions": [ + "license-manager:ListLicenses" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/alarm.json b/internal/aws/cfn/schemas/aws/lightsail/alarm.json new file mode 100644 index 00000000..9b4d4f3c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/alarm.json @@ -0,0 +1,121 @@ +{ + "typeName": "AWS::Lightsail::Alarm", + "description": "Resource Type definition for AWS::Lightsail::Alarm", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "properties": { + "AlarmName": { + "description": "The name for the alarm. Specify the name of an existing alarm to update, and overwrite the previous configuration of the alarm.", + "type": "string", + "pattern": "\\w[\\w\\-]*\\w" + }, + "MonitoredResourceName": { + "description": "The validation status of the SSL/TLS certificate.", + "type": "string" + }, + "MetricName": { + "description": "The name of the metric to associate with the alarm.", + "type": "string" + }, + "ComparisonOperator": { + "description": "The arithmetic operation to use when comparing the specified statistic to the threshold. The specified statistic value is used as the first operand.", + "type": "string" + }, + "ContactProtocols": { + "description": "The contact protocols to use for the alarm, such as Email, SMS (text messaging), or both.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "AlarmArn": { + "type": "string" + }, + "DatapointsToAlarm": { + "description": "The number of data points that must be not within the specified threshold to trigger the alarm. If you are setting an \"M out of N\" alarm, this value (datapointsToAlarm) is the M.", + "type": "integer" + }, + "EvaluationPeriods": { + "description": "The number of most recent periods over which data is compared to the specified threshold. If you are setting an \"M out of N\" alarm, this value (evaluationPeriods) is the N.", + "type": "integer" + }, + "NotificationEnabled": { + "description": "Indicates whether the alarm is enabled. Notifications are enabled by default if you don't specify this parameter.", + "type": "boolean" + }, + "NotificationTriggers": { + "description": "The alarm states that trigger a notification.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Threshold": { + "description": "The value against which the specified statistic is compared.", + "type": "number" + }, + "TreatMissingData": { + "description": "Sets how this alarm will handle missing data points.", + "type": "string" + }, + "State": { + "description": "The current state of the alarm.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "AlarmName", + "MonitoredResourceName", + "MetricName", + "ComparisonOperator", + "EvaluationPeriods", + "Threshold" + ], + "readOnlyProperties": [ + "/properties/AlarmArn", + "/properties/State" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/AlarmName" + ], + "createOnlyProperties": [ + "/properties/AlarmName", + "/properties/MonitoredResourceName", + "/properties/MetricName" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:PutAlarm", + "lightsail:GetAlarms" + ] + }, + "read": { + "permissions": [ + "lightsail:GetAlarms" + ] + }, + "update": { + "permissions": [ + "lightsail:PutAlarm", + "lightsail:GetAlarms" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteAlarm", + "lightsail:GetAlarms" + ] + }, + "list": { + "permissions": [ + "lightsail:GetAlarms" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/bucket.json b/internal/aws/cfn/schemas/aws/lightsail/bucket.json new file mode 100644 index 00000000..96d526b2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/bucket.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::Lightsail::Bucket", + "description": "Resource Type definition for AWS::Lightsail::Bucket", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "AccessRules": { + "description": "An object that sets the public accessibility of objects in the specified bucket.", + "type": "object", + "properties": { + "GetObject": { + "type": "string", + "description": "Specifies the anonymous access to all objects in a bucket." + }, + "AllowPublicOverrides": { + "type": "boolean", + "description": "A Boolean value that indicates whether the access control list (ACL) permissions that are applied to individual objects override the getObject option that is currently specified." + } + }, + "additionalProperties": false + } + }, + "properties": { + "BucketName": { + "description": "The name for the bucket.", + "type": "string", + "pattern": "^[a-z0-9][a-z0-9-]{1,52}[a-z0-9]$", + "minLength": 3, + "maxLength": 54 + }, + "BundleId": { + "description": "The ID of the bundle to use for the bucket.", + "type": "string" + }, + "BucketArn": { + "type": "string" + }, + "ObjectVersioning": { + "description": "Specifies whether to enable or disable versioning of objects in the bucket.", + "type": "boolean" + }, + "AccessRules": { + "$ref": "#/definitions/AccessRules" + }, + "ResourcesReceivingAccess": { + "description": "The names of the Lightsail resources for which to set bucket access.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "ReadOnlyAccessAccounts": { + "description": "An array of strings to specify the AWS account IDs that can access the bucket.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Url": { + "description": "The URL of the bucket.", + "type": "string" + }, + "AbleToUpdateBundle": { + "description": "Indicates whether the bundle that is currently applied to a bucket can be changed to another bundle. You can update a bucket's bundle only one time within a monthly AWS billing cycle.", + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "BucketName", + "BundleId" + ], + "readOnlyProperties": [ + "/properties/BucketArn", + "/properties/Url", + "/properties/AbleToUpdateBundle" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/BucketName" + ], + "createOnlyProperties": [ + "/properties/BucketName" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateBucket", + "lightsail:GetBuckets", + "lightsail:GetInstance", + "lightsail:UpdateBucket", + "lightsail:UpdateBucketBundle", + "lightsail:SetResourceAccessForBucket", + "lightsail:TagResource", + "lightsail:UntagResource" + ] + }, + "read": { + "permissions": [ + "lightsail:GetBuckets" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteBucket", + "lightsail:GetBuckets" + ] + }, + "list": { + "permissions": [ + "lightsail:GetBuckets" + ] + }, + "update": { + "permissions": [ + "lightsail:GetBuckets", + "lightsail:GetInstance", + "lightsail:UpdateBucket", + "lightsail:UpdateBucketBundle", + "lightsail:SetResourceAccessForBucket", + "lightsail:TagResource", + "lightsail:UntagResource" + ], + "timeoutInMinutes": 2160 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/certificate.json b/internal/aws/cfn/schemas/aws/lightsail/certificate.json new file mode 100644 index 00000000..1673956d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/certificate.json @@ -0,0 +1,115 @@ +{ + "typeName": "AWS::Lightsail::Certificate", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "CertificateName": { + "description": "The name for the certificate.", + "type": "string" + }, + "DomainName": { + "description": "The domain name (e.g., example.com ) for the certificate.", + "type": "string" + }, + "SubjectAlternativeNames": { + "description": "An array of strings that specify the alternate domains (e.g., example2.com) and subdomains (e.g., blog.example.com) for the certificate.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "CertificateArn": { + "type": "string" + }, + "Status": { + "description": "The validation status of the certificate.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "CertificateName", + "DomainName" + ], + "readOnlyProperties": [ + "/properties/CertificateArn", + "/properties/Status" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/CertificateName" + ], + "createOnlyProperties": [ + "/properties/CertificateName", + "/properties/DomainName", + "/properties/SubjectAlternativeNames" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateCertificate", + "lightsail:GetCertificates", + "lightsail:TagResource", + "lightsail:UntagResource" + ] + }, + "read": { + "permissions": [ + "lightsail:GetCertificates" + ] + }, + "update": { + "permissions": [ + "lightsail:GetCertificates", + "lightsail:TagResource", + "lightsail:UntagResource" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteCertificate", + "lightsail:GetCertificates" + ] + }, + "list": { + "permissions": [ + "lightsail:GetCertificates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/container.json b/internal/aws/cfn/schemas/aws/lightsail/container.json new file mode 100644 index 00000000..c4e02be4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/container.json @@ -0,0 +1,323 @@ +{ + "typeName": "AWS::Lightsail::Container", + "description": "Resource Type definition for AWS::Lightsail::Container", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "HealthCheckConfig": { + "description": "Describes the health check configuration of an Amazon Lightsail container service.", + "type": "object", + "properties": { + "HealthyThreshold": { + "type": "integer", + "description": "The number of consecutive health checks successes required before moving the container to the Healthy state. The default value is 2." + }, + "IntervalSeconds": { + "type": "integer", + "description": "The approximate interval, in seconds, between health checks of an individual container. You can specify between 5 and 300 seconds. The default value is 5." + }, + "Path": { + "type": "string", + "description": "The path on the container on which to perform the health check. The default value is /." + }, + "SuccessCodes": { + "type": "string", + "description": "The HTTP codes to use when checking for a successful response from a container. You can specify values between 200 and 499. You can specify multiple values (for example, 200,202) or a range of values (for example, 200-299)." + }, + "TimeoutSeconds": { + "type": "integer", + "description": "The amount of time, in seconds, during which no response means a failed health check. You can specify between 2 and 60 seconds. The default value is 2." + }, + "UnhealthyThreshold": { + "type": "integer", + "description": "The number of consecutive health check failures required before moving the container to the Unhealthy state. The default value is 2." + } + }, + "additionalProperties": false + }, + "PublicEndpoint": { + "description": "Describes the settings of a public endpoint for an Amazon Lightsail container service.", + "type": "object", + "properties": { + "ContainerName": { + "type": "string", + "description": "The name of the container for the endpoint." + }, + "ContainerPort": { + "type": "integer", + "description": "The port of the container to which traffic is forwarded to." + }, + "HealthCheckConfig": { + "$ref": "#/definitions/HealthCheckConfig", + "description": "An object that describes the health check configuration of the container." + } + }, + "additionalProperties": false + }, + "EnvironmentVariable": { + "type": "object", + "properties": { + "Variable": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + }, + "PortInfo": { + "type": "object", + "properties": { + "Port": { + "type": "string" + }, + "Protocol": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Container": { + "description": "Describes the settings of a container that will be launched, or that is launched, to an Amazon Lightsail container service.", + "type": "object", + "properties": { + "ContainerName": { + "type": "string", + "description": "The name of the container." + }, + "Command": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "The launch command for the container." + }, + "Environment": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/EnvironmentVariable" + }, + "description": "The environment variables of the container." + }, + "Image": { + "type": "string", + "description": "The name of the image used for the container." + }, + "Ports": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PortInfo" + }, + "description": "The open firewall ports of the container." + } + }, + "additionalProperties": false + }, + "ContainerServiceDeployment": { + "description": "Describes a container deployment configuration of an Amazon Lightsail container service.", + "type": "object", + "properties": { + "Containers": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Container" + }, + "description": "An object that describes the configuration for the containers of the deployment." + }, + "PublicEndpoint": { + "$ref": "#/definitions/PublicEndpoint", + "description": "An object that describes the endpoint of the deployment." + } + }, + "additionalProperties": false + }, + "PublicDomainName": { + "description": "The public domain name to use with the container service, such as example.com and www.example.com.", + "type": "object", + "properties": { + "CertificateName": { + "type": "string" + }, + "DomainNames": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + }, + "description": "An object that describes the configuration for the containers of the deployment." + } + }, + "additionalProperties": false + }, + "PrivateRegistryAccess": { + "description": "An object to describe the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.", + "type": "object", + "properties": { + "EcrImagePullerRole": { + "description": "An object to describe a request to activate or deactivate the role that you can use to grant an Amazon Lightsail container service access to Amazon Elastic Container Registry (Amazon ECR) private repositories.", + "type": "object", + "properties": { + "IsActive": { + "type": "boolean", + "description": "A Boolean value that indicates whether to activate the role." + }, + "PrincipalArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the role, if it is activated." + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "properties": { + "ServiceName": { + "description": "The name for the container service.", + "type": "string", + "pattern": "^[a-z0-9]{1,2}|[a-z0-9][a-z0-9-]+[a-z0-9]$", + "minLength": 1, + "maxLength": 63 + }, + "Power": { + "description": "The power specification for the container service.", + "type": "string" + }, + "ContainerArn": { + "type": "string" + }, + "Scale": { + "description": "The scale specification for the container service.", + "type": "integer", + "minimum": 1, + "maximum": 20 + }, + "PublicDomainNames": { + "description": "The public domain names to use with the container service, such as example.com and www.example.com.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/PublicDomainName" + } + }, + "ContainerServiceDeployment": { + "$ref": "#/definitions/ContainerServiceDeployment", + "description": "Describes a container deployment configuration of an Amazon Lightsail container service." + }, + "IsDisabled": { + "description": "A Boolean value to indicate whether the container service is disabled.", + "type": "boolean" + }, + "PrivateRegistryAccess": { + "$ref": "#/definitions/PrivateRegistryAccess", + "description": "A Boolean value to indicate whether the container service has access to private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories." + }, + "Url": { + "description": "The publicly accessible URL of the container service.", + "type": "string" + }, + "PrincipalArn": { + "description": "The principal ARN of the container service.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "ServiceName", + "Power", + "Scale" + ], + "readOnlyProperties": [ + "/properties/ContainerArn", + "/properties/Url", + "/properties/PrincipalArn", + "/properties/PrivateRegistryAccess/EcrImagePullerRole/PrincipalArn" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/ServiceName" + ], + "createOnlyProperties": [ + "/properties/ServiceName" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateContainerService", + "lightsail:CreateContainerServiceDeployment", + "lightsail:GetContainerServices", + "lightsail:TagResource", + "lightsail:UntagResource", + "lightsail:UpdateContainerService" + ] + }, + "read": { + "permissions": [ + "lightsail:GetContainerServices" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteContainerService", + "lightsail:GetContainerServices" + ] + }, + "list": { + "permissions": [ + "lightsail:GetContainerServices" + ] + }, + "update": { + "permissions": [ + "lightsail:CreateContainerServiceDeployment", + "lightsail:GetContainerServices", + "lightsail:TagResource", + "lightsail:UntagResource", + "lightsail:UpdateContainerService" + ], + "timeoutInMinutes": 2160 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/database.json b/internal/aws/cfn/schemas/aws/lightsail/database.json new file mode 100644 index 00000000..cb148254 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/database.json @@ -0,0 +1,231 @@ +{ + "typeName": "AWS::Lightsail::Database", + "description": "Resource Type definition for AWS::Lightsail::Database", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "RelationalDatabaseParameter": { + "description": "Describes the parameters of the database.", + "type": "object", + "properties": { + "AllowedValues": { + "type": "string", + "description": "Specifies the valid range of values for the parameter." + }, + "ApplyMethod": { + "type": "string", + "description": "Indicates when parameter updates are applied. Can be immediate or pending-reboot." + }, + "ApplyType": { + "type": "string", + "description": "Specifies the engine-specific parameter type." + }, + "DataType": { + "type": "string", + "description": "Specifies the valid data type for the parameter." + }, + "Description": { + "type": "string", + "description": "Provides a description of the parameter." + }, + "IsModifiable": { + "type": "boolean", + "description": "A Boolean value indicating whether the parameter can be modified." + }, + "ParameterName": { + "type": "string", + "description": "Specifies the name of the parameter." + }, + "ParameterValue": { + "type": "string", + "description": "Specifies the value of the parameter." + } + }, + "additionalProperties": false + } + }, + "properties": { + "RelationalDatabaseName": { + "description": "The name to use for your new Lightsail database resource.", + "type": "string", + "pattern": "\\w[\\w\\-]*\\w", + "minLength": 2, + "maxLength": 255 + }, + "DatabaseArn": { + "type": "string" + }, + "AvailabilityZone": { + "description": "The Availability Zone in which to create your new database. Use the us-east-2a case-sensitive format.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "RelationalDatabaseBlueprintId": { + "description": "The blueprint ID for your new database. A blueprint describes the major engine version of a database.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "RelationalDatabaseBundleId": { + "description": "The bundle ID for your new database. A bundle describes the performance specifications for your database.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "MasterDatabaseName": { + "description": "The name of the database to create when the Lightsail database resource is created. For MySQL, if this parameter isn't specified, no database is created in the database resource. For PostgreSQL, if this parameter isn't specified, a database named postgres is created in the database resource.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "MasterUsername": { + "description": "The name for the master user.", + "type": "string", + "minLength": 1, + "maxLength": 63 + }, + "MasterUserPassword": { + "description": "The password for the master user. The password can include any printable ASCII character except \"/\", \"\"\", or \"@\". It cannot contain spaces.", + "type": "string", + "minLength": 1, + "maxLength": 63 + }, + "PreferredBackupWindow": { + "description": "The daily time range during which automated backups are created for your new database if automated backups are enabled.", + "type": "string" + }, + "PreferredMaintenanceWindow": { + "description": "The weekly time range during which system maintenance can occur on your new database.", + "type": "string" + }, + "PubliclyAccessible": { + "description": "Specifies the accessibility options for your new database. A value of true specifies a database that is available to resources outside of your Lightsail account. A value of false specifies a database that is available only to your Lightsail resources in the same region as your database.", + "type": "boolean" + }, + "CaCertificateIdentifier": { + "description": "Indicates the certificate that needs to be associated with the database.", + "type": "string" + }, + "BackupRetention": { + "description": "When true, enables automated backup retention for your database. Updates are applied during the next maintenance window because this can result in an outage.", + "type": "boolean" + }, + "RotateMasterUserPassword": { + "description": "When true, the master user password is changed to a new strong password generated by Lightsail. Use the get relational database master user password operation to get the new password.", + "type": "boolean" + }, + "RelationalDatabaseParameters": { + "description": "Update one or more parameters of the relational database.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RelationalDatabaseParameter" + } + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "RelationalDatabaseName", + "RelationalDatabaseBlueprintId", + "RelationalDatabaseBundleId", + "MasterDatabaseName", + "MasterUsername" + ], + "readOnlyProperties": [ + "/properties/DatabaseArn" + ], + "writeOnlyProperties": [ + "/properties/MasterUserPassword", + "/properties/RelationalDatabaseParameters", + "/properties/RotateMasterUserPassword" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/RelationalDatabaseName" + ], + "createOnlyProperties": [ + "/properties/RelationalDatabaseName", + "/properties/AvailabilityZone", + "/properties/RelationalDatabaseBlueprintId", + "/properties/RelationalDatabaseBundleId", + "/properties/MasterDatabaseName", + "/properties/MasterUsername" + ], + "propertyTransform": { + "/properties/PreferredMaintenanceWindow": "$lowercase(PreferredMaintenanceWindow)" + }, + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateRelationalDatabase", + "lightsail:GetRelationalDatabase", + "lightsail:GetRelationalDatabases", + "lightsail:GetRegions", + "lightsail:TagResource", + "lightsail:UntagResource", + "lightsail:UpdateRelationalDatabase", + "lightsail:UpdateRelationalDatabaseParameters" + ] + }, + "read": { + "permissions": [ + "lightsail:GetRelationalDatabase", + "lightsail:GetRelationalDatabases" + ] + }, + "update": { + "permissions": [ + "lightsail:GetRelationalDatabase", + "lightsail:GetRelationalDatabases", + "lightsail:TagResource", + "lightsail:UntagResource", + "lightsail:UpdateRelationalDatabase", + "lightsail:UpdateRelationalDatabaseParameters" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteRelationalDatabase", + "lightsail:GetRelationalDatabase", + "lightsail:GetRelationalDatabases" + ] + }, + "list": { + "permissions": [ + "lightsail:GetRelationalDatabases" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/disk.json b/internal/aws/cfn/schemas/aws/lightsail/disk.json new file mode 100644 index 00000000..871ba405 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/disk.json @@ -0,0 +1,232 @@ +{ + "typeName": "AWS::Lightsail::Disk", + "description": "Resource Type definition for AWS::Lightsail::Disk", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "AutoSnapshotAddOn": { + "description": "An object that represents additional parameters when enabling or modifying the automatic snapshot add-on", + "type": "object", + "properties": { + "SnapshotTimeOfDay": { + "type": "string", + "description": "The daily time when an automatic snapshot will be created.", + "pattern": "^[0-9]{2}:00$" + } + }, + "additionalProperties": false + }, + "AddOn": { + "description": "A addon associate with a resource.", + "type": "object", + "properties": { + "AddOnType": { + "type": "string", + "description": "The add-on type", + "minLength": 1, + "maxLength": 128 + }, + "Status": { + "type": "string", + "description": "Status of the Addon", + "enum": [ + "Enabling", + "Disabling", + "Enabled", + "Terminating", + "Terminated", + "Disabled", + "Failed" + ] + }, + "AutoSnapshotAddOnRequest": { + "$ref": "#/definitions/AutoSnapshotAddOn" + } + }, + "required": [ + "AddOnType" + ], + "additionalProperties": false + }, + "Location": { + "description": "Location of a resource.", + "type": "object", + "properties": { + "AvailabilityZone": { + "type": "string", + "description": "The Availability Zone in which to create your disk. Use the following format: us-east-2a (case sensitive). Be sure to add the include Availability Zones parameter to your request." + }, + "RegionName": { + "type": "string", + "description": "The Region Name in which to create your disk." + } + }, + "additionalProperties": false + } + }, + "properties": { + "DiskName": { + "description": "The names to use for your new Lightsail disk.", + "type": "string", + "pattern": "^[a-zA-Z0-9][\\w\\-.]*[a-zA-Z0-9]$", + "minLength": 1, + "maxLength": 254 + }, + "DiskArn": { + "type": "string" + }, + "SupportCode": { + "description": "Support code to help identify any issues", + "type": "string" + }, + "AvailabilityZone": { + "description": "The Availability Zone in which to create your instance. Use the following format: us-east-2a (case sensitive). Be sure to add the include Availability Zones parameter to your request.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Location": { + "$ref": "#/definitions/Location" + }, + "ResourceType": { + "description": "Resource type of Lightsail instance.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AddOns": { + "description": "An array of objects representing the add-ons to enable for the new instance.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AddOn" + } + }, + "State": { + "description": "State of the Lightsail disk", + "type": "string" + }, + "AttachmentState": { + "description": "Attachment State of the Lightsail disk", + "type": "string" + }, + "SizeInGb": { + "description": "Size of the Lightsail disk", + "type": "integer" + }, + "Iops": { + "description": "Iops of the Lightsail disk", + "type": "integer" + }, + "IsAttached": { + "description": "Check is Disk is attached state", + "type": "boolean" + }, + "Path": { + "description": "Path of the attached Disk", + "type": "string" + }, + "AttachedTo": { + "description": "Name of the attached Lightsail Instance", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "DiskName", + "SizeInGb" + ], + "readOnlyProperties": [ + "/properties/AttachedTo", + "/properties/Path", + "/properties/IsAttached", + "/properties/Iops", + "/properties/AttachmentState", + "/properties/State", + "/properties/ResourceType", + "/properties/Location/AvailabilityZone", + "/properties/Location/RegionName", + "/properties/SupportCode", + "/properties/DiskArn" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/DiskName" + ], + "createOnlyProperties": [ + "/properties/DiskName", + "/properties/AvailabilityZone", + "/properties/SizeInGb" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateDisk", + "lightsail:EnableAddOn", + "lightsail:DisableAddOn", + "lightsail:GetDisk", + "lightsail:GetDisks", + "lightsail:GetRegions", + "lightsail:TagResource", + "lightsail:UntagResource" + ] + }, + "read": { + "permissions": [ + "lightsail:GetDisk", + "lightsail:GetDisks" + ] + }, + "delete": { + "permissions": [ + "lightsail:GetDisk", + "lightsail:GetDisks", + "lightsail:DeleteDisk" + ] + }, + "list": { + "permissions": [ + "lightsail:GetDisks" + ] + }, + "update": { + "permissions": [ + "lightsail:GetDisk", + "lightsail:GetDisks", + "lightsail:EnableAddOn", + "lightsail:DisableAddOn", + "lightsail:TagResource", + "lightsail:UntagResource" + ], + "timeoutInMinutes": 2160 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/distribution.json b/internal/aws/cfn/schemas/aws/lightsail/distribution.json new file mode 100644 index 00000000..58401bc2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/distribution.json @@ -0,0 +1,305 @@ +{ + "typeName": "AWS::Lightsail::Distribution", + "description": "Resource Type definition for AWS::Lightsail::Distribution", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "CacheBehaviorPerPath": { + "description": "Describes the per-path cache behavior of an Amazon Lightsail content delivery network (CDN) distribution.", + "type": "object", + "properties": { + "Behavior": { + "type": "string", + "description": "The cache behavior for the specified path." + }, + "Path": { + "type": "string", + "description": "The path to a directory or file to cached, or not cache. Use an asterisk symbol to specify wildcard directories (path/to/assets/*), and file types (*.html, *jpg, *js). Directories and file paths are case-sensitive." + } + }, + "additionalProperties": false + }, + "CookieObject": { + "description": "Describes whether an Amazon Lightsail content delivery network (CDN) distribution forwards cookies to the origin and, if so, which ones.", + "type": "object", + "properties": { + "CookiesAllowList": { + "description": "The specific cookies to forward to your distribution's origin.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Option": { + "type": "string", + "description": "Specifies which cookies to forward to the distribution's origin for a cache behavior: all, none, or allow-list to forward only the cookies specified in the cookiesAllowList parameter." + } + }, + "additionalProperties": false + }, + "HeaderObject": { + "description": "Describes the request headers that a Lightsail distribution bases caching on.", + "type": "object", + "properties": { + "HeadersAllowList": { + "description": "The specific headers to forward to your distribution's origin.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Option": { + "type": "string", + "description": "The headers that you want your distribution to forward to your origin and base caching on." + } + }, + "additionalProperties": false + }, + "QueryStringObject": { + "description": "Describes the query string parameters that an Amazon Lightsail content delivery network (CDN) distribution to bases caching on.", + "type": "object", + "properties": { + "QueryStringsAllowList": { + "description": "The specific query strings that the distribution forwards to the origin.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Option": { + "type": "boolean", + "description": "Indicates whether the distribution forwards and caches based on query strings." + } + }, + "additionalProperties": false + }, + "CacheSettings": { + "description": "Describes the cache settings of an Amazon Lightsail content delivery network (CDN) distribution.", + "type": "object", + "properties": { + "AllowedHTTPMethods": { + "type": "string", + "description": "The HTTP methods that are processed and forwarded to the distribution's origin." + }, + "CachedHTTPMethods": { + "type": "string", + "description": "The HTTP method responses that are cached by your distribution." + }, + "DefaultTTL": { + "type": "integer", + "format": "int64", + "description": "The default amount of time that objects stay in the distribution's cache before the distribution forwards another request to the origin to determine whether the content has been updated." + }, + "MaximumTTL": { + "type": "integer", + "format": "int64", + "description": "The maximum amount of time that objects stay in the distribution's cache before the distribution forwards another request to the origin to determine whether the object has been updated." + }, + "MinimumTTL": { + "type": "integer", + "format": "int64", + "description": "The minimum amount of time that objects stay in the distribution's cache before the distribution forwards another request to the origin to determine whether the object has been updated." + }, + "ForwardedCookies": { + "$ref": "#/definitions/CookieObject", + "description": "An object that describes the cookies that are forwarded to the origin. Your content is cached based on the cookies that are forwarded." + }, + "ForwardedHeaders": { + "$ref": "#/definitions/HeaderObject", + "description": "An object that describes the headers that are forwarded to the origin. Your content is cached based on the headers that are forwarded." + }, + "ForwardedQueryStrings": { + "$ref": "#/definitions/QueryStringObject", + "description": "An object that describes the query strings that are forwarded to the origin. Your content is cached based on the query strings that are forwarded." + } + }, + "additionalProperties": false + }, + "CacheBehavior": { + "description": "Describes the default cache behavior of an Amazon Lightsail content delivery network (CDN) distribution.", + "type": "object", + "properties": { + "Behavior": { + "type": "string", + "description": "The cache behavior of the distribution." + } + }, + "additionalProperties": false + }, + "InputOrigin": { + "description": "Describes the origin resource of an Amazon Lightsail content delivery network (CDN) distribution.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of the origin resource." + }, + "ProtocolPolicy": { + "type": "string", + "description": "The protocol that your Amazon Lightsail distribution uses when establishing a connection with your origin to pull content." + }, + "RegionName": { + "type": "string", + "description": "The AWS Region name of the origin resource." + } + }, + "additionalProperties": false + } + }, + "properties": { + "DistributionName": { + "description": "The name for the distribution.", + "type": "string", + "pattern": "\\w[\\w\\-]*\\w" + }, + "DistributionArn": { + "type": "string" + }, + "BundleId": { + "description": "The bundle ID to use for the distribution.", + "type": "string" + }, + "IpAddressType": { + "description": "The IP address type for the distribution.", + "type": "string" + }, + "CacheBehaviors": { + "description": "An array of objects that describe the per-path cache behavior for the distribution.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CacheBehaviorPerPath" + } + }, + "CacheBehaviorSettings": { + "description": "An object that describes the cache behavior settings for the distribution.", + "$ref": "#/definitions/CacheSettings" + }, + "DefaultCacheBehavior": { + "description": "An object that describes the default cache behavior for the distribution.", + "$ref": "#/definitions/CacheBehavior" + }, + "Origin": { + "description": "An object that describes the origin resource for the distribution, such as a Lightsail instance or load balancer.", + "$ref": "#/definitions/InputOrigin" + }, + "Status": { + "description": "The status of the distribution.", + "type": "string" + }, + "AbleToUpdateBundle": { + "description": "Indicates whether the bundle that is currently applied to your distribution, specified using the distributionName parameter, can be changed to another bundle.", + "type": "boolean" + }, + "IsEnabled": { + "description": "Indicates whether the distribution is enabled.", + "type": "boolean" + }, + "CertificateName": { + "description": "The certificate attached to the Distribution.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "DistributionName", + "BundleId", + "DefaultCacheBehavior", + "Origin" + ], + "readOnlyProperties": [ + "/properties/DistributionArn", + "/properties/Status", + "/properties/AbleToUpdateBundle" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/DistributionName" + ], + "createOnlyProperties": [ + "/properties/DistributionName", + "/properties/IpAddressType" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:AttachCertificateToDistribution", + "lightsail:CreateDistribution", + "lightsail:DetachCertificateFromDistribution", + "lightsail:GetCertificates", + "lightsail:GetCertificateDetails", + "lightsail:GetDistributions", + "lightsail:TagResource", + "lightsail:UntagResource", + "lightsail:UpdateDistribution", + "lightsail:UpdateDistributionBundle" + ] + }, + "read": { + "permissions": [ + "lightsail:GetDistributions" + ] + }, + "update": { + "permissions": [ + "lightsail:AttachCertificateToDistribution", + "lightsail:DetachCertificateFromDistribution", + "lightsail:GetCertificates", + "lightsail:GetCertificateDetails", + "lightsail:GetDistributions", + "lightsail:TagResource", + "lightsail:UntagResource", + "lightsail:UpdateDistribution", + "lightsail:UpdateDistributionBundle" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteDistribution", + "lightsail:GetDistributions" + ] + }, + "list": { + "permissions": [ + "lightsail:GetDistributions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/instance.json b/internal/aws/cfn/schemas/aws/lightsail/instance.json new file mode 100644 index 00000000..b403496d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/instance.json @@ -0,0 +1,457 @@ +{ + "typeName": "AWS::Lightsail::Instance", + "description": "Resource Type definition for AWS::Lightsail::Instance", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + }, + "ipv6Cidrs": { + "description": "IPv6 Cidrs", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "cidrs": { + "description": "cidrs", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "cidrListAliases": { + "description": "cidr List Aliases", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "AutoSnapshotAddOn": { + "description": "An object that represents additional parameters when enabling or modifying the automatic snapshot add-on", + "type": "object", + "properties": { + "SnapshotTimeOfDay": { + "type": "string", + "description": "The daily time when an automatic snapshot will be created.", + "pattern": "^[0-9]{2}:00$" + } + }, + "additionalProperties": false + }, + "AddOn": { + "description": "A addon associate with a resource.", + "type": "object", + "properties": { + "AddOnType": { + "type": "string", + "description": "The add-on type", + "minLength": 1, + "maxLength": 128 + }, + "Status": { + "type": "string", + "description": "Status of the Addon", + "enum": [ + "Enabling", + "Disabling", + "Enabled", + "Terminating", + "Terminated", + "Disabled", + "Failed" + ] + }, + "AutoSnapshotAddOnRequest": { + "$ref": "#/definitions/AutoSnapshotAddOn" + } + }, + "required": [ + "AddOnType" + ], + "additionalProperties": false + }, + "Location": { + "description": "Location of a resource.", + "type": "object", + "properties": { + "AvailabilityZone": { + "type": "string", + "description": "The Availability Zone in which to create your instance. Use the following format: us-east-2a (case sensitive). Be sure to add the include Availability Zones parameter to your request." + }, + "RegionName": { + "type": "string", + "description": "The Region Name in which to create your instance." + } + }, + "additionalProperties": false + }, + "Disk": { + "description": "Disk associated with the Instance.", + "type": "object", + "properties": { + "DiskName": { + "description": "The names to use for your new Lightsail disk.", + "type": "string", + "pattern": "^[a-zA-Z0-9][\\w\\-.]*[a-zA-Z0-9]$", + "minLength": 1, + "maxLength": 254 + }, + "SizeInGb": { + "type": "string", + "description": "Size of the disk attached to the Instance." + }, + "IsSystemDisk": { + "type": "boolean", + "description": "Is the Attached disk is the system disk of the Instance." + }, + "IOPS": { + "type": "integer", + "description": "IOPS of disk." + }, + "Path": { + "type": "string", + "description": "Path of the disk attached to the instance." + }, + "AttachedTo": { + "type": "string", + "description": "Instance attached to the disk." + }, + "AttachmentState": { + "type": "string", + "description": "Attachment state of the disk." + } + }, + "required": [ + "DiskName", + "Path" + ], + "additionalProperties": false + }, + "Hardware": { + "description": "Hardware of the Instance.", + "type": "object", + "properties": { + "CpuCount": { + "type": "integer", + "description": "CPU count of the Instance." + }, + "RamSizeInGb": { + "type": "integer", + "description": "RAM Size of the Instance." + }, + "Disks": { + "description": "Disks attached to the Instance.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Disk" + } + } + }, + "additionalProperties": false + }, + "State": { + "description": "Current State of the Instance.", + "type": "object", + "properties": { + "Code": { + "type": "integer", + "description": "Status code of the Instance." + }, + "Name": { + "type": "string", + "description": "Status code of the Instance." + } + }, + "additionalProperties": false + }, + "Port": { + "description": "Port of the Instance.", + "type": "object", + "properties": { + "FromPort": { + "type": "integer", + "description": "From Port of the Instance." + }, + "ToPort": { + "type": "integer", + "description": "To Port of the Instance." + }, + "Protocol": { + "type": "string", + "description": "Port Protocol of the Instance." + }, + "AccessFrom": { + "type": "string", + "description": "Access From Protocol of the Instance." + }, + "AccessType": { + "type": "string", + "description": "Access Type Protocol of the Instance." + }, + "CommonName": { + "type": "string", + "description": "CommonName for Protocol of the Instance." + }, + "AccessDirection": { + "type": "string", + "description": "Access Direction for Protocol of the Instance(inbound/outbound)." + }, + "Ipv6Cidrs": { + "$ref": "#/definitions/ipv6Cidrs" + }, + "CidrListAliases": { + "$ref": "#/definitions/cidrListAliases" + }, + "Cidrs": { + "$ref": "#/definitions/cidrs" + } + }, + "additionalProperties": false + }, + "MonthlyTransfer": { + "description": "Monthly Transfer of the Instance.", + "type": "object", + "properties": { + "GbPerMonthAllocated": { + "type": "string", + "description": "GbPerMonthAllocated of the Instance." + } + }, + "additionalProperties": false + }, + "Networking": { + "description": "Networking of the Instance.", + "type": "object", + "properties": { + "Ports": { + "description": "Ports to the Instance.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Port" + } + }, + "MonthlyTransfer": { + "$ref": "#/definitions/MonthlyTransfer" + } + }, + "required": [ + "Ports" + ], + "additionalProperties": false + } + }, + "properties": { + "SupportCode": { + "description": "Support code to help identify any issues", + "type": "string" + }, + "ResourceType": { + "description": "Resource type of Lightsail instance.", + "type": "string" + }, + "IsStaticIp": { + "description": "Is the IP Address of the Instance is the static IP", + "type": "boolean" + }, + "PrivateIpAddress": { + "description": "Private IP Address of the Instance", + "type": "string" + }, + "PublicIpAddress": { + "description": "Public IP Address of the Instance", + "type": "string" + }, + "Location": { + "$ref": "#/definitions/Location" + }, + "Hardware": { + "$ref": "#/definitions/Hardware" + }, + "State": { + "$ref": "#/definitions/State" + }, + "Networking": { + "$ref": "#/definitions/Networking" + }, + "UserName": { + "description": "Username of the Lightsail instance.", + "type": "string" + }, + "SshKeyName": { + "description": "SSH Key Name of the Lightsail instance.", + "type": "string" + }, + "InstanceName": { + "description": "The names to use for your new Lightsail instance.", + "type": "string", + "pattern": "^[a-zA-Z0-9][\\w\\-.]*[a-zA-Z0-9]$", + "minLength": 1, + "maxLength": 254 + }, + "AvailabilityZone": { + "description": "The Availability Zone in which to create your instance. Use the following format: us-east-2a (case sensitive). Be sure to add the include Availability Zones parameter to your request.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "BundleId": { + "description": "The bundle of specification information for your virtual private server (or instance ), including the pricing plan (e.g., micro_1_0 ).", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "BlueprintId": { + "description": "The ID for a virtual private server image (e.g., app_wordpress_4_4 or app_lamp_7_0 ). Use the get blueprints operation to return a list of available images (or blueprints ).", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "AddOns": { + "description": "An array of objects representing the add-ons to enable for the new instance.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AddOn" + } + }, + "UserData": { + "description": "A launch script you can create that configures a server with additional user data. For example, you might want to run apt-get -y update.", + "type": "string" + }, + "KeyPairName": { + "description": "The name of your key pair.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "InstanceArn": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "InstanceName", + "BlueprintId", + "BundleId" + ], + "readOnlyProperties": [ + "/properties/InstanceArn", + "/properties/SshKeyName", + "/properties/SupportCode", + "/properties/ResourceType", + "/properties/IsStaticIp", + "/properties/PrivateIpAddress", + "/properties/PublicIpAddress", + "/properties/Location/AvailabilityZone", + "/properties/Location/RegionName", + "/properties/Hardware/CpuCount", + "/properties/Hardware/RamSizeInGb", + "/properties/State/Code", + "/properties/State/Name", + "/properties/UserName", + "/properties/Networking/MonthlyTransfer/GbPerMonthAllocated" + ], + "writeOnlyProperties": [ + "/properties/UserData" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/InstanceName" + ], + "createOnlyProperties": [ + "/properties/InstanceName", + "/properties/BlueprintId", + "/properties/BundleId", + "/properties/AvailabilityZone" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateInstances", + "lightsail:GetInstances", + "lightsail:EnableAddOn", + "lightsail:GetInstance", + "lightsail:DisableAddOn", + "lightsail:PutInstancePublicPorts", + "lightsail:AttachDisk", + "lightsail:DetachDisk", + "lightsail:StartInstance", + "lightsail:StopInstance", + "lightsail:GetDisk", + "lightsail:GetRegions", + "lightsail:TagResource", + "lightsail:UntagResource" + ] + }, + "read": { + "permissions": [ + "lightsail:GetInstances", + "lightsail:GetInstance" + ] + }, + "delete": { + "permissions": [ + "lightsail:GetInstances", + "lightsail:GetInstance", + "lightsail:DeleteInstance" + ] + }, + "list": { + "permissions": [ + "lightsail:GetInstances" + ] + }, + "update": { + "permissions": [ + "lightsail:GetInstances", + "lightsail:GetInstance", + "lightsail:DeleteInstance", + "lightsail:EnableAddOn", + "lightsail:DisableAddOn", + "lightsail:PutInstancePublicPorts", + "lightsail:AttachDisk", + "lightsail:DetachDisk", + "lightsail:StartInstance", + "lightsail:StopInstance", + "lightsail:GetDisk", + "lightsail:TagResource", + "lightsail:UntagResource" + ], + "timeoutInMinutes": 2160 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/loadbalancer.json b/internal/aws/cfn/schemas/aws/lightsail/loadbalancer.json new file mode 100644 index 00000000..ba2bd91e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/loadbalancer.json @@ -0,0 +1,143 @@ +{ + "typeName": "AWS::Lightsail::LoadBalancer", + "description": "Resource Type definition for AWS::Lightsail::LoadBalancer", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "LoadBalancerName": { + "description": "The name of your load balancer.", + "type": "string", + "pattern": "\\w[\\w\\-]*\\w" + }, + "LoadBalancerArn": { + "type": "string" + }, + "InstancePort": { + "description": "The instance port where you're creating your load balancer.", + "type": "integer" + }, + "IpAddressType": { + "description": "The IP address type for the load balancer. The possible values are ipv4 for IPv4 only, and dualstack for IPv4 and IPv6. The default value is dualstack.", + "type": "string" + }, + "AttachedInstances": { + "description": "The names of the instances attached to the load balancer.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "HealthCheckPath": { + "description": "The path you provided to perform the load balancer health check. If you didn't specify a health check path, Lightsail uses the root path of your website (e.g., \"/\").", + "type": "string" + }, + "SessionStickinessEnabled": { + "description": "Configuration option to enable session stickiness.", + "type": "boolean" + }, + "SessionStickinessLBCookieDurationSeconds": { + "description": "Configuration option to adjust session stickiness cookie duration parameter.", + "type": "string" + }, + "TlsPolicyName": { + "description": "The name of the TLS policy to apply to the load balancer.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "LoadBalancerName", + "InstancePort" + ], + "readOnlyProperties": [ + "/properties/LoadBalancerArn" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/LoadBalancerName" + ], + "createOnlyProperties": [ + "/properties/LoadBalancerName", + "/properties/InstancePort", + "/properties/IpAddressType" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateLoadBalancer", + "lightsail:GetLoadBalancer", + "lightsail:GetLoadBalancers", + "lightsail:GetInstance", + "lightsail:AttachInstancesToLoadBalancer", + "lightsail:DetachInstancesFromLoadBalancer", + "lightsail:UpdateLoadBalancerAttribute", + "lightsail:TagResource", + "lightsail:UntagResource" + ] + }, + "read": { + "permissions": [ + "lightsail:GetLoadBalancer", + "lightsail:GetLoadBalancers" + ] + }, + "update": { + "permissions": [ + "lightsail:GetLoadBalancer", + "lightsail:GetLoadBalancers", + "lightsail:GetInstance", + "lightsail:AttachInstancesToLoadBalancer", + "lightsail:DetachInstancesFromLoadBalancer", + "lightsail:UpdateLoadBalancerAttribute", + "lightsail:TagResource", + "lightsail:UntagResource" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteLoadBalancer", + "lightsail:GetLoadBalancer", + "lightsail:GetLoadBalancers" + ] + }, + "list": { + "permissions": [ + "lightsail:GetLoadBalancers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/loadbalancertlscertificate.json b/internal/aws/cfn/schemas/aws/lightsail/loadbalancertlscertificate.json new file mode 100644 index 00000000..1bbbe476 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/loadbalancertlscertificate.json @@ -0,0 +1,103 @@ +{ + "typeName": "AWS::Lightsail::LoadBalancerTlsCertificate", + "description": "Resource Type definition for AWS::Lightsail::LoadBalancerTlsCertificate", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "properties": { + "LoadBalancerName": { + "description": "The name of your load balancer.", + "type": "string", + "pattern": "\\w[\\w\\-]*\\w" + }, + "CertificateName": { + "description": "The SSL/TLS certificate name.", + "type": "string" + }, + "CertificateDomainName": { + "description": "The domain name (e.g., example.com ) for your SSL/TLS certificate.", + "type": "string" + }, + "CertificateAlternativeNames": { + "description": "An array of strings listing alternative domains and subdomains for your SSL/TLS certificate.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "LoadBalancerTlsCertificateArn": { + "type": "string" + }, + "IsAttached": { + "description": "When true, the SSL/TLS certificate is attached to the Lightsail load balancer.", + "type": "boolean" + }, + "HttpsRedirectionEnabled": { + "description": "A Boolean value that indicates whether HTTPS redirection is enabled for the load balancer.", + "type": "boolean" + }, + "Status": { + "description": "The validation status of the SSL/TLS certificate.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "LoadBalancerName", + "CertificateName", + "CertificateDomainName" + ], + "readOnlyProperties": [ + "/properties/LoadBalancerTlsCertificateArn", + "/properties/Status" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/CertificateName", + "/properties/LoadBalancerName" + ], + "createOnlyProperties": [ + "/properties/LoadBalancerName", + "/properties/CertificateName", + "/properties/CertificateDomainName", + "/properties/CertificateAlternativeNames" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:CreateLoadBalancerTlsCertificate", + "lightsail:GetLoadBalancerTlsCertificates", + "lightsail:GetLoadBalancer", + "lightsail:AttachLoadBalancerTlsCertificate", + "lightsail:UpdateLoadBalancerAttribute" + ] + }, + "read": { + "permissions": [ + "lightsail:GetLoadBalancerTlsCertificates", + "lightsail:GetLoadBalancer" + ] + }, + "update": { + "permissions": [ + "lightsail:AttachLoadBalancerTlsCertificate", + "lightsail:GetLoadBalancerTlsCertificates", + "lightsail:GetLoadBalancer", + "lightsail:UpdateLoadBalancerAttribute" + ] + }, + "delete": { + "permissions": [ + "lightsail:DeleteLoadBalancerTlsCertificate", + "lightsail:GetLoadBalancerTlsCertificates", + "lightsail:GetLoadBalancer" + ] + }, + "list": { + "permissions": [ + "lightsail:GetLoadBalancerTlsCertificates", + "lightsail:GetLoadBalancer" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lightsail/staticip.json b/internal/aws/cfn/schemas/aws/lightsail/staticip.json new file mode 100644 index 00000000..19e5532d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lightsail/staticip.json @@ -0,0 +1,82 @@ +{ + "typeName": "AWS::Lightsail::StaticIp", + "description": "Resource Type definition for AWS::Lightsail::StaticIp", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lightsail.git", + "definitions": {}, + "properties": { + "StaticIpName": { + "description": "The name of the static IP address.", + "type": "string" + }, + "AttachedTo": { + "description": "The instance where the static IP is attached.", + "type": "string" + }, + "IsAttached": { + "description": "A Boolean value indicating whether the static IP is attached.", + "type": "boolean" + }, + "IpAddress": { + "description": "The static IP address.", + "type": "string" + }, + "StaticIpArn": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "StaticIpName" + ], + "readOnlyProperties": [ + "/properties/StaticIpArn", + "/properties/IsAttached", + "/properties/IpAddress" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/StaticIpName" + ], + "createOnlyProperties": [ + "/properties/StaticIpName" + ], + "handlers": { + "create": { + "permissions": [ + "lightsail:AllocateStaticIp", + "lightsail:AttachStaticIp", + "lightsail:DetachStaticIp", + "lightsail:GetInstance", + "lightsail:GetStaticIp", + "lightsail:GetStaticIps" + ] + }, + "read": { + "permissions": [ + "lightsail:GetStaticIp", + "lightsail:GetStaticIps" + ] + }, + "update": { + "permissions": [ + "lightsail:AttachStaticIp", + "lightsail:DetachStaticIp", + "lightsail:GetInstance", + "lightsail:GetStaticIp", + "lightsail:GetStaticIps" + ] + }, + "delete": { + "permissions": [ + "lightsail:GetStaticIp", + "lightsail:GetStaticIps", + "lightsail:ReleaseStaticIp" + ] + }, + "list": { + "permissions": [ + "lightsail:GetStaticIps" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/location/geofencecollection.json b/internal/aws/cfn/schemas/aws/location/geofencecollection.json new file mode 100644 index 00000000..9b253726 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/location/geofencecollection.json @@ -0,0 +1,174 @@ +{ + "typeName": "AWS::Location::GeofenceCollection", + "description": "Definition of AWS::Location::GeofenceCollection Resource Type", + "definitions": { + "PricingPlan": { + "type": "string", + "enum": [ + "RequestBasedUsage" + ] + }, + "TagMap": { + "type": "object", + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "iso8601UTC": { + "description": "The datetime value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ss.sssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + } + }, + "properties": { + "CollectionArn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + }, + "CollectionName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + }, + "CreateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "KmsKeyId": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "PricingPlan": { + "$ref": "#/definitions/PricingPlan" + }, + "PricingPlanDataSource": { + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UpdateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Arn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + } + }, + "readOnlyProperties": [ + "/properties/CollectionArn", + "/properties/Arn", + "/properties/CreateTime", + "/properties/UpdateTime" + ], + "createOnlyProperties": [ + "/properties/CollectionName", + "/properties/KmsKeyId" + ], + "deprecatedProperties": [ + "/properties/PricingPlan", + "/properties/PricingPlanDataSource" + ], + "primaryIdentifier": [ + "/properties/CollectionName" + ], + "handlers": { + "create": { + "permissions": [ + "geo:CreateGeofenceCollection", + "geo:DescribeGeofenceCollection", + "geo:TagResource", + "geo:UntagResource", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "geo:DescribeGeofenceCollection", + "kms:DescribeKey" + ] + }, + "update": { + "permissions": [ + "geo:CreateGeofenceCollection", + "geo:DescribeGeofenceCollection", + "geo:TagResource", + "geo:UntagResource", + "kms:DescribeKey", + "kms:CreateGrant", + "geo:UpdateGeofenceCollection" + ] + }, + "delete": { + "permissions": [ + "geo:DeleteGeofenceCollection", + "geo:DescribeGeofenceCollection" + ] + }, + "list": { + "permissions": [ + "geo:ListGeofenceCollections" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "CollectionName" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/location/map.json b/internal/aws/cfn/schemas/aws/location/map.json new file mode 100644 index 00000000..f48edf7c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/location/map.json @@ -0,0 +1,192 @@ +{ + "typeName": "AWS::Location::Map", + "description": "Definition of AWS::Location::Map Resource Type", + "definitions": { + "MapConfiguration": { + "type": "object", + "properties": { + "Style": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + }, + "PoliticalView": { + "type": "string", + "maxLength": 3, + "minLength": 3, + "pattern": "^[A-Z]{3}$" + }, + "CustomLayers": { + "type": "array", + "items": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + }, + "maxItems": 10 + } + }, + "required": [ + "Style" + ], + "additionalProperties": false + }, + "PricingPlan": { + "type": "string", + "enum": [ + "RequestBasedUsage" + ] + }, + "TagMap": { + "type": "object", + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "iso8601UTC": { + "description": "The datetime value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ss.sssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + } + }, + "properties": { + "Configuration": { + "$ref": "#/definitions/MapConfiguration" + }, + "CreateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "MapArn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*):geo(:([a-z0-9]+([.-][a-z0-9]+)*))(:[0-9]+):((\\*)|([-a-z]+[/][*-._\\w]+))$" + }, + "MapName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + }, + "PricingPlan": { + "$ref": "#/definitions/PricingPlan" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UpdateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Arn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + } + }, + "required": [ + "Configuration", + "MapName" + ], + "readOnlyProperties": [ + "/properties/CreateTime", + "/properties/Arn", + "/properties/MapArn", + "/properties/UpdateTime" + ], + "createOnlyProperties": [ + "/properties/Configuration", + "/properties/MapName" + ], + "primaryIdentifier": [ + "/properties/MapName" + ], + "handlers": { + "create": { + "permissions": [ + "geo:CreateMap", + "geo:DescribeMap", + "geo:TagResource", + "geo:UntagResource" + ] + }, + "read": { + "permissions": [ + "geo:DescribeMap" + ] + }, + "update": { + "permissions": [ + "geo:CreateMap", + "geo:DescribeMap", + "geo:TagResource", + "geo:UntagResource", + "geo:UpdateMap" + ] + }, + "delete": { + "permissions": [ + "geo:DeleteMap", + "geo:DescribeMap" + ] + }, + "list": { + "permissions": [ + "geo:ListMaps" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/location/placeindex.json b/internal/aws/cfn/schemas/aws/location/placeindex.json new file mode 100644 index 00000000..10fe837e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/location/placeindex.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::Location::PlaceIndex", + "description": "Definition of AWS::Location::PlaceIndex Resource Type", + "definitions": { + "DataSourceConfiguration": { + "type": "object", + "properties": { + "IntendedUse": { + "$ref": "#/definitions/IntendedUse" + } + }, + "additionalProperties": false + }, + "IntendedUse": { + "type": "string", + "enum": [ + "SingleUse", + "Storage" + ] + }, + "PricingPlan": { + "type": "string", + "enum": [ + "RequestBasedUsage" + ] + }, + "TagMap": { + "type": "object", + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "iso8601UTC": { + "description": "The datetime value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ss.sssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + } + }, + "properties": { + "CreateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "DataSource": { + "type": "string" + }, + "DataSourceConfiguration": { + "$ref": "#/definitions/DataSourceConfiguration" + }, + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "IndexArn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*):geo(:([a-z0-9]+([.-][a-z0-9]+)*))(:[0-9]+):((\\*)|([-a-z]+[/][*-._\\w]+))$" + }, + "IndexName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + }, + "PricingPlan": { + "$ref": "#/definitions/PricingPlan" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UpdateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Arn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + } + }, + "required": [ + "DataSource", + "IndexName" + ], + "readOnlyProperties": [ + "/properties/CreateTime", + "/properties/Arn", + "/properties/IndexArn", + "/properties/UpdateTime" + ], + "createOnlyProperties": [ + "/properties/DataSource", + "/properties/IndexName" + ], + "primaryIdentifier": [ + "/properties/IndexName" + ], + "handlers": { + "create": { + "permissions": [ + "geo:CreatePlaceIndex", + "geo:DescribePlaceIndex", + "geo:TagResource", + "geo:UntagResource" + ] + }, + "read": { + "permissions": [ + "geo:DescribePlaceIndex" + ] + }, + "update": { + "permissions": [ + "geo:CreatePlaceIndex", + "geo:DescribePlaceIndex", + "geo:TagResource", + "geo:UntagResource", + "geo:UpdatePlaceIndex" + ] + }, + "delete": { + "permissions": [ + "geo:DeletePlaceIndex", + "geo:DescribePlaceIndex" + ] + }, + "list": { + "permissions": [ + "geo:ListPlaceIndexes" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/location/routecalculator.json b/internal/aws/cfn/schemas/aws/location/routecalculator.json new file mode 100644 index 00000000..e86f5a2d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/location/routecalculator.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::Location::RouteCalculator", + "description": "Definition of AWS::Location::RouteCalculator Resource Type", + "definitions": { + "PricingPlan": { + "type": "string", + "enum": [ + "RequestBasedUsage" + ] + }, + "TagMap": { + "type": "object", + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "iso8601UTC": { + "description": "The datetime value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ss.sssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + } + }, + "properties": { + "CalculatorArn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*):geo(:([a-z0-9]+([.-][a-z0-9]+)*))(:[0-9]+):((\\*)|([-a-z]+[/][*-._\\w]+))$" + }, + "CalculatorName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + }, + "CreateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "DataSource": { + "type": "string" + }, + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "PricingPlan": { + "$ref": "#/definitions/PricingPlan" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UpdateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Arn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + } + }, + "required": [ + "DataSource", + "CalculatorName" + ], + "readOnlyProperties": [ + "/properties/CalculatorArn", + "/properties/Arn", + "/properties/CreateTime", + "/properties/UpdateTime" + ], + "createOnlyProperties": [ + "/properties/CalculatorName", + "/properties/DataSource" + ], + "primaryIdentifier": [ + "/properties/CalculatorName" + ], + "handlers": { + "create": { + "permissions": [ + "geo:CreateRouteCalculator", + "geo:DescribeRouteCalculator", + "geo:TagResource", + "geo:UntagResource" + ] + }, + "read": { + "permissions": [ + "geo:DescribeRouteCalculator" + ] + }, + "update": { + "permissions": [ + "geo:CreateRouteCalculator", + "geo:DescribeRouteCalculator", + "geo:TagResource", + "geo:UntagResource", + "geo:UpdateRouteCalculator" + ] + }, + "delete": { + "permissions": [ + "geo:DeleteRouteCalculator", + "geo:DescribeRouteCalculator" + ] + }, + "list": { + "permissions": [ + "geo:ListRouteCalculators" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/location/tracker.json b/internal/aws/cfn/schemas/aws/location/tracker.json new file mode 100644 index 00000000..fc73819e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/location/tracker.json @@ -0,0 +1,191 @@ +{ + "typeName": "AWS::Location::Tracker", + "description": "Definition of AWS::Location::Tracker Resource Type", + "definitions": { + "PositionFiltering": { + "type": "string", + "enum": [ + "TimeBased", + "DistanceBased", + "AccuracyBased" + ] + }, + "PricingPlan": { + "type": "string", + "enum": [ + "RequestBasedUsage" + ] + }, + "TagMap": { + "type": "object", + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256, + "pattern": "^[A-Za-z0-9 _=@:.+-/]*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "iso8601UTC": { + "description": "The datetime value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ss.sssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + } + }, + "properties": { + "CreateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "EventBridgeEnabled": { + "type": "boolean" + }, + "KmsKeyEnableGeospatialQueries": { + "type": "boolean" + }, + "KmsKeyId": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "PositionFiltering": { + "$ref": "#/definitions/PositionFiltering" + }, + "PricingPlan": { + "$ref": "#/definitions/PricingPlan" + }, + "PricingPlanDataSource": { + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TrackerArn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + }, + "TrackerName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + }, + "UpdateTime": { + "$ref": "#/definitions/iso8601UTC" + }, + "Arn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + } + }, + "readOnlyProperties": [ + "/properties/CreateTime", + "/properties/Arn", + "/properties/TrackerArn", + "/properties/UpdateTime" + ], + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/TrackerName" + ], + "deprecatedProperties": [ + "/properties/PricingPlan", + "/properties/PricingPlanDataSource" + ], + "primaryIdentifier": [ + "/properties/TrackerName" + ], + "handlers": { + "create": { + "permissions": [ + "geo:CreateTracker", + "geo:DescribeTracker", + "geo:TagResource", + "geo:UntagResource", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "geo:DescribeTracker", + "kms:DescribeKey" + ] + }, + "update": { + "permissions": [ + "geo:CreateTracker", + "geo:DescribeTracker", + "geo:TagResource", + "geo:UntagResource", + "kms:DescribeKey", + "kms:CreateGrant", + "geo:UpdateTracker" + ] + }, + "delete": { + "permissions": [ + "geo:DeleteTracker", + "geo:DescribeTracker" + ] + }, + "list": { + "permissions": [ + "geo:ListTrackers" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "TrackerName" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/location/trackerconsumer.json b/internal/aws/cfn/schemas/aws/location/trackerconsumer.json new file mode 100644 index 00000000..90f8db34 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/location/trackerconsumer.json @@ -0,0 +1,60 @@ +{ + "typeName": "AWS::Location::TrackerConsumer", + "description": "Definition of AWS::Location::TrackerConsumer Resource Type", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "ConsumerArn": { + "type": "string", + "maxLength": 1600, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + }, + "TrackerName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[-._\\w]+$" + } + }, + "additionalProperties": false, + "required": [ + "ConsumerArn", + "TrackerName" + ], + "createOnlyProperties": [ + "/properties/TrackerName", + "/properties/ConsumerArn" + ], + "primaryIdentifier": [ + "/properties/TrackerName", + "/properties/ConsumerArn" + ], + "handlers": { + "create": { + "permissions": [ + "geo:AssociateTrackerConsumer", + "geo:ListTrackerConsumers" + ] + }, + "delete": { + "permissions": [ + "geo:DisassociateTrackerConsumer", + "geo:ListTrackerConsumers" + ] + }, + "list": { + "permissions": [ + "geo:ListTrackerConsumers" + ] + }, + "read": { + "permissions": [ + "geo:ListTrackerConsumers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/logs/accountpolicy.json b/internal/aws/cfn/schemas/aws/logs/accountpolicy.json new file mode 100644 index 00000000..ef76c484 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/accountpolicy.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::Logs::AccountPolicy", + "description": "The AWS::Logs::AccountPolicy resource specifies a CloudWatch Logs AccountPolicy.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "replacementStrategy": "delete_then_create", + "properties": { + "AccountId": { + "description": "User account id", + "type": "string", + "pattern": "^\\d{12}$" + }, + "PolicyName": { + "description": "The name of the account policy", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[^:*]{1,256}$" + }, + "PolicyDocument": { + "description": "The body of the policy document you want to use for this topic.\n\nYou can only add one policy per PolicyType.\n\nThe policy must be in JSON string format.\n\nLength Constraints: Maximum length of 30720", + "type": "string", + "minLength": 1, + "maxLength": 30720 + }, + "PolicyType": { + "description": "Type of the policy.", + "type": "string", + "enum": [ + "DATA_PROTECTION_POLICY", + "SUBSCRIPTION_FILTER_POLICY" + ] + }, + "Scope": { + "description": "Scope for policy application", + "type": "string", + "enum": [ + "ALL" + ] + }, + "SelectionCriteria": { + "description": "Log group selection criteria to apply policy only to a subset of log groups. SelectionCriteria string can be up to 25KB and cloudwatchlogs determines the length of selectionCriteria by using its UTF-8 bytes", + "type": "string" + } + }, + "handlers": { + "create": { + "permissions": [ + "logs:PutAccountPolicy", + "logs:PutDataProtectionPolicy", + "logs:DescribeAccountPolicies", + "logs:CreateLogDelivery", + "s3:REST.PUT.OBJECT", + "firehose:TagDeliveryStream", + "logs:PutSubscriptionFilter", + "logs:DeleteSubscriptionFilter", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "logs:DescribeAccountPolicies" + ] + }, + "update": { + "permissions": [ + "logs:PutAccountPolicy", + "logs:PutDataProtectionPolicy", + "logs:DescribeAccountPolicies", + "logs:DeleteAccountPolicy", + "logs:DeleteDataProtectionPolicy", + "logs:CreateLogDelivery", + "logs:PutSubscriptionFilter", + "logs:DeleteSubscriptionFilter", + "s3:REST.PUT.OBJECT", + "firehose:TagDeliveryStream", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteAccountPolicy", + "logs:DeleteDataProtectionPolicy", + "logs:DescribeAccountPolicies", + "logs:DeleteSubscriptionFilter", + "iam:PassRole" + ] + }, + "list": { + "permissions": [ + "logs:DescribeAccountPolicies" + ], + "handlerSchema": { + "properties": { + "PolicyType": { + "$ref": "resource-schema.json#/properties/PolicyType" + } + }, + "required": [ + "PolicyType" + ] + } + } + }, + "required": [ + "PolicyName", + "PolicyType", + "PolicyDocument" + ], + "createOnlyProperties": [ + "/properties/PolicyName", + "/properties/PolicyType" + ], + "readOnlyProperties": [ + "/properties/AccountId" + ], + "primaryIdentifier": [ + "/properties/AccountId", + "/properties/PolicyType", + "/properties/PolicyName" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/logs/destination.json b/internal/aws/cfn/schemas/aws/logs/destination.json new file mode 100644 index 00000000..f23d9587 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/destination.json @@ -0,0 +1,83 @@ +{ + "typeName": "AWS::Logs::Destination", + "description": "The AWS::Logs::Destination resource specifies a CloudWatch Logs destination. A destination encapsulates a physical resource (such as an Amazon Kinesis data stream) and enables you to subscribe that resource to a stream of log events.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "tagging": { + "taggable": false + }, + "properties": { + "Arn": { + "type": "string" + }, + "DestinationName": { + "description": "The name of the destination resource", + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^[^:*]{1,512}$" + }, + "DestinationPolicy": { + "description": "An IAM policy document that governs which AWS accounts can create subscription filters against this destination.", + "type": "string", + "minLength": 1 + }, + "RoleArn": { + "description": "The ARN of an IAM role that permits CloudWatch Logs to send data to the specified AWS resource", + "type": "string", + "minLength": 1 + }, + "TargetArn": { + "description": "The ARN of the physical target where the log events are delivered (for example, a Kinesis stream)", + "type": "string", + "minLength": 1 + } + }, + "handlers": { + "create": { + "permissions": [ + "logs:PutDestination", + "logs:PutDestinationPolicy", + "logs:DescribeDestinations", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "logs:DescribeDestinations" + ] + }, + "update": { + "permissions": [ + "logs:PutDestination", + "logs:PutDestinationPolicy", + "logs:DescribeDestinations", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteDestination" + ] + }, + "list": { + "permissions": [ + "logs:DescribeDestinations" + ] + } + }, + "required": [ + "DestinationName", + "TargetArn", + "RoleArn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/DestinationName" + ], + "primaryIdentifier": [ + "/properties/DestinationName" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/logs/loggroup.json b/internal/aws/cfn/schemas/aws/logs/loggroup.json new file mode 100644 index 00000000..8a481b00 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/loggroup.json @@ -0,0 +1,177 @@ +{ + "typeName": "AWS::Logs::LogGroup", + "description": "The ``AWS::Logs::LogGroup`` resource specifies a log group. A log group defines common properties for log streams, such as their retention and access control rules. Each log stream must belong to one log group.\n You can create up to 1,000,000 log groups per Region per account. You must use the following guidelines when naming a log group:\n + Log group names must be unique within a Region for an AWS account.\n + Log group names can be between 1 and 512 characters long.\n + Log group names consist of the following characters: a-z, A-Z, 0-9, '_' (underscore), '-' (hyphen), '/' (forward slash), and '.' (period).", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "definitions": { + "Tag": { + "description": "", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "LogGroupName": { + "description": "The name of the log group. If you don't specify a name, CFNlong generates a unique ID for the log group.", + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^[.\\-_/#A-Za-z0-9]{1,512}\\Z" + }, + "KmsKeyId": { + "description": "The Amazon Resource Name (ARN) of the KMS key to use when encrypting log data.\n To associate an KMS key with the log group, specify the ARN of that KMS key here. If you do so, ingested data is encrypted using this key. This association is stored as long as the data encrypted with the KMS key is still within CWL. This enables CWL to decrypt this data whenever it is requested.\n If you attempt to associate a KMS key with the log group but the KMS key doesn't exist or is deactivated, you will receive an ``InvalidParameterException`` error.\n Log group data is always encrypted in CWL. If you omit this key, the encryption does not use KMS. For more information, see [Encrypt log data in using](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)", + "type": "string", + "maxLength": 256, + "pattern": "^arn:[a-z0-9-]+:kms:[a-z0-9-]+:\\d{12}:(key|alias)/.+\\Z" + }, + "DataProtectionPolicy": { + "description": "Creates a data protection policy and assigns it to the log group. A data protection policy can help safeguard sensitive data that's ingested by the log group by auditing and masking the sensitive log data. When a user who does not have permission to view masked data views a log event that includes masked data, the sensitive data is replaced by asterisks.\n For more information, including a list of types of data that can be audited and masked, see [Protect sensitive log data with masking](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data.html).", + "type": "object" + }, + "LogGroupClass": { + "description": "Specifies the log group class for this log group. There are two classes:\n + The ``Standard`` log class supports all CWL features.\n + The ``Infrequent Access`` log class supports a subset of CWL features and incurs lower costs.\n \n For details about the features supported by each class, see [Log classes](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html)", + "type": "string", + "enum": [ + "STANDARD", + "INFREQUENT_ACCESS" + ], + "default": "STANDARD" + }, + "RetentionInDays": { + "description": "The number of days to retain the log events in the specified log group. Possible values are: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1096, 1827, 2192, 2557, 2922, 3288, and 3653.\n To set a log group so that its log events do not expire, use [DeleteRetentionPolicy](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteRetentionPolicy.html).", + "type": "integer", + "enum": [ + 1, + 3, + 5, + 7, + 14, + 30, + 60, + 90, + 120, + 150, + 180, + 365, + 400, + 545, + 731, + 1096, + 1827, + 2192, + 2557, + 2922, + 3288, + 3653 + ] + }, + "Tags": { + "description": "An array of key-value pairs to apply to the log group.\n For more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html).", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "", + "type": "string" + } + }, + "handlers": { + "create": { + "permissions": [ + "logs:DescribeLogGroups", + "logs:CreateLogGroup", + "logs:PutRetentionPolicy", + "logs:TagResource", + "logs:GetDataProtectionPolicy", + "logs:PutDataProtectionPolicy", + "logs:CreateLogDelivery", + "s3:REST.PUT.OBJECT", + "firehose:TagDeliveryStream", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies" + ] + }, + "read": { + "permissions": [ + "logs:DescribeLogGroups", + "logs:ListTagsForResource", + "logs:GetDataProtectionPolicy" + ] + }, + "update": { + "permissions": [ + "logs:DescribeLogGroups", + "logs:AssociateKmsKey", + "logs:DisassociateKmsKey", + "logs:PutRetentionPolicy", + "logs:DeleteRetentionPolicy", + "logs:TagResource", + "logs:UntagResource", + "logs:GetDataProtectionPolicy", + "logs:PutDataProtectionPolicy", + "logs:CreateLogDelivery", + "s3:REST.PUT.OBJECT", + "firehose:TagDeliveryStream" + ] + }, + "delete": { + "permissions": [ + "logs:DescribeLogGroups", + "logs:DeleteLogGroup", + "logs:DeleteDataProtectionPolicy" + ] + }, + "list": { + "permissions": [ + "logs:DescribeLogGroups", + "logs:ListTagsForResource" + ], + "handlerSchema": { + "properties": { + "LogGroupName": { + "$ref": "resource-schema.json#/properties/LogGroupName" + } + }, + "required": [] + } + } + }, + "createOnlyProperties": [ + "/properties/LogGroupName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/LogGroupName" + ], + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/logs/logstream.json b/internal/aws/cfn/schemas/aws/logs/logstream.json new file mode 100644 index 00000000..4d7bfc72 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/logstream.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::Logs::LogStream", + "description": "Resource Type definition for AWS::Logs::LogStream", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "additionalProperties": false, + "properties": { + "LogGroupName": { + "type": "string", + "description": "The name of the log group where the log stream is created." + }, + "LogStreamName": { + "type": "string", + "description": "The name of the log stream. The name must be unique wihtin the log group." + } + }, + "tagging": { + "taggable": false + }, + "required": [ + "LogGroupName" + ], + "createOnlyProperties": [ + "/properties/LogGroupName", + "/properties/LogStreamName" + ], + "primaryIdentifier": [ + "/properties/LogGroupName", + "/properties/LogStreamName" + ], + "handlers": { + "create": { + "permissions": [ + "logs:CreateLogStream", + "logs:DescribeLogStreams" + ] + }, + "read": { + "permissions": [ + "logs:DescribeLogStreams" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteLogStream" + ] + }, + "list": { + "permissions": [ + "logs:DescribeLogStreams" + ], + "handlerSchema": { + "properties": { + "LogGroupName": { + "$ref": "resource-schema.json#/properties/LogGroupName" + } + }, + "required": [ + "LogGroupName" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/logs/metricfilter.json b/internal/aws/cfn/schemas/aws/logs/metricfilter.json new file mode 100644 index 00000000..47599fb6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/metricfilter.json @@ -0,0 +1,197 @@ +{ + "typeName": "AWS::Logs::MetricFilter", + "resourceLink": { + "templateUri": "/cloudwatch/home?region=${awsRegion}#logsV2:log-groups/log-group/${LogGroupName}/edit-metric-filter/${MetricName}", + "mappings": { + "MetricName": "/MetricName", + "LogGroupName": "/LogGroupName" + } + }, + "description": "The ``AWS::Logs::MetricFilter`` resource specifies a metric filter that describes how CWL extracts information from logs and transforms it into Amazon CloudWatch metrics. If you have multiple metric filters that are associated with a log group, all the filters are applied to the log streams in that group.\n The maximum number of metric filters that can be associated with a log group is 100.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "tagging": { + "taggable": false + }, + "replacementStrategy": "delete_then_create", + "definitions": { + "Dimension": { + "description": "Specifies the CW metric dimensions to publish with this metric.\n Because dimensions are part of the unique identifier for a metric, whenever a unique dimension name/value pair is extracted from your logs, you are creating a new variation of that metric.\n For more information about publishing dimensions with metrics created by metric filters, see [Publishing dimensions with metrics from values in JSON or space-delimited log events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html#logs-metric-filters-dimensions).\n Metrics extracted from log events are charged as custom metrics. To prevent unexpected high charges, do not specify high-cardinality fields such as ``IPAddress`` or ``requestID`` as dimensions. Each different value found for a dimension is treated as a separate metric and accrues charges as a separate custom metric. \n To help prevent accidental high charges, Amazon disables a metric filter if it generates 1000 different name/value pairs for the dimensions that you have specified within a certain amount of time.\n You can also set up a billing alarm to alert you if your charges are higher than expected. For more information, see [Creating a Billing Alarm to Monitor Your Estimated Charges](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html).", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The name for the CW metric dimension that the metric filter creates.\n Dimension names must contain only ASCII characters, must include at least one non-whitespace character, and cannot start with a colon (:).", + "minLength": 1, + "maxLength": 255 + }, + "Value": { + "type": "string", + "description": "The log event field that will contain the value for this dimension. This dimension will only be published for a metric if the value is found in the log event. For example, ``$.eventType`` for JSON log events, or ``$server`` for space-delimited log events.", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "MetricTransformation": { + "type": "object", + "properties": { + "DefaultValue": { + "description": "(Optional) The value to emit when a filter pattern does not match a log event. This value can be null.", + "type": "number" + }, + "MetricName": { + "description": "The name of the CloudWatch metric.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^((?![:*$])[\\x00-\\x7F]){1,255}" + }, + "MetricNamespace": { + "$comment": "Namespaces can be up to 256 characters long; valid characters include 0-9A-Za-z.-_/#", + "description": "A custom namespace to contain your metric in CloudWatch. Use namespaces to group together metrics that are similar. For more information, see [Namespaces](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Namespace).", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^[0-9a-zA-Z\\.\\-_\\/#]{1,256}" + }, + "MetricValue": { + "description": "The value that is published to the CloudWatch metric. For example, if you're counting the occurrences of a particular term like ``Error``, specify 1 for the metric value. If you're counting the number of bytes transferred, reference the value that is in the log event by using $. followed by the name of the field that you specified in the filter pattern, such as ``$.size``.", + "type": "string", + "pattern": ".{1,100}", + "minLength": 1, + "maxLength": 100 + }, + "Unit": { + "description": "The unit to assign to the metric. If you omit this, the unit is set as ``None``.", + "type": "string", + "enum": [ + "Seconds", + "Microseconds", + "Milliseconds", + "Bytes", + "Kilobytes", + "Megabytes", + "Gigabytes", + "Terabytes", + "Bits", + "Kilobits", + "Megabits", + "Gigabits", + "Terabits", + "Percent", + "Count", + "Bytes/Second", + "Kilobytes/Second", + "Megabytes/Second", + "Gigabytes/Second", + "Terabytes/Second", + "Bits/Second", + "Kilobits/Second", + "Megabits/Second", + "Gigabits/Second", + "Terabits/Second", + "Count/Second", + "None" + ] + }, + "Dimensions": { + "description": "The fields to use as dimensions for the metric. One metric filter can include as many as three dimensions.\n Metrics extracted from log events are charged as custom metrics. To prevent unexpected high charges, do not specify high-cardinality fields such as ``IPAddress`` or ``requestID`` as dimensions. Each different value found for a dimension is treated as a separate metric and accrues charges as a separate custom metric. \n CloudWatch Logs disables a metric filter if it generates 1000 different name/value pairs for your specified dimensions within a certain amount of time. This helps to prevent accidental high charges.\n You can also set up a billing alarm to alert you if your charges are higher than expected. For more information, see [Creating a Billing Alarm to Monitor Your Estimated Charges](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html).", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "maxItems": 3, + "items": { + "$ref": "#/definitions/Dimension" + } + } + }, + "required": [ + "MetricName", + "MetricNamespace", + "MetricValue" + ], + "additionalProperties": false, + "description": "``MetricTransformation`` is a property of the ``AWS::Logs::MetricFilter`` resource that describes how to transform log streams into a CloudWatch metric." + } + }, + "properties": { + "FilterName": { + "description": "The name of the metric filter.", + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^[^:*]{1,512}" + }, + "FilterPattern": { + "description": "A filter pattern for extracting metric data out of ingested log events. For more information, see [Filter and Pattern Syntax](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html).", + "type": "string", + "maxLength": 1024 + }, + "LogGroupName": { + "description": "The name of an existing log group that you want to associate with this metric filter.", + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^[.\\-_/#A-Za-z0-9]{1,512}" + }, + "MetricTransformations": { + "description": "The metric transformations.", + "type": "array", + "minItems": 1, + "maxItems": 1, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricTransformation" + } + } + }, + "handlers": { + "create": { + "permissions": [ + "logs:PutMetricFilter", + "logs:DescribeMetricFilters" + ] + }, + "read": { + "permissions": [ + "logs:DescribeMetricFilters" + ] + }, + "update": { + "permissions": [ + "logs:PutMetricFilter", + "logs:DescribeMetricFilters" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteMetricFilter" + ] + }, + "list": { + "permissions": [ + "logs:DescribeMetricFilters" + ] + } + }, + "required": [ + "FilterPattern", + "LogGroupName", + "MetricTransformations" + ], + "createOnlyProperties": [ + "/properties/FilterName", + "/properties/LogGroupName" + ], + "primaryIdentifier": [ + "/properties/LogGroupName", + "/properties/FilterName" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/logs/querydefinition.json b/internal/aws/cfn/schemas/aws/logs/querydefinition.json new file mode 100644 index 00000000..1bdfcc67 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/querydefinition.json @@ -0,0 +1,83 @@ +{ + "typeName": "AWS::Logs::QueryDefinition", + "description": "The resource schema for AWSLogs QueryDefinition", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "definitions": { + "LogGroup": { + "type": "string", + "pattern": "[\\.\\-_/#A-Za-z0-9]+", + "minLength": 1, + "maxLength": 512 + } + }, + "properties": { + "Name": { + "description": "A name for the saved query definition", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "QueryString": { + "description": "The query string to use for this definition", + "type": "string", + "minLength": 1, + "maxLength": 10000 + }, + "LogGroupNames": { + "description": "Optionally define specific log groups as part of your query definition", + "type": "array", + "insertionOrder": false, + "items": { + "description": "LogGroup name", + "$ref": "#/definitions/LogGroup" + } + }, + "QueryDefinitionId": { + "description": "Unique identifier of a query definition", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Name", + "QueryString" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/QueryDefinitionId" + ], + "primaryIdentifier": [ + "/properties/QueryDefinitionId" + ], + "handlers": { + "create": { + "permissions": [ + "logs:PutQueryDefinition" + ] + }, + "read": { + "permissions": [ + "logs:DescribeQueryDefinitions" + ] + }, + "update": { + "permissions": [ + "logs:PutQueryDefinition" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteQueryDefinition" + ] + }, + "list": { + "permissions": [ + "logs:DescribeQueryDefinitions" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/logs/resourcepolicy.json b/internal/aws/cfn/schemas/aws/logs/resourcepolicy.json new file mode 100644 index 00000000..fc342216 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/resourcepolicy.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::Logs::ResourcePolicy", + "description": "The resource schema for AWSLogs ResourcePolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "properties": { + "PolicyName": { + "description": "A name for resource policy", + "type": "string", + "pattern": "^([^:*\\/]+\\/?)*[^:*\\/]+$", + "minLength": 1, + "maxLength": 255 + }, + "PolicyDocument": { + "description": "The policy document", + "type": "string", + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+", + "minLength": 1, + "maxLength": 5120 + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "primaryIdentifier": [ + "/properties/PolicyName" + ], + "createOnlyProperties": [ + "/properties/PolicyName" + ], + "handlers": { + "create": { + "permissions": [ + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies" + ] + }, + "read": { + "permissions": [ + "logs:DescribeResourcePolicies" + ] + }, + "update": { + "permissions": [ + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DeleteResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteResourcePolicy" + ] + }, + "list": { + "permissions": [ + "logs:DescribeResourcePolicies" + ] + } + }, + "required": [ + "PolicyName", + "PolicyDocument" + ] +} diff --git a/internal/aws/cfn/schemas/aws/logs/subscriptionfilter.json b/internal/aws/cfn/schemas/aws/logs/subscriptionfilter.json new file mode 100644 index 00000000..27d2cab6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/logs/subscriptionfilter.json @@ -0,0 +1,98 @@ +{ + "typeName": "AWS::Logs::SubscriptionFilter", + "$schema": "https://raw.githubusercontent.com/aws-cloudformation/cloudformation-cli/master/src/rpdk/core/data/schema/provider.definition.schema.v1.json", + "description": "The ``AWS::Logs::SubscriptionFilter`` resource specifies a subscription filter and associates it with the specified log group. Subscription filters allow you to subscribe to a real-time stream of log events and have them delivered to a specific destination. Currently, the supported destinations are:\n + An Amazon Kinesis data stream belonging to the same account as the subscription filter, for same-account delivery.\n + A logical destination that belongs to a different account, for cross-account delivery.\n + An Amazon Kinesis Firehose delivery stream that belongs to the same account as the subscription filter, for same-account delivery.\n + An LAMlong function that belongs to the same account as the subscription filter, for same-account delivery.\n \n There can be as many as two subscription filters associated with a log group.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "replacementStrategy": "delete_then_create", + "properties": { + "FilterName": { + "description": "The name of the subscription filter.", + "type": "string" + }, + "DestinationArn": { + "description": "The Amazon Resource Name (ARN) of the destination.", + "type": "string" + }, + "FilterPattern": { + "description": "The filtering expressions that restrict what gets delivered to the destination AWS resource. For more information about the filter pattern syntax, see [Filter and Pattern Syntax](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html).", + "type": "string" + }, + "LogGroupName": { + "description": "The log group to associate with the subscription filter. All log events that are uploaded to this log group are filtered and delivered to the specified AWS resource if the filter pattern matches the log events.", + "type": "string" + }, + "RoleArn": { + "description": "The ARN of an IAM role that grants CWL permissions to deliver ingested log events to the destination stream. You don't need to provide the ARN when you are working with a logical destination for cross-account delivery.", + "type": "string" + }, + "Distribution": { + "description": "The method used to distribute log data to the destination, which can be either random or grouped by log stream.", + "type": "string", + "enum": [ + "Random", + "ByLogStream" + ] + } + }, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "logs:PutSubscriptionFilter", + "logs:DescribeSubscriptionFilters" + ] + }, + "read": { + "permissions": [ + "logs:DescribeSubscriptionFilters" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "logs:PutSubscriptionFilter", + "logs:DescribeSubscriptionFilters" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteSubscriptionFilter" + ] + }, + "list": { + "permissions": [ + "logs:DescribeSubscriptionFilters" + ], + "handlerSchema": { + "properties": { + "LogGroupName": { + "$ref": "resource-schema.json#/properties/LogGroupName" + } + }, + "required": [ + "LogGroupName" + ] + } + } + }, + "required": [ + "DestinationArn", + "FilterPattern", + "LogGroupName" + ], + "createOnlyProperties": [ + "/properties/FilterName", + "/properties/LogGroupName" + ], + "primaryIdentifier": [ + "/properties/FilterName", + "/properties/LogGroupName" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/lookoutequipment/inferencescheduler.json b/internal/aws/cfn/schemas/aws/lookoutequipment/inferencescheduler.json new file mode 100644 index 00000000..37f8e9e2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lookoutequipment/inferencescheduler.json @@ -0,0 +1,253 @@ +{ + "typeName": "AWS::LookoutEquipment::InferenceScheduler", + "description": "Resource schema for LookoutEquipment InferenceScheduler.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Bucket": { + "type": "string", + "pattern": "^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$", + "minLength": 3, + "maxLength": 63 + }, + "Prefix": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "S3InputConfiguration": { + "description": "Specifies configuration information for the input data for the inference, including input data S3 location.", + "type": "object", + "properties": { + "Bucket": { + "$ref": "#/definitions/Bucket" + }, + "Prefix": { + "$ref": "#/definitions/Prefix" + } + }, + "required": [ + "Bucket" + ], + "additionalProperties": false + }, + "S3OutputConfiguration": { + "description": "Specifies configuration information for the output results from the inference, including output S3 location.", + "type": "object", + "properties": { + "Bucket": { + "$ref": "#/definitions/Bucket" + }, + "Prefix": { + "$ref": "#/definitions/Prefix" + } + }, + "required": [ + "Bucket" + ], + "additionalProperties": false + }, + "InputNameConfiguration": { + "description": "Specifies configuration information for the input data for the inference, including timestamp format and delimiter.", + "type": "object", + "properties": { + "ComponentTimestampDelimiter": { + "description": "Indicates the delimiter character used between items in the data.", + "type": "string", + "pattern": "^(\\-|\\_|\\s)?$", + "minLength": 0, + "maxLength": 1 + }, + "TimestampFormat": { + "description": "The format of the timestamp, whether Epoch time, or standard, with or without hyphens (-).", + "type": "string", + "pattern": "^EPOCH|yyyy-MM-dd-HH-mm-ss|yyyyMMddHHmmss$" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A tag is a key-value pair that can be added to a resource as metadata.", + "type": "object", + "properties": { + "Key": { + "description": "The key for the specified tag.", + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the specified tag.", + "type": "string", + "pattern": "[\\s\\w+-=\\.:/@]*", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "DataDelayOffsetInMinutes": { + "description": "A period of time (in minutes) by which inference on the data is delayed after the data starts.", + "type": "integer", + "minimum": 0, + "maximum": 60 + }, + "DataInputConfiguration": { + "description": "Specifies configuration information for the input data for the inference scheduler, including delimiter, format, and dataset location.", + "type": "object", + "properties": { + "InputTimeZoneOffset": { + "description": "Indicates the difference between your time zone and Greenwich Mean Time (GMT).", + "type": "string", + "pattern": "^(\\+|\\-)[0-9]{2}\\:[0-9]{2}$" + }, + "InferenceInputNameConfiguration": { + "$ref": "#/definitions/InputNameConfiguration" + }, + "S3InputConfiguration": { + "$ref": "#/definitions/S3InputConfiguration" + } + }, + "required": [ + "S3InputConfiguration" + ], + "additionalProperties": false + }, + "DataOutputConfiguration": { + "description": "Specifies configuration information for the output results for the inference scheduler, including the S3 location for the output.", + "type": "object", + "properties": { + "KmsKeyId": { + "description": "The ID number for the AWS KMS key used to encrypt the inference output.", + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,2048}$", + "minLength": 1, + "maxLength": 2048 + }, + "S3OutputConfiguration": { + "$ref": "#/definitions/S3OutputConfiguration" + } + }, + "required": [ + "S3OutputConfiguration" + ], + "additionalProperties": false + }, + "DataUploadFrequency": { + "description": "How often data is uploaded to the source S3 bucket for the input data.", + "type": "string", + "enum": [ + "PT5M", + "PT10M", + "PT15M", + "PT30M", + "PT1H" + ] + }, + "InferenceSchedulerName": { + "description": "The name of the inference scheduler being created.", + "type": "string", + "pattern": "^[0-9a-zA-Z_-]{1,200}$", + "minLength": 1, + "maxLength": 200 + }, + "ModelName": { + "description": "The name of the previously trained ML model being used to create the inference scheduler.", + "type": "string", + "pattern": "^[0-9a-zA-Z_-]{1,200}$", + "minLength": 1, + "maxLength": 200 + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of a role with permission to access the data source being used for the inference.", + "type": "string", + "pattern": "arn:aws(-[^:]+)?:iam::[0-9]{12}:role/.+", + "minLength": 20, + "maxLength": 2048 + }, + "ServerSideKmsKeyId": { + "description": "Provides the identifier of the AWS KMS customer master key (CMK) used to encrypt inference scheduler data by Amazon Lookout for Equipment.", + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,2048}$", + "minLength": 1, + "maxLength": 2048 + }, + "Tags": { + "description": "Any tags associated with the inference scheduler.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "InferenceSchedulerArn": { + "description": "The Amazon Resource Name (ARN) of the inference scheduler being created.", + "type": "string", + "pattern": "arn:aws(-[^:]+)?:lookoutequipment:[a-zA-Z0-9\\-]*:[0-9]{12}:inference-scheduler\\/.+", + "minLength": 1, + "maxLength": 200 + } + }, + "additionalProperties": false, + "required": [ + "DataInputConfiguration", + "DataOutputConfiguration", + "DataUploadFrequency", + "ModelName", + "RoleArn" + ], + "readOnlyProperties": [ + "/properties/InferenceSchedulerArn" + ], + "createOnlyProperties": [ + "/properties/InferenceSchedulerName", + "/properties/ModelName", + "/properties/ServerSideKmsKeyId" + ], + "primaryIdentifier": [ + "/properties/InferenceSchedulerName" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "lookoutequipment:CreateInferenceScheduler", + "lookoutequipment:DescribeInferenceScheduler" + ] + }, + "read": { + "permissions": [ + "lookoutequipment:DescribeInferenceScheduler" + ] + }, + "delete": { + "permissions": [ + "lookoutequipment:DeleteInferenceScheduler", + "lookoutequipment:StopInferenceScheduler", + "lookoutequipment:DescribeInferenceScheduler" + ] + }, + "update": { + "permissions": [ + "lookoutequipment:UpdateInferenceScheduler", + "lookoutequipment:DescribeInferenceScheduler", + "lookoutequipment:StopInferenceScheduler", + "lookoutequipment:StartInferenceScheduler" + ] + }, + "list": { + "permissions": [ + "lookoutequipment:ListInferenceSchedulers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lookoutmetrics/alert.json b/internal/aws/cfn/schemas/aws/lookoutmetrics/alert.json new file mode 100644 index 00000000..aae1ee3c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lookoutmetrics/alert.json @@ -0,0 +1,139 @@ +{ + "typeName": "AWS::LookoutMetrics::Alert", + "description": "Resource Type definition for AWS::LookoutMetrics::Alert", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lookout-for-metrics.git", + "definitions": { + "Arn": { + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):.*:.*:.*:.+" + }, + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "SNSConfiguration": { + "$ref": "#/definitions/SNSConfiguration" + }, + "LambdaConfiguration": { + "$ref": "#/definitions/LambdaConfiguration" + } + } + }, + "SNSConfiguration": { + "description": "Configuration options for an SNS alert action.", + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "description": "ARN of an IAM role that LookoutMetrics should assume to access the SNS topic.", + "$ref": "#/definitions/Arn" + }, + "SnsTopicArn": { + "description": "ARN of an SNS topic to send alert notifications to.", + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "RoleArn", + "SnsTopicArn" + ] + }, + "LambdaConfiguration": { + "description": "Configuration options for a Lambda alert action.", + "type": "object", + "additionalProperties": false, + "properties": { + "RoleArn": { + "description": "ARN of an IAM role that LookoutMetrics should assume to access the Lambda function.", + "$ref": "#/definitions/Arn" + }, + "LambdaArn": { + "description": "ARN of a Lambda to send alert notifications to.", + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "RoleArn", + "LambdaArn" + ] + } + }, + "properties": { + "AlertName": { + "description": "The name of the alert. If not provided, a name is generated automatically.", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "Arn": { + "description": "ARN assigned to the alert.", + "$ref": "#/definitions/Arn" + }, + "AlertDescription": { + "description": "A description for the alert.", + "type": "string", + "maxLength": 256, + "pattern": ".*\\S.*" + }, + "AnomalyDetectorArn": { + "description": "The Amazon resource name (ARN) of the Anomaly Detector to alert.", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):.*:.*:.*:.+" + }, + "AlertSensitivityThreshold": { + "description": "A number between 0 and 100 (inclusive) that tunes the sensitivity of the alert.", + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "Action": { + "description": "The action to be taken by the alert when an anomaly is detected.", + "$ref": "#/definitions/Action" + } + }, + "additionalProperties": false, + "required": [ + "AnomalyDetectorArn", + "AlertSensitivityThreshold", + "Action" + ], + "createOnlyProperties": [ + "/properties/AlertName", + "/properties/AlertDescription", + "/properties/AnomalyDetectorArn", + "/properties/AlertSensitivityThreshold", + "/properties/Action" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "lookoutmetrics:CreateAlert", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "lookoutmetrics:DescribeAlert" + ] + }, + "delete": { + "permissions": [ + "lookoutmetrics:DeleteAlert" + ] + }, + "list": { + "permissions": [ + "lookoutmetrics:ListAlerts" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lookoutmetrics/anomalydetector.json b/internal/aws/cfn/schemas/aws/lookoutmetrics/anomalydetector.json new file mode 100644 index 00000000..265f988e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lookoutmetrics/anomalydetector.json @@ -0,0 +1,547 @@ +{ + "typeName": "AWS::LookoutMetrics::AnomalyDetector", + "description": "An Amazon Lookout for Metrics Detector", + "sourceUrl": "https://docs.aws.amazon.com/lookoutmetrics/latest/dev/lookoutmetrics-welcome.html", + "definitions": { + "Arn": { + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):.*:.*:.*:.+" + }, + "ColumnName": { + "description": "Name of a column in the data.", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "Charset": { + "type": "string", + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "CsvFormatDescriptor": { + "type": "object", + "properties": { + "FileCompression": { + "type": "string", + "enum": [ + "NONE", + "GZIP" + ] + }, + "Charset": { + "$ref": "#/definitions/Charset" + }, + "Delimiter": { + "type": "string", + "maxLength": 1, + "pattern": "[^\\r\\n]" + }, + "HeaderList": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnName" + } + }, + "QuoteSymbol": { + "type": "string", + "maxLength": 1, + "pattern": "[^\\r\\n]|^$" + }, + "ContainsHeader": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JsonFormatDescriptor": { + "type": "object", + "properties": { + "FileCompression": { + "type": "string", + "enum": [ + "NONE", + "GZIP" + ] + }, + "Charset": { + "$ref": "#/definitions/Charset" + } + }, + "additionalProperties": false + }, + "FileFormatDescriptor": { + "type": "object", + "properties": { + "CsvFormatDescriptor": { + "$ref": "#/definitions/CsvFormatDescriptor" + }, + "JsonFormatDescriptor": { + "$ref": "#/definitions/JsonFormatDescriptor" + } + }, + "additionalProperties": false + }, + "S3SourceConfig": { + "type": "object", + "properties": { + "RoleArn": { + "$ref": "#/definitions/Arn" + }, + "TemplatedPathList": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "type": "string", + "maxLength": 1024, + "pattern": "^s3://[a-zA-Z0-9_\\-\\/ {}=]+$" + } + }, + "HistoricalDataPathList": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "type": "string", + "maxLength": 1024, + "pattern": "^s3://[a-z0-9].+$" + } + }, + "FileFormatDescriptor": { + "$ref": "#/definitions/FileFormatDescriptor" + } + }, + "additionalProperties": false, + "required": [ + "RoleArn", + "FileFormatDescriptor" + ] + }, + "AppFlowConfig": { + "type": "object", + "properties": { + "RoleArn": { + "$ref": "#/definitions/Arn" + }, + "FlowName": { + "type": "string", + "maxLength": 256, + "pattern": "[a-zA-Z0-9][\\w!@#.-]+" + } + }, + "required": [ + "RoleArn", + "FlowName" + ], + "additionalProperties": false + }, + "CloudwatchConfig": { + "type": "object", + "properties": { + "RoleArn": { + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "RoleArn" + ], + "additionalProperties": false + }, + "DatabaseHost": { + "type": "string", + "minLength": 1, + "maxLength": 253, + "pattern": ".*\\S.*" + }, + "DatabasePort": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "TableName": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$" + }, + "SubnetIdList": { + "type": "array", + "items": { + "type": "string", + "maxLength": 255, + "pattern": "[\\-0-9a-zA-Z]+" + } + }, + "SecurityGroupIdList": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "VpcConfiguration": { + "type": "object", + "properties": { + "SubnetIdList": { + "$ref": "#/definitions/SubnetIdList" + }, + "SecurityGroupIdList": { + "$ref": "#/definitions/SecurityGroupIdList" + } + }, + "required": [ + "SubnetIdList", + "SecurityGroupIdList" + ], + "additionalProperties": false + }, + "SecretManagerArn": { + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):.*:.*:secret:AmazonLookoutMetrics-.+" + }, + "RDSSourceConfig": { + "type": "object", + "properties": { + "DBInstanceIdentifier": { + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z](?!.*--)(?!.*-$)[0-9a-zA-Z\\-]*$" + }, + "DatabaseHost": { + "$ref": "#/definitions/DatabaseHost" + }, + "DatabasePort": { + "$ref": "#/definitions/DatabasePort" + }, + "SecretManagerArn": { + "$ref": "#/definitions/SecretManagerArn" + }, + "DatabaseName": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "[a-zA-Z0-9_]+" + }, + "TableName": { + "$ref": "#/definitions/TableName" + }, + "RoleArn": { + "$ref": "#/definitions/Arn" + }, + "VpcConfiguration": { + "$ref": "#/definitions/VpcConfiguration" + } + }, + "required": [ + "DBInstanceIdentifier", + "DatabaseHost", + "DatabasePort", + "SecretManagerArn", + "DatabaseName", + "TableName", + "RoleArn", + "VpcConfiguration" + ], + "additionalProperties": false + }, + "RedshiftSourceConfig": { + "type": "object", + "properties": { + "ClusterIdentifier": { + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-z](?!.*--)(?!.*-$)[0-9a-z\\-]*$" + }, + "DatabaseHost": { + "$ref": "#/definitions/DatabaseHost" + }, + "DatabasePort": { + "$ref": "#/definitions/DatabasePort" + }, + "SecretManagerArn": { + "$ref": "#/definitions/SecretManagerArn" + }, + "DatabaseName": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "pattern": "[a-z0-9]+" + }, + "TableName": { + "$ref": "#/definitions/TableName" + }, + "RoleArn": { + "$ref": "#/definitions/Arn" + }, + "VpcConfiguration": { + "$ref": "#/definitions/VpcConfiguration" + } + }, + "required": [ + "ClusterIdentifier", + "DatabaseHost", + "DatabasePort", + "SecretManagerArn", + "DatabaseName", + "TableName", + "RoleArn", + "VpcConfiguration" + ], + "additionalProperties": false + }, + "MetricSource": { + "type": "object", + "properties": { + "S3SourceConfig": { + "$ref": "#/definitions/S3SourceConfig" + }, + "RDSSourceConfig": { + "$ref": "#/definitions/RDSSourceConfig" + }, + "RedshiftSourceConfig": { + "$ref": "#/definitions/RedshiftSourceConfig" + }, + "CloudwatchConfig": { + "$ref": "#/definitions/CloudwatchConfig" + }, + "AppFlowConfig": { + "$ref": "#/definitions/AppFlowConfig" + } + }, + "additionalProperties": false + }, + "TimestampColumn": { + "type": "object", + "additionalProperties": false, + "properties": { + "ColumnName": { + "$ref": "#/definitions/ColumnName" + }, + "ColumnFormat": { + "description": "A timestamp format for the timestamps in the dataset", + "type": "string", + "maxLength": 63, + "pattern": ".*\\S.*" + } + } + }, + "Metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetricName": { + "$ref": "#/definitions/ColumnName" + }, + "AggregationFunction": { + "description": "Operator used to aggregate metric values", + "type": "string", + "enum": [ + "AVG", + "SUM" + ] + }, + "Namespace": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[^:].*" + } + }, + "required": [ + "MetricName", + "AggregationFunction" + ] + }, + "MetricSet": { + "type": "object", + "properties": { + "MetricSetName": { + "description": "The name of the MetricSet.", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "MetricSetDescription": { + "description": "A description for the MetricSet.", + "type": "string", + "maxLength": 256, + "pattern": ".*\\S.*" + }, + "MetricSource": { + "$ref": "#/definitions/MetricSource" + }, + "MetricList": { + "description": "Metrics captured by this MetricSet.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/Metric" + } + }, + "Offset": { + "description": "Offset, in seconds, between the frequency interval and the time at which the metrics are available.", + "type": "integer", + "minimum": 0, + "maximum": 432000 + }, + "TimestampColumn": { + "$ref": "#/definitions/TimestampColumn" + }, + "DimensionList": { + "description": "Dimensions for this MetricSet.", + "type": "array", + "insertionOrder": false, + "minItems": 0, + "items": { + "$ref": "#/definitions/ColumnName" + } + }, + "MetricSetFrequency": { + "description": "A frequency period to aggregate the data", + "type": "string", + "enum": [ + "PT5M", + "PT10M", + "PT1H", + "P1D" + ] + }, + "Timezone": { + "type": "string", + "maxLength": 60, + "pattern": ".*\\S.*" + } + }, + "required": [ + "MetricSetName", + "MetricList", + "MetricSource" + ], + "additionalProperties": false + }, + "AnomalyDetectorFrequency": { + "description": "Frequency of anomaly detection", + "type": "string", + "enum": [ + "PT5M", + "PT10M", + "PT1H", + "P1D" + ] + }, + "AnomalyDetectorConfig": { + "type": "object", + "properties": { + "AnomalyDetectorFrequency": { + "description": "Frequency of anomaly detection", + "$ref": "#/definitions/AnomalyDetectorFrequency" + } + }, + "required": [ + "AnomalyDetectorFrequency" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "AnomalyDetectorName": { + "description": "Name for the Amazon Lookout for Metrics Anomaly Detector", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "AnomalyDetectorDescription": { + "description": "A description for the AnomalyDetector.", + "type": "string", + "maxLength": 256, + "pattern": ".*\\S.*" + }, + "AnomalyDetectorConfig": { + "description": "Configuration options for the AnomalyDetector", + "$ref": "#/definitions/AnomalyDetectorConfig" + }, + "MetricSetList": { + "description": "List of metric sets for anomaly detection", + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/definitions/MetricSet" + } + }, + "KmsKeyArn": { + "description": "KMS key used to encrypt the AnomalyDetector data", + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "arn:aws.*:kms:.*:[0-9]{12}:key/.*" + } + }, + "additionalProperties": false, + "required": [ + "AnomalyDetectorConfig", + "MetricSetList" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AnomalyDetectorName", + "/properties/MetricSource" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "lookoutmetrics:CreateAnomalyDetector", + "lookoutmetrics:DeleteAnomalyDetector", + "lookoutmetrics:CreateMetricSet", + "iam:PassRole" + ], + "timeoutInMinutes": 15 + }, + "read": { + "permissions": [ + "lookoutmetrics:DescribeAnomalyDetector", + "lookoutmetrics:DescribeMetricSet", + "lookoutmetrics:ListMetricSets" + ], + "timeoutInMinutes": 15 + }, + "update": { + "permissions": [ + "lookoutmetrics:UpdateAnomalyDetector", + "lookoutmetrics:UpdateMetricSet" + ], + "timeoutInMinutes": 15 + }, + "delete": { + "permissions": [ + "lookoutmetrics:DescribeAnomalyDetector", + "lookoutmetrics:DeleteAnomalyDetector" + ], + "timeoutInMinutes": 15 + }, + "list": { + "permissions": [ + "lookoutmetrics:ListAnomalyDetectors" + ], + "timeoutInMinutes": 15 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/lookoutvision/project.json b/internal/aws/cfn/schemas/aws/lookoutvision/project.json new file mode 100644 index 00000000..0ccfae4b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/lookoutvision/project.json @@ -0,0 +1,69 @@ +{ + "typeName": "AWS::LookoutVision::Project", + "description": "The AWS::LookoutVision::Project type creates an Amazon Lookout for Vision project. A project is a grouping of the resources needed to create and manage a Lookout for Vision model.", + "sourceUrl": "https://docs.aws.amazon.com/lookout-for-vision/latest/developer-guide/model-create-project.html", + "definitions": { + "Arn": { + "type": "string", + "maxLength": 1000 + }, + "ProjectName": { + "description": "The name of the Amazon Lookout for Vision project", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[a-zA-Z0-9][a-zA-Z0-9_\\-]*" + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "ProjectName": { + "$ref": "#/definitions/ProjectName" + } + }, + "additionalProperties": false, + "required": [ + "ProjectName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ProjectName" + ], + "primaryIdentifier": [ + "/properties/ProjectName" + ], + "handlers": { + "create": { + "permissions": [ + "lookoutvision:CreateProject" + ], + "timeoutInMinutes": 15 + }, + "read": { + "permissions": [ + "lookoutvision:DescribeProject" + ], + "timeoutInMinutes": 15 + }, + "update": { + "permissions": [], + "timeoutInMinutes": 15 + }, + "delete": { + "permissions": [ + "lookoutvision:DeleteProject" + ], + "timeoutInMinutes": 15 + }, + "list": { + "permissions": [ + "lookoutvision:ListProjects" + ], + "timeoutInMinutes": 15 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/m2/application.json b/internal/aws/cfn/schemas/aws/m2/application.json new file mode 100644 index 00000000..de7c92a2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/m2/application.json @@ -0,0 +1,170 @@ +{ + "typeName": "AWS::M2::Application", + "description": "Represents an application that runs on an AWS Mainframe Modernization Environment", + "definitions": { + "Definition": { + "oneOf": [ + { + "type": "object", + "title": "S3Location", + "properties": { + "S3Location": { + "type": "string", + "pattern": "^\\S{1,2000}$" + } + }, + "required": [ + "S3Location" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "Content", + "properties": { + "Content": { + "type": "string", + "maxLength": 65000, + "minLength": 1 + } + }, + "required": [ + "Content" + ], + "additionalProperties": false + } + ] + }, + "EngineType": { + "type": "string", + "enum": [ + "microfocus", + "bluage" + ] + }, + "TagMap": { + "type": "object", + "maxProperties": 200, + "minProperties": 0, + "patternProperties": { + "^(?!aws:).+$": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + } + }, + "properties": { + "ApplicationArn": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9/][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "ApplicationId": { + "type": "string", + "pattern": "^\\S{1,80}$" + }, + "Definition": { + "$ref": "#/definitions/Definition" + }, + "Description": { + "type": "string", + "maxLength": 500, + "minLength": 0 + }, + "EngineType": { + "$ref": "#/definitions/EngineType" + }, + "KmsKeyId": { + "type": "string", + "maxLength": 2048, + "description": "The ID or the Amazon Resource Name (ARN) of the customer managed KMS Key used for encrypting application-related resources." + }, + "Name": { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$" + }, + "RoleArn": { + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]|):[0-9]{12}:[A-Za-z0-9/][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "required": [ + "Definition", + "EngineType", + "Name" + ], + "readOnlyProperties": [ + "/properties/ApplicationArn", + "/properties/ApplicationId" + ], + "writeOnlyProperties": [ + "/properties/Definition" + ], + "createOnlyProperties": [ + "/properties/EngineType", + "/properties/Name", + "/properties/KmsKeyId", + "/properties/RoleArn" + ], + "primaryIdentifier": [ + "/properties/ApplicationArn" + ], + "handlers": { + "create": { + "permissions": [ + "m2:CreateApplication", + "m2:GetApplication", + "m2:ListTagsForResource", + "m2:TagResource", + "s3:GetObject", + "s3:ListBucket", + "kms:DescribeKey", + "kms:CreateGrant", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "m2:GetApplication", + "m2:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "m2:UpdateApplication", + "m2:GetApplication", + "m2:ListTagsForResource", + "m2:TagResource", + "m2:UntagResource", + "s3:GetObject", + "s3:ListBucket" + ] + }, + "delete": { + "permissions": [ + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:DeleteTargetGroup", + "logs:DeleteLogDelivery", + "m2:GetApplication", + "m2:DeleteApplication" + ] + }, + "list": { + "permissions": [ + "m2:ListApplications" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/m2/environment.json b/internal/aws/cfn/schemas/aws/m2/environment.json new file mode 100644 index 00000000..3b9f3f97 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/m2/environment.json @@ -0,0 +1,277 @@ +{ + "typeName": "AWS::M2::Environment", + "description": "Represents a runtime environment that can run migrated mainframe applications.", + "definitions": { + "EfsStorageConfiguration": { + "type": "object", + "description": "Defines the storage configuration for an Amazon EFS file system.", + "properties": { + "FileSystemId": { + "type": "string", + "description": "The file system identifier.", + "pattern": "^\\S{1,200}$" + }, + "MountPoint": { + "type": "string", + "description": "The mount point for the file system.", + "pattern": "^\\S{1,200}$" + } + }, + "required": [ + "FileSystemId", + "MountPoint" + ], + "additionalProperties": false + }, + "EngineType": { + "type": "string", + "description": "The target platform for the environment.", + "enum": [ + "microfocus", + "bluage" + ] + }, + "FsxStorageConfiguration": { + "type": "object", + "description": "Defines the storage configuration for an Amazon FSx file system.", + "properties": { + "FileSystemId": { + "type": "string", + "description": "The file system identifier.", + "pattern": "^\\S{1,200}$" + }, + "MountPoint": { + "type": "string", + "description": "The mount point for the file system.", + "pattern": "^\\S{1,200}$" + } + }, + "required": [ + "FileSystemId", + "MountPoint" + ], + "additionalProperties": false + }, + "HighAvailabilityConfig": { + "type": "object", + "description": "Defines the details of a high availability configuration.", + "properties": { + "DesiredCapacity": { + "type": "integer", + "maximum": 100, + "minimum": 1 + } + }, + "required": [ + "DesiredCapacity" + ], + "additionalProperties": false + }, + "StorageConfiguration": { + "type": "object", + "description": "Defines the storage configuration for an environment.", + "oneOf": [ + { + "properties": { + "Efs": { + "$ref": "#/definitions/EfsStorageConfiguration" + } + }, + "required": [ + "Efs" + ], + "additionalProperties": false + }, + { + "properties": { + "Fsx": { + "$ref": "#/definitions/FsxStorageConfiguration" + } + }, + "required": [ + "Fsx" + ], + "additionalProperties": false + } + ] + }, + "TagMap": { + "type": "object", + "description": "Defines tags associated to an environment.", + "maxProperties": 200, + "minProperties": 0, + "patternProperties": { + "^(?!aws:).+$": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Description": { + "type": "string", + "description": "The description of the environment.", + "maxLength": 500, + "minLength": 0 + }, + "EngineType": { + "$ref": "#/definitions/EngineType" + }, + "EngineVersion": { + "type": "string", + "description": "The version of the runtime engine for the environment.", + "pattern": "^\\S{1,10}$" + }, + "EnvironmentArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the runtime environment.", + "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9/][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "EnvironmentId": { + "type": "string", + "description": "The unique identifier of the environment.", + "pattern": "^\\S{1,80}$" + }, + "HighAvailabilityConfig": { + "$ref": "#/definitions/HighAvailabilityConfig" + }, + "InstanceType": { + "type": "string", + "description": "The type of instance underlying the environment.", + "pattern": "^\\S{1,20}$" + }, + "KmsKeyId": { + "type": "string", + "maxLength": 2048, + "description": "The ID or the Amazon Resource Name (ARN) of the customer managed KMS Key used for encrypting environment-related resources." + }, + "Name": { + "type": "string", + "description": "The name of the environment.", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$" + }, + "PreferredMaintenanceWindow": { + "type": "string", + "description": "Configures a desired maintenance window for the environment. If you do not provide a value, a random system-generated value will be assigned.", + "pattern": "^\\S{1,50}$" + }, + "PubliclyAccessible": { + "type": "boolean", + "description": "Specifies whether the environment is publicly accessible." + }, + "SecurityGroupIds": { + "type": "array", + "description": "The list of security groups for the VPC associated with this environment.", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^\\S{1,50}$" + } + }, + "StorageConfigurations": { + "type": "array", + "description": "The storage configurations defined for the runtime environment.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/StorageConfiguration" + } + }, + "SubnetIds": { + "type": "array", + "description": "The unique identifiers of the subnets assigned to this runtime environment.", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^\\S{1,50}$" + } + }, + "Tags": { + "description": "Tags associated to this environment.", + "$ref": "#/definitions/TagMap" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "required": [ + "EngineType", + "InstanceType", + "Name" + ], + "readOnlyProperties": [ + "/properties/EnvironmentArn", + "/properties/EnvironmentId" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/EngineType", + "/properties/KmsKeyId", + "/properties/Name", + "/properties/PubliclyAccessible", + "/properties/SecurityGroupIds", + "/properties/StorageConfigurations", + "/properties/SubnetIds" + ], + "primaryIdentifier": [ + "/properties/EnvironmentArn" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateNetworkInterface", + "ec2:CreateNetworkInterfacePermission", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "ec2:ModifyNetworkInterfaceAttribute", + "elasticfilesystem:DescribeMountTargets", + "elasticloadbalancing:CreateLoadBalancer", + "elasticloadbalancing:AddTags", + "fsx:DescribeFileSystems", + "iam:CreateServiceLinkedRole", + "kms:DescribeKey", + "kms:CreateGrant", + "m2:CreateEnvironment", + "m2:GetEnvironment", + "m2:ListTagsForResource", + "m2:TagResource" + ] + }, + "read": { + "permissions": [ + "m2:ListTagsForResource", + "m2:GetEnvironment" + ] + }, + "update": { + "permissions": [ + "m2:TagResource", + "m2:UntagResource", + "m2:ListTagsForResource", + "m2:GetEnvironment", + "m2:UpdateEnvironment" + ] + }, + "delete": { + "permissions": [ + "elasticloadbalancing:DeleteLoadBalancer", + "m2:DeleteEnvironment", + "m2:GetEnvironment" + ] + }, + "list": { + "permissions": [ + "m2:ListEnvironments" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/macie/allowlist.json b/internal/aws/cfn/schemas/aws/macie/allowlist.json new file mode 100644 index 00000000..5876c9b0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/macie/allowlist.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::Macie::AllowList", + "description": "Macie AllowList resource schema", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-macie.git", + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Regex": { + "type": "string" + }, + "S3WordsList": { + "type": "object", + "properties": { + "BucketName": { + "type": "string" + }, + "ObjectKey": { + "type": "string" + } + }, + "required": [ + "BucketName", + "ObjectKey" + ], + "additionalProperties": false + }, + "Criteria": { + "description": "The regex or s3 object to use for the AllowList.", + "type": "object", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "Regex": { + "type": "string", + "description": "The S3 object key for the AllowList." + } + }, + "required": [ + "Regex" + ] + }, + { + "additionalProperties": false, + "properties": { + "S3WordsList": { + "$ref": "#/definitions/S3WordsList", + "description": "The S3 location for the AllowList." + } + }, + "required": [ + "S3WordsList" + ] + } + ] + }, + "Status": { + "description": "The status for the AllowList", + "type": "string", + "enum": [ + "OK", + "S3_OBJECT_NOT_FOUND", + "S3_USER_ACCESS_DENIED", + "S3_OBJECT_ACCESS_DENIED", + "S3_THROTTLED", + "S3_OBJECT_OVERSIZE", + "S3_OBJECT_EMPTY", + "UNKNOWN_ERROR" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key." + }, + "Value": { + "type": "string", + "description": "The tag's value." + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of AllowList.", + "type": "string" + }, + "Description": { + "description": "Description of AllowList.", + "type": "string" + }, + "Criteria": { + "description": "AllowList criteria.", + "$ref": "#/definitions/Criteria" + }, + "Id": { + "description": "AllowList ID.", + "type": "string" + }, + "Arn": { + "description": "AllowList ARN.", + "type": "string" + }, + "Status": { + "description": "AllowList status.", + "$ref": "#/definitions/Status" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Criteria" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/Status" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Arn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "macie2:CreateAllowList", + "macie2:GetAllowList", + "macie2:TagResource" + ] + }, + "read": { + "permissions": [ + "macie2:GetAllowList" + ] + }, + "update": { + "permissions": [ + "macie2:UpdateAllowList", + "macie2:GetAllowList", + "macie2:TagResource", + "macie2:UntagResource" + ] + }, + "delete": { + "permissions": [ + "macie2:DeleteAllowList" + ] + }, + "list": { + "permissions": [ + "macie2:ListAllowLists" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/macie/customdataidentifier.json b/internal/aws/cfn/schemas/aws/macie/customdataidentifier.json new file mode 100644 index 00000000..69e3d37b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/macie/customdataidentifier.json @@ -0,0 +1,136 @@ +{ + "typeName": "AWS::Macie::CustomDataIdentifier", + "description": "Macie CustomDataIdentifier resource schema", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-macie.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key." + }, + "Value": { + "type": "string", + "description": "The tag's value." + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of custom data identifier.", + "type": "string" + }, + "Description": { + "description": "Description of custom data identifier.", + "type": "string" + }, + "Regex": { + "description": "Regular expression for custom data identifier.", + "type": "string" + }, + "MaximumMatchDistance": { + "description": "Maximum match distance.", + "type": "integer" + }, + "Keywords": { + "description": "Keywords to be matched against.", + "type": "array", + "items": { + "type": "string" + } + }, + "IgnoreWords": { + "description": "Words to be ignored.", + "type": "array", + "items": { + "type": "string" + } + }, + "Id": { + "description": "Custom data identifier ID.", + "type": "string" + }, + "Arn": { + "description": "Custom data identifier ARN.", + "type": "string" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "Regex" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name", + "/properties/Description", + "/properties/Regex", + "/properties/MaximumMatchDistance", + "/properties/Keywords", + "/properties/IgnoreWords" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Arn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "macie2:CreateCustomDataIdentifier", + "macie2:GetCustomDataIdentifier", + "macie2:TagResource" + ] + }, + "read": { + "permissions": [ + "macie2:GetCustomDataIdentifier" + ] + }, + "delete": { + "permissions": [ + "macie2:DeleteCustomDataIdentifier" + ] + }, + "list": { + "permissions": [ + "macie2:ListCustomDataIdentifiers" + ] + }, + "update": { + "permissions": [ + "macie2:TagResource", + "macie2:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/macie/findingsfilter.json b/internal/aws/cfn/schemas/aws/macie/findingsfilter.json new file mode 100644 index 00000000..1c5a8c3e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/macie/findingsfilter.json @@ -0,0 +1,195 @@ +{ + "typeName": "AWS::Macie::FindingsFilter", + "description": "Macie FindingsFilter resource schema.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-macie.git", + "definitions": { + "CriterionAdditionalProperties": { + "type": "object", + "properties": { + "gt": { + "type": "integer", + "format": "int64" + }, + "gte": { + "type": "integer", + "format": "int64" + }, + "lt": { + "type": "integer", + "format": "int64" + }, + "lte": { + "type": "integer", + "format": "int64" + }, + "eq": { + "type": "array", + "items": { + "type": "string" + } + }, + "neq": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Criterion": { + "description": "Map of filter criteria.", + "type": "object", + "patternProperties": { + "\\w": { + "$ref": "#/definitions/CriterionAdditionalProperties" + } + }, + "additionalProperties": false + }, + "FindingCriteria": { + "type": "object", + "properties": { + "Criterion": { + "$ref": "#/definitions/Criterion" + } + }, + "additionalProperties": false + }, + "FindingFilterAction": { + "type": "string", + "enum": [ + "ARCHIVE", + "NOOP" + ] + }, + "FindingsFilterListItem": { + "description": "Returned by ListHandler representing filter name and ID.", + "type": "object", + "properties": { + "Id": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The tag's key." + }, + "Value": { + "type": "string", + "description": "The tag's value." + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Findings filter name", + "type": "string" + }, + "Description": { + "description": "Findings filter description", + "type": "string" + }, + "FindingCriteria": { + "description": "Findings filter criteria.", + "$ref": "#/definitions/FindingCriteria" + }, + "Action": { + "description": "Findings filter action.", + "$ref": "#/definitions/FindingFilterAction" + }, + "Position": { + "description": "Findings filter position.", + "type": "integer" + }, + "Id": { + "description": "Findings filter ID.", + "type": "string" + }, + "Arn": { + "description": "Findings filter ARN.", + "type": "string" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "FindingCriteria" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Arn" + ], + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "macie2:GetFindingsFilter", + "macie2:CreateFindingsFilter", + "macie2:TagResource" + ] + }, + "read": { + "permissions": [ + "macie2:GetFindingsFilter" + ] + }, + "update": { + "permissions": [ + "macie2:GetFindingsFilter", + "macie2:UpdateFindingsFilter", + "macie2:TagResource", + "macie2:UntagResource" + ] + }, + "delete": { + "permissions": [ + "macie2:DeleteFindingsFilter" + ] + }, + "list": { + "permissions": [ + "macie2:ListFindingsFilters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/macie/session.json b/internal/aws/cfn/schemas/aws/macie/session.json new file mode 100644 index 00000000..9c1f621e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/macie/session.json @@ -0,0 +1,77 @@ +{ + "typeName": "AWS::Macie::Session", + "description": "The AWS::Macie::Session resource specifies a new Amazon Macie session. A session is an object that represents the Amazon Macie service. A session is required for Amazon Macie to become operational.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-macie.git", + "properties": { + "AwsAccountId": { + "description": "AWS account ID of customer", + "type": "string" + }, + "Status": { + "description": "A enumeration value that specifies the status of the Macie Session.", + "type": "string", + "enum": [ + "ENABLED", + "PAUSED" + ], + "default": "ENABLED" + }, + "FindingPublishingFrequency": { + "description": "A enumeration value that specifies how frequently finding updates are published.", + "type": "string", + "enum": [ + "FIFTEEN_MINUTES", + "ONE_HOUR", + "SIX_HOURS" + ], + "default": "SIX_HOURS" + }, + "ServiceRole": { + "description": "Service role used by Macie", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "primaryIdentifier": [ + "/properties/AwsAccountId" + ], + "readOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/ServiceRole" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "macie2:GetMacieSession", + "macie2:EnableMacie" + ] + }, + "read": { + "permissions": [ + "macie2:GetMacieSession" + ] + }, + "list": { + "permissions": [ + "macie2:GetMacieSession" + ] + }, + "update": { + "permissions": [ + "macie2:GetMacieSession", + "macie2:UpdateMacieSession" + ] + }, + "delete": { + "permissions": [ + "macie2:DisableMacie" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/managedblockchain/accessor.json b/internal/aws/cfn/schemas/aws/managedblockchain/accessor.json new file mode 100644 index 00000000..debcf452 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/managedblockchain/accessor.json @@ -0,0 +1,157 @@ +{ + "typeName": "AWS::ManagedBlockchain::Accessor", + "description": "Definition of AWS::ManagedBlockchain::com.amazonaws.taiga.webservice.api#Accessor Resource Type", + "definitions": { + "AccessorStatus": { + "type": "string", + "enum": [ + "AVAILABLE", + "PENDING_DELETION", + "DELETED" + ] + }, + "AccessorType": { + "type": "string", + "enum": [ + "BILLING_TOKEN" + ] + }, + "NetworkAccessorType": { + "type": "string", + "enum": [ + "ETHEREUM_GOERLI", + "ETHEREUM_MAINNET", + "ETHEREUM_MAINNET_AND_GOERLI", + "POLYGON_MAINNET", + "POLYGON_MUMBAI" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 1011, + "minLength": 1, + "pattern": "^arn:.+:.+:.+:.+:.+$" + }, + "BillingToken": { + "type": "string", + "maxLength": 42, + "minLength": 42 + }, + "CreationDate": { + "type": "string" + }, + "Id": { + "type": "string", + "maxLength": 32, + "minLength": 1 + }, + "Status": { + "$ref": "#/definitions/AccessorStatus" + }, + "AccessorType": { + "$ref": "#/definitions/AccessorType" + }, + "NetworkType": { + "$ref": "#/definitions/NetworkAccessorType" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "insertionOrder": false, + "uniqueItems": true, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true + }, + "required": [ + "AccessorType" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/BillingToken", + "/properties/CreationDate", + "/properties/Status" + ], + "createOnlyProperties": [ + "/properties/AccessorType", + "/properties/NetworkType" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Arn" + ] + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "managedblockchain:CreateAccessor", + "managedblockchain:TagResource", + "managedblockchain:GetAccessor" + ] + }, + "read": { + "permissions": [ + "managedblockchain:GetAccessor" + ] + }, + "update": { + "permissions": [ + "managedblockchain:GetAccessor", + "managedblockchain:CreateAccessor", + "managedblockchain:TagResource", + "managedblockchain:UntagResource" + ] + }, + "delete": { + "permissions": [ + "managedblockchain:DeleteAccessor" + ] + }, + "list": { + "permissions": [ + "managedblockchain:ListAccessors" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/managedblockchain/member.json b/internal/aws/cfn/schemas/aws/managedblockchain/member.json new file mode 100644 index 00000000..2cdd6a5b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/managedblockchain/member.json @@ -0,0 +1,151 @@ +{ + "typeName": "AWS::ManagedBlockchain::Member", + "description": "Resource Type definition for AWS::ManagedBlockchain::Member", + "additionalProperties": false, + "properties": { + "MemberId": { + "type": "string" + }, + "NetworkId": { + "type": "string" + }, + "MemberConfiguration": { + "$ref": "#/definitions/MemberConfiguration" + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + }, + "InvitationId": { + "type": "string" + } + }, + "definitions": { + "NetworkConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "FrameworkVersion": { + "type": "string" + }, + "VotingPolicy": { + "$ref": "#/definitions/VotingPolicy" + }, + "Framework": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "NetworkFrameworkConfiguration": { + "$ref": "#/definitions/NetworkFrameworkConfiguration" + } + }, + "required": [ + "VotingPolicy", + "Framework", + "FrameworkVersion", + "Name" + ] + }, + "MemberConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "MemberFrameworkConfiguration": { + "$ref": "#/definitions/MemberFrameworkConfiguration" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "MemberFrameworkConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "MemberFabricConfiguration": { + "$ref": "#/definitions/MemberFabricConfiguration" + } + } + }, + "VotingPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "ApprovalThresholdPolicy": { + "$ref": "#/definitions/ApprovalThresholdPolicy" + } + } + }, + "NetworkFrameworkConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "NetworkFabricConfiguration": { + "$ref": "#/definitions/NetworkFabricConfiguration" + } + } + }, + "MemberFabricConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AdminUsername": { + "type": "string" + }, + "AdminPassword": { + "type": "string" + } + }, + "required": [ + "AdminUsername", + "AdminPassword" + ] + }, + "NetworkFabricConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Edition": { + "type": "string" + } + }, + "required": [ + "Edition" + ] + }, + "ApprovalThresholdPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "ThresholdComparator": { + "type": "string" + }, + "ThresholdPercentage": { + "type": "integer" + }, + "ProposalDurationInHours": { + "type": "integer" + } + } + } + }, + "required": [ + "MemberConfiguration" + ], + "readOnlyProperties": [ + "/properties/MemberId" + ], + "primaryIdentifier": [ + "/properties/MemberId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/managedblockchain/node.json b/internal/aws/cfn/schemas/aws/managedblockchain/node.json new file mode 100644 index 00000000..b29b43b9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/managedblockchain/node.json @@ -0,0 +1,51 @@ +{ + "typeName": "AWS::ManagedBlockchain::Node", + "description": "Resource Type definition for AWS::ManagedBlockchain::Node", + "additionalProperties": false, + "properties": { + "NodeId": { + "type": "string" + }, + "MemberId": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "NetworkId": { + "type": "string" + }, + "NodeConfiguration": { + "$ref": "#/definitions/NodeConfiguration" + } + }, + "definitions": { + "NodeConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceType": { + "type": "string" + }, + "AvailabilityZone": { + "type": "string" + } + }, + "required": [ + "AvailabilityZone", + "InstanceType" + ] + } + }, + "required": [ + "NetworkId", + "NodeConfiguration" + ], + "primaryIdentifier": [ + "/properties/NodeId" + ], + "readOnlyProperties": [ + "/properties/NodeId", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/bridge.json b/internal/aws/cfn/schemas/aws/mediaconnect/bridge.json new file mode 100644 index 00000000..32062901 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/bridge.json @@ -0,0 +1,331 @@ +{ + "typeName": "AWS::MediaConnect::Bridge", + "description": "Resource schema for AWS::MediaConnect::Bridge", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "definitions": { + "FailoverConfig": { + "description": "The settings for source failover.", + "type": "object", + "properties": { + "State": { + "$ref": "#/definitions/FailoverConfigStateEnum" + }, + "FailoverMode": { + "description": "The type of failover you choose for this flow. FAILOVER allows switching between different streams.", + "$ref": "#/definitions/FailoverModeEnum" + }, + "SourcePriority": { + "description": "The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams.", + "$ref": "#/definitions/SourcePriority" + } + }, + "required": [ + "FailoverMode" + ], + "additionalProperties": false + }, + "BridgeStateEnum": { + "type": "string", + "enum": [ + "CREATING", + "STANDBY", + "STARTING", + "DEPLOYING", + "ACTIVE", + "STOPPING", + "DELETING", + "DELETED", + "START_FAILED", + "START_PENDING", + "UPDATING" + ] + }, + "FailoverConfigStateEnum": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "FailoverModeEnum": { + "type": "string", + "enum": [ + "FAILOVER" + ] + }, + "SourcePriority": { + "type": "object", + "description": "The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams.", + "properties": { + "PrimarySource": { + "description": "The name of the source you choose as the primary source for this flow.", + "type": "string" + } + }, + "additionalProperties": false + }, + "BridgeOutput": { + "description": "The output of the bridge.", + "type": "object", + "properties": { + "NetworkOutput": { + "$ref": "#/definitions/BridgeNetworkOutput" + } + }, + "additionalProperties": false + }, + "BridgeNetworkOutput": { + "description": "The output of the bridge. A network output is delivered to your premises.", + "type": "object", + "properties": { + "Name": { + "description": "The network output name.", + "type": "string" + }, + "Protocol": { + "description": "The network output protocol.", + "$ref": "#/definitions/ProtocolEnum" + }, + "IpAddress": { + "description": "The network output IP Address.", + "type": "string" + }, + "Port": { + "description": "The network output port.", + "type": "integer" + }, + "NetworkName": { + "description": "The network output's gateway network name.", + "type": "string" + }, + "Ttl": { + "description": "The network output TTL.", + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Protocol", + "IpAddress", + "Port", + "NetworkName", + "Ttl" + ] + }, + "BridgeSource": { + "description": "The bridge's source.", + "type": "object", + "properties": { + "FlowSource": { + "$ref": "#/definitions/BridgeFlowSource" + }, + "NetworkSource": { + "$ref": "#/definitions/BridgeNetworkSource" + } + }, + "additionalProperties": false + }, + "BridgeFlowSource": { + "type": "object", + "description": "The source of the bridge. A flow source originates in MediaConnect as an existing cloud flow.", + "properties": { + "Name": { + "description": "The name of the flow source.", + "type": "string" + }, + "FlowArn": { + "description": "The ARN of the cloud flow used as a source of this bridge.", + "type": "string" + }, + "FlowVpcInterfaceAttachment": { + "description": "The name of the VPC interface attachment to use for this source.", + "$ref": "#/definitions/VpcInterfaceAttachment" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "FlowArn" + ] + }, + "VpcInterfaceAttachment": { + "type": "object", + "description": "The settings for attaching a VPC interface to an resource.", + "properties": { + "VpcInterfaceName": { + "description": "The name of the VPC interface to use for this resource.", + "type": "string" + } + }, + "additionalProperties": false + }, + "BridgeNetworkSource": { + "type": "object", + "description": "The source of the bridge. A network source originates at your premises.", + "properties": { + "Name": { + "description": "The name of the network source.", + "type": "string" + }, + "Protocol": { + "description": "The network source protocol.", + "$ref": "#/definitions/ProtocolEnum" + }, + "MulticastIp": { + "description": "The network source multicast IP.", + "type": "string" + }, + "Port": { + "description": "The network source port.", + "type": "integer" + }, + "NetworkName": { + "description": "The network source's gateway network name.", + "type": "string" + } + }, + "required": [ + "Name", + "Protocol", + "MulticastIp", + "Port", + "NetworkName" + ], + "additionalProperties": false + }, + "ProtocolEnum": { + "type": "string", + "enum": [ + "rtp-fec", + "rtp", + "udp" + ] + }, + "IngressGatewayBridge": { + "type": "object", + "properties": { + "MaxBitrate": { + "description": "The maximum expected bitrate of the ingress bridge.", + "type": "integer" + }, + "MaxOutputs": { + "description": "The maximum number of outputs on the ingress bridge.", + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "MaxBitrate", + "MaxOutputs" + ] + }, + "EgressGatewayBridge": { + "type": "object", + "properties": { + "MaxBitrate": { + "type": "integer", + "description": "The maximum expected bitrate of the egress bridge." + } + }, + "additionalProperties": false, + "required": [ + "MaxBitrate" + ] + } + }, + "properties": { + "Name": { + "description": "The name of the bridge.", + "type": "string" + }, + "BridgeArn": { + "description": "The Amazon Resource Number (ARN) of the bridge.", + "type": "string" + }, + "PlacementArn": { + "description": "The placement Amazon Resource Number (ARN) of the bridge.", + "type": "string" + }, + "BridgeState": { + "$ref": "#/definitions/BridgeStateEnum" + }, + "SourceFailoverConfig": { + "$ref": "#/definitions/FailoverConfig" + }, + "Outputs": { + "description": "The outputs on this bridge.", + "type": "array", + "minItems": 0, + "maxItems": 2, + "items": { + "$ref": "#/definitions/BridgeOutput" + }, + "insertionOrder": true + }, + "Sources": { + "description": "The sources on this bridge.", + "type": "array", + "minItems": 0, + "maxItems": 2, + "items": { + "$ref": "#/definitions/BridgeSource" + }, + "insertionOrder": true + }, + "IngressGatewayBridge": { + "type": "object", + "$ref": "#/definitions/IngressGatewayBridge" + }, + "EgressGatewayBridge": { + "type": "object", + "$ref": "#/definitions/EgressGatewayBridge" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "PlacementArn", + "Sources" + ], + "readOnlyProperties": [ + "/properties/BridgeArn", + "/properties/BridgeState" + ], + "primaryIdentifier": [ + "/properties/BridgeArn" + ], + "handlers": { + "create": { + "permissions": [ + "mediaconnect:CreateBridge", + "mediaconnect:DescribeBridge" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeBridge" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeBridge", + "mediaconnect:UpdateBridge" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:DescribeBridge", + "mediaconnect:DeleteBridge" + ] + }, + "list": { + "permissions": [ + "mediaconnect:ListBridges" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/bridgeoutput.json b/internal/aws/cfn/schemas/aws/mediaconnect/bridgeoutput.json new file mode 100644 index 00000000..48ec1e60 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/bridgeoutput.json @@ -0,0 +1,104 @@ +{ + "typeName": "AWS::MediaConnect::BridgeOutput", + "description": "Resource schema for AWS::MediaConnect::BridgeOutput", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "definitions": { + "BridgeNetworkOutput": { + "type": "object", + "description": "The output of the bridge. A network output is delivered to your premises.", + "properties": { + "Protocol": { + "type": "string", + "enum": [ + "rtp-fec", + "rtp", + "udp" + ], + "description": "The network output protocol." + }, + "IpAddress": { + "type": "string", + "description": "The network output IP Address." + }, + "Port": { + "type": "integer", + "description": "The network output port." + }, + "NetworkName": { + "type": "string", + "description": "The network output's gateway network name." + }, + "Ttl": { + "type": "integer", + "description": "The network output TTL." + } + }, + "required": [ + "Protocol", + "IpAddress", + "Port", + "NetworkName", + "Ttl" + ], + "additionalProperties": false + } + }, + "properties": { + "BridgeArn": { + "description": "The Amazon Resource Number (ARN) of the bridge.", + "type": "string" + }, + "NetworkOutput": { + "description": "The output of the bridge.", + "$ref": "#/definitions/BridgeNetworkOutput" + }, + "Name": { + "type": "string", + "description": "The network output name." + } + }, + "additionalProperties": false, + "required": [ + "BridgeArn", + "Name", + "NetworkOutput" + ], + "createOnlyProperties": [ + "/properties/BridgeArn", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/BridgeArn", + "/properties/Name" + ], + "propertyTransform": { + "/properties/Name": "$join([\"Output:\",Name])" + }, + "handlers": { + "create": { + "permissions": [ + "mediaconnect:AddBridgeOutputs", + "mediaconnect:DescribeBridge" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeBridge" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeBridge", + "mediaconnect:UpdateBridgeOutput" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:RemoveBridgeOutput" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/bridgesource.json b/internal/aws/cfn/schemas/aws/mediaconnect/bridgesource.json new file mode 100644 index 00000000..adc62968 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/bridgesource.json @@ -0,0 +1,132 @@ +{ + "typeName": "AWS::MediaConnect::BridgeSource", + "description": "Resource schema for AWS::MediaConnect::BridgeSource", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "definitions": { + "BridgeFlowSource": { + "type": "object", + "description": "The source of the bridge. A flow source originates in MediaConnect as an existing cloud flow.", + "properties": { + "FlowArn": { + "description": "The ARN of the cloud flow used as a source of this bridge.", + "type": "string" + }, + "FlowVpcInterfaceAttachment": { + "description": "The name of the VPC interface attachment to use for this source.", + "$ref": "#/definitions/VpcInterfaceAttachment" + } + }, + "additionalProperties": false, + "required": [ + "FlowArn" + ] + }, + "VpcInterfaceAttachment": { + "type": "object", + "description": "The settings for attaching a VPC interface to an resource.", + "properties": { + "VpcInterfaceName": { + "description": "The name of the VPC interface to use for this resource.", + "type": "string" + } + }, + "additionalProperties": false + }, + "BridgeNetworkSource": { + "type": "object", + "description": "The source of the bridge. A network source originates at your premises.", + "properties": { + "Protocol": { + "description": "The network source protocol.", + "$ref": "#/definitions/ProtocolEnum" + }, + "MulticastIp": { + "description": "The network source multicast IP.", + "type": "string" + }, + "Port": { + "description": "The network source port.", + "type": "integer" + }, + "NetworkName": { + "description": "The network source's gateway network name.", + "type": "string" + } + }, + "required": [ + "Protocol", + "MulticastIp", + "Port", + "NetworkName" + ], + "additionalProperties": false + }, + "ProtocolEnum": { + "type": "string", + "enum": [ + "rtp-fec", + "rtp", + "udp" + ] + } + }, + "properties": { + "Name": { + "type": "string", + "description": "The name of the source." + }, + "BridgeArn": { + "description": "The Amazon Resource Number (ARN) of the bridge.", + "type": "string" + }, + "FlowSource": { + "$ref": "#/definitions/BridgeFlowSource" + }, + "NetworkSource": { + "$ref": "#/definitions/BridgeNetworkSource" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "BridgeArn" + ], + "createOnlyProperties": [ + "/properties/BridgeArn", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/BridgeArn", + "/properties/Name" + ], + "propertyTransform": { + "/properties/Name": "$join([\"Source:\",Name])" + }, + "handlers": { + "create": { + "permissions": [ + "mediaconnect:AddBridgeSources", + "mediaconnect:DescribeBridge" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeBridge" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeBridge", + "mediaconnect:UpdateBridgeSource" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:RemoveBridgeSource" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/flow.json b/internal/aws/cfn/schemas/aws/mediaconnect/flow.json new file mode 100644 index 00000000..020f680c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/flow.json @@ -0,0 +1,308 @@ +{ + "typeName": "AWS::MediaConnect::Flow", + "description": "Resource schema for AWS::MediaConnect::Flow", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "properties": { + "FlowArn": { + "description": "The Amazon Resource Name (ARN), a unique identifier for any AWS resource, of the flow.", + "type": "string" + }, + "Name": { + "description": "The name of the flow.", + "type": "string" + }, + "AvailabilityZone": { + "description": "The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS.", + "type": "string" + }, + "FlowAvailabilityZone": { + "description": "The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS.(ReadOnly)", + "type": "string" + }, + "Source": { + "description": "The source of the flow.", + "$ref": "#/definitions/Source" + }, + "SourceFailoverConfig": { + "description": "The source failover config of the flow.", + "$ref": "#/definitions/FailoverConfig" + } + }, + "definitions": { + "Source": { + "description": "The settings for the source of the flow.", + "type": "object", + "properties": { + "SourceArn": { + "type": "string", + "description": "The ARN of the source." + }, + "Decryption": { + "$ref": "#/definitions/Encryption", + "description": "The type of decryption that is used on the content ingested from this source." + }, + "Description": { + "type": "string", + "description": "A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account." + }, + "EntitlementArn": { + "type": "string", + "description": "The ARN of the entitlement that allows you to subscribe to content that comes from another AWS account. The entitlement is set by the content originator and the ARN is generated as part of the originator's flow." + }, + "GatewayBridgeSource": { + "$ref": "#/definitions/GatewayBridgeSource", + "description": "The source configuration for cloud flows receiving a stream from a bridge." + }, + "IngestIp": { + "type": "string", + "description": "The IP address that the flow will be listening on for incoming content." + }, + "IngestPort": { + "type": "integer", + "description": "The port that the flow will be listening on for incoming content." + }, + "MaxBitrate": { + "type": "integer", + "description": "The smoothing max bitrate for RIST, RTP, and RTP-FEC streams." + }, + "MaxLatency": { + "type": "integer", + "description": "The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams.", + "default": 2000 + }, + "MinLatency": { + "type": "integer", + "description": "The minimum latency in milliseconds.", + "default": 2000 + }, + "Name": { + "type": "string", + "description": "The name of the source." + }, + "Protocol": { + "type": "string", + "enum": [ + "zixi-push", + "rtp-fec", + "rtp", + "rist", + "fujitsu-qos", + "srt-listener", + "srt-caller" + ], + "description": "The protocol that is used by the source." + }, + "SenderIpAddress": { + "type": "string", + "description": "The IP address that the flow communicates with to initiate connection with the sender for fujitsu-qos protocol." + }, + "SenderControlPort": { + "type": "integer", + "description": "The port that the flow uses to send outbound requests to initiate connection with the sender for fujitsu-qos protocol." + }, + "StreamId": { + "type": "string", + "description": "The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams." + }, + "SourceIngestPort": { + "type": "string", + "description": "The port that the flow will be listening on for incoming content.(ReadOnly)" + }, + "SourceListenerAddress": { + "type": "string", + "description": "Source IP or domain name for SRT-caller protocol." + }, + "SourceListenerPort": { + "type": "integer", + "description": "Source port for SRT-caller protocol." + }, + "VpcInterfaceName": { + "type": "string", + "description": "The name of the VPC Interface this Source is configured with." + }, + "WhitelistCidr": { + "type": "string", + "description": "The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16." + } + }, + "additionalProperties": false + }, + "Encryption": { + "type": "object", + "description": "Information about the encryption of the flow.", + "properties": { + "Algorithm": { + "type": "string", + "enum": [ + "aes128", + "aes192", + "aes256" + ], + "description": "The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256)." + }, + "ConstantInitializationVector": { + "type": "string", + "description": "A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption." + }, + "DeviceId": { + "type": "string", + "description": "The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "KeyType": { + "type": "string", + "enum": [ + "speke", + "static-key", + "srt-password" + ], + "description": "The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key).", + "default": "static-key" + }, + "Region": { + "type": "string", + "description": "The AWS Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "ResourceId": { + "type": "string", + "description": "An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity)." + }, + "SecretArn": { + "type": "string", + "description": " The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption." + }, + "Url": { + "type": "string", + "description": "The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption." + } + }, + "additionalProperties": false, + "required": [ + "RoleArn" + ] + }, + "FailoverConfig": { + "type": "object", + "description": "The settings for source failover", + "properties": { + "State": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "RecoveryWindow": { + "type": "integer", + "description": "Search window time to look for dash-7 packets" + }, + "FailoverMode": { + "type": "string", + "description": "The type of failover you choose for this flow. MERGE combines the source streams into a single stream, allowing graceful recovery from any single-source loss. FAILOVER allows switching between different streams.", + "enum": [ + "MERGE", + "FAILOVER" + ] + }, + "SourcePriority": { + "type": "object", + "description": "The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams.", + "properties": { + "PrimarySource": { + "type": "string", + "description": "The name of the source you choose as the primary source for this flow." + } + }, + "required": [ + "PrimarySource" + ], + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "GatewayBridgeSource": { + "type": "object", + "description": "The source configuration for cloud flows receiving a stream from a bridge.", + "properties": { + "BridgeArn": { + "type": "string", + "description": "The ARN of the bridge feeding this flow." + }, + "VpcInterfaceAttachment": { + "$ref": "#/definitions/VpcInterfaceAttachment", + "description": "The name of the VPC interface attachment to use for this bridge source." + } + }, + "additionalProperties": false, + "required": [ + "BridgeArn" + ] + }, + "VpcInterfaceAttachment": { + "type": "object", + "description": "The settings for attaching a VPC interface to an resource.", + "properties": { + "VpcInterfaceName": { + "type": "string", + "description": "The name of the VPC interface to use for this resource." + } + }, + "additionalProperties": false + } + }, + "required": [ + "Name", + "Source" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name", + "/properties/AvailabilityZone", + "/properties/Source/Name" + ], + "readOnlyProperties": [ + "/properties/FlowArn", + "/properties/FlowAvailabilityZone", + "/properties/Source/SourceArn", + "/properties/Source/IngestIp", + "/properties/Source/SourceIngestPort" + ], + "primaryIdentifier": [ + "/properties/FlowArn" + ], + "handlers": { + "create": { + "permissions": [ + "mediaconnect:CreateFlow", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:UpdateFlow", + "mediaconnect:UpdateFlowSource" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:DeleteFlow" + ] + }, + "list": { + "permissions": [ + "mediaconnect:ListFlows" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/flowentitlement.json b/internal/aws/cfn/schemas/aws/mediaconnect/flowentitlement.json new file mode 100644 index 00000000..bf230201 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/flowentitlement.json @@ -0,0 +1,153 @@ +{ + "typeName": "AWS::MediaConnect::FlowEntitlement", + "description": "Resource schema for AWS::MediaConnect::FlowEntitlement", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "definitions": { + "Encryption": { + "type": "object", + "description": "Information about the encryption of the flow.", + "properties": { + "Algorithm": { + "type": "string", + "enum": [ + "aes128", + "aes192", + "aes256" + ], + "description": "The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256)." + }, + "ConstantInitializationVector": { + "type": "string", + "description": "A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption." + }, + "DeviceId": { + "type": "string", + "description": "The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "KeyType": { + "type": "string", + "enum": [ + "speke", + "static-key" + ], + "description": "The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key).", + "default": "static-key" + }, + "Region": { + "type": "string", + "description": "The AWS Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "ResourceId": { + "type": "string", + "description": "An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity)." + }, + "SecretArn": { + "type": "string", + "description": " The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption." + }, + "Url": { + "type": "string", + "description": "The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption." + } + }, + "additionalProperties": false, + "required": [ + "Algorithm", + "RoleArn" + ] + } + }, + "properties": { + "FlowArn": { + "type": "string", + "description": "The ARN of the flow." + }, + "EntitlementArn": { + "type": "string", + "description": "The ARN of the entitlement." + }, + "DataTransferSubscriberFeePercent": { + "type": "integer", + "default": 0, + "description": "Percentage from 0-100 of the data transfer cost to be billed to the subscriber." + }, + "Description": { + "type": "string", + "description": "A description of the entitlement." + }, + "Encryption": { + "$ref": "#/definitions/Encryption", + "description": "The type of encryption that will be used on the output that is associated with this entitlement." + }, + "EntitlementStatus": { + "type": "string", + "description": " An indication of whether the entitlement is enabled.", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "Name": { + "type": "string", + "description": "The name of the entitlement." + }, + "Subscribers": { + "type": "array", + "description": "The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flow using your content as the source.", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "FlowArn", + "Name", + "Subscribers", + "Description" + ], + "createOnlyProperties": [ + "/properties/DataTransferSubscriberFeePercent", + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/EntitlementArn" + ], + "primaryIdentifier": [ + "/properties/EntitlementArn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "mediaconnect:GrantFlowEntitlements" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:UpdateFlowEntitlement" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:RevokeFlowEntitlement" + ] + }, + "list": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/flowoutput.json b/internal/aws/cfn/schemas/aws/mediaconnect/flowoutput.json new file mode 100644 index 00000000..ddc943fc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/flowoutput.json @@ -0,0 +1,174 @@ +{ + "typeName": "AWS::MediaConnect::FlowOutput", + "description": "Resource schema for AWS::MediaConnect::FlowOutput", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "definitions": { + "Encryption": { + "type": "object", + "description": "Information about the encryption of the flow.", + "properties": { + "Algorithm": { + "type": "string", + "enum": [ + "aes128", + "aes192", + "aes256" + ], + "description": "The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256)." + }, + "KeyType": { + "type": "string", + "enum": [ + "static-key", + "srt-password" + ], + "description": "The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key).", + "default": "static-key" + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity)." + }, + "SecretArn": { + "type": "string", + "description": " The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption." + } + }, + "additionalProperties": false, + "required": [ + "RoleArn", + "SecretArn" + ] + }, + "VpcInterfaceAttachment": { + "type": "object", + "description": "The settings for attaching a VPC interface to an output.", + "properties": { + "VpcInterfaceName": { + "type": "string", + "description": "The name of the VPC interface to use for this output." + } + }, + "additionalProperties": false + } + }, + "properties": { + "FlowArn": { + "description": "The Amazon Resource Name (ARN), a unique identifier for any AWS resource, of the flow.", + "type": "string" + }, + "OutputArn": { + "description": "The ARN of the output.", + "type": "string" + }, + "CidrAllowList": { + "type": "array", + "description": "The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.", + "items": { + "type": "string" + } + }, + "Encryption": { + "$ref": "#/definitions/Encryption", + "description": "The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key)." + }, + "Description": { + "type": "string", + "description": "A description of the output." + }, + "Destination": { + "type": "string", + "description": "The address where you want to send the output." + }, + "MaxLatency": { + "type": "integer", + "description": "The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams." + }, + "MinLatency": { + "type": "integer", + "description": "The minimum latency in milliseconds." + }, + "Name": { + "type": "string", + "description": "The name of the output. This value must be unique within the current flow." + }, + "Port": { + "type": "integer", + "description": "The port to use when content is distributed to this output." + }, + "Protocol": { + "type": "string", + "enum": [ + "zixi-push", + "rtp-fec", + "rtp", + "zixi-pull", + "rist", + "fujitsu-qos", + "srt-listener", + "srt-caller" + ], + "description": "The protocol that is used by the source or output." + }, + "RemoteId": { + "type": "string", + "description": "The remote ID for the Zixi-pull stream." + }, + "SmoothingLatency": { + "type": "integer", + "description": "The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams." + }, + "StreamId": { + "type": "string", + "description": "The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams." + }, + "VpcInterfaceAttachment": { + "$ref": "#/definitions/VpcInterfaceAttachment", + "description": "The name of the VPC interface attachment to use for this output." + } + }, + "additionalProperties": false, + "required": [ + "FlowArn", + "Protocol" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/OutputArn" + ], + "primaryIdentifier": [ + "/properties/OutputArn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "mediaconnect:AddFlowOutputs" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:UpdateFlowOutput" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:RemoveFlowOutput" + ] + }, + "list": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/flowsource.json b/internal/aws/cfn/schemas/aws/mediaconnect/flowsource.json new file mode 100644 index 00000000..e8ddb144 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/flowsource.json @@ -0,0 +1,237 @@ +{ + "typeName": "AWS::MediaConnect::FlowSource", + "description": "Resource schema for AWS::MediaConnect::FlowSource", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "definitions": { + "Encryption": { + "type": "object", + "description": "Information about the encryption of the flow.", + "properties": { + "Algorithm": { + "type": "string", + "enum": [ + "aes128", + "aes192", + "aes256" + ], + "description": "The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256)." + }, + "ConstantInitializationVector": { + "type": "string", + "description": "A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption." + }, + "DeviceId": { + "type": "string", + "description": "The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "KeyType": { + "type": "string", + "enum": [ + "speke", + "static-key", + "srt-password" + ], + "description": "The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key).", + "default": "static-key" + }, + "Region": { + "type": "string", + "description": "The AWS Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "ResourceId": { + "type": "string", + "description": "An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption." + }, + "RoleArn": { + "type": "string", + "description": "The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity)." + }, + "SecretArn": { + "type": "string", + "description": " The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption." + }, + "Url": { + "type": "string", + "description": "The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption." + } + }, + "additionalProperties": false, + "required": [ + "RoleArn" + ] + }, + "GatewayBridgeSource": { + "type": "object", + "description": "The source configuration for cloud flows receiving a stream from a bridge.", + "properties": { + "BridgeArn": { + "type": "string", + "description": "The ARN of the bridge feeding this flow." + }, + "VpcInterfaceAttachment": { + "$ref": "#/definitions/VpcInterfaceAttachment", + "description": "The name of the VPC interface attachment to use for this bridge source." + } + }, + "additionalProperties": false, + "required": [ + "BridgeArn" + ] + }, + "VpcInterfaceAttachment": { + "type": "object", + "description": "The settings for attaching a VPC interface to an resource.", + "properties": { + "VpcInterfaceName": { + "type": "string", + "description": "The name of the VPC interface to use for this resource." + } + }, + "additionalProperties": false + } + }, + "properties": { + "FlowArn": { + "type": "string", + "description": "The ARN of the flow." + }, + "SourceArn": { + "type": "string", + "description": "The ARN of the source." + }, + "Decryption": { + "$ref": "#/definitions/Encryption", + "description": "The type of encryption that is used on the content ingested from this source." + }, + "Description": { + "type": "string", + "description": "A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account." + }, + "EntitlementArn": { + "type": "string", + "description": "The ARN of the entitlement that allows you to subscribe to content that comes from another AWS account. The entitlement is set by the content originator and the ARN is generated as part of the originator's flow." + }, + "GatewayBridgeSource": { + "$ref": "#/definitions/GatewayBridgeSource", + "description": "The source configuration for cloud flows receiving a stream from a bridge." + }, + "IngestIp": { + "type": "string", + "description": "The IP address that the flow will be listening on for incoming content." + }, + "IngestPort": { + "type": "integer", + "description": "The port that the flow will be listening on for incoming content." + }, + "MaxBitrate": { + "type": "integer", + "description": "The smoothing max bitrate for RIST, RTP, and RTP-FEC streams." + }, + "MaxLatency": { + "type": "integer", + "description": "The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams.", + "default": 2000 + }, + "MinLatency": { + "type": "integer", + "description": "The minimum latency in milliseconds.", + "default": 2000 + }, + "Name": { + "type": "string", + "description": "The name of the source." + }, + "Protocol": { + "type": "string", + "enum": [ + "zixi-push", + "rtp-fec", + "rtp", + "rist", + "srt-listener", + "srt-caller" + ], + "description": "The protocol that is used by the source." + }, + "SenderIpAddress": { + "type": "string", + "description": "The IP address that the flow communicates with to initiate connection with the sender for fujitsu-qos protocol." + }, + "SenderControlPort": { + "type": "integer", + "description": "The port that the flow uses to send outbound requests to initiate connection with the sender for fujitsu-qos protocol." + }, + "StreamId": { + "type": "string", + "description": "The stream ID that you want to use for this transport. This parameter applies only to Zixi-based streams." + }, + "SourceIngestPort": { + "type": "string", + "description": "The port that the flow will be listening on for incoming content.(ReadOnly)" + }, + "SourceListenerAddress": { + "type": "string", + "description": "Source IP or domain name for SRT-caller protocol." + }, + "SourceListenerPort": { + "type": "integer", + "description": "Source port for SRT-caller protocol." + }, + "VpcInterfaceName": { + "type": "string", + "description": "The name of the VPC Interface this Source is configured with." + }, + "WhitelistCidr": { + "type": "string", + "description": "The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16." + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Description" + ], + "readOnlyProperties": [ + "/properties/IngestIp", + "/properties/SourceArn", + "/properties/SourceIngestPort" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/SourceArn" + ], + "handlers": { + "create": { + "permissions": [ + "mediaconnect:CreateFlow", + "mediaconnect:DescribeFlow", + "mediaconnect:AddFlowSources", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:UpdateFlowSource" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:RemoveFlowSource" + ] + }, + "list": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/flowvpcinterface.json b/internal/aws/cfn/schemas/aws/mediaconnect/flowvpcinterface.json new file mode 100644 index 00000000..ad38f37f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/flowvpcinterface.json @@ -0,0 +1,88 @@ +{ + "typeName": "AWS::MediaConnect::FlowVpcInterface", + "description": "Resource schema for AWS::MediaConnect::FlowVpcInterface", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "properties": { + "FlowArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN), a unique identifier for any AWS resource, of the flow." + }, + "Name": { + "type": "string", + "description": "Immutable and has to be a unique against other VpcInterfaces in this Flow." + }, + "RoleArn": { + "type": "string", + "description": "Role Arn MediaConnect can assumes to create ENIs in customer's account." + }, + "SecurityGroupIds": { + "type": "array", + "description": "Security Group IDs to be used on ENI.", + "items": { + "type": "string" + } + }, + "SubnetId": { + "type": "string", + "description": "Subnet must be in the AZ of the Flow" + }, + "NetworkInterfaceIds": { + "type": "array", + "description": "IDs of the network interfaces created in customer's account by MediaConnect.", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "FlowArn", + "Name", + "RoleArn", + "SubnetId", + "SecurityGroupIds" + ], + "primaryIdentifier": [ + "/properties/FlowArn", + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/NetworkInterfaceIds" + ], + "createOnlyProperties": [ + "/properties/FlowArn", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "mediaconnect:DescribeFlow", + "mediaconnect:AddFlowVpcInterfaces" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + }, + "update": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:AddFlowVpcInterfaces", + "mediaconnect:RemoveFlowVpcInterface" + ] + }, + "delete": { + "permissions": [ + "mediaconnect:DescribeFlow", + "mediaconnect:RemoveFlowVpcInterface" + ] + }, + "list": { + "permissions": [ + "mediaconnect:DescribeFlow" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconnect/gateway.json b/internal/aws/cfn/schemas/aws/mediaconnect/gateway.json new file mode 100644 index 00000000..bf79bb48 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconnect/gateway.json @@ -0,0 +1,115 @@ +{ + "typeName": "AWS::MediaConnect::Gateway", + "description": "Resource schema for AWS::MediaConnect::Gateway", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "definitions": { + "GatewayNetwork": { + "description": "The network settings for a gateway.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of the network. This name is used to reference the network and must be unique among networks in this gateway." + }, + "CidrBlock": { + "type": "string", + "description": "A unique IP address range to use for this network. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16." + } + }, + "additionalProperties": false, + "required": [ + "Name", + "CidrBlock" + ] + } + }, + "properties": { + "Name": { + "description": "The name of the gateway. This name can not be modified after the gateway is created.", + "type": "string" + }, + "GatewayArn": { + "description": "The Amazon Resource Name (ARN) of the gateway.", + "type": "string" + }, + "GatewayState": { + "description": "The current status of the gateway.", + "type": "string", + "enum": [ + "CREATING", + "ACTIVE", + "UPDATING", + "ERROR", + "DELETING", + "DELETED" + ] + }, + "EgressCidrBlocks": { + "description": "The range of IP addresses that contribute content or initiate output requests for flows communicating with this gateway. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.", + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": true + }, + "Networks": { + "type": "array", + "description": "The list of networks in the gateway.", + "minItems": 1, + "maxItems": 4, + "items": { + "$ref": "#/definitions/GatewayNetwork" + }, + "insertionOrder": true + } + }, + "required": [ + "Name", + "EgressCidrBlocks", + "Networks" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/GatewayArn", + "/properties/GatewayState" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/EgressCidrBlocks", + "/properties/Networks", + "/properties/Networks/*/Name", + "/properties/Networks/*/CidrBlock" + ], + "primaryIdentifier": [ + "/properties/GatewayArn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "mediaconnect:CreateGateway", + "mediaconnect:DescribeGateway" + ] + }, + "read": { + "permissions": [ + "mediaconnect:DescribeGateway" + ] + }, + "delete": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "mediaconnect:DescribeGateway", + "mediaconnect:DeleteGateway" + ] + }, + "list": { + "permissions": [ + "mediaconnect:ListGateways" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/mediaconvert/jobtemplate.json b/internal/aws/cfn/schemas/aws/mediaconvert/jobtemplate.json new file mode 100644 index 00000000..d81a8677 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconvert/jobtemplate.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::MediaConvert::JobTemplate", + "description": "Resource Type definition for AWS::MediaConvert::JobTemplate", + "additionalProperties": false, + "properties": { + "Category": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AccelerationSettings": { + "$ref": "#/definitions/AccelerationSettings" + }, + "Priority": { + "type": "integer" + }, + "StatusUpdateInterval": { + "type": "string" + }, + "SettingsJson": { + "type": "object" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Queue": { + "type": "string" + }, + "HopDestinations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/HopDestination" + } + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "AccelerationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mode": { + "type": "string" + } + }, + "required": [ + "Mode" + ] + }, + "HopDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "WaitMinutes": { + "type": "integer" + }, + "Queue": { + "type": "string" + }, + "Priority": { + "type": "integer" + } + } + } + }, + "required": [ + "SettingsJson" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/mediaconvert/preset.json b/internal/aws/cfn/schemas/aws/mediaconvert/preset.json new file mode 100644 index 00000000..63509f64 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconvert/preset.json @@ -0,0 +1,41 @@ +{ + "typeName": "AWS::MediaConvert::Preset", + "description": "Resource Type definition for AWS::MediaConvert::Preset", + "additionalProperties": false, + "properties": { + "Category": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "SettingsJson": { + "type": "object" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "SettingsJson" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/mediaconvert/queue.json b/internal/aws/cfn/schemas/aws/mediaconvert/queue.json new file mode 100644 index 00000000..c2f5ba10 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediaconvert/queue.json @@ -0,0 +1,38 @@ +{ + "typeName": "AWS::MediaConvert::Queue", + "description": "Resource Type definition for AWS::MediaConvert::Queue", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "PricingPlan": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/medialive/channel.json b/internal/aws/cfn/schemas/aws/medialive/channel.json new file mode 100644 index 00000000..4e0ca3b7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/medialive/channel.json @@ -0,0 +1,3191 @@ +{ + "typeName": "AWS::MediaLive::Channel", + "description": "Resource Type definition for AWS::MediaLive::Channel", + "additionalProperties": false, + "properties": { + "InputAttachments": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InputAttachment" + } + }, + "InputSpecification": { + "$ref": "#/definitions/InputSpecification" + }, + "Destinations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/OutputDestination" + } + }, + "Vpc": { + "$ref": "#/definitions/VpcOutputSettings" + }, + "Maintenance": { + "$ref": "#/definitions/MaintenanceCreateSettings" + }, + "LogLevel": { + "type": "string" + }, + "RoleArn": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "ChannelClass": { + "type": "string" + }, + "EncoderSettings": { + "$ref": "#/definitions/EncoderSettings" + }, + "CdiInputSpecification": { + "$ref": "#/definitions/CdiInputSpecification" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Inputs": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "AudioSelectorSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AudioLanguageSelection": { + "$ref": "#/definitions/AudioLanguageSelection" + }, + "AudioTrackSelection": { + "$ref": "#/definitions/AudioTrackSelection" + }, + "AudioPidSelection": { + "$ref": "#/definitions/AudioPidSelection" + }, + "AudioHlsRenditionSelection": { + "$ref": "#/definitions/AudioHlsRenditionSelection" + } + } + }, + "InputLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "PasswordParam": { + "type": "string" + }, + "Username": { + "type": "string" + }, + "Uri": { + "type": "string" + } + } + }, + "FrameCaptureGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "FrameCaptureCdnSettings": { + "$ref": "#/definitions/FrameCaptureCdnSettings" + }, + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + } + } + }, + "Ac3Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CodingMode": { + "type": "string" + }, + "DrcProfile": { + "type": "string" + }, + "MetadataControl": { + "type": "string" + }, + "Dialnorm": { + "type": "integer" + }, + "LfeFilter": { + "type": "string" + }, + "BitstreamMode": { + "type": "string" + }, + "AttenuationControl": { + "type": "string" + }, + "Bitrate": { + "type": "number" + } + } + }, + "AudioDolbyEDecode": { + "type": "object", + "additionalProperties": false, + "properties": { + "ProgramSelection": { + "type": "string" + } + } + }, + "AudioCodecSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Eac3Settings": { + "$ref": "#/definitions/Eac3Settings" + }, + "Ac3Settings": { + "$ref": "#/definitions/Ac3Settings" + }, + "Mp2Settings": { + "$ref": "#/definitions/Mp2Settings" + }, + "Eac3AtmosSettings": { + "$ref": "#/definitions/Eac3AtmosSettings" + }, + "PassThroughSettings": { + "$ref": "#/definitions/PassThroughSettings" + }, + "WavSettings": { + "$ref": "#/definitions/WavSettings" + }, + "AacSettings": { + "$ref": "#/definitions/AacSettings" + } + } + }, + "UdpGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimedMetadataId3Frame": { + "type": "string" + }, + "TimedMetadataId3Period": { + "type": "integer" + }, + "InputLossAction": { + "type": "string" + } + } + }, + "MediaPackageOutputDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ChannelId": { + "type": "string" + } + } + }, + "Scte20PlusEmbeddedDestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "H264Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimecodeBurninSettings": { + "$ref": "#/definitions/TimecodeBurninSettings" + }, + "NumRefFrames": { + "type": "integer" + }, + "TemporalAq": { + "type": "string" + }, + "Slices": { + "type": "integer" + }, + "FramerateControl": { + "type": "string" + }, + "QvbrQualityLevel": { + "type": "integer" + }, + "FramerateNumerator": { + "type": "integer" + }, + "ParControl": { + "type": "string" + }, + "GopClosedCadence": { + "type": "integer" + }, + "FlickerAq": { + "type": "string" + }, + "Profile": { + "type": "string" + }, + "QualityLevel": { + "type": "string" + }, + "MinIInterval": { + "type": "integer" + }, + "SceneChangeDetect": { + "type": "string" + }, + "ForceFieldPictures": { + "type": "string" + }, + "FramerateDenominator": { + "type": "integer" + }, + "Softness": { + "type": "integer" + }, + "GopSize": { + "type": "number" + }, + "AdaptiveQuantization": { + "type": "string" + }, + "FilterSettings": { + "$ref": "#/definitions/H264FilterSettings" + }, + "ColorSpaceSettings": { + "$ref": "#/definitions/H264ColorSpaceSettings" + }, + "EntropyEncoding": { + "type": "string" + }, + "SpatialAq": { + "type": "string" + }, + "ParDenominator": { + "type": "integer" + }, + "FixedAfd": { + "type": "string" + }, + "GopSizeUnits": { + "type": "string" + }, + "AfdSignaling": { + "type": "string" + }, + "Bitrate": { + "type": "integer" + }, + "ParNumerator": { + "type": "integer" + }, + "RateControlMode": { + "type": "string" + }, + "ScanType": { + "type": "string" + }, + "BufSize": { + "type": "integer" + }, + "TimecodeInsertion": { + "type": "string" + }, + "ColorMetadata": { + "type": "string" + }, + "BufFillPct": { + "type": "integer" + }, + "GopBReference": { + "type": "string" + }, + "LookAheadRateControl": { + "type": "string" + }, + "Level": { + "type": "string" + }, + "MaxBitrate": { + "type": "integer" + }, + "Syntax": { + "type": "string" + }, + "SubgopLength": { + "type": "string" + }, + "GopNumBFrames": { + "type": "integer" + } + } + }, + "FrameCaptureHlsSettings": { + "type": "object", + "additionalProperties": false + }, + "RawSettings": { + "type": "object", + "additionalProperties": false + }, + "KeyProviderSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "StaticKeySettings": { + "$ref": "#/definitions/StaticKeySettings" + } + } + }, + "UdpContainerSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "M2tsSettings": { + "$ref": "#/definitions/M2tsSettings" + } + } + }, + "FeatureActivations": { + "type": "object", + "additionalProperties": false, + "properties": { + "OutputStaticImageOverlayScheduleActions": { + "type": "string" + }, + "InputPrepareScheduleActions": { + "type": "string" + } + } + }, + "MultiplexGroupSettings": { + "type": "object", + "additionalProperties": false + }, + "ArchiveGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + }, + "ArchiveCdnSettings": { + "$ref": "#/definitions/ArchiveCdnSettings" + }, + "RolloverInterval": { + "type": "integer" + } + } + }, + "ArchiveS3Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CannedAcl": { + "type": "string" + } + } + }, + "NielsenConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DistributorId": { + "type": "string" + }, + "NielsenPcmToId3Tagging": { + "type": "string" + } + } + }, + "TeletextSourceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "OutputRectangle": { + "$ref": "#/definitions/CaptionRectangle" + }, + "PageNumber": { + "type": "string" + } + } + }, + "AribDestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "CaptionSelectorSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "DvbSubSourceSettings": { + "$ref": "#/definitions/DvbSubSourceSettings" + }, + "Scte27SourceSettings": { + "$ref": "#/definitions/Scte27SourceSettings" + }, + "AribSourceSettings": { + "$ref": "#/definitions/AribSourceSettings" + }, + "EmbeddedSourceSettings": { + "$ref": "#/definitions/EmbeddedSourceSettings" + }, + "Scte20SourceSettings": { + "$ref": "#/definitions/Scte20SourceSettings" + }, + "TeletextSourceSettings": { + "$ref": "#/definitions/TeletextSourceSettings" + }, + "AncillarySourceSettings": { + "$ref": "#/definitions/AncillarySourceSettings" + } + } + }, + "GlobalConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputEndAction": { + "type": "string" + }, + "OutputLockingSettings": { + "$ref": "#/definitions/OutputLockingSettings" + }, + "OutputTimingSource": { + "type": "string" + }, + "OutputLockingMode": { + "type": "string" + }, + "SupportLowFramerateInputs": { + "type": "string" + }, + "InitialAudioGain": { + "type": "integer" + }, + "InputLossBehavior": { + "$ref": "#/definitions/InputLossBehavior" + } + } + }, + "PipelineLockingSettings": { + "type": "object", + "additionalProperties": false + }, + "FrameCaptureS3Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CannedAcl": { + "type": "string" + } + } + }, + "FailoverCondition": { + "type": "object", + "additionalProperties": false, + "properties": { + "FailoverConditionSettings": { + "$ref": "#/definitions/FailoverConditionSettings" + } + } + }, + "AudioTrackSelection": { + "type": "object", + "additionalProperties": false, + "properties": { + "DolbyEDecode": { + "$ref": "#/definitions/AudioDolbyEDecode" + }, + "Tracks": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AudioTrack" + } + } + } + }, + "OutputGroup": { + "type": "object", + "additionalProperties": false, + "properties": { + "Outputs": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Output" + } + }, + "OutputGroupSettings": { + "$ref": "#/definitions/OutputGroupSettings" + }, + "Name": { + "type": "string" + } + } + }, + "VideoSelectorColorSpaceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Hdr10Settings": { + "$ref": "#/definitions/Hdr10Settings" + } + } + }, + "AribSourceSettings": { + "type": "object", + "additionalProperties": false + }, + "Mpeg2FilterSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TemporalFilterSettings": { + "$ref": "#/definitions/TemporalFilterSettings" + } + } + }, + "DvbSubSourceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "OcrLanguage": { + "type": "string" + }, + "Pid": { + "type": "integer" + } + } + }, + "AudioDescription": { + "type": "object", + "additionalProperties": false, + "properties": { + "AudioNormalizationSettings": { + "$ref": "#/definitions/AudioNormalizationSettings" + }, + "LanguageCode": { + "type": "string" + }, + "RemixSettings": { + "$ref": "#/definitions/RemixSettings" + }, + "AudioSelectorName": { + "type": "string" + }, + "StreamName": { + "type": "string" + }, + "LanguageCodeControl": { + "type": "string" + }, + "AudioType": { + "type": "string" + }, + "AudioTypeControl": { + "type": "string" + }, + "CodecSettings": { + "$ref": "#/definitions/AudioCodecSettings" + }, + "Name": { + "type": "string" + }, + "AudioWatermarkingSettings": { + "$ref": "#/definitions/AudioWatermarkSettings" + } + } + }, + "DvbNitSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "NetworkName": { + "type": "string" + }, + "NetworkId": { + "type": "integer" + }, + "RepInterval": { + "type": "integer" + } + } + }, + "VideoSelectorSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "VideoSelectorProgramId": { + "$ref": "#/definitions/VideoSelectorProgramId" + }, + "VideoSelectorPid": { + "$ref": "#/definitions/VideoSelectorPid" + } + } + }, + "OutputDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "MultiplexSettings": { + "$ref": "#/definitions/MultiplexProgramChannelDestinationSettings" + }, + "Settings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/OutputDestinationSettings" + } + }, + "MediaPackageSettings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MediaPackageOutputDestinationSettings" + } + } + } + }, + "AudioLanguageSelection": { + "type": "object", + "additionalProperties": false, + "properties": { + "LanguageCode": { + "type": "string" + }, + "LanguageSelectionPolicy": { + "type": "string" + } + } + }, + "AvailSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Scte35SpliceInsert": { + "$ref": "#/definitions/Scte35SpliceInsert" + }, + "Scte35TimeSignalApos": { + "$ref": "#/definitions/Scte35TimeSignalApos" + }, + "Esam": { + "$ref": "#/definitions/Esam" + } + } + }, + "AvailBlanking": { + "type": "object", + "additionalProperties": false, + "properties": { + "State": { + "type": "string" + }, + "AvailBlankingImage": { + "$ref": "#/definitions/InputLocation" + } + } + }, + "InputLossBehavior": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputLossImageType": { + "type": "string" + }, + "InputLossImageSlate": { + "$ref": "#/definitions/InputLocation" + }, + "InputLossImageColor": { + "type": "string" + }, + "RepeatFrameMsec": { + "type": "integer" + }, + "BlackFrameMsec": { + "type": "integer" + } + } + }, + "HlsMediaStoreSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "FilecacheDuration": { + "type": "integer" + }, + "MediaStoreStorageClass": { + "type": "string" + }, + "RestartDelay": { + "type": "integer" + }, + "NumRetries": { + "type": "integer" + }, + "ConnectionRetryInterval": { + "type": "integer" + } + } + }, + "BlackoutSlate": { + "type": "object", + "additionalProperties": false, + "properties": { + "NetworkId": { + "type": "string" + }, + "NetworkEndBlackoutImage": { + "$ref": "#/definitions/InputLocation" + }, + "NetworkEndBlackout": { + "type": "string" + }, + "State": { + "type": "string" + }, + "BlackoutSlateImage": { + "$ref": "#/definitions/InputLocation" + } + } + }, + "SmpteTtDestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "VideoSelectorProgramId": { + "type": "object", + "additionalProperties": false, + "properties": { + "ProgramId": { + "type": "integer" + } + } + }, + "CaptionLanguageMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "LanguageCode": { + "type": "string" + }, + "LanguageDescription": { + "type": "string" + }, + "CaptionChannel": { + "type": "integer" + } + } + }, + "HlsOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "HlsSettings": { + "$ref": "#/definitions/HlsSettings" + }, + "NameModifier": { + "type": "string" + }, + "H265PackagingType": { + "type": "string" + }, + "SegmentModifier": { + "type": "string" + } + } + }, + "Scte27SourceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "OcrLanguage": { + "type": "string" + }, + "Pid": { + "type": "integer" + } + } + }, + "M3u8Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "PatInterval": { + "type": "integer" + }, + "ProgramNum": { + "type": "integer" + }, + "PcrPeriod": { + "type": "integer" + }, + "PmtInterval": { + "type": "integer" + }, + "KlvDataPids": { + "type": "string" + }, + "NielsenId3Behavior": { + "type": "string" + }, + "PcrPid": { + "type": "string" + }, + "VideoPid": { + "type": "string" + }, + "AudioFramesPerPes": { + "type": "integer" + }, + "TransportStreamId": { + "type": "integer" + }, + "PmtPid": { + "type": "string" + }, + "Scte35Pid": { + "type": "string" + }, + "Scte35Behavior": { + "type": "string" + }, + "KlvBehavior": { + "type": "string" + }, + "EcmPid": { + "type": "string" + }, + "TimedMetadataPid": { + "type": "string" + }, + "AudioPids": { + "type": "string" + }, + "PcrControl": { + "type": "string" + }, + "TimedMetadataBehavior": { + "type": "string" + } + } + }, + "RtmpGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AuthenticationScheme": { + "type": "string" + }, + "CacheLength": { + "type": "integer" + }, + "AdMarkers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "IncludeFillerNalUnits": { + "type": "string" + }, + "InputLossAction": { + "type": "string" + }, + "RestartDelay": { + "type": "integer" + }, + "CaptionData": { + "type": "string" + }, + "CacheFullBehavior": { + "type": "string" + } + } + }, + "H264FilterSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TemporalFilterSettings": { + "$ref": "#/definitions/TemporalFilterSettings" + } + } + }, + "StandardHlsSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AudioRenditionSets": { + "type": "string" + }, + "M3u8Settings": { + "$ref": "#/definitions/M3u8Settings" + } + } + }, + "Output": { + "type": "object", + "additionalProperties": false, + "properties": { + "OutputSettings": { + "$ref": "#/definitions/OutputSettings" + }, + "CaptionDescriptionNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AudioDescriptionNames": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "OutputName": { + "type": "string" + }, + "VideoDescriptionName": { + "type": "string" + } + } + }, + "VideoDescription": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScalingBehavior": { + "type": "string" + }, + "RespondToAfd": { + "type": "string" + }, + "Height": { + "type": "integer" + }, + "Sharpness": { + "type": "integer" + }, + "Width": { + "type": "integer" + }, + "CodecSettings": { + "$ref": "#/definitions/VideoCodecSettings" + }, + "Name": { + "type": "string" + } + } + }, + "FrameCaptureSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimecodeBurninSettings": { + "$ref": "#/definitions/TimecodeBurninSettings" + }, + "CaptureIntervalUnits": { + "type": "string" + }, + "CaptureInterval": { + "type": "integer" + } + } + }, + "ColorCorrectionSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "GlobalColorCorrections": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ColorCorrection" + } + } + } + }, + "CdiInputSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "Resolution": { + "type": "string" + } + } + }, + "Esam": { + "type": "object", + "additionalProperties": false, + "properties": { + "AdAvailOffset": { + "type": "integer" + }, + "ZoneIdentity": { + "type": "string" + }, + "AcquisitionPointId": { + "type": "string" + }, + "PoisEndpoint": { + "type": "string" + }, + "Username": { + "type": "string" + }, + "PasswordParam": { + "type": "string" + } + } + }, + "MaintenanceCreateSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaintenanceDay": { + "type": "string" + }, + "MaintenanceStartTime": { + "type": "string" + } + } + }, + "InputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Scte35Pid": { + "type": "integer" + }, + "DeblockFilter": { + "type": "string" + }, + "FilterStrength": { + "type": "integer" + }, + "InputFilter": { + "type": "string" + }, + "SourceEndBehavior": { + "type": "string" + }, + "VideoSelector": { + "$ref": "#/definitions/VideoSelector" + }, + "Smpte2038DataPreference": { + "type": "string" + }, + "AudioSelectors": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AudioSelector" + } + }, + "CaptionSelectors": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CaptionSelector" + } + }, + "DenoiseFilter": { + "type": "string" + }, + "NetworkInputSettings": { + "$ref": "#/definitions/NetworkInputSettings" + } + } + }, + "DvbTdtSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "RepInterval": { + "type": "integer" + } + } + }, + "FrameCaptureCdnSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "FrameCaptureS3Settings": { + "$ref": "#/definitions/FrameCaptureS3Settings" + } + } + }, + "FecOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ColumnDepth": { + "type": "integer" + }, + "IncludeFec": { + "type": "string" + }, + "RowLength": { + "type": "integer" + } + } + }, + "Rec601Settings": { + "type": "object", + "additionalProperties": false + }, + "AudioPidSelection": { + "type": "object", + "additionalProperties": false, + "properties": { + "Pid": { + "type": "integer" + } + } + }, + "H265ColorSpaceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rec601Settings": { + "$ref": "#/definitions/Rec601Settings" + }, + "Rec709Settings": { + "$ref": "#/definitions/Rec709Settings" + }, + "ColorSpacePassthroughSettings": { + "$ref": "#/definitions/ColorSpacePassthroughSettings" + }, + "DolbyVision81Settings": { + "$ref": "#/definitions/DolbyVision81Settings" + }, + "Hdr10Settings": { + "$ref": "#/definitions/Hdr10Settings" + } + } + }, + "VideoCodecSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "FrameCaptureSettings": { + "$ref": "#/definitions/FrameCaptureSettings" + }, + "H264Settings": { + "$ref": "#/definitions/H264Settings" + }, + "Mpeg2Settings": { + "$ref": "#/definitions/Mpeg2Settings" + }, + "H265Settings": { + "$ref": "#/definitions/H265Settings" + } + } + }, + "MediaPackageGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + } + } + }, + "H265FilterSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TemporalFilterSettings": { + "$ref": "#/definitions/TemporalFilterSettings" + } + } + }, + "NielsenCBET": { + "type": "object", + "additionalProperties": false, + "properties": { + "CbetStepaside": { + "type": "string" + }, + "CbetCheckDigitString": { + "type": "string" + }, + "Csid": { + "type": "string" + } + } + }, + "OutputGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "HlsGroupSettings": { + "$ref": "#/definitions/HlsGroupSettings" + }, + "FrameCaptureGroupSettings": { + "$ref": "#/definitions/FrameCaptureGroupSettings" + }, + "MultiplexGroupSettings": { + "$ref": "#/definitions/MultiplexGroupSettings" + }, + "ArchiveGroupSettings": { + "$ref": "#/definitions/ArchiveGroupSettings" + }, + "MediaPackageGroupSettings": { + "$ref": "#/definitions/MediaPackageGroupSettings" + }, + "UdpGroupSettings": { + "$ref": "#/definitions/UdpGroupSettings" + }, + "MsSmoothGroupSettings": { + "$ref": "#/definitions/MsSmoothGroupSettings" + }, + "RtmpGroupSettings": { + "$ref": "#/definitions/RtmpGroupSettings" + } + } + }, + "AudioChannelMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputChannelLevels": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InputChannelLevel" + } + }, + "OutputChannel": { + "type": "integer" + } + } + }, + "NetworkInputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServerValidation": { + "type": "string" + }, + "HlsInputSettings": { + "$ref": "#/definitions/HlsInputSettings" + } + } + }, + "TeletextDestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "ColorCorrection": { + "type": "object", + "additionalProperties": false, + "properties": { + "OutputColorSpace": { + "type": "string" + }, + "InputColorSpace": { + "type": "string" + }, + "Uri": { + "type": "string" + } + } + }, + "WebvttDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "StyleControl": { + "type": "string" + } + } + }, + "UdpOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + }, + "FecOutputSettings": { + "$ref": "#/definitions/FecOutputSettings" + }, + "BufferMsec": { + "type": "integer" + }, + "ContainerSettings": { + "$ref": "#/definitions/UdpContainerSettings" + } + } + }, + "EncoderSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AudioDescriptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AudioDescription" + } + }, + "VideoDescriptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VideoDescription" + } + }, + "GlobalConfiguration": { + "$ref": "#/definitions/GlobalConfiguration" + }, + "MotionGraphicsConfiguration": { + "$ref": "#/definitions/MotionGraphicsConfiguration" + }, + "ThumbnailConfiguration": { + "$ref": "#/definitions/ThumbnailConfiguration" + }, + "FeatureActivations": { + "$ref": "#/definitions/FeatureActivations" + }, + "CaptionDescriptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CaptionDescription" + } + }, + "AvailConfiguration": { + "$ref": "#/definitions/AvailConfiguration" + }, + "ColorCorrectionSettings": { + "$ref": "#/definitions/ColorCorrectionSettings" + }, + "OutputGroups": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/OutputGroup" + } + }, + "AvailBlanking": { + "$ref": "#/definitions/AvailBlanking" + }, + "NielsenConfiguration": { + "$ref": "#/definitions/NielsenConfiguration" + }, + "BlackoutSlate": { + "$ref": "#/definitions/BlackoutSlate" + }, + "TimecodeConfig": { + "$ref": "#/definitions/TimecodeConfig" + } + } + }, + "Fmp4HlsSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AudioRenditionSets": { + "type": "string" + }, + "NielsenId3Behavior": { + "type": "string" + }, + "TimedMetadataBehavior": { + "type": "string" + } + } + }, + "HlsSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Fmp4HlsSettings": { + "$ref": "#/definitions/Fmp4HlsSettings" + }, + "FrameCaptureHlsSettings": { + "$ref": "#/definitions/FrameCaptureHlsSettings" + }, + "StandardHlsSettings": { + "$ref": "#/definitions/StandardHlsSettings" + }, + "AudioOnlyHlsSettings": { + "$ref": "#/definitions/AudioOnlyHlsSettings" + } + } + }, + "AutomaticInputFailoverSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ErrorClearTimeMsec": { + "type": "integer" + }, + "FailoverConditions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/FailoverCondition" + } + }, + "InputPreference": { + "type": "string" + }, + "SecondaryInputId": { + "type": "string" + } + } + }, + "WavSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CodingMode": { + "type": "string" + }, + "SampleRate": { + "type": "number" + }, + "BitDepth": { + "type": "number" + } + } + }, + "M2tsSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "EtvPlatformPid": { + "type": "string" + }, + "AribCaptionsPid": { + "type": "string" + }, + "EbpPlacement": { + "type": "string" + }, + "DvbSubPids": { + "type": "string" + }, + "SegmentationStyle": { + "type": "string" + }, + "Klv": { + "type": "string" + }, + "Scte35PrerollPullupMilliseconds": { + "type": "number" + }, + "TimedMetadataBehavior": { + "type": "string" + }, + "DvbTeletextPid": { + "type": "string" + }, + "Scte35Control": { + "type": "string" + }, + "PcrPeriod": { + "type": "integer" + }, + "SegmentationTime": { + "type": "number" + }, + "CcDescriptor": { + "type": "string" + }, + "PmtPid": { + "type": "string" + }, + "DvbNitSettings": { + "$ref": "#/definitions/DvbNitSettings" + }, + "EtvSignalPid": { + "type": "string" + }, + "Arib": { + "type": "string" + }, + "TimedMetadataPid": { + "type": "string" + }, + "AudioPids": { + "type": "string" + }, + "AudioBufferModel": { + "type": "string" + }, + "Ebif": { + "type": "string" + }, + "PcrControl": { + "type": "string" + }, + "PatInterval": { + "type": "integer" + }, + "ProgramNum": { + "type": "integer" + }, + "RateMode": { + "type": "string" + }, + "KlvDataPids": { + "type": "string" + }, + "NullPacketBitrate": { + "type": "number" + }, + "PmtInterval": { + "type": "integer" + }, + "EsRateInPes": { + "type": "string" + }, + "VideoPid": { + "type": "string" + }, + "TransportStreamId": { + "type": "integer" + }, + "Scte35Pid": { + "type": "string" + }, + "AudioStreamType": { + "type": "string" + }, + "EbpLookaheadMs": { + "type": "integer" + }, + "DvbTdtSettings": { + "$ref": "#/definitions/DvbTdtSettings" + }, + "EbpAudioInterval": { + "type": "string" + }, + "FragmentTime": { + "type": "number" + }, + "NielsenId3Behavior": { + "type": "string" + }, + "PcrPid": { + "type": "string" + }, + "AudioFramesPerPes": { + "type": "integer" + }, + "AbsentInputAudioBehavior": { + "type": "string" + }, + "Bitrate": { + "type": "integer" + }, + "Scte27Pids": { + "type": "string" + }, + "SegmentationMarkers": { + "type": "string" + }, + "DvbSdtSettings": { + "$ref": "#/definitions/DvbSdtSettings" + }, + "BufferModel": { + "type": "string" + }, + "EcmPid": { + "type": "string" + }, + "AribCaptionsPidControl": { + "type": "string" + } + } + }, + "DolbyVision81Settings": { + "type": "object", + "additionalProperties": false + }, + "HlsGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SegmentationMode": { + "type": "string" + }, + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + }, + "CodecSpecification": { + "type": "string" + }, + "IvSource": { + "type": "string" + }, + "TimedMetadataId3Frame": { + "type": "string" + }, + "KeyFormatVersions": { + "type": "string" + }, + "RedundantManifest": { + "type": "string" + }, + "OutputSelection": { + "type": "string" + }, + "KeyProviderSettings": { + "$ref": "#/definitions/KeyProviderSettings" + }, + "StreamInfResolution": { + "type": "string" + }, + "CaptionLanguageMappings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CaptionLanguageMapping" + } + }, + "HlsId3SegmentTagging": { + "type": "string" + }, + "IFrameOnlyPlaylists": { + "type": "string" + }, + "CaptionLanguageSetting": { + "type": "string" + }, + "KeepSegments": { + "type": "integer" + }, + "ConstantIv": { + "type": "string" + }, + "DirectoryStructure": { + "type": "string" + }, + "EncryptionType": { + "type": "string" + }, + "AdMarkers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "HlsCdnSettings": { + "$ref": "#/definitions/HlsCdnSettings" + }, + "IndexNSegments": { + "type": "integer" + }, + "DiscontinuityTags": { + "type": "string" + }, + "InputLossAction": { + "type": "string" + }, + "Mode": { + "type": "string" + }, + "TsFileMode": { + "type": "string" + }, + "BaseUrlManifest1": { + "type": "string" + }, + "ClientCache": { + "type": "string" + }, + "MinSegmentLength": { + "type": "integer" + }, + "KeyFormat": { + "type": "string" + }, + "IvInManifest": { + "type": "string" + }, + "BaseUrlContent1": { + "type": "string" + }, + "ProgramDateTimeClock": { + "type": "string" + }, + "ManifestCompression": { + "type": "string" + }, + "ManifestDurationFormat": { + "type": "string" + }, + "TimedMetadataId3Period": { + "type": "integer" + }, + "IncompleteSegmentBehavior": { + "type": "string" + }, + "ProgramDateTimePeriod": { + "type": "integer" + }, + "SegmentLength": { + "type": "integer" + }, + "TimestampDeltaMilliseconds": { + "type": "integer" + }, + "ProgramDateTime": { + "type": "string" + }, + "SegmentsPerSubdirectory": { + "type": "integer" + }, + "BaseUrlContent": { + "type": "string" + }, + "BaseUrlManifest": { + "type": "string" + } + } + }, + "FailoverConditionSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AudioSilenceSettings": { + "$ref": "#/definitions/AudioSilenceFailoverSettings" + }, + "VideoBlackSettings": { + "$ref": "#/definitions/VideoBlackFailoverSettings" + }, + "InputLossSettings": { + "$ref": "#/definitions/InputLossFailoverSettings" + } + } + }, + "FrameCaptureOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "NameModifier": { + "type": "string" + } + } + }, + "ColorSpacePassthroughSettings": { + "type": "object", + "additionalProperties": false + }, + "ThumbnailConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "State": { + "type": "string" + } + } + }, + "AudioHlsRenditionSelection": { + "type": "object", + "additionalProperties": false, + "properties": { + "GroupId": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "MsSmoothOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "NameModifier": { + "type": "string" + }, + "H265PackagingType": { + "type": "string" + } + } + }, + "Scte35SpliceInsert": { + "type": "object", + "additionalProperties": false, + "properties": { + "AdAvailOffset": { + "type": "integer" + }, + "WebDeliveryAllowedFlag": { + "type": "string" + }, + "NoRegionalBlackoutFlag": { + "type": "string" + } + } + }, + "RemixSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ChannelsOut": { + "type": "integer" + }, + "ChannelsIn": { + "type": "integer" + }, + "ChannelMappings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/AudioChannelMapping" + } + } + } + }, + "ArchiveCdnSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ArchiveS3Settings": { + "$ref": "#/definitions/ArchiveS3Settings" + } + } + }, + "VideoBlackFailoverSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "BlackDetectThreshold": { + "type": "number" + }, + "VideoBlackThresholdMsec": { + "type": "integer" + } + } + }, + "HlsAkamaiSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Salt": { + "type": "string" + }, + "FilecacheDuration": { + "type": "integer" + }, + "NumRetries": { + "type": "integer" + }, + "Token": { + "type": "string" + }, + "RestartDelay": { + "type": "integer" + }, + "ConnectionRetryInterval": { + "type": "integer" + }, + "HttpTransferMode": { + "type": "string" + } + } + }, + "OutputDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "StreamName": { + "type": "string" + }, + "PasswordParam": { + "type": "string" + }, + "Username": { + "type": "string" + }, + "Url": { + "type": "string" + } + } + }, + "HlsInputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Scte35Source": { + "type": "string" + }, + "BufferSegments": { + "type": "integer" + }, + "RetryInterval": { + "type": "integer" + }, + "Retries": { + "type": "integer" + }, + "Bandwidth": { + "type": "integer" + } + } + }, + "PassThroughSettings": { + "type": "object", + "additionalProperties": false + }, + "Eac3AtmosSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CodingMode": { + "type": "string" + }, + "Dialnorm": { + "type": "integer" + }, + "SurroundTrim": { + "type": "number" + }, + "DrcRf": { + "type": "string" + }, + "Bitrate": { + "type": "number" + }, + "DrcLine": { + "type": "string" + }, + "HeightTrim": { + "type": "number" + } + } + }, + "InputLossFailoverSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputLossThresholdMsec": { + "type": "integer" + } + } + }, + "AvailConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailSettings": { + "$ref": "#/definitions/AvailSettings" + } + } + }, + "AudioSilenceFailoverSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AudioSelectorName": { + "type": "string" + }, + "AudioSilenceThresholdMsec": { + "type": "integer" + } + } + }, + "RtmpCaptionInfoDestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "AncillarySourceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SourceAncillaryChannelNumber": { + "type": "integer" + } + } + }, + "EmbeddedPlusScte20DestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "Rec709Settings": { + "type": "object", + "additionalProperties": false + }, + "ArchiveContainerSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "M2tsSettings": { + "$ref": "#/definitions/M2tsSettings" + }, + "RawSettings": { + "$ref": "#/definitions/RawSettings" + } + } + }, + "InputAttachment": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputAttachmentName": { + "type": "string" + }, + "InputId": { + "type": "string" + }, + "AutomaticInputFailoverSettings": { + "$ref": "#/definitions/AutomaticInputFailoverSettings" + }, + "InputSettings": { + "$ref": "#/definitions/InputSettings" + } + } + }, + "EpochLockingSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "JamSyncTime": { + "type": "string" + }, + "CustomEpoch": { + "type": "string" + } + } + }, + "VideoSelectorPid": { + "type": "object", + "additionalProperties": false, + "properties": { + "Pid": { + "type": "integer" + } + } + }, + "InputChannelLevel": { + "type": "object", + "additionalProperties": false, + "properties": { + "InputChannel": { + "type": "integer" + }, + "Gain": { + "type": "integer" + } + } + }, + "MediaPackageOutputSettings": { + "type": "object", + "additionalProperties": false + }, + "HlsWebdavSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "FilecacheDuration": { + "type": "integer" + }, + "RestartDelay": { + "type": "integer" + }, + "NumRetries": { + "type": "integer" + }, + "ConnectionRetryInterval": { + "type": "integer" + }, + "HttpTransferMode": { + "type": "string" + } + } + }, + "TemporalFilterSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "PostFilterSharpening": { + "type": "string" + }, + "Strength": { + "type": "string" + } + } + }, + "Mp2Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CodingMode": { + "type": "string" + }, + "SampleRate": { + "type": "number" + }, + "Bitrate": { + "type": "number" + } + } + }, + "OutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "MediaPackageOutputSettings": { + "$ref": "#/definitions/MediaPackageOutputSettings" + }, + "MsSmoothOutputSettings": { + "$ref": "#/definitions/MsSmoothOutputSettings" + }, + "FrameCaptureOutputSettings": { + "$ref": "#/definitions/FrameCaptureOutputSettings" + }, + "HlsOutputSettings": { + "$ref": "#/definitions/HlsOutputSettings" + }, + "RtmpOutputSettings": { + "$ref": "#/definitions/RtmpOutputSettings" + }, + "UdpOutputSettings": { + "$ref": "#/definitions/UdpOutputSettings" + }, + "MultiplexOutputSettings": { + "$ref": "#/definitions/MultiplexOutputSettings" + }, + "ArchiveOutputSettings": { + "$ref": "#/definitions/ArchiveOutputSettings" + } + } + }, + "RtmpOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + }, + "CertificateMode": { + "type": "string" + }, + "NumRetries": { + "type": "integer" + }, + "ConnectionRetryInterval": { + "type": "integer" + } + } + }, + "CaptionDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "AribDestinationSettings": { + "$ref": "#/definitions/AribDestinationSettings" + }, + "EbuTtDDestinationSettings": { + "$ref": "#/definitions/EbuTtDDestinationSettings" + }, + "SmpteTtDestinationSettings": { + "$ref": "#/definitions/SmpteTtDestinationSettings" + }, + "EmbeddedPlusScte20DestinationSettings": { + "$ref": "#/definitions/EmbeddedPlusScte20DestinationSettings" + }, + "TtmlDestinationSettings": { + "$ref": "#/definitions/TtmlDestinationSettings" + }, + "Scte20PlusEmbeddedDestinationSettings": { + "$ref": "#/definitions/Scte20PlusEmbeddedDestinationSettings" + }, + "DvbSubDestinationSettings": { + "$ref": "#/definitions/DvbSubDestinationSettings" + }, + "TeletextDestinationSettings": { + "$ref": "#/definitions/TeletextDestinationSettings" + }, + "BurnInDestinationSettings": { + "$ref": "#/definitions/BurnInDestinationSettings" + }, + "WebvttDestinationSettings": { + "$ref": "#/definitions/WebvttDestinationSettings" + }, + "EmbeddedDestinationSettings": { + "$ref": "#/definitions/EmbeddedDestinationSettings" + }, + "RtmpCaptionInfoDestinationSettings": { + "$ref": "#/definitions/RtmpCaptionInfoDestinationSettings" + }, + "Scte27DestinationSettings": { + "$ref": "#/definitions/Scte27DestinationSettings" + } + } + }, + "AudioTrack": { + "type": "object", + "additionalProperties": false, + "properties": { + "Track": { + "type": "integer" + } + } + }, + "Scte20SourceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Source608ChannelNumber": { + "type": "integer" + }, + "Convert608To708": { + "type": "string" + } + } + }, + "Scte27DestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "Eac3Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CodingMode": { + "type": "string" + }, + "SurroundMode": { + "type": "string" + }, + "PassthroughControl": { + "type": "string" + }, + "Dialnorm": { + "type": "integer" + }, + "LoRoSurroundMixLevel": { + "type": "number" + }, + "PhaseControl": { + "type": "string" + }, + "LtRtCenterMixLevel": { + "type": "number" + }, + "LfeFilter": { + "type": "string" + }, + "LfeControl": { + "type": "string" + }, + "Bitrate": { + "type": "number" + }, + "DrcLine": { + "type": "string" + }, + "DcFilter": { + "type": "string" + }, + "MetadataControl": { + "type": "string" + }, + "LtRtSurroundMixLevel": { + "type": "number" + }, + "LoRoCenterMixLevel": { + "type": "number" + }, + "DrcRf": { + "type": "string" + }, + "AttenuationControl": { + "type": "string" + }, + "BitstreamMode": { + "type": "string" + }, + "SurroundExMode": { + "type": "string" + }, + "StereoDownmix": { + "type": "string" + } + } + }, + "InputSpecification": { + "type": "object", + "additionalProperties": false, + "properties": { + "Codec": { + "type": "string" + }, + "MaximumBitrate": { + "type": "string" + }, + "Resolution": { + "type": "string" + } + } + }, + "TimecodeBurninSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Prefix": { + "type": "string" + }, + "FontSize": { + "type": "string" + }, + "Position": { + "type": "string" + } + } + }, + "AudioSelector": { + "type": "object", + "additionalProperties": false, + "properties": { + "SelectorSettings": { + "$ref": "#/definitions/AudioSelectorSettings" + }, + "Name": { + "type": "string" + } + } + }, + "HlsS3Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CannedAcl": { + "type": "string" + } + } + }, + "MotionGraphicsSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "HtmlMotionGraphicsSettings": { + "$ref": "#/definitions/HtmlMotionGraphicsSettings" + } + } + }, + "TtmlDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "StyleControl": { + "type": "string" + } + } + }, + "MultiplexProgramChannelDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ProgramName": { + "type": "string" + }, + "MultiplexId": { + "type": "string" + } + } + }, + "H265Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimecodeBurninSettings": { + "$ref": "#/definitions/TimecodeBurninSettings" + }, + "Slices": { + "type": "integer" + }, + "QvbrQualityLevel": { + "type": "integer" + }, + "FramerateNumerator": { + "type": "integer" + }, + "GopClosedCadence": { + "type": "integer" + }, + "FlickerAq": { + "type": "string" + }, + "Profile": { + "type": "string" + }, + "MinIInterval": { + "type": "integer" + }, + "SceneChangeDetect": { + "type": "string" + }, + "FramerateDenominator": { + "type": "integer" + }, + "GopSize": { + "type": "number" + }, + "AdaptiveQuantization": { + "type": "string" + }, + "FilterSettings": { + "$ref": "#/definitions/H265FilterSettings" + }, + "AlternativeTransferFunction": { + "type": "string" + }, + "ColorSpaceSettings": { + "$ref": "#/definitions/H265ColorSpaceSettings" + }, + "Tier": { + "type": "string" + }, + "ParDenominator": { + "type": "integer" + }, + "FixedAfd": { + "type": "string" + }, + "GopSizeUnits": { + "type": "string" + }, + "AfdSignaling": { + "type": "string" + }, + "Bitrate": { + "type": "integer" + }, + "ParNumerator": { + "type": "integer" + }, + "RateControlMode": { + "type": "string" + }, + "ScanType": { + "type": "string" + }, + "BufSize": { + "type": "integer" + }, + "TimecodeInsertion": { + "type": "string" + }, + "ColorMetadata": { + "type": "string" + }, + "LookAheadRateControl": { + "type": "string" + }, + "Level": { + "type": "string" + }, + "MaxBitrate": { + "type": "integer" + } + } + }, + "HlsBasicPutSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "FilecacheDuration": { + "type": "integer" + }, + "RestartDelay": { + "type": "integer" + }, + "NumRetries": { + "type": "integer" + }, + "ConnectionRetryInterval": { + "type": "integer" + } + } + }, + "H264ColorSpaceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rec601Settings": { + "$ref": "#/definitions/Rec601Settings" + }, + "Rec709Settings": { + "$ref": "#/definitions/Rec709Settings" + }, + "ColorSpacePassthroughSettings": { + "$ref": "#/definitions/ColorSpacePassthroughSettings" + } + } + }, + "AudioNormalizationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetLkfs": { + "type": "number" + }, + "Algorithm": { + "type": "string" + }, + "AlgorithmControl": { + "type": "string" + } + } + }, + "DvbSubDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "BackgroundOpacity": { + "type": "integer" + }, + "FontResolution": { + "type": "integer" + }, + "OutlineColor": { + "type": "string" + }, + "FontColor": { + "type": "string" + }, + "ShadowColor": { + "type": "string" + }, + "ShadowOpacity": { + "type": "integer" + }, + "Font": { + "$ref": "#/definitions/InputLocation" + }, + "ShadowYOffset": { + "type": "integer" + }, + "Alignment": { + "type": "string" + }, + "XPosition": { + "type": "integer" + }, + "FontSize": { + "type": "string" + }, + "YPosition": { + "type": "integer" + }, + "OutlineSize": { + "type": "integer" + }, + "TeletextGridControl": { + "type": "string" + }, + "FontOpacity": { + "type": "integer" + }, + "ShadowXOffset": { + "type": "integer" + }, + "BackgroundColor": { + "type": "string" + } + } + }, + "OutputLockingSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "EpochLockingSettings": { + "$ref": "#/definitions/EpochLockingSettings" + }, + "PipelineLockingSettings": { + "$ref": "#/definitions/PipelineLockingSettings" + } + } + }, + "CaptionDescription": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationSettings": { + "$ref": "#/definitions/CaptionDestinationSettings" + }, + "LanguageCode": { + "type": "string" + }, + "LanguageDescription": { + "type": "string" + }, + "Accessibility": { + "type": "string" + }, + "CaptionSelectorName": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "BurnInDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "BackgroundOpacity": { + "type": "integer" + }, + "FontResolution": { + "type": "integer" + }, + "OutlineColor": { + "type": "string" + }, + "FontColor": { + "type": "string" + }, + "ShadowColor": { + "type": "string" + }, + "ShadowOpacity": { + "type": "integer" + }, + "Font": { + "$ref": "#/definitions/InputLocation" + }, + "ShadowYOffset": { + "type": "integer" + }, + "Alignment": { + "type": "string" + }, + "XPosition": { + "type": "integer" + }, + "FontSize": { + "type": "string" + }, + "YPosition": { + "type": "integer" + }, + "OutlineSize": { + "type": "integer" + }, + "TeletextGridControl": { + "type": "string" + }, + "FontOpacity": { + "type": "integer" + }, + "ShadowXOffset": { + "type": "integer" + }, + "BackgroundColor": { + "type": "string" + } + } + }, + "Mpeg2Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimecodeBurninSettings": { + "$ref": "#/definitions/TimecodeBurninSettings" + }, + "ColorSpace": { + "type": "string" + }, + "FixedAfd": { + "type": "string" + }, + "GopSizeUnits": { + "type": "string" + }, + "FramerateNumerator": { + "type": "integer" + }, + "GopClosedCadence": { + "type": "integer" + }, + "AfdSignaling": { + "type": "string" + }, + "DisplayAspectRatio": { + "type": "string" + }, + "ScanType": { + "type": "string" + }, + "TimecodeInsertion": { + "type": "string" + }, + "ColorMetadata": { + "type": "string" + }, + "FramerateDenominator": { + "type": "integer" + }, + "GopSize": { + "type": "number" + }, + "AdaptiveQuantization": { + "type": "string" + }, + "SubgopLength": { + "type": "string" + }, + "FilterSettings": { + "$ref": "#/definitions/Mpeg2FilterSettings" + }, + "GopNumBFrames": { + "type": "integer" + } + } + }, + "HtmlMotionGraphicsSettings": { + "type": "object", + "additionalProperties": false + }, + "MultiplexOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + } + } + }, + "AudioOnlyHlsSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SegmentType": { + "type": "string" + }, + "AudioTrackType": { + "type": "string" + }, + "AudioGroupId": { + "type": "string" + }, + "AudioOnlyImage": { + "$ref": "#/definitions/InputLocation" + } + } + }, + "StaticKeySettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "KeyProviderServer": { + "$ref": "#/definitions/InputLocation" + }, + "StaticKeyValue": { + "type": "string" + } + } + }, + "EmbeddedSourceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Source608ChannelNumber": { + "type": "integer" + }, + "Scte20Detection": { + "type": "string" + }, + "Source608TrackNumber": { + "type": "integer" + }, + "Convert608To708": { + "type": "string" + } + } + }, + "CaptionRectangle": { + "type": "object", + "additionalProperties": false, + "properties": { + "Height": { + "type": "number" + }, + "TopOffset": { + "type": "number" + }, + "Width": { + "type": "number" + }, + "LeftOffset": { + "type": "number" + } + } + }, + "TimecodeConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SyncThreshold": { + "type": "integer" + }, + "Source": { + "type": "string" + } + } + }, + "AacSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "CodingMode": { + "type": "string" + }, + "RateControlMode": { + "type": "string" + }, + "SampleRate": { + "type": "number" + }, + "InputType": { + "type": "string" + }, + "VbrQuality": { + "type": "string" + }, + "RawFormat": { + "type": "string" + }, + "Spec": { + "type": "string" + }, + "Bitrate": { + "type": "number" + }, + "Profile": { + "type": "string" + } + } + }, + "ArchiveOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Extension": { + "type": "string" + }, + "NameModifier": { + "type": "string" + }, + "ContainerSettings": { + "$ref": "#/definitions/ArchiveContainerSettings" + } + } + }, + "VpcOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "PublicAddressAllocationIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "AudioWatermarkSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "NielsenWatermarksSettings": { + "$ref": "#/definitions/NielsenWatermarksSettings" + } + } + }, + "EbuTtDDestinationSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "FontFamily": { + "type": "string" + }, + "StyleControl": { + "type": "string" + }, + "CopyrightHolder": { + "type": "string" + }, + "FillLineGap": { + "type": "string" + } + } + }, + "HlsCdnSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "HlsWebdavSettings": { + "$ref": "#/definitions/HlsWebdavSettings" + }, + "HlsS3Settings": { + "$ref": "#/definitions/HlsS3Settings" + }, + "HlsBasicPutSettings": { + "$ref": "#/definitions/HlsBasicPutSettings" + }, + "HlsMediaStoreSettings": { + "$ref": "#/definitions/HlsMediaStoreSettings" + }, + "HlsAkamaiSettings": { + "$ref": "#/definitions/HlsAkamaiSettings" + } + } + }, + "VideoSelector": { + "type": "object", + "additionalProperties": false, + "properties": { + "ColorSpaceSettings": { + "$ref": "#/definitions/VideoSelectorColorSpaceSettings" + }, + "ColorSpaceUsage": { + "type": "string" + }, + "SelectorSettings": { + "$ref": "#/definitions/VideoSelectorSettings" + }, + "ColorSpace": { + "type": "string" + } + } + }, + "MotionGraphicsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "MotionGraphicsSettings": { + "$ref": "#/definitions/MotionGraphicsSettings" + }, + "MotionGraphicsInsertion": { + "type": "string" + } + } + }, + "Hdr10Settings": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxCll": { + "type": "integer" + }, + "MaxFall": { + "type": "integer" + } + } + }, + "CaptionSelector": { + "type": "object", + "additionalProperties": false, + "properties": { + "LanguageCode": { + "type": "string" + }, + "SelectorSettings": { + "$ref": "#/definitions/CaptionSelectorSettings" + }, + "Name": { + "type": "string" + } + } + }, + "Scte35TimeSignalApos": { + "type": "object", + "additionalProperties": false, + "properties": { + "AdAvailOffset": { + "type": "integer" + }, + "WebDeliveryAllowedFlag": { + "type": "string" + }, + "NoRegionalBlackoutFlag": { + "type": "string" + } + } + }, + "DvbSdtSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "ServiceProviderName": { + "type": "string" + }, + "OutputSdt": { + "type": "string" + }, + "ServiceName": { + "type": "string" + }, + "RepInterval": { + "type": "integer" + } + } + }, + "NielsenWatermarksSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "NielsenNaesIiNwSettings": { + "$ref": "#/definitions/NielsenNaesIiNw" + }, + "NielsenDistributionType": { + "type": "string" + }, + "NielsenCbetSettings": { + "$ref": "#/definitions/NielsenCBET" + } + } + }, + "MsSmoothGroupSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "SegmentationMode": { + "type": "string" + }, + "Destination": { + "$ref": "#/definitions/OutputLocationRef" + }, + "EventStopBehavior": { + "type": "string" + }, + "FilecacheDuration": { + "type": "integer" + }, + "CertificateMode": { + "type": "string" + }, + "AcquisitionPointId": { + "type": "string" + }, + "StreamManifestBehavior": { + "type": "string" + }, + "InputLossAction": { + "type": "string" + }, + "FragmentLength": { + "type": "integer" + }, + "RestartDelay": { + "type": "integer" + }, + "SparseTrackType": { + "type": "string" + }, + "EventIdMode": { + "type": "string" + }, + "TimestampOffsetMode": { + "type": "string" + }, + "AudioOnlyTimecodeControl": { + "type": "string" + }, + "NumRetries": { + "type": "integer" + }, + "TimestampOffset": { + "type": "string" + }, + "EventId": { + "type": "string" + }, + "SendDelayMs": { + "type": "integer" + }, + "ConnectionRetryInterval": { + "type": "integer" + } + } + }, + "EmbeddedDestinationSettings": { + "type": "object", + "additionalProperties": false + }, + "OutputLocationRef": { + "type": "object", + "additionalProperties": false, + "properties": { + "DestinationRefId": { + "type": "string" + } + } + }, + "NielsenNaesIiNw": { + "type": "object", + "additionalProperties": false, + "properties": { + "Timezone": { + "type": "string" + }, + "CheckDigitString": { + "type": "string" + }, + "Sid": { + "type": "number" + } + } + } + }, + "createOnlyProperties": [ + "/properties/Vpc" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Inputs", + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/medialive/input.json b/internal/aws/cfn/schemas/aws/medialive/input.json new file mode 100644 index 00000000..3b6f8ed7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/medialive/input.json @@ -0,0 +1,138 @@ +{ + "typeName": "AWS::MediaLive::Input", + "description": "Resource Type definition for AWS::MediaLive::Input", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Destinations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InputDestinationRequest" + } + }, + "Vpc": { + "$ref": "#/definitions/InputVpcRequest" + }, + "MediaConnectFlows": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MediaConnectFlowRequest" + } + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "InputSecurityGroups": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Sources": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InputSourceRequest" + } + }, + "InputDevices": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InputDeviceSettings" + } + }, + "RoleArn": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "InputSourceRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "PasswordParam": { + "type": "string" + }, + "Username": { + "type": "string" + }, + "Url": { + "type": "string" + } + } + }, + "InputDeviceSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + } + } + }, + "InputDestinationRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "StreamName": { + "type": "string" + } + } + }, + "InputVpcRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "MediaConnectFlowRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "FlowArn": { + "type": "string" + } + } + } + }, + "createOnlyProperties": [ + "/properties/Vpc", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/medialive/inputsecuritygroup.json b/internal/aws/cfn/schemas/aws/medialive/inputsecuritygroup.json new file mode 100644 index 00000000..69c32834 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/medialive/inputsecuritygroup.json @@ -0,0 +1,41 @@ +{ + "typeName": "AWS::MediaLive::InputSecurityGroup", + "description": "Resource Type definition for AWS::MediaLive::InputSecurityGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "WhitelistRules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InputWhitelistRuleCidr" + } + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "InputWhitelistRuleCidr": { + "type": "object", + "additionalProperties": false, + "properties": { + "Cidr": { + "type": "string" + } + } + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/mediapackage/asset.json b/internal/aws/cfn/schemas/aws/mediapackage/asset.json new file mode 100644 index 00000000..04b994d9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediapackage/asset.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::MediaPackage::Asset", + "description": "Resource schema for AWS::MediaPackage::Asset", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Arn": { + "description": "The ARN of the Asset.", + "type": "string" + }, + "CreatedAt": { + "description": "The time the Asset was initially submitted for Ingest.", + "type": "string" + }, + "EgressEndpoints": { + "description": "The list of egress endpoints available for the Asset.", + "type": "array", + "items": { + "$ref": "#/definitions/EgressEndpoint" + } + }, + "Id": { + "description": "The unique identifier for the Asset.", + "type": "string" + }, + "PackagingGroupId": { + "description": "The ID of the PackagingGroup for the Asset.", + "type": "string" + }, + "ResourceId": { + "description": "The resource ID to include in SPEKE key requests.", + "type": "string" + }, + "SourceArn": { + "description": "ARN of the source object in S3.", + "type": "string" + }, + "SourceRoleArn": { + "description": "The IAM role_arn used to access the source S3 bucket.", + "type": "string" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "EgressEndpoint": { + "description": "The endpoint URL used to access an Asset using one PackagingConfiguration.", + "type": "object", + "additionalProperties": false, + "properties": { + "PackagingConfigurationId": { + "description": "The ID of the PackagingConfiguration being applied to the Asset.", + "type": "string" + }, + "Url": { + "description": "The URL of the parent manifest for the repackaged Asset.", + "type": "string" + } + }, + "required": [ + "PackagingConfigurationId", + "Url" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "Id", + "PackagingGroupId", + "SourceArn", + "SourceRoleArn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedAt", + "/properties/EgressEndpoints/*/PackagingConfigurationId", + "/properties/EgressEndpoints/*/Url" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "mediapackage-vod:CreateAsset", + "mediapackage-vod:DescribeAsset", + "mediapackage-vod:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "mediapackage-vod:DescribeAsset" + ] + }, + "delete": { + "permissions": [ + "mediapackage-vod:DescribeAsset", + "mediapackage-vod:DeleteAsset" + ] + }, + "list": { + "permissions": [ + "mediapackage-vod:ListAssets", + "mediapackage-vod:DescribePackagingGroup" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediapackage/channel.json b/internal/aws/cfn/schemas/aws/mediapackage/channel.json new file mode 100644 index 00000000..369fd707 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediapackage/channel.json @@ -0,0 +1,168 @@ +{ + "typeName": "AWS::MediaPackage::Channel", + "description": "Resource schema for AWS::MediaPackage::Channel", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) assigned to the Channel.", + "type": "string" + }, + "Id": { + "description": "The ID of the Channel.", + "type": "string", + "pattern": "\\A[0-9a-zA-Z-_]+\\Z", + "minLength": 1, + "maxLength": 256 + }, + "Description": { + "description": "A short text description of the Channel.", + "type": "string" + }, + "HlsIngest": { + "description": "An HTTP Live Streaming (HLS) ingest resource configuration.", + "$ref": "#/definitions/HlsIngest" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "EgressAccessLogs": { + "description": "The configuration parameters for egress access logging.", + "$ref": "#/definitions/LogConfiguration" + }, + "IngressAccessLogs": { + "description": "The configuration parameters for egress access logging.", + "$ref": "#/definitions/LogConfiguration" + } + }, + "definitions": { + "HlsIngest": { + "description": "An HTTP Live Streaming (HLS) ingest resource configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "ingestEndpoints": { + "description": "A list of endpoints to which the source stream should be sent.", + "type": "array", + "items": { + "$ref": "#/definitions/IngestEndpoint" + } + } + } + }, + "IngestEndpoint": { + "description": "An endpoint for ingesting source content for a Channel.", + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "description": "The system generated unique identifier for the IngestEndpoint", + "type": "string" + }, + "Username": { + "description": "The system generated username for ingest authentication.", + "type": "string" + }, + "Password": { + "description": "The system generated password for ingest authentication.", + "type": "string" + }, + "Url": { + "description": "The ingest URL to which the source stream should be sent.", + "type": "string" + } + }, + "required": [ + "Id", + "Username", + "Password", + "Url" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "LogConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroupName": { + "description": "Sets a custom AWS CloudWatch log group name for access logs. If a log group name isn't specified, the defaults are used: /aws/MediaPackage/EgressAccessLogs for egress access logs and /aws/MediaPackage/IngressAccessLogs for ingress access logs.", + "type": "string", + "pattern": "\\A^(\\/aws\\/MediaPackage\\/)[a-zA-Z0-9_-]+\\Z", + "minLength": 1, + "maxLength": 256 + } + } + } + }, + "additionalProperties": false, + "required": [ + "Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/HlsIngest/ingestEndpoints/*/Id", + "/properties/HlsIngest/ingestEndpoints/*/Username", + "/properties/HlsIngest/ingestEndpoints/*/Password", + "/properties/HlsIngest/ingestEndpoints/*/Url" + ], + "createOnlyProperties": [ + "/properties/Id", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "mediapackage:CreateChannel", + "mediapackage:DescribeChannel", + "mediapackage:UpdateChannel", + "mediapackage:TagResource", + "mediapackage:ConfigureLogs", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "mediapackage:DescribeChannel" + ] + }, + "update": { + "permissions": [ + "mediapackage:UpdateChannel", + "mediapackage:ConfigureLogs", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "mediapackage:DeleteChannel" + ] + }, + "list": { + "permissions": [ + "mediapackage:ListChannels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediapackage/originendpoint.json b/internal/aws/cfn/schemas/aws/mediapackage/originendpoint.json new file mode 100644 index 00000000..c36b9edd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediapackage/originendpoint.json @@ -0,0 +1,707 @@ +{ + "typeName": "AWS::MediaPackage::OriginEndpoint", + "description": "Resource schema for AWS::MediaPackage::OriginEndpoint", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) assigned to the OriginEndpoint.", + "type": "string" + }, + "Url": { + "description": "The URL of the packaged OriginEndpoint for consumption.", + "type": "string" + }, + "Id": { + "description": "The ID of the OriginEndpoint.", + "type": "string", + "pattern": "\\A[0-9a-zA-Z-_]+\\Z", + "minLength": 1, + "maxLength": 256 + }, + "ChannelId": { + "description": "The ID of the Channel the OriginEndpoint is associated with.", + "type": "string" + }, + "Description": { + "description": "A short text description of the OriginEndpoint.", + "type": "string" + }, + "Whitelist": { + "description": "A list of source IP CIDR blocks that will be allowed to access the OriginEndpoint.", + "type": "array", + "items": { + "type": "string" + } + }, + "StartoverWindowSeconds": { + "description": "Maximum duration (seconds) of content to retain for startover playback. If not specified, startover playback will be disabled for the OriginEndpoint.", + "type": "integer" + }, + "TimeDelaySeconds": { + "description": "Amount of delay (seconds) to enforce on the playback of live content. If not specified, there will be no time delay in effect for the OriginEndpoint.", + "type": "integer" + }, + "ManifestName": { + "description": "A short string appended to the end of the OriginEndpoint URL.", + "type": "string" + }, + "Origination": { + "description": "Control whether origination of video is allowed for this OriginEndpoint. If set to ALLOW, the OriginEndpoint may by requested, pursuant to any other form of access control. If set to DENY, the OriginEndpoint may not be requested. This can be helpful for Live to VOD harvesting, or for temporarily disabling origination", + "type": "string", + "enum": [ + "ALLOW", + "DENY" + ] + }, + "Authorization": { + "$ref": "#/definitions/Authorization" + }, + "HlsPackage": { + "$ref": "#/definitions/HlsPackage" + }, + "DashPackage": { + "$ref": "#/definitions/DashPackage" + }, + "MssPackage": { + "$ref": "#/definitions/MssPackage" + }, + "CmafPackage": { + "$ref": "#/definitions/CmafPackage" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "MssPackage": { + "description": "A Microsoft Smooth Streaming (MSS) packaging configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "ManifestWindowSeconds": { + "description": "The time window (in seconds) contained in each manifest.", + "type": "integer" + }, + "SegmentDurationSeconds": { + "description": "The duration (in seconds) of each segment.", + "type": "integer" + }, + "Encryption": { + "$ref": "#/definitions/MssEncryption" + }, + "StreamSelection": { + "$ref": "#/definitions/StreamSelection" + } + } + }, + "MssEncryption": { + "description": "A Microsoft Smooth Streaming (MSS) encryption configuration.", + "type": "object", + "additionalProperties": false, + "required": [ + "SpekeKeyProvider" + ], + "properties": { + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + } + } + }, + "DashPackage": { + "description": "A Dynamic Adaptive Streaming over HTTP (DASH) packaging configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "SegmentDurationSeconds": { + "description": "Duration (in seconds) of each segment. Actual segments will be rounded to the nearest multiple of the source segment duration.", + "type": "integer" + }, + "ManifestWindowSeconds": { + "description": "Time window (in seconds) contained in each manifest.", + "type": "integer" + }, + "Profile": { + "description": "The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.", + "type": "string", + "enum": [ + "NONE", + "HBBTV_1_5", + "HYBRIDCAST", + "DVB_DASH_2014" + ] + }, + "MinUpdatePeriodSeconds": { + "description": "Minimum duration (in seconds) between potential changes to the Dynamic Adaptive Streaming over HTTP (DASH) Media Presentation Description (MPD).", + "type": "integer" + }, + "MinBufferTimeSeconds": { + "description": "Minimum duration (in seconds) that a player will buffer media before starting the presentation.", + "type": "integer" + }, + "SuggestedPresentationDelaySeconds": { + "description": "Duration (in seconds) to delay live content before presentation.", + "type": "integer" + }, + "PeriodTriggers": { + "description": "A list of triggers that controls when the outgoing Dynamic Adaptive Streaming over HTTP (DASH) Media Presentation Description (MPD) will be partitioned into multiple periods. If empty, the content will not be partitioned into more than one period. If the list contains \"ADS\", new periods will be created where the Channel source contains SCTE-35 ad markers.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "ADS" + ] + } + }, + "IncludeIframeOnlyStream": { + "description": "When enabled, an I-Frame only stream will be included in the output.", + "type": "boolean" + }, + "ManifestLayout": { + "description": "Determines the position of some tags in the Media Presentation Description (MPD). When set to FULL, elements like SegmentTemplate and ContentProtection are included in each Representation. When set to COMPACT, duplicate elements are combined and presented at the AdaptationSet level.", + "type": "string", + "enum": [ + "FULL", + "COMPACT", + "DRM_TOP_LEVEL_COMPACT" + ] + }, + "SegmentTemplateFormat": { + "description": "Determines the type of SegmentTemplate included in the Media Presentation Description (MPD). When set to NUMBER_WITH_TIMELINE, a full timeline is presented in each SegmentTemplate, with $Number$ media URLs. When set to TIME_WITH_TIMELINE, a full timeline is presented in each SegmentTemplate, with $Time$ media URLs. When set to NUMBER_WITH_DURATION, only a duration is included in each SegmentTemplate, with $Number$ media URLs.", + "type": "string", + "enum": [ + "NUMBER_WITH_TIMELINE", + "TIME_WITH_TIMELINE", + "NUMBER_WITH_DURATION" + ] + }, + "AdTriggers": { + "description": "A list of SCTE-35 message types that are treated as ad markers in the output. If empty, no ad markers are output. Specify multiple items to create ad markers for all of the included message types.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPLICE_INSERT", + "BREAK", + "PROVIDER_ADVERTISEMENT", + "DISTRIBUTOR_ADVERTISEMENT", + "PROVIDER_PLACEMENT_OPPORTUNITY", + "DISTRIBUTOR_PLACEMENT_OPPORTUNITY", + "PROVIDER_OVERLAY_PLACEMENT_OPPORTUNITY", + "DISTRIBUTOR_OVERLAY_PLACEMENT_OPPORTUNITY" + ] + } + }, + "AdsOnDeliveryRestrictions": { + "$ref": "#/definitions/AdsOnDeliveryRestrictions" + }, + "Encryption": { + "$ref": "#/definitions/DashEncryption" + }, + "StreamSelection": { + "$ref": "#/definitions/StreamSelection" + }, + "UtcTiming": { + "description": "Determines the type of UTCTiming included in the Media Presentation Description (MPD)", + "type": "string", + "enum": [ + "HTTP-XSDATE", + "HTTP-ISO", + "HTTP-HEAD", + "NONE" + ] + }, + "UtcTimingUri": { + "description": "Specifies the value attribute of the UTCTiming field when utcTiming is set to HTTP-ISO, HTTP-HEAD or HTTP-XSDATE", + "type": "string" + } + } + }, + "DashEncryption": { + "description": "A Dynamic Adaptive Streaming over HTTP (DASH) encryption configuration.", + "type": "object", + "additionalProperties": false, + "required": [ + "SpekeKeyProvider" + ], + "properties": { + "KeyRotationIntervalSeconds": { + "description": "Time (in seconds) between each encryption key rotation.", + "type": "integer" + }, + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + } + } + }, + "Authorization": { + "description": "CDN Authorization credentials", + "type": "object", + "additionalProperties": false, + "required": [ + "SecretsRoleArn", + "CdnIdentifierSecret" + ], + "properties": { + "SecretsRoleArn": { + "description": "The Amazon Resource Name (ARN) for the IAM role that allows MediaPackage to communicate with AWS Secrets Manager.", + "type": "string" + }, + "CdnIdentifierSecret": { + "description": "The Amazon Resource Name (ARN) for the secret in Secrets Manager that your Content Distribution Network (CDN) uses for authorization to access your endpoint.", + "type": "string" + } + } + }, + "HlsPackage": { + "description": "An HTTP Live Streaming (HLS) packaging configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "SegmentDurationSeconds": { + "description": "Duration (in seconds) of each fragment. Actual fragments will be rounded to the nearest multiple of the source fragment duration.", + "type": "integer" + }, + "PlaylistWindowSeconds": { + "description": "Time window (in seconds) contained in each parent manifest.", + "type": "integer" + }, + "PlaylistType": { + "description": "The HTTP Live Streaming (HLS) playlist type. When either \"EVENT\" or \"VOD\" is specified, a corresponding EXT-X-PLAYLIST-TYPE entry will be included in the media playlist.", + "type": "string", + "enum": [ + "NONE", + "EVENT", + "VOD" + ] + }, + "AdMarkers": { + "description": "This setting controls how ad markers are included in the packaged OriginEndpoint. \"NONE\" will omit all SCTE-35 ad markers from the output. \"PASSTHROUGH\" causes the manifest to contain a copy of the SCTE-35 ad markers (comments) taken directly from the input HTTP Live Streaming (HLS) manifest. \"SCTE35_ENHANCED\" generates ad markers and blackout tags based on SCTE-35 messages in the input source. \"DATERANGE\" inserts EXT-X-DATERANGE tags to signal ad and program transition events in HLS and CMAF manifests. For this option, you must set a programDateTimeIntervalSeconds value that is greater than 0.", + "type": "string", + "enum": [ + "NONE", + "SCTE35_ENHANCED", + "PASSTHROUGH", + "DATERANGE" + ] + }, + "AdTriggers": { + "description": "A list of SCTE-35 message types that are treated as ad markers in the output. If empty, no ad markers are output. Specify multiple items to create ad markers for all of the included message types.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPLICE_INSERT", + "BREAK", + "PROVIDER_ADVERTISEMENT", + "DISTRIBUTOR_ADVERTISEMENT", + "PROVIDER_PLACEMENT_OPPORTUNITY", + "DISTRIBUTOR_PLACEMENT_OPPORTUNITY", + "PROVIDER_OVERLAY_PLACEMENT_OPPORTUNITY", + "DISTRIBUTOR_OVERLAY_PLACEMENT_OPPORTUNITY" + ] + } + }, + "AdsOnDeliveryRestrictions": { + "$ref": "#/definitions/AdsOnDeliveryRestrictions" + }, + "ProgramDateTimeIntervalSeconds": { + "description": "The interval (in seconds) between each EXT-X-PROGRAM-DATE-TIME tag inserted into manifests. Additionally, when an interval is specified ID3Timed Metadata messages will be generated every 5 seconds using the ingest time of the content. If the interval is not specified, or set to 0, then no EXT-X-PROGRAM-DATE-TIME tags will be inserted into manifests and no ID3Timed Metadata messages will be generated. Note that irrespective of this parameter, if any ID3 Timed Metadata is found in HTTP Live Streaming (HLS) input, it will be passed through to HLS output.", + "type": "integer" + }, + "IncludeIframeOnlyStream": { + "description": "When enabled, an I-Frame only stream will be included in the output.", + "type": "boolean" + }, + "UseAudioRenditionGroup": { + "description": "When enabled, audio streams will be placed in rendition groups in the output.", + "type": "boolean" + }, + "IncludeDvbSubtitles": { + "description": "When enabled, MediaPackage passes through digital video broadcasting (DVB) subtitles into the output.", + "type": "boolean" + }, + "Encryption": { + "$ref": "#/definitions/HlsEncryption" + }, + "StreamSelection": { + "$ref": "#/definitions/StreamSelection" + } + } + }, + "HlsEncryption": { + "description": "An HTTP Live Streaming (HLS) encryption configuration.", + "type": "object", + "additionalProperties": false, + "required": [ + "SpekeKeyProvider" + ], + "properties": { + "EncryptionMethod": { + "description": "The encryption method to use.", + "type": "string", + "enum": [ + "AES_128", + "SAMPLE_AES" + ] + }, + "ConstantInitializationVector": { + "description": "A constant initialization vector for encryption (optional). When not specified the initialization vector will be periodically rotated.", + "type": "string" + }, + "KeyRotationIntervalSeconds": { + "description": "Interval (in seconds) between each encryption key rotation.", + "type": "integer" + }, + "RepeatExtXKey": { + "description": "When enabled, the EXT-X-KEY tag will be repeated in output manifests.", + "type": "boolean" + }, + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + } + } + }, + "CmafPackage": { + "description": "A Common Media Application Format (CMAF) packaging configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "SegmentDurationSeconds": { + "description": "Duration (in seconds) of each segment. Actual segments will be rounded to the nearest multiple of the source segment duration.", + "type": "integer" + }, + "SegmentPrefix": { + "description": "An optional custom string that is prepended to the name of each segment. If not specified, it defaults to the ChannelId.", + "type": "string" + }, + "Encryption": { + "$ref": "#/definitions/CmafEncryption" + }, + "StreamSelection": { + "$ref": "#/definitions/StreamSelection" + }, + "HlsManifests": { + "description": "A list of HLS manifest configurations", + "type": "array", + "items": { + "$ref": "#/definitions/HlsManifest" + } + } + } + }, + "CmafEncryption": { + "description": "A Common Media Application Format (CMAF) encryption configuration.", + "type": "object", + "additionalProperties": false, + "required": [ + "SpekeKeyProvider" + ], + "properties": { + "KeyRotationIntervalSeconds": { + "description": "Time (in seconds) between each encryption key rotation.", + "type": "integer" + }, + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + }, + "ConstantInitializationVector": { + "description": "An optional 128-bit, 16-byte hex value represented by a 32-character string, used in conjunction with the key for encrypting blocks. If you don't specify a value, then MediaPackage creates the constant initialization vector (IV).", + "type": "string", + "pattern": "\\A[0-9a-fA-F]+\\Z", + "minLength": 32, + "maxLength": 32 + }, + "EncryptionMethod": { + "description": "The encryption method used", + "type": "string", + "enum": [ + "SAMPLE_AES", + "AES_CTR" + ] + } + } + }, + "HlsManifest": { + "description": "A HTTP Live Streaming (HLS) manifest configuration.", + "type": "object", + "additionalProperties": false, + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The ID of the manifest. The ID must be unique within the OriginEndpoint and it cannot be changed after it is created.", + "type": "string" + }, + "ManifestName": { + "description": "An optional short string appended to the end of the OriginEndpoint URL. If not specified, defaults to the manifestName for the OriginEndpoint.", + "type": "string" + }, + "Url": { + "description": "The URL of the packaged OriginEndpoint for consumption.", + "type": "string" + }, + "PlaylistWindowSeconds": { + "description": "Time window (in seconds) contained in each parent manifest.", + "type": "integer" + }, + "PlaylistType": { + "description": "The HTTP Live Streaming (HLS) playlist type. When either \"EVENT\" or \"VOD\" is specified, a corresponding EXT-X-PLAYLIST-TYPE entry will be included in the media playlist.", + "type": "string", + "enum": [ + "NONE", + "EVENT", + "VOD" + ] + }, + "AdMarkers": { + "description": "This setting controls how ad markers are included in the packaged OriginEndpoint. \"NONE\" will omit all SCTE-35 ad markers from the output. \"PASSTHROUGH\" causes the manifest to contain a copy of the SCTE-35 ad markers (comments) taken directly from the input HTTP Live Streaming (HLS) manifest. \"SCTE35_ENHANCED\" generates ad markers and blackout tags based on SCTE-35 messages in the input source. \"DATERANGE\" inserts EXT-X-DATERANGE tags to signal ad and program transition events in HLS and CMAF manifests. For this option, you must set a programDateTimeIntervalSeconds value that is greater than 0.", + "type": "string", + "enum": [ + "NONE", + "SCTE35_ENHANCED", + "PASSTHROUGH", + "DATERANGE" + ] + }, + "ProgramDateTimeIntervalSeconds": { + "description": "The interval (in seconds) between each EXT-X-PROGRAM-DATE-TIME tag inserted into manifests. Additionally, when an interval is specified ID3Timed Metadata messages will be generated every 5 seconds using the ingest time of the content. If the interval is not specified, or set to 0, then no EXT-X-PROGRAM-DATE-TIME tags will be inserted into manifests and no ID3Timed Metadata messages will be generated. Note that irrespective of this parameter, if any ID3 Timed Metadata is found in HTTP Live Streaming (HLS) input, it will be passed through to HLS output.", + "type": "integer" + }, + "IncludeIframeOnlyStream": { + "description": "When enabled, an I-Frame only stream will be included in the output.", + "type": "boolean" + }, + "AdTriggers": { + "description": "A list of SCTE-35 message types that are treated as ad markers in the output. If empty, no ad markers are output. Specify multiple items to create ad markers for all of the included message types.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "SPLICE_INSERT", + "BREAK", + "PROVIDER_ADVERTISEMENT", + "DISTRIBUTOR_ADVERTISEMENT", + "PROVIDER_PLACEMENT_OPPORTUNITY", + "DISTRIBUTOR_PLACEMENT_OPPORTUNITY", + "PROVIDER_OVERLAY_PLACEMENT_OPPORTUNITY", + "DISTRIBUTOR_OVERLAY_PLACEMENT_OPPORTUNITY" + ] + } + }, + "AdsOnDeliveryRestrictions": { + "$ref": "#/definitions/AdsOnDeliveryRestrictions" + } + } + }, + "StreamSelection": { + "description": "A StreamSelection configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinVideoBitsPerSecond": { + "description": "The minimum video bitrate (bps) to include in output.", + "type": "integer" + }, + "MaxVideoBitsPerSecond": { + "description": "The maximum video bitrate (bps) to include in output.", + "type": "integer" + }, + "StreamOrder": { + "description": "A directive that determines the order of streams in the output.", + "type": "string", + "enum": [ + "ORIGINAL", + "VIDEO_BITRATE_ASCENDING", + "VIDEO_BITRATE_DESCENDING" + ] + } + } + }, + "SpekeKeyProvider": { + "description": "A configuration for accessing an external Secure Packager and Encoder Key Exchange (SPEKE) service that will provide encryption keys.", + "type": "object", + "additionalProperties": false, + "required": [ + "ResourceId", + "SystemIds", + "Url", + "RoleArn" + ], + "properties": { + "ResourceId": { + "description": "The resource ID to include in key requests.", + "type": "string" + }, + "SystemIds": { + "description": "The system IDs to include in key requests.", + "type": "array", + "items": { + "type": "string" + } + }, + "Url": { + "description": "The URL of the external key provider service.", + "type": "string" + }, + "RoleArn": { + "description": "An Amazon Resource Name (ARN) of an IAM role that AWS Elemental MediaPackage will assume when accessing the key provider service.", + "type": "string" + }, + "CertificateArn": { + "description": "An Amazon Resource Name (ARN) of a Certificate Manager certificate that MediaPackage will use for enforcing secure end-to-end data transfer with the key provider service.", + "type": "string" + }, + "EncryptionContractConfiguration": { + "$ref": "#/definitions/EncryptionContractConfiguration" + } + } + }, + "EncryptionContractConfiguration": { + "description": "The configuration to use for encrypting one or more content tracks separately for endpoints that use SPEKE 2.0.", + "type": "object", + "additionalProperties": false, + "required": [ + "PresetSpeke20Audio", + "PresetSpeke20Video" + ], + "properties": { + "PresetSpeke20Audio": { + "description": "A collection of audio encryption presets.", + "type": "string", + "enum": [ + "PRESET-AUDIO-1", + "PRESET-AUDIO-2", + "PRESET-AUDIO-3", + "SHARED", + "UNENCRYPTED" + ] + }, + "PresetSpeke20Video": { + "description": "A collection of video encryption presets.", + "type": "string", + "enum": [ + "PRESET-VIDEO-1", + "PRESET-VIDEO-2", + "PRESET-VIDEO-3", + "PRESET-VIDEO-4", + "PRESET-VIDEO-5", + "PRESET-VIDEO-6", + "PRESET-VIDEO-7", + "PRESET-VIDEO-8", + "SHARED", + "UNENCRYPTED" + ] + } + } + }, + "AdsOnDeliveryRestrictions": { + "description": "This setting allows the delivery restriction flags on SCTE-35 segmentation descriptors to determine whether a message signals an ad. Choosing \"NONE\" means no SCTE-35 messages become ads. Choosing \"RESTRICTED\" means SCTE-35 messages of the types specified in AdTriggers that contain delivery restrictions will be treated as ads. Choosing \"UNRESTRICTED\" means SCTE-35 messages of the types specified in AdTriggers that do not contain delivery restrictions will be treated as ads. Choosing \"BOTH\" means all SCTE-35 messages of the types specified in AdTriggers will be treated as ads. Note that Splice Insert messages do not have these flags and are always treated as ads if specified in AdTriggers.", + "type": "string", + "enum": [ + "NONE", + "RESTRICTED", + "UNRESTRICTED", + "BOTH" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "Id", + "ChannelId" + ], + "oneOf": [ + { + "required": [ + "HlsPackage" + ] + }, + { + "required": [ + "DashPackage" + ] + }, + { + "required": [ + "MssPackage" + ] + }, + { + "required": [ + "CmafPackage" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Url" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Id" + ], + "deprecatedProperties": [ + "/properties/HlsPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Audio", + "/properties/HlsPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Video", + "/properties/MssPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Audio", + "/properties/MssPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Video", + "/properties/CmafPackage/HlsManifests/*/Url" + ], + "handlers": { + "create": { + "permissions": [ + "mediapackage:CreateOriginEndpoint", + "mediapackage:DescribeOriginEndpoint", + "mediapackage:DescribeChannel", + "mediapackage:TagResource", + "iam:PassRole", + "acm:DescribeCertificate" + ] + }, + "read": { + "permissions": [ + "mediapackage:DescribeOriginEndpoint" + ] + }, + "update": { + "permissions": [ + "mediapackage:UpdateOriginEndpoint", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "mediapackage:DeleteOriginEndpoint" + ] + }, + "list": { + "permissions": [ + "mediapackage:ListOriginEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediapackage/packagingconfiguration.json b/internal/aws/cfn/schemas/aws/mediapackage/packagingconfiguration.json new file mode 100644 index 00000000..dfc8b43c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediapackage/packagingconfiguration.json @@ -0,0 +1,516 @@ +{ + "typeName": "AWS::MediaPackage::PackagingConfiguration", + "description": "Resource schema for AWS::MediaPackage::PackagingConfiguration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "Id": { + "description": "The ID of the PackagingConfiguration.", + "type": "string" + }, + "PackagingGroupId": { + "description": "The ID of a PackagingGroup.", + "type": "string" + }, + "Arn": { + "description": "The ARN of the PackagingConfiguration.", + "type": "string" + }, + "CmafPackage": { + "description": "A CMAF packaging configuration.", + "$ref": "#/definitions/CmafPackage" + }, + "DashPackage": { + "description": "A Dynamic Adaptive Streaming over HTTP (DASH) packaging configuration.", + "$ref": "#/definitions/DashPackage" + }, + "HlsPackage": { + "description": "An HTTP Live Streaming (HLS) packaging configuration.", + "$ref": "#/definitions/HlsPackage" + }, + "MssPackage": { + "description": "A Microsoft Smooth Streaming (MSS) PackagingConfiguration.", + "$ref": "#/definitions/MssPackage" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "RoleArn": { + "description": "An Amazon Resource Name (ARN) of an IAM role that AWS Elemental MediaPackage will assume when accessing the key provider service.", + "type": "string" + }, + "SpekeKeyProvider": { + "description": "A configuration for accessing an external Secure Packager and Encoder Key Exchange (SPEKE) service that will provide encryption keys.", + "type": "object", + "additionalProperties": false, + "properties": { + "EncryptionContractConfiguration": { + "$ref": "#/definitions/EncryptionContractConfiguration" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "SystemIds": { + "description": "The system IDs to include in key requests.", + "type": "array", + "items": { + "type": "string" + } + }, + "Url": { + "description": "The URL of the external key provider service.", + "type": "string" + } + }, + "required": [ + "RoleArn", + "SystemIds", + "Url" + ] + }, + "EncryptionContractConfiguration": { + "description": "The configuration to use for encrypting one or more content tracks separately for endpoints that use SPEKE 2.0.", + "type": "object", + "additionalProperties": false, + "required": [ + "PresetSpeke20Audio", + "PresetSpeke20Video" + ], + "properties": { + "PresetSpeke20Audio": { + "description": "A collection of audio encryption presets.", + "type": "string", + "enum": [ + "PRESET-AUDIO-1", + "PRESET-AUDIO-2", + "PRESET-AUDIO-3", + "SHARED", + "UNENCRYPTED" + ] + }, + "PresetSpeke20Video": { + "description": "A collection of video encryption presets.", + "type": "string", + "enum": [ + "PRESET-VIDEO-1", + "PRESET-VIDEO-2", + "PRESET-VIDEO-3", + "PRESET-VIDEO-4", + "PRESET-VIDEO-5", + "PRESET-VIDEO-6", + "PRESET-VIDEO-7", + "PRESET-VIDEO-8", + "SHARED", + "UNENCRYPTED" + ] + } + } + }, + "StreamSelection": { + "description": "A StreamSelection configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "MaxVideoBitsPerSecond": { + "description": "The maximum video bitrate (bps) to include in output.", + "type": "integer" + }, + "MinVideoBitsPerSecond": { + "description": "The minimum video bitrate (bps) to include in output.", + "type": "integer" + }, + "StreamOrder": { + "description": "A directive that determines the order of streams in the output.", + "type": "string", + "enum": [ + "ORIGINAL", + "VIDEO_BITRATE_ASCENDING", + "VIDEO_BITRATE_DESCENDING" + ] + } + } + }, + "SegmentDurationSeconds": { + "description": "Duration (in seconds) of each fragment. Actual fragments will be rounded to the nearest multiple of the source fragment duration.", + "type": "integer" + }, + "ManifestName": { + "description": "An optional string to include in the name of the manifest.", + "type": "string" + }, + "HlsManifest": { + "description": "An HTTP Live Streaming (HLS) manifest configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "AdMarkers": { + "description": "This setting controls how ad markers are included in the packaged OriginEndpoint. \"NONE\" will omit all SCTE-35 ad markers from the output. \"PASSTHROUGH\" causes the manifest to contain a copy of the SCTE-35 ad markers (comments) taken directly from the input HTTP Live Streaming (HLS) manifest. \"SCTE35_ENHANCED\" generates ad markers and blackout tags based on SCTE-35 messages in the input source.", + "type": "string", + "enum": [ + "NONE", + "SCTE35_ENHANCED", + "PASSTHROUGH" + ] + }, + "IncludeIframeOnlyStream": { + "description": "When enabled, an I-Frame only stream will be included in the output.", + "type": "boolean" + }, + "ManifestName": { + "$ref": "#/definitions/ManifestName" + }, + "ProgramDateTimeIntervalSeconds": { + "description": "The interval (in seconds) between each EXT-X-PROGRAM-DATE-TIME tag inserted into manifests. Additionally, when an interval is specified ID3Timed Metadata messages will be generated every 5 seconds using the ingest time of the content. If the interval is not specified, or set to 0, then no EXT-X-PROGRAM-DATE-TIME tags will be inserted into manifests and no ID3Timed Metadata messages will be generated. Note that irrespective of this parameter, if any ID3 Timed Metadata is found in HTTP Live Streaming (HLS) input, it will be passed through to HLS output.", + "type": "integer" + }, + "RepeatExtXKey": { + "description": "When enabled, the EXT-X-KEY tag will be repeated in output manifests.", + "type": "boolean" + }, + "StreamSelection": { + "$ref": "#/definitions/StreamSelection" + } + } + }, + "DashManifest": { + "description": "A DASH manifest configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "ManifestLayout": { + "description": "Determines the position of some tags in the Media Presentation Description (MPD). When set to FULL, elements like SegmentTemplate and ContentProtection are included in each Representation. When set to COMPACT, duplicate elements are combined and presented at the AdaptationSet level.", + "type": "string", + "enum": [ + "FULL", + "COMPACT" + ] + }, + "ManifestName": { + "$ref": "#/definitions/ManifestName" + }, + "MinBufferTimeSeconds": { + "description": "Minimum duration (in seconds) that a player will buffer media before starting the presentation.", + "type": "integer" + }, + "Profile": { + "description": "The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.", + "type": "string", + "enum": [ + "NONE", + "HBBTV_1_5" + ] + }, + "ScteMarkersSource": { + "description": "The source of scte markers used. When set to SEGMENTS, the scte markers are sourced from the segments of the ingested content. When set to MANIFEST, the scte markers are sourced from the manifest of the ingested content.", + "type": "string", + "enum": [ + "SEGMENTS", + "MANIFEST" + ] + }, + "StreamSelection": { + "$ref": "#/definitions/StreamSelection" + } + } + }, + "MssManifest": { + "description": "A Microsoft Smooth Streaming (MSS) manifest configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "ManifestName": { + "$ref": "#/definitions/ManifestName" + }, + "StreamSelection": { + "$ref": "#/definitions/StreamSelection" + } + } + }, + "CmafEncryption": { + "type": "object", + "description": "A CMAF encryption configuration.", + "additionalProperties": false, + "properties": { + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + } + }, + "required": [ + "SpekeKeyProvider" + ] + }, + "CmafPackage": { + "description": "A CMAF packaging configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "Encryption": { + "$ref": "#/definitions/CmafEncryption" + }, + "HlsManifests": { + "description": "A list of HLS manifest configurations.", + "type": "array", + "items": { + "$ref": "#/definitions/HlsManifest" + } + }, + "SegmentDurationSeconds": { + "$ref": "#/definitions/SegmentDurationSeconds" + }, + "IncludeEncoderConfigurationInSegments": { + "description": "When includeEncoderConfigurationInSegments is set to true, MediaPackage places your encoder's Sequence Parameter Set (SPS), Picture Parameter Set (PPS), and Video Parameter Set (VPS) metadata in every video segment instead of in the init fragment. This lets you use different SPS/PPS/VPS settings for your assets during content playback.", + "type": "boolean" + } + }, + "required": [ + "HlsManifests" + ] + }, + "DashEncryption": { + "type": "object", + "description": "A Dynamic Adaptive Streaming over HTTP (DASH) encryption configuration.", + "additionalProperties": false, + "properties": { + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + } + }, + "required": [ + "SpekeKeyProvider" + ] + }, + "DashPackage": { + "type": "object", + "description": "A Dynamic Adaptive Streaming over HTTP (DASH) packaging configuration.", + "additionalProperties": false, + "properties": { + "DashManifests": { + "description": "A list of DASH manifest configurations.", + "type": "array", + "items": { + "$ref": "#/definitions/DashManifest" + } + }, + "Encryption": { + "$ref": "#/definitions/DashEncryption" + }, + "PeriodTriggers": { + "description": "A list of triggers that controls when the outgoing Dynamic Adaptive Streaming over HTTP (DASH) Media Presentation Description (MPD) will be partitioned into multiple periods. If empty, the content will not be partitioned into more than one period. If the list contains \"ADS\", new periods will be created where the Asset contains SCTE-35 ad markers.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "ADS" + ] + } + }, + "SegmentDurationSeconds": { + "$ref": "#/definitions/SegmentDurationSeconds" + }, + "SegmentTemplateFormat": { + "description": "Determines the type of SegmentTemplate included in the Media Presentation Description (MPD). When set to NUMBER_WITH_TIMELINE, a full timeline is presented in each SegmentTemplate, with $Number$ media URLs. When set to TIME_WITH_TIMELINE, a full timeline is presented in each SegmentTemplate, with $Time$ media URLs. When set to NUMBER_WITH_DURATION, only a duration is included in each SegmentTemplate, with $Number$ media URLs.", + "type": "string", + "enum": [ + "NUMBER_WITH_TIMELINE", + "TIME_WITH_TIMELINE", + "NUMBER_WITH_DURATION" + ] + }, + "IncludeEncoderConfigurationInSegments": { + "description": "When includeEncoderConfigurationInSegments is set to true, MediaPackage places your encoder's Sequence Parameter Set (SPS), Picture Parameter Set (PPS), and Video Parameter Set (VPS) metadata in every video segment instead of in the init fragment. This lets you use different SPS/PPS/VPS settings for your assets during content playback.", + "type": "boolean" + }, + "IncludeIframeOnlyStream": { + "description": "When enabled, an I-Frame only stream will be included in the output.", + "type": "boolean" + } + }, + "required": [ + "DashManifests" + ] + }, + "HlsEncryption": { + "description": "An HTTP Live Streaming (HLS) encryption configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "ConstantInitializationVector": { + "description": "An HTTP Live Streaming (HLS) encryption configuration.", + "type": "string" + }, + "EncryptionMethod": { + "description": "The encryption method to use.", + "type": "string", + "enum": [ + "AES_128", + "SAMPLE_AES" + ] + }, + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + } + }, + "required": [ + "SpekeKeyProvider" + ] + }, + "HlsPackage": { + "description": "An HTTP Live Streaming (HLS) packaging configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "Encryption": { + "$ref": "#/definitions/HlsEncryption" + }, + "HlsManifests": { + "description": "A list of HLS manifest configurations.", + "type": "array", + "items": { + "$ref": "#/definitions/HlsManifest" + } + }, + "IncludeDvbSubtitles": { + "description": "When enabled, MediaPackage passes through digital video broadcasting (DVB) subtitles into the output.", + "type": "boolean" + }, + "SegmentDurationSeconds": { + "$ref": "#/definitions/SegmentDurationSeconds" + }, + "UseAudioRenditionGroup": { + "description": "When enabled, audio streams will be placed in rendition groups in the output.", + "type": "boolean" + } + }, + "required": [ + "HlsManifests" + ] + }, + "MssEncryption": { + "description": "A CMAF encryption configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "SpekeKeyProvider": { + "$ref": "#/definitions/SpekeKeyProvider" + } + }, + "required": [ + "SpekeKeyProvider" + ] + }, + "MssPackage": { + "type": "object", + "description": "A Microsoft Smooth Streaming (MSS) PackagingConfiguration.", + "additionalProperties": false, + "properties": { + "Encryption": { + "$ref": "#/definitions/MssEncryption" + }, + "MssManifests": { + "description": "A list of MSS manifest configurations.", + "type": "array", + "items": { + "$ref": "#/definitions/MssManifest" + } + }, + "SegmentDurationSeconds": { + "$ref": "#/definitions/SegmentDurationSeconds" + } + }, + "required": [ + "MssManifests" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "PackagingGroupId", + "Id" + ], + "oneOf": [ + { + "required": [ + "HlsPackage" + ] + }, + { + "required": [ + "DashPackage" + ] + }, + { + "required": [ + "MssPackage" + ] + }, + { + "required": [ + "CmafPackage" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Id" + ], + "deprecatedProperties": [ + "/properties/HlsPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Audio", + "/properties/HlsPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Video", + "/properties/MssPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Audio", + "/properties/MssPackage/Encryption/SpekeKeyProvider/EncryptionContractConfiguration/PresetSpeke20Video" + ], + "handlers": { + "create": { + "permissions": [ + "mediapackage-vod:CreatePackagingConfiguration", + "mediapackage-vod:DescribePackagingConfiguration", + "mediapackage-vod:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "mediapackage-vod:DescribePackagingConfiguration" + ] + }, + "delete": { + "permissions": [ + "mediapackage-vod:DescribePackagingConfiguration", + "mediapackage-vod:DeletePackagingConfiguration" + ] + }, + "list": { + "permissions": [ + "mediapackage-vod:ListPackagingConfigurations", + "mediapackage-vod:DescribePackagingGroup" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediapackage/packaginggroup.json b/internal/aws/cfn/schemas/aws/mediapackage/packaginggroup.json new file mode 100644 index 00000000..38dea6f9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediapackage/packaginggroup.json @@ -0,0 +1,140 @@ +{ + "typeName": "AWS::MediaPackage::PackagingGroup", + "description": "Resource schema for AWS::MediaPackage::PackagingGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediapackage.git", + "properties": { + "Id": { + "description": "The ID of the PackagingGroup.", + "type": "string", + "pattern": "\\A[0-9a-zA-Z-_]+\\Z", + "minLength": 1, + "maxLength": 256 + }, + "Arn": { + "description": "The ARN of the PackagingGroup.", + "type": "string" + }, + "DomainName": { + "description": "The fully qualified domain name for Assets in the PackagingGroup.", + "type": "string" + }, + "Authorization": { + "description": "CDN Authorization", + "$ref": "#/definitions/Authorization" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "EgressAccessLogs": { + "description": "The configuration parameters for egress access logging.", + "$ref": "#/definitions/LogConfiguration" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Authorization": { + "type": "object", + "additionalProperties": false, + "properties": { + "CdnIdentifierSecret": { + "description": "The Amazon Resource Name (ARN) for the secret in AWS Secrets Manager that is used for CDN authorization.", + "type": "string" + }, + "SecretsRoleArn": { + "description": "The Amazon Resource Name (ARN) for the IAM role that allows MediaPackage to communicate with AWS Secrets Manager.", + "type": "string" + } + }, + "required": [ + "CdnIdentifierSecret", + "SecretsRoleArn" + ] + }, + "LogConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroupName": { + "description": "Sets a custom AWS CloudWatch log group name for egress logs. If a log group name isn't specified, the default name is used: /aws/MediaPackage/VodEgressAccessLogs.", + "type": "string", + "pattern": "\\A\\/aws\\/MediaPackage\\/[0-9a-zA-Z-_\\/\\.#]+\\Z", + "minLength": 1, + "maxLength": 512 + } + } + } + }, + "additionalProperties": false, + "required": [ + "Id" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/DomainName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Id", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "mediapackage-vod:CreatePackagingGroup", + "mediapackage-vod:DescribePackagingGroup", + "mediapackage-vod:TagResource", + "mediapackage-vod:ConfigureLogs", + "iam:PassRole", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "mediapackage-vod:DescribePackagingGroup" + ] + }, + "update": { + "permissions": [ + "mediapackage-vod:DescribePackagingGroup", + "mediapackage-vod:UpdatePackagingGroup", + "mediapackage-vod:ConfigureLogs", + "mediapackage-vod:TagResource", + "iam:PassRole", + "iam:CreateServiceLinkedRole" + ] + }, + "list": { + "permissions": [ + "mediapackage-vod:ListPackagingGroups" + ] + }, + "delete": { + "permissions": [ + "mediapackage-vod:DescribePackagingGroup", + "mediapackage-vod:DeletePackagingGroup" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediastore/container.json b/internal/aws/cfn/schemas/aws/mediastore/container.json new file mode 100644 index 00000000..99a337e4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediastore/container.json @@ -0,0 +1,145 @@ +{ + "typeName": "AWS::MediaStore::Container", + "description": "Resource Type definition for AWS::MediaStore::Container", + "additionalProperties": false, + "properties": { + "Policy": { + "type": "string" + }, + "MetricPolicy": { + "$ref": "#/definitions/MetricPolicy" + }, + "Endpoint": { + "type": "string" + }, + "ContainerName": { + "type": "string" + }, + "CorsPolicy": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CorsRule" + } + }, + "LifecyclePolicy": { + "type": "string" + }, + "AccessLoggingEnabled": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "MetricPolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContainerLevelMetrics": { + "type": "string" + }, + "MetricPolicyRules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/MetricPolicyRule" + } + } + }, + "required": [ + "ContainerLevelMetrics" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "MetricPolicyRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectGroupName": { + "type": "string" + }, + "ObjectGroup": { + "type": "string" + } + }, + "required": [ + "ObjectGroup", + "ObjectGroupName" + ] + }, + "CorsRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "AllowedMethods": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AllowedOrigins": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ExposeHeaders": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "MaxAgeSeconds": { + "type": "integer" + }, + "AllowedHeaders": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "ContainerName" + ], + "createOnlyProperties": [ + "/properties/ContainerName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Endpoint" + ] +} diff --git a/internal/aws/cfn/schemas/aws/mediatailor/channel.json b/internal/aws/cfn/schemas/aws/mediatailor/channel.json new file mode 100644 index 00000000..1a19904a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediatailor/channel.json @@ -0,0 +1,264 @@ +{ + "typeName": "AWS::MediaTailor::Channel", + "description": "Definition of AWS::MediaTailor::Channel Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediatailor.git", + "definitions": { + "DashPlaylistSettings": { + "type": "object", + "description": "

Dash manifest configuration parameters.

", + "properties": { + "ManifestWindowSeconds": { + "type": "number", + "description": "

The total duration (in seconds) of each manifest. Minimum value: 30 seconds. Maximum value: 3600 seconds.

" + }, + "MinBufferTimeSeconds": { + "type": "number", + "description": "

Minimum amount of content (measured in seconds) that a player must keep available in the buffer. Minimum value: 2 seconds. Maximum value: 60 seconds.

" + }, + "MinUpdatePeriodSeconds": { + "type": "number", + "description": "

Minimum amount of time (in seconds) that the player should wait before requesting updates to the manifest. Minimum value: 2 seconds. Maximum value: 60 seconds.

" + }, + "SuggestedPresentationDelaySeconds": { + "type": "number", + "description": "

Amount of time (in seconds) that the player should be from the live point at the end of the manifest. Minimum value: 2 seconds. Maximum value: 60 seconds.

" + } + }, + "additionalProperties": false + }, + "HlsPlaylistSettings": { + "type": "object", + "description": "

HLS playlist configuration parameters.

", + "properties": { + "ManifestWindowSeconds": { + "type": "number", + "description": "

The total duration (in seconds) of each manifest. Minimum value: 30 seconds. Maximum value: 3600 seconds.

" + }, + "AdMarkupType": { + "type": "array", + "items": { + "$ref": "#/definitions/AdMarkupType" + }, + "description": "

Determines the type of SCTE 35 tags to use in ad markup. Specify DATERANGE to use DATERANGE tags (for live or VOD content). Specify SCTE35_ENHANCED to use EXT-X-CUE-OUT and EXT-X-CUE-IN tags (for VOD content only).

" + } + }, + "additionalProperties": false + }, + "LogConfigurationForChannel": { + "type": "object", + "description": "

The log configuration for the channel.

", + "properties": { + "LogTypes": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LogType" + }, + "description": "

The log types.

" + } + }, + "additionalProperties": false + }, + "LogType": { + "type": "string", + "enum": [ + "AS_RUN" + ] + }, + "PlaybackMode": { + "type": "string", + "enum": [ + "LOOP", + "LINEAR" + ] + }, + "AdMarkupType": { + "type": "string", + "enum": [ + "DATERANGE", + "SCTE35_ENHANCED" + ] + }, + "RequestOutputItem": { + "type": "object", + "description": "

The output configuration for this channel.

", + "properties": { + "DashPlaylistSettings": { + "$ref": "#/definitions/DashPlaylistSettings" + }, + "HlsPlaylistSettings": { + "$ref": "#/definitions/HlsPlaylistSettings" + }, + "ManifestName": { + "type": "string", + "description": "

The name of the manifest for the channel. The name appears in the PlaybackUrl.

" + }, + "SourceGroup": { + "type": "string", + "description": "

A string used to match which HttpPackageConfiguration is used for each VodSource.

" + } + }, + "required": [ + "ManifestName", + "SourceGroup" + ], + "additionalProperties": false + }, + "SlateSource": { + "type": "object", + "description": "

Slate VOD source configuration.

", + "properties": { + "SourceLocationName": { + "type": "string", + "description": "

The name of the source location where the slate VOD source is stored.

" + }, + "VodSourceName": { + "type": "string", + "description": "

The slate VOD source name. The VOD source must already exist in a source location before it can be used for slate.

" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Tier": { + "type": "string", + "enum": [ + "BASIC", + "STANDARD" + ] + }, + "TimeShiftConfiguration": { + "type": "object", + "description": "

The configuration for time-shifted viewing.

", + "properties": { + "MaxTimeDelaySeconds": { + "type": "number", + "description": "

The maximum time delay for time-shifted viewing. The minimum allowed maximum time delay is 0 seconds, and the maximum allowed maximum time delay is 21600 seconds (6 hours).

" + } + }, + "required": [ + "MaxTimeDelaySeconds" + ], + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "properties": { + "Arn": { + "type": "string", + "description": "

The ARN of the channel.

" + }, + "ChannelName": { + "type": "string" + }, + "FillerSlate": { + "$ref": "#/definitions/SlateSource" + }, + "LogConfiguration": { + "$ref": "#/definitions/LogConfigurationForChannel" + }, + "Outputs": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RequestOutputItem" + }, + "description": "

The channel's output properties.

" + }, + "PlaybackMode": { + "$ref": "#/definitions/PlaybackMode" + }, + "Tags": { + "description": "The tags to assign to the channel.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tier": { + "$ref": "#/definitions/Tier" + }, + "TimeShiftConfiguration": { + "$ref": "#/definitions/TimeShiftConfiguration" + } + }, + "required": [ + "ChannelName", + "Outputs", + "PlaybackMode" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/Outputs" + ], + "createOnlyProperties": [ + "/properties/ChannelName", + "/properties/Tier" + ], + "primaryIdentifier": [ + "/properties/ChannelName" + ], + "handlers": { + "create": { + "permissions": [ + "mediatailor:CreateChannel", + "mediatailor:TagResource", + "mediatailor:ConfigureLogsForChannel", + "iam:CreateServiceLinkedRole", + "mediatailor:DescribeChannel" + ] + }, + "read": { + "permissions": [ + "mediatailor:DescribeChannel" + ] + }, + "update": { + "permissions": [ + "mediatailor:UpdateChannel", + "mediatailor:TagResource", + "mediatailor:UntagResource", + "iam:CreateServiceLinkedRole", + "mediatailor:ConfigureLogsForChannel", + "mediatailor:DescribeChannel" + ] + }, + "delete": { + "permissions": [ + "mediatailor:DeleteChannel", + "mediatailor:DescribeChannel" + ] + }, + "list": { + "permissions": [ + "mediatailor:ListChannels" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/mediatailor/channelpolicy.json b/internal/aws/cfn/schemas/aws/mediatailor/channelpolicy.json new file mode 100644 index 00000000..d8d86c19 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediatailor/channelpolicy.json @@ -0,0 +1,58 @@ +{ + "typeName": "AWS::MediaTailor::ChannelPolicy", + "description": "Definition of AWS::MediaTailor::ChannelPolicy Resource Type", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "ChannelName": { + "type": "string" + }, + "Policy": { + "type": [ + "object", + "string" + ], + "description": "

The IAM policy for the channel. IAM policies are used to control access to your channel.

" + } + }, + "createOnlyProperties": [ + "/properties/ChannelName" + ], + "primaryIdentifier": [ + "/properties/ChannelName" + ], + "required": [ + "ChannelName", + "Policy" + ], + "handlers": { + "create": { + "permissions": [ + "mediatailor:PutChannelPolicy", + "mediatailor:GetChannelPolicy" + ] + }, + "read": { + "permissions": [ + "mediatailor:GetChannelPolicy" + ] + }, + "update": { + "permissions": [ + "mediatailor:PutChannelPolicy", + "mediatailor:GetChannelPolicy" + ] + }, + "delete": { + "permissions": [ + "mediatailor:DeleteChannelPolicy", + "mediatailor:GetChannelPolicy" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/mediatailor/livesource.json b/internal/aws/cfn/schemas/aws/mediatailor/livesource.json new file mode 100644 index 00000000..549c1bc0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediatailor/livesource.json @@ -0,0 +1,148 @@ +{ + "typeName": "AWS::MediaTailor::LiveSource", + "description": "Definition of AWS::MediaTailor::LiveSource Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediatailor", + "definitions": { + "HttpPackageConfiguration": { + "type": "object", + "description": "

The HTTP package configuration properties for the requested VOD source.

", + "properties": { + "Path": { + "type": "string", + "description": "

The relative path to the URL for this VOD source. This is combined with SourceLocation::HttpConfiguration::BaseUrl to form a valid URL.

" + }, + "SourceGroup": { + "type": "string", + "description": "

The name of the source group. This has to match one of the Channel::Outputs::SourceGroup.

" + }, + "Type": { + "$ref": "#/definitions/Type" + } + }, + "required": [ + "Path", + "SourceGroup", + "Type" + ], + "additionalProperties": false + }, + "Type": { + "type": "string", + "enum": [ + "DASH", + "HLS" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "description": "

The ARN of the live source.

" + }, + "HttpPackageConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/HttpPackageConfiguration" + }, + "description": "

A list of HTTP package configuration parameters for this live source.

" + }, + "LiveSourceName": { + "type": "string" + }, + "SourceLocationName": { + "type": "string" + }, + "Tags": { + "description": "The tags to assign to the live source.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "HttpPackageConfigurations", + "LiveSourceName", + "SourceLocationName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/LiveSourceName", + "/properties/SourceLocationName" + ], + "primaryIdentifier": [ + "/properties/LiveSourceName", + "/properties/SourceLocationName" + ], + "handlers": { + "create": { + "permissions": [ + "mediatailor:CreateLiveSource", + "mediatailor:DescribeLiveSource", + "mediatailor:TagResource" + ] + }, + "read": { + "permissions": [ + "mediatailor:DescribeLiveSource" + ] + }, + "update": { + "permissions": [ + "mediatailor:UpdateLiveSource", + "mediatailor:DescribeLiveSource", + "mediatailor:TagResource", + "mediatailor:UntagResource" + ] + }, + "delete": { + "permissions": [ + "mediatailor:DeleteLiveSource", + "mediatailor:DescribeLiveSource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "SourceLocationName": { + "$ref": "resource-schema.json#/properties/SourceLocationName" + } + }, + "required": [ + "SourceLocationName" + ] + }, + "permissions": [ + "mediatailor:ListLiveSources" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/mediatailor/playbackconfiguration.json b/internal/aws/cfn/schemas/aws/mediatailor/playbackconfiguration.json new file mode 100644 index 00000000..68b6a5f1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediatailor/playbackconfiguration.json @@ -0,0 +1,291 @@ +{ + "typeName": "AWS::MediaTailor::PlaybackConfiguration", + "description": "Resource schema for AWS::MediaTailor::PlaybackConfiguration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediatailor.git", + "properties": { + "AdDecisionServerUrl": { + "description": "The URL for the ad decision server (ADS). This includes the specification of static parameters and placeholders for dynamic parameters. AWS Elemental MediaTailor substitutes player-specific and session-specific parameters as needed when calling the ADS. Alternately, for testing you can provide a static VAST URL. The maximum length is 25,000 characters.", + "type": "string" + }, + "AvailSuppression": { + "description": "The configuration for avail suppression, also known as ad suppression. For more information about ad suppression, see Ad Suppression (https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html).", + "$ref": "#/definitions/AvailSuppression" + }, + "Bumper": { + "description": "The configuration for bumpers. Bumpers are short audio or video clips that play at the start or before the end of an ad break. To learn more about bumpers, see Bumpers (https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html).", + "$ref": "#/definitions/Bumper" + }, + "CdnConfiguration": { + "description": "The configuration for using a content delivery network (CDN), like Amazon CloudFront, for content and ad segment management.", + "$ref": "#/definitions/CdnConfiguration" + }, + "ConfigurationAliases": { + "description": "The player parameters and aliases used as dynamic variables during session initialization. For more information, see Domain Variables. ", + "$ref": "#/definitions/ConfigurationAliases" + }, + "DashConfiguration": { + "description": "The configuration for DASH content.", + "$ref": "#/definitions/DashConfiguration" + }, + "LivePreRollConfiguration": { + "description": "The configuration for pre-roll ad insertion.", + "$ref": "#/definitions/LivePreRollConfiguration" + }, + "ManifestProcessingRules": { + "description": "The configuration for manifest processing rules. Manifest processing rules enable customization of the personalized manifests created by MediaTailor.", + "$ref": "#/definitions/ManifestProcessingRules" + }, + "Name": { + "description": "The identifier for the playback configuration.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "maxLength": 64, + "minLength": 1 + }, + "PersonalizationThresholdSeconds": { + "description": "Defines the maximum duration of underfilled ad time (in seconds) allowed in an ad break. If the duration of underfilled ad time exceeds the personalization threshold, then the personalization of the ad break is abandoned and the underlying content is shown. This feature applies to ad replacement in live and VOD streams, rather than ad insertion, because it relies on an underlying content stream. For more information about ad break behavior, including ad replacement and insertion, see Ad Behavior in AWS Elemental MediaTailor (https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html).", + "type": "integer" + }, + "SessionInitializationEndpointPrefix": { + "description": "The URL that the player uses to initialize a session that uses client-side reporting.", + "type": "string" + }, + "HlsConfiguration": { + "description": "The configuration for HLS content.", + "$ref": "#/definitions/HlsConfiguration" + }, + "PlaybackConfigurationArn": { + "description": "The Amazon Resource Name (ARN) for the playback configuration.", + "type": "string" + }, + "PlaybackEndpointPrefix": { + "description": "The URL that the player accesses to get a manifest from MediaTailor. This session will use server-side reporting.", + "type": "string" + }, + "SlateAdUrl": { + "description": "The URL for a high-quality video asset to transcode and use to fill in time that's not used by ads. AWS Elemental MediaTailor shows the slate to fill in gaps in media content. Configuring the slate is optional for non-VPAID configurations. For VPAID, the slate is required because MediaTailor provides it in the slots that are designated for dynamic ad content. The slate must be a high-quality asset that contains both audio and video.", + "type": "string" + }, + "Tags": { + "description": "The tags to assign to the playback configuration.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TranscodeProfileName": { + "description": "The name that is used to associate this playback configuration with a custom transcode profile. This overrides the dynamic transcoding defaults of MediaTailor. Use this only if you have already set up custom profiles with the help of AWS Support.", + "type": "string" + }, + "VideoContentSourceUrl": { + "description": "The URL prefix for the parent manifest for the stream, minus the asset ID. The maximum length is 512 characters.", + "type": "string" + } + }, + "definitions": { + "AvailSuppression": { + "description": "The configuration for avail suppression, also known as ad suppression. For more information about ad suppression, see Ad Suppression (https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html).", + "type": "object", + "additionalProperties": false, + "properties": { + "Mode": { + "description": "Sets the ad suppression mode. By default, ad suppression is set to OFF and all ad breaks are filled with ads or slate. When Mode is set to BEHIND_LIVE_EDGE, ad suppression is active and MediaTailor won't fill ad breaks on or behind the ad suppression Value time in the manifest lookback window.", + "type": "string", + "enum": [ + "OFF", + "BEHIND_LIVE_EDGE" + ] + }, + "Value": { + "description": "A live edge offset time in HH:MM:SS. MediaTailor won't fill ad breaks on or behind this time in the manifest lookback window. If Value is set to 00:00:00, it is in sync with the live edge, and MediaTailor won't fill any ad breaks on or behind the live edge. If you set a Value time, MediaTailor won't fill any ad breaks on or behind this time in the manifest lookback window. For example, if you set 00:45:00, then MediaTailor will fill ad breaks that occur within 45 minutes behind the live edge, but won't fill ad breaks on or behind 45 minutes behind the live edge.", + "type": "string" + } + } + }, + "Bumper": { + "description": "The configuration for bumpers. Bumpers are short audio or video clips that play at the start or before the end of an ad break. To learn more about bumpers, see Bumpers (https://docs.aws.amazon.com/mediatailor/latest/ug/bumpers.html).", + "type": "object", + "additionalProperties": false, + "properties": { + "StartUrl": { + "description": "The URL for the start bumper asset.", + "type": "string" + }, + "EndUrl": { + "description": "The URL for the end bumper asset.", + "type": "string" + } + } + }, + "CdnConfiguration": { + "description": "The configuration for using a content delivery network (CDN), like Amazon CloudFront, for content and ad segment management.", + "type": "object", + "additionalProperties": false, + "properties": { + "AdSegmentUrlPrefix": { + "description": "A non-default content delivery network (CDN) to serve ad segments. By default, AWS Elemental MediaTailor uses Amazon CloudFront with default cache settings as its CDN for ad segments. To set up an alternate CDN, create a rule in your CDN for the origin ads.mediatailor.<region>.amazonaws.com. Then specify the rule's name in this AdSegmentUrlPrefix. When AWS Elemental MediaTailor serves a manifest, it reports your CDN as the source for ad segments.", + "type": "string" + }, + "ContentSegmentUrlPrefix": { + "description": "A content delivery network (CDN) to cache content segments, so that content requests don't always have to go to the origin server. First, create a rule in your CDN for the content segment origin server. Then specify the rule's name in this ContentSegmentUrlPrefix. When AWS Elemental MediaTailor serves a manifest, it reports your CDN as the source for content segments.", + "type": "string" + } + } + }, + "ConfigurationAliases": { + "description": "The predefined aliases for dynamic variables.", + "additionalProperties": false, + "patternProperties": { + "player_params\\.\\w+\\Z": { + "type": "object" + } + } + }, + "DashConfiguration": { + "description": "The configuration for DASH PUT operations.", + "type": "object", + "additionalProperties": false, + "properties": { + "MpdLocation": { + "description": "The setting that controls whether MediaTailor includes the Location tag in DASH manifests. MediaTailor populates the Location tag with the URL for manifest update requests, to be used by players that don't support sticky redirects. Disable this if you have CDN routing rules set up for accessing MediaTailor manifests, and you are either using client-side reporting or your players support sticky HTTP redirects. Valid values are DISABLED and EMT_DEFAULT. The EMT_DEFAULT setting enables the inclusion of the tag and is the default value.", + "type": "string" + }, + "OriginManifestType": { + "description": "The setting that controls whether MediaTailor handles manifests from the origin server as multi-period manifests or single-period manifests. If your origin server produces single-period manifests, set this to SINGLE_PERIOD. The default setting is MULTI_PERIOD. For multi-period manifests, omit this setting or set it to MULTI_PERIOD.", + "type": "string", + "enum": [ + "SINGLE_PERIOD", + "MULTI_PERIOD" + ] + }, + "ManifestEndpointPrefix": { + "description": "The URL generated by MediaTailor to initiate a DASH playback session. The session uses server-side reporting.", + "type": "string" + } + } + }, + "LivePreRollConfiguration": { + "description": "The configuration for pre-roll ad insertion.", + "type": "object", + "additionalProperties": false, + "properties": { + "AdDecisionServerUrl": { + "description": "The URL for the ad decision server (ADS) for pre-roll ads. This includes the specification of static parameters and placeholders for dynamic parameters. AWS Elemental MediaTailor substitutes player-specific and session-specific parameters as needed when calling the ADS. Alternately, for testing, you can provide a static VAST URL. The maximum length is 25,000 characters.", + "type": "string" + }, + "MaxDurationSeconds": { + "description": "The maximum allowed duration for the pre-roll ad avail. AWS Elemental MediaTailor won't play pre-roll ads to exceed this duration, regardless of the total duration of ads that the ADS returns.", + "type": "integer" + } + } + }, + "ManifestProcessingRules": { + "description": "The configuration for manifest processing rules. Manifest processing rules enable customization of the personalized manifests created by MediaTailor.", + "type": "object", + "additionalProperties": false, + "properties": { + "AdMarkerPassthrough": { + "description": "For HLS, when set to true, MediaTailor passes through EXT-X-CUE-IN, EXT-X-CUE-OUT, and EXT-X-SPLICEPOINT-SCTE35 ad markers from the origin manifest to the MediaTailor personalized manifest. No logic is applied to these ad markers. For example, if EXT-X-CUE-OUT has a value of 60, but no ads are filled for that ad break, MediaTailor will not set the value to 0.", + "$ref": "#/definitions/AdMarkerPassthrough" + } + } + }, + "AdMarkerPassthrough": { + "description": "For HLS, when set to true, MediaTailor passes through EXT-X-CUE-IN, EXT-X-CUE-OUT, and EXT-X-SPLICEPOINT-SCTE35 ad markers from the origin manifest to the MediaTailor personalized manifest. No logic is applied to these ad markers. For example, if EXT-X-CUE-OUT has a value of 60, but no ads are filled for that ad break, MediaTailor will not set the value to 0.", + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "description": "Enables ad marker passthrough for your configuration.", + "type": "boolean" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "HlsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ManifestEndpointPrefix": { + "description": "The URL that is used to initiate a playback session for devices that support Apple HLS. The session uses server-side reporting.", + "type": "string" + } + } + } + }, + "tagging": { + "taggable": true, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "Name", + "VideoContentSourceUrl", + "AdDecisionServerUrl" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/SessionInitializationEndpointPrefix", + "/properties/HlsConfiguration/ManifestEndpointPrefix", + "/properties/DashConfiguration/ManifestEndpointPrefix", + "/properties/PlaybackConfigurationArn", + "/properties/PlaybackEndpointPrefix" + ], + "handlers": { + "create": { + "permissions": [ + "mediatailor:PutPlaybackConfiguration", + "mediatailor:ConfigureLogsForPlaybackConfiguration", + "iam:CreateServiceLinkedRole", + "mediatailor:UntagResource", + "mediatailor:TagResource" + ] + }, + "read": { + "permissions": [ + "mediatailor:GetPlaybackConfiguration" + ] + }, + "update": { + "permissions": [ + "mediatailor:PutPlaybackConfiguration", + "mediatailor:ConfigureLogsForPlaybackConfiguration", + "iam:CreateServiceLinkedRole", + "mediatailor:UntagResource", + "mediatailor:TagResource" + ] + }, + "delete": { + "permissions": [ + "mediatailor:DeletePlaybackConfiguration" + ] + }, + "list": { + "permissions": [ + "mediatailor:ListPlaybackConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mediatailor/sourcelocation.json b/internal/aws/cfn/schemas/aws/mediatailor/sourcelocation.json new file mode 100644 index 00000000..2f9d3ca0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediatailor/sourcelocation.json @@ -0,0 +1,197 @@ +{ + "typeName": "AWS::MediaTailor::SourceLocation", + "description": "Definition of AWS::MediaTailor::SourceLocation Resource Type", + "definitions": { + "AccessConfiguration": { + "type": "object", + "description": "

Access configuration parameters.

", + "properties": { + "AccessType": { + "$ref": "#/definitions/AccessType" + }, + "SecretsManagerAccessTokenConfiguration": { + "$ref": "#/definitions/SecretsManagerAccessTokenConfiguration" + } + }, + "additionalProperties": false + }, + "AccessType": { + "type": "string", + "enum": [ + "S3_SIGV4", + "SECRETS_MANAGER_ACCESS_TOKEN", + "AUTODETECT_SIGV4" + ] + }, + "DefaultSegmentDeliveryConfiguration": { + "type": "object", + "description": "

The optional configuration for a server that serves segments. Use this if you want the segment delivery server to be different from the source location server. For example, you can configure your source location server to be an origination server, such as MediaPackage, and the segment delivery server to be a content delivery network (CDN), such as CloudFront. If you don't specify a segment delivery server, then the source location server is used.

", + "properties": { + "BaseUrl": { + "type": "string", + "description": "

The hostname of the server that will be used to serve segments. This string must include the protocol, such as https://.

" + } + }, + "additionalProperties": false + }, + "HttpConfiguration": { + "type": "object", + "description": "

The HTTP configuration for the source location.

", + "properties": { + "BaseUrl": { + "type": "string", + "description": "

The base URL for the source location host server. This string must include the protocol, such as https://.

" + } + }, + "required": [ + "BaseUrl" + ], + "additionalProperties": false + }, + "SecretsManagerAccessTokenConfiguration": { + "type": "object", + "description": "

AWS Secrets Manager access token configuration parameters. For information about Secrets Manager access token authentication, see Working with AWS Secrets Manager access token authentication.

", + "properties": { + "HeaderName": { + "type": "string", + "description": "

The name of the HTTP header used to supply the access token in requests to the source location.

" + }, + "SecretArn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that contains the access token.

" + }, + "SecretStringKey": { + "type": "string", + "description": "

The AWS Secrets Manager SecretString key associated with the access token. MediaTailor uses the key to look up SecretString key and value pair containing the access token.

" + } + }, + "additionalProperties": false + }, + "SegmentDeliveryConfiguration": { + "type": "object", + "description": "

The segment delivery configuration settings.

", + "properties": { + "BaseUrl": { + "type": "string", + "description": "

The base URL of the host or path of the segment delivery server that you're using to serve segments. This is typically a content delivery network (CDN). The URL can be absolute or relative. To use an absolute URL include the protocol, such as https://example.com/some/path. To use a relative URL specify the relative path, such as /some/path*.

" + }, + "Name": { + "type": "string", + "description": "

A unique identifier used to distinguish between multiple segment delivery configurations in a source location.

" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "AccessConfiguration": { + "$ref": "#/definitions/AccessConfiguration" + }, + "Arn": { + "type": "string", + "description": "

The ARN of the source location.

" + }, + "DefaultSegmentDeliveryConfiguration": { + "$ref": "#/definitions/DefaultSegmentDeliveryConfiguration" + }, + "HttpConfiguration": { + "$ref": "#/definitions/HttpConfiguration" + }, + "SegmentDeliveryConfigurations": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SegmentDeliveryConfiguration" + }, + "description": "

A list of the segment delivery configurations associated with this resource.

" + }, + "SourceLocationName": { + "type": "string" + }, + "Tags": { + "description": "The tags to assign to the source location.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "HttpConfiguration", + "SourceLocationName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/SourceLocationName" + ], + "primaryIdentifier": [ + "/properties/SourceLocationName" + ], + "handlers": { + "create": { + "permissions": [ + "mediatailor:CreateSourceLocation", + "mediatailor:DescribeSourceLocation", + "mediatailor:TagResource", + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "mediatailor:DescribeSourceLocation" + ] + }, + "update": { + "permissions": [ + "mediatailor:DescribeSourceLocation", + "mediatailor:TagResource", + "mediatailor:UntagResource", + "mediatailor:UpdateSourceLocation", + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "kms:CreateGrant" + ] + }, + "delete": { + "permissions": [ + "mediatailor:DeleteSourceLocation", + "mediatailor:DescribeSourceLocation" + ] + }, + "list": { + "permissions": [ + "mediatailor:ListSourceLocations" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/mediatailor/vodsource.json b/internal/aws/cfn/schemas/aws/mediatailor/vodsource.json new file mode 100644 index 00000000..f1551b12 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mediatailor/vodsource.json @@ -0,0 +1,148 @@ +{ + "typeName": "AWS::MediaTailor::VodSource", + "description": "Definition of AWS::MediaTailor::VodSource Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediatailor", + "definitions": { + "HttpPackageConfiguration": { + "type": "object", + "description": "

The HTTP package configuration properties for the requested VOD source.

", + "properties": { + "Path": { + "type": "string", + "description": "

The relative path to the URL for this VOD source. This is combined with SourceLocation::HttpConfiguration::BaseUrl to form a valid URL.

" + }, + "SourceGroup": { + "type": "string", + "description": "

The name of the source group. This has to match one of the Channel::Outputs::SourceGroup.

" + }, + "Type": { + "$ref": "#/definitions/Type" + } + }, + "required": [ + "Path", + "SourceGroup", + "Type" + ], + "additionalProperties": false + }, + "Type": { + "type": "string", + "enum": [ + "DASH", + "HLS" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "description": "

The ARN of the VOD source.

" + }, + "HttpPackageConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/HttpPackageConfiguration" + }, + "description": "

A list of HTTP package configuration parameters for this VOD source.

" + }, + "SourceLocationName": { + "type": "string" + }, + "Tags": { + "description": "The tags to assign to the VOD source.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VodSourceName": { + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "HttpPackageConfigurations", + "SourceLocationName", + "VodSourceName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/SourceLocationName", + "/properties/VodSourceName" + ], + "primaryIdentifier": [ + "/properties/SourceLocationName", + "/properties/VodSourceName" + ], + "handlers": { + "create": { + "permissions": [ + "mediatailor:CreateVodSource", + "mediatailor:DescribeVodSource", + "mediatailor:TagResource" + ] + }, + "read": { + "permissions": [ + "mediatailor:DescribeVodSource" + ] + }, + "update": { + "permissions": [ + "mediatailor:DescribeVodSource", + "mediatailor:TagResource", + "mediatailor:UntagResource", + "mediatailor:UpdateVodSource" + ] + }, + "delete": { + "permissions": [ + "mediatailor:DeleteVodSource", + "mediatailor:DescribeVodSource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "SourceLocationName": { + "$ref": "resource-schema.json#/properties/SourceLocationName" + } + }, + "required": [ + "SourceLocationName" + ] + }, + "permissions": [ + "mediatailor:ListVodSources" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/memorydb/acl.json b/internal/aws/cfn/schemas/aws/memorydb/acl.json new file mode 100644 index 00000000..fb27d10b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/memorydb/acl.json @@ -0,0 +1,119 @@ +{ + "typeName": "AWS::MemoryDB::ACL", + "description": "Resource Type definition for AWS::MemoryDB::ACL", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-memorydb", + "taggable": true, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with 'aws:'. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "properties": { + "Status": { + "description": "Indicates acl status. Can be \"creating\", \"active\", \"modifying\", \"deleting\".", + "type": "string" + }, + "ACLName": { + "description": "The name of the acl.", + "pattern": "[a-z][a-z0-9\\\\-]*", + "type": "string" + }, + "UserNames": { + "type": "array", + "$comment": "List of users.", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + }, + "description": "List of users associated to this acl." + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the acl.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this cluster.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "ACLName" + ], + "readOnlyProperties": [ + "/properties/Status", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ACLName" + ], + "primaryIdentifier": [ + "/properties/ACLName" + ], + "handlers": { + "create": { + "permissions": [ + "memorydb:CreateACL", + "memorydb:DescribeACLs", + "memorydb:TagResource", + "memorydb:ListTags" + ] + }, + "read": { + "permissions": [ + "memorydb:DescribeACLs", + "memorydb:ListTags" + ] + }, + "update": { + "permissions": [ + "memorydb:UpdateACL", + "memorydb:DescribeACLs", + "memorydb:ListTags", + "memorydb:TagResource", + "memorydb:UntagResource" + ] + }, + "delete": { + "permissions": [ + "memorydb:ModifyReplicationGroup", + "memorydb:DeleteACL", + "memorydb:DescribeACLs" + ] + }, + "list": { + "permissions": [ + "memorydb:DescribeACLs", + "memorydb:ListTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/memorydb/cluster.json b/internal/aws/cfn/schemas/aws/memorydb/cluster.json new file mode 100644 index 00000000..707fe8a0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/memorydb/cluster.json @@ -0,0 +1,253 @@ +{ + "typeName": "AWS::MemoryDB::Cluster", + "description": "The AWS::MemoryDB::Cluster resource creates an Amazon MemoryDB Cluster.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-memorydb", + "taggable": true, + "definitions": { + "Endpoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "Address": { + "description": "The DNS address of the primary read-write node.", + "type": "string" + }, + "Port": { + "description": "The port number that the engine is listening on. ", + "type": "integer" + } + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key for the tag. May not be null.", + "pattern": "^(?!aws:)(?!memorydb:)[a-zA-Z0-9 _\\.\\/=+:\\-@]{1,128}$", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The tag's value. May be null.", + "type": "string", + "pattern": "^(?!aws:)(?!memorydb:)[a-zA-Z0-9 _\\.\\/=+:\\-@]{1,256}$", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "DataTieringStatus": { + "type": "string", + "enum": [ + "true", + "false" + ] + } + }, + "properties": { + "ClusterName": { + "description": "The name of the cluster. This value must be unique as it also serves as the cluster identifier.", + "pattern": "[a-z][a-z0-9\\-]*", + "type": "string" + }, + "Description": { + "description": "An optional description of the cluster.", + "type": "string" + }, + "Status": { + "description": "The status of the cluster. For example, Available, Updating, Creating.", + "type": "string" + }, + "NodeType": { + "description": "The compute and memory capacity of the nodes in the cluster.", + "type": "string" + }, + "NumShards": { + "description": "The number of shards the cluster will contain.", + "type": "integer" + }, + "NumReplicasPerShard": { + "description": "The number of replicas to apply to each shard. The limit is 5.", + "type": "integer" + }, + "SubnetGroupName": { + "description": "The name of the subnet group to be used for the cluster.", + "type": "string" + }, + "SecurityGroupIds": { + "description": "One or more Amazon VPC security groups associated with this cluster.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "MaintenanceWindow": { + "description": "Specifies the weekly time range during which maintenance on the cluster is performed. It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period.", + "type": "string" + }, + "ParameterGroupName": { + "description": "The name of the parameter group associated with the cluster.", + "type": "string" + }, + "ParameterGroupStatus": { + "description": "The status of the parameter group used by the cluster.", + "type": "string" + }, + "Port": { + "description": "The port number on which each member of the cluster accepts connections.", + "type": "integer" + }, + "SnapshotRetentionLimit": { + "description": "The number of days for which MemoryDB retains automatic snapshots before deleting them. For example, if you set SnapshotRetentionLimit to 5, a snapshot that was taken today is retained for 5 days before being deleted.", + "type": "integer" + }, + "SnapshotWindow": { + "description": "The daily time range (in UTC) during which MemoryDB begins taking a daily snapshot of your cluster.", + "type": "string" + }, + "ACLName": { + "description": "The name of the Access Control List to associate with the cluster.", + "type": "string", + "pattern": "[a-zA-Z][a-zA-Z0-9\\-]*" + }, + "SnsTopicArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic to which notifications are sent.", + "type": "string" + }, + "SnsTopicStatus": { + "description": "The status of the Amazon SNS notification topic. Notifications are sent only if the status is enabled.", + "type": "string" + }, + "TLSEnabled": { + "description": "A flag that enables in-transit encryption when set to true.\n\nYou cannot modify the value of TransitEncryptionEnabled after the cluster is created. To enable in-transit encryption on a cluster you must set TransitEncryptionEnabled to true when you create a cluster.", + "type": "boolean" + }, + "DataTiering": { + "type": "object", + "description": "Enables data tiering. Data tiering is only supported for clusters using the r6gd node type. This parameter must be set when using r6gd nodes.", + "$ref": "#/definitions/DataTieringStatus" + }, + "KmsKeyId": { + "description": "The ID of the KMS key used to encrypt the cluster.", + "type": "string" + }, + "SnapshotArns": { + "description": "A list of Amazon Resource Names (ARN) that uniquely identify the RDB snapshot files stored in Amazon S3. The snapshot files are used to populate the new cluster. The Amazon S3 object name in the ARN cannot contain any commas.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SnapshotName": { + "description": "The name of a snapshot from which to restore data into the new cluster. The snapshot status changes to restoring while the new cluster is being created.", + "type": "string" + }, + "FinalSnapshotName": { + "description": "The user-supplied name of a final cluster snapshot. This is the unique name that identifies the snapshot. MemoryDB creates the snapshot, and then deletes the cluster immediately afterward.", + "type": "string" + }, + "ARN": { + "description": "The Amazon Resource Name (ARN) of the cluster.", + "type": "string" + }, + "EngineVersion": { + "description": "The Redis engine version used by the cluster.", + "type": "string" + }, + "ClusterEndpoint": { + "description": "The cluster endpoint.", + "$ref": "#/definitions/Endpoint" + }, + "AutoMinorVersionUpgrade": { + "description": "A flag that enables automatic minor version upgrade when set to true.\n\nYou cannot modify the value of AutoMinorVersionUpgrade after the cluster is created. To enable AutoMinorVersionUpgrade on a cluster you must set AutoMinorVersionUpgrade to true when you create a cluster.", + "type": "boolean" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this cluster.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Status", + "/properties/ClusterEndpoint/Address", + "/properties/ClusterEndpoint/Port", + "/properties/ARN", + "/properties/ParameterGroupStatus" + ], + "required": [ + "ClusterName", + "NodeType", + "ACLName" + ], + "createOnlyProperties": [ + "/properties/ClusterName", + "/properties/TLSEnabled", + "/properties/DataTiering", + "/properties/KmsKeyId", + "/properties/Port", + "/properties/SubnetGroupName", + "/properties/SnapshotArns", + "/properties/SnapshotName" + ], + "writeOnlyProperties": [ + "/properties/SnapshotArns", + "/properties/SnapshotName", + "/properties/FinalSnapshotName" + ], + "primaryIdentifier": [ + "/properties/ClusterName" + ], + "handlers": { + "create": { + "permissions": [ + "memorydb:CreateCluster", + "memorydb:DescribeClusters", + "memorydb:ListTags" + ] + }, + "read": { + "permissions": [ + "memorydb:DescribeClusters", + "memorydb:ListTags" + ] + }, + "update": { + "permissions": [ + "memorydb:UpdateCluster", + "memorydb:DescribeClusters", + "memorydb:ListTags", + "memorydb:TagResource", + "memorydb:UntagResource" + ] + }, + "delete": { + "permissions": [ + "memorydb:DeleteCluster", + "memorydb:DescribeClusters" + ] + }, + "list": { + "permissions": [ + "memorydb:DescribeClusters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/memorydb/parametergroup.json b/internal/aws/cfn/schemas/aws/memorydb/parametergroup.json new file mode 100644 index 00000000..0cbe8820 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/memorydb/parametergroup.json @@ -0,0 +1,121 @@ +{ + "typeName": "AWS::MemoryDB::ParameterGroup", + "description": "The AWS::MemoryDB::ParameterGroup resource creates an Amazon MemoryDB ParameterGroup.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-memorydb", + "taggable": true, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key for the tag. May not be null.", + "pattern": "^(?!aws:)(?!memorydb:)[a-zA-Z0-9 _\\.\\/=+:\\-@]{1,128}$", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The tag's value. May be null.", + "type": "string", + "pattern": "^(?!aws:)(?!memorydb:)[a-zA-Z0-9 _\\.\\/=+:\\-@]{1,256}$", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "ParameterGroupName": { + "description": "The name of the parameter group.", + "type": "string" + }, + "Family": { + "description": "The name of the parameter group family that this parameter group is compatible with.", + "type": "string" + }, + "Description": { + "description": "A description of the parameter group.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this parameter group.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Parameters": { + "description": "An map of parameter names and values for the parameter update. You must supply at least one parameter name and value; subsequent arguments are optional.", + "type": "object" + }, + "ARN": { + "description": "The Amazon Resource Name (ARN) of the parameter group.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "ParameterGroupName", + "Family" + ], + "readOnlyProperties": [ + "/properties/ARN" + ], + "writeOnlyProperties": [ + "/properties/Parameters" + ], + "createOnlyProperties": [ + "/properties/ParameterGroupName", + "/properties/Family", + "/properties/Description" + ], + "primaryIdentifier": [ + "/properties/ParameterGroupName" + ], + "handlers": { + "create": { + "permissions": [ + "memorydb:CreateParameterGroup", + "memorydb:DescribeParameterGroups", + "memorydb:TagResource", + "memorydb:ListTags" + ] + }, + "read": { + "permissions": [ + "memorydb:DescribeParameterGroups", + "memorydb:ListTags" + ] + }, + "update": { + "permissions": [ + "memorydb:UpdateParameterGroup", + "memorydb:DescribeParameterGroups", + "memorydb:DescribeParameters", + "memorydb:DescribeClusters", + "memorydb:ListTags", + "memorydb:TagResource", + "memorydb:UntagResource" + ] + }, + "delete": { + "permissions": [ + "memorydb:DeleteParameterGroup" + ] + }, + "list": { + "permissions": [ + "memorydb:DescribeParameterGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/memorydb/subnetgroup.json b/internal/aws/cfn/schemas/aws/memorydb/subnetgroup.json new file mode 100644 index 00000000..be1acc82 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/memorydb/subnetgroup.json @@ -0,0 +1,117 @@ +{ + "typeName": "AWS::MemoryDB::SubnetGroup", + "description": "The AWS::MemoryDB::SubnetGroup resource creates an Amazon MemoryDB Subnet Group.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-memorydb", + "taggable": true, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key for the tag. May not be null.", + "pattern": "^(?!aws:)(?!memorydb:)[a-zA-Z0-9 _\\.\\/=+:\\-@]{1,128}$", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The tag's value. May be null.", + "type": "string", + "pattern": "^(?!aws:)(?!memorydb:)[a-zA-Z0-9 _\\.\\/=+:\\-@]{1,256}$", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "SubnetGroupName": { + "description": "The name of the subnet group. This value must be unique as it also serves as the subnet group identifier.", + "pattern": "[a-z][a-z0-9\\-]*", + "type": "string" + }, + "Description": { + "description": "An optional description of the subnet group.", + "type": "string" + }, + "SubnetIds": { + "description": "A list of VPC subnet IDs for the subnet group.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Tags": { + "description": "An array of key-value pairs to apply to this subnet group.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ARN": { + "description": "The Amazon Resource Name (ARN) of the subnet group.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "SubnetGroupName", + "SubnetIds" + ], + "primaryIdentifier": [ + "/properties/SubnetGroupName" + ], + "createOnlyProperties": [ + "/properties/SubnetGroupName" + ], + "readOnlyProperties": [ + "/properties/ARN" + ], + "handlers": { + "create": { + "permissions": [ + "memorydb:CreateSubnetGroup", + "memorydb:DescribeSubnetGroups", + "memorydb:TagResource", + "memorydb:ListTags" + ] + }, + "read": { + "permissions": [ + "memorydb:DescribeSubnetGroups", + "memorydb:ListTags" + ] + }, + "update": { + "permissions": [ + "memorydb:UpdateSubnetGroup", + "memorydb:DescribeSubnetGroups", + "memorydb:ListTags", + "memorydb:TagResource", + "memorydb:UntagResource" + ] + }, + "delete": { + "permissions": [ + "memorydb:DeleteSubnetGroup", + "memorydb:DescribeSubnetGroups" + ] + }, + "list": { + "permissions": [ + "memorydb:DescribeSubnetGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/memorydb/user.json b/internal/aws/cfn/schemas/aws/memorydb/user.json new file mode 100644 index 00000000..313dfc49 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/memorydb/user.json @@ -0,0 +1,142 @@ +{ + "typeName": "AWS::MemoryDB::User", + "description": "Resource Type definition for AWS::MemoryDB::User", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-memorydb", + "taggable": true, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with 'aws:'. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "pattern": "^[a-zA-Z0-9 _\\.\\/=+:\\-@]*$", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "properties": { + "Status": { + "description": "Indicates the user status. Can be \"active\", \"modifying\" or \"deleting\".", + "type": "string" + }, + "UserName": { + "description": "The name of the user.", + "pattern": "[a-z][a-z0-9\\\\-]*", + "type": "string" + }, + "AccessString": { + "description": "Access permissions string used for this user account.", + "type": "string" + }, + "AuthenticationMode": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "Type of authentication strategy for this user.", + "enum": [ + "password", + "iam" + ] + }, + "Passwords": { + "type": "array", + "$comment": "List of passwords.", + "uniqueItems": true, + "insertionOrder": true, + "maxItems": 2, + "minItems": 1, + "items": { + "type": "string" + }, + "description": "Passwords used for this user account. You can create up to two passwords for each user." + } + }, + "additionalProperties": false + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the user account.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this user.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "UserName" + ], + "readOnlyProperties": [ + "/properties/Status", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/UserName" + ], + "writeOnlyProperties": [ + "/properties/AuthenticationMode", + "/properties/AccessString" + ], + "primaryIdentifier": [ + "/properties/UserName" + ], + "handlers": { + "create": { + "permissions": [ + "memorydb:CreateUser", + "memorydb:DescribeUsers", + "memorydb:TagResource", + "memorydb:ListTags" + ] + }, + "read": { + "permissions": [ + "memorydb:DescribeUsers", + "memorydb:ListTags" + ] + }, + "update": { + "permissions": [ + "memorydb:UpdateUser", + "memorydb:DescribeUsers", + "memorydb:ListTags", + "memorydb:TagResource", + "memorydb:UntagResource" + ] + }, + "delete": { + "permissions": [ + "memorydb:DeleteUser", + "memorydb:DescribeUsers" + ] + }, + "list": { + "permissions": [ + "memorydb:DescribeUsers", + "memorydb:ListTags" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/msk/batchscramsecret.json b/internal/aws/cfn/schemas/aws/msk/batchscramsecret.json new file mode 100644 index 00000000..f2e3a717 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/msk/batchscramsecret.json @@ -0,0 +1,93 @@ +{ + "typeName": "AWS::MSK::BatchScramSecret", + "description": "Resource Type definition for AWS::MSK::BatchScramSecret", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-msk", + "definitions": { + "SecretArnList": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "properties": { + "ClusterArn": { + "type": "string" + }, + "SecretArnList": { + "$ref": "#/definitions/SecretArnList" + } + }, + "additionalProperties": false, + "required": [ + "ClusterArn" + ], + "createOnlyProperties": [ + "/properties/ClusterArn" + ], + "primaryIdentifier": [ + "/properties/ClusterArn" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "kafka:BatchAssociateScramSecret", + "kafka:ListScramSecrets", + "kms:CreateGrant", + "kms:DescribeKey", + "secretsmanager:GetSecretValue" + ] + }, + "delete": { + "permissions": [ + "kafka:BatchDisassociateScramSecret", + "kafka:ListScramSecrets", + "kms:CreateGrant", + "kms:DescribeKey" + ] + }, + "list": { + "permissions": [ + "kafka:ListScramSecrets", + "kms:CreateGrant", + "kms:DescribeKey", + "secretsmanager:GetSecretValue" + ], + "handlerSchema": { + "properties": { + "ClusterArn": { + "$ref": "resource-schema.json#/properties/ClusterArn" + } + }, + "required": [ + "ClusterArn" + ] + } + }, + "read": { + "permissions": [ + "kafka:ListScramSecrets", + "kms:CreateGrant", + "kms:DescribeKey", + "secretsmanager:GetSecretValue" + ] + }, + "update": { + "permissions": [ + "kafka:BatchAssociateScramSecret", + "kafka:BatchDisassociateScramSecret", + "kafka:ListScramSecrets", + "kms:CreateGrant", + "kms:DescribeKey", + "secretsmanager:GetSecretValue" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/msk/cluster.json b/internal/aws/cfn/schemas/aws/msk/cluster.json new file mode 100644 index 00000000..f5e3c25f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/msk/cluster.json @@ -0,0 +1,617 @@ +{ + "typeName": "AWS::MSK::Cluster", + "description": "Resource Type definition for AWS::MSK::Cluster", + "additionalProperties": false, + "properties": { + "BrokerNodeGroupInfo": { + "$ref": "#/definitions/BrokerNodeGroupInfo" + }, + "EnhancedMonitoring": { + "type": "string", + "minLength": 7, + "maxLength": 23, + "enum": [ + "DEFAULT", + "PER_BROKER", + "PER_TOPIC_PER_BROKER", + "PER_TOPIC_PER_PARTITION" + ] + }, + "KafkaVersion": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "NumberOfBrokerNodes": { + "type": "integer" + }, + "EncryptionInfo": { + "$ref": "#/definitions/EncryptionInfo" + }, + "OpenMonitoring": { + "$ref": "#/definitions/OpenMonitoring" + }, + "ClusterName": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Arn": { + "type": "string" + }, + "CurrentVersion": { + "description": "The current version of the MSK cluster", + "type": "string" + }, + "ClientAuthentication": { + "$ref": "#/definitions/ClientAuthentication" + }, + "LoggingInfo": { + "$ref": "#/definitions/LoggingInfo" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ConfigurationInfo": { + "$ref": "#/definitions/ConfigurationInfo" + }, + "StorageMode": { + "type": "string", + "minLength": 5, + "maxLength": 6, + "enum": [ + "LOCAL", + "TIERED" + ] + } + }, + "definitions": { + "S3": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "Prefix": { + "type": "string" + }, + "Bucket": { + "type": "string" + } + }, + "required": [ + "Enabled" + ] + }, + "BrokerLogs": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3": { + "$ref": "#/definitions/S3" + }, + "CloudWatchLogs": { + "$ref": "#/definitions/CloudWatchLogs" + }, + "Firehose": { + "$ref": "#/definitions/Firehose" + } + } + }, + "NodeExporter": { + "type": "object", + "additionalProperties": false, + "properties": { + "EnabledInBroker": { + "type": "boolean" + } + }, + "required": [ + "EnabledInBroker" + ] + }, + "EncryptionInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "EncryptionAtRest": { + "$ref": "#/definitions/EncryptionAtRest" + }, + "EncryptionInTransit": { + "$ref": "#/definitions/EncryptionInTransit" + } + } + }, + "Firehose": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "DeliveryStream": { + "type": "string" + } + }, + "required": [ + "Enabled" + ] + }, + "OpenMonitoring": { + "type": "object", + "additionalProperties": false, + "properties": { + "Prometheus": { + "$ref": "#/definitions/Prometheus" + } + }, + "required": [ + "Prometheus" + ] + }, + "Prometheus": { + "type": "object", + "additionalProperties": false, + "properties": { + "JmxExporter": { + "$ref": "#/definitions/JmxExporter" + }, + "NodeExporter": { + "$ref": "#/definitions/NodeExporter" + } + } + }, + "CloudWatchLogs": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroup": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "EBSStorageInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "VolumeSize": { + "type": "integer", + "minimum": 1, + "maximum": 16384 + }, + "ProvisionedThroughput": { + "$ref": "#/definitions/ProvisionedThroughput" + } + } + }, + "ProvisionedThroughput": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "VolumeThroughput": { + "type": "integer" + } + } + }, + "PublicAccess": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string", + "minLength": 7, + "maxLength": 23 + } + } + }, + "VpcConnectivity": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientAuthentication": { + "$ref": "#/definitions/VpcConnectivityClientAuthentication" + } + } + }, + "ConfigurationInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "Revision": { + "type": "integer" + }, + "Arn": { + "type": "string" + } + }, + "required": [ + "Revision", + "Arn" + ] + }, + "BrokerNodeGroupInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "StorageInfo": { + "$ref": "#/definitions/StorageInfo" + }, + "ConnectivityInfo": { + "$ref": "#/definitions/ConnectivityInfo" + }, + "SecurityGroups": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "BrokerAZDistribution": { + "type": "string", + "minLength": 6, + "maxLength": 9 + }, + "ClientSubnets": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "InstanceType": { + "type": "string", + "minLength": 5, + "maxLength": 32 + } + }, + "required": [ + "ClientSubnets", + "InstanceType" + ] + }, + "EncryptionAtRest": { + "type": "object", + "additionalProperties": false, + "properties": { + "DataVolumeKMSKeyId": { + "type": "string" + } + }, + "required": [ + "DataVolumeKMSKeyId" + ] + }, + "JmxExporter": { + "type": "object", + "additionalProperties": false, + "properties": { + "EnabledInBroker": { + "type": "boolean" + } + }, + "required": [ + "EnabledInBroker" + ] + }, + "StorageInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "EBSStorageInfo": { + "$ref": "#/definitions/EBSStorageInfo" + } + } + }, + "ConnectivityInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "PublicAccess": { + "$ref": "#/definitions/PublicAccess" + }, + "VpcConnectivity": { + "$ref": "#/definitions/VpcConnectivity" + } + } + }, + "VpcConnectivityTls": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "VpcConnectivitySasl": { + "type": "object", + "additionalProperties": false, + "properties": { + "Scram": { + "$ref": "#/definitions/VpcConnectivityScram" + }, + "Iam": { + "$ref": "#/definitions/VpcConnectivityIam" + } + } + }, + "VpcConnectivityScram": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "VpcConnectivityIam": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "Tls": { + "type": "object", + "additionalProperties": false, + "properties": { + "CertificateAuthorityArnList": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Enabled": { + "type": "boolean" + } + } + }, + "Sasl": { + "type": "object", + "additionalProperties": false, + "properties": { + "Scram": { + "$ref": "#/definitions/Scram" + }, + "Iam": { + "$ref": "#/definitions/Iam" + } + } + }, + "Scram": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "Iam": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "Unauthenticated": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + }, + "ClientAuthentication": { + "type": "object", + "additionalProperties": false, + "properties": { + "Tls": { + "$ref": "#/definitions/Tls" + }, + "Sasl": { + "$ref": "#/definitions/Sasl" + }, + "Unauthenticated": { + "$ref": "#/definitions/Unauthenticated" + } + } + }, + "VpcConnectivityClientAuthentication": { + "type": "object", + "additionalProperties": false, + "properties": { + "Tls": { + "$ref": "#/definitions/VpcConnectivityTls" + }, + "Sasl": { + "$ref": "#/definitions/VpcConnectivitySasl" + } + } + }, + "LoggingInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "BrokerLogs": { + "$ref": "#/definitions/BrokerLogs" + } + }, + "required": [ + "BrokerLogs" + ] + }, + "EncryptionInTransit": { + "type": "object", + "additionalProperties": false, + "properties": { + "InCluster": { + "type": "boolean" + }, + "ClientBroker": { + "type": "string", + "enum": [ + "TLS", + "TLS_PLAINTEXT", + "PLAINTEXT" + ] + } + } + } + }, + "required": [ + "BrokerNodeGroupInfo", + "KafkaVersion", + "NumberOfBrokerNodes", + "ClusterName" + ], + "createOnlyProperties": [ + "/properties/BrokerNodeGroupInfo/BrokerAZDistribution", + "/properties/BrokerNodeGroupInfo/ClientSubnets", + "/properties/BrokerNodeGroupInfo/SecurityGroups", + "/properties/EncryptionInfo/EncryptionAtRest", + "/properties/EncryptionInfo/EncryptionInTransit/InCluster", + "/properties/ClusterName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "iam:AttachRolePolicy", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy", + "kms:CreateGrant", + "kms:DescribeKey", + "kafka:CreateCluster", + "kafka:DescribeCluster", + "kafka:TagResource", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "firehose:TagDeliveryStream", + "acm-pca:GetCertificateAuthorityCertificate" + ], + "timeoutInMinutes": 120 + }, + "update": { + "permissions": [ + "kafka:UpdateMonitoring", + "kafka:UpdateClusterKafkaVersion", + "kafka:UpdateClusterConfiguration", + "kafka:UpdateBrokerType", + "kafka:UpdateBrokerCount", + "kafka:UpdateBrokerStorage", + "kafka:UpdateStorage", + "kafka:UpdateSecurity", + "kafka:UpdateConnectivity", + "kafka:DescribeCluster", + "kafka:DescribeClusterOperation", + "kafka:TagResource", + "kafka:UntagResource", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "ec2:DescribeSecurityGroups", + "iam:AttachRolePolicy", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy", + "kms:DescribeKey", + "kms:CreateGrant", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "s3:GetBucketPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "firehose:TagDeliveryStream", + "acm-pca:GetCertificateAuthorityCertificate" + ], + "timeoutInMinutes": 720 + }, + "delete": { + "permissions": [ + "kafka:DeleteCluster", + "kafka:DescribeCluster" + ], + "timeoutInMinutes": 30 + }, + "list": { + "permissions": [ + "kafka:ListClusters" + ] + }, + "read": { + "permissions": [ + "kafka:DescribeCluster" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/msk/clusterpolicy.json b/internal/aws/cfn/schemas/aws/msk/clusterpolicy.json new file mode 100644 index 00000000..518276ec --- /dev/null +++ b/internal/aws/cfn/schemas/aws/msk/clusterpolicy.json @@ -0,0 +1,79 @@ +{ + "typeName": "AWS::MSK::ClusterPolicy", + "description": "Resource Type definition for AWS::MSK::ClusterPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-msk", + "definitions": {}, + "properties": { + "Policy": { + "description": "A policy document containing permissions to add to the specified cluster.", + "type": "object" + }, + "ClusterArn": { + "description": "The arn of the cluster for the resource policy.", + "type": "string", + "pattern": "^arn:[\\w-]+:kafka:[\\w-]+:\\d+:cluster.*\\Z" + }, + "CurrentVersion": { + "description": "The current version of the policy attached to the specified cluster", + "type": "string", + "pattern": "^(K)([a-zA-Z0-9]+)\\Z" + } + }, + "additionalProperties": false, + "required": [ + "Policy", + "ClusterArn" + ], + "createOnlyProperties": [ + "/properties/ClusterArn" + ], + "readOnlyProperties": [ + "/properties/CurrentVersion" + ], + "primaryIdentifier": [ + "/properties/ClusterArn" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "kafka:PutClusterPolicy", + "kafka:GetClusterPolicy" + ] + }, + "read": { + "permissions": [ + "kafka:GetClusterPolicy" + ] + }, + "list": { + "permissions": [ + "kafka:GetClusterPolicy" + ], + "handlerSchema": { + "properties": { + "ClusterArn": { + "$ref": "resource-schema.json#/properties/ClusterArn" + } + }, + "required": [ + "ClusterArn" + ] + } + }, + "update": { + "permissions": [ + "kafka:PutClusterPolicy", + "kafka:GetClusterPolicy" + ] + }, + "delete": { + "permissions": [ + "kafka:DeleteClusterPolicy", + "kafka:GetClusterPolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/msk/configuration.json b/internal/aws/cfn/schemas/aws/msk/configuration.json new file mode 100644 index 00000000..30d5894a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/msk/configuration.json @@ -0,0 +1,105 @@ +{ + "typeName": "AWS::MSK::Configuration", + "description": "Resource Type definition for AWS::MSK::Configuration", + "definitions": { + "KafkaVersionsList": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "LatestRevision": { + "type": "object", + "additionalProperties": false, + "properties": { + "CreationTime": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Revision": { + "type": "integer" + } + } + } + }, + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ServerProperties": { + "type": "string" + }, + "KafkaVersionsList": { + "$ref": "#/definitions/KafkaVersionsList" + }, + "Arn": { + "type": "string" + }, + "LatestRevision": { + "$ref": "#/definitions/LatestRevision" + } + }, + "additionalProperties": false, + "required": [ + "ServerProperties", + "Name" + ], + "createOnlyProperties": [ + "/properties/KafkaVersionsList", + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/ServerProperties" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/LatestRevision/CreationTime", + "/properties/LatestRevision/Revision", + "/properties/LatestRevision/Description" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "kafka:CreateConfiguration", + "Kafka:DescribeConfiguration" + ] + }, + "delete": { + "permissions": [ + "kafka:DeleteConfiguration", + "kafka:DescribeConfiguration" + ] + }, + "list": { + "permissions": [ + "kafka:ListConfigurations" + ] + }, + "read": { + "permissions": [ + "kafka:DescribeConfiguration" + ] + }, + "update": { + "permissions": [ + "kafka:UpdateConfiguration", + "kafka:DescribeConfiguration" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/msk/serverlesscluster.json b/internal/aws/cfn/schemas/aws/msk/serverlesscluster.json new file mode 100644 index 00000000..d77e1f48 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/msk/serverlesscluster.json @@ -0,0 +1,158 @@ +{ + "typeName": "AWS::MSK::ServerlessCluster", + "description": "Resource Type definition for AWS::MSK::ServerlessCluster", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "ClusterName": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "VpcConfigs": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VpcConfig" + } + }, + "ClientAuthentication": { + "$ref": "#/definitions/ClientAuthentication" + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "definitions": { + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroups": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "SubnetIds" + ] + }, + "ClientAuthentication": { + "type": "object", + "properties": { + "Sasl": { + "$ref": "#/definitions/Sasl" + } + }, + "additionalProperties": false, + "required": [ + "Sasl" + ] + }, + "Sasl": { + "type": "object", + "additionalProperties": false, + "properties": { + "Iam": { + "$ref": "#/definitions/Iam" + } + }, + "required": [ + "Iam" + ] + }, + "Iam": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + }, + "required": [ + "Enabled" + ] + } + }, + "required": [ + "ClusterName", + "VpcConfigs", + "ClientAuthentication" + ], + "createOnlyProperties": [ + "/properties/ClusterName", + "/properties/VpcConfigs", + "/properties/ClientAuthentication", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "kafka:CreateClusterV2", + "kafka:TagResource", + "kafka:DescribeClusterV2", + "ec2:CreateVpcEndpoint", + "ec2:CreateTags", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSubnets", + "ec2:DescribeVpcEndpoints", + "ec2:DescribeVpcs", + "ec2:DescribeSecurityGroups" + ], + "timeoutInMinutes": 120 + }, + "read": { + "permissions": [ + "kafka:DescribeClusterV2" + ] + }, + "delete": { + "permissions": [ + "kafka:DeleteCluster", + "kafka:DescribeClusterV2", + "ec2:DeleteVpcEndpoints" + ], + "timeoutInMinutes": 75 + }, + "list": { + "permissions": [ + "kafka:ListClustersV2" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/msk/vpcconnection.json b/internal/aws/cfn/schemas/aws/msk/vpcconnection.json new file mode 100644 index 00000000..9113e6bc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/msk/vpcconnection.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::MSK::VpcConnection", + "description": "Resource Type definition for AWS::MSK::VpcConnection", + "definitions": { + "Authentication": { + "type": "string", + "description": "The type of private link authentication", + "minLength": 3, + "maxLength": 10, + "enum": [ + "SASL_IAM", + "SASL_SCRAM", + "TLS" + ] + }, + "ClientSubnets": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^(subnet-)([a-z0-9]+)\\Z" + } + }, + "SecurityGroups": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^(sg-)([a-z0-9]+)\\Z" + } + }, + "Tags": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "VpcId": { + "type": "string", + "pattern": "^(vpc-)([a-z0-9]+)\\Z" + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "Authentication": { + "$ref": "#/definitions/Authentication" + }, + "ClientSubnets": { + "$ref": "#/definitions/ClientSubnets" + }, + "TargetClusterArn": { + "description": "The Amazon Resource Name (ARN) of the target cluster", + "type": "string", + "pattern": "^arn:[\\w-]+:kafka:[\\w-]+:\\d+:cluster.*\\Z" + }, + "SecurityGroups": { + "$ref": "#/definitions/SecurityGroups" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "VpcId": { + "$ref": "#/definitions/VpcId" + } + }, + "additionalProperties": false, + "required": [ + "Authentication", + "ClientSubnets", + "SecurityGroups", + "TargetClusterArn", + "VpcId" + ], + "createOnlyProperties": [ + "/properties/ClientSubnets", + "/properties/Authentication", + "/properties/SecurityGroups", + "/properties/TargetClusterArn", + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpcEndpoint", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "ec2:DescribeVpcEndpoints", + "ec2:AcceptVpcEndpointConnections", + "ec2:RejectVpcEndpointConnections", + "ec2:DescribeVpcEndpointConnections", + "ec2:CreateTags", + "iam:AttachRolePolicy", + "iam:CreateServiceLinkedRole", + "iam:PutRolePolicy", + "kafka:CreateVpcConnection", + "kafka:DescribeVpcConnection", + "kafka:TagResource", + "kms:CreateGrant", + "kms:DescribeKey" + ] + }, + "read": { + "permissions": [ + "kafka:DescribeVpcConnection", + "kms:CreateGrant", + "kms:DescribeKey" + ] + }, + "update": { + "permissions": [ + "kafka:DescribeVpcConnection", + "kms:CreateGrant", + "kms:DescribeKey", + "kafka:TagResource", + "kafka:UntagResource" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpcEndpoint", + "ec2:DeleteVpcEndpoints", + "ec2:DescribeVpcEndpoints", + "ec2:DescribeVpcEndpointConnections", + "kafka:DeleteVpcConnection", + "kafka:DescribeVpcConnection", + "kms:CreateGrant", + "kms:DescribeKey" + ] + }, + "list": { + "permissions": [ + "kafka:ListVpcConnections", + "kms:CreateGrant", + "kms:DescribeKey" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/mwaa/environment.json b/internal/aws/cfn/schemas/aws/mwaa/environment.json new file mode 100644 index 00000000..eb57a48c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/mwaa/environment.json @@ -0,0 +1,498 @@ +{ + "typeName": "AWS::MWAA::Environment", + "description": "Resource schema for AWS::MWAA::Environment", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mwaa.git", + "definitions": { + "EnvironmentName": { + "type": "string", + "description": "Customer-defined identifier for the environment, unique per customer region.", + "minLength": 1, + "maxLength": 80, + "pattern": "^[a-zA-Z][0-9a-zA-Z\\-_]*$" + }, + "EnvironmentStatus": { + "type": "string", + "description": "The status of the environment.", + "enum": [ + "CREATING", + "CREATE_FAILED", + "AVAILABLE", + "UPDATING", + "DELETING", + "DELETED", + "UPDATE_FAILED", + "UNAVAILABLE", + "PENDING" + ] + }, + "UpdateStatus": { + "type": "string", + "description": "", + "enum": [ + "SUCCESS", + "PENDING", + "FAILED" + ] + }, + "UpdateError": { + "type": "object", + "description": "The error associated with an update request.", + "additionalProperties": false, + "properties": { + "ErrorCode": { + "$ref": "#/definitions/ErrorCode" + }, + "ErrorMessage": { + "$ref": "#/definitions/ErrorMessage" + } + } + }, + "AirflowArn": { + "type": "string", + "description": "", + "minLength": 1, + "maxLength": 1224, + "pattern": "^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b)(-[a-z]+)?:airflow:[a-z0-9\\-]+:\\d{12}:environment/\\w+" + }, + "EnvironmentArn": { + "type": "string", + "description": "ARN for the MWAA environment.", + "minLength": 1, + "maxLength": 1224, + "pattern": "^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b)(-[a-z]+)?:airflow:[a-z0-9\\-]+:\\d{12}:environment/\\w+" + }, + "S3BucketArn": { + "type": "string", + "description": "ARN for the AWS S3 bucket to use as the source of DAGs and plugins for the environment.", + "minLength": 1, + "maxLength": 1224, + "pattern": "^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b)(-[a-z]+)?:s3:::[a-z0-9.\\-]+$" + }, + "CreatedAt": { + "type": "string", + "description": "When the environment resource was created." + }, + "UpdateCreatedAt": { + "type": "string", + "description": "When the update request was created." + }, + "WebserverUrl": { + "type": "string", + "description": "Url endpoint for the environment's Airflow UI.", + "minLength": 1, + "maxLength": 256, + "pattern": "^https://.+$" + }, + "ExecutionRoleArn": { + "type": "string", + "description": "IAM role to be used by tasks.", + "maxLength": 1224, + "pattern": "^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b)(-[a-z]+)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "ServiceRoleArn": { + "type": "string", + "description": "IAM role to be used by MWAA to perform AWS API calls on behalf of the customer.", + "maxLength": 1224, + "pattern": "^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b)(-[a-z]+)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "KmsKey": { + "type": "string", + "description": "The identifier of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use for MWAA data encryption.\n\n You can specify the CMK using any of the following:\n\n Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab.\n\n Key alias. For example, alias/ExampleAlias.\n\n Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef.\n\n Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.\n\n AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails.", + "maxLength": 1224, + "pattern": "^(((arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b)(-[a-z]+)?:kms:[a-z]{2}-[a-z]+-\\d:\\d+:)?key\\/)?[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|(arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):kms:[a-z]{2}-[a-z]+-\\d:\\d+:)?alias/.+)$" + }, + "AirflowVersion": { + "type": "string", + "description": "Version of airflow to deploy to the environment.", + "maxLength": 32, + "pattern": "^[0-9a-z.]+$" + }, + "RelativePath": { + "type": "string", + "description": "Represents an S3 prefix relative to the root of an S3 bucket.", + "maxLength": 1024, + "pattern": ".*" + }, + "ConfigKey": { + "type": "string", + "description": "", + "maxLength": 64, + "pattern": "^[a-z]+([a-z._]*[a-z]+)?$" + }, + "ConfigValue": { + "type": "string", + "description": "", + "maxLength": 256, + "pattern": ".*" + }, + "SecurityGroupId": { + "type": "string", + "description": "", + "minLength": 1, + "maxLength": 1024, + "pattern": "^sg-[a-zA-Z0-9\\-._]+$" + }, + "SubnetId": { + "type": "string", + "description": "", + "maxLength": 1024, + "pattern": "^subnet-[a-zA-Z0-9\\-._]+$" + }, + "CloudWatchLogGroupArn": { + "type": "string", + "description": "", + "maxLength": 1224, + "pattern": "^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b)(-[a-z]+)?:logs:[a-z0-9\\-]+:\\d{12}:log-group:\\w+" + }, + "LoggingEnabled": { + "type": "boolean", + "description": "" + }, + "LoggingLevel": { + "type": "string", + "description": "", + "enum": [ + "CRITICAL", + "ERROR", + "WARNING", + "INFO", + "DEBUG" + ] + }, + "EnvironmentClass": { + "type": "string", + "description": "Templated configuration for airflow processes and backing infrastructure.", + "minLength": 1, + "maxLength": 1024 + }, + "MaxWorkers": { + "type": "integer", + "description": "Maximum worker compute units.", + "minimum": 1 + }, + "MinWorkers": { + "type": "integer", + "description": "Minimum worker compute units.", + "minimum": 1 + }, + "Schedulers": { + "type": "integer", + "description": "Scheduler compute units.", + "minimum": 1 + }, + "NetworkConfiguration": { + "type": "object", + "description": "Configures the network resources of the environment.", + "additionalProperties": false, + "properties": { + "SubnetIds": { + "type": "array", + "insertionOrder": true, + "description": "A list of subnets to use for the environment. These must be private subnets, in the same VPC, in two different availability zones.", + "minItems": 2, + "maxItems": 2, + "items": { + "$ref": "#/definitions/SubnetId" + } + }, + "SecurityGroupIds": { + "type": "array", + "insertionOrder": true, + "description": "A list of security groups to use for the environment.", + "minItems": 1, + "maxItems": 5, + "items": { + "$ref": "#/definitions/SecurityGroupId" + } + } + } + }, + "LoggingConfiguration": { + "type": "object", + "description": "Logging configuration for the environment.", + "additionalProperties": false, + "properties": { + "DagProcessingLogs": { + "$ref": "#/definitions/ModuleLoggingConfiguration" + }, + "SchedulerLogs": { + "$ref": "#/definitions/ModuleLoggingConfiguration" + }, + "WebserverLogs": { + "$ref": "#/definitions/ModuleLoggingConfiguration" + }, + "WorkerLogs": { + "$ref": "#/definitions/ModuleLoggingConfiguration" + }, + "TaskLogs": { + "$ref": "#/definitions/ModuleLoggingConfiguration" + } + } + }, + "LoggingConfigurationInput": { + "type": "object", + "description": "Configures logging for the environment.", + "additionalProperties": false, + "properties": { + "DagProcessingLogs": { + "$ref": "#/definitions/ModuleLoggingConfigurationInput" + }, + "SchedulerLogs": { + "$ref": "#/definitions/ModuleLoggingConfigurationInput" + }, + "WebserverLogs": { + "$ref": "#/definitions/ModuleLoggingConfigurationInput" + }, + "WorkerLogs": { + "$ref": "#/definitions/ModuleLoggingConfigurationInput" + }, + "TaskLogs": { + "$ref": "#/definitions/ModuleLoggingConfigurationInput" + } + } + }, + "ModuleLoggingConfiguration": { + "type": "object", + "description": "Logging configuration for a specific airflow component.", + "additionalProperties": false, + "properties": { + "Enabled": { + "$ref": "#/definitions/LoggingEnabled" + }, + "LogLevel": { + "$ref": "#/definitions/LoggingLevel" + }, + "CloudWatchLogGroupArn": { + "$ref": "#/definitions/CloudWatchLogGroupArn" + } + } + }, + "ModuleLoggingConfigurationInput": { + "type": "object", + "description": "Configures airflow component logging for the environment.", + "additionalProperties": false, + "properties": { + "Enabled": { + "$ref": "#/definitions/LoggingEnabled" + }, + "LogLevel": { + "$ref": "#/definitions/LoggingLevel" + } + } + }, + "LastUpdate": { + "type": "object", + "description": "Details about the last update performed on the environment.", + "additionalProperties": false, + "properties": { + "Status": { + "$ref": "#/definitions/UpdateStatus" + }, + "CreatedAt": { + "$ref": "#/definitions/UpdateCreatedAt" + }, + "Error": { + "$ref": "#/definitions/UpdateError" + } + } + }, + "ErrorCode": { + "type": "string", + "description": "The error code associated with an error." + }, + "ErrorMessage": { + "type": "string", + "description": "Error message describing a failed operation.", + "minLength": 1, + "maxLength": 1024, + "pattern": "^.+$" + }, + "S3ObjectVersion": { + "type": "string", + "description": "Represents an version ID for an S3 object.", + "maxLength": 1024 + }, + "WeeklyMaintenanceWindowStart": { + "type": "string", + "description": "Start time for the weekly maintenance window.", + "maxLength": 9, + "pattern": "(MON|TUE|WED|THU|FRI|SAT|SUN):([01]\\d|2[0-3]):(00|30)" + }, + "WebserverAccessMode": { + "type": "string", + "description": "Choice for mode of webserver access including over public internet or via private VPC endpoint.", + "enum": [ + "PRIVATE_ONLY", + "PUBLIC_ONLY" + ] + }, + "EndpointManagement": { + "type": "string", + "description": "Defines whether the VPC endpoints configured for the environment are created, and managed, by the customer or by Amazon MWAA.", + "enum": [ + "CUSTOMER", + "SERVICE" + ] + }, + "CeleryExecutorQueue": { + "type": "string", + "description": "The celery executor queue associated with the environment.", + "maxLength": 1224 + }, + "DatabaseVpcEndpointService": { + "type": "string", + "description": "The database VPC endpoint service name.", + "maxLength": 1224 + }, + "WebserverVpcEndpointService": { + "type": "string", + "description": "The webserver VPC endpoint service name, applicable if private webserver access mode selected.", + "maxLength": 1224 + } + }, + "properties": { + "Name": { + "$ref": "#/definitions/EnvironmentName" + }, + "Arn": { + "$ref": "#/definitions/EnvironmentArn" + }, + "WebserverUrl": { + "$ref": "#/definitions/WebserverUrl" + }, + "ExecutionRoleArn": { + "$ref": "#/definitions/ExecutionRoleArn" + }, + "KmsKey": { + "$ref": "#/definitions/KmsKey" + }, + "AirflowVersion": { + "$ref": "#/definitions/AirflowVersion" + }, + "SourceBucketArn": { + "$ref": "#/definitions/S3BucketArn" + }, + "DagS3Path": { + "$ref": "#/definitions/RelativePath" + }, + "PluginsS3Path": { + "$ref": "#/definitions/RelativePath" + }, + "PluginsS3ObjectVersion": { + "$ref": "#/definitions/S3ObjectVersion" + }, + "RequirementsS3Path": { + "$ref": "#/definitions/RelativePath" + }, + "RequirementsS3ObjectVersion": { + "$ref": "#/definitions/S3ObjectVersion" + }, + "StartupScriptS3Path": { + "$ref": "#/definitions/RelativePath" + }, + "StartupScriptS3ObjectVersion": { + "$ref": "#/definitions/S3ObjectVersion" + }, + "AirflowConfigurationOptions": { + "type": "object", + "description": "Key/value pairs representing Airflow configuration variables.\n Keys are prefixed by their section:\n\n [core]\n dags_folder={AIRFLOW_HOME}/dags\n\n Would be represented as\n\n \"core.dags_folder\": \"{AIRFLOW_HOME}/dags\"" + }, + "EnvironmentClass": { + "$ref": "#/definitions/EnvironmentClass" + }, + "MaxWorkers": { + "$ref": "#/definitions/MaxWorkers" + }, + "MinWorkers": { + "$ref": "#/definitions/MinWorkers" + }, + "Schedulers": { + "$ref": "#/definitions/Schedulers" + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + }, + "LoggingConfiguration": { + "$ref": "#/definitions/LoggingConfiguration" + }, + "WeeklyMaintenanceWindowStart": { + "$ref": "#/definitions/WeeklyMaintenanceWindowStart" + }, + "Tags": { + "type": "object", + "description": "A map of tags for the environment." + }, + "WebserverAccessMode": { + "$ref": "#/definitions/WebserverAccessMode" + }, + "EndpointManagement": { + "$ref": "#/definitions/EndpointManagement" + }, + "CeleryExecutorQueue": { + "$ref": "#/definitions/CeleryExecutorQueue" + }, + "DatabaseVpcEndpointService": { + "$ref": "#/definitions/DatabaseVpcEndpointService" + }, + "WebserverVpcEndpointService": { + "$ref": "#/definitions/WebserverVpcEndpointService" + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/KmsKey", + "/properties/NetworkConfiguration/SubnetIds", + "/properties/EndpointManagement" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CeleryExecutorQueue", + "/properties/DatabaseVpcEndpointService", + "/properties/WebserverVpcEndpointService", + "/properties/WebserverUrl", + "/properties/LoggingConfiguration/DagProcessingLogs/CloudWatchLogGroupArn", + "/properties/LoggingConfiguration/SchedulerLogs/CloudWatchLogGroupArn", + "/properties/LoggingConfiguration/WebserverLogs/CloudWatchLogGroupArn", + "/properties/LoggingConfiguration/WorkerLogs/CloudWatchLogGroupArn", + "/properties/LoggingConfiguration/TaskLogs/CloudWatchLogGroupArn" + ], + "taggable": true, + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "airflow:CreateEnvironment" + ], + "timeoutInMinutes": 180 + }, + "read": { + "permissions": [ + "airflow:GetEnvironment" + ] + }, + "update": { + "permissions": [ + "airflow:UpdateEnvironment", + "airflow:TagResource", + "airflow:UntagResource" + ], + "timeoutInMinutes": 480 + }, + "delete": { + "permissions": [ + "airflow:DeleteEnvironment" + ] + }, + "list": { + "permissions": [ + "airflow:ListEnvironments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/neptune/dbcluster.json b/internal/aws/cfn/schemas/aws/neptune/dbcluster.json new file mode 100644 index 00000000..bce72891 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/neptune/dbcluster.json @@ -0,0 +1,331 @@ +{ + "typeName": "AWS::Neptune::DBCluster", + "description": "The AWS::Neptune::DBCluster resource creates an Amazon Neptune DB cluster.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-neptune", + "properties": { + "Endpoint": { + "description": "The connection endpoint for the DB cluster. For example: `mystack-mydbcluster-1apw1j4phylrk.cg034hpkmmjt.us-east-2.rds.amazonaws.com`", + "type": "string" + }, + "ReadEndpoint": { + "description": "The reader endpoint for the DB cluster. For example: `mystack-mydbcluster-ro-1apw1j4phylrk.cg034hpkmmjt.us-east-2.rds.amazonaws.com`", + "type": "string" + }, + "ClusterResourceId": { + "description": "The resource id for the DB cluster. For example: `cluster-ABCD1234EFGH5678IJKL90MNOP`. The cluster ID uniquely identifies the cluster and is used in things like IAM authentication policies.", + "type": "string" + }, + "AssociatedRoles": { + "description": "Provides a list of the AWS Identity and Access Management (IAM) roles that are associated with the DB cluster. IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other AWS services on your behalf.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/DBClusterRole" + } + }, + "AvailabilityZones": { + "description": "Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "BackupRetentionPeriod": { + "description": "Specifies the number of days for which automatic DB snapshots are retained.", + "default": 1, + "minimum": 1, + "type": "integer" + }, + "CopyTagsToSnapshot": { + "description": "A value that indicates whether to copy all tags from the DB cluster to snapshots of the DB cluster. The default behaviour is not to copy them.", + "type": "boolean" + }, + "DBClusterIdentifier": { + "description": "The DB cluster identifier. Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB cluster stored as a lowercase string.", + "type": "string", + "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$", + "minLength": 1, + "maxLength": 63 + }, + "DBClusterParameterGroupName": { + "description": "Provides the name of the DB cluster parameter group.", + "type": "string" + }, + "DBInstanceParameterGroupName": { + "description": "The name of the DB parameter group to apply to all instances of the DB cluster. Used only in case of a major EngineVersion upgrade request.", + "type": "string" + }, + "DBPort": { + "description": "The port number on which the DB instances in the DB cluster accept connections. \n\nIf not specified, the default port used is `8182`. \n\nNote: `Port` property will soon be deprecated from this resource. Please update existing templates to rename it with new property `DBPort` having same functionalities.", + "type": "integer" + }, + "DBSubnetGroupName": { + "description": "Specifies information on the subnet group associated with the DB cluster, including the name, description, and subnets in the subnet group.", + "type": "string" + }, + "DeletionProtection": { + "description": "Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled.", + "type": "boolean" + }, + "EnableCloudwatchLogsExports": { + "description": "Specifies a list of log types that are enabled for export to CloudWatch Logs.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "EngineVersion": { + "description": "Indicates the database engine version.", + "type": "string" + }, + "IamAuthEnabled": { + "description": "True if mapping of Amazon Identity and Access Management (IAM) accounts to database accounts is enabled, and otherwise false.", + "type": "boolean" + }, + "KmsKeyId": { + "description": "If `StorageEncrypted` is true, the Amazon KMS key identifier for the encrypted DB cluster.", + "type": "string" + }, + "Port": { + "description": "The port number on which the DB cluster accepts connections. For example: `8182`.", + "type": "string" + }, + "PreferredBackupWindow": { + "description": "Specifies the daily time range during which automated backups are created if automated backups are enabled, as determined by the BackupRetentionPeriod.", + "type": "string" + }, + "PreferredMaintenanceWindow": { + "description": "Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).", + "type": "string" + }, + "RestoreToTime": { + "description": "Creates a new DB cluster from a DB snapshot or DB cluster snapshot.\n\nIf a DB snapshot is specified, the target DB cluster is created from the source DB snapshot with a default configuration and default security group.\n\nIf a DB cluster snapshot is specified, the target DB cluster is created from the source DB cluster restore point with the same configuration as the original source DB cluster, except that the new DB cluster is created with the default security group.", + "type": "string" + }, + "RestoreType": { + "description": "Creates a new DB cluster from a DB snapshot or DB cluster snapshot.\n\nIf a DB snapshot is specified, the target DB cluster is created from the source DB snapshot with a default configuration and default security group.\n\nIf a DB cluster snapshot is specified, the target DB cluster is created from the source DB cluster restore point with the same configuration as the original source DB cluster, except that the new DB cluster is created with the default security group.", + "type": "string", + "default": "full-copy" + }, + "ServerlessScalingConfiguration": { + "description": "Contains the scaling configuration used by the Neptune Serverless Instances within this DB cluster.", + "$ref": "#/definitions/ServerlessScalingConfiguration" + }, + "SnapshotIdentifier": { + "description": "Specifies the identifier for a DB cluster snapshot. Must match the identifier of an existing snapshot.\n\nAfter you restore a DB cluster using a SnapshotIdentifier, you must specify the same SnapshotIdentifier for any future updates to the DB cluster. When you specify this property for an update, the DB cluster is not restored from the snapshot again, and the data in the database is not changed.\n\nHowever, if you don't specify the SnapshotIdentifier, an empty DB cluster is created, and the original DB cluster is deleted. If you specify a property that is different from the previous snapshot restore property, the DB cluster is restored from the snapshot specified by the SnapshotIdentifier, and the original DB cluster is deleted.", + "type": "string" + }, + "SourceDBClusterIdentifier": { + "description": "Creates a new DB cluster from a DB snapshot or DB cluster snapshot.\n\nIf a DB snapshot is specified, the target DB cluster is created from the source DB snapshot with a default configuration and default security group.\n\nIf a DB cluster snapshot is specified, the target DB cluster is created from the source DB cluster restore point with the same configuration as the original source DB cluster, except that the new DB cluster is created with the default security group.", + "type": "string" + }, + "StorageEncrypted": { + "description": "Indicates whether the DB cluster is encrypted.\n\nIf you specify the `DBClusterIdentifier`, `DBSnapshotIdentifier`, or `SourceDBInstanceIdentifier` property, don't specify this property. The value is inherited from the cluster, snapshot, or source DB instance. If you specify the KmsKeyId property, you must enable encryption.\n\nIf you specify the KmsKeyId, you must enable encryption by setting StorageEncrypted to true.", + "type": "boolean" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "The tags assigned to this cluster.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UseLatestRestorableTime": { + "description": "Creates a new DB cluster from a DB snapshot or DB cluster snapshot.\n\nIf a DB snapshot is specified, the target DB cluster is created from the source DB snapshot with a default configuration and default security group.\n\nIf a DB cluster snapshot is specified, the target DB cluster is created from the source DB cluster restore point with the same configuration as the original source DB cluster, except that the new DB cluster is created with the default security group.", + "type": "boolean" + }, + "VpcSecurityGroupIds": { + "description": "Provides a list of VPC security groups that the DB cluster belongs to.", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + }, + "type": "array" + } + }, + "definitions": { + "DBClusterRole": { + "description": "Describes an AWS Identity and Access Management (IAM) role that is associated with a DB cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "FeatureName": { + "description": "The name of the feature associated with the AWS Identity and Access Management (IAM) role. For the list of supported feature names, see DBEngineVersion in the Amazon Neptune API Reference.", + "type": "string" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role that is associated with the DB cluster.", + "type": "string" + } + }, + "required": [ + "RoleArn" + ] + }, + "ServerlessScalingConfiguration": { + "description": "Contains the scaling configuration of an Neptune Serverless DB cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinCapacity": { + "description": "The minimum number of Neptune capacity units (NCUs) for a DB instance in an Neptune Serverless cluster. You can specify NCU values in half-step increments, such as 8, 8.5, 9, and so on. The smallest value you can use is 1, whereas the largest is 128.", + "type": "number", + "minimum": 1, + "maximum": 128 + }, + "MaxCapacity": { + "description": "The maximum number of Neptune capacity units (NCUs) for a DB instance in an Neptune Serverless cluster. You can specify NCU values in half-step increments, such as 40, 40.5, 41, and so on. The smallest value you can use is 2.5, whereas the largest is 128.", + "type": "number", + "minimum": 2.5, + "maximum": 128 + } + }, + "required": [ + "MinCapacity", + "MaxCapacity" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/DBClusterIdentifier": "$lowercase(DBClusterIdentifier)", + "/properties/DBClusterParameterGroupName": "$lowercase(DBClusterParameterGroupName)", + "/properties/DBSubnetGroupName": "$lowercase(DBSubnetGroupName)", + "/properties/SnapshotIdentifier": "$lowercase(SnapshotIdentifier)", + "/properties/SourceDBClusterIdentifier": "$lowercase(SourceDBClusterIdentifier)" + }, + "readOnlyProperties": [ + "/properties/Endpoint", + "/properties/ClusterResourceId", + "/properties/Port", + "/properties/ReadEndpoint" + ], + "createOnlyProperties": [ + "/properties/AvailabilityZones", + "/properties/DBClusterIdentifier", + "/properties/DBSubnetGroupName", + "/properties/KmsKeyId", + "/properties/RestoreToTime", + "/properties/RestoreType", + "/properties/SnapshotIdentifier", + "/properties/SourceDBClusterIdentifier", + "/properties/StorageEncrypted", + "/properties/UseLatestRestorableTime" + ], + "primaryIdentifier": [ + "/properties/DBClusterIdentifier" + ], + "writeOnlyProperties": [ + "/properties/DBInstanceParameterGroupName", + "/properties/RestoreToTime", + "/properties/RestoreType", + "/properties/SnapshotIdentifier", + "/properties/SourceDBClusterIdentifier", + "/properties/UseLatestRestorableTime" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "rds:AddRoleToDBCluster", + "rds:AddTagsToResource", + "rds:CreateDBCluster", + "rds:CreateDBInstance", + "rds:DescribeDBClusters", + "rds:ListTagsForResource", + "rds:ModifyDBCluster", + "rds:RestoreDBClusterFromSnapshot", + "rds:RestoreDBClusterToPointInTime", + "kms:*" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "rds:DescribeDBClusters", + "rds:ListTagsForResource", + "kms:*" + ], + "timeoutInMinutes": 2160 + }, + "update": { + "permissions": [ + "ec2:DescribeSecurityGroups", + "iam:PassRole", + "rds:AddRoleToDBCluster", + "rds:AddTagsToResource", + "rds:DescribeDBClusters", + "rds:DescribeDBInstances", + "rds:DescribeDBSubnetGroups", + "rds:DescribeGlobalClusters", + "rds:ListTagsForResource", + "rds:ModifyDBCluster", + "rds:ModifyDBInstance", + "rds:RemoveFromGlobalCluster", + "rds:RemoveRoleFromDBCluster", + "rds:RemoveTagsFromResource", + "kms:*" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "rds:DeleteDBCluster", + "rds:DeleteDBInstance", + "rds:DescribeDBClusters", + "rds:DescribeGlobalClusters", + "rds:ListTagsForResource", + "rds:RemoveFromGlobalCluster", + "rds:CreateDBClusterSnapshot", + "kms:*" + ], + "timeoutInMinutes": 2160 + }, + "list": { + "permissions": [ + "rds:DescribeDBClusters", + "rds:ListTagsForResource", + "kms:*" + ], + "timeoutInMinutes": 2160 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/neptune/dbclusterparametergroup.json b/internal/aws/cfn/schemas/aws/neptune/dbclusterparametergroup.json new file mode 100644 index 00000000..a3a692e2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/neptune/dbclusterparametergroup.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::Neptune::DBClusterParameterGroup", + "description": "Resource Type definition for AWS::Neptune::DBClusterParameterGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "Family": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Family", + "Description", + "Parameters" + ], + "createOnlyProperties": [ + "/properties/Family", + "/properties/Description", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/neptune/dbinstance.json b/internal/aws/cfn/schemas/aws/neptune/dbinstance.json new file mode 100644 index 00000000..bacb7879 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/neptune/dbinstance.json @@ -0,0 +1,89 @@ +{ + "typeName": "AWS::Neptune::DBInstance", + "description": "Resource Type definition for AWS::Neptune::DBInstance", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Endpoint": { + "type": "string" + }, + "Port": { + "type": "string" + }, + "DBParameterGroupName": { + "type": "string" + }, + "DBInstanceClass": { + "type": "string" + }, + "AllowMajorVersionUpgrade": { + "type": "boolean" + }, + "DBClusterIdentifier": { + "type": "string" + }, + "AvailabilityZone": { + "type": "string" + }, + "PreferredMaintenanceWindow": { + "type": "string" + }, + "AutoMinorVersionUpgrade": { + "type": "boolean" + }, + "DBSubnetGroupName": { + "type": "string" + }, + "DBInstanceIdentifier": { + "type": "string" + }, + "DBSnapshotIdentifier": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "DBInstanceClass" + ], + "readOnlyProperties": [ + "/properties/Endpoint", + "/properties/Port", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/DBClusterIdentifier", + "/properties/AvailabilityZone", + "/properties/DBInstanceIdentifier", + "/properties/DBSubnetGroupName", + "/properties/DBSnapshotIdentifier" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/neptune/dbparametergroup.json b/internal/aws/cfn/schemas/aws/neptune/dbparametergroup.json new file mode 100644 index 00000000..59272b3c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/neptune/dbparametergroup.json @@ -0,0 +1,63 @@ +{ + "typeName": "AWS::Neptune::DBParameterGroup", + "description": "Resource Type definition for AWS::Neptune::DBParameterGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "Family": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Family", + "Description", + "Parameters" + ], + "createOnlyProperties": [ + "/properties/Family", + "/properties/Description", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/neptune/dbsubnetgroup.json b/internal/aws/cfn/schemas/aws/neptune/dbsubnetgroup.json new file mode 100644 index 00000000..d61e5529 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/neptune/dbsubnetgroup.json @@ -0,0 +1,61 @@ +{ + "typeName": "AWS::Neptune::DBSubnetGroup", + "description": "Resource Type definition for AWS::Neptune::DBSubnetGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DBSubnetGroupName": { + "type": "string" + }, + "DBSubnetGroupDescription": { + "type": "string" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "DBSubnetGroupDescription", + "SubnetIds" + ], + "createOnlyProperties": [ + "/properties/DBSubnetGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/networkfirewall/firewall.json b/internal/aws/cfn/schemas/aws/networkfirewall/firewall.json new file mode 100644 index 00000000..cc033cbd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkfirewall/firewall.json @@ -0,0 +1,197 @@ +{ + "typeName": "AWS::NetworkFirewall::Firewall", + "description": "Resource type definition for AWS::NetworkFirewall::Firewall", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkfirewall.git", + "additionalProperties": false, + "definitions": { + "ResourceArn": { + "description": "A resource ARN.", + "type": "string", + "pattern": "^arn:aws.*$", + "minLength": 1, + "maxLength": 256 + }, + "EndpointId": { + "description": "An endpoint Id.", + "type": "string" + }, + "SubnetMapping": { + "type": "object", + "properties": { + "SubnetId": { + "description": "A SubnetId.", + "type": "string" + }, + "IPAddressType": { + "description": "A IPAddressType", + "type": "string" + } + }, + "required": [ + "SubnetId" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "FirewallName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-]+$" + }, + "FirewallArn": { + "$ref": "#/definitions/ResourceArn" + }, + "FirewallId": { + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^([0-9a-f]{8})-([0-9a-f]{4}-){3}([0-9a-f]{12})$" + }, + "FirewallPolicyArn": { + "$ref": "#/definitions/ResourceArn" + }, + "VpcId": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^vpc-[0-9a-f]+$" + }, + "SubnetMappings": { + "type": "array", + "minItems": 1, + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SubnetMapping" + } + }, + "DeleteProtection": { + "type": "boolean" + }, + "SubnetChangeProtection": { + "type": "boolean" + }, + "FirewallPolicyChangeProtection": { + "type": "boolean" + }, + "Description": { + "type": "string", + "maxLength": 512, + "pattern": "^.*$" + }, + "EndpointIds": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/EndpointId" + } + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true + }, + "required": [ + "FirewallName", + "FirewallPolicyArn", + "VpcId", + "SubnetMappings" + ], + "readOnlyProperties": [ + "/properties/FirewallArn", + "/properties/FirewallId", + "/properties/EndpointIds" + ], + "primaryIdentifier": [ + "/properties/FirewallArn" + ], + "createOnlyProperties": [ + "/properties/VpcId", + "/properties/FirewallName" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:CreateVpcEndpoint", + "ec2:DescribeVpcEndpoints", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", + "iam:CreateServiceLinkedRole", + "network-firewall:CreateFirewall", + "network-firewall:DescribeFirewallPolicy", + "network-firewall:DescribeRuleGroup", + "network-firewall:TagResource", + "network-firewall:AssociateSubnets", + "network-firewall:AssociateFirewallPolicy", + "network-firewall:DescribeFirewall" + ] + }, + "read": { + "permissions": [ + "network-firewall:DescribeFirewall", + "network-firewall:ListTagsForResources" + ] + }, + "update": { + "permissions": [ + "network-firewall:AssociateSubnets", + "network-firewall:DisassociateSubnets", + "network-firewall:UpdateFirewallDescription", + "network-firewall:UpdateFirewallDeleteProtection", + "network-firewall:UpdateSubnetChangeProtection", + "network-firewall:UpdateFirewallPolicyChangeProtection", + "network-firewall:AssociateFirewallPolicy", + "network-firewall:TagResource", + "network-firewall:UntagResource", + "network-firewall:DescribeFirewall" + ] + }, + "delete": { + "permissions": [ + "ec2:DeleteVpcEndpoints", + "ec2:DescribeRouteTables", + "logs:DescribeLogGroups", + "logs:DescribeResourcePolicies", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "network-firewall:DeleteFirewall", + "network-firewall:UntagResource", + "network-firewall:DescribeFirewall" + ] + }, + "list": { + "permissions": [ + "network-firewall:ListFirewalls" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkfirewall/firewallpolicy.json b/internal/aws/cfn/schemas/aws/networkfirewall/firewallpolicy.json new file mode 100644 index 00000000..359e800c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkfirewall/firewallpolicy.json @@ -0,0 +1,369 @@ +{ + "typeName": "AWS::NetworkFirewall::FirewallPolicy", + "description": "Resource type definition for AWS::NetworkFirewall::FirewallPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkfirewall.git", + "additionalProperties": false, + "definitions": { + "ResourceArn": { + "description": "A resource ARN.", + "type": "string", + "pattern": "^(arn:aws.*)$", + "minLength": 1, + "maxLength": 256 + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^.*$" + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 255, + "pattern": "^.*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "FirewallPolicy": { + "type": "object", + "properties": { + "StatelessDefaultActions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "StatelessFragmentDefaultActions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "StatelessCustomActions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CustomAction" + } + }, + "StatelessRuleGroupReferences": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/StatelessRuleGroupReference" + } + }, + "StatefulRuleGroupReferences": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/StatefulRuleGroupReference" + } + }, + "StatefulDefaultActions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "StatefulEngineOptions": { + "$ref": "#/definitions/StatefulEngineOptions" + }, + "PolicyVariables": { + "type": "object", + "properties": { + "RuleVariables": { + "$ref": "#/definitions/RuleVariables" + } + }, + "additionalProperties": false + }, + "TLSInspectionConfigurationArn": { + "$ref": "#/definitions/ResourceArn" + } + }, + "required": [ + "StatelessDefaultActions", + "StatelessFragmentDefaultActions" + ], + "additionalProperties": false + }, + "RuleVariables": { + "type": "object", + "patternProperties": { + "^[A-Za-z0-9_]{1,32}$": { + "$ref": "#/definitions/IPSet" + } + }, + "additionalProperties": false + }, + "CustomAction": { + "type": "object", + "properties": { + "ActionName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9]+$" + }, + "ActionDefinition": { + "$ref": "#/definitions/ActionDefinition" + } + }, + "required": [ + "ActionName", + "ActionDefinition" + ], + "additionalProperties": false + }, + "ActionDefinition": { + "type": "object", + "properties": { + "PublishMetricAction": { + "$ref": "#/definitions/PublishMetricAction" + } + }, + "additionalProperties": false + }, + "PublishMetricAction": { + "type": "object", + "properties": { + "Dimensions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Dimension" + } + } + }, + "required": [ + "Dimensions" + ], + "additionalProperties": false + }, + "Dimension": { + "type": "object", + "properties": { + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-_ ]+$" + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "StatefulRuleGroupReference": { + "type": "object", + "properties": { + "ResourceArn": { + "$ref": "#/definitions/ResourceArn" + }, + "Priority": { + "$ref": "#/definitions/Priority" + }, + "Override": { + "$ref": "#/definitions/StatefulRuleGroupOverride" + } + }, + "required": [ + "ResourceArn" + ], + "additionalProperties": false + }, + "StatelessRuleGroupReference": { + "type": "object", + "properties": { + "ResourceArn": { + "$ref": "#/definitions/ResourceArn" + }, + "Priority": { + "$ref": "#/definitions/Priority" + } + }, + "required": [ + "ResourceArn", + "Priority" + ], + "additionalProperties": false + }, + "Priority": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "VariableDefinition": { + "type": "string", + "minLength": 1, + "pattern": "^.*$" + }, + "IPSet": { + "type": "object", + "properties": { + "Definition": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VariableDefinition" + } + } + }, + "additionalProperties": false + }, + "StatefulRuleGroupOverride": { + "type": "object", + "properties": { + "Action": { + "$ref": "#/definitions/OverrideAction" + } + }, + "additionalProperties": false + }, + "OverrideAction": { + "type": "string", + "enum": [ + "DROP_TO_ALERT" + ] + }, + "StatefulEngineOptions": { + "type": "object", + "properties": { + "RuleOrder": { + "$ref": "#/definitions/RuleOrder" + }, + "StreamExceptionPolicy": { + "$ref": "#/definitions/StreamExceptionPolicy" + } + }, + "additionalProperties": false + }, + "RuleOrder": { + "type": "string", + "enum": [ + "DEFAULT_ACTION_ORDER", + "STRICT_ORDER" + ] + }, + "StreamExceptionPolicy": { + "type": "string", + "enum": [ + "DROP", + "CONTINUE", + "REJECT" + ] + } + }, + "properties": { + "FirewallPolicyName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-]+$" + }, + "FirewallPolicyArn": { + "$ref": "#/definitions/ResourceArn" + }, + "FirewallPolicy": { + "$ref": "#/definitions/FirewallPolicy" + }, + "FirewallPolicyId": { + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^([0-9a-f]{8})-([0-9a-f]{4}-){3}([0-9a-f]{12})$" + }, + "Description": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^.*$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true + }, + "required": [ + "FirewallPolicyName", + "FirewallPolicy" + ], + "readOnlyProperties": [ + "/properties/FirewallPolicyArn", + "/properties/FirewallPolicyId" + ], + "primaryIdentifier": [ + "/properties/FirewallPolicyArn" + ], + "createOnlyProperties": [ + "/properties/FirewallPolicyName" + ], + "handlers": { + "create": { + "permissions": [ + "network-firewall:CreateFirewallPolicy", + "network-firewall:DescribeFirewallPolicy", + "network-firewall:ListTLSInspectionConfigurations", + "network-firewall:TagResource", + "network-firewall:ListRuleGroups" + ] + }, + "read": { + "permissions": [ + "network-firewall:DescribeFirewallPolicy", + "network-firewall:ListTagsForResources" + ] + }, + "update": { + "permissions": [ + "network-firewall:UpdateFirewallPolicy", + "network-firewall:DescribeFirewallPolicy", + "network-firewall:TagResource", + "network-firewall:UntagResource", + "network-firewall:ListRuleGroups", + "network-firewall:ListTLSInspectionConfigurations" + ] + }, + "delete": { + "permissions": [ + "network-firewall:DeleteFirewallPolicy", + "network-firewall:DescribeFirewallPolicy", + "network-firewall:UntagResource" + ] + }, + "list": { + "permissions": [ + "network-firewall:ListFirewallPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkfirewall/loggingconfiguration.json b/internal/aws/cfn/schemas/aws/networkfirewall/loggingconfiguration.json new file mode 100644 index 00000000..7939d5c0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkfirewall/loggingconfiguration.json @@ -0,0 +1,158 @@ +{ + "typeName": "AWS::NetworkFirewall::LoggingConfiguration", + "description": "Resource type definition for AWS::NetworkFirewall::LoggingConfiguration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkfirewall.git", + "additionalProperties": false, + "definitions": { + "ResourceArn": { + "description": "A resource ARN.", + "type": "string", + "pattern": "^arn:aws.*$", + "minLength": 1, + "maxLength": 256 + }, + "LoggingConfiguration": { + "type": "object", + "properties": { + "LogDestinationConfigs": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LogDestinationConfig" + }, + "minItems": 1 + } + }, + "required": [ + "LogDestinationConfigs" + ], + "additionalProperties": false + }, + "LogDestinationConfig": { + "type": "object", + "properties": { + "LogType": { + "type": "string", + "enum": [ + "ALERT", + "FLOW" + ] + }, + "LogDestinationType": { + "type": "string", + "enum": [ + "S3", + "CloudWatchLogs", + "KinesisDataFirehose" + ] + }, + "LogDestination": { + "type": "object", + "description": "A key-value pair to configure the logDestinations.", + "patternProperties": { + "^[0-9A-Za-z.\\-_@\\/]+$": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "minProperties": 1, + "additionalProperties": false + } + }, + "required": [ + "LogType", + "LogDestinationType", + "LogDestination" + ], + "additionalProperties": false + } + }, + "properties": { + "FirewallName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-]+$" + }, + "FirewallArn": { + "$ref": "#/definitions/ResourceArn" + }, + "LoggingConfiguration": { + "$ref": "#/definitions/LoggingConfiguration" + } + }, + "tagging": { + "taggable": false + }, + "required": [ + "FirewallArn", + "LoggingConfiguration" + ], + "createOnlyProperties": [ + "/properties/FirewallName", + "/properties/FirewallArn" + ], + "primaryIdentifier": [ + "/properties/FirewallArn" + ], + "handlers": { + "create": { + "permissions": [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "iam:CreateServiceLinkedRole", + "firehose:TagDeliveryStream", + "network-firewall:UpdateLoggingConfiguration", + "network-firewall:DescribeLoggingConfiguration" + ] + }, + "read": { + "permissions": [ + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "network-firewall:DescribeLoggingConfiguration" + ] + }, + "update": { + "permissions": [ + "logs:CreateLogDelivery", + "logs:DeleteLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:ListLogDeliveries", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "iam:CreateServiceLinkedRole", + "firehose:TagDeliveryStream", + "network-firewall:UpdateLoggingConfiguration", + "network-firewall:DescribeLoggingConfiguration" + ] + }, + "delete": { + "permissions": [ + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:GetLogDelivery", + "network-firewall:UpdateLoggingConfiguration", + "network-firewall:DescribeLoggingConfiguration" + ] + }, + "list": { + "permissions": [ + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "network-firewall:DescribeLoggingConfiguration" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkfirewall/rulegroup.json b/internal/aws/cfn/schemas/aws/networkfirewall/rulegroup.json new file mode 100644 index 00000000..822640d1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkfirewall/rulegroup.json @@ -0,0 +1,717 @@ +{ + "typeName": "AWS::NetworkFirewall::RuleGroup", + "description": "Resource type definition for AWS::NetworkFirewall::RuleGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkfirewall.git", + "additionalProperties": false, + "definitions": { + "ResourceArn": { + "description": "A resource ARN.", + "type": "string", + "pattern": "^(arn:aws.*)$", + "minLength": 1, + "maxLength": 256 + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^.*$" + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 255, + "pattern": "^.*$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "RulesString": { + "type": "string", + "minLength": 0, + "maxLength": 1000000 + }, + "RuleGroup": { + "type": "object", + "properties": { + "RuleVariables": { + "$ref": "#/definitions/RuleVariables" + }, + "ReferenceSets": { + "$ref": "#/definitions/ReferenceSets" + }, + "RulesSource": { + "$ref": "#/definitions/RulesSource" + }, + "StatefulRuleOptions": { + "$ref": "#/definitions/StatefulRuleOptions" + } + }, + "required": [ + "RulesSource" + ], + "additionalProperties": false + }, + "RuleVariables": { + "type": "object", + "properties": { + "IPSets": { + "type": "object", + "patternProperties": { + "^[A-Za-z0-9_]{1,32}$": { + "$ref": "#/definitions/IPSet" + } + }, + "additionalProperties": false + }, + "PortSets": { + "type": "object", + "patternProperties": { + "^[A-Za-z0-9_]{1,32}$": { + "$ref": "#/definitions/PortSet" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "IPSet": { + "type": "object", + "properties": { + "Definition": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VariableDefinition" + } + } + }, + "additionalProperties": false + }, + "PortSet": { + "type": "object", + "properties": { + "Definition": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VariableDefinition" + } + } + }, + "additionalProperties": false + }, + "VariableDefinition": { + "type": "string", + "minLength": 1, + "pattern": "^.*$" + }, + "ReferenceSets": { + "type": "object", + "properties": { + "IPSetReferences": { + "type": "object", + "patternProperties": { + "^[A-Za-z0-9_]{1,32}$": { + "$ref": "#/definitions/IPSetReference" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "IPSetReference": { + "type": "object", + "properties": { + "ReferenceArn": { + "$ref": "#/definitions/ResourceArn" + } + }, + "additionalProperties": false + }, + "RulesSource": { + "type": "object", + "properties": { + "RulesString": { + "$ref": "#/definitions/RulesString" + }, + "RulesSourceList": { + "$ref": "#/definitions/RulesSourceList" + }, + "StatefulRules": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/StatefulRule" + } + }, + "StatelessRulesAndCustomActions": { + "$ref": "#/definitions/StatelessRulesAndCustomActions" + } + }, + "additionalProperties": false + }, + "RulesSourceList": { + "type": "object", + "properties": { + "Targets": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "TargetTypes": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TargetType" + } + }, + "GeneratedRulesType": { + "$ref": "#/definitions/GeneratedRulesType" + } + }, + "required": [ + "Targets", + "TargetTypes", + "GeneratedRulesType" + ], + "additionalProperties": false + }, + "TargetType": { + "type": "string", + "enum": [ + "TLS_SNI", + "HTTP_HOST" + ] + }, + "GeneratedRulesType": { + "type": "string", + "enum": [ + "ALLOWLIST", + "DENYLIST" + ] + }, + "StatefulRule": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "enum": [ + "PASS", + "DROP", + "ALERT", + "REJECT" + ] + }, + "Header": { + "$ref": "#/definitions/Header" + }, + "RuleOptions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/RuleOption" + } + } + }, + "required": [ + "Action", + "Header", + "RuleOptions" + ], + "additionalProperties": false + }, + "Header": { + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "enum": [ + "IP", + "TCP", + "UDP", + "ICMP", + "HTTP", + "FTP", + "TLS", + "SMB", + "DNS", + "DCERPC", + "SSH", + "SMTP", + "IMAP", + "MSN", + "KRB5", + "IKEV2", + "TFTP", + "NTP", + "DHCP" + ] + }, + "Source": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^.*$" + }, + "SourcePort": { + "$ref": "#/definitions/Port" + }, + "Direction": { + "type": "string", + "enum": [ + "FORWARD", + "ANY" + ] + }, + "Destination": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^.*$" + }, + "DestinationPort": { + "$ref": "#/definitions/Port" + } + }, + "required": [ + "Protocol", + "Source", + "SourcePort", + "Direction", + "Destination", + "DestinationPort" + ], + "additionalProperties": false + }, + "RuleOption": { + "type": "object", + "properties": { + "Keyword": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^.*$" + }, + "Settings": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Setting" + } + } + }, + "required": [ + "Keyword" + ], + "additionalProperties": false + }, + "Setting": { + "type": "string", + "minLength": 1, + "maxLength": 8192, + "pattern": "^.*$" + }, + "Port": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^.*$" + }, + "StatelessRulesAndCustomActions": { + "type": "object", + "properties": { + "StatelessRules": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/StatelessRule" + } + }, + "CustomActions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CustomAction" + } + } + }, + "required": [ + "StatelessRules" + ], + "additionalProperties": false + }, + "StatelessRule": { + "type": "object", + "properties": { + "RuleDefinition": { + "$ref": "#/definitions/RuleDefinition" + }, + "Priority": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + } + }, + "required": [ + "RuleDefinition", + "Priority" + ], + "additionalProperties": false + }, + "RuleDefinition": { + "type": "object", + "properties": { + "MatchAttributes": { + "$ref": "#/definitions/MatchAttributes" + }, + "Actions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "MatchAttributes", + "Actions" + ], + "additionalProperties": false + }, + "MatchAttributes": { + "type": "object", + "properties": { + "Sources": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Address" + } + }, + "Destinations": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Address" + } + }, + "SourcePorts": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/PortRange" + } + }, + "DestinationPorts": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/PortRange" + } + }, + "Protocols": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ProtocolNumber" + } + }, + "TCPFlags": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TCPFlagField" + } + } + }, + "additionalProperties": false + }, + "Address": { + "type": "object", + "properties": { + "AddressDefinition": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^([a-fA-F\\d:\\.]+/\\d{1,3})$" + } + }, + "required": [ + "AddressDefinition" + ], + "additionalProperties": false + }, + "PortRange": { + "type": "object", + "properties": { + "FromPort": { + "$ref": "#/definitions/PortRangeBound" + }, + "ToPort": { + "$ref": "#/definitions/PortRangeBound" + } + }, + "required": [ + "FromPort", + "ToPort" + ], + "additionalProperties": false + }, + "PortRangeBound": { + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "ProtocolNumber": { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "TCPFlagField": { + "type": "object", + "properties": { + "Flags": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TCPFlag" + } + }, + "Masks": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/TCPFlag" + } + } + }, + "required": [ + "Flags" + ], + "additionalProperties": false + }, + "TCPFlag": { + "type": "string", + "enum": [ + "FIN", + "SYN", + "RST", + "PSH", + "ACK", + "URG", + "ECE", + "CWR" + ] + }, + "CustomAction": { + "type": "object", + "properties": { + "ActionName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9]+$" + }, + "ActionDefinition": { + "$ref": "#/definitions/ActionDefinition" + } + }, + "required": [ + "ActionName", + "ActionDefinition" + ], + "additionalProperties": false + }, + "ActionDefinition": { + "type": "object", + "properties": { + "PublishMetricAction": { + "$ref": "#/definitions/PublishMetricAction" + } + }, + "additionalProperties": false + }, + "PublishMetricAction": { + "type": "object", + "properties": { + "Dimensions": { + "type": "array", + "insertionOrder": true, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Dimension" + } + } + }, + "required": [ + "Dimensions" + ], + "additionalProperties": false + }, + "Dimension": { + "type": "object", + "properties": { + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-_ ]+$" + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "StatefulRuleOptions": { + "type": "object", + "properties": { + "RuleOrder": { + "$ref": "#/definitions/RuleOrder" + } + }, + "additionalProperties": false + }, + "RuleOrder": { + "type": "string", + "enum": [ + "DEFAULT_ACTION_ORDER", + "STRICT_ORDER" + ] + } + }, + "properties": { + "RuleGroupName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9-]+$" + }, + "RuleGroupArn": { + "$ref": "#/definitions/ResourceArn" + }, + "RuleGroupId": { + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^([0-9a-f]{8})-([0-9a-f]{4}-){3}([0-9a-f]{12})$" + }, + "RuleGroup": { + "$ref": "#/definitions/RuleGroup" + }, + "Type": { + "type": "string", + "enum": [ + "STATELESS", + "STATEFUL" + ] + }, + "Capacity": { + "type": "integer" + }, + "Description": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^.*$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true + }, + "required": [ + "Type", + "Capacity", + "RuleGroupName" + ], + "readOnlyProperties": [ + "/properties/RuleGroupArn", + "/properties/RuleGroupId" + ], + "createOnlyProperties": [ + "/properties/RuleGroupName", + "/properties/Capacity", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/RuleGroupArn" + ], + "handlers": { + "create": { + "permissions": [ + "network-firewall:CreateRuleGroup", + "network-firewall:DescribeRuleGroup", + "network-firewall:TagResource", + "network-firewall:ListRuleGroups", + "iam:CreateServiceLinkedRole", + "ec2:GetManagedPrefixListEntries" + ] + }, + "read": { + "permissions": [ + "network-firewall:DescribeRuleGroup", + "network-firewall:ListTagsForResources" + ] + }, + "update": { + "permissions": [ + "network-firewall:UpdateRuleGroup", + "network-firewall:DescribeRuleGroup", + "network-firewall:TagResource", + "network-firewall:UntagResource", + "iam:CreateServiceLinkedRole", + "ec2:GetManagedPrefixListEntries" + ] + }, + "delete": { + "permissions": [ + "network-firewall:DeleteRuleGroup", + "network-firewall:DescribeRuleGroup", + "network-firewall:UntagResource" + ] + }, + "list": { + "permissions": [ + "network-firewall:ListRuleGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/connectattachment.json b/internal/aws/cfn/schemas/aws/networkmanager/connectattachment.json new file mode 100644 index 00000000..3d5e8c7f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/connectattachment.json @@ -0,0 +1,203 @@ +{ + "typeName": "AWS::NetworkManager::ConnectAttachment", + "description": "AWS::NetworkManager::ConnectAttachment Resource Type Definition", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager/aws-networkmanager-connectattachment", + "properties": { + "CoreNetworkId": { + "description": "ID of the CoreNetwork that the attachment will be attached to.", + "type": "string" + }, + "CoreNetworkArn": { + "description": "The ARN of a core network.", + "type": "string" + }, + "AttachmentId": { + "description": "The ID of the attachment.", + "type": "string" + }, + "OwnerAccountId": { + "description": "The ID of the attachment account owner.", + "type": "string" + }, + "AttachmentType": { + "description": "The type of attachment.", + "type": "string" + }, + "State": { + "description": "State of the attachment.", + "type": "string" + }, + "EdgeLocation": { + "description": "Edge location of the attachment.", + "type": "string" + }, + "ResourceArn": { + "description": "The attachment resource ARN.", + "type": "string" + }, + "AttachmentPolicyRuleNumber": { + "description": "The policy rule number associated with the attachment.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment attachment.", + "type": "string" + }, + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "$ref": "#/definitions/ProposedSegmentChange" + }, + "Tags": { + "description": "Tags for the attachment.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedAt": { + "description": "Creation time of the attachment.", + "type": "string" + }, + "UpdatedAt": { + "description": "Last update time of the attachment.", + "type": "string" + }, + "TransportAttachmentId": { + "description": "Id of transport attachment", + "type": "string" + }, + "Options": { + "description": "Protocol options for connect attachment", + "$ref": "#/definitions/ConnectAttachmentOptions" + } + }, + "definitions": { + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "type": "object", + "properties": { + "Tags": { + "description": "The list of key-value tags that changed for the segment.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AttachmentPolicyRuleNumber": { + "description": "The rule number in the policy document that applies to this change.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment to change.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "ConnectAttachmentOptions": { + "description": "Connect attachment options for protocol", + "type": "object", + "properties": { + "Protocol": { + "type": "string", + "description": "Tunnel protocol for connect attachment" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/CoreNetworkArn", + "/properties/CreatedAt", + "/properties/UpdatedAt", + "/properties/AttachmentType", + "/properties/State", + "/properties/ResourceArn", + "/properties/AttachmentId", + "/properties/OwnerAccountId", + "/properties/AttachmentPolicyRuleNumber", + "/properties/SegmentName" + ], + "createOnlyProperties": [ + "/properties/CoreNetworkId", + "/properties/EdgeLocation", + "/properties/TransportAttachmentId", + "/properties/Options" + ], + "primaryIdentifier": [ + "/properties/AttachmentId" + ], + "required": [ + "CoreNetworkId", + "EdgeLocation", + "TransportAttachmentId", + "Options" + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:GetConnectAttachment", + "networkmanager:CreateConnectAttachment", + "networkmanager:TagResource", + "ec2:DescribeRegions" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetConnectAttachment" + ] + }, + "update": { + "permissions": [ + "networkmanager:GetConnectAttachment", + "networkmanager:ListTagsForResource", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "ec2:DescribeRegions" + ] + }, + "delete": { + "permissions": [ + "networkmanager:GetConnectAttachment", + "networkmanager:DeleteAttachment", + "ec2:DescribeRegions" + ] + }, + "list": { + "permissions": [ + "networkmanager:ListAttachments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/connectpeer.json b/internal/aws/cfn/schemas/aws/networkmanager/connectpeer.json new file mode 100644 index 00000000..f6d63b5e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/connectpeer.json @@ -0,0 +1,237 @@ +{ + "typeName": "AWS::NetworkManager::ConnectPeer", + "description": "AWS::NetworkManager::ConnectPeer Resource Type Definition.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager/aws-networkmanager-connectpeer", + "properties": { + "PeerAddress": { + "description": "The IP address of the Connect peer.", + "type": "string" + }, + "CoreNetworkAddress": { + "description": "The IP address of a core network.", + "type": "string" + }, + "BgpOptions": { + "description": "Bgp options for connect peer.", + "$ref": "#/definitions/BgpOptions" + }, + "InsideCidrBlocks": { + "description": "The inside IP addresses used for a Connect peer configuration.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "CoreNetworkId": { + "description": "The ID of the core network.", + "type": "string" + }, + "ConnectAttachmentId": { + "description": "The ID of the attachment to connect.", + "type": "string" + }, + "ConnectPeerId": { + "description": "The ID of the Connect peer.", + "type": "string" + }, + "EdgeLocation": { + "description": "The Connect peer Regions where edges are located.", + "type": "string" + }, + "State": { + "description": "State of the connect peer.", + "type": "string" + }, + "CreatedAt": { + "description": "Connect peer creation time.", + "type": "string" + }, + "Configuration": { + "description": "Configuration of the connect peer.", + "$ref": "#/definitions/ConnectPeerConfiguration" + }, + "SubnetArn": { + "description": "The subnet ARN for the connect peer.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "ConnectPeerConfiguration": { + "type": "object", + "properties": { + "CoreNetworkAddress": { + "description": "The IP address of a core network.", + "type": "string" + }, + "PeerAddress": { + "description": "The IP address of the Connect peer.", + "type": "string" + }, + "InsideCidrBlocks": { + "description": "The inside IP addresses used for a Connect peer configuration.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Protocol": { + "$ref": "#/definitions/TunnelProtocol" + }, + "BgpConfigurations": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConnectPeerBgpConfiguration" + } + } + }, + "additionalProperties": false + }, + "TunnelProtocol": { + "description": "The protocol used for a Connect peer configuration.", + "type": "string" + }, + "BgpOptions": { + "description": "Bgp options", + "type": "object", + "properties": { + "PeerAsn": { + "type": "number" + } + }, + "additionalProperties": false + }, + "ConnectPeerBgpConfiguration": { + "description": "Bgp configuration for connect peer", + "type": "object", + "properties": { + "CoreNetworkAsn": { + "description": "The ASN of the Coret Network.", + "type": "number" + }, + "PeerAsn": { + "description": "The ASN of the Connect peer.", + "type": "number" + }, + "CoreNetworkAddress": { + "description": "The address of a core network.", + "type": "string" + }, + "PeerAddress": { + "description": "The address of a core network Connect peer.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "ConnectAttachmentId", + "PeerAddress" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/PeerAddress", + "/properties/CoreNetworkAddress", + "/properties/BgpOptions", + "/properties/InsideCidrBlocks", + "/properties/ConnectAttachmentId", + "/properties/SubnetArn" + ], + "writeOnlyProperties": [ + "/properties/CoreNetworkAddress", + "/properties/BgpOptions", + "/properties/SubnetArn" + ], + "readOnlyProperties": [ + "/properties/ConnectPeerId", + "/properties/State", + "/properties/CreatedAt", + "/properties/Configuration", + "/properties/CoreNetworkId", + "/properties/EdgeLocation" + ], + "primaryIdentifier": [ + "/properties/ConnectPeerId" + ], + "additionalIdentifiers": [ + [ + "/properties/ConnectAttachmentId", + "/properties/CoreNetworkAddress", + "/properties/InsideCidrBlocks" + ] + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:GetConnectPeer", + "networkmanager:CreateConnectPeer", + "networkmanager:TagResource", + "ec2:DescribeRegions" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetConnectPeer" + ] + }, + "update": { + "permissions": [ + "networkmanager:GetConnectPeer", + "networkmanager:ListTagsForResource", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "ec2:DescribeRegions" + ] + }, + "delete": { + "permissions": [ + "networkmanager:GetConnectPeer", + "networkmanager:DeleteConnectPeer", + "ec2:DescribeRegions" + ] + }, + "list": { + "permissions": [ + "networkmanager:ListConnectPeers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/corenetwork.json b/internal/aws/cfn/schemas/aws/networkmanager/corenetwork.json new file mode 100644 index 00000000..e3bcd25d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/corenetwork.json @@ -0,0 +1,214 @@ +{ + "typeName": "AWS::NetworkManager::CoreNetwork", + "description": "AWS::NetworkManager::CoreNetwork Resource Type Definition.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager/aws-networkmanager-corenetwork", + "properties": { + "GlobalNetworkId": { + "description": "The ID of the global network that your core network is a part of.", + "type": "string" + }, + "CoreNetworkId": { + "description": "The Id of core network", + "type": "string" + }, + "CoreNetworkArn": { + "description": "The ARN (Amazon resource name) of core network", + "type": "string" + }, + "PolicyDocument": { + "description": "Live policy document for the core network, you must provide PolicyDocument in Json Format", + "type": "object" + }, + "Description": { + "description": "The description of core network", + "type": "string" + }, + "CreatedAt": { + "description": "The creation time of core network", + "type": "string" + }, + "State": { + "description": "The state of core network", + "type": "string" + }, + "Segments": { + "description": "The segments within a core network.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CoreNetworkSegment" + } + }, + "Edges": { + "description": "The edges within a core network.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CoreNetworkEdge" + } + }, + "OwnerAccount": { + "description": "Owner of the core network", + "type": "string" + }, + "Tags": { + "description": "The tags for the global network.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "CoreNetworkSegment": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "Name of segment" + }, + "EdgeLocations": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "description": "The Regions where the edges are located." + } + }, + "SharedSegments": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "description": "The shared segments of a core network." + } + } + }, + "additionalProperties": false + }, + "CoreNetworkEdge": { + "type": "object", + "properties": { + "EdgeLocation": { + "type": "string", + "description": "The Region where a core network edge is located." + }, + "Asn": { + "type": "number", + "description": "The ASN of a core network edge." + }, + "InsideCidrBlocks": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "description": "The inside IP addresses used for core network edges." + } + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "GlobalNetworkId" + ], + "readOnlyProperties": [ + "/properties/OwnerAccount", + "/properties/CoreNetworkId", + "/properties/CoreNetworkArn", + "/properties/CreatedAt", + "/properties/State", + "/properties/Segments", + "/properties/Edges" + ], + "createOnlyProperties": [ + "/properties/GlobalNetworkId" + ], + "primaryIdentifier": [ + "/properties/CoreNetworkId" + ], + "additionalIdentifiers": [ + [ + "/properties/CoreNetworkArn" + ], + [ + "/properties/GlobalNetworkId" + ] + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateCoreNetwork", + "networkmanager:GetCoreNetwork", + "networkmanager:GetCoreNetworkPolicy", + "networkmanager:TagResource", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 720 + }, + "read": { + "permissions": [ + "networkmanager:GetCoreNetwork", + "networkmanager:GetCoreNetworkPolicy" + ] + }, + "update": { + "permissions": [ + "networkmanager:UpdateCoreNetwork", + "networkmanager:GetCoreNetwork", + "networkmanager:ListTagsForResource", + "networkmanager:PutCoreNetworkPolicy", + "networkmanager:GetCoreNetworkPolicy", + "networkmanager:ExecuteCoreNetworkChangeSet", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 720 + }, + "delete": { + "permissions": [ + "networkmanager:DeleteCoreNetwork", + "networkmanager:UntagResource", + "networkmanager:GetCoreNetwork", + "networkmanager:GetCoreNetworkPolicy", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 720 + }, + "list": { + "permissions": [ + "networkmanager:ListCoreNetworks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/customergatewayassociation.json b/internal/aws/cfn/schemas/aws/networkmanager/customergatewayassociation.json new file mode 100644 index 00000000..b74b8df0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/customergatewayassociation.json @@ -0,0 +1,78 @@ +{ + "typeName": "AWS::NetworkManager::CustomerGatewayAssociation", + "description": "The AWS::NetworkManager::CustomerGatewayAssociation type associates a customer gateway with a device and optionally, with a link.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager.git", + "properties": { + "GlobalNetworkId": { + "description": "The ID of the global network.", + "type": "string" + }, + "CustomerGatewayArn": { + "description": "The Amazon Resource Name (ARN) of the customer gateway.", + "type": "string" + }, + "DeviceId": { + "description": "The ID of the device", + "type": "string" + }, + "LinkId": { + "description": "The ID of the link", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "GlobalNetworkId", + "CustomerGatewayArn", + "DeviceId" + ], + "createOnlyProperties": [ + "/properties/GlobalNetworkId", + "/properties/CustomerGatewayArn", + "/properties/DeviceId", + "/properties/LinkId" + ], + "primaryIdentifier": [ + "/properties/GlobalNetworkId", + "/properties/CustomerGatewayArn" + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:GetCustomerGatewayAssociations", + "networkmanager:AssociateCustomerGateway" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetCustomerGatewayAssociations" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "GlobalNetworkId": { + "$ref": "resource-schema.json#/properties/GlobalNetworkId" + } + }, + "required": [ + "GlobalNetworkId" + ] + }, + "permissions": [ + "networkmanager:GetCustomerGatewayAssociations" + ] + }, + "delete": { + "permissions": [ + "networkmanager:DisassociateCustomerGateway" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/device.json b/internal/aws/cfn/schemas/aws/networkmanager/device.json new file mode 100644 index 00000000..e6cec299 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/device.json @@ -0,0 +1,196 @@ +{ + "typeName": "AWS::NetworkManager::Device", + "description": "The AWS::NetworkManager::Device type describes a device.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a device resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Location": { + "description": "The site location.", + "type": "object", + "properties": { + "Address": { + "description": "The physical address.", + "type": "string" + }, + "Latitude": { + "description": "The latitude.", + "type": "string" + }, + "Longitude": { + "description": "The longitude.", + "type": "string" + } + }, + "additionalProperties": false + }, + "AWSLocation": { + "description": "The Amazon Web Services location of the device, if applicable.", + "type": "object", + "properties": { + "Zone": { + "description": "The Zone that the device is located in. Specify the ID of an Availability Zone, Local Zone, Wavelength Zone, or an Outpost.", + "type": "string" + }, + "SubnetArn": { + "description": "The Amazon Resource Name (ARN) of the subnet that the device is located in.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "DeviceArn": { + "description": "The Amazon Resource Name (ARN) of the device.", + "type": "string" + }, + "DeviceId": { + "description": "The ID of the device.", + "type": "string" + }, + "Description": { + "description": "The description of the device.", + "type": "string" + }, + "Tags": { + "description": "The tags for the device.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "GlobalNetworkId": { + "description": "The ID of the global network.", + "type": "string" + }, + "AWSLocation": { + "description": "The Amazon Web Services location of the device, if applicable.", + "$ref": "#/definitions/AWSLocation" + }, + "Location": { + "description": "The site location.", + "$ref": "#/definitions/Location" + }, + "Model": { + "description": "The device model", + "type": "string" + }, + "SerialNumber": { + "description": "The device serial number.", + "type": "string" + }, + "SiteId": { + "description": "The site ID.", + "type": "string" + }, + "Type": { + "description": "The device type.", + "type": "string" + }, + "Vendor": { + "description": "The device vendor.", + "type": "string" + }, + "CreatedAt": { + "description": "The date and time that the device was created.", + "type": "string" + }, + "State": { + "description": "The state of the device.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "GlobalNetworkId" + ], + "readOnlyProperties": [ + "/properties/DeviceId", + "/properties/DeviceArn", + "/properties/State", + "/properties/CreatedAt" + ], + "createOnlyProperties": [ + "/properties/GlobalNetworkId" + ], + "primaryIdentifier": [ + "/properties/GlobalNetworkId", + "/properties/DeviceId" + ], + "additionalIdentifiers": [ + [ + "/properties/DeviceArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateDevice", + "networkmanager:GetDevices", + "networkmanager:TagResource" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetDevices" + ] + }, + "update": { + "permissions": [ + "networkmanager:UpdateDevice", + "networkmanager:ListTagsForResource", + "networkmanager:GetDevices", + "networkmanager:TagResource", + "networkmanager:UntagResource" + ] + }, + "delete": { + "permissions": [ + "networkmanager:GetDevices", + "networkmanager:DeleteDevice" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "GlobalNetworkId": { + "$ref": "resource-schema.json#/properties/GlobalNetworkId" + } + }, + "required": [ + "GlobalNetworkId" + ] + }, + "permissions": [ + "networkmanager:GetDevices" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/globalnetwork.json b/internal/aws/cfn/schemas/aws/networkmanager/globalnetwork.json new file mode 100644 index 00000000..a9d65484 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/globalnetwork.json @@ -0,0 +1,112 @@ +{ + "typeName": "AWS::NetworkManager::GlobalNetwork", + "description": "The AWS::NetworkManager::GlobalNetwork type specifies a global network of the user's account", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a global network resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the global network.", + "type": "string" + }, + "Id": { + "description": "The ID of the global network.", + "type": "string" + }, + "Description": { + "description": "The description of the global network.", + "type": "string" + }, + "Tags": { + "description": "The tags for the global network.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedAt": { + "description": "The date and time that the global network was created.", + "type": "string" + }, + "State": { + "description": "The state of the global network.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Arn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateGlobalNetwork", + "networkmanager:DescribeGlobalNetworks", + "networkmanager:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "networkmanager:DescribeGlobalNetworks" + ] + }, + "update": { + "permissions": [ + "networkmanager:UpdateGlobalNetwork", + "networkmanager:DescribeGlobalNetworks", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "networkmanager:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "networkmanager:DeleteGlobalNetwork", + "networkmanager:DescribeGlobalNetworks" + ] + }, + "list": { + "permissions": [ + "networkmanager:DescribeGlobalNetworks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/link.json b/internal/aws/cfn/schemas/aws/networkmanager/link.json new file mode 100644 index 00000000..3834f65f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/link.json @@ -0,0 +1,168 @@ +{ + "typeName": "AWS::NetworkManager::Link", + "description": "The AWS::NetworkManager::Link type describes a link.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a link resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Bandwidth": { + "description": "The bandwidth for the link.", + "type": "object", + "properties": { + "DownloadSpeed": { + "description": "Download speed in Mbps.", + "type": "integer" + }, + "UploadSpeed": { + "description": "Upload speed in Mbps.", + "type": "integer" + } + }, + "additionalProperties": false + } + }, + "properties": { + "LinkArn": { + "description": "The Amazon Resource Name (ARN) of the link.", + "type": "string" + }, + "LinkId": { + "description": "The ID of the link.", + "type": "string" + }, + "GlobalNetworkId": { + "description": "The ID of the global network.", + "type": "string" + }, + "SiteId": { + "description": "The ID of the site", + "type": "string" + }, + "Bandwidth": { + "description": "The Bandwidth for the link.", + "$ref": "#/definitions/Bandwidth" + }, + "Provider": { + "description": "The provider of the link.", + "type": "string" + }, + "Description": { + "description": "The description of the link.", + "type": "string" + }, + "Tags": { + "description": "The tags for the link.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Type": { + "description": "The type of the link.", + "type": "string" + }, + "CreatedAt": { + "description": "The date and time that the device was created.", + "type": "string" + }, + "State": { + "description": "The state of the link.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "GlobalNetworkId", + "SiteId", + "Bandwidth" + ], + "readOnlyProperties": [ + "/properties/LinkId", + "/properties/LinkArn", + "/properties/CreatedAt", + "/properties/State" + ], + "createOnlyProperties": [ + "/properties/GlobalNetworkId", + "/properties/SiteId" + ], + "primaryIdentifier": [ + "/properties/GlobalNetworkId", + "/properties/LinkId" + ], + "additionalIdentifiers": [ + [ + "/properties/LinkArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateLink", + "networkmanager:GetLinks", + "networkmanager:TagResource" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetLinks" + ] + }, + "update": { + "permissions": [ + "networkmanager:ListTagsForResource", + "networkmanager:TagResource", + "networkmanager:GetLinks", + "networkmanager:UntagResource", + "networkmanager:UpdateLink" + ] + }, + "delete": { + "permissions": [ + "networkmanager:GetLinks", + "networkmanager:DeleteLink" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "GlobalNetworkId": { + "$ref": "resource-schema.json#/properties/GlobalNetworkId" + } + }, + "required": [ + "GlobalNetworkId" + ] + }, + "permissions": [ + "networkmanager:GetLinks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/linkassociation.json b/internal/aws/cfn/schemas/aws/networkmanager/linkassociation.json new file mode 100644 index 00000000..e330f48c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/linkassociation.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::NetworkManager::LinkAssociation", + "description": "The AWS::NetworkManager::LinkAssociation type associates a link to a device. The device and link must be in the same global network and the same site.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager.git", + "properties": { + "GlobalNetworkId": { + "description": "The ID of the global network.", + "type": "string" + }, + "DeviceId": { + "description": "The ID of the device", + "type": "string" + }, + "LinkId": { + "description": "The ID of the link", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "GlobalNetworkId", + "DeviceId", + "LinkId" + ], + "primaryIdentifier": [ + "/properties/GlobalNetworkId", + "/properties/DeviceId", + "/properties/LinkId" + ], + "createOnlyProperties": [ + "/properties/GlobalNetworkId", + "/properties/DeviceId", + "/properties/LinkId" + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:GetLinkAssociations", + "networkmanager:AssociateLink" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetLinkAssociations" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "GlobalNetworkId": { + "$ref": "resource-schema.json#/properties/GlobalNetworkId" + } + }, + "required": [ + "GlobalNetworkId" + ] + }, + "permissions": [ + "networkmanager:GetLinkAssociations" + ] + }, + "delete": { + "permissions": [ + "networkmanager:DisassociateLink" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/site.json b/internal/aws/cfn/schemas/aws/networkmanager/site.json new file mode 100644 index 00000000..d309814d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/site.json @@ -0,0 +1,157 @@ +{ + "typeName": "AWS::NetworkManager::Site", + "description": "The AWS::NetworkManager::Site type describes a site.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a site resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Location": { + "description": "The location of the site", + "type": "object", + "properties": { + "Address": { + "description": "The physical address.", + "type": "string" + }, + "Latitude": { + "description": "The latitude.", + "type": "string" + }, + "Longitude": { + "description": "The longitude.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "SiteArn": { + "description": "The Amazon Resource Name (ARN) of the site.", + "type": "string" + }, + "SiteId": { + "description": "The ID of the site.", + "type": "string" + }, + "Description": { + "description": "The description of the site.", + "type": "string" + }, + "Tags": { + "description": "The tags for the site.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "GlobalNetworkId": { + "description": "The ID of the global network.", + "type": "string" + }, + "Location": { + "description": "The location of the site.", + "$ref": "#/definitions/Location" + }, + "CreatedAt": { + "description": "The date and time that the device was created.", + "type": "string" + }, + "State": { + "description": "The state of the site.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "GlobalNetworkId" + ], + "readOnlyProperties": [ + "/properties/SiteId", + "/properties/SiteArn", + "/properties/State", + "/properties/CreatedAt" + ], + "createOnlyProperties": [ + "/properties/GlobalNetworkId" + ], + "primaryIdentifier": [ + "/properties/GlobalNetworkId", + "/properties/SiteId" + ], + "additionalIdentifiers": [ + [ + "/properties/SiteArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateSite", + "networkmanager:GetSites", + "networkmanager:TagResource" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetSites" + ] + }, + "update": { + "permissions": [ + "networkmanager:GetSites", + "networkmanager:ListTagsForResource", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "networkmanager:UpdateSite" + ] + }, + "delete": { + "permissions": [ + "networkmanager:GetSites", + "networkmanager:DeleteSite" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "GlobalNetworkId": { + "$ref": "resource-schema.json#/properties/GlobalNetworkId" + } + }, + "required": [ + "GlobalNetworkId" + ] + }, + "permissions": [ + "networkmanager:GetSites" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/sitetositevpnattachment.json b/internal/aws/cfn/schemas/aws/networkmanager/sitetositevpnattachment.json new file mode 100644 index 00000000..f74bb26b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/sitetositevpnattachment.json @@ -0,0 +1,193 @@ +{ + "typeName": "AWS::NetworkManager::SiteToSiteVpnAttachment", + "description": "AWS::NetworkManager::SiteToSiteVpnAttachment Resource Type definition.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager/aws-networkmanager-sitetositevpnattachment", + "properties": { + "CoreNetworkId": { + "description": "The ID of a core network where you're creating a site-to-site VPN attachment.", + "type": "string" + }, + "CoreNetworkArn": { + "description": "The ARN of a core network for the VPC attachment.", + "type": "string" + }, + "AttachmentId": { + "description": "The ID of the attachment.", + "type": "string" + }, + "OwnerAccountId": { + "description": "Owner account of the attachment.", + "type": "string" + }, + "AttachmentType": { + "description": "The type of attachment.", + "type": "string" + }, + "State": { + "description": "The state of the attachment.", + "type": "string" + }, + "EdgeLocation": { + "description": "The Region where the edge is located.", + "type": "string" + }, + "ResourceArn": { + "description": "The ARN of the Resource.", + "type": "string" + }, + "AttachmentPolicyRuleNumber": { + "description": "The policy rule number associated with the attachment.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment that attachment is in.", + "type": "string" + }, + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "$ref": "#/definitions/ProposedSegmentChange" + }, + "Tags": { + "description": "Tags for the attachment.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedAt": { + "description": "Creation time of the attachment.", + "type": "string" + }, + "UpdatedAt": { + "description": "Last update time of the attachment.", + "type": "string" + }, + "VpnConnectionArn": { + "description": "The ARN of the site-to-site VPN attachment.", + "type": "string" + } + }, + "definitions": { + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "type": "object", + "properties": { + "Tags": { + "description": "The key-value tags that changed for the segment.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AttachmentPolicyRuleNumber": { + "description": "The rule number in the policy document that applies to this change.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment to change.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/CoreNetworkId", + "/properties/VpnConnectionArn" + ], + "readOnlyProperties": [ + "/properties/CoreNetworkArn", + "/properties/CreatedAt", + "/properties/UpdatedAt", + "/properties/AttachmentType", + "/properties/State", + "/properties/ResourceArn", + "/properties/AttachmentId", + "/properties/OwnerAccountId", + "/properties/EdgeLocation", + "/properties/AttachmentPolicyRuleNumber", + "/properties/SegmentName" + ], + "primaryIdentifier": [ + "/properties/AttachmentId" + ], + "additionalIdentifiers": [ + [ + "/properties/CoreNetworkId", + "/properties/VpnConnectionArn" + ] + ], + "required": [ + "CoreNetworkId", + "VpnConnectionArn" + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:GetSiteToSiteVpnAttachment", + "networkmanager:CreateSiteToSiteVpnAttachment", + "ec2:DescribeRegions", + "networkmanager:TagResource" + ], + "timeoutInMinutes": 40 + }, + "read": { + "permissions": [ + "networkmanager:GetSiteToSiteVpnAttachment" + ] + }, + "update": { + "permissions": [ + "networkmanager:GetSiteToSiteVpnAttachment", + "networkmanager:ListTagsForResource", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "ec2:DescribeRegions" + ] + }, + "delete": { + "permissions": [ + "networkmanager:GetSiteToSiteVpnAttachment", + "networkmanager:DeleteAttachment", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 720 + }, + "list": { + "permissions": [ + "networkmanager:ListAttachments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/transitgatewaypeering.json b/internal/aws/cfn/schemas/aws/networkmanager/transitgatewaypeering.json new file mode 100644 index 00000000..15b858b1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/transitgatewaypeering.json @@ -0,0 +1,157 @@ +{ + "typeName": "AWS::NetworkManager::TransitGatewayPeering", + "description": "AWS::NetworkManager::TransitGatewayPeering Resoruce Type.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager/aws-networkmanager-transitgatewaypeering", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "CoreNetworkId": { + "description": "The Id of the core network that you want to peer a transit gateway to.", + "type": "string" + }, + "CoreNetworkArn": { + "description": "The ARN (Amazon Resource Name) of the core network that you want to peer a transit gateway to.", + "type": "string" + }, + "TransitGatewayArn": { + "description": "The ARN (Amazon Resource Name) of the transit gateway that you will peer to a core network", + "type": "string" + }, + "TransitGatewayPeeringAttachmentId": { + "description": "The ID of the TransitGatewayPeeringAttachment", + "type": "string" + }, + "PeeringId": { + "description": "The Id of the transit gateway peering", + "type": "string" + }, + "State": { + "description": "The state of the transit gateway peering", + "type": "string" + }, + "EdgeLocation": { + "description": "The location of the transit gateway peering", + "type": "string" + }, + "ResourceArn": { + "description": "The ARN (Amazon Resource Name) of the resource that you will peer to a core network", + "type": "string" + }, + "OwnerAccountId": { + "description": "Peering owner account Id", + "type": "string" + }, + "PeeringType": { + "description": "Peering type (TransitGatewayPeering)", + "type": "string" + }, + "CreatedAt": { + "description": "The creation time of the transit gateway peering", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "CoreNetworkId", + "TransitGatewayArn" + ], + "readOnlyProperties": [ + "/properties/CoreNetworkArn", + "/properties/PeeringId", + "/properties/State", + "/properties/PeeringType", + "/properties/OwnerAccountId", + "/properties/EdgeLocation", + "/properties/ResourceArn", + "/properties/CreatedAt", + "/properties/TransitGatewayPeeringAttachmentId" + ], + "createOnlyProperties": [ + "/properties/CoreNetworkId", + "/properties/TransitGatewayArn" + ], + "primaryIdentifier": [ + "/properties/PeeringId" + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateTransitGatewayPeering", + "networkmanager:TagResource", + "networkmanager:GetTransitGatewayPeering", + "iam:CreateServiceLinkedRole", + "ec2:CreateTransitGatewayPeeringAttachment", + "ec2:AcceptTransitGatewayPeeringAttachment", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 60 + }, + "read": { + "permissions": [ + "networkmanager:GetTransitGatewayPeering", + "networkmanager:TagResource" + ] + }, + "update": { + "permissions": [ + "networkmanager:TagResource", + "networkmanager:UntagResource", + "networkmanager:ListTagsForResource", + "networkmanager:GetTransitGatewayPeering", + "ec2:DescribeRegions" + ] + }, + "delete": { + "permissions": [ + "networkmanager:DeletePeering", + "networkmanager:GetTransitGatewayPeering", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 60 + }, + "list": { + "permissions": [ + "networkmanager:ListPeerings" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/transitgatewayregistration.json b/internal/aws/cfn/schemas/aws/networkmanager/transitgatewayregistration.json new file mode 100644 index 00000000..5962f938 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/transitgatewayregistration.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::NetworkManager::TransitGatewayRegistration", + "description": "The AWS::NetworkManager::TransitGatewayRegistration type registers a transit gateway in your global network. The transit gateway can be in any AWS Region, but it must be owned by the same AWS account that owns the global network. You cannot register a transit gateway in more than one global network.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager.git", + "properties": { + "GlobalNetworkId": { + "description": "The ID of the global network.", + "type": "string" + }, + "TransitGatewayArn": { + "description": "The Amazon Resource Name (ARN) of the transit gateway.", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "GlobalNetworkId", + "TransitGatewayArn" + ], + "createOnlyProperties": [ + "/properties/GlobalNetworkId", + "/properties/TransitGatewayArn" + ], + "primaryIdentifier": [ + "/properties/GlobalNetworkId", + "/properties/TransitGatewayArn" + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:RegisterTransitGateway", + "networkmanager:GetTransitGatewayRegistrations" + ], + "timeoutInMinutes": 30 + }, + "read": { + "permissions": [ + "networkmanager:GetTransitGatewayRegistrations" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "GlobalNetworkId": { + "$ref": "resource-schema.json#/properties/GlobalNetworkId" + } + }, + "required": [ + "GlobalNetworkId" + ] + }, + "permissions": [ + "networkmanager:GetTransitGatewayRegistrations" + ] + }, + "delete": { + "permissions": [ + "networkmanager:DeregisterTransitGateway", + "networkmanager:GetTransitGatewayRegistrations" + ], + "timeoutInMinutes": 30 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/transitgatewayroutetableattachment.json b/internal/aws/cfn/schemas/aws/networkmanager/transitgatewayroutetableattachment.json new file mode 100644 index 00000000..b0ee08d6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/transitgatewayroutetableattachment.json @@ -0,0 +1,192 @@ +{ + "typeName": "AWS::NetworkManager::TransitGatewayRouteTableAttachment", + "description": "AWS::NetworkManager::TransitGatewayRouteTableAttachment Resource Type definition.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager/aws-networkmanager-transitgatewayroutetableattachment", + "definitions": { + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "type": "object", + "properties": { + "Tags": { + "description": "The key-value tags that changed for the segment.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AttachmentPolicyRuleNumber": { + "description": "The rule number in the policy document that applies to this change.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment to change.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "insertionOrder": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "PeeringId": { + "description": "The Id of peering between transit gateway and core network.", + "type": "string" + }, + "TransitGatewayRouteTableArn": { + "description": "The Arn of transit gateway route table.", + "type": "string" + }, + "CoreNetworkId": { + "description": "The ID of a core network where you're creating a site-to-site VPN attachment.", + "type": "string" + }, + "CoreNetworkArn": { + "description": "The ARN of a core network for the VPC attachment.", + "type": "string" + }, + "AttachmentId": { + "description": "The ID of the attachment.", + "type": "string" + }, + "OwnerAccountId": { + "description": "Owner account of the attachment.", + "type": "string" + }, + "AttachmentType": { + "description": "The type of attachment.", + "type": "string" + }, + "State": { + "description": "The state of the attachment.", + "type": "string" + }, + "EdgeLocation": { + "description": "The Region where the edge is located.", + "type": "string" + }, + "ResourceArn": { + "description": "The ARN of the Resource.", + "type": "string" + }, + "AttachmentPolicyRuleNumber": { + "description": "The policy rule number associated with the attachment.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment that attachment is in.", + "type": "string" + }, + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "$ref": "#/definitions/ProposedSegmentChange" + }, + "CreatedAt": { + "description": "Creation time of the attachment.", + "type": "string" + }, + "UpdatedAt": { + "description": "Last update time of the attachment.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "PeeringId", + "TransitGatewayRouteTableArn" + ], + "createOnlyProperties": [ + "/properties/PeeringId", + "/properties/TransitGatewayRouteTableArn" + ], + "readOnlyProperties": [ + "/properties/CoreNetworkArn", + "/properties/CoreNetworkId", + "/properties/CreatedAt", + "/properties/UpdatedAt", + "/properties/AttachmentType", + "/properties/State", + "/properties/ResourceArn", + "/properties/AttachmentId", + "/properties/OwnerAccountId", + "/properties/EdgeLocation", + "/properties/AttachmentPolicyRuleNumber", + "/properties/SegmentName" + ], + "primaryIdentifier": [ + "/properties/AttachmentId" + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateTransitGatewayRouteTableAttachment", + "networkmanager:GetTransitGatewayRouteTableAttachment", + "networkmanager:TagResource", + "iam:CreateServiceLinkedRole", + "ec2:DescribeRegions" + ] + }, + "read": { + "permissions": [ + "networkmanager:GetTransitGatewayRouteTableAttachment" + ] + }, + "update": { + "permissions": [ + "networkmanager:GetTransitGatewayRouteTableAttachment", + "networkmanager:ListTagsForResource", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "ec2:DescribeRegions" + ] + }, + "delete": { + "permissions": [ + "networkmanager:GetTransitGatewayRouteTableAttachment", + "networkmanager:DeleteAttachment", + "ec2:DescribeRegions" + ] + }, + "list": { + "permissions": [ + "networkmanager:ListAttachments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/networkmanager/vpcattachment.json b/internal/aws/cfn/schemas/aws/networkmanager/vpcattachment.json new file mode 100644 index 00000000..fe1ee655 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/networkmanager/vpcattachment.json @@ -0,0 +1,227 @@ +{ + "typeName": "AWS::NetworkManager::VpcAttachment", + "description": "AWS::NetworkManager::VpcAttachment Resoruce Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-networkmanager/aws-networkmanager-vpcattachment", + "properties": { + "CoreNetworkId": { + "description": "The ID of a core network for the VPC attachment.", + "type": "string" + }, + "CoreNetworkArn": { + "description": "The ARN of a core network for the VPC attachment.", + "type": "string" + }, + "AttachmentId": { + "description": "Id of the attachment.", + "type": "string" + }, + "OwnerAccountId": { + "description": "Owner account of the attachment.", + "type": "string" + }, + "AttachmentType": { + "description": "Attachment type.", + "type": "string" + }, + "State": { + "description": "State of the attachment.", + "type": "string" + }, + "EdgeLocation": { + "description": "The Region where the edge is located.", + "type": "string" + }, + "VpcArn": { + "description": "The ARN of the VPC.", + "type": "string" + }, + "ResourceArn": { + "description": "The ARN of the Resource.", + "type": "string" + }, + "AttachmentPolicyRuleNumber": { + "description": "The policy rule number associated with the attachment.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment attachment..", + "type": "string" + }, + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "$ref": "#/definitions/ProposedSegmentChange" + }, + "Tags": { + "description": "Tags for the attachment.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreatedAt": { + "description": "Creation time of the attachment.", + "type": "string" + }, + "UpdatedAt": { + "description": "Last update time of the attachment.", + "type": "string" + }, + "SubnetArns": { + "description": "Subnet Arn list", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Options": { + "description": "Vpc options of the attachment.", + "$ref": "#/definitions/VpcOptions" + } + }, + "definitions": { + "VpcOptions": { + "description": "Vpc options of the attachment.", + "type": "object", + "properties": { + "Ipv6Support": { + "description": "Indicates whether to enable Ipv6 Support for Vpc Attachment. Valid Values: enable | disable", + "type": "boolean", + "default": false + }, + "ApplianceModeSupport": { + "description": "Indicates whether to enable ApplianceModeSupport Support for Vpc Attachment. Valid Values: true | false", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "ProposedSegmentChange": { + "description": "The attachment to move from one segment to another.", + "type": "object", + "properties": { + "Tags": { + "description": "The key-value tags that changed for the segment.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AttachmentPolicyRuleNumber": { + "description": "The rule number in the policy document that applies to this change.", + "type": "integer" + }, + "SegmentName": { + "description": "The name of the segment to change.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "CoreNetworkId", + "VpcArn", + "SubnetArns" + ], + "createOnlyProperties": [ + "/properties/CoreNetworkId", + "/properties/VpcArn" + ], + "readOnlyProperties": [ + "/properties/CoreNetworkArn", + "/properties/CreatedAt", + "/properties/UpdatedAt", + "/properties/AttachmentType", + "/properties/State", + "/properties/AttachmentId", + "/properties/OwnerAccountId", + "/properties/EdgeLocation", + "/properties/AttachmentPolicyRuleNumber", + "/properties/SegmentName", + "/properties/ResourceArn" + ], + "primaryIdentifier": [ + "/properties/AttachmentId" + ], + "additionalIdentifiers": [ + [ + "/properties/CoreNetworkId", + "/properties/VpcArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "networkmanager:CreateVpcAttachment", + "networkmanager:GetVpcAttachment", + "networkmanager:TagResource", + "ec2:DescribeRegions", + "iam:CreateServiceLinkedRole" + ], + "timeoutInMinutes": 60 + }, + "read": { + "permissions": [ + "networkmanager:GetVpcAttachment" + ] + }, + "update": { + "permissions": [ + "networkmanager:UpdateVpcAttachment", + "networkmanager:GetVpcAttachment", + "networkmanager:ListTagsForResource", + "networkmanager:TagResource", + "networkmanager:UntagResource", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 60 + }, + "delete": { + "permissions": [ + "networkmanager:DeleteAttachment", + "networkmanager:GetVpcAttachment", + "networkmanager:UntagResource", + "ec2:DescribeRegions" + ], + "timeoutInMinutes": 60 + }, + "list": { + "permissions": [ + "networkmanager:ListAttachments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/nimblestudio/launchprofile.json b/internal/aws/cfn/schemas/aws/nimblestudio/launchprofile.json new file mode 100644 index 00000000..a3f1d33e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/nimblestudio/launchprofile.json @@ -0,0 +1,347 @@ +{ + "typeName": "AWS::NimbleStudio::LaunchProfile", + "description": "Represents a launch profile which delegates access to a collection of studio components to studio users", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-nimblestudio", + "definitions": { + "AutomaticTerminationMode": { + "type": "string", + "enum": [ + "DEACTIVATED", + "ACTIVATED" + ] + }, + "SessionBackupMode": { + "type": "string", + "enum": [ + "AUTOMATIC", + "DEACTIVATED" + ] + }, + "SessionPersistenceMode": { + "type": "string", + "enum": [ + "DEACTIVATED", + "ACTIVATED" + ] + }, + "StreamConfiguration": { + "type": "object", + "description": "

A configuration for a streaming session.

", + "properties": { + "ClipboardMode": { + "$ref": "#/definitions/StreamingClipboardMode" + }, + "Ec2InstanceTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/StreamingInstanceType" + }, + "maxItems": 30, + "minItems": 1, + "description": "

The EC2 instance types that users can select from when launching a streaming session\n with this launch profile.

" + }, + "MaxSessionLengthInMinutes": { + "type": "number", + "default": 690, + "maximum": 43200, + "minimum": 1, + "description": "

The length of time, in minutes, that a streaming session can be active before it is\n stopped or terminated. After this point, Nimble Studio automatically terminates or\n stops the session. The default length of time is 690 minutes, and the maximum length of\n time is 30 days.

" + }, + "StreamingImageIds": { + "type": "array", + "items": { + "type": "string", + "maxLength": 22, + "minLength": 0, + "pattern": "^[a-zA-Z0-9-_]*$" + }, + "maxItems": 20, + "minItems": 1, + "description": "

The streaming images that users can select from when launching a streaming session\n with this launch profile.

" + }, + "MaxStoppedSessionLengthInMinutes": { + "type": "number", + "default": 0, + "maximum": 5760, + "minimum": 0, + "description": "

Integer that determines if you can start and stop your sessions and how long a session\n can stay in the STOPPED state. The default value is 0. The maximum value is\n 5760.

\n

This field is allowed only when sessionPersistenceMode is\n ACTIVATED and automaticTerminationMode is\n ACTIVATED.

\n

If the value is set to 0, your sessions can?t be STOPPED. If you then\n call StopStreamingSession, the session fails. If the time that a session\n stays in the READY state exceeds the maxSessionLengthInMinutes\n value, the session will automatically be terminated (instead of\n STOPPED).

\n

If the value is set to a positive number, the session can be stopped. You can call\n StopStreamingSession to stop sessions in the READY state.\n If the time that a session stays in the READY state exceeds the\n maxSessionLengthInMinutes value, the session will automatically be\n stopped (instead of terminated).

" + }, + "SessionStorage": { + "$ref": "#/definitions/StreamConfigurationSessionStorage" + }, + "SessionBackup": { + "$ref": "#/definitions/StreamConfigurationSessionBackup" + }, + "SessionPersistenceMode": { + "$ref": "#/definitions/SessionPersistenceMode" + }, + "VolumeConfiguration": { + "$ref": "#/definitions/VolumeConfiguration" + }, + "AutomaticTerminationMode": { + "$ref": "#/definitions/AutomaticTerminationMode" + } + }, + "required": [ + "ClipboardMode", + "Ec2InstanceTypes", + "StreamingImageIds" + ], + "additionalProperties": false + }, + "StreamConfigurationSessionBackup": { + "type": "object", + "description": "

Configures how streaming sessions are backed up when launched from this launch\n profile.

", + "properties": { + "Mode": { + "$ref": "#/definitions/SessionBackupMode" + }, + "MaxBackupsToRetain": { + "type": "number", + "default": 0, + "maximum": 10, + "minimum": 0, + "description": "

The maximum number of backups that each streaming session created from this launch\n profile can have.

" + } + }, + "additionalProperties": false + }, + "StreamConfigurationSessionStorage": { + "type": "object", + "description": "

The configuration for a streaming session?s upload storage.

", + "properties": { + "Root": { + "$ref": "#/definitions/StreamingSessionStorageRoot" + }, + "Mode": { + "type": "array", + "items": { + "$ref": "#/definitions/StreamingSessionStorageMode" + }, + "minItems": 1, + "description": "

Allows artists to upload files to their workstations. The only valid option is\n UPLOAD.

" + } + }, + "required": [ + "Mode" + ], + "additionalProperties": false + }, + "StreamingClipboardMode": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "StreamingInstanceType": { + "type": "string", + "enum": [ + "g4dn.xlarge", + "g4dn.2xlarge", + "g4dn.4xlarge", + "g4dn.8xlarge", + "g4dn.12xlarge", + "g4dn.16xlarge", + "g3.4xlarge", + "g3s.xlarge", + "g5.xlarge", + "g5.2xlarge", + "g5.4xlarge", + "g5.8xlarge", + "g5.16xlarge" + ] + }, + "StreamingSessionStorageMode": { + "type": "string", + "enum": [ + "UPLOAD" + ] + }, + "StreamingSessionStorageRoot": { + "type": "object", + "description": "

The upload storage root location (folder) on streaming workstations where files are\n uploaded.

", + "properties": { + "Linux": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^(\\$HOME|/)[/]?([A-Za-z0-9-_]+/)*([A-Za-z0-9_-]+)$", + "description": "

The folder path in Linux workstations where files are uploaded.

" + }, + "Windows": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^((\\%HOMEPATH\\%)|[a-zA-Z]:)[\\\\/](?:[a-zA-Z0-9_-]+[\\\\/])*[a-zA-Z0-9_-]+$", + "description": "

The folder path in Windows workstations where files are uploaded.

" + } + }, + "additionalProperties": false + }, + "Tags": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "VolumeConfiguration": { + "type": "object", + "description": "

Custom volume configuration for the root volumes that are attached to streaming\n sessions.

\n

This parameter is only allowed when sessionPersistenceMode is\n ACTIVATED.

", + "properties": { + "Size": { + "type": "number", + "default": 500, + "maximum": 16000, + "minimum": 100, + "description": "

The size of the root volume that is attached to the streaming session. The root volume\n size is measured in GiBs.

" + }, + "Throughput": { + "type": "number", + "default": 125, + "maximum": 1000, + "minimum": 125, + "description": "

The throughput to provision for the root volume that is attached to the streaming\n session. The throughput is measured in MiB/s.

" + }, + "Iops": { + "type": "number", + "default": 3000, + "maximum": 16000, + "minimum": 3000, + "description": "

The number of I/O operations per second for the root volume that is attached to\n streaming session.

" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "

The description.

" + }, + "Ec2SubnetIds": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 6, + "minItems": 0, + "description": "

Specifies the IDs of the EC2 subnets where streaming sessions will be accessible from.\n These subnets must support the specified instance types.

" + }, + "LaunchProfileId": { + "type": "string" + }, + "LaunchProfileProtocolVersions": { + "type": "array", + "items": { + "type": "string", + "maxLength": 10, + "minLength": 0, + "pattern": "^2021\\-03\\-31$", + "description": "

The version number of the protocol that is used by the launch profile. The only valid\n version is \"2021-03-31\".

" + }, + "description": "

The version number of the protocol that is used by the launch profile. The only valid\n version is \"2021-03-31\".

" + }, + "Name": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

The name for the launch profile.

" + }, + "StreamConfiguration": { + "$ref": "#/definitions/StreamConfiguration" + }, + "StudioComponentIds": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "description": "

Unique identifiers for a collection of studio components that can be used with this\n launch profile.

" + }, + "StudioId": { + "type": "string", + "description": "

The studio ID.

" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "required": [ + "StudioId", + "Name", + "StudioComponentIds", + "Ec2SubnetIds", + "StreamConfiguration", + "LaunchProfileProtocolVersions" + ], + "readOnlyProperties": [ + "/properties/LaunchProfileId" + ], + "createOnlyProperties": [ + "/properties/Ec2SubnetIds", + "/properties/StudioId", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/LaunchProfileId", + "/properties/StudioId" + ], + "handlers": { + "create": { + "permissions": [ + "nimble:CreateLaunchProfile", + "nimble:GetLaunchProfile", + "nimble:TagResource", + "ec2:CreateNetworkInterface", + "ec2:CreateNetworkInterfacePermission", + "ec2:RunInstances", + "ec2:DescribeSubnets" + ] + }, + "read": { + "permissions": [ + "nimble:GetLaunchProfile" + ] + }, + "update": { + "permissions": [ + "nimble:UpdateLaunchProfile", + "nimble:GetLaunchProfile", + "ec2:CreateNetworkInterface", + "ec2:CreateNetworkInterfacePermission", + "ec2:DescribeSubnets", + "ec2:RunInstances" + ] + }, + "delete": { + "permissions": [ + "nimble:DeleteLaunchProfile", + "nimble:GetLaunchProfile", + "nimble:UntagResource" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "StudioId": { + "$ref": "resource-schema.json#/properties/StudioId" + } + }, + "required": [ + "StudioId" + ] + }, + "permissions": [ + "nimble:ListLaunchProfiles" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/nimblestudio/streamingimage.json b/internal/aws/cfn/schemas/aws/nimblestudio/streamingimage.json new file mode 100644 index 00000000..6bae17ae --- /dev/null +++ b/internal/aws/cfn/schemas/aws/nimblestudio/streamingimage.json @@ -0,0 +1,177 @@ +{ + "typeName": "AWS::NimbleStudio::StreamingImage", + "description": "Represents a streaming session machine image that can be used to launch a streaming session", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-nimblestudio", + "definitions": { + "StreamingImageEncryptionConfiguration": { + "type": "object", + "description": "

TODO

", + "properties": { + "KeyType": { + "$ref": "#/definitions/StreamingImageEncryptionConfigurationKeyType" + }, + "KeyArn": { + "type": "string", + "minLength": 4, + "pattern": "^arn:.*", + "description": "

The ARN for a KMS key that is used to encrypt studio data.

" + } + }, + "required": [ + "KeyType" + ], + "additionalProperties": false + }, + "StreamingImageEncryptionConfigurationKeyType": { + "type": "string", + "description": "

", + "enum": [ + "CUSTOMER_MANAGED_KEY" + ] + }, + "Tags": { + "type": "object", + "description": "", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "

A human-readable description of the streaming image.

" + }, + "Ec2ImageId": { + "type": "string", + "pattern": "^ami-[0-9A-z]+$", + "description": "

The ID of an EC2 machine image with which to create this streaming image.

" + }, + "EncryptionConfiguration": { + "$ref": "#/definitions/StreamingImageEncryptionConfiguration" + }, + "EulaIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "

The list of EULAs that must be accepted before a Streaming Session can be started using this streaming image.

" + }, + "Name": { + "type": "string", + "maxLength": 64, + "minLength": 0, + "description": "

A friendly name for a streaming image resource.

" + }, + "Owner": { + "type": "string", + "description": "

The owner of the streaming image, either the studioId that contains the streaming image, or 'amazon' for images that are provided by Amazon Nimble Studio.

" + }, + "Platform": { + "type": "string", + "pattern": "^[a-zA-Z]*$", + "description": "

The platform of the streaming image, either WINDOWS or LINUX.

" + }, + "StreamingImageId": { + "type": "string" + }, + "StudioId": { + "type": "string", + "description": "

The studioId.

" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "readOnlyProperties": [ + "/properties/EncryptionConfiguration", + "/properties/EulaIds", + "/properties/Owner", + "/properties/Platform", + "/properties/StreamingImageId" + ], + "createOnlyProperties": [ + "/properties/Ec2ImageId", + "/properties/StudioId", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/StudioId", + "/properties/StreamingImageId" + ], + "required": [ + "StudioId", + "Ec2ImageId", + "Name" + ], + "handlers": { + "create": { + "permissions": [ + "nimble:CreateStreamingImage", + "nimble:GetStreamingImage", + "nimble:TagResource", + "ec2:DescribeImages", + "ec2:DescribeSnapshots", + "ec2:ModifyInstanceAttribute", + "ec2:ModifySnapshotAttribute", + "ec2:ModifyImageAttribute", + "ec2:RegisterImage", + "kms:Encrypt", + "kms:Decrypt", + "kms:CreateGrant", + "kms:ListGrants", + "kms:GenerateDataKey" + ] + }, + "read": { + "permissions": [ + "nimble:GetStreamingImage" + ] + }, + "update": { + "permissions": [ + "nimble:UpdateStreamingImage", + "nimble:GetStreamingImage", + "kms:Encrypt", + "kms:Decrypt", + "kms:CreateGrant", + "kms:ListGrants", + "kms:GenerateDataKey" + ] + }, + "delete": { + "permissions": [ + "nimble:DeleteStreamingImage", + "nimble:GetStreamingImage", + "nimble:UntagResource", + "ec2:ModifyInstanceAttribute", + "ec2:ModifySnapshotAttribute", + "ec2:DeregisterImage", + "ec2:DeleteSnapshot", + "kms:ListGrants", + "kms:RetireGrant" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "StudioId": { + "$ref": "resource-schema.json#/properties/StudioId" + } + }, + "required": [ + "StudioId" + ] + }, + "permissions": [ + "nimble:ListStreamingImages" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/nimblestudio/studio.json b/internal/aws/cfn/schemas/aws/nimblestudio/studio.json new file mode 100644 index 00000000..1269045e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/nimblestudio/studio.json @@ -0,0 +1,167 @@ +{ + "typeName": "AWS::NimbleStudio::Studio", + "description": "Represents a studio that contains other Nimble Studio resources", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-nimblestudio", + "definitions": { + "StudioEncryptionConfiguration": { + "type": "object", + "description": "

Configuration of the encryption method that is used for the studio.

", + "properties": { + "KeyType": { + "$ref": "#/definitions/StudioEncryptionConfigurationKeyType" + }, + "KeyArn": { + "type": "string", + "minLength": 4, + "pattern": "^arn:.*", + "description": "

The ARN for a KMS key that is used to encrypt studio data.

" + } + }, + "required": [ + "KeyType" + ], + "additionalProperties": false + }, + "StudioEncryptionConfigurationKeyType": { + "type": "string", + "description": "

The type of KMS key that is used to encrypt studio data.

", + "enum": [ + "AWS_OWNED_KEY", + "CUSTOMER_MANAGED_KEY" + ] + }, + "Tags": { + "type": "object", + "description": "", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "AdminRoleArn": { + "type": "string", + "description": "

The IAM role that Studio Admins will assume when logging in to the Nimble Studio portal.

" + }, + "DisplayName": { + "type": "string", + "maxLength": 64, + "minLength": 0, + "description": "

A friendly name for the studio.

" + }, + "HomeRegion": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "pattern": "[a-z]{2}-?(iso|gov)?-{1}[a-z]*-{1}[0-9]", + "description": "

The Amazon Web Services Region where the studio resource is located.

" + }, + "SsoClientId": { + "type": "string", + "description": "

The Amazon Web Services SSO application client ID used to integrate with Amazon Web Services SSO to enable Amazon Web Services SSO users to log in to Nimble Studio portal.

" + }, + "StudioEncryptionConfiguration": { + "$ref": "#/definitions/StudioEncryptionConfiguration" + }, + "StudioId": { + "type": "string" + }, + "StudioName": { + "type": "string", + "maxLength": 64, + "minLength": 3, + "pattern": "^[a-z0-9]*$", + "description": "

The studio name that is used in the URL of the Nimble Studio portal when accessed by Nimble Studio users.

" + }, + "StudioUrl": { + "type": "string", + "description": "

The address of the web page for the studio.

" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "UserRoleArn": { + "type": "string", + "description": "

The IAM role that Studio Users will assume when logging in to the Nimble Studio portal.

" + } + }, + "readOnlyProperties": [ + "/properties/HomeRegion", + "/properties/SsoClientId", + "/properties/StudioId", + "/properties/StudioUrl" + ], + "createOnlyProperties": [ + "/properties/StudioName", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/StudioId" + ], + "required": [ + "DisplayName", + "UserRoleArn", + "AdminRoleArn", + "StudioName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "nimble:CreateStudio", + "nimble:GetStudio", + "nimble:TagResource", + "sso:CreateManagedApplicationInstance", + "kms:Encrypt", + "kms:Decrypt", + "kms:CreateGrant", + "kms:ListGrants", + "kms:GenerateDataKey" + ] + }, + "read": { + "permissions": [ + "nimble:GetStudio", + "kms:Encrypt", + "kms:Decrypt", + "kms:ListGrants", + "kms:GenerateDataKey" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "nimble:UpdateStudio", + "nimble:GetStudio", + "kms:Encrypt", + "kms:Decrypt", + "kms:CreateGrant", + "kms:ListGrants", + "kms:GenerateDataKey" + ] + }, + "delete": { + "permissions": [ + "nimble:DeleteStudio", + "nimble:GetStudio", + "nimble:UntagResource", + "kms:Encrypt", + "kms:Decrypt", + "kms:ListGrants", + "kms:RetireGrant", + "kms:GenerateDataKey", + "sso:DeleteManagedApplicationInstance", + "sso:GetManagedApplicationInstance" + ] + }, + "list": { + "permissions": [ + "nimble:ListStudios" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/nimblestudio/studiocomponent.json b/internal/aws/cfn/schemas/aws/nimblestudio/studiocomponent.json new file mode 100644 index 00000000..2a641082 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/nimblestudio/studiocomponent.json @@ -0,0 +1,393 @@ +{ + "typeName": "AWS::NimbleStudio::StudioComponent", + "description": "Represents a studio component that connects a non-Nimble Studio resource in your account to your studio", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-nimblestudio", + "definitions": { + "ActiveDirectoryComputerAttribute": { + "type": "object", + "description": "

An LDAP attribute of an Active Directory computer account, in the form of a name:value\n pair.

", + "properties": { + "Name": { + "type": "string", + "maxLength": 40, + "minLength": 1, + "description": "

The name for the LDAP attribute.

" + }, + "Value": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

The value for the LDAP attribute.

" + } + }, + "additionalProperties": false + }, + "ActiveDirectoryConfiguration": { + "type": "object", + "description": "

The configuration for a Microsoft Active Directory (Microsoft AD) studio\n resource.

", + "properties": { + "ComputerAttributes": { + "type": "array", + "items": { + "$ref": "#/definitions/ActiveDirectoryComputerAttribute" + }, + "maxItems": 50, + "minItems": 0, + "description": "

A collection of custom attributes for an Active Directory computer.

" + }, + "DirectoryId": { + "type": "string", + "description": "

The directory ID of the Directory Service for Microsoft Active Directory to access\n using this studio component.

" + }, + "OrganizationalUnitDistinguishedName": { + "type": "string", + "maxLength": 2000, + "minLength": 1, + "description": "

The distinguished name (DN) and organizational unit (OU) of an Active Directory\n computer.

" + } + }, + "additionalProperties": false + }, + "ComputeFarmConfiguration": { + "type": "object", + "description": "

The configuration for a render farm that is associated with a studio resource.

", + "properties": { + "ActiveDirectoryUser": { + "type": "string", + "description": "

The name of an Active Directory user that is used on ComputeFarm worker\n instances.

" + }, + "Endpoint": { + "type": "string", + "description": "

The endpoint of the ComputeFarm that is accessed by the studio component\n resource.

" + } + }, + "additionalProperties": false + }, + "LaunchProfilePlatform": { + "type": "string", + "enum": [ + "LINUX", + "WINDOWS" + ] + }, + "LicenseServiceConfiguration": { + "type": "object", + "description": "

The configuration for a license service that is associated with a studio\n resource.

", + "properties": { + "Endpoint": { + "type": "string", + "description": "

The endpoint of the license service that is accessed by the studio component\n resource.

" + } + }, + "additionalProperties": false + }, + "ScriptParameterKeyValue": { + "type": "object", + "description": "

A parameter for a studio component script, in the form of a key:value pair.

", + "properties": { + "Key": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^[a-zA-Z_][a-zA-Z0-9_]+$", + "description": "

A script parameter key.

" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

A script parameter value.

" + } + }, + "additionalProperties": false + }, + "SharedFileSystemConfiguration": { + "type": "object", + "description": "

The configuration for a shared file storage system that is associated with a studio\n resource.

", + "properties": { + "Endpoint": { + "type": "string", + "description": "

The endpoint of the shared file system that is accessed by the studio component\n resource.

" + }, + "FileSystemId": { + "type": "string", + "description": "

The unique identifier for a file system.

" + }, + "LinuxMountPoint": { + "type": "string", + "maxLength": 128, + "minLength": 0, + "pattern": "^(/?|(\\$HOME)?(/[^/\\n\\s\\\\]+)*)$", + "description": "

The mount location for a shared file system on a Linux virtual workstation.

" + }, + "ShareName": { + "type": "string", + "description": "

The name of the file share.

" + }, + "WindowsMountDrive": { + "type": "string", + "pattern": "^[A-Z]$", + "description": "

The mount location for a shared file system on a Windows virtual workstation.

" + } + }, + "additionalProperties": false + }, + "StudioComponentConfiguration": { + "description": "

The configuration of the studio component, based on component type.

", + "oneOf": [ + { + "type": "object", + "title": "ActiveDirectoryConfiguration", + "properties": { + "ActiveDirectoryConfiguration": { + "$ref": "#/definitions/ActiveDirectoryConfiguration" + } + }, + "required": [ + "ActiveDirectoryConfiguration" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "ComputeFarmConfiguration", + "properties": { + "ComputeFarmConfiguration": { + "$ref": "#/definitions/ComputeFarmConfiguration" + } + }, + "required": [ + "ComputeFarmConfiguration" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "LicenseServiceConfiguration", + "properties": { + "LicenseServiceConfiguration": { + "$ref": "#/definitions/LicenseServiceConfiguration" + } + }, + "required": [ + "LicenseServiceConfiguration" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "SharedFileSystemConfiguration", + "properties": { + "SharedFileSystemConfiguration": { + "$ref": "#/definitions/SharedFileSystemConfiguration" + } + }, + "required": [ + "SharedFileSystemConfiguration" + ], + "additionalProperties": false + } + ] + }, + "StudioComponentInitializationScript": { + "type": "object", + "description": "

Initialization scripts for studio components.

", + "properties": { + "LaunchProfileProtocolVersion": { + "type": "string", + "maxLength": 10, + "minLength": 0, + "pattern": "^2021\\-03\\-31$", + "description": "

The version number of the protocol that is used by the launch profile. The only valid\n version is \"2021-03-31\".

" + }, + "Platform": { + "$ref": "#/definitions/LaunchProfilePlatform" + }, + "RunContext": { + "$ref": "#/definitions/StudioComponentInitializationScriptRunContext" + }, + "Script": { + "type": "string", + "maxLength": 5120, + "minLength": 1, + "description": "

The initialization script.

" + } + }, + "additionalProperties": false + }, + "StudioComponentInitializationScriptRunContext": { + "type": "string", + "enum": [ + "SYSTEM_INITIALIZATION", + "USER_INITIALIZATION" + ] + }, + "StudioComponentSubtype": { + "type": "string", + "enum": [ + "AWS_MANAGED_MICROSOFT_AD", + "AMAZON_FSX_FOR_WINDOWS", + "AMAZON_FSX_FOR_LUSTRE", + "CUSTOM" + ] + }, + "StudioComponentType": { + "type": "string", + "enum": [ + "ACTIVE_DIRECTORY", + "SHARED_FILE_SYSTEM", + "COMPUTE_FARM", + "LICENSE_SERVICE", + "CUSTOM" + ] + }, + "Tags": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Configuration": { + "$ref": "#/definitions/StudioComponentConfiguration" + }, + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "

The description.

" + }, + "Ec2SecurityGroupIds": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 30, + "minItems": 0, + "description": "

The EC2 security groups that control access to the studio component.

" + }, + "InitializationScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/StudioComponentInitializationScript" + }, + "description": "

Initialization scripts for studio components.

" + }, + "Name": { + "type": "string", + "maxLength": 64, + "minLength": 0, + "description": "

The name for the studio component.

" + }, + "RuntimeRoleArn": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "ScriptParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/ScriptParameterKeyValue" + }, + "maxItems": 30, + "minItems": 0, + "description": "

Parameters for the studio component scripts.

" + }, + "SecureInitializationRoleArn": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "StudioComponentId": { + "type": "string" + }, + "StudioId": { + "type": "string", + "description": "

The studio ID.

" + }, + "Subtype": { + "$ref": "#/definitions/StudioComponentSubtype" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "Type": { + "$ref": "#/definitions/StudioComponentType" + } + }, + "required": [ + "StudioId", + "Name", + "Type" + ], + "readOnlyProperties": [ + "/properties/StudioComponentId" + ], + "createOnlyProperties": [ + "/properties/StudioId", + "/properties/Subtype", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/StudioComponentId", + "/properties/StudioId" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "nimble:CreateStudioComponent", + "nimble:GetStudioComponent", + "nimble:TagResource", + "ds:AuthorizeApplication", + "ec2:DescribeSecurityGroups", + "fsx:DescribeFilesystems", + "ds:DescribeDirectories" + ] + }, + "read": { + "permissions": [ + "nimble:GetStudioComponent" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "nimble:UpdateStudioComponent", + "nimble:GetStudioComponent", + "ds:AuthorizeApplication", + "ec2:DescribeSecurityGroups", + "fsx:DescribeFilesystems", + "ds:DescribeDirectories" + ] + }, + "delete": { + "permissions": [ + "nimble:DeleteStudioComponent", + "nimble:GetStudioComponent", + "nimble:UntagResource", + "ds:UnauthorizeApplication" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "StudioId": { + "$ref": "resource-schema.json#/properties/StudioId" + } + }, + "required": [ + "StudioId" + ] + }, + "permissions": [ + "nimble:ListStudioComponents" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/oam/link.json b/internal/aws/cfn/schemas/aws/oam/link.json new file mode 100644 index 00000000..a0bf5541 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/oam/link.json @@ -0,0 +1,127 @@ +{ + "typeName": "AWS::Oam::Link", + "description": "Definition of AWS::Oam::Link Resource Type", + "definitions": { + "ResourceType": { + "type": "string", + "enum": [ + "AWS::CloudWatch::Metric", + "AWS::Logs::LogGroup", + "AWS::XRay::Trace", + "AWS::ApplicationInsights::Application", + "AWS::InternetMonitor::Monitor" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048 + }, + "Label": { + "type": "string" + }, + "LabelTemplate": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "ResourceTypes": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ResourceType" + }, + "maxItems": 50, + "minItems": 1, + "uniqueItems": true + }, + "SinkIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Tags": { + "description": "Tags to apply to the link", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]{0,256}$", + "minLength": 0, + "maxLength": 256 + } + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "required": [ + "ResourceTypes", + "SinkIdentifier" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Label" + ], + "createOnlyProperties": [ + "/properties/SinkIdentifier", + "/properties/LabelTemplate" + ], + "writeOnlyProperties": [ + "/properties/LabelTemplate" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "oam:CreateLink", + "oam:GetLink", + "cloudwatch:Link", + "logs:Link", + "xray:Link", + "applicationinsights:Link", + "internetmonitor:Link" + ] + }, + "read": { + "permissions": [ + "oam:GetLink" + ] + }, + "update": { + "permissions": [ + "oam:GetLink", + "oam:UpdateLink", + "cloudwatch:Link", + "logs:Link", + "xray:Link", + "applicationinsights:Link", + "internetmonitor:Link", + "oam:TagResource", + "oam:UntagResource" + ] + }, + "delete": { + "permissions": [ + "oam:DeleteLink", + "oam:GetLink" + ] + }, + "list": { + "permissions": [ + "oam:ListLinks" + ] + } + }, + "replacementStrategy": "delete_then_create", + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/oam/sink.json b/internal/aws/cfn/schemas/aws/oam/sink.json new file mode 100644 index 00000000..60cfdea5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/oam/sink.json @@ -0,0 +1,92 @@ +{ + "typeName": "AWS::Oam::Sink", + "description": "Resource Type definition for AWS::Oam::Sink", + "properties": { + "Arn": { + "description": "The Amazon resource name (ARN) of the ObservabilityAccessManager Sink", + "type": "string", + "maxLength": 2048 + }, + "Name": { + "description": "The name of the ObservabilityAccessManager Sink.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[a-zA-Z0-9_.-]+$" + }, + "Policy": { + "description": "The policy of this ObservabilityAccessManager Sink.", + "type": "object" + }, + "Tags": { + "description": "Tags to apply to the sink", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]{0,256}$", + "minLength": 0, + "maxLength": 256 + } + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "required": [ + "Name" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "oam:CreateSink", + "oam:PutSinkPolicy", + "oam:GetSinkPolicy", + "oam:GetSink" + ] + }, + "delete": { + "permissions": [ + "oam:DeleteSink", + "oam:GetSinkPolicy", + "oam:GetSink" + ] + }, + "list": { + "permissions": [ + "oam:ListSinks" + ] + }, + "read": { + "permissions": [ + "oam:GetSinkPolicy", + "oam:GetSink" + ] + }, + "update": { + "permissions": [ + "oam:PutSinkPolicy", + "oam:GetSinkPolicy", + "oam:GetSink", + "oam:TagResource", + "oam:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/omics/annotationstore.json b/internal/aws/cfn/schemas/aws/omics/annotationstore.json new file mode 100644 index 00000000..7a41f5e4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/omics/annotationstore.json @@ -0,0 +1,293 @@ +{ + "typeName": "AWS::Omics::AnnotationStore", + "description": "Definition of AWS::Omics::AnnotationStore Resource Type", + "definitions": { + "AnnotationType": { + "type": "string", + "enum": [ + "GENERIC", + "CHR_POS", + "CHR_POS_REF_ALT", + "CHR_START_END_ONE_BASE", + "CHR_START_END_REF_ALT_ONE_BASE", + "CHR_START_END_ZERO_BASE", + "CHR_START_END_REF_ALT_ZERO_BASE" + ] + }, + "EncryptionType": { + "type": "string", + "enum": [ + "KMS" + ] + }, + "FormatToHeader": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "FormatToHeaderKey": { + "type": "string", + "enum": [ + "CHR", + "START", + "END", + "REF", + "ALT", + "POS" + ] + }, + "ReferenceItem": { + "type": "object", + "properties": { + "ReferenceArn": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^arn:.+$" + } + }, + "required": [ + "ReferenceArn" + ], + "additionalProperties": false + }, + "SchemaItem": { + "type": "object", + "maxProperties": 1, + "minProperties": 1, + "patternProperties": { + "^[a-z0-9_]{1,255}$": { + "$ref": "#/definitions/SchemaValueType" + } + }, + "additionalProperties": false + }, + "SchemaValueType": { + "type": "string", + "enum": [ + "LONG", + "INT", + "STRING", + "FLOAT", + "DOUBLE", + "BOOLEAN" + ] + }, + "SseConfig": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/EncryptionType" + }, + "KeyArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "arn:([^:\n]*):([^:\n]*):([^:\n]*):([0-9]{12}):([^:\n]*)" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "StoreFormat": { + "type": "string", + "enum": [ + "GFF", + "TSV", + "VCF" + ] + }, + "StoreOptions": { + "oneOf": [ + { + "type": "object", + "title": "TsvStoreOptions", + "properties": { + "TsvStoreOptions": { + "$ref": "#/definitions/TsvStoreOptions" + } + }, + "required": [ + "TsvStoreOptions" + ], + "additionalProperties": false + } + ] + }, + "StoreStatus": { + "type": "string", + "enum": [ + "CREATING", + "UPDATING", + "DELETING", + "ACTIVE", + "FAILED" + ] + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "TsvStoreOptions": { + "type": "object", + "properties": { + "AnnotationType": { + "$ref": "#/definitions/AnnotationType" + }, + "FormatToHeader": { + "$ref": "#/definitions/FormatToHeader" + }, + "Schema": { + "type": "array", + "items": { + "$ref": "#/definitions/SchemaItem" + }, + "maxItems": 5000, + "minItems": 1, + "insertionOrder": false + } + }, + "additionalProperties": false + } + }, + "properties": { + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Description": { + "type": "string", + "maxLength": 500, + "minLength": 0 + }, + "Id": { + "type": "string", + "pattern": "^[a-f0-9]{12}$" + }, + "Name": { + "type": "string", + "pattern": "^([a-z]){1}([a-z0-9_]){2,254}" + }, + "Reference": { + "$ref": "#/definitions/ReferenceItem" + }, + "SseConfig": { + "$ref": "#/definitions/SseConfig" + }, + "Status": { + "$ref": "#/definitions/StoreStatus" + }, + "StatusMessage": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "StoreArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:([^:\n]*):([^:\n]*):([^:\n]*):([0-9]{12}):([^:\n]*)$" + }, + "StoreFormat": { + "$ref": "#/definitions/StoreFormat" + }, + "StoreOptions": { + "$ref": "#/definitions/StoreOptions" + }, + "StoreSizeBytes": { + "type": "number" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + }, + "UpdateTime": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "Name", + "StoreFormat" + ], + "readOnlyProperties": [ + "/properties/CreationTime", + "/properties/Id", + "/properties/Status", + "/properties/StatusMessage", + "/properties/StoreArn", + "/properties/StoreSizeBytes", + "/properties/UpdateTime" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Reference", + "/properties/SseConfig", + "/properties/StoreFormat", + "/properties/StoreOptions", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true + }, + "handlers": { + "create": { + "permissions": [ + "omics:CreateAnnotationStore", + "omics:TagResource", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:CreateGrant", + "ram:AcceptResourceShareInvitation", + "ram:GetResourceShareInvitations", + "omics:GetAnnotationStore" + ] + }, + "read": { + "permissions": [ + "omics:GetAnnotationStore" + ] + }, + "update": { + "permissions": [ + "omics:UpdateAnnotationStore", + "omics:TagResource", + "omics:UntagResource", + "omics:GetAnnotationStore", + "omics:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "omics:DeleteAnnotationStore", + "omics:ListAnnotationStores" + ] + }, + "list": { + "permissions": [ + "omics:ListAnnotationStores" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/omics/referencestore.json b/internal/aws/cfn/schemas/aws/omics/referencestore.json new file mode 100644 index 00000000..086dd597 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/omics/referencestore.json @@ -0,0 +1,134 @@ +{ + "typeName": "AWS::Omics::ReferenceStore", + "description": "Definition of AWS::Omics::ReferenceStore Resource Type", + "definitions": { + "EncryptionType": { + "type": "string", + "enum": [ + "KMS" + ] + }, + "SseConfig": { + "type": "object", + "description": "Server-side encryption (SSE) settings for a store.", + "properties": { + "Type": { + "$ref": "#/definitions/EncryptionType" + }, + "KeyArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "arn:([^:\n]*):([^:\n]*):([^:\n]*):([0-9]{12}):([^:\n]*)", + "description": "An encryption key ARN." + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^arn:.+$", + "description": "The store's ARN." + }, + "CreationTime": { + "type": "string", + "description": "When the store was created.", + "format": "date-time" + }, + "Description": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$", + "description": "A description for the store." + }, + "Name": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$", + "description": "A name for the store." + }, + "ReferenceStoreId": { + "type": "string", + "maxLength": 36, + "minLength": 10, + "pattern": "^[0-9]+$" + }, + "SseConfig": { + "$ref": "#/definitions/SseConfig" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/ReferenceStoreId" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/Name", + "/properties/SseConfig", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/ReferenceStoreId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true + }, + "handlers": { + "create": { + "permissions": [ + "omics:CreateReferenceStore", + "omics:TagResource" + ] + }, + "read": { + "permissions": [ + "omics:GetReferenceStore", + "omics:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "omics:DeleteReferenceStore" + ] + }, + "list": { + "permissions": [ + "omics:ListReferenceStores" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/omics/rungroup.json b/internal/aws/cfn/schemas/aws/omics/rungroup.json new file mode 100644 index 00000000..b43038bb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/omics/rungroup.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::Omics::RunGroup", + "description": "Definition of AWS::Omics::RunGroup Resource Type", + "definitions": { + "TagMap": { + "type": "object", + "description": "A map of resource tags", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "Resource tag value" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^arn:.+$" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Id": { + "type": "string", + "maxLength": 18, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "MaxCpus": { + "type": "number", + "maximum": 100000, + "minimum": 1 + }, + "MaxGpus": { + "type": "number", + "maximum": 100000, + "minimum": 1 + }, + "MaxDuration": { + "type": "number", + "maximum": 100000, + "minimum": 1 + }, + "MaxRuns": { + "type": "number", + "maximum": 100000, + "minimum": 1 + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "omics:CreateRunGroup", + "omics:TagResource" + ] + }, + "read": { + "permissions": [ + "omics:GetRunGroup" + ] + }, + "update": { + "permissions": [ + "omics:UpdateRunGroup", + "omics:TagResource", + "omics:GetRunGroup", + "omics:ListTagsForResource", + "omics:UntagResource" + ] + }, + "delete": { + "permissions": [ + "omics:DeleteRunGroup", + "omics:GetRunGroup" + ] + }, + "list": { + "permissions": [ + "omics:ListRunGroups" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/omics/sequencestore.json b/internal/aws/cfn/schemas/aws/omics/sequencestore.json new file mode 100644 index 00000000..9eee14d1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/omics/sequencestore.json @@ -0,0 +1,141 @@ +{ + "typeName": "AWS::Omics::SequenceStore", + "description": "Definition of AWS::Omics::SequenceStore Resource Type", + "definitions": { + "EncryptionType": { + "type": "string", + "enum": [ + "KMS" + ] + }, + "SseConfig": { + "type": "object", + "description": "Server-side encryption (SSE) settings for a store.", + "properties": { + "Type": { + "$ref": "#/definitions/EncryptionType" + }, + "KeyArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "arn:([^:\n]*):([^:\n]*):([^:\n]*):([0-9]{12}):([^:\n]*)", + "description": "An encryption key ARN." + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^arn:.+$", + "description": "The store's ARN." + }, + "CreationTime": { + "type": "string", + "description": "When the store was created.", + "format": "date-time" + }, + "Description": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$", + "description": "A description for the store." + }, + "Name": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$", + "description": "A name for the store." + }, + "FallbackLocation": { + "type": "string", + "minLength": 1, + "pattern": "^s3:\\/\\/([a-z0-9][a-z0-9-.]{1,61}[a-z0-9])\\/?((.{1,1024})\\/)?$", + "description": "An S3 URI representing the bucket and folder to store failed read set uploads." + }, + "SequenceStoreId": { + "type": "string", + "maxLength": 36, + "minLength": 10, + "pattern": "^[0-9]+$" + }, + "SseConfig": { + "$ref": "#/definitions/SseConfig" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/SequenceStoreId" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/Name", + "/properties/FallbackLocation", + "/properties/SseConfig", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/SequenceStoreId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true + }, + "handlers": { + "create": { + "permissions": [ + "omics:CreateSequenceStore", + "omics:TagResource" + ] + }, + "read": { + "permissions": [ + "omics:GetSequenceStore", + "omics:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "omics:DeleteSequenceStore" + ] + }, + "list": { + "permissions": [ + "omics:ListSequenceStores" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/omics/variantstore.json b/internal/aws/cfn/schemas/aws/omics/variantstore.json new file mode 100644 index 00000000..0f91ca86 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/omics/variantstore.json @@ -0,0 +1,183 @@ +{ + "typeName": "AWS::Omics::VariantStore", + "description": "Definition of AWS::Omics::VariantStore Resource Type", + "definitions": { + "EncryptionType": { + "type": "string", + "enum": [ + "KMS" + ] + }, + "ReferenceItem": { + "type": "object", + "properties": { + "ReferenceArn": { + "type": "string", + "maxLength": 127, + "minLength": 1, + "pattern": "^arn:.+$" + } + }, + "required": [ + "ReferenceArn" + ], + "additionalProperties": false + }, + "SseConfig": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/EncryptionType" + }, + "KeyArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "arn:([^:\n]*):([^:\n]*):([^:\n]*):([0-9]{12}):([^:\n]*)" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "StoreStatus": { + "type": "string", + "enum": [ + "CREATING", + "UPDATING", + "DELETING", + "ACTIVE", + "FAILED" + ] + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + } + }, + "properties": { + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "Description": { + "type": "string", + "maxLength": 500, + "minLength": 0 + }, + "Id": { + "type": "string", + "pattern": "^[a-f0-9]{12}$" + }, + "Name": { + "type": "string", + "pattern": "^([a-z]){1}([a-z0-9_]){2,254}" + }, + "Reference": { + "$ref": "#/definitions/ReferenceItem" + }, + "SseConfig": { + "$ref": "#/definitions/SseConfig" + }, + "Status": { + "$ref": "#/definitions/StoreStatus" + }, + "StatusMessage": { + "type": "string", + "maxLength": 1000, + "minLength": 0 + }, + "StoreArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:([^:\n]*):([^:\n]*):([^:\n]*):([0-9]{12}):([^:\n]*)$" + }, + "StoreSizeBytes": { + "type": "number" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + }, + "UpdateTime": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "Name", + "Reference" + ], + "readOnlyProperties": [ + "/properties/CreationTime", + "/properties/Id", + "/properties/Status", + "/properties/StatusMessage", + "/properties/StoreArn", + "/properties/StoreSizeBytes", + "/properties/UpdateTime" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Reference", + "/properties/SseConfig", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "omics:CreateVariantStore", + "omics:TagResource", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:CreateGrant", + "ram:AcceptResourceShareInvitation", + "ram:GetResourceShareInvitations", + "omics:GetVariantStore" + ] + }, + "read": { + "permissions": [ + "omics:GetVariantStore" + ] + }, + "update": { + "permissions": [ + "omics:UpdateVariantStore", + "omics:TagResource", + "omics:UntagResource", + "omics:ListTagsForResource", + "omics:GetVariantStore" + ] + }, + "delete": { + "permissions": [ + "omics:DeleteVariantStore", + "omics:ListVariantStores" + ] + }, + "list": { + "permissions": [ + "omics:ListVariantStores" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/omics/workflow.json b/internal/aws/cfn/schemas/aws/omics/workflow.json new file mode 100644 index 00000000..943c84aa --- /dev/null +++ b/internal/aws/cfn/schemas/aws/omics/workflow.json @@ -0,0 +1,220 @@ +{ + "typeName": "AWS::Omics::Workflow", + "description": "Definition of AWS::Omics::Workflow Resource Type", + "definitions": { + "TagMap": { + "type": "object", + "description": "A map of resource tags", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "Resource tag value" + } + }, + "additionalProperties": false + }, + "WorkflowEngine": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "enum": [ + "WDL", + "NEXTFLOW", + "CWL" + ] + }, + "Accelerators": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "enum": [ + "GPU" + ] + }, + "WorkflowParameter": { + "type": "object", + "properties": { + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$" + }, + "Optional": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "WorkflowParameterTemplate": { + "type": "object", + "maxProperties": 1000, + "minProperties": 1, + "patternProperties": { + "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$": { + "$ref": "#/definitions/WorkflowParameter" + } + }, + "additionalProperties": false + }, + "WorkflowStatus": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "enum": [ + "CREATING", + "ACTIVE", + "UPDATING", + "DELETED", + "FAILED" + ] + }, + "WorkflowType": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "enum": [ + "PRIVATE" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^arn:.+$" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "DefinitionUri": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$" + }, + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$" + }, + "Engine": { + "$ref": "#/definitions/WorkflowEngine" + }, + "Id": { + "type": "string", + "maxLength": 18, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "Main": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+$" + }, + "ParameterTemplate": { + "$ref": "#/definitions/WorkflowParameterTemplate" + }, + "Status": { + "$ref": "#/definitions/WorkflowStatus" + }, + "Accelerators": { + "$ref": "#/definitions/Accelerators" + }, + "StorageCapacity": { + "type": "number", + "maximum": 100000, + "minimum": 0 + }, + "Tags": { + "$ref": "#/definitions/TagMap" + }, + "Type": { + "$ref": "#/definitions/WorkflowType" + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/Id", + "/properties/Status", + "/properties/Type" + ], + "writeOnlyProperties": [ + "/properties/DefinitionUri" + ], + "createOnlyProperties": [ + "/properties/DefinitionUri", + "/properties/Engine", + "/properties/Main", + "/properties/ParameterTemplate", + "/properties/StorageCapacity", + "/properties/Accelerators" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "omics:CreateWorkflow", + "omics:GetWorkflow", + "omics:TagResource", + "s3:PutObject", + "s3:GetObject", + "s3:GetObjectAttributes", + "s3:HeadObject", + "s3:GetEncryptionConfiguration", + "kms:Decrypt", + "kms:GenerateDataKey", + "kms:GenerateDataKeyPair", + "kms:GenerateDataKeyPairWithoutPlaintext", + "kms:GenerateDataKeyWithoutPlaintext" + ] + }, + "read": { + "permissions": [ + "omics:GetWorkflow" + ] + }, + "update": { + "permissions": [ + "omics:UpdateWorkflow", + "omics:GetWorkflow", + "omics:TagResource", + "omics:ListTagsForResource", + "omics:UntagResource" + ] + }, + "delete": { + "permissions": [ + "omics:DeleteWorkflow", + "omics:GetWorkflow" + ] + }, + "list": { + "permissions": [ + "omics:ListWorkflows" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/opensearchserverless/accesspolicy.json b/internal/aws/cfn/schemas/aws/opensearchserverless/accesspolicy.json new file mode 100644 index 00000000..c828029d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opensearchserverless/accesspolicy.json @@ -0,0 +1,99 @@ +{ + "typeName": "AWS::OpenSearchServerless::AccessPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-opensearchserverless", + "description": "Amazon OpenSearchServerless access policy resource", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "definitions": { + "AccessPolicyType": { + "type": "string", + "description": "The possible types for the access policy", + "enum": [ + "data" + ] + } + }, + "properties": { + "Name": { + "type": "string", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-z][a-z0-9-]{2,31}$", + "description": "The name of the policy" + }, + "Type": { + "$ref": "#/definitions/AccessPolicyType" + }, + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 1, + "description": "The description of the policy" + }, + "Policy": { + "type": "string", + "minLength": 1, + "maxLength": 20480, + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]+", + "description": "The JSON policy document that is the content for the policy" + } + }, + "required": [ + "Type", + "Name", + "Policy" + ], + "createOnlyProperties": [ + "/properties/Type", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Type", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "aoss:CreateAccessPolicy", + "aoss:GetAccessPolicy" + ] + }, + "read": { + "permissions": [ + "aoss:GetAccessPolicy" + ] + }, + "update": { + "permissions": [ + "aoss:UpdateAccessPolicy", + "aoss:GetAccessPolicy" + ] + }, + "delete": { + "permissions": [ + "aoss:DeleteAccessPolicy", + "aoss:GetAccessPolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "Type": { + "$ref": "resource-schema.json#/properties/Type" + } + }, + "required": [ + "Type" + ] + }, + "permissions": [ + "aoss:ListAccessPolicies" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/opensearchserverless/collection.json b/internal/aws/cfn/schemas/aws/opensearchserverless/collection.json new file mode 100644 index 00000000..4f3a7b5f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opensearchserverless/collection.json @@ -0,0 +1,161 @@ +{ + "typeName": "AWS::OpenSearchServerless::Collection", + "description": "Amazon OpenSearchServerless collection resource", + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "definitions": { + "Tag": { + "type": "object", + "description": "A key-value pair metadata associated with resource", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "The key in the key-value pair" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "The value in the key-value pair" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "CollectionType": { + "type": "string", + "description": "The possible types for the collection", + "enum": [ + "SEARCH", + "TIMESERIES", + "VECTORSEARCH" + ] + }, + "StandbyReplicas": { + "type": "string", + "description": "The possible standby replicas for the collection", + "enum": [ + "ENABLED", + "DISABLED" + ] + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 1000, + "description": "The description of the collection" + }, + "Id": { + "type": "string", + "maxLength": 40, + "minLength": 3, + "description": "The identifier of the collection" + }, + "Name": { + "type": "string", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-z][a-z0-9-]{2,31}$", + "description": "The name of the collection.\n\nThe name must meet the following criteria:\nUnique to your account and AWS Region\nStarts with a lowercase letter\nContains only lowercase letters a-z, the numbers 0-9 and the hyphen (-)\nContains between 3 and 32 characters\n" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50, + "minItems": 0, + "insertionOrder": false, + "description": "List of tags to be added to the resource" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the collection.", + "type": "string" + }, + "CollectionEndpoint": { + "description": "The endpoint for the collection.", + "type": "string" + }, + "DashboardEndpoint": { + "description": "The OpenSearch Dashboards endpoint for the collection.", + "type": "string" + }, + "Type": { + "$ref": "#/definitions/CollectionType" + }, + "StandbyReplicas": { + "$ref": "#/definitions/StandbyReplicas" + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/CollectionEndpoint", + "/properties/DashboardEndpoint" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ], + [ + "/properties/Arn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "aoss:CreateCollection", + "aoss:BatchGetCollection", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "aoss:DeleteCollection", + "aoss:BatchGetCollection" + ] + }, + "list": { + "permissions": [ + "aoss:ListCollections" + ] + }, + "read": { + "permissions": [ + "aoss:BatchGetCollection" + ] + }, + "update": { + "permissions": [ + "aoss:UpdateCollection", + "aoss:BatchGetCollection" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/opensearchserverless/securityconfig.json b/internal/aws/cfn/schemas/aws/opensearchserverless/securityconfig.json new file mode 100644 index 00000000..c08b514c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opensearchserverless/securityconfig.json @@ -0,0 +1,139 @@ +{ + "typeName": "AWS::OpenSearchServerless::SecurityConfig", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-opensearchserverless", + "description": "Amazon OpenSearchServerless security config resource", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "definitions": { + "SamlConfigOptions": { + "type": "object", + "description": "Describes saml options in form of key value map", + "properties": { + "Metadata": { + "type": "string", + "description": "The XML saml provider metadata document that you want to use", + "maxLength": 51200, + "minLength": 1, + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]+" + }, + "UserAttribute": { + "type": "string", + "description": "Custom attribute for this saml integration", + "maxLength": 2048, + "minLength": 1, + "pattern": "[\\w+=,.@-]+" + }, + "GroupAttribute": { + "type": "string", + "description": "Group attribute for this saml integration", + "maxLength": 2048, + "minLength": 1, + "pattern": "[\\w+=,.@-]+" + }, + "SessionTimeout": { + "type": "integer", + "description": "Defines the session timeout in minutes" + } + }, + "required": [ + "Metadata" + ], + "additionalProperties": false + }, + "SecurityConfigType": { + "type": "string", + "description": "Config type for security config", + "enum": [ + "saml" + ] + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 1, + "description": "Security config description" + }, + "Id": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "description": "The identifier of the security config" + }, + "Name": { + "type": "string", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-z][a-z0-9-]{2,31}$", + "description": "The friendly name of the security config" + }, + "SamlOptions": { + "$ref": "#/definitions/SamlConfigOptions" + }, + "Type": { + "$ref": "#/definitions/SecurityConfigType" + } + }, + "readOnlyProperties": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Type", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "aoss:CreateSecurityConfig" + ] + }, + "read": { + "permissions": [ + "aoss:GetSecurityConfig" + ] + }, + "update": { + "permissions": [ + "aoss:GetSecurityConfig", + "aoss:UpdateSecurityConfig" + ] + }, + "delete": { + "permissions": [ + "aoss:DeleteSecurityConfig" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "Type": { + "$ref": "resource-schema.json#/properties/Type" + } + }, + "required": [ + "Type" + ] + }, + "permissions": [ + "aoss:ListSecurityConfigs" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/opensearchserverless/securitypolicy.json b/internal/aws/cfn/schemas/aws/opensearchserverless/securitypolicy.json new file mode 100644 index 00000000..d4a980bf --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opensearchserverless/securitypolicy.json @@ -0,0 +1,105 @@ +{ + "typeName": "AWS::OpenSearchServerless::SecurityPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-opensearchserverless", + "description": "Amazon OpenSearchServerless security policy resource", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "definitions": { + "SecurityPolicyType": { + "type": "string", + "description": "The possible types for the network policy", + "enum": [ + "encryption", + "network" + ] + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 1000, + "minLength": 1, + "description": "The description of the policy" + }, + "Policy": { + "type": "string", + "maxLength": 20480, + "minLength": 1, + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]+", + "description": "The JSON policy document that is the content for the policy" + }, + "Name": { + "type": "string", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-z][a-z0-9-]{2,31}$", + "description": "The name of the policy" + }, + "Type": { + "$ref": "#/definitions/SecurityPolicyType" + } + }, + "required": [ + "Type", + "Name", + "Policy" + ], + "createOnlyProperties": [ + "/properties/Type", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Type", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "aoss:GetSecurityPolicy", + "aoss:CreateSecurityPolicy", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "update": { + "permissions": [ + "aoss:GetSecurityPolicy", + "aoss:UpdateSecurityPolicy", + "kms:DescribeKey", + "kms:CreateGrant" + ] + }, + "delete": { + "permissions": [ + "aoss:GetSecurityPolicy", + "aoss:DeleteSecurityPolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "Type": { + "$ref": "resource-schema.json#/properties/Type" + } + }, + "required": [ + "Type" + ] + }, + "permissions": [ + "aoss:ListSecurityPolicies" + ] + }, + "read": { + "permissions": [ + "aoss:GetSecurityPolicy", + "kms:DescribeKey" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/opensearchserverless/vpcendpoint.json b/internal/aws/cfn/schemas/aws/opensearchserverless/vpcendpoint.json new file mode 100644 index 00000000..38724cbb --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opensearchserverless/vpcendpoint.json @@ -0,0 +1,159 @@ +{ + "typeName": "AWS::OpenSearchServerless::VpcEndpoint", + "description": "Amazon OpenSearchServerless vpc endpoint resource", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "Id": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^vpce-[0-9a-z]*$", + "description": "The identifier of the VPC Endpoint" + }, + "Name": { + "type": "string", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-z][a-z0-9-]{2,31}$", + "description": "The name of the VPC Endpoint" + }, + "SecurityGroupIds": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[\\w+\\-]+$" + }, + "maxItems": 5, + "minItems": 1, + "description": "The ID of one or more security groups to associate with the endpoint network interface" + }, + "SubnetIds": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 32, + "minLength": 1, + "pattern": "^subnet-([0-9a-f]{8}|[0-9a-f]{17})$" + }, + "maxItems": 6, + "minItems": 1, + "description": "The ID of one or more subnets in which to create an endpoint network interface" + }, + "VpcId": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^vpc-[0-9a-z]*$", + "description": "The ID of the VPC in which the endpoint will be used." + } + }, + "required": [ + "Name", + "VpcId", + "SubnetIds" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "aoss:BatchGetVpcEndpoint", + "aoss:CreateVpcEndpoint", + "ec2:CreateVpcEndpoint", + "ec2:DeleteVpcEndPoints", + "ec2:DescribeVpcEndpoints", + "ec2:ModifyVpcEndPoint", + "ec2:DescribeVpcs", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:CreateTags", + "route53:ChangeResourceRecordSets", + "route53:GetChange", + "route53:GetHostedZone", + "route53:ListResourceRecordSets", + "route53:ListHostedZonesByName", + "route53:CreateHostedZone", + "route53:ListHostedZonesByVPC", + "route53:AssociateVPCWithHostedZone" + ] + }, + "read": { + "permissions": [ + "aoss:BatchGetVpcEndpoint", + "ec2:DescribeVpcEndpoints" + ] + }, + "update": { + "permissions": [ + "aoss:BatchGetVpcEndpoint", + "aoss:UpdateVpcEndpoint", + "ec2:CreateVpcEndpoint", + "ec2:DeleteVpcEndPoints", + "ec2:DescribeVpcEndpoints", + "ec2:ModifyVpcEndPoint", + "ec2:DescribeVpcs", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:CreateTags", + "route53:ChangeResourceRecordSets", + "route53:GetChange", + "route53:GetHostedZone", + "route53:ListResourceRecordSets", + "route53:ListHostedZonesByName", + "route53:CreateHostedZone", + "route53:ListHostedZonesByVPC", + "route53:AssociateVPCWithHostedZone" + ] + }, + "delete": { + "permissions": [ + "aoss:BatchGetVpcEndpoint", + "aoss:DeleteVpcEndpoint", + "ec2:DeleteVpcEndPoints", + "ec2:DescribeVpcEndpoints", + "ec2:ModifyVpcEndPoint", + "ec2:DescribeVpcs", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:CreateTags", + "route53:ChangeResourceRecordSets", + "route53:DeleteHostedZone", + "route53:GetChange", + "route53:GetHostedZone", + "route53:ListResourceRecordSets", + "route53:ListHostedZonesByName", + "route53:ListHostedZonesByVPC", + "route53:AssociateVPCWithHostedZone" + ] + }, + "list": { + "permissions": [ + "aoss:ListVpcEndpoints", + "ec2:DescribeVpcEndpoints" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/opensearchservice/domain.json b/internal/aws/cfn/schemas/aws/opensearchservice/domain.json new file mode 100644 index 00000000..a3251604 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opensearchservice/domain.json @@ -0,0 +1,535 @@ +{ + "typeName": "AWS::OpenSearchService::Domain", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "ZoneAwarenessConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AvailabilityZoneCount": { + "type": "integer" + } + } + }, + "ClusterConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceCount": { + "type": "integer" + }, + "WarmEnabled": { + "type": "boolean" + }, + "WarmCount": { + "type": "integer" + }, + "DedicatedMasterEnabled": { + "type": "boolean" + }, + "ZoneAwarenessConfig": { + "$ref": "#/definitions/ZoneAwarenessConfig" + }, + "DedicatedMasterCount": { + "type": "integer" + }, + "InstanceType": { + "type": "string" + }, + "WarmType": { + "type": "string" + }, + "ZoneAwarenessEnabled": { + "type": "boolean" + }, + "DedicatedMasterType": { + "type": "string" + }, + "MultiAZWithStandbyEnabled": { + "type": "boolean" + }, + "ColdStorageOptions": { + "$ref": "#/definitions/ColdStorageOptions" + } + } + }, + "LogPublishingOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogsLogGroupArn": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + } + } + }, + "SnapshotOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutomatedSnapshotStartHour": { + "type": "integer" + } + } + }, + "VPCOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "NodeToNodeEncryptionOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + } + }, + "DomainEndpointOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomEndpointCertificateArn": { + "type": "string" + }, + "CustomEndpointEnabled": { + "type": "boolean" + }, + "EnforceHTTPS": { + "type": "boolean" + }, + "CustomEndpoint": { + "type": "string" + }, + "TLSSecurityPolicy": { + "type": "string" + } + } + }, + "CognitoOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "IdentityPoolId": { + "type": "string" + }, + "UserPoolId": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + } + }, + "MasterUserOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "MasterUserPassword": { + "type": "string" + }, + "MasterUserName": { + "type": "string" + }, + "MasterUserARN": { + "type": "string" + } + } + }, + "Idp": { + "type": "object", + "additionalProperties": false, + "properties": { + "MetadataContent": { + "type": "string", + "maxLength": 1048576, + "minLength": 1 + }, + "EntityId": { + "type": "string" + } + }, + "required": [ + "MetadataContent", + "EntityId" + ] + }, + "SAMLOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "Idp": { + "$ref": "#/definitions/Idp" + }, + "MasterUserName": { + "type": "string" + }, + "MasterBackendRole": { + "type": "string" + }, + "SubjectKey": { + "type": "string" + }, + "RolesKey": { + "type": "string" + }, + "SessionTimeoutMinutes": { + "type": "integer" + } + } + }, + "AdvancedSecurityOptionsInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "MasterUserOptions": { + "$ref": "#/definitions/MasterUserOptions" + }, + "InternalUserDatabaseEnabled": { + "type": "boolean" + }, + "AnonymousAuthEnabled": { + "type": "boolean" + }, + "SAMLOptions": { + "$ref": "#/definitions/SAMLOptions" + }, + "AnonymousAuthDisableDate": { + "type": "string" + } + } + }, + "EBSOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "EBSEnabled": { + "type": "boolean" + }, + "VolumeType": { + "type": "string" + }, + "Iops": { + "type": "integer" + }, + "VolumeSize": { + "type": "integer" + }, + "Throughput": { + "type": "integer" + } + } + }, + "EncryptionAtRestOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "description": "The key of the tag.", + "type": "string", + "minLength": 0, + "maxLength": 256 + }, + "Key": { + "description": "The value of the tag.", + "type": "string", + "minLength": 0, + "maxLength": 128 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ServiceSoftwareOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "CurrentVersion": { + "type": "string" + }, + "NewVersion": { + "type": "string" + }, + "UpdateAvailable": { + "type": "boolean" + }, + "Cancellable": { + "type": "boolean" + }, + "UpdateStatus": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AutomatedUpdateDate": { + "type": "string" + }, + "OptionalDeployment": { + "type": "boolean" + } + } + }, + "WindowStartTime": { + "type": "object", + "additionalProperties": false, + "properties": { + "Hours": { + "type": "integer", + "minimum": 0, + "maximum": 23 + }, + "Minutes": { + "type": "integer", + "minimum": 0, + "maximum": 59 + } + }, + "required": [ + "Hours", + "Minutes" + ] + }, + "OffPeakWindow": { + "type": "object", + "additionalProperties": false, + "properties": { + "WindowStartTime": { + "$ref": "#/definitions/WindowStartTime" + } + } + }, + "OffPeakWindowOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "OffPeakWindow": { + "$ref": "#/definitions/OffPeakWindow" + } + } + }, + "SoftwareUpdateOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutoSoftwareUpdateEnabled": { + "type": "boolean" + } + } + }, + "ColdStorageOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + } + } + }, + "properties": { + "ClusterConfig": { + "$ref": "#/definitions/ClusterConfig" + }, + "DomainName": { + "type": "string" + }, + "AccessPolicies": { + "type": "object" + }, + "IPAddressType": { + "type": "string" + }, + "EngineVersion": { + "type": "string" + }, + "AdvancedOptions": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "LogPublishingOptions": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z0-9]+": { + "$ref": "#/definitions/LogPublishingOption" + } + } + }, + "SnapshotOptions": { + "$ref": "#/definitions/SnapshotOptions" + }, + "VPCOptions": { + "$ref": "#/definitions/VPCOptions" + }, + "NodeToNodeEncryptionOptions": { + "$ref": "#/definitions/NodeToNodeEncryptionOptions" + }, + "DomainEndpointOptions": { + "$ref": "#/definitions/DomainEndpointOptions" + }, + "CognitoOptions": { + "$ref": "#/definitions/CognitoOptions" + }, + "AdvancedSecurityOptions": { + "$ref": "#/definitions/AdvancedSecurityOptionsInput" + }, + "DomainEndpoint": { + "type": "string" + }, + "DomainEndpointV2": { + "type": "string" + }, + "DomainEndpoints": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^.*$": { + "type": "string" + } + } + }, + "EBSOptions": { + "$ref": "#/definitions/EBSOptions" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "DomainArn": { + "type": "string" + }, + "EncryptionAtRestOptions": { + "$ref": "#/definitions/EncryptionAtRestOptions" + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this Domain.", + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array", + "uniqueItems": true + }, + "ServiceSoftwareOptions": { + "$ref": "#/definitions/ServiceSoftwareOptions" + }, + "OffPeakWindowOptions": { + "$ref": "#/definitions/OffPeakWindowOptions" + }, + "SoftwareUpdateOptions": { + "$ref": "#/definitions/SoftwareUpdateOptions" + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/DomainName" + ], + "conditionalCreateOnlyProperties": [ + "/properties/EncryptionAtRestOptions/properties", + "/properties/AdvancedSecurityOptions/properties/Enabled" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/DomainArn", + "/properties/DomainEndpoint", + "/properties/DomainEndpointV2", + "/properties/DomainEndpoints", + "/properties/ServiceSoftwareOptions", + "/properties/AdvancedSecurityOptions/AnonymousAuthDisableDate" + ], + "writeOnlyProperties": [ + "/properties/AdvancedSecurityOptions/MasterUserOptions", + "/properties/AdvancedSecurityOptions/SAMLOptions/MasterUserName", + "/properties/AdvancedSecurityOptions/SAMLOptions/MasterBackendRole" + ], + "primaryIdentifier": [ + "/properties/DomainName" + ], + "handlers": { + "create": { + "permissions": [ + "es:CreateDomain", + "es:DescribeDomain", + "es:AddTags", + "es:ListTags" + ] + }, + "read": { + "permissions": [ + "es:DescribeDomain", + "es:ListTags" + ] + }, + "update": { + "permissions": [ + "es:UpdateDomain", + "es:UpgradeDomain", + "es:DescribeDomain", + "es:AddTags", + "es:RemoveTags", + "es:ListTags", + "es:DescribeDomainChangeProgress" + ], + "timeoutInMinutes": 780 + }, + "delete": { + "permissions": [ + "es:DeleteDomain", + "es:DescribeDomain" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/opsworks/app.json b/internal/aws/cfn/schemas/aws/opsworks/app.json new file mode 100644 index 00000000..8243f997 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworks/app.json @@ -0,0 +1,153 @@ +{ + "typeName": "AWS::OpsWorks::App", + "description": "Resource Type definition for AWS::OpsWorks::App", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "AppSource": { + "$ref": "#/definitions/Source" + }, + "Attributes": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "DataSources": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/DataSource" + } + }, + "Description": { + "type": "string" + }, + "Domains": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "EnableSsl": { + "type": "boolean" + }, + "Environment": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + }, + "Name": { + "type": "string" + }, + "Shortname": { + "type": "string" + }, + "SslConfiguration": { + "$ref": "#/definitions/SslConfiguration" + }, + "StackId": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "definitions": { + "Source": { + "type": "object", + "additionalProperties": false, + "properties": { + "Password": { + "type": "string" + }, + "Revision": { + "type": "string" + }, + "SshKey": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Url": { + "type": "string" + }, + "Username": { + "type": "string" + } + } + }, + "EnvironmentVariable": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Secure": { + "type": "boolean" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DataSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "DatabaseName": { + "type": "string" + }, + "Type": { + "type": "string" + } + } + }, + "SslConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Certificate": { + "type": "string" + }, + "Chain": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + } + } + } + }, + "required": [ + "Type", + "Name", + "StackId" + ], + "createOnlyProperties": [ + "/properties/Shortname", + "/properties/StackId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/opsworks/elasticloadbalancerattachment.json b/internal/aws/cfn/schemas/aws/opsworks/elasticloadbalancerattachment.json new file mode 100644 index 00000000..b1b3632d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworks/elasticloadbalancerattachment.json @@ -0,0 +1,26 @@ +{ + "typeName": "AWS::OpsWorks::ElasticLoadBalancerAttachment", + "description": "Resource Type definition for AWS::OpsWorks::ElasticLoadBalancerAttachment", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ElasticLoadBalancerName": { + "type": "string" + }, + "LayerId": { + "type": "string" + } + }, + "required": [ + "LayerId", + "ElasticLoadBalancerName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/opsworks/instance.json b/internal/aws/cfn/schemas/aws/opsworks/instance.json new file mode 100644 index 00000000..c61905c6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworks/instance.json @@ -0,0 +1,231 @@ +{ + "typeName": "AWS::OpsWorks::Instance", + "description": "Resource Type definition for AWS::OpsWorks::Instance", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "AvailabilityZone": { + "type": "string" + }, + "PrivateDnsName": { + "type": "string" + }, + "PrivateIp": { + "type": "string" + }, + "PublicDnsName": { + "type": "string" + }, + "PublicIp": { + "type": "string" + }, + "AgentVersion": { + "type": "string" + }, + "AmiId": { + "type": "string" + }, + "Architecture": { + "type": "string" + }, + "AutoScalingType": { + "type": "string" + }, + "BlockDeviceMappings": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/BlockDeviceMapping" + } + }, + "EbsOptimized": { + "type": "boolean" + }, + "ElasticIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Hostname": { + "type": "string" + }, + "InstallUpdatesOnBoot": { + "type": "boolean" + }, + "InstanceType": { + "type": "string" + }, + "LayerIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Os": { + "type": "string" + }, + "RootDeviceType": { + "type": "string" + }, + "SshKeyName": { + "type": "string" + }, + "StackId": { + "type": "string" + }, + "SubnetId": { + "type": "string" + }, + "Tenancy": { + "type": "string" + }, + "TimeBasedAutoScaling": { + "$ref": "#/definitions/TimeBasedAutoScaling" + }, + "VirtualizationType": { + "type": "string" + }, + "Volumes": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "definitions": { + "BlockDeviceMapping": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeviceName": { + "type": "string" + }, + "Ebs": { + "$ref": "#/definitions/EbsBlockDevice" + }, + "NoDevice": { + "type": "string" + }, + "VirtualName": { + "type": "string" + } + } + }, + "TimeBasedAutoScaling": { + "type": "object", + "additionalProperties": false, + "properties": { + "Friday": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Monday": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Saturday": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Sunday": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Thursday": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Tuesday": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "Wednesday": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + } + } + }, + "EbsBlockDevice": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeleteOnTermination": { + "type": "boolean" + }, + "Iops": { + "type": "integer" + }, + "SnapshotId": { + "type": "string" + }, + "VolumeSize": { + "type": "integer" + }, + "VolumeType": { + "type": "string" + } + } + } + }, + "required": [ + "LayerIds", + "InstanceType", + "StackId" + ], + "readOnlyProperties": [ + "/properties/PublicDnsName", + "/properties/PrivateDnsName", + "/properties/PublicIp", + "/properties/PrivateIp", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Tenancy", + "/properties/BlockDeviceMappings", + "/properties/VirtualizationType", + "/properties/TimeBasedAutoScaling", + "/properties/RootDeviceType", + "/properties/AutoScalingType", + "/properties/StackId", + "/properties/AvailabilityZone", + "/properties/SubnetId", + "/properties/EbsOptimized" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/opsworks/layer.json b/internal/aws/cfn/schemas/aws/opsworks/layer.json new file mode 100644 index 00000000..27787526 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworks/layer.json @@ -0,0 +1,253 @@ +{ + "typeName": "AWS::OpsWorks::Layer", + "description": "Resource Type definition for AWS::OpsWorks::Layer", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Attributes": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "AutoAssignElasticIps": { + "type": "boolean" + }, + "AutoAssignPublicIps": { + "type": "boolean" + }, + "CustomInstanceProfileArn": { + "type": "string" + }, + "CustomJson": { + "type": "object" + }, + "CustomRecipes": { + "$ref": "#/definitions/Recipes" + }, + "CustomSecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "EnableAutoHealing": { + "type": "boolean" + }, + "InstallUpdatesOnBoot": { + "type": "boolean" + }, + "LifecycleEventConfiguration": { + "$ref": "#/definitions/LifecycleEventConfiguration" + }, + "LoadBasedAutoScaling": { + "$ref": "#/definitions/LoadBasedAutoScaling" + }, + "Name": { + "type": "string" + }, + "Packages": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Shortname": { + "type": "string" + }, + "StackId": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Type": { + "type": "string" + }, + "UseEbsOptimizedInstances": { + "type": "boolean" + }, + "VolumeConfigurations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VolumeConfiguration" + } + } + }, + "definitions": { + "LifecycleEventConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ShutdownEventConfiguration": { + "$ref": "#/definitions/ShutdownEventConfiguration" + } + } + }, + "LoadBasedAutoScaling": { + "type": "object", + "additionalProperties": false, + "properties": { + "DownScaling": { + "$ref": "#/definitions/AutoScalingThresholds" + }, + "Enable": { + "type": "boolean" + }, + "UpScaling": { + "$ref": "#/definitions/AutoScalingThresholds" + } + } + }, + "Recipes": { + "type": "object", + "additionalProperties": false, + "properties": { + "Configure": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Deploy": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Setup": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Shutdown": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "Undeploy": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "VolumeConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Encrypted": { + "type": "boolean" + }, + "Iops": { + "type": "integer" + }, + "MountPoint": { + "type": "string" + }, + "NumberOfDisks": { + "type": "integer" + }, + "RaidLevel": { + "type": "integer" + }, + "Size": { + "type": "integer" + }, + "VolumeType": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ShutdownEventConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DelayUntilElbConnectionsDrained": { + "type": "boolean" + }, + "ExecutionTimeout": { + "type": "integer" + } + } + }, + "AutoScalingThresholds": { + "type": "object", + "additionalProperties": false, + "properties": { + "CpuThreshold": { + "type": "number" + }, + "IgnoreMetricsTime": { + "type": "integer" + }, + "InstanceCount": { + "type": "integer" + }, + "LoadThreshold": { + "type": "number" + }, + "MemoryThreshold": { + "type": "number" + }, + "ThresholdsWaitTime": { + "type": "integer" + } + } + } + }, + "required": [ + "EnableAutoHealing", + "Name", + "Type", + "AutoAssignElasticIps", + "Shortname", + "AutoAssignPublicIps", + "StackId" + ], + "createOnlyProperties": [ + "/properties/Type", + "/properties/StackId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/opsworks/stack.json b/internal/aws/cfn/schemas/aws/opsworks/stack.json new file mode 100644 index 00000000..9133902c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworks/stack.json @@ -0,0 +1,225 @@ +{ + "typeName": "AWS::OpsWorks::Stack", + "description": "Resource Type definition for AWS::OpsWorks::Stack", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "AgentVersion": { + "type": "string" + }, + "Attributes": { + "type": "object", + "patternProperties": { + "[a-zA-Z0-9]+": { + "type": "string" + } + } + }, + "ChefConfiguration": { + "$ref": "#/definitions/ChefConfiguration" + }, + "CloneAppIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ClonePermissions": { + "type": "boolean" + }, + "ConfigurationManager": { + "$ref": "#/definitions/StackConfigurationManager" + }, + "CustomCookbooksSource": { + "$ref": "#/definitions/Source" + }, + "CustomJson": { + "type": "object" + }, + "DefaultAvailabilityZone": { + "type": "string" + }, + "DefaultInstanceProfileArn": { + "type": "string" + }, + "DefaultOs": { + "type": "string" + }, + "DefaultRootDeviceType": { + "type": "string" + }, + "DefaultSshKeyName": { + "type": "string" + }, + "DefaultSubnetId": { + "type": "string" + }, + "EcsClusterArn": { + "type": "string" + }, + "ElasticIps": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ElasticIp" + } + }, + "HostnameTheme": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "RdsDbInstances": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/RdsDbInstance" + } + }, + "ServiceRoleArn": { + "type": "string" + }, + "SourceStackId": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UseCustomCookbooks": { + "type": "boolean" + }, + "UseOpsworksSecurityGroups": { + "type": "boolean" + }, + "VpcId": { + "type": "string" + } + }, + "definitions": { + "Source": { + "type": "object", + "additionalProperties": false, + "properties": { + "Password": { + "type": "string" + }, + "Revision": { + "type": "string" + }, + "SshKey": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Url": { + "type": "string" + }, + "Username": { + "type": "string" + } + } + }, + "StackConfigurationManager": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string" + }, + "Version": { + "type": "string" + } + } + }, + "RdsDbInstance": { + "type": "object", + "additionalProperties": false, + "properties": { + "DbPassword": { + "type": "string" + }, + "DbUser": { + "type": "string" + }, + "RdsDbInstanceArn": { + "type": "string" + } + }, + "required": [ + "DbPassword", + "DbUser", + "RdsDbInstanceArn" + ] + }, + "ElasticIp": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ip": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Ip" + ] + }, + "ChefConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "BerkshelfVersion": { + "type": "string" + }, + "ManageBerkshelf": { + "type": "boolean" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "DefaultInstanceProfileArn", + "ServiceRoleArn", + "Name" + ], + "createOnlyProperties": [ + "/properties/ServiceRoleArn", + "/properties/CloneAppIds", + "/properties/ClonePermissions", + "/properties/VpcId", + "/properties/SourceStackId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/opsworks/userprofile.json b/internal/aws/cfn/schemas/aws/opsworks/userprofile.json new file mode 100644 index 00000000..53626b2b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworks/userprofile.json @@ -0,0 +1,34 @@ +{ + "typeName": "AWS::OpsWorks::UserProfile", + "description": "Resource Type definition for AWS::OpsWorks::UserProfile", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SshUsername": { + "type": "string" + }, + "AllowSelfManagement": { + "type": "boolean" + }, + "IamUserArn": { + "type": "string" + }, + "SshPublicKey": { + "type": "string" + } + }, + "required": [ + "IamUserArn" + ], + "createOnlyProperties": [ + "/properties/IamUserArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/opsworks/volume.json b/internal/aws/cfn/schemas/aws/opsworks/volume.json new file mode 100644 index 00000000..542f926d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworks/volume.json @@ -0,0 +1,36 @@ +{ + "typeName": "AWS::OpsWorks::Volume", + "description": "Resource Type definition for AWS::OpsWorks::Volume", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Ec2VolumeId": { + "type": "string" + }, + "MountPoint": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "StackId": { + "type": "string" + } + }, + "required": [ + "Ec2VolumeId", + "StackId" + ], + "createOnlyProperties": [ + "/properties/StackId", + "/properties/Ec2VolumeId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/opsworkscm/server.json b/internal/aws/cfn/schemas/aws/opsworkscm/server.json new file mode 100644 index 00000000..2fedd601 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/opsworkscm/server.json @@ -0,0 +1,236 @@ +{ + "typeName": "AWS::OpsWorksCM::Server", + "description": "Resource Type definition for AWS::OpsWorksCM::Server", + "additionalProperties": false, + "properties": { + "KeyPair": { + "type": "string", + "pattern": ".*", + "maxLength": 10000 + }, + "EngineVersion": { + "type": "string", + "maxLength": 10000 + }, + "ServiceRoleArn": { + "type": "string", + "pattern": "arn:aws:iam::[0-9]{12}:role/.*", + "maxLength": 10000 + }, + "DisableAutomatedBackup": { + "type": "boolean" + }, + "BackupId": { + "type": "string", + "pattern": "[a-zA-Z][a-zA-Z0-9\\-\\.\\:]*", + "maxLength": 79 + }, + "EngineModel": { + "type": "string", + "maxLength": 10000 + }, + "PreferredMaintenanceWindow": { + "type": "string", + "pattern": "^((Mon|Tue|Wed|Thu|Fri|Sat|Sun):)?([0-1][0-9]|2[0-3]):[0-5][0-9]$", + "maxLength": 10000 + }, + "AssociatePublicIpAddress": { + "type": "boolean" + }, + "InstanceProfileArn": { + "type": "string", + "pattern": "arn:aws:iam::[0-9]{12}:instance-profile/.*", + "maxLength": 10000 + }, + "CustomCertificate": { + "type": "string", + "pattern": "(?s)\\s*-----BEGIN CERTIFICATE-----.+-----END CERTIFICATE-----\\s*", + "maxLength": 2097152 + }, + "PreferredBackupWindow": { + "type": "string", + "pattern": "^((Mon|Tue|Wed|Thu|Fri|Sat|Sun):)?([0-1][0-9]|2[0-3]):[0-5][0-9]$", + "maxLength": 10000 + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "maxLength": 10000 + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "maxLength": 10000 + } + }, + "CustomDomain": { + "type": "string", + "pattern": "^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])$", + "maxLength": 253 + }, + "Endpoint": { + "type": "string", + "maxLength": 10000 + }, + "CustomPrivateKey": { + "type": "string", + "pattern": "(?ms)\\s*^-----BEGIN (?-s:.*)PRIVATE KEY-----$.*?^-----END (?-s:.*)PRIVATE KEY-----$\\s*", + "maxLength": 4096 + }, + "ServerName": { + "type": "string", + "minLength": 1, + "maxLength": 40, + "pattern": "[a-zA-Z][a-zA-Z0-9\\-]*" + }, + "EngineAttributes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/EngineAttribute" + } + }, + "BackupRetentionCount": { + "type": "integer", + "minLength": 1 + }, + "Arn": { + "type": "string", + "maxLength": 10000 + }, + "InstanceType": { + "type": "string", + "maxLength": 10000 + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Engine": { + "type": "string", + "maxLength": 10000 + } + }, + "definitions": { + "EngineAttribute": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "pattern": "(?s).*", + "maxLength": 10000 + }, + "Name": { + "type": "string", + "pattern": "(?s).*", + "maxLength": 10000 + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 0, + "maxLength": 256 + }, + "Key": { + "type": "string", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "ServiceRoleArn", + "InstanceProfileArn", + "InstanceType" + ], + "createOnlyProperties": [ + "/properties/KeyPair", + "/properties/CustomPrivateKey", + "/properties/ServiceRoleArn", + "/properties/InstanceType", + "/properties/CustomCertificate", + "/properties/CustomDomain", + "/properties/InstanceProfileArn", + "/properties/SecurityGroupIds", + "/properties/ServerName", + "/properties/SubnetIds", + "/properties/BackupId", + "/properties/EngineModel", + "/properties/AssociatePublicIpAddress", + "/properties/EngineVersion", + "/properties/Engine" + ], + "primaryIdentifier": [ + "/properties/ServerName" + ], + "readOnlyProperties": [ + "/properties/ServerName", + "/properties/Endpoint", + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/BackupId", + "/properties/CustomCertificate", + "/properties/CustomDomain", + "/properties/CustomPrivateKey", + "/properties/EngineAttributes", + "/properties/EngineVersion", + "/properties/KeyPair", + "/properties/Tags" + ], + "handlers": { + "create": { + "permissions": [ + "opsworks-cm:CreateServer", + "opsworks-cm:DescribeServers", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "opsworks-cm:DeleteServer", + "opsworks-cm:DescribeServers" + ] + }, + "update": { + "permissions": [ + "opsworks-cm:UpdateServer", + "opsworks-cm:TagResource", + "opsworks-cm:UntagResource", + "opsworks-cm:DescribeServers" + ] + }, + "list": { + "permissions": [ + "opsworks-cm:DescribeServers", + "opsworks-cm:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "opsworks-cm:DescribeServers" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/organizations/account.json b/internal/aws/cfn/schemas/aws/organizations/account.json new file mode 100644 index 00000000..49ac897a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/organizations/account.json @@ -0,0 +1,173 @@ +{ + "typeName": "AWS::Organizations::Account", + "description": "You can use AWS::Organizations::Account to manage accounts in organization.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-organizations", + "properties": { + "AccountName": { + "description": "The friendly name of the member account.", + "type": "string", + "pattern": "[\\u0020-\\u007E]+", + "minLength": 1, + "maxLength": 50 + }, + "Email": { + "description": "The email address of the owner to assign to the new member account.", + "type": "string", + "pattern": "[^\\s@]+@[^\\s@]+\\.[^\\s@]+", + "minLength": 6, + "maxLength": 64 + }, + "RoleName": { + "description": "The name of an IAM role that AWS Organizations automatically preconfigures in the new member account. Default name is OrganizationAccountAccessRole if not specified.", + "type": "string", + "default": "OrganizationAccountAccessRole", + "pattern": "[\\w+=,.@-]{1,64}", + "minLength": 1, + "maxLength": 64 + }, + "ParentIds": { + "description": "List of parent nodes for the member account. Currently only one parent at a time is supported. Default is root.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^(r-[0-9a-z]{4,32})|(ou-[0-9a-z]{4,32}-[a-z0-9]{8,32})$" + } + }, + "Tags": { + "description": "A list of tags that you want to attach to the newly created account. For each tag in the list, you must specify both a tag key and a value.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AccountId": { + "description": "If the account was created successfully, the unique identifier (ID) of the new account.", + "type": "string", + "pattern": "^\\d{12}$", + "maxLength": 12 + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the account.", + "type": "string", + "pattern": "^arn:aws.*:organizations::\\d{12}:account\\/o-[a-z0-9]{10,32}\\/\\d{12}" + }, + "JoinedMethod": { + "description": "The method by which the account joined the organization.", + "type": "string", + "enum": [ + "INVITED", + "CREATED" + ] + }, + "JoinedTimestamp": { + "description": "The date the account became a part of the organization.", + "type": "string" + }, + "Status": { + "description": "The status of the account in the organization.", + "type": "string", + "enum": [ + "ACTIVE", + "SUSPENDED", + "PENDING_CLOSURE" + ] + } + }, + "definitions": { + "Tag": { + "description": "A custom key-value pair associated with a resource within your organization.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key identifier, or name, of the tag.", + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The string value that's associated with the key of the tag. You can set the value of a tag to an empty string, but you can't set the value of a tag to null.", + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "AccountName", + "Email" + ], + "readOnlyProperties": [ + "/properties/AccountId", + "/properties/Status", + "/properties/JoinedTimestamp", + "/properties/JoinedMethod", + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/RoleName" + ], + "primaryIdentifier": [ + "/properties/AccountId" + ], + "handlers": { + "create": { + "permissions": [ + "organizations:CreateAccount", + "organizations:DescribeCreateAccountStatus", + "organizations:MoveAccount", + "organizations:ListParents", + "organizations:TagResource", + "organizations:DescribeAccount", + "organizations:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "organizations:DescribeAccount", + "organizations:ListParents", + "organizations:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "organizations:MoveAccount", + "organizations:TagResource", + "organizations:UntagResource", + "organizations:ListRoots", + "organizations:DescribeAccount", + "organizations:ListParents", + "organizations:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "organizations:CloseAccount" + ] + }, + "list": { + "permissions": [ + "organizations:ListAccounts" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/organizations/organization.json b/internal/aws/cfn/schemas/aws/organizations/organization.json new file mode 100644 index 00000000..7e87bb25 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/organizations/organization.json @@ -0,0 +1,94 @@ +{ + "typeName": "AWS::Organizations::Organization", + "description": "Resource schema for AWS::Organizations::Organization", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-organizations.git", + "properties": { + "Id": { + "description": "The unique identifier (ID) of an organization.", + "type": "string", + "pattern": "^o-[a-z0-9]{10,32}$" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of an organization.", + "type": "string", + "pattern": "^arn:aws.*:organizations::\\d{12}:organization\\/o-[a-z0-9]{10,32}" + }, + "FeatureSet": { + "description": "Specifies the feature set supported by the new organization. Each feature set supports different levels of functionality.", + "type": "string", + "enum": [ + "ALL", + "CONSOLIDATED_BILLING" + ], + "default": "ALL" + }, + "ManagementAccountArn": { + "description": "The Amazon Resource Name (ARN) of the account that is designated as the management account for the organization.", + "type": "string", + "pattern": "^arn:aws.*:organizations::\\d{12}:account\\/o-[a-z0-9]{10,32}\\/\\d{12}" + }, + "ManagementAccountId": { + "description": "The unique identifier (ID) of the management account of an organization.", + "type": "string", + "pattern": "^\\d{12}$" + }, + "ManagementAccountEmail": { + "description": "The email address that is associated with the AWS account that is designated as the management account for the organization.", + "type": "string", + "pattern": "[^\\s@]+@[^\\s@]+\\.[^\\s@]+", + "minLength": 6, + "maxLength": 64 + }, + "RootId": { + "description": "The unique identifier (ID) for the root.", + "type": "string", + "pattern": "^r-[0-9a-z]{4,32}$", + "maxLength": 64 + } + }, + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "organizations:CreateOrganization", + "organizations:DescribeOrganization", + "iam:CreateServiceLinkedRole", + "organizations:ListRoots" + ] + }, + "read": { + "permissions": [ + "organizations:DescribeOrganization", + "organizations:ListRoots" + ] + }, + "delete": { + "permissions": [ + "organizations:DeleteOrganization", + "organizations:DescribeOrganization" + ] + }, + "list": { + "permissions": [ + "organizations:DescribeOrganization" + ] + }, + "update": { + "permissions": [] + } + }, + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/ManagementAccountArn", + "/properties/ManagementAccountId", + "/properties/ManagementAccountEmail", + "/properties/RootId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/organizations/organizationalunit.json b/internal/aws/cfn/schemas/aws/organizations/organizationalunit.json new file mode 100644 index 00000000..896e859c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/organizations/organizationalunit.json @@ -0,0 +1,135 @@ +{ + "typeName": "AWS::Organizations::OrganizationalUnit", + "description": "You can use organizational units (OUs) to group accounts together to administer as a single unit. This greatly simplifies the management of your accounts. For example, you can attach a policy-based control to an OU, and all accounts within the OU automatically inherit the policy. You can create multiple OUs within a single organization, and you can create OUs within other OUs. Each OU can contain multiple accounts, and you can move accounts from one OU to another. However, OU names must be unique within a parent OU or root.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-organizations", + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of this OU.", + "type": "string", + "pattern": "^arn:aws.*:organizations::\\d{12}:ou/o-[a-z0-9]{10,32}/ou-[0-9a-z]{4,32}-[0-9a-z]{8,32}" + }, + "Id": { + "description": "The unique identifier (ID) associated with this OU.", + "type": "string", + "pattern": "^ou-[0-9a-z]{4,32}-[a-z0-9]{8,32}$", + "maxLength": 68 + }, + "Name": { + "description": "The friendly name of this OU.", + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 128 + }, + "ParentId": { + "description": "The unique identifier (ID) of the parent root or OU that you want to create the new OU in.", + "type": "string", + "pattern": "^(r-[0-9a-z]{4,32})|(ou-[0-9a-z]{4,32}-[a-z0-9]{8,32})$", + "maxLength": 100 + }, + "Tags": { + "description": "A list of tags that you want to attach to the newly created OU.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A custom key-value pair associated with a resource within your organization.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key identifier, or name, of the tag.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The string value that's associated with the key of the tag. You can set the value of a tag to an empty string, but you can't set the value of a tag to null.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "handlers": { + "create": { + "permissions": [ + "organizations:CreateOrganizationalUnit", + "organizations:DescribeOrganizationalUnit", + "organizations:ListParents", + "organizations:ListTagsForResource", + "organizations:TagResource" + ] + }, + "read": { + "permissions": [ + "organizations:DescribeOrganizationalUnit", + "organizations:ListParents", + "organizations:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "organizations:DescribeOrganizationalUnit", + "organizations:ListParents", + "organizations:ListTagsForResource", + "organizations:TagResource", + "organizations:UntagResource", + "organizations:UpdateOrganizationalUnit" + ] + }, + "delete": { + "permissions": [ + "organizations:DeleteOrganizationalUnit" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ParentId": { + "$ref": "resource-schema.json#/properties/ParentId" + } + }, + "required": [ + "ParentId" + ] + }, + "permissions": [ + "organizations:ListOrganizationalUnitsForParent" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "ParentId" + ], + "createOnlyProperties": [ + "/properties/ParentId" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/organizations/policy.json b/internal/aws/cfn/schemas/aws/organizations/policy.json new file mode 100644 index 00000000..f7e0f085 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/organizations/policy.json @@ -0,0 +1,177 @@ +{ + "typeName": "AWS::Organizations::Policy", + "description": "Policies in AWS Organizations enable you to manage different features of the AWS accounts in your organization. You can use policies when all features are enabled in your organization.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-organizations", + "properties": { + "Name": { + "description": "Name of the Policy", + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 128 + }, + "Type": { + "description": "The type of policy to create. You can specify one of the following values: AISERVICES_OPT_OUT_POLICY, BACKUP_POLICY, SERVICE_CONTROL_POLICY, TAG_POLICY", + "type": "string", + "enum": [ + "SERVICE_CONTROL_POLICY", + "AISERVICES_OPT_OUT_POLICY", + "BACKUP_POLICY", + "TAG_POLICY" + ] + }, + "Content": { + "description": "The Policy text content. For AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it.", + "type": [ + "object", + "string" + ], + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 1000000 + }, + "Description": { + "description": "Human readable description of the policy", + "pattern": "[\\s\\S]*", + "type": "string", + "maxLength": 512 + }, + "TargetIds": { + "description": "List of unique identifiers (IDs) of the root, OU, or account that you want to attach the policy to", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^(r-[0-9a-z]{4,32})|(\\d{12})|(ou-[0-9a-z]{4,32}-[a-z0-9]{8,32})$" + } + }, + "Tags": { + "description": "A list of tags that you want to attach to the newly created policy. For each tag in the list, you must specify both a tag key and a value. You can set the value to an empty string, but you can't set it to null.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Id": { + "description": "Id of the Policy", + "type": "string", + "pattern": "^p-[0-9a-zA-Z_]{8,128}$", + "maxLength": 130 + }, + "Arn": { + "description": "ARN of the Policy", + "type": "string", + "pattern": "^arn:aws.*:organizations::[0-9]{12}:policy/o-[a-z0-9]{10}/(service_control|tag|backup|aiservices_opt_out)_policy/p-[a-z0-9]{8}" + }, + "AwsManaged": { + "description": "A boolean value that indicates whether the specified policy is an AWS managed policy. If true, then you can attach the policy to roots, OUs, or accounts, but you cannot edit it.", + "type": "boolean" + } + }, + "definitions": { + "Tag": { + "description": "A custom key-value pair associated with a resource within your organization.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key identifier, or name, of the tag.", + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The string value that's associated with the key of the tag. You can set the value of a tag to an empty string, but you can't set the value of a tag to null.", + "type": "string", + "pattern": "[\\s\\S]*", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "Type", + "Content" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/AwsManaged" + ], + "createOnlyProperties": [ + "/properties/Type" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "organizations:CreatePolicy", + "organizations:DescribePolicy", + "organizations:AttachPolicy", + "organizations:ListTagsForResource", + "organizations:ListTargetsForPolicy", + "organizations:TagResource" + ] + }, + "read": { + "permissions": [ + "organizations:DescribePolicy", + "organizations:ListTargetsForPolicy", + "organizations:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "organizations:AttachPolicy", + "organizations:DetachPolicy", + "organizations:UpdatePolicy", + "organizations:ListTagsForResource", + "organizations:ListTargetsForPolicy", + "organizations:TagResource", + "organizations:UntagResource", + "organizations:DescribePolicy" + ] + }, + "delete": { + "permissions": [ + "organizations:DetachPolicy", + "organizations:DeletePolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "Type": { + "$ref": "resource-schema.json#/properties/Type" + } + }, + "required": [ + "Type" + ] + }, + "permissions": [ + "organizations:ListPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/organizations/resourcepolicy.json b/internal/aws/cfn/schemas/aws/organizations/resourcepolicy.json new file mode 100644 index 00000000..2ad00c21 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/organizations/resourcepolicy.json @@ -0,0 +1,115 @@ +{ + "typeName": "AWS::Organizations::ResourcePolicy", + "description": "You can use AWS::Organizations::ResourcePolicy to delegate policy management for AWS Organizations to specified member accounts to perform policy actions that are by default available only to the management account.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-organizations", + "properties": { + "Id": { + "description": "The unique identifier (ID) associated with this resource policy.", + "type": "string", + "pattern": "^rp-[0-9a-zA-Z_]{4,128}$", + "maxLength": 131 + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the resource policy.", + "type": "string", + "pattern": "^arn:aws.*:organizations::\\d{12}:resourcepolicy\\/o-[a-z0-9]{10,32}\\/rp-[0-9a-zA-Z_]{4,128}" + }, + "Content": { + "description": "The policy document. For AWS CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. AWS CloudFormation always converts a YAML policy to JSON format before submitting it.", + "type": [ + "object", + "string" + ], + "pattern": "[\\s\\S]*", + "minLength": 1, + "maxLength": 40000 + }, + "Tags": { + "description": "A list of tags that you want to attach to the resource policy", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A custom key-value pair associated with a resource within your organization.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key identifier, or name, of the tag.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The string value that's associated with the key of the tag. You can set the value of a tag to an empty string, but you can't set the value of a tag to null.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "handlers": { + "create": { + "permissions": [ + "organizations:PutResourcePolicy", + "organizations:DescribeResourcePolicy", + "organizations:ListTagsForResource", + "organizations:TagResource" + ] + }, + "read": { + "permissions": [ + "organizations:DescribeResourcePolicy", + "organizations:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "organizations:DescribeResourcePolicy", + "organizations:PutResourcePolicy", + "organizations:ListTagsForResource", + "organizations:TagResource", + "organizations:UntagResource" + ] + }, + "delete": { + "permissions": [ + "organizations:DeleteResourcePolicy" + ] + }, + "list": { + "permissions": [ + "organizations:DescribeResourcePolicy" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Content" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/osis/pipeline.json b/internal/aws/cfn/schemas/aws/osis/pipeline.json new file mode 100644 index 00000000..ca086ff7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/osis/pipeline.json @@ -0,0 +1,282 @@ +{ + "typeName": "AWS::OSIS::Pipeline", + "description": "An OpenSearch Ingestion Service Data Prepper pipeline running Data Prepper.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-osis.git", + "definitions": { + "BufferOptions": { + "description": "Key-value pairs to configure buffering.", + "type": "object", + "properties": { + "PersistentBufferEnabled": { + "type": "boolean", + "description": "Whether persistent buffering should be enabled." + } + }, + "required": [ + "PersistentBufferEnabled" + ], + "additionalProperties": false + }, + "EncryptionAtRestOptions": { + "description": "Key-value pairs to configure encryption at rest.", + "type": "object", + "properties": { + "KmsKeyArn": { + "type": "string", + "description": "The KMS key to use for encrypting data. By default an AWS owned key is used" + } + }, + "required": [ + "KmsKeyArn" + ], + "additionalProperties": false + }, + "LogPublishingOptions": { + "description": "Key-value pairs to configure log publishing.", + "type": "object", + "properties": { + "IsLoggingEnabled": { + "type": "boolean", + "description": "Whether logs should be published." + }, + "CloudWatchLogDestination": { + "type": "object", + "description": "The destination for OpenSearch Ingestion Service logs sent to Amazon CloudWatch.", + "properties": { + "LogGroup": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "\\/aws\\/vendedlogs\\/[\\.\\-_/#A-Za-z0-9]+" + } + }, + "required": [ + "LogGroup" + ], + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "VpcOptions": { + "description": "Container for the values required to configure VPC access for the pipeline. If you don't specify these values, OpenSearch Ingestion Service creates the pipeline with a public endpoint.", + "type": "object", + "properties": { + "SecurityGroupIds": { + "type": "array", + "insertionOrder": false, + "description": "A list of security groups associated with the VPC endpoint.", + "items": { + "type": "string", + "minLength": 11, + "maxLength": 20, + "pattern": "sg-\\w{8}(\\w{9})?" + } + }, + "SubnetIds": { + "type": "array", + "insertionOrder": false, + "description": "A list of subnet IDs associated with the VPC endpoint.", + "items": { + "type": "string", + "minLength": 15, + "maxLength": 24, + "pattern": "subnet-\\w{8}(\\w{9})?" + } + } + }, + "required": [ + "SubnetIds" + ], + "additionalProperties": false + }, + "VpcEndpoint": { + "description": "An OpenSearch Ingestion Service-managed VPC endpoint that will access one or more pipelines.", + "type": "object", + "properties": { + "VpcEndpointId": { + "type": "string", + "description": "The unique identifier of the endpoint." + }, + "VpcId": { + "type": "string", + "description": "The ID for your VPC. AWS Privatelink generates this value when you create a VPC." + }, + "VpcOptions": { + "$ref": "#/definitions/VpcOptions" + } + }, + "additionalProperties": false + } + }, + "properties": { + "BufferOptions": { + "$ref": "#/definitions/BufferOptions" + }, + "EncryptionAtRestOptions": { + "$ref": "#/definitions/EncryptionAtRestOptions" + }, + "LogPublishingOptions": { + "$ref": "#/definitions/LogPublishingOptions" + }, + "MaxUnits": { + "description": "The maximum pipeline capacity, in Ingestion OpenSearch Compute Units (OCUs).", + "type": "integer", + "minimum": 1, + "maximum": 384 + }, + "MinUnits": { + "description": "The minimum pipeline capacity, in Ingestion OpenSearch Compute Units (OCUs).", + "type": "integer", + "minimum": 1, + "maximum": 384 + }, + "PipelineConfigurationBody": { + "description": "The Data Prepper pipeline configuration.", + "type": "string", + "minLength": 1, + "maxLength": 24000 + }, + "PipelineName": { + "description": "Name of the OpenSearch Ingestion Service pipeline to create. Pipeline names are unique across the pipelines owned by an account within an AWS Region.", + "type": "string", + "minLength": 3, + "maxLength": 28, + "pattern": "[a-z][a-z0-9\\-]+" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VpcOptions": { + "$ref": "#/definitions/VpcOptions" + }, + "VpcEndpoints": { + "type": "array", + "insertionOrder": false, + "description": "The VPC interface endpoints that have access to the pipeline.", + "items": { + "$ref": "#/definitions/VpcEndpoint" + } + }, + "PipelineArn": { + "description": "The Amazon Resource Name (ARN) of the pipeline.", + "type": "string", + "minLength": 46, + "maxLength": 76, + "pattern": "^arn:(aws|aws\\-cn|aws\\-us\\-gov|aws\\-iso|aws\\-iso\\-b):osis:.+:pipeline\\/.+$" + }, + "IngestEndpointUrls": { + "type": "array", + "insertionOrder": false, + "description": "A list of endpoints that can be used for ingesting data into a pipeline", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "MaxUnits", + "MinUnits", + "PipelineConfigurationBody", + "PipelineName" + ], + "readOnlyProperties": [ + "/properties/PipelineArn", + "/properties/IngestEndpointUrls", + "/properties/VpcEndpoints" + ], + "writeOnlyProperties": [ + "/properties/VpcOptions" + ], + "createOnlyProperties": [ + "/properties/PipelineName" + ], + "primaryIdentifier": [ + "/properties/PipelineArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "osis:CreatePipeline", + "osis:GetPipeline", + "osis:TagResource", + "osis:ListTagsForResource", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "logs:CreateLogDelivery", + "kms:DescribeKey" + ] + }, + "read": { + "permissions": [ + "osis:GetPipeline", + "osis:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "osis:UpdatePipeline", + "osis:GetPipeline", + "osis:ListTagsForResource", + "osis:TagResource", + "osis:UntagResource", + "iam:PassRole", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:ListLogDeliveries", + "kms:DescribeKey" + ] + }, + "delete": { + "permissions": [ + "osis:DeletePipeline", + "osis:GetPipeline", + "logs:GetLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries" + ] + }, + "list": { + "permissions": [ + "osis:ListPipelines" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/panorama/applicationinstance.json b/internal/aws/cfn/schemas/aws/panorama/applicationinstance.json new file mode 100644 index 00000000..3bb71214 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/panorama/applicationinstance.json @@ -0,0 +1,299 @@ +{ + "taggable": true, + "typeName": "AWS::Panorama::ApplicationInstance", + "readOnlyProperties": [ + "/properties/ApplicationInstanceId", + "/properties/Arn", + "/properties/Status", + "/properties/HealthStatus", + "/properties/StatusDescription", + "/properties/DefaultRuntimeContextDeviceName", + "/properties/CreatedTime", + "/properties/LastUpdatedTime" + ], + "description": "Schema for ApplicationInstance CloudFormation Resource", + "createOnlyProperties": [ + "/properties/Name", + "/properties/Description", + "/properties/ManifestPayload", + "/properties/ManifestOverridesPayload", + "/properties/RuntimeRoleArn", + "/properties/DefaultRuntimeContextDevice", + "/properties/ApplicationInstanceIdToReplace" + ], + "primaryIdentifier": [ + "/properties/ApplicationInstanceId" + ], + "required": [ + "ManifestPayload", + "DefaultRuntimeContextDevice" + ], + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "handlers": { + "read": { + "permissions": [ + "panorama:DescribeApplicationInstance", + "panorama:DescribeApplicationInstanceDetails", + "panorama:ListTagsForResource", + "s3:ListObjects", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "create": { + "permissions": [ + "panorama:CreateApplicationInstance", + "panorama:ListTagsForResource", + "panorama:TagResource", + "panorama:DescribeApplicationInstance", + "panorama:DescribeApplicationInstanceDetails", + "iam:PassRole", + "s3:ListBucket", + "s3:PutObject", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "update": { + "permissions": [ + "panorama:ListTagsForResource", + "panorama:TagResource", + "panorama:UntagResource", + "panorama:DescribeApplicationInstance", + "panorama:DescribeApplicationInstanceDetails", + "s3:ListObjects", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "list": { + "permissions": [ + "panorama:ListApplicationInstances", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "delete": { + "permissions": [ + "panorama:RemoveApplicationInstance", + "panorama:DescribeApplicationInstance", + "panorama:DescribeApplicationInstanceDetails", + "s3:DeleteObject", + "s3:DeleteObjectVersion", + "s3:DeleteObjectVersionTagging", + "s3:ListObjects", + "s3:GetObject", + "s3:GetObjectVersion" + ] + } + }, + "writeOnlyProperties": [ + "/properties/ApplicationInstanceIdToReplace" + ], + "additionalProperties": false, + "definitions": { + "DefaultRuntimeContextDevice": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-\\_]+$", + "type": "string", + "maxLength": 255 + }, + "Description": { + "minLength": 0, + "pattern": "^.*$", + "type": "string", + "maxLength": 255 + }, + "DeviceId": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-\\_]+$", + "type": "string", + "maxLength": 255 + }, + "ApplicationInstanceStatus": { + "type": "string", + "enum": [ + "DEPLOYMENT_PENDING", + "DEPLOYMENT_REQUESTED", + "DEPLOYMENT_IN_PROGRESS", + "DEPLOYMENT_ERROR", + "DEPLOYMENT_SUCCEEDED", + "REMOVAL_PENDING", + "REMOVAL_REQUESTED", + "REMOVAL_IN_PROGRESS", + "REMOVAL_FAILED", + "REMOVAL_SUCCEEDED" + ] + }, + "ManifestOverridesPayload": { + "additionalProperties": false, + "type": "object", + "properties": { + "PayloadData": { + "$ref": "#/definitions/ManifestOverridesPayloadData" + } + } + }, + "RuntimeRoleArn": { + "minLength": 1, + "pattern": "^arn:[a-z0-9][-.a-z0-9]{0,62}:iam::[0-9]{12}:role/.+$", + "type": "string", + "maxLength": 255 + }, + "Timestamp": { + "type": "integer" + }, + "Name": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-\\_]+$", + "type": "string", + "maxLength": 255 + }, + "ApplicationInstanceId": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-\\_]+$", + "type": "string", + "maxLength": 255 + }, + "ManifestPayloadData": { + "minLength": 1, + "pattern": "^.+$", + "type": "string", + "maxLength": 51200 + }, + "ApplicationInstanceHealthStatus": { + "type": "string", + "enum": [ + "RUNNING", + "ERROR", + "NOT_AVAILABLE" + ] + }, + "StatusFilter": { + "type": "string", + "enum": [ + "DEPLOYMENT_SUCCEEDED", + "DEPLOYMENT_ERROR", + "REMOVAL_SUCCEEDED", + "REMOVAL_FAILED", + "PROCESSING_DEPLOYMENT", + "PROCESSING_REMOVAL" + ] + }, + "TagList": { + "uniqueItems": true, + "description": "List of tags", + "insertionOrder": false, + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ManifestPayload": { + "additionalProperties": false, + "type": "object", + "properties": { + "PayloadData": { + "$ref": "#/definitions/ManifestPayloadData" + } + } + }, + "ApplicationInstanceArn": { + "minLength": 1, + "type": "string", + "maxLength": 255 + }, + "ManifestOverridesPayloadData": { + "minLength": 0, + "pattern": "^.+$", + "type": "string", + "maxLength": 51200 + }, + "ApplicationInstanceStatusDescription": { + "minLength": 1, + "type": "string", + "maxLength": 255 + }, + "Tag": { + "additionalProperties": false, + "type": "object", + "properties": { + "Value": { + "minLength": 0, + "pattern": "^.+$", + "description": "A string containing the value for the tag", + "type": "string", + "maxLength": 256 + }, + "Key": { + "minLength": 1, + "pattern": "^.+$", + "description": "A string used to identify this tag", + "type": "string", + "maxLength": 128 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "DeviceName": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-\\_]+$", + "type": "string", + "maxLength": 255 + } + }, + "properties": { + "DefaultRuntimeContextDeviceName": { + "$ref": "#/definitions/DeviceName" + }, + "Status": { + "$ref": "#/definitions/ApplicationInstanceStatus" + }, + "DefaultRuntimeContextDevice": { + "$ref": "#/definitions/DefaultRuntimeContextDevice" + }, + "Description": { + "$ref": "#/definitions/Description" + }, + "ApplicationInstanceIdToReplace": { + "$ref": "#/definitions/ApplicationInstanceId" + }, + "CreatedTime": { + "$ref": "#/definitions/Timestamp" + }, + "HealthStatus": { + "$ref": "#/definitions/ApplicationInstanceHealthStatus" + }, + "ManifestOverridesPayload": { + "$ref": "#/definitions/ManifestOverridesPayload" + }, + "LastUpdatedTime": { + "$ref": "#/definitions/Timestamp" + }, + "RuntimeRoleArn": { + "$ref": "#/definitions/RuntimeRoleArn" + }, + "Name": { + "$ref": "#/definitions/Name" + }, + "ApplicationInstanceId": { + "$ref": "#/definitions/ApplicationInstanceId" + }, + "StatusDescription": { + "$ref": "#/definitions/ApplicationInstanceStatusDescription" + }, + "ManifestPayload": { + "$ref": "#/definitions/ManifestPayload" + }, + "Arn": { + "$ref": "#/definitions/ApplicationInstanceArn" + }, + "Tags": { + "$ref": "#/definitions/TagList" + } + } +} diff --git a/internal/aws/cfn/schemas/aws/panorama/package.json b/internal/aws/cfn/schemas/aws/panorama/package.json new file mode 100644 index 00000000..0d7657d1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/panorama/package.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::Panorama::Package", + "description": "Schema for Package CloudFormation Resource", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "NodePackageName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9\\-\\_]+$" + }, + "NodePackageId": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[a-zA-Z0-9\\-\\_\\/]+$" + }, + "NodePackageArn": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Timestamp": { + "type": "integer" + }, + "StorageLocation": { + "type": "object", + "properties": { + "Bucket": { + "type": "string" + }, + "RepoPrefixLocation": { + "type": "string" + }, + "GeneratedPrefixLocation": { + "type": "string" + }, + "BinaryPrefixLocation": { + "type": "string" + }, + "ManifestPrefixLocation": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^.+$" + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "^.+$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TagList": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "properties": { + "PackageName": { + "$ref": "#/definitions/NodePackageName" + }, + "PackageId": { + "$ref": "#/definitions/NodePackageId" + }, + "Arn": { + "$ref": "#/definitions/NodePackageArn" + }, + "StorageLocation": { + "$ref": "#/definitions/StorageLocation" + }, + "CreatedTime": { + "$ref": "#/definitions/Timestamp" + }, + "Tags": { + "$ref": "#/definitions/TagList" + } + }, + "additionalProperties": false, + "taggable": true, + "required": [ + "PackageName" + ], + "readOnlyProperties": [ + "/properties/PackageId", + "/properties/Arn", + "/properties/CreatedTime", + "/properties/StorageLocation/Bucket", + "/properties/StorageLocation/RepoPrefixLocation", + "/properties/StorageLocation/GeneratedPrefixLocation", + "/properties/StorageLocation/BinaryPrefixLocation", + "/properties/StorageLocation/ManifestPrefixLocation" + ], + "createOnlyProperties": [ + "/properties/PackageName" + ], + "primaryIdentifier": [ + "/properties/PackageId" + ], + "handlers": { + "create": { + "permissions": [ + "panorama:CreatePackage", + "panorama:ListTagsForResource", + "panorama:TagResource", + "panorama:DescribePackage", + "s3:ListBucket", + "s3:PutObject", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "read": { + "permissions": [ + "panorama:DescribePackage", + "panorama:ListTagsForResource", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "update": { + "permissions": [ + "panorama:DescribePackage", + "panorama:ListTagsForResource", + "panorama:TagResource", + "panorama:UntagResource", + "s3:PutObject", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "list": { + "permissions": [ + "panorama:ListPackages", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "delete": { + "permissions": [ + "panorama:DeletePackage", + "panorama:DescribePackage", + "s3:DeleteObject", + "s3:DeleteObjectVersion", + "s3:DeleteObjectVersionTagging", + "s3:ListObjects", + "s3:ListObjectsV2", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/panorama/packageversion.json b/internal/aws/cfn/schemas/aws/panorama/packageversion.json new file mode 100644 index 00000000..51cb34f2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/panorama/packageversion.json @@ -0,0 +1,168 @@ +{ + "typeName": "AWS::Panorama::PackageVersion", + "description": "Schema for PackageVersion Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-panorama.git", + "definitions": { + "PackageOwnerAccount": { + "type": "string", + "minLength": 1, + "maxLength": 12, + "pattern": "^[0-9a-z\\_]+$" + }, + "NodePackageId": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[a-zA-Z0-9\\-\\_\\/]+$" + }, + "NodePackageArn": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "NodePackageName": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[a-zA-Z0-9\\-\\_]+$" + }, + "NodePackageVersion": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^([0-9]+)\\.([0-9]+)$" + }, + "NodePackagePatchVersion": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[a-z0-9]+$" + }, + "PackageVersionStatus": { + "type": "string", + "enum": [ + "REGISTER_PENDING", + "REGISTER_COMPLETED", + "FAILED", + "DELETING" + ] + }, + "PackageVersionStatusDescription": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "TimeStamp": { + "type": "integer" + } + }, + "properties": { + "OwnerAccount": { + "$ref": "#/definitions/PackageOwnerAccount" + }, + "PackageId": { + "$ref": "#/definitions/NodePackageId" + }, + "PackageArn": { + "$ref": "#/definitions/NodePackageArn" + }, + "PackageVersion": { + "$ref": "#/definitions/NodePackageVersion" + }, + "PatchVersion": { + "$ref": "#/definitions/NodePackagePatchVersion" + }, + "MarkLatest": { + "type": "boolean" + }, + "IsLatestPatch": { + "type": "boolean" + }, + "PackageName": { + "$ref": "#/definitions/NodePackageName" + }, + "Status": { + "$ref": "#/definitions/PackageVersionStatus" + }, + "StatusDescription": { + "$ref": "#/definitions/PackageVersionStatusDescription" + }, + "RegisteredTime": { + "$ref": "#/definitions/TimeStamp" + }, + "UpdatedLatestPatchVersion": { + "$ref": "#/definitions/NodePackagePatchVersion" + } + }, + "additionalProperties": false, + "taggable": false, + "required": [ + "PackageId", + "PackageVersion", + "PatchVersion" + ], + "readOnlyProperties": [ + "/properties/PackageName", + "/properties/PackageArn", + "/properties/Status", + "/properties/StatusDescription", + "/properties/IsLatestPatch", + "/properties/RegisteredTime" + ], + "createOnlyProperties": [ + "/properties/OwnerAccount", + "/properties/PackageId", + "/properties/PackageVersion", + "/properties/PatchVersion" + ], + "writeOnlyProperties": [ + "/properties/UpdatedLatestPatchVersion" + ], + "primaryIdentifier": [ + "/properties/PackageId", + "/properties/PackageVersion", + "/properties/PatchVersion" + ], + "handlers": { + "create": { + "permissions": [ + "panorama:RegisterPackageVersion", + "panorama:DescribePackageVersion", + "s3:ListBucket", + "s3:PutObject", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "read": { + "permissions": [ + "panorama:DescribePackageVersion", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "update": { + "permissions": [ + "panorama:DescribePackageVersion", + "panorama:RegisterPackageVersion", + "s3:ListBucket", + "s3:PutObject", + "s3:GetObject", + "s3:GetObjectVersion" + ] + }, + "delete": { + "permissions": [ + "panorama:DeregisterPackageVersion", + "panorama:DescribePackageVersion", + "s3:DeleteObject", + "s3:DeleteObjectVersion", + "s3:DeleteObjectVersionTagging", + "s3:ListBucket", + "s3:GetObject", + "s3:GetObjectVersion" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/pcaconnectorad/connector.json b/internal/aws/cfn/schemas/aws/pcaconnectorad/connector.json new file mode 100644 index 00000000..7d6f62c4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pcaconnectorad/connector.json @@ -0,0 +1,132 @@ +{ + "typeName": "AWS::PCAConnectorAD::Connector", + "description": "Definition of AWS::PCAConnectorAD::Connector Resource Type", + "definitions": { + "Tags": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "VpcInformation": { + "type": "object", + "properties": { + "SecurityGroupIds": { + "type": "array", + "items": { + "type": "string", + "maxLength": 20, + "minLength": 11, + "pattern": "^(?:sg-[0-9a-f]{8}|sg-[0-9a-f]{17})$" + }, + "maxItems": 5, + "minItems": 1, + "uniqueItems": true + } + }, + "required": [ + "SecurityGroupIds" + ], + "additionalProperties": false + } + }, + "properties": { + "CertificateAuthorityArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:acm-pca:[\\w-]+:[0-9]+:certificate-authority(\\/[\\w-]+)$" + }, + "ConnectorArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:connector(\\/[\\w-]+)$" + }, + "DirectoryId": { + "type": "string", + "pattern": "^d-[0-9a-f]{10}$" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "VpcInformation": { + "$ref": "#/definitions/VpcInformation" + } + }, + "required": [ + "CertificateAuthorityArn", + "DirectoryId", + "VpcInformation" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/ConnectorArn" + ], + "writeOnlyProperties": [ + "/properties/CertificateAuthorityArn", + "/properties/DirectoryId", + "/properties/Tags", + "/properties/VpcInformation" + ], + "createOnlyProperties": [ + "/properties/CertificateAuthorityArn", + "/properties/DirectoryId", + "/properties/VpcInformation" + ], + "primaryIdentifier": [ + "/properties/ConnectorArn" + ], + "handlers": { + "create": { + "permissions": [ + "acm-pca:DescribeCertificateAuthority", + "acm-pca:GetCertificateAuthorityCertificate", + "acm-pca:GetCertificate", + "acm-pca:IssueCertificate", + "ds:DescribeDirectories", + "ec2:CreateTags", + "ec2:CreateVpcEndpoint", + "ec2:DescribeVpcEndpoints", + "pca-connector-ad:CreateConnector", + "pca-connector-ad:GetConnector" + ] + }, + "read": { + "permissions": [ + "pca-connector-ad:ListTagsForResource", + "pca-connector-ad:GetConnector" + ] + }, + "delete": { + "permissions": [ + "pca-connector-ad:GetConnector", + "pca-connector-ad:DeleteConnector", + "ec2:DeleteVpcEndpoints", + "ec2:DescribeVpcEndpoints" + ] + }, + "list": { + "permissions": [ + "pca-connector-ad:ListConnectors" + ] + }, + "update": { + "permissions": [ + "pca-connector-ad:ListTagsForResource", + "pca-connector-ad:TagResource", + "pca-connector-ad:UntagResource" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/pcaconnectorad/directoryregistration.json b/internal/aws/cfn/schemas/aws/pcaconnectorad/directoryregistration.json new file mode 100644 index 00000000..a1a7c1ba --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pcaconnectorad/directoryregistration.json @@ -0,0 +1,91 @@ +{ + "typeName": "AWS::PCAConnectorAD::DirectoryRegistration", + "description": "Definition of AWS::PCAConnectorAD::DirectoryRegistration Resource Type", + "definitions": { + "Tags": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "DirectoryId": { + "type": "string", + "pattern": "^d-[0-9a-f]{10}$" + }, + "DirectoryRegistrationArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:directory-registration(\\/[\\w-]+)$" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "required": [ + "DirectoryId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/DirectoryRegistrationArn" + ], + "writeOnlyProperties": [ + "/properties/DirectoryId", + "/properties/Tags" + ], + "createOnlyProperties": [ + "/properties/DirectoryId" + ], + "primaryIdentifier": [ + "/properties/DirectoryRegistrationArn" + ], + "handlers": { + "create": { + "permissions": [ + "pca-connector-ad:GetDirectoryRegistration", + "pca-connector-ad:CreateDirectoryRegistration", + "ds:AuthorizeApplication", + "ds:DescribeDirectories" + ] + }, + "read": { + "permissions": [ + "pca-connector-ad:ListTagsForResource", + "pca-connector-ad:GetDirectoryRegistration" + ] + }, + "delete": { + "permissions": [ + "pca-connector-ad:GetDirectoryRegistration", + "pca-connector-ad:DeleteDirectoryRegistration", + "ds:DescribeDirectories", + "ds:UnauthorizeApplication", + "ds:UpdateAuthorizedApplication" + ] + }, + "list": { + "permissions": [ + "pca-connector-ad:ListDirectoryRegistrations" + ] + }, + "update": { + "permissions": [ + "pca-connector-ad:ListTagsForResource", + "pca-connector-ad:TagResource", + "pca-connector-ad:UntagResource" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/pcaconnectorad/serviceprincipalname.json b/internal/aws/cfn/schemas/aws/pcaconnectorad/serviceprincipalname.json new file mode 100644 index 00000000..27943915 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pcaconnectorad/serviceprincipalname.json @@ -0,0 +1,70 @@ +{ + "typeName": "AWS::PCAConnectorAD::ServicePrincipalName", + "description": "Definition of AWS::PCAConnectorAD::ServicePrincipalName Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-pcaconnectorad", + "properties": { + "ConnectorArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:connector(\\/[\\w-]+)$" + }, + "DirectoryRegistrationArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:directory-registration(\\/[\\w-]+)$" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "createOnlyProperties": [ + "/properties/ConnectorArn", + "/properties/DirectoryRegistrationArn" + ], + "primaryIdentifier": [ + "/properties/ConnectorArn", + "/properties/DirectoryRegistrationArn" + ], + "handlers": { + "create": { + "permissions": [ + "ds:UpdateAuthorizedApplication", + "pca-connector-ad:GetServicePrincipalName", + "pca-connector-ad:CreateServicePrincipalName" + ] + }, + "read": { + "permissions": [ + "pca-connector-ad:GetServicePrincipalName" + ] + }, + "delete": { + "permissions": [ + "ds:UpdateAuthorizedApplication", + "pca-connector-ad:GetServicePrincipalName", + "pca-connector-ad:DeleteServicePrincipalName" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "DirectoryRegistrationArn": { + "$ref": "resource-schema.json#/properties/DirectoryRegistrationArn" + } + }, + "required": [ + "DirectoryRegistrationArn" + ] + }, + "permissions": [ + "pca-connector-ad:ListServicePrincipalNames" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/pcaconnectorad/template.json b/internal/aws/cfn/schemas/aws/pcaconnectorad/template.json new file mode 100644 index 00000000..5719b7a6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pcaconnectorad/template.json @@ -0,0 +1,1037 @@ +{ + "typeName": "AWS::PCAConnectorAD::Template", + "description": "Represents a template that defines certificate configurations, both for issuance and client handling", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-pcaconnectorad", + "definitions": { + "ApplicationPolicies": { + "type": "object", + "properties": { + "Critical": { + "type": "boolean" + }, + "Policies": { + "type": "array", + "items": { + "$ref": "#/definitions/ApplicationPolicy" + }, + "maxItems": 100, + "minItems": 1, + "uniqueItems": true + } + }, + "required": [ + "Policies" + ], + "additionalProperties": false + }, + "ApplicationPolicy": { + "oneOf": [ + { + "type": "object", + "title": "PolicyType", + "properties": { + "PolicyType": { + "$ref": "#/definitions/ApplicationPolicyType" + } + }, + "required": [ + "PolicyType" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "PolicyObjectIdentifier", + "properties": { + "PolicyObjectIdentifier": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^([0-2])\\.([0-9]|([0-3][0-9]))(\\.([0-9]+)){0,126}$" + } + }, + "required": [ + "PolicyObjectIdentifier" + ], + "additionalProperties": false + } + ] + }, + "ApplicationPolicyType": { + "type": "string", + "enum": [ + "ALL_APPLICATION_POLICIES", + "ANY_PURPOSE", + "ATTESTATION_IDENTITY_KEY_CERTIFICATE", + "CERTIFICATE_REQUEST_AGENT", + "CLIENT_AUTHENTICATION", + "CODE_SIGNING", + "CTL_USAGE", + "DIGITAL_RIGHTS", + "DIRECTORY_SERVICE_EMAIL_REPLICATION", + "DISALLOWED_LIST", + "DNS_SERVER_TRUST", + "DOCUMENT_ENCRYPTION", + "DOCUMENT_SIGNING", + "DYNAMIC_CODE_GENERATOR", + "EARLY_LAUNCH_ANTIMALWARE_DRIVER", + "EMBEDDED_WINDOWS_SYSTEM_COMPONENT_VERIFICATION", + "ENCLAVE", + "ENCRYPTING_FILE_SYSTEM", + "ENDORSEMENT_KEY_CERTIFICATE", + "FILE_RECOVERY", + "HAL_EXTENSION", + "IP_SECURITY_END_SYSTEM", + "IP_SECURITY_IKE_INTERMEDIATE", + "IP_SECURITY_TUNNEL_TERMINATION", + "IP_SECURITY_USER", + "ISOLATED_USER_MODE", + "KDC_AUTHENTICATION", + "KERNEL_MODE_CODE_SIGNING", + "KEY_PACK_LICENSES", + "KEY_RECOVERY", + "KEY_RECOVERY_AGENT", + "LICENSE_SERVER_VERIFICATION", + "LIFETIME_SIGNING", + "MICROSOFT_PUBLISHER", + "MICROSOFT_TIME_STAMPING", + "MICROSOFT_TRUST_LIST_SIGNING", + "OCSP_SIGNING", + "OEM_WINDOWS_SYSTEM_COMPONENT_VERIFICATION", + "PLATFORM_CERTIFICATE", + "PREVIEW_BUILD_SIGNING", + "PRIVATE_KEY_ARCHIVAL", + "PROTECTED_PROCESS_LIGHT_VERIFICATION", + "PROTECTED_PROCESS_VERIFICATION", + "QUALIFIED_SUBORDINATION", + "REVOKED_LIST_SIGNER", + "ROOT_PROGRAM_AUTO_UPDATE_CA_REVOCATION", + "ROOT_PROGRAM_AUTO_UPDATE_END_REVOCATION", + "ROOT_PROGRAM_NO_OSCP_FAILOVER_TO_CRL", + "ROOT_LIST_SIGNER", + "SECURE_EMAIL", + "SERVER_AUTHENTICATION", + "SMART_CARD_LOGIN", + "SPC_ENCRYPTED_DIGEST_RETRY_COUNT", + "SPC_RELAXED_PE_MARKER_CHECK", + "TIME_STAMPING", + "WINDOWS_HARDWARE_DRIVER_ATTESTED_VERIFICATION", + "WINDOWS_HARDWARE_DRIVER_EXTENDED_VERIFICATION", + "WINDOWS_HARDWARE_DRIVER_VERIFICATION", + "WINDOWS_HELLO_RECOVERY_KEY_ENCRYPTION", + "WINDOWS_KITS_COMPONENT", + "WINDOWS_RT_VERIFICATION", + "WINDOWS_SOFTWARE_EXTENSION_VERIFICATION", + "WINDOWS_STORE", + "WINDOWS_SYSTEM_COMPONENT_VERIFICATION", + "WINDOWS_TCB_COMPONENT", + "WINDOWS_THIRD_PARTY_APPLICATION_COMPONENT", + "WINDOWS_UPDATE" + ] + }, + "CertificateValidity": { + "type": "object", + "properties": { + "ValidityPeriod": { + "$ref": "#/definitions/ValidityPeriod" + }, + "RenewalPeriod": { + "$ref": "#/definitions/ValidityPeriod" + } + }, + "required": [ + "RenewalPeriod", + "ValidityPeriod" + ], + "additionalProperties": false + }, + "ClientCompatibilityV2": { + "type": "string", + "enum": [ + "WINDOWS_SERVER_2003", + "WINDOWS_SERVER_2008", + "WINDOWS_SERVER_2008_R2", + "WINDOWS_SERVER_2012", + "WINDOWS_SERVER_2012_R2", + "WINDOWS_SERVER_2016" + ] + }, + "ClientCompatibilityV3": { + "type": "string", + "enum": [ + "WINDOWS_SERVER_2008", + "WINDOWS_SERVER_2008_R2", + "WINDOWS_SERVER_2012", + "WINDOWS_SERVER_2012_R2", + "WINDOWS_SERVER_2016" + ] + }, + "ClientCompatibilityV4": { + "type": "string", + "enum": [ + "WINDOWS_SERVER_2012", + "WINDOWS_SERVER_2012_R2", + "WINDOWS_SERVER_2016" + ] + }, + "EnrollmentFlagsV2": { + "type": "object", + "properties": { + "IncludeSymmetricAlgorithms": { + "type": "boolean" + }, + "UserInteractionRequired": { + "type": "boolean" + }, + "RemoveInvalidCertificateFromPersonalStore": { + "type": "boolean" + }, + "NoSecurityExtension": { + "type": "boolean" + }, + "EnableKeyReuseOnNtTokenKeysetStorageFull": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "EnrollmentFlagsV3": { + "type": "object", + "properties": { + "IncludeSymmetricAlgorithms": { + "type": "boolean" + }, + "UserInteractionRequired": { + "type": "boolean" + }, + "RemoveInvalidCertificateFromPersonalStore": { + "type": "boolean" + }, + "NoSecurityExtension": { + "type": "boolean" + }, + "EnableKeyReuseOnNtTokenKeysetStorageFull": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "EnrollmentFlagsV4": { + "type": "object", + "properties": { + "IncludeSymmetricAlgorithms": { + "type": "boolean" + }, + "UserInteractionRequired": { + "type": "boolean" + }, + "RemoveInvalidCertificateFromPersonalStore": { + "type": "boolean" + }, + "NoSecurityExtension": { + "type": "boolean" + }, + "EnableKeyReuseOnNtTokenKeysetStorageFull": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "ExtensionsV2": { + "type": "object", + "properties": { + "KeyUsage": { + "$ref": "#/definitions/KeyUsage" + }, + "ApplicationPolicies": { + "$ref": "#/definitions/ApplicationPolicies" + } + }, + "required": [ + "KeyUsage" + ], + "additionalProperties": false + }, + "ExtensionsV3": { + "type": "object", + "properties": { + "KeyUsage": { + "$ref": "#/definitions/KeyUsage" + }, + "ApplicationPolicies": { + "$ref": "#/definitions/ApplicationPolicies" + } + }, + "required": [ + "KeyUsage" + ], + "additionalProperties": false + }, + "ExtensionsV4": { + "type": "object", + "properties": { + "KeyUsage": { + "$ref": "#/definitions/KeyUsage" + }, + "ApplicationPolicies": { + "$ref": "#/definitions/ApplicationPolicies" + } + }, + "required": [ + "KeyUsage" + ], + "additionalProperties": false + }, + "GeneralFlagsV2": { + "type": "object", + "properties": { + "AutoEnrollment": { + "type": "boolean" + }, + "MachineType": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "GeneralFlagsV3": { + "type": "object", + "properties": { + "AutoEnrollment": { + "type": "boolean" + }, + "MachineType": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "GeneralFlagsV4": { + "type": "object", + "properties": { + "AutoEnrollment": { + "type": "boolean" + }, + "MachineType": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "HashAlgorithm": { + "type": "string", + "enum": [ + "SHA256", + "SHA384", + "SHA512" + ] + }, + "KeySpec": { + "type": "string", + "enum": [ + "KEY_EXCHANGE", + "SIGNATURE" + ] + }, + "KeyUsage": { + "type": "object", + "properties": { + "Critical": { + "type": "boolean" + }, + "UsageFlags": { + "$ref": "#/definitions/KeyUsageFlags" + } + }, + "required": [ + "UsageFlags" + ], + "additionalProperties": false + }, + "KeyUsageFlags": { + "type": "object", + "properties": { + "DigitalSignature": { + "type": "boolean" + }, + "NonRepudiation": { + "type": "boolean" + }, + "KeyEncipherment": { + "type": "boolean" + }, + "DataEncipherment": { + "type": "boolean" + }, + "KeyAgreement": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "KeyUsageProperty": { + "oneOf": [ + { + "type": "object", + "title": "PropertyType", + "properties": { + "PropertyType": { + "$ref": "#/definitions/KeyUsagePropertyType" + } + }, + "required": [ + "PropertyType" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "PropertyFlags", + "properties": { + "PropertyFlags": { + "$ref": "#/definitions/KeyUsagePropertyFlags" + } + }, + "required": [ + "PropertyFlags" + ], + "additionalProperties": false + } + ] + }, + "KeyUsagePropertyFlags": { + "type": "object", + "properties": { + "Decrypt": { + "type": "boolean" + }, + "KeyAgreement": { + "type": "boolean" + }, + "Sign": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "KeyUsagePropertyType": { + "type": "string", + "enum": [ + "ALL" + ] + }, + "PrivateKeyAlgorithm": { + "type": "string", + "enum": [ + "RSA", + "ECDH_P256", + "ECDH_P384", + "ECDH_P521" + ] + }, + "PrivateKeyAttributesV2": { + "type": "object", + "properties": { + "MinimalKeyLength": { + "type": "number", + "minimum": 1 + }, + "KeySpec": { + "$ref": "#/definitions/KeySpec" + }, + "CryptoProviders": { + "type": "array", + "items": { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + "maxItems": 100, + "minItems": 1, + "uniqueItems": true + } + }, + "required": [ + "KeySpec", + "MinimalKeyLength" + ], + "additionalProperties": false + }, + "PrivateKeyAttributesV3": { + "type": "object", + "properties": { + "MinimalKeyLength": { + "type": "number", + "minimum": 1 + }, + "KeySpec": { + "$ref": "#/definitions/KeySpec" + }, + "CryptoProviders": { + "type": "array", + "items": { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + "maxItems": 100, + "minItems": 1, + "uniqueItems": true + }, + "KeyUsageProperty": { + "$ref": "#/definitions/KeyUsageProperty" + }, + "Algorithm": { + "$ref": "#/definitions/PrivateKeyAlgorithm" + } + }, + "required": [ + "Algorithm", + "KeySpec", + "KeyUsageProperty", + "MinimalKeyLength" + ], + "additionalProperties": false + }, + "PrivateKeyAttributesV4": { + "type": "object", + "properties": { + "MinimalKeyLength": { + "type": "number", + "minimum": 1 + }, + "KeySpec": { + "$ref": "#/definitions/KeySpec" + }, + "CryptoProviders": { + "type": "array", + "items": { + "type": "string", + "maxLength": 100, + "minLength": 1 + }, + "maxItems": 100, + "minItems": 1, + "uniqueItems": true + }, + "KeyUsageProperty": { + "$ref": "#/definitions/KeyUsageProperty" + }, + "Algorithm": { + "$ref": "#/definitions/PrivateKeyAlgorithm" + } + }, + "required": [ + "KeySpec", + "MinimalKeyLength" + ], + "additionalProperties": false + }, + "PrivateKeyFlagsV2": { + "type": "object", + "properties": { + "ExportableKey": { + "type": "boolean" + }, + "StrongKeyProtectionRequired": { + "type": "boolean" + }, + "ClientVersion": { + "$ref": "#/definitions/ClientCompatibilityV2" + } + }, + "required": [ + "ClientVersion" + ], + "additionalProperties": false + }, + "PrivateKeyFlagsV3": { + "type": "object", + "properties": { + "ExportableKey": { + "type": "boolean" + }, + "StrongKeyProtectionRequired": { + "type": "boolean" + }, + "RequireAlternateSignatureAlgorithm": { + "type": "boolean" + }, + "ClientVersion": { + "$ref": "#/definitions/ClientCompatibilityV3" + } + }, + "required": [ + "ClientVersion" + ], + "additionalProperties": false + }, + "PrivateKeyFlagsV4": { + "type": "object", + "properties": { + "ExportableKey": { + "type": "boolean" + }, + "StrongKeyProtectionRequired": { + "type": "boolean" + }, + "RequireAlternateSignatureAlgorithm": { + "type": "boolean" + }, + "RequireSameKeyRenewal": { + "type": "boolean" + }, + "UseLegacyProvider": { + "type": "boolean" + }, + "ClientVersion": { + "$ref": "#/definitions/ClientCompatibilityV4" + } + }, + "required": [ + "ClientVersion" + ], + "additionalProperties": false + }, + "SubjectNameFlagsV2": { + "type": "object", + "properties": { + "SanRequireDomainDns": { + "type": "boolean" + }, + "SanRequireSpn": { + "type": "boolean" + }, + "SanRequireDirectoryGuid": { + "type": "boolean" + }, + "SanRequireUpn": { + "type": "boolean" + }, + "SanRequireEmail": { + "type": "boolean" + }, + "SanRequireDns": { + "type": "boolean" + }, + "RequireDnsAsCn": { + "type": "boolean" + }, + "RequireEmail": { + "type": "boolean" + }, + "RequireCommonName": { + "type": "boolean" + }, + "RequireDirectoryPath": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "SubjectNameFlagsV3": { + "type": "object", + "properties": { + "SanRequireDomainDns": { + "type": "boolean" + }, + "SanRequireSpn": { + "type": "boolean" + }, + "SanRequireDirectoryGuid": { + "type": "boolean" + }, + "SanRequireUpn": { + "type": "boolean" + }, + "SanRequireEmail": { + "type": "boolean" + }, + "SanRequireDns": { + "type": "boolean" + }, + "RequireDnsAsCn": { + "type": "boolean" + }, + "RequireEmail": { + "type": "boolean" + }, + "RequireCommonName": { + "type": "boolean" + }, + "RequireDirectoryPath": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "SubjectNameFlagsV4": { + "type": "object", + "properties": { + "SanRequireDomainDns": { + "type": "boolean" + }, + "SanRequireSpn": { + "type": "boolean" + }, + "SanRequireDirectoryGuid": { + "type": "boolean" + }, + "SanRequireUpn": { + "type": "boolean" + }, + "SanRequireEmail": { + "type": "boolean" + }, + "SanRequireDns": { + "type": "boolean" + }, + "RequireDnsAsCn": { + "type": "boolean" + }, + "RequireEmail": { + "type": "boolean" + }, + "RequireCommonName": { + "type": "boolean" + }, + "RequireDirectoryPath": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "Tags": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "TemplateDefinition": { + "oneOf": [ + { + "type": "object", + "title": "TemplateV2", + "properties": { + "TemplateV2": { + "$ref": "#/definitions/TemplateV2" + } + }, + "required": [ + "TemplateV2" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "TemplateV3", + "properties": { + "TemplateV3": { + "$ref": "#/definitions/TemplateV3" + } + }, + "required": [ + "TemplateV3" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "TemplateV4", + "properties": { + "TemplateV4": { + "$ref": "#/definitions/TemplateV4" + } + }, + "required": [ + "TemplateV4" + ], + "additionalProperties": false + } + ] + }, + "TemplateV2": { + "type": "object", + "properties": { + "CertificateValidity": { + "$ref": "#/definitions/CertificateValidity" + }, + "SupersededTemplates": { + "type": "array", + "items": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^(?!^\\s+$)((?![\\x5c'\\x2b,;<=>#\\x22])([\\x20-\\x7E]))+$" + }, + "maxItems": 100, + "minItems": 1, + "uniqueItems": true + }, + "PrivateKeyAttributes": { + "$ref": "#/definitions/PrivateKeyAttributesV2" + }, + "PrivateKeyFlags": { + "$ref": "#/definitions/PrivateKeyFlagsV2" + }, + "EnrollmentFlags": { + "$ref": "#/definitions/EnrollmentFlagsV2" + }, + "SubjectNameFlags": { + "$ref": "#/definitions/SubjectNameFlagsV2" + }, + "GeneralFlags": { + "$ref": "#/definitions/GeneralFlagsV2" + }, + "Extensions": { + "$ref": "#/definitions/ExtensionsV2" + } + }, + "required": [ + "CertificateValidity", + "EnrollmentFlags", + "Extensions", + "GeneralFlags", + "PrivateKeyAttributes", + "PrivateKeyFlags", + "SubjectNameFlags" + ], + "additionalProperties": false + }, + "TemplateV3": { + "type": "object", + "properties": { + "CertificateValidity": { + "$ref": "#/definitions/CertificateValidity" + }, + "SupersededTemplates": { + "type": "array", + "items": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^(?!^\\s+$)((?![\\x5c'\\x2b,;<=>#\\x22])([\\x20-\\x7E]))+$" + }, + "maxItems": 100, + "minItems": 1, + "uniqueItems": true + }, + "PrivateKeyAttributes": { + "$ref": "#/definitions/PrivateKeyAttributesV3" + }, + "PrivateKeyFlags": { + "$ref": "#/definitions/PrivateKeyFlagsV3" + }, + "EnrollmentFlags": { + "$ref": "#/definitions/EnrollmentFlagsV3" + }, + "SubjectNameFlags": { + "$ref": "#/definitions/SubjectNameFlagsV3" + }, + "GeneralFlags": { + "$ref": "#/definitions/GeneralFlagsV3" + }, + "HashAlgorithm": { + "$ref": "#/definitions/HashAlgorithm" + }, + "Extensions": { + "$ref": "#/definitions/ExtensionsV3" + } + }, + "required": [ + "CertificateValidity", + "EnrollmentFlags", + "Extensions", + "GeneralFlags", + "HashAlgorithm", + "PrivateKeyAttributes", + "PrivateKeyFlags", + "SubjectNameFlags" + ], + "additionalProperties": false + }, + "TemplateV4": { + "type": "object", + "properties": { + "CertificateValidity": { + "$ref": "#/definitions/CertificateValidity" + }, + "SupersededTemplates": { + "type": "array", + "items": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^(?!^\\s+$)((?![\\x5c'\\x2b,;<=>#\\x22])([\\x20-\\x7E]))+$" + }, + "maxItems": 100, + "minItems": 1, + "uniqueItems": true + }, + "PrivateKeyAttributes": { + "$ref": "#/definitions/PrivateKeyAttributesV4" + }, + "PrivateKeyFlags": { + "$ref": "#/definitions/PrivateKeyFlagsV4" + }, + "EnrollmentFlags": { + "$ref": "#/definitions/EnrollmentFlagsV4" + }, + "SubjectNameFlags": { + "$ref": "#/definitions/SubjectNameFlagsV4" + }, + "GeneralFlags": { + "$ref": "#/definitions/GeneralFlagsV4" + }, + "HashAlgorithm": { + "$ref": "#/definitions/HashAlgorithm" + }, + "Extensions": { + "$ref": "#/definitions/ExtensionsV4" + } + }, + "required": [ + "CertificateValidity", + "EnrollmentFlags", + "Extensions", + "GeneralFlags", + "PrivateKeyAttributes", + "PrivateKeyFlags", + "SubjectNameFlags" + ], + "additionalProperties": false + }, + "ValidityPeriod": { + "type": "object", + "properties": { + "PeriodType": { + "$ref": "#/definitions/ValidityPeriodType" + }, + "Period": { + "type": "number", + "maximum": 8766000, + "minimum": 1 + } + }, + "required": [ + "Period", + "PeriodType" + ], + "additionalProperties": false + }, + "ValidityPeriodType": { + "type": "string", + "enum": [ + "HOURS", + "DAYS", + "WEEKS", + "MONTHS", + "YEARS" + ] + } + }, + "properties": { + "ConnectorArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:connector\\/[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$" + }, + "Definition": { + "$ref": "#/definitions/TemplateDefinition" + }, + "Name": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^(?!^\\s+$)((?![\\x5c'\\x2b,;<=>#\\x22])([\\x20-\\x7E]))+$" + }, + "ReenrollAllCertificateHolders": { + "type": "boolean" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "TemplateArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:connector\\/[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}\\/template\\/[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$" + } + }, + "required": [ + "ConnectorArn", + "Definition", + "Name" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/TemplateArn" + ], + "writeOnlyProperties": [ + "/properties/ConnectorArn", + "/properties/Definition", + "/properties/Name", + "/properties/ReenrollAllCertificateHolders", + "/properties/Tags" + ], + "createOnlyProperties": [ + "/properties/ConnectorArn", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/TemplateArn" + ], + "handlers": { + "create": { + "permissions": [ + "pca-connector-ad:CreateTemplate" + ] + }, + "read": { + "permissions": [ + "pca-connector-ad:GetTemplate", + "pca-connector-ad:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "pca-connector-ad:ListTagsForResource", + "pca-connector-ad:TagResource", + "pca-connector-ad:UntagResource", + "pca-connector-ad:UpdateTemplate" + ] + }, + "delete": { + "permissions": [ + "pca-connector-ad:GetTemplate", + "pca-connector-ad:DeleteTemplate" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ConnectorArn": { + "$ref": "resource-schema.json#/properties/ConnectorArn" + } + }, + "required": [ + "ConnectorArn" + ] + }, + "permissions": [ + "pca-connector-ad:ListTemplates" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/pcaconnectorad/templategroupaccesscontrolentry.json b/internal/aws/cfn/schemas/aws/pcaconnectorad/templategroupaccesscontrolentry.json new file mode 100644 index 00000000..ae80b410 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pcaconnectorad/templategroupaccesscontrolentry.json @@ -0,0 +1,110 @@ +{ + "typeName": "AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", + "description": "Definition of AWS::PCAConnectorAD::TemplateGroupAccessControlEntry Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-pcaconnectorad", + "definitions": { + "AccessRight": { + "type": "string", + "enum": [ + "ALLOW", + "DENY" + ] + }, + "AccessRights": { + "type": "object", + "properties": { + "Enroll": { + "$ref": "#/definitions/AccessRight" + }, + "AutoEnroll": { + "$ref": "#/definitions/AccessRight" + } + }, + "additionalProperties": false + } + }, + "properties": { + "AccessRights": { + "$ref": "#/definitions/AccessRights" + }, + "GroupDisplayName": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[\\x20-\\x7E]+$" + }, + "GroupSecurityIdentifier": { + "type": "string", + "maxLength": 256, + "minLength": 7, + "pattern": "^S-[0-9]-([0-9]+-){1,14}[0-9]+$" + }, + "TemplateArn": { + "type": "string", + "maxLength": 200, + "minLength": 5, + "pattern": "^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:connector(\\/[\\w-]+)\\/template(\\/[\\w-]+)$" + } + }, + "required": [ + "AccessRights", + "GroupDisplayName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "writeOnlyProperties": [ + "/properties/AccessRights", + "/properties/GroupDisplayName" + ], + "createOnlyProperties": [ + "/properties/GroupSecurityIdentifier", + "/properties/TemplateArn" + ], + "primaryIdentifier": [ + "/properties/GroupSecurityIdentifier", + "/properties/TemplateArn" + ], + "handlers": { + "create": { + "permissions": [ + "pca-connector-ad:CreateTemplateGroupAccessControlEntry" + ] + }, + "read": { + "permissions": [ + "pca-connector-ad:GetTemplateGroupAccessControlEntry" + ] + }, + "update": { + "permissions": [ + "pca-connector-ad:UpdateTemplateGroupAccessControlEntry" + ] + }, + "delete": { + "permissions": [ + "pca-connector-ad:DeleteTemplateGroupAccessControlEntry", + "pca-connector-ad:GetTemplateGroupAccessControlEntry" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "TemplateArn": { + "$ref": "resource-schema.json#/properties/TemplateArn" + } + }, + "required": [ + "TemplateArn" + ] + }, + "permissions": [ + "pca-connector-ad:ListTemplateGroupAccessControlEntries" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/personalize/dataset.json b/internal/aws/cfn/schemas/aws/personalize/dataset.json new file mode 100644 index 00000000..66959b87 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/personalize/dataset.json @@ -0,0 +1,150 @@ +{ + "typeName": "AWS::Personalize::Dataset", + "description": "Resource schema for AWS::Personalize::Dataset.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-personalize", + "definitions": { + "DatasetImportJob": { + "description": "Initial DatasetImportJob for the created dataset", + "type": "object", + "properties": { + "JobName": { + "description": "The name for the dataset import job.", + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*", + "minLength": 1, + "maxLength": 63 + }, + "DatasetImportJobArn": { + "description": "The ARN of the dataset import job", + "type": "string", + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+", + "maxLength": 256 + }, + "DatasetArn": { + "description": "The ARN of the dataset that receives the imported data", + "type": "string", + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+", + "maxLength": 256 + }, + "DataSource": { + "type": "object", + "description": "The Amazon S3 bucket that contains the training data to import.", + "properties": { + "DataLocation": { + "description": "The path to the Amazon S3 bucket where the data that you want to upload to your dataset is stored.", + "type": "string", + "maxLength": 256, + "pattern": "(s3|http|https)://.+" + } + }, + "additionalProperties": false + }, + "RoleArn": { + "description": "The ARN of the IAM role that has permissions to read from the Amazon S3 data source.", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name for the dataset", + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*", + "minLength": 1, + "maxLength": 63 + }, + "DatasetArn": { + "description": "The ARN of the dataset", + "type": "string", + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+", + "maxLength": 256 + }, + "DatasetType": { + "description": "The type of dataset", + "type": "string", + "enum": [ + "Interactions", + "Items", + "Users" + ], + "maxLength": 256 + }, + "DatasetGroupArn": { + "description": "The Amazon Resource Name (ARN) of the dataset group to add the dataset to", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+" + }, + "SchemaArn": { + "description": "The ARN of the schema to associate with the dataset. The schema defines the dataset fields.", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+" + }, + "DatasetImportJob": { + "$ref": "#/definitions/DatasetImportJob" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "DatasetType", + "DatasetGroupArn", + "SchemaArn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/DatasetType", + "/properties/DatasetGroupArn", + "/properties/SchemaArn" + ], + "replacementStrategy": "delete_then_create", + "taggable": false, + "readOnlyProperties": [ + "/properties/DatasetArn" + ], + "primaryIdentifier": [ + "/properties/DatasetArn" + ], + "handlers": { + "create": { + "permissions": [ + "personalize:CreateDataset", + "personalize:DescribeDataset", + "personalize:CreateDatasetImportJob", + "personalize:DescribeDatasetImportJob", + "iam:PassRole" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "personalize:DescribeDataset" + ] + }, + "update": { + "permissions": [ + "personalize:DescribeDataset", + "personalize:CreateDatasetImportJob", + "personalize:DescribeDatasetImportJob", + "iam:PassRole" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "personalize:DeleteDataset", + "personalize:DescribeDataset" + ] + }, + "list": { + "permissions": [ + "personalize:ListDatasets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/personalize/datasetgroup.json b/internal/aws/cfn/schemas/aws/personalize/datasetgroup.json new file mode 100644 index 00000000..303ba58f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/personalize/datasetgroup.json @@ -0,0 +1,82 @@ +{ + "typeName": "AWS::Personalize::DatasetGroup", + "description": "Resource Schema for AWS::Personalize::DatasetGroup.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-personalize", + "properties": { + "DatasetGroupArn": { + "description": "The Amazon Resource Name (ARN) of the dataset group.", + "type": "string", + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+", + "maxLength": 256 + }, + "Name": { + "description": "The name for the new dataset group.", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "KmsKeyArn": { + "description": "The Amazon Resource Name(ARN) of a AWS Key Management Service (KMS) key used to encrypt the datasets.", + "type": "string", + "maxLength": 2048, + "pattern": "arn:aws.*:kms:.*:[0-9]{12}:key/.*" + }, + "RoleArn": { + "description": "The ARN of the AWS Identity and Access Management (IAM) role that has permissions to access the AWS Key Management Service (KMS) key. Supplying an IAM role is only valid when also specifying a KMS key.", + "type": "string", + "pattern": "arn:([a-z\\d-]+):iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+", + "minLength": 0, + "maxLength": 256 + }, + "Domain": { + "description": "The domain of a Domain dataset group.", + "type": "string", + "enum": [ + "ECOMMERCE", + "VIDEO_ON_DEMAND" + ] + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/RoleArn", + "/properties/KmsKeyArn", + "/properties/Domain" + ], + "readOnlyProperties": [ + "/properties/DatasetGroupArn" + ], + "primaryIdentifier": [ + "/properties/DatasetGroupArn" + ], + "handlers": { + "create": { + "permissions": [ + "personalize:CreateDatasetGroup", + "personalize:DescribeDatasetGroup", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "personalize:DescribeDatasetGroup" + ] + }, + "delete": { + "permissions": [ + "personalize:DescribeDatasetGroup", + "personalize:DeleteDatasetGroup" + ] + }, + "list": { + "permissions": [ + "personalize:ListDatasetGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/personalize/schema.json b/internal/aws/cfn/schemas/aws/personalize/schema.json new file mode 100644 index 00000000..d154d283 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/personalize/schema.json @@ -0,0 +1,73 @@ +{ + "typeName": "AWS::Personalize::Schema", + "description": "Resource schema for AWS::Personalize::Schema.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-personalize", + "properties": { + "Name": { + "description": "Name for the schema.", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "SchemaArn": { + "description": "Arn for the schema.", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+" + }, + "Schema": { + "description": "A schema in Avro JSON format.", + "type": "string", + "maxLength": 10000 + }, + "Domain": { + "description": "The domain of a Domain dataset group.", + "type": "string", + "enum": [ + "ECOMMERCE", + "VIDEO_ON_DEMAND" + ] + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Schema" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Schema", + "/properties/Domain" + ], + "readOnlyProperties": [ + "/properties/SchemaArn" + ], + "primaryIdentifier": [ + "/properties/SchemaArn" + ], + "handlers": { + "create": { + "permissions": [ + "personalize:CreateSchema", + "personalize:DescribeSchema" + ] + }, + "read": { + "permissions": [ + "personalize:DescribeSchema" + ] + }, + "delete": { + "permissions": [ + "personalize:DeleteSchema", + "personalize:DescribeSchema" + ] + }, + "list": { + "permissions": [ + "personalize:ListSchemas" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/personalize/solution.json b/internal/aws/cfn/schemas/aws/personalize/solution.json new file mode 100644 index 00000000..fd0a2689 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/personalize/solution.json @@ -0,0 +1,304 @@ +{ + "typeName": "AWS::Personalize::Solution", + "description": "Resource schema for AWS::Personalize::Solution.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-personalize", + "definitions": { + "SolutionArn": { + "description": "The ARN of the solution", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+" + }, + "CategoricalHyperParameterRange": { + "description": "Provides the name and values of a Categorical hyperparameter.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the hyperparameter.", + "type": "string", + "maxLength": 256 + }, + "Values": { + "description": "A list of the categories for the hyperparameter.", + "type": "array", + "items": { + "type": "string", + "maxLength": 1000 + }, + "maxItems": 100, + "insertionOrder": true + } + }, + "additionalProperties": false + }, + "ContinuousHyperParameterRange": { + "description": "Provides the name and range of a continuous hyperparameter.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the hyperparameter.", + "type": "string", + "maxLength": 256 + }, + "MinValue": { + "description": "The minimum allowable value for the hyperparameter.", + "type": "number", + "minimum": -1000000 + }, + "MaxValue": { + "description": "The maximum allowable value for the hyperparameter.", + "type": "number", + "minimum": -1000000 + } + }, + "additionalProperties": false + }, + "IntegerHyperParameterRange": { + "description": "Provides the name and range of an integer-valued hyperparameter.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the hyperparameter.", + "type": "string", + "maxLength": 256 + }, + "MinValue": { + "description": "The minimum allowable value for the hyperparameter.", + "type": "integer", + "minimum": -1000000 + }, + "MaxValue": { + "description": "The maximum allowable value for the hyperparameter.", + "type": "integer", + "maximum": 1000000 + } + }, + "additionalProperties": false + }, + "SolutionConfig": { + "type": "object", + "description": "The configuration to use with the solution. When performAutoML is set to true, Amazon Personalize only evaluates the autoMLConfig section of the solution configuration.", + "properties": { + "AlgorithmHyperParameters": { + "description": "Lists the hyperparameter names and ranges.", + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "maxProperties": 100, + "additionalProperties": false + }, + "AutoMLConfig": { + "description": "The AutoMLConfig object containing a list of recipes to search when AutoML is performed.", + "type": "object", + "properties": { + "MetricName": { + "description": "The metric to optimize.", + "type": "string", + "maxLength": 256 + }, + "RecipeList": { + "description": "The list of candidate recipes.", + "type": "array", + "items": { + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+" + }, + "insertionOrder": true, + "maxItems": 100 + } + }, + "additionalProperties": false + }, + "EventValueThreshold": { + "description": "Only events with a value greater than or equal to this threshold are used for training a model.", + "type": "string", + "maxLength": 256 + }, + "FeatureTransformationParameters": { + "description": "Lists the feature transformation parameters.", + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "maxProperties": 100, + "additionalProperties": false + }, + "HpoConfig": { + "description": "Describes the properties for hyperparameter optimization (HPO)", + "type": "object", + "properties": { + "AlgorithmHyperParameterRanges": { + "description": "The hyperparameters and their allowable ranges", + "type": "object", + "properties": { + "CategoricalHyperParameterRanges": { + "description": "The categorical hyperparameters and their ranges.", + "type": "array", + "maxItems": 100, + "items": { + "$ref": "#/definitions/CategoricalHyperParameterRange" + }, + "insertionOrder": true + }, + "ContinuousHyperParameterRanges": { + "description": "The continuous hyperparameters and their ranges.", + "type": "array", + "maxItems": 100, + "items": { + "$ref": "#/definitions/ContinuousHyperParameterRange" + }, + "insertionOrder": true + }, + "IntegerHyperParameterRanges": { + "description": "The integer hyperparameters and their ranges.", + "type": "array", + "maxItems": 100, + "items": { + "$ref": "#/definitions/IntegerHyperParameterRange" + }, + "insertionOrder": true + } + }, + "additionalProperties": false + }, + "HpoObjective": { + "description": "The metric to optimize during HPO.", + "type": "object", + "properties": { + "MetricName": { + "description": "The name of the metric", + "type": "string", + "maxLength": 256 + }, + "Type": { + "description": "The type of the metric. Valid values are Maximize and Minimize.", + "type": "string", + "enum": [ + "Maximize", + "Minimize" + ] + }, + "MetricRegex": { + "description": "A regular expression for finding the metric in the training job logs.", + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "HpoResourceConfig": { + "description": "Describes the resource configuration for hyperparameter optimization (HPO).", + "type": "object", + "properties": { + "MaxNumberOfTrainingJobs": { + "description": "The maximum number of training jobs when you create a solution version. The maximum value for maxNumberOfTrainingJobs is 40.", + "type": "string", + "maxLength": 256 + }, + "MaxParallelTrainingJobs": { + "description": "The maximum number of parallel training jobs when you create a solution version. The maximum value for maxParallelTrainingJobs is 10.", + "type": "string", + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name for the solution", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_]*" + }, + "SolutionArn": { + "$ref": "#/definitions/SolutionArn" + }, + "EventType": { + "description": "When your have multiple event types (using an EVENT_TYPE schema field), this parameter specifies which event type (for example, 'click' or 'like') is used for training the model. If you do not provide an eventType, Amazon Personalize will use all interactions for training with equal weight regardless of type.", + "type": "string", + "maxLength": 256 + }, + "DatasetGroupArn": { + "description": "The ARN of the dataset group that provides the training data.", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+" + }, + "PerformAutoML": { + "description": "Whether to perform automated machine learning (AutoML). The default is false. For this case, you must specify recipeArn.", + "type": "boolean" + }, + "PerformHPO": { + "description": "Whether to perform hyperparameter optimization (HPO) on the specified or selected recipe. The default is false. When performing AutoML, this parameter is always true and you should not set it to false.", + "type": "boolean" + }, + "RecipeArn": { + "description": "The ARN of the recipe to use for model training. Only specified when performAutoML is false.", + "type": "string", + "maxLength": 256, + "pattern": "arn:([a-z\\d-]+):personalize:.*:.*:.+" + }, + "SolutionConfig": { + "$ref": "#/definitions/SolutionConfig" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "DatasetGroupArn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/EventType", + "/properties/DatasetGroupArn", + "/properties/PerformAutoML", + "/properties/PerformHPO", + "/properties/RecipeArn", + "/properties/SolutionConfig" + ], + "taggable": false, + "readOnlyProperties": [ + "/properties/SolutionArn" + ], + "primaryIdentifier": [ + "/properties/SolutionArn" + ], + "handlers": { + "create": { + "permissions": [ + "personalize:CreateSolution", + "personalize:DescribeSolution" + ] + }, + "read": { + "permissions": [ + "personalize:DescribeSolution" + ] + }, + "delete": { + "permissions": [ + "personalize:DeleteSolution", + "personalize:DescribeSolution" + ] + }, + "list": { + "permissions": [ + "personalize:ListSolutions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/admchannel.json b/internal/aws/cfn/schemas/aws/pinpoint/admchannel.json new file mode 100644 index 00000000..737fb2b5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/admchannel.json @@ -0,0 +1,36 @@ +{ + "typeName": "AWS::Pinpoint::ADMChannel", + "description": "Resource Type definition for AWS::Pinpoint::ADMChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ClientSecret": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "ClientId": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + } + }, + "required": [ + "ApplicationId", + "ClientId", + "ClientSecret" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/apnschannel.json b/internal/aws/cfn/schemas/aws/pinpoint/apnschannel.json new file mode 100644 index 00000000..67d8ceda --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/apnschannel.json @@ -0,0 +1,49 @@ +{ + "typeName": "AWS::Pinpoint::APNSChannel", + "description": "Resource Type definition for AWS::Pinpoint::APNSChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "BundleId": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "DefaultAuthenticationMethod": { + "type": "string" + }, + "TokenKey": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "TeamId": { + "type": "string" + }, + "Certificate": { + "type": "string" + }, + "TokenKeyId": { + "type": "string" + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/apnssandboxchannel.json b/internal/aws/cfn/schemas/aws/pinpoint/apnssandboxchannel.json new file mode 100644 index 00000000..e3048849 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/apnssandboxchannel.json @@ -0,0 +1,49 @@ +{ + "typeName": "AWS::Pinpoint::APNSSandboxChannel", + "description": "Resource Type definition for AWS::Pinpoint::APNSSandboxChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "BundleId": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "DefaultAuthenticationMethod": { + "type": "string" + }, + "TokenKey": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "TeamId": { + "type": "string" + }, + "Certificate": { + "type": "string" + }, + "TokenKeyId": { + "type": "string" + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/apnsvoipchannel.json b/internal/aws/cfn/schemas/aws/pinpoint/apnsvoipchannel.json new file mode 100644 index 00000000..c6425bd0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/apnsvoipchannel.json @@ -0,0 +1,49 @@ +{ + "typeName": "AWS::Pinpoint::APNSVoipChannel", + "description": "Resource Type definition for AWS::Pinpoint::APNSVoipChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "BundleId": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "DefaultAuthenticationMethod": { + "type": "string" + }, + "TokenKey": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "TeamId": { + "type": "string" + }, + "Certificate": { + "type": "string" + }, + "TokenKeyId": { + "type": "string" + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/apnsvoipsandboxchannel.json b/internal/aws/cfn/schemas/aws/pinpoint/apnsvoipsandboxchannel.json new file mode 100644 index 00000000..ee692989 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/apnsvoipsandboxchannel.json @@ -0,0 +1,49 @@ +{ + "typeName": "AWS::Pinpoint::APNSVoipSandboxChannel", + "description": "Resource Type definition for AWS::Pinpoint::APNSVoipSandboxChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "BundleId": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "DefaultAuthenticationMethod": { + "type": "string" + }, + "TokenKey": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "TeamId": { + "type": "string" + }, + "Certificate": { + "type": "string" + }, + "TokenKeyId": { + "type": "string" + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/app.json b/internal/aws/cfn/schemas/aws/pinpoint/app.json new file mode 100644 index 00000000..c38a5c97 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/app.json @@ -0,0 +1,32 @@ +{ + "typeName": "AWS::Pinpoint::App", + "description": "Resource Type definition for AWS::Pinpoint::App", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/applicationsettings.json b/internal/aws/cfn/schemas/aws/pinpoint/applicationsettings.json new file mode 100644 index 00000000..87c6a9e0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/applicationsettings.json @@ -0,0 +1,88 @@ +{ + "typeName": "AWS::Pinpoint::ApplicationSettings", + "description": "Resource Type definition for AWS::Pinpoint::ApplicationSettings", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "QuietTime": { + "$ref": "#/definitions/QuietTime" + }, + "Limits": { + "$ref": "#/definitions/Limits" + }, + "ApplicationId": { + "type": "string" + }, + "CampaignHook": { + "$ref": "#/definitions/CampaignHook" + }, + "CloudWatchMetricsEnabled": { + "type": "boolean" + } + }, + "definitions": { + "CampaignHook": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mode": { + "type": "string" + }, + "WebUrl": { + "type": "string" + }, + "LambdaFunctionName": { + "type": "string" + } + } + }, + "QuietTime": { + "type": "object", + "additionalProperties": false, + "properties": { + "Start": { + "type": "string" + }, + "End": { + "type": "string" + } + }, + "required": [ + "Start", + "End" + ] + }, + "Limits": { + "type": "object", + "additionalProperties": false, + "properties": { + "Daily": { + "type": "integer" + }, + "MaximumDuration": { + "type": "integer" + }, + "Total": { + "type": "integer" + }, + "MessagesPerSecond": { + "type": "integer" + } + } + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/baiduchannel.json b/internal/aws/cfn/schemas/aws/pinpoint/baiduchannel.json new file mode 100644 index 00000000..01364383 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/baiduchannel.json @@ -0,0 +1,36 @@ +{ + "typeName": "AWS::Pinpoint::BaiduChannel", + "description": "Resource Type definition for AWS::Pinpoint::BaiduChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SecretKey": { + "type": "string" + }, + "ApiKey": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "ApplicationId": { + "type": "string" + } + }, + "required": [ + "ApplicationId", + "SecretKey", + "ApiKey" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/campaign.json b/internal/aws/cfn/schemas/aws/pinpoint/campaign.json new file mode 100644 index 00000000..23f2f04d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/campaign.json @@ -0,0 +1,537 @@ +{ + "typeName": "AWS::Pinpoint::Campaign", + "description": "Resource Type definition for AWS::Pinpoint::Campaign", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "SegmentId": { + "type": "string" + }, + "Priority": { + "type": "integer" + }, + "TemplateConfiguration": { + "$ref": "#/definitions/TemplateConfiguration" + }, + "IsPaused": { + "type": "boolean" + }, + "AdditionalTreatments": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/WriteTreatmentResource" + } + }, + "Name": { + "type": "string" + }, + "SegmentVersion": { + "type": "integer" + }, + "TreatmentDescription": { + "type": "string" + }, + "MessageConfiguration": { + "$ref": "#/definitions/MessageConfiguration" + }, + "Limits": { + "$ref": "#/definitions/Limits" + }, + "CampaignId": { + "type": "string" + }, + "HoldoutPercent": { + "type": "integer" + }, + "Schedule": { + "$ref": "#/definitions/Schedule" + }, + "CustomDeliveryConfiguration": { + "$ref": "#/definitions/CustomDeliveryConfiguration" + }, + "Arn": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "CampaignHook": { + "$ref": "#/definitions/CampaignHook" + }, + "Tags": { + "type": "object" + }, + "TreatmentName": { + "type": "string" + } + }, + "definitions": { + "QuietTime": { + "type": "object", + "additionalProperties": false, + "properties": { + "Start": { + "type": "string" + }, + "End": { + "type": "string" + } + }, + "required": [ + "Start", + "End" + ] + }, + "SetDimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DimensionType": { + "type": "string" + } + } + }, + "Message": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "type": "string" + }, + "MediaUrl": { + "type": "string" + }, + "TimeToLive": { + "type": "integer" + }, + "ImageSmallIconUrl": { + "type": "string" + }, + "ImageUrl": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "Url": { + "type": "string" + }, + "JsonBody": { + "type": "string" + }, + "ImageIconUrl": { + "type": "string" + }, + "SilentPush": { + "type": "boolean" + }, + "Body": { + "type": "string" + }, + "RawContent": { + "type": "string" + } + } + }, + "InAppMessageContent": { + "type": "object", + "additionalProperties": false, + "properties": { + "BodyConfig": { + "$ref": "#/definitions/InAppMessageBodyConfig" + }, + "SecondaryBtn": { + "$ref": "#/definitions/InAppMessageButton" + }, + "ImageUrl": { + "type": "string" + }, + "PrimaryBtn": { + "$ref": "#/definitions/InAppMessageButton" + }, + "HeaderConfig": { + "$ref": "#/definitions/InAppMessageHeaderConfig" + }, + "BackgroundColor": { + "type": "string" + } + } + }, + "InAppMessageBodyConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Alignment": { + "type": "string" + }, + "TextColor": { + "type": "string" + }, + "Body": { + "type": "string" + } + } + }, + "CampaignEventFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Dimensions": { + "$ref": "#/definitions/EventDimensions" + }, + "FilterType": { + "type": "string" + } + } + }, + "TemplateConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "SMSTemplate": { + "$ref": "#/definitions/Template" + }, + "EmailTemplate": { + "$ref": "#/definitions/Template" + }, + "PushTemplate": { + "$ref": "#/definitions/Template" + }, + "VoiceTemplate": { + "$ref": "#/definitions/Template" + } + } + }, + "CampaignCustomMessage": { + "type": "object", + "additionalProperties": false, + "properties": { + "Data": { + "type": "string" + } + } + }, + "EventDimensions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "type": "object" + }, + "Metrics": { + "type": "object" + }, + "EventType": { + "$ref": "#/definitions/SetDimension" + } + } + }, + "Template": { + "type": "object", + "additionalProperties": false, + "properties": { + "Version": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "MessageConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "APNSMessage": { + "$ref": "#/definitions/Message" + }, + "BaiduMessage": { + "$ref": "#/definitions/Message" + }, + "DefaultMessage": { + "$ref": "#/definitions/Message" + }, + "InAppMessage": { + "$ref": "#/definitions/CampaignInAppMessage" + }, + "EmailMessage": { + "$ref": "#/definitions/CampaignEmailMessage" + }, + "GCMMessage": { + "$ref": "#/definitions/Message" + }, + "SMSMessage": { + "$ref": "#/definitions/CampaignSmsMessage" + }, + "CustomMessage": { + "$ref": "#/definitions/CampaignCustomMessage" + }, + "ADMMessage": { + "$ref": "#/definitions/Message" + } + } + }, + "Limits": { + "type": "object", + "additionalProperties": false, + "properties": { + "MessagesPerSecond": { + "type": "integer" + }, + "Daily": { + "type": "integer" + }, + "MaximumDuration": { + "type": "integer" + }, + "Total": { + "type": "integer" + }, + "Session": { + "type": "integer" + } + } + }, + "WriteTreatmentResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "TreatmentDescription": { + "type": "string" + }, + "MessageConfiguration": { + "$ref": "#/definitions/MessageConfiguration" + }, + "Schedule": { + "$ref": "#/definitions/Schedule" + }, + "TemplateConfiguration": { + "$ref": "#/definitions/TemplateConfiguration" + }, + "CustomDeliveryConfiguration": { + "$ref": "#/definitions/CustomDeliveryConfiguration" + }, + "SizePercent": { + "type": "integer" + }, + "TreatmentName": { + "type": "string" + } + } + }, + "CampaignInAppMessage": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomConfig": { + "type": "object" + }, + "Layout": { + "type": "string" + }, + "Content": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/InAppMessageContent" + } + } + } + }, + "CampaignEmailMessage": { + "type": "object", + "additionalProperties": false, + "properties": { + "Title": { + "type": "string" + }, + "FromAddress": { + "type": "string" + }, + "HtmlBody": { + "type": "string" + }, + "Body": { + "type": "string" + } + } + }, + "CampaignSmsMessage": { + "type": "object", + "additionalProperties": false, + "properties": { + "EntityId": { + "type": "string" + }, + "OriginationNumber": { + "type": "string" + }, + "SenderId": { + "type": "string" + }, + "Body": { + "type": "string" + }, + "MessageType": { + "type": "string" + }, + "TemplateId": { + "type": "string" + } + } + }, + "Schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimeZone": { + "type": "string" + }, + "QuietTime": { + "$ref": "#/definitions/QuietTime" + }, + "EndTime": { + "type": "string" + }, + "StartTime": { + "type": "string" + }, + "Frequency": { + "type": "string" + }, + "EventFilter": { + "$ref": "#/definitions/CampaignEventFilter" + }, + "IsLocalTime": { + "type": "boolean" + } + } + }, + "DefaultButtonConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ButtonAction": { + "type": "string" + }, + "BorderRadius": { + "type": "integer" + }, + "Text": { + "type": "string" + }, + "TextColor": { + "type": "string" + }, + "Link": { + "type": "string" + }, + "BackgroundColor": { + "type": "string" + } + } + }, + "CustomDeliveryConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "EndpointTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "DeliveryUri": { + "type": "string" + } + } + }, + "CampaignHook": { + "type": "object", + "additionalProperties": false, + "properties": { + "WebUrl": { + "type": "string" + }, + "LambdaFunctionName": { + "type": "string" + }, + "Mode": { + "type": "string" + } + } + }, + "InAppMessageButton": { + "type": "object", + "additionalProperties": false, + "properties": { + "IOS": { + "$ref": "#/definitions/OverrideButtonConfiguration" + }, + "Web": { + "$ref": "#/definitions/OverrideButtonConfiguration" + }, + "DefaultConfig": { + "$ref": "#/definitions/DefaultButtonConfiguration" + }, + "Android": { + "$ref": "#/definitions/OverrideButtonConfiguration" + } + } + }, + "InAppMessageHeaderConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Alignment": { + "type": "string" + }, + "TextColor": { + "type": "string" + }, + "Header": { + "type": "string" + } + } + }, + "OverrideButtonConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ButtonAction": { + "type": "string" + }, + "Link": { + "type": "string" + } + } + } + }, + "required": [ + "SegmentId", + "Schedule", + "ApplicationId", + "Name" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/CampaignId" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CampaignId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/emailchannel.json b/internal/aws/cfn/schemas/aws/pinpoint/emailchannel.json new file mode 100644 index 00000000..6612222b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/emailchannel.json @@ -0,0 +1,45 @@ +{ + "typeName": "AWS::Pinpoint::EmailChannel", + "description": "Resource Type definition for AWS::Pinpoint::EmailChannel", + "additionalProperties": false, + "properties": { + "ConfigurationSet": { + "type": "string" + }, + "FromAddress": { + "type": "string" + }, + "OrchestrationSendingRoleArn": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "Identity": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "FromAddress", + "ApplicationId", + "Identity" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/emailtemplate.json b/internal/aws/cfn/schemas/aws/pinpoint/emailtemplate.json new file mode 100644 index 00000000..d0f80ec8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/emailtemplate.json @@ -0,0 +1,48 @@ +{ + "typeName": "AWS::Pinpoint::EmailTemplate", + "description": "Resource Type definition for AWS::Pinpoint::EmailTemplate", + "additionalProperties": false, + "properties": { + "HtmlPart": { + "type": "string" + }, + "TextPart": { + "type": "string" + }, + "TemplateName": { + "type": "string" + }, + "TemplateDescription": { + "type": "string" + }, + "DefaultSubstitutions": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Subject": { + "type": "string" + }, + "Tags": { + "type": "object" + } + }, + "required": [ + "TemplateName", + "Subject" + ], + "createOnlyProperties": [ + "/properties/TemplateName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/eventstream.json b/internal/aws/cfn/schemas/aws/pinpoint/eventstream.json new file mode 100644 index 00000000..1816d7cd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/eventstream.json @@ -0,0 +1,33 @@ +{ + "typeName": "AWS::Pinpoint::EventStream", + "description": "Resource Type definition for AWS::Pinpoint::EventStream", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + }, + "DestinationStreamArn": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "ApplicationId", + "DestinationStreamArn", + "RoleArn" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/gcmchannel.json b/internal/aws/cfn/schemas/aws/pinpoint/gcmchannel.json new file mode 100644 index 00000000..8c7f7b34 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/gcmchannel.json @@ -0,0 +1,37 @@ +{ + "typeName": "AWS::Pinpoint::GCMChannel", + "description": "Resource Type definition for AWS::Pinpoint::GCMChannel", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "ServiceJson": { + "type": "string" + }, + "DefaultAuthenticationMethod": { + "type": "string" + }, + "ApiKey": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "ApplicationId": { + "type": "string" + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/inapptemplate.json b/internal/aws/cfn/schemas/aws/pinpoint/inapptemplate.json new file mode 100644 index 00000000..3b7e1862 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/inapptemplate.json @@ -0,0 +1,213 @@ +{ + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/TemplateName" + ], + "definitions": { + "Alignment": { + "enum": [ + "LEFT", + "CENTER", + "RIGHT" + ], + "type": "string" + }, + "BodyConfig": { + "additionalProperties": false, + "properties": { + "Alignment": { + "$ref": "#/definitions/Alignment" + }, + "Body": { + "type": "string" + }, + "TextColor": { + "type": "string" + } + }, + "type": "object" + }, + "ButtonAction": { + "enum": [ + "LINK", + "DEEP_LINK", + "CLOSE" + ], + "type": "string" + }, + "ButtonConfig": { + "additionalProperties": false, + "properties": { + "Android": { + "$ref": "#/definitions/OverrideButtonConfiguration" + }, + "DefaultConfig": { + "$ref": "#/definitions/DefaultButtonConfiguration" + }, + "IOS": { + "$ref": "#/definitions/OverrideButtonConfiguration" + }, + "Web": { + "$ref": "#/definitions/OverrideButtonConfiguration" + } + }, + "type": "object" + }, + "DefaultButtonConfiguration": { + "additionalProperties": false, + "properties": { + "BackgroundColor": { + "type": "string" + }, + "BorderRadius": { + "type": "integer" + }, + "ButtonAction": { + "$ref": "#/definitions/ButtonAction" + }, + "Link": { + "type": "string" + }, + "Text": { + "type": "string" + }, + "TextColor": { + "type": "string" + } + }, + "type": "object" + }, + "HeaderConfig": { + "additionalProperties": false, + "properties": { + "Alignment": { + "$ref": "#/definitions/Alignment" + }, + "Header": { + "type": "string" + }, + "TextColor": { + "type": "string" + } + }, + "type": "object" + }, + "InAppMessageContent": { + "additionalProperties": false, + "properties": { + "BackgroundColor": { + "type": "string" + }, + "BodyConfig": { + "$ref": "#/definitions/BodyConfig" + }, + "HeaderConfig": { + "$ref": "#/definitions/HeaderConfig" + }, + "ImageUrl": { + "type": "string" + }, + "PrimaryBtn": { + "$ref": "#/definitions/ButtonConfig" + }, + "SecondaryBtn": { + "$ref": "#/definitions/ButtonConfig" + } + }, + "type": "object" + }, + "OverrideButtonConfiguration": { + "additionalProperties": false, + "properties": { + "ButtonAction": { + "$ref": "#/definitions/ButtonAction" + }, + "Link": { + "type": "string" + } + }, + "type": "object" + } + }, + "description": "Resource Type definition for AWS::Pinpoint::InAppTemplate", + "handlers": { + "create": { + "permissions": [ + "mobiletargeting:CreateInAppTemplate", + "mobiletargeting:GetInAppTemplate", + "mobiletargeting:TagResource" + ] + }, + "delete": { + "permissions": [ + "mobiletargeting:DeleteInAppTemplate", + "mobiletargeting:GetInAppTemplate" + ] + }, + "list": { + "permissions": [ + "mobiletargeting:GetInAppTemplate", + "mobiletargeting:ListTemplates" + ] + }, + "read": { + "permissions": [ + "mobiletargeting:GetInAppTemplate", + "mobiletargeting:ListTemplates" + ] + }, + "update": { + "permissions": [ + "mobiletargeting:UpdateInAppTemplate", + "mobiletargeting:GetInAppTemplate" + ] + } + }, + "primaryIdentifier": [ + "/properties/TemplateName" + ], + "properties": { + "Arn": { + "type": "string" + }, + "Content": { + "insertionOrder": true, + "items": { + "$ref": "#/definitions/InAppMessageContent" + }, + "type": "array" + }, + "CustomConfig": { + "type": "object" + }, + "Layout": { + "enum": [ + "BOTTOM_BANNER", + "TOP_BANNER", + "OVERLAYS", + "MOBILE_FEED", + "MIDDLE_BANNER", + "CAROUSEL" + ], + "type": "string" + }, + "Tags": { + "type": "object" + }, + "TemplateDescription": { + "type": "string" + }, + "TemplateName": { + "type": "string" + } + }, + "readOnlyProperties": [ + "/properties/Arn" + ], + "required": [ + "TemplateName" + ], + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "taggable": true, + "typeName": "AWS::Pinpoint::InAppTemplate" +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/pushtemplate.json b/internal/aws/cfn/schemas/aws/pinpoint/pushtemplate.json new file mode 100644 index 00000000..61b1390a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/pushtemplate.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::Pinpoint::PushTemplate", + "description": "Resource Type definition for AWS::Pinpoint::PushTemplate", + "additionalProperties": false, + "properties": { + "GCM": { + "$ref": "#/definitions/AndroidPushNotificationTemplate" + }, + "Baidu": { + "$ref": "#/definitions/AndroidPushNotificationTemplate" + }, + "TemplateName": { + "type": "string" + }, + "ADM": { + "$ref": "#/definitions/AndroidPushNotificationTemplate" + }, + "APNS": { + "$ref": "#/definitions/APNSPushNotificationTemplate" + }, + "TemplateDescription": { + "type": "string" + }, + "DefaultSubstitutions": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Default": { + "$ref": "#/definitions/DefaultPushNotificationTemplate" + }, + "Tags": { + "type": "object" + } + }, + "definitions": { + "AndroidPushNotificationTemplate": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "type": "string" + }, + "ImageUrl": { + "type": "string" + }, + "SmallImageIconUrl": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "ImageIconUrl": { + "type": "string" + }, + "Sound": { + "type": "string" + }, + "Body": { + "type": "string" + }, + "Url": { + "type": "string" + } + } + }, + "APNSPushNotificationTemplate": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "type": "string" + }, + "MediaUrl": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "Sound": { + "type": "string" + }, + "Body": { + "type": "string" + }, + "Url": { + "type": "string" + } + } + }, + "DefaultPushNotificationTemplate": { + "type": "object", + "additionalProperties": false, + "properties": { + "Title": { + "type": "string" + }, + "Action": { + "type": "string" + }, + "Sound": { + "type": "string" + }, + "Body": { + "type": "string" + }, + "Url": { + "type": "string" + } + } + } + }, + "required": [ + "TemplateName" + ], + "createOnlyProperties": [ + "/properties/TemplateName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/segment.json b/internal/aws/cfn/schemas/aws/pinpoint/segment.json new file mode 100644 index 00000000..0cc7fdde --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/segment.json @@ -0,0 +1,234 @@ +{ + "typeName": "AWS::Pinpoint::Segment", + "description": "Resource Type definition for AWS::Pinpoint::Segment", + "additionalProperties": false, + "properties": { + "SegmentId": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "SegmentGroups": { + "$ref": "#/definitions/SegmentGroups" + }, + "Dimensions": { + "$ref": "#/definitions/SegmentDimensions" + }, + "ApplicationId": { + "type": "string" + }, + "Tags": { + "type": "object" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "SegmentDimensions": { + "type": "object", + "additionalProperties": false, + "properties": { + "Demographic": { + "$ref": "#/definitions/Demographic" + }, + "Metrics": { + "type": "object" + }, + "Attributes": { + "type": "object" + }, + "Behavior": { + "$ref": "#/definitions/Behavior" + }, + "UserAttributes": { + "type": "object" + }, + "Location": { + "$ref": "#/definitions/Location" + } + } + }, + "SegmentGroups": { + "type": "object", + "additionalProperties": false, + "properties": { + "Groups": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Groups" + } + }, + "Include": { + "type": "string" + } + } + }, + "Demographic": { + "type": "object", + "additionalProperties": false, + "properties": { + "AppVersion": { + "$ref": "#/definitions/SetDimension" + }, + "DeviceType": { + "$ref": "#/definitions/SetDimension" + }, + "Platform": { + "$ref": "#/definitions/SetDimension" + }, + "Channel": { + "$ref": "#/definitions/SetDimension" + }, + "Model": { + "$ref": "#/definitions/SetDimension" + }, + "Make": { + "$ref": "#/definitions/SetDimension" + } + } + }, + "Groups": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "SourceType": { + "type": "string" + }, + "Dimensions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SegmentDimensions" + } + }, + "SourceSegments": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SourceSegments" + } + } + } + }, + "Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "GPSPoint": { + "$ref": "#/definitions/GPSPoint" + }, + "Country": { + "$ref": "#/definitions/SetDimension" + } + } + }, + "Behavior": { + "type": "object", + "additionalProperties": false, + "properties": { + "Recency": { + "$ref": "#/definitions/Recency" + } + } + }, + "SetDimension": { + "type": "object", + "additionalProperties": false, + "properties": { + "DimensionType": { + "type": "string" + }, + "Values": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "SourceSegments": { + "type": "object", + "additionalProperties": false, + "properties": { + "Version": { + "type": "integer" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "Id" + ] + }, + "GPSPoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "RangeInKilometers": { + "type": "number" + }, + "Coordinates": { + "$ref": "#/definitions/Coordinates" + } + }, + "required": [ + "RangeInKilometers", + "Coordinates" + ] + }, + "Recency": { + "type": "object", + "additionalProperties": false, + "properties": { + "Duration": { + "type": "string" + }, + "RecencyType": { + "type": "string" + } + }, + "required": [ + "Duration", + "RecencyType" + ] + }, + "Coordinates": { + "type": "object", + "additionalProperties": false, + "properties": { + "Latitude": { + "type": "number" + }, + "Longitude": { + "type": "number" + } + }, + "required": [ + "Longitude", + "Latitude" + ] + } + }, + "required": [ + "ApplicationId", + "Name" + ], + "readOnlyProperties": [ + "/properties/SegmentId", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/SegmentId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/smschannel.json b/internal/aws/cfn/schemas/aws/pinpoint/smschannel.json new file mode 100644 index 00000000..130ec2b4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/smschannel.json @@ -0,0 +1,34 @@ +{ + "typeName": "AWS::Pinpoint::SMSChannel", + "description": "Resource Type definition for AWS::Pinpoint::SMSChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ShortCode": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "ApplicationId": { + "type": "string" + }, + "SenderId": { + "type": "string" + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/smstemplate.json b/internal/aws/cfn/schemas/aws/pinpoint/smstemplate.json new file mode 100644 index 00000000..fedb9331 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/smstemplate.json @@ -0,0 +1,42 @@ +{ + "typeName": "AWS::Pinpoint::SmsTemplate", + "description": "Resource Type definition for AWS::Pinpoint::SmsTemplate", + "additionalProperties": false, + "properties": { + "TemplateName": { + "type": "string" + }, + "TemplateDescription": { + "type": "string" + }, + "DefaultSubstitutions": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Body": { + "type": "string" + }, + "Tags": { + "type": "object" + } + }, + "required": [ + "TemplateName", + "Body" + ], + "createOnlyProperties": [ + "/properties/TemplateName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpoint/voicechannel.json b/internal/aws/cfn/schemas/aws/pinpoint/voicechannel.json new file mode 100644 index 00000000..3f3b2d20 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpoint/voicechannel.json @@ -0,0 +1,28 @@ +{ + "typeName": "AWS::Pinpoint::VoiceChannel", + "description": "Resource Type definition for AWS::Pinpoint::VoiceChannel", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Enabled": { + "type": "boolean" + }, + "ApplicationId": { + "type": "string" + } + }, + "required": [ + "ApplicationId" + ], + "createOnlyProperties": [ + "/properties/ApplicationId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpointemail/configurationset.json b/internal/aws/cfn/schemas/aws/pinpointemail/configurationset.json new file mode 100644 index 00000000..1946bd61 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpointemail/configurationset.json @@ -0,0 +1,94 @@ +{ + "typeName": "AWS::PinpointEmail::ConfigurationSet", + "description": "Resource Type definition for AWS::PinpointEmail::ConfigurationSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SendingOptions": { + "$ref": "#/definitions/SendingOptions" + }, + "TrackingOptions": { + "$ref": "#/definitions/TrackingOptions" + }, + "ReputationOptions": { + "$ref": "#/definitions/ReputationOptions" + }, + "DeliveryOptions": { + "$ref": "#/definitions/DeliveryOptions" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tags" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "SendingOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "SendingEnabled": { + "type": "boolean" + } + } + }, + "TrackingOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomRedirectDomain": { + "type": "string" + } + } + }, + "ReputationOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "ReputationMetricsEnabled": { + "type": "boolean" + } + } + }, + "DeliveryOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "SendingPoolName": { + "type": "string" + } + } + }, + "Tags": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpointemail/configurationseteventdestination.json b/internal/aws/cfn/schemas/aws/pinpointemail/configurationseteventdestination.json new file mode 100644 index 00000000..a5c00865 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpointemail/configurationseteventdestination.json @@ -0,0 +1,136 @@ +{ + "typeName": "AWS::PinpointEmail::ConfigurationSetEventDestination", + "description": "Resource Type definition for AWS::PinpointEmail::ConfigurationSetEventDestination", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "EventDestinationName": { + "type": "string" + }, + "ConfigurationSetName": { + "type": "string" + }, + "EventDestination": { + "$ref": "#/definitions/EventDestination" + } + }, + "definitions": { + "EventDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "SnsDestination": { + "$ref": "#/definitions/SnsDestination" + }, + "CloudWatchDestination": { + "$ref": "#/definitions/CloudWatchDestination" + }, + "Enabled": { + "type": "boolean" + }, + "MatchingEventTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "PinpointDestination": { + "$ref": "#/definitions/PinpointDestination" + }, + "KinesisFirehoseDestination": { + "$ref": "#/definitions/KinesisFirehoseDestination" + } + }, + "required": [ + "MatchingEventTypes" + ] + }, + "SnsDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "TopicArn": { + "type": "string" + } + }, + "required": [ + "TopicArn" + ] + }, + "PinpointDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "ApplicationArn": { + "type": "string" + } + } + }, + "KinesisFirehoseDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "DeliveryStreamArn": { + "type": "string" + }, + "IamRoleArn": { + "type": "string" + } + }, + "required": [ + "DeliveryStreamArn", + "IamRoleArn" + ] + }, + "CloudWatchDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "DimensionConfigurations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/DimensionConfiguration" + } + } + } + }, + "DimensionConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "DimensionValueSource": { + "type": "string" + }, + "DefaultDimensionValue": { + "type": "string" + }, + "DimensionName": { + "type": "string" + } + }, + "required": [ + "DimensionValueSource", + "DefaultDimensionValue", + "DimensionName" + ] + } + }, + "required": [ + "ConfigurationSetName", + "EventDestinationName" + ], + "createOnlyProperties": [ + "/properties/ConfigurationSetName", + "/properties/EventDestinationName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpointemail/dedicatedippool.json b/internal/aws/cfn/schemas/aws/pinpointemail/dedicatedippool.json new file mode 100644 index 00000000..58ac3f63 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpointemail/dedicatedippool.json @@ -0,0 +1,43 @@ +{ + "typeName": "AWS::PinpointEmail::DedicatedIpPool", + "description": "Resource Type definition for AWS::PinpointEmail::DedicatedIpPool", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "PoolName": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tags" + } + } + }, + "definitions": { + "Tags": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + } + }, + "createOnlyProperties": [ + "/properties/PoolName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pinpointemail/identity.json b/internal/aws/cfn/schemas/aws/pinpointemail/identity.json new file mode 100644 index 00000000..b0fcaa99 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pinpointemail/identity.json @@ -0,0 +1,91 @@ +{ + "typeName": "AWS::PinpointEmail::Identity", + "description": "Resource Type definition for AWS::PinpointEmail::Identity", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "IdentityDNSRecordName3": { + "type": "string" + }, + "IdentityDNSRecordName1": { + "type": "string" + }, + "IdentityDNSRecordName2": { + "type": "string" + }, + "IdentityDNSRecordValue3": { + "type": "string" + }, + "IdentityDNSRecordValue2": { + "type": "string" + }, + "IdentityDNSRecordValue1": { + "type": "string" + }, + "FeedbackForwardingEnabled": { + "type": "boolean" + }, + "DkimSigningEnabled": { + "type": "boolean" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tags" + } + }, + "Name": { + "type": "string" + }, + "MailFromAttributes": { + "$ref": "#/definitions/MailFromAttributes" + } + }, + "definitions": { + "Tags": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + } + }, + "MailFromAttributes": { + "type": "object", + "additionalProperties": false, + "properties": { + "MailFromDomain": { + "type": "string" + }, + "BehaviorOnMxFailure": { + "type": "string" + } + } + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/IdentityDNSRecordName1", + "/properties/IdentityDNSRecordValue1", + "/properties/IdentityDNSRecordName3", + "/properties/IdentityDNSRecordValue2", + "/properties/IdentityDNSRecordName2", + "/properties/IdentityDNSRecordValue3", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/pipes/pipe.json b/internal/aws/cfn/schemas/aws/pipes/pipe.json new file mode 100644 index 00000000..4c7790c2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/pipes/pipe.json @@ -0,0 +1,1721 @@ +{ + "typeName": "AWS::Pipes::Pipe", + "description": "Definition of AWS::Pipes::Pipe Resource Type", + "definitions": { + "AssignPublicIp": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "AwsVpcConfiguration": { + "type": "object", + "properties": { + "Subnets": { + "type": "array", + "items": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^subnet-[0-9a-z]*|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + }, + "maxItems": 16, + "minItems": 0 + }, + "SecurityGroups": { + "type": "array", + "items": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^sg-[0-9a-zA-Z]*|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + }, + "maxItems": 5, + "minItems": 0 + }, + "AssignPublicIp": { + "$ref": "#/definitions/AssignPublicIp" + } + }, + "required": [ + "Subnets" + ], + "additionalProperties": false + }, + "BatchArrayProperties": { + "type": "object", + "properties": { + "Size": { + "type": "integer", + "default": 0, + "maximum": 10000, + "minimum": 2 + } + }, + "additionalProperties": false + }, + "BatchContainerOverrides": { + "type": "object", + "properties": { + "Command": { + "type": "array", + "items": { + "type": "string" + } + }, + "Environment": { + "type": "array", + "items": { + "$ref": "#/definitions/BatchEnvironmentVariable" + } + }, + "InstanceType": { + "type": "string" + }, + "ResourceRequirements": { + "type": "array", + "items": { + "$ref": "#/definitions/BatchResourceRequirement" + } + } + }, + "additionalProperties": false + }, + "BatchEnvironmentVariable": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + }, + "BatchJobDependency": { + "type": "object", + "properties": { + "JobId": { + "type": "string" + }, + "Type": { + "$ref": "#/definitions/BatchJobDependencyType" + } + }, + "additionalProperties": false + }, + "BatchJobDependencyType": { + "type": "string", + "enum": [ + "N_TO_N", + "SEQUENTIAL" + ] + }, + "BatchParametersMap": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "BatchResourceRequirement": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/BatchResourceRequirementType" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Type", + "Value" + ], + "additionalProperties": false + }, + "BatchResourceRequirementType": { + "type": "string", + "enum": [ + "GPU", + "MEMORY", + "VCPU" + ] + }, + "BatchRetryStrategy": { + "type": "object", + "properties": { + "Attempts": { + "type": "integer", + "default": 0, + "maximum": 10, + "minimum": 1 + } + }, + "additionalProperties": false + }, + "CapacityProviderStrategyItem": { + "type": "object", + "properties": { + "CapacityProvider": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "Weight": { + "type": "integer", + "default": 0, + "maximum": 1000, + "minimum": 0 + }, + "Base": { + "type": "integer", + "default": 0, + "maximum": 100000, + "minimum": 0 + } + }, + "required": [ + "CapacityProvider" + ], + "additionalProperties": false + }, + "CloudwatchLogsLogDestination": { + "type": "object", + "properties": { + "LogGroupArn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:logs:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):log-group:.+)$" + } + }, + "additionalProperties": false + }, + "DeadLetterConfig": { + "type": "object", + "properties": { + "Arn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)$" + } + }, + "additionalProperties": false + }, + "DynamoDBStreamStartPosition": { + "type": "string", + "enum": [ + "TRIM_HORIZON", + "LATEST" + ] + }, + "EcsContainerOverride": { + "type": "object", + "properties": { + "Command": { + "type": "array", + "items": { + "type": "string" + } + }, + "Cpu": { + "type": "integer" + }, + "Environment": { + "type": "array", + "items": { + "$ref": "#/definitions/EcsEnvironmentVariable" + } + }, + "EnvironmentFiles": { + "type": "array", + "items": { + "$ref": "#/definitions/EcsEnvironmentFile" + } + }, + "Memory": { + "type": "integer" + }, + "MemoryReservation": { + "type": "integer" + }, + "Name": { + "type": "string" + }, + "ResourceRequirements": { + "type": "array", + "items": { + "$ref": "#/definitions/EcsResourceRequirement" + } + } + }, + "additionalProperties": false + }, + "EcsEnvironmentFile": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/EcsEnvironmentFileType" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Type", + "Value" + ], + "additionalProperties": false + }, + "EcsEnvironmentFileType": { + "type": "string", + "enum": [ + "s3" + ] + }, + "EcsEnvironmentVariable": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + }, + "EcsEphemeralStorage": { + "type": "object", + "properties": { + "SizeInGiB": { + "type": "integer", + "default": 0, + "maximum": 200, + "minimum": 21 + } + }, + "required": [ + "SizeInGiB" + ], + "additionalProperties": false + }, + "EcsInferenceAcceleratorOverride": { + "type": "object", + "properties": { + "DeviceName": { + "type": "string" + }, + "DeviceType": { + "type": "string" + } + }, + "additionalProperties": false + }, + "EcsResourceRequirement": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/EcsResourceRequirementType" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Type", + "Value" + ], + "additionalProperties": false + }, + "EcsResourceRequirementType": { + "type": "string", + "enum": [ + "GPU", + "InferenceAccelerator" + ] + }, + "EcsTaskOverride": { + "type": "object", + "properties": { + "ContainerOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/EcsContainerOverride" + } + }, + "Cpu": { + "type": "string" + }, + "EphemeralStorage": { + "$ref": "#/definitions/EcsEphemeralStorage" + }, + "ExecutionRoleArn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + }, + "InferenceAcceleratorOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/EcsInferenceAcceleratorOverride" + } + }, + "Memory": { + "type": "string" + }, + "TaskRoleArn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + } + }, + "additionalProperties": false + }, + "Filter": { + "type": "object", + "properties": { + "Pattern": { + "type": "string", + "maxLength": 4096, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "FilterCriteria": { + "type": "object", + "properties": { + "Filters": { + "type": "array", + "items": { + "$ref": "#/definitions/Filter" + }, + "maxItems": 5, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FirehoseLogDestination": { + "type": "object", + "properties": { + "DeliveryStreamArn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:firehose:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):deliverystream/.+)$" + } + }, + "additionalProperties": false + }, + "HeaderParametersMap": { + "type": "object", + "patternProperties": { + "^[!#$%&'*+-.^_`|~0-9a-zA-Z]+|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$": { + "type": "string", + "maxLength": 512, + "minLength": 0, + "pattern": "^[ \\t]*[\\x20-\\x7E]+([ \\t]+[\\x20-\\x7E]+)*[ \\t]*|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + } + }, + "additionalProperties": false + }, + "IncludeExecutionDataOption": { + "type": "string", + "enum": [ + "ALL" + ] + }, + "KinesisStreamStartPosition": { + "type": "string", + "enum": [ + "TRIM_HORIZON", + "LATEST", + "AT_TIMESTAMP" + ] + }, + "LaunchType": { + "type": "string", + "enum": [ + "EC2", + "FARGATE", + "EXTERNAL" + ] + }, + "LogLevel": { + "type": "string", + "enum": [ + "OFF", + "ERROR", + "INFO", + "TRACE" + ] + }, + "MQBrokerAccessCredentials": { + "oneOf": [ + { + "type": "object", + "title": "BasicAuth", + "properties": { + "BasicAuth": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + } + }, + "required": [ + "BasicAuth" + ], + "additionalProperties": false + } + ] + }, + "MSKAccessCredentials": { + "oneOf": [ + { + "type": "object", + "title": "SaslScram512Auth", + "properties": { + "SaslScram512Auth": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + } + }, + "required": [ + "SaslScram512Auth" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "ClientCertificateTlsAuth", + "properties": { + "ClientCertificateTlsAuth": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + } + }, + "required": [ + "ClientCertificateTlsAuth" + ], + "additionalProperties": false + } + ] + }, + "MSKStartPosition": { + "type": "string", + "enum": [ + "TRIM_HORIZON", + "LATEST" + ] + }, + "NetworkConfiguration": { + "type": "object", + "properties": { + "AwsvpcConfiguration": { + "$ref": "#/definitions/AwsVpcConfiguration" + } + }, + "additionalProperties": false + }, + "OnPartialBatchItemFailureStreams": { + "type": "string", + "enum": [ + "AUTOMATIC_BISECT" + ] + }, + "PipeEnrichmentHttpParameters": { + "type": "object", + "properties": { + "PathParameterValues": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(?!\\s*$).+|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + } + }, + "HeaderParameters": { + "$ref": "#/definitions/HeaderParametersMap" + }, + "QueryStringParameters": { + "$ref": "#/definitions/QueryStringParametersMap" + } + }, + "additionalProperties": false + }, + "PipeEnrichmentParameters": { + "type": "object", + "properties": { + "InputTemplate": { + "type": "string", + "maxLength": 8192, + "minLength": 0 + }, + "HttpParameters": { + "$ref": "#/definitions/PipeEnrichmentHttpParameters" + } + }, + "additionalProperties": false + }, + "PipeLogConfiguration": { + "type": "object", + "properties": { + "S3LogDestination": { + "$ref": "#/definitions/S3LogDestination" + }, + "FirehoseLogDestination": { + "$ref": "#/definitions/FirehoseLogDestination" + }, + "CloudwatchLogsLogDestination": { + "$ref": "#/definitions/CloudwatchLogsLogDestination" + }, + "Level": { + "$ref": "#/definitions/LogLevel" + }, + "IncludeExecutionData": { + "type": "array", + "items": { + "$ref": "#/definitions/IncludeExecutionDataOption" + }, + "uniqueItems": true + } + }, + "additionalProperties": false + }, + "PipeSourceActiveMQBrokerParameters": { + "type": "object", + "properties": { + "Credentials": { + "$ref": "#/definitions/MQBrokerAccessCredentials" + }, + "QueueName": { + "type": "string", + "maxLength": 1000, + "minLength": 1, + "pattern": "^[\\s\\S]*$" + }, + "BatchSize": { + "type": "integer", + "maximum": 10000, + "minimum": 1 + }, + "MaximumBatchingWindowInSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 0 + } + }, + "required": [ + "Credentials", + "QueueName" + ], + "additionalProperties": false + }, + "PipeSourceDynamoDBStreamParameters": { + "type": "object", + "properties": { + "BatchSize": { + "type": "integer", + "maximum": 10000, + "minimum": 1 + }, + "DeadLetterConfig": { + "$ref": "#/definitions/DeadLetterConfig" + }, + "OnPartialBatchItemFailure": { + "$ref": "#/definitions/OnPartialBatchItemFailureStreams" + }, + "MaximumBatchingWindowInSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 0 + }, + "MaximumRecordAgeInSeconds": { + "type": "integer", + "maximum": 604800, + "minimum": -1 + }, + "MaximumRetryAttempts": { + "type": "integer", + "maximum": 10000, + "minimum": -1 + }, + "ParallelizationFactor": { + "type": "integer", + "maximum": 10, + "minimum": 1 + }, + "StartingPosition": { + "$ref": "#/definitions/DynamoDBStreamStartPosition" + } + }, + "required": [ + "StartingPosition" + ], + "additionalProperties": false + }, + "PipeSourceKinesisStreamParameters": { + "type": "object", + "properties": { + "BatchSize": { + "type": "integer", + "maximum": 10000, + "minimum": 1 + }, + "DeadLetterConfig": { + "$ref": "#/definitions/DeadLetterConfig" + }, + "OnPartialBatchItemFailure": { + "$ref": "#/definitions/OnPartialBatchItemFailureStreams" + }, + "MaximumBatchingWindowInSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 0 + }, + "MaximumRecordAgeInSeconds": { + "type": "integer", + "maximum": 604800, + "minimum": -1 + }, + "MaximumRetryAttempts": { + "type": "integer", + "maximum": 10000, + "minimum": -1 + }, + "ParallelizationFactor": { + "type": "integer", + "maximum": 10, + "minimum": 1 + }, + "StartingPosition": { + "$ref": "#/definitions/KinesisStreamStartPosition" + }, + "StartingPositionTimestamp": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "StartingPosition" + ], + "additionalProperties": false + }, + "PipeSourceManagedStreamingKafkaParameters": { + "type": "object", + "properties": { + "TopicName": { + "type": "string", + "maxLength": 249, + "minLength": 1, + "pattern": "^[^.]([a-zA-Z0-9\\-_.]+)$" + }, + "StartingPosition": { + "$ref": "#/definitions/MSKStartPosition" + }, + "BatchSize": { + "type": "integer", + "maximum": 10000, + "minimum": 1 + }, + "MaximumBatchingWindowInSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 0 + }, + "ConsumerGroupID": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-\\/*:_+=.@-]*$" + }, + "Credentials": { + "$ref": "#/definitions/MSKAccessCredentials" + } + }, + "required": [ + "TopicName" + ], + "additionalProperties": false + }, + "PipeSourceParameters": { + "type": "object", + "properties": { + "FilterCriteria": { + "$ref": "#/definitions/FilterCriteria" + }, + "KinesisStreamParameters": { + "$ref": "#/definitions/PipeSourceKinesisStreamParameters" + }, + "DynamoDBStreamParameters": { + "$ref": "#/definitions/PipeSourceDynamoDBStreamParameters" + }, + "SqsQueueParameters": { + "$ref": "#/definitions/PipeSourceSqsQueueParameters" + }, + "ActiveMQBrokerParameters": { + "$ref": "#/definitions/PipeSourceActiveMQBrokerParameters" + }, + "RabbitMQBrokerParameters": { + "$ref": "#/definitions/PipeSourceRabbitMQBrokerParameters" + }, + "ManagedStreamingKafkaParameters": { + "$ref": "#/definitions/PipeSourceManagedStreamingKafkaParameters" + }, + "SelfManagedKafkaParameters": { + "$ref": "#/definitions/PipeSourceSelfManagedKafkaParameters" + } + }, + "additionalProperties": false + }, + "PipeSourceRabbitMQBrokerParameters": { + "type": "object", + "properties": { + "Credentials": { + "$ref": "#/definitions/MQBrokerAccessCredentials" + }, + "QueueName": { + "type": "string", + "maxLength": 1000, + "minLength": 1, + "pattern": "^[\\s\\S]*$" + }, + "VirtualHost": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-\\/*:_+=.@-]*$" + }, + "BatchSize": { + "type": "integer", + "maximum": 10000, + "minimum": 1 + }, + "MaximumBatchingWindowInSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 0 + } + }, + "required": [ + "Credentials", + "QueueName" + ], + "additionalProperties": false + }, + "PipeSourceSelfManagedKafkaParameters": { + "type": "object", + "properties": { + "TopicName": { + "type": "string", + "maxLength": 249, + "minLength": 1, + "pattern": "^[^.]([a-zA-Z0-9\\-_.]+)$" + }, + "StartingPosition": { + "$ref": "#/definitions/SelfManagedKafkaStartPosition" + }, + "AdditionalBootstrapServers": { + "type": "array", + "items": { + "type": "string", + "maxLength": 300, + "minLength": 1, + "pattern": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]):[0-9]{1,5}$" + }, + "maxItems": 2, + "minItems": 0 + }, + "BatchSize": { + "type": "integer", + "maximum": 10000, + "minimum": 1 + }, + "MaximumBatchingWindowInSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 0 + }, + "ConsumerGroupID": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-\\/*:_+=.@-]*$" + }, + "Credentials": { + "$ref": "#/definitions/SelfManagedKafkaAccessConfigurationCredentials" + }, + "ServerRootCaCertificate": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + }, + "Vpc": { + "$ref": "#/definitions/SelfManagedKafkaAccessConfigurationVpc" + } + }, + "required": [ + "TopicName" + ], + "additionalProperties": false + }, + "PipeSourceSqsQueueParameters": { + "type": "object", + "properties": { + "BatchSize": { + "type": "integer", + "maximum": 10000, + "minimum": 1 + }, + "MaximumBatchingWindowInSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "PipeState": { + "type": "string", + "enum": [ + "RUNNING", + "STOPPED", + "CREATING", + "UPDATING", + "DELETING", + "STARTING", + "STOPPING", + "CREATE_FAILED", + "UPDATE_FAILED", + "START_FAILED", + "STOP_FAILED", + "DELETE_FAILED", + "CREATE_ROLLBACK_FAILED", + "DELETE_ROLLBACK_FAILED", + "UPDATE_ROLLBACK_FAILED" + ] + }, + "PipeTargetBatchJobParameters": { + "type": "object", + "properties": { + "JobDefinition": { + "type": "string" + }, + "JobName": { + "type": "string" + }, + "ArrayProperties": { + "$ref": "#/definitions/BatchArrayProperties" + }, + "RetryStrategy": { + "$ref": "#/definitions/BatchRetryStrategy" + }, + "ContainerOverrides": { + "$ref": "#/definitions/BatchContainerOverrides" + }, + "DependsOn": { + "type": "array", + "items": { + "$ref": "#/definitions/BatchJobDependency" + }, + "maxItems": 20, + "minItems": 0 + }, + "Parameters": { + "$ref": "#/definitions/BatchParametersMap" + } + }, + "required": [ + "JobDefinition", + "JobName" + ], + "additionalProperties": false + }, + "PipeTargetCloudWatchLogsParameters": { + "type": "object", + "properties": { + "LogStreamName": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Timestamp": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^\\$(\\.[\\w_-]+(\\[(\\d+|\\*)\\])*)*$" + } + }, + "additionalProperties": false + }, + "PipeTargetEcsTaskParameters": { + "type": "object", + "properties": { + "TaskDefinitionArn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + }, + "TaskCount": { + "type": "integer", + "minimum": 1 + }, + "LaunchType": { + "$ref": "#/definitions/LaunchType" + }, + "NetworkConfiguration": { + "$ref": "#/definitions/NetworkConfiguration" + }, + "PlatformVersion": { + "type": "string" + }, + "Group": { + "type": "string" + }, + "CapacityProviderStrategy": { + "type": "array", + "items": { + "$ref": "#/definitions/CapacityProviderStrategyItem" + }, + "maxItems": 6, + "minItems": 0 + }, + "EnableECSManagedTags": { + "type": "boolean", + "default": false + }, + "EnableExecuteCommand": { + "type": "boolean", + "default": false + }, + "PlacementConstraints": { + "type": "array", + "items": { + "$ref": "#/definitions/PlacementConstraint" + }, + "maxItems": 10, + "minItems": 0 + }, + "PlacementStrategy": { + "type": "array", + "items": { + "$ref": "#/definitions/PlacementStrategy" + }, + "maxItems": 5, + "minItems": 0 + }, + "PropagateTags": { + "$ref": "#/definitions/PropagateTags" + }, + "ReferenceId": { + "type": "string", + "maxLength": 1024, + "minLength": 0 + }, + "Overrides": { + "$ref": "#/definitions/EcsTaskOverride" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "TaskDefinitionArn" + ], + "additionalProperties": false + }, + "PipeTargetEventBridgeEventBusParameters": { + "type": "object", + "properties": { + "EndpointId": { + "type": "string", + "maxLength": 50, + "minLength": 1, + "pattern": "^[A-Za-z0-9\\-]+[\\.][A-Za-z0-9\\-]+$" + }, + "DetailType": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Source": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "(?=[/\\.\\-_A-Za-z0-9]+)((?!aws\\.).*)|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)" + }, + "Resources": { + "type": "array", + "items": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + }, + "maxItems": 10, + "minItems": 0 + }, + "Time": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*$" + } + }, + "additionalProperties": false + }, + "PipeTargetHttpParameters": { + "type": "object", + "properties": { + "PathParameterValues": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(?!\\s*$).+|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + } + }, + "HeaderParameters": { + "$ref": "#/definitions/HeaderParametersMap" + }, + "QueryStringParameters": { + "$ref": "#/definitions/QueryStringParametersMap" + } + }, + "additionalProperties": false + }, + "PipeTargetInvocationType": { + "type": "string", + "enum": [ + "REQUEST_RESPONSE", + "FIRE_AND_FORGET" + ] + }, + "PipeTargetKinesisStreamParameters": { + "type": "object", + "properties": { + "PartitionKey": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "PartitionKey" + ], + "additionalProperties": false + }, + "PipeTargetLambdaFunctionParameters": { + "type": "object", + "properties": { + "InvocationType": { + "$ref": "#/definitions/PipeTargetInvocationType" + } + }, + "additionalProperties": false + }, + "PipeTargetParameters": { + "type": "object", + "properties": { + "InputTemplate": { + "type": "string", + "maxLength": 8192, + "minLength": 0 + }, + "LambdaFunctionParameters": { + "$ref": "#/definitions/PipeTargetLambdaFunctionParameters" + }, + "StepFunctionStateMachineParameters": { + "$ref": "#/definitions/PipeTargetStateMachineParameters" + }, + "KinesisStreamParameters": { + "$ref": "#/definitions/PipeTargetKinesisStreamParameters" + }, + "EcsTaskParameters": { + "$ref": "#/definitions/PipeTargetEcsTaskParameters" + }, + "BatchJobParameters": { + "$ref": "#/definitions/PipeTargetBatchJobParameters" + }, + "SqsQueueParameters": { + "$ref": "#/definitions/PipeTargetSqsQueueParameters" + }, + "HttpParameters": { + "$ref": "#/definitions/PipeTargetHttpParameters" + }, + "RedshiftDataParameters": { + "$ref": "#/definitions/PipeTargetRedshiftDataParameters" + }, + "SageMakerPipelineParameters": { + "$ref": "#/definitions/PipeTargetSageMakerPipelineParameters" + }, + "EventBridgeEventBusParameters": { + "$ref": "#/definitions/PipeTargetEventBridgeEventBusParameters" + }, + "CloudWatchLogsParameters": { + "$ref": "#/definitions/PipeTargetCloudWatchLogsParameters" + } + }, + "additionalProperties": false + }, + "PipeTargetRedshiftDataParameters": { + "type": "object", + "properties": { + "SecretManagerArn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$", + "description": "Optional SecretManager ARN which stores the database credentials" + }, + "Database": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "Redshift Database" + }, + "DbUser": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "Database user name" + }, + "StatementName": { + "type": "string", + "maxLength": 500, + "minLength": 1, + "description": "A name for Redshift DataAPI statement which can be used as filter of ListStatement." + }, + "WithEvent": { + "type": "boolean", + "default": false + }, + "Sqls": { + "type": "array", + "items": { + "type": "string", + "maxLength": 100000, + "minLength": 1, + "description": "A single Redshift SQL" + }, + "maxItems": 40, + "minItems": 1, + "description": "A list of SQLs." + } + }, + "required": [ + "Database", + "Sqls" + ], + "additionalProperties": false + }, + "PipeTargetSageMakerPipelineParameters": { + "type": "object", + "properties": { + "PipelineParameterList": { + "type": "array", + "items": { + "$ref": "#/definitions/SageMakerPipelineParameter" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PipeTargetSqsQueueParameters": { + "type": "object", + "properties": { + "MessageGroupId": { + "type": "string", + "maxLength": 100, + "minLength": 0 + }, + "MessageDeduplicationId": { + "type": "string", + "maxLength": 100, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "PipeTargetStateMachineParameters": { + "type": "object", + "properties": { + "InvocationType": { + "$ref": "#/definitions/PipeTargetInvocationType" + } + }, + "additionalProperties": false + }, + "PlacementConstraint": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/PlacementConstraintType" + }, + "Expression": { + "type": "string", + "maxLength": 2000, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "PlacementConstraintType": { + "type": "string", + "enum": [ + "distinctInstance", + "memberOf" + ] + }, + "PlacementStrategy": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/PlacementStrategyType" + }, + "Field": { + "type": "string", + "maxLength": 255, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "PlacementStrategyType": { + "type": "string", + "enum": [ + "random", + "spread", + "binpack" + ] + }, + "PropagateTags": { + "type": "string", + "enum": [ + "TASK_DEFINITION" + ] + }, + "QueryStringParametersMap": { + "type": "object", + "patternProperties": { + "^[^\\x00-\\x1F\\x7F]+|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$": { + "type": "string", + "maxLength": 512, + "minLength": 0, + "pattern": "^[^\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F]+|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + } + }, + "additionalProperties": false + }, + "RequestedPipeState": { + "type": "string", + "enum": [ + "RUNNING", + "STOPPED" + ] + }, + "S3LogDestination": { + "type": "object", + "properties": { + "BucketName": { + "type": "string" + }, + "Prefix": { + "type": "string" + }, + "BucketOwner": { + "type": "string" + }, + "OutputFormat": { + "$ref": "#/definitions/S3OutputFormat" + } + }, + "additionalProperties": false + }, + "S3OutputFormat": { + "type": "string", + "enum": [ + "json", + "plain", + "w3c" + ] + }, + "SageMakerPipelineParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*|(\\$(\\.[\\w/_-]+(\\[(\\d+|\\*)\\])*)*)$" + }, + "Value": { + "type": "string", + "maxLength": 1024, + "minLength": 0 + } + }, + "required": [ + "Name", + "Value" + ], + "additionalProperties": false + }, + "SelfManagedKafkaAccessConfigurationCredentials": { + "oneOf": [ + { + "type": "object", + "title": "BasicAuth", + "properties": { + "BasicAuth": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + } + }, + "required": [ + "BasicAuth" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "SaslScram512Auth", + "properties": { + "SaslScram512Auth": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + } + }, + "required": [ + "SaslScram512Auth" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "SaslScram256Auth", + "properties": { + "SaslScram256Auth": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + } + }, + "required": [ + "SaslScram256Auth" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "ClientCertificateTlsAuth", + "properties": { + "ClientCertificateTlsAuth": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^(^arn:aws([a-z]|\\-)*:secretsmanager:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}):(\\d{12}):secret:.+)$", + "description": "Optional SecretManager ARN which stores the database credentials" + } + }, + "required": [ + "ClientCertificateTlsAuth" + ], + "additionalProperties": false + } + ] + }, + "SelfManagedKafkaAccessConfigurationVpc": { + "type": "object", + "properties": { + "Subnets": { + "type": "array", + "items": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^subnet-[0-9a-z]*$" + }, + "maxItems": 16, + "minItems": 0, + "description": "List of SubnetId." + }, + "SecurityGroup": { + "type": "array", + "items": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^sg-[0-9a-zA-Z]*$" + }, + "maxItems": 5, + "minItems": 0, + "description": "List of SecurityGroupId." + } + }, + "additionalProperties": false + }, + "SelfManagedKafkaStartPosition": { + "type": "string", + "enum": [ + "TRIM_HORIZON", + "LATEST" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TagMap": { + "type": "object", + "maxProperties": 50, + "minProperties": 1, + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:aws([a-z]|\\-)*:([a-zA-Z0-9\\-]+):([a-z]|\\d|\\-)*:([0-9]{12})?:(.+)$" + }, + "CreationTime": { + "type": "string", + "format": "date-time" + }, + "CurrentState": { + "$ref": "#/definitions/PipeState" + }, + "Description": { + "type": "string", + "maxLength": 512, + "minLength": 0, + "pattern": "^.*$" + }, + "DesiredState": { + "$ref": "#/definitions/RequestedPipeState" + }, + "Enrichment": { + "type": "string", + "maxLength": 1600, + "minLength": 0, + "pattern": "^$|arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)$" + }, + "EnrichmentParameters": { + "$ref": "#/definitions/PipeEnrichmentParameters" + }, + "LastModifiedTime": { + "type": "string", + "format": "date-time" + }, + "LogConfiguration": { + "$ref": "#/definitions/PipeLogConfiguration" + }, + "Name": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^[\\.\\-_A-Za-z0-9]+$" + }, + "RoleArn": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z0-9+=,.@\\-_/]+$" + }, + "Source": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^smk://(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]):[0-9]{1,5}|arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)$" + }, + "SourceParameters": { + "$ref": "#/definitions/PipeSourceParameters" + }, + "StateReason": { + "type": "string", + "maxLength": 512, + "minLength": 0, + "pattern": "^.*$" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + }, + "Target": { + "type": "string", + "maxLength": 1600, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-]+):([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.+)$" + }, + "TargetParameters": { + "$ref": "#/definitions/PipeTargetParameters" + } + }, + "required": [ + "RoleArn", + "Source", + "Target" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/CurrentState", + "/properties/LastModifiedTime", + "/properties/StateReason" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Source", + "/properties/SourceParameters/DynamoDBStreamParameters/StartingPosition", + "/properties/SourceParameters/KinesisStreamParameters/StartingPosition", + "/properties/SourceParameters/KinesisStreamParameters/StartingPositionTimestamp", + "/properties/SourceParameters/ActiveMQBrokerParameters/QueueName", + "/properties/SourceParameters/RabbitMQBrokerParameters/QueueName", + "/properties/SourceParameters/RabbitMQBrokerParameters/VirtualHost", + "/properties/SourceParameters/ManagedStreamingKafkaParameters/TopicName", + "/properties/SourceParameters/ManagedStreamingKafkaParameters/StartingPosition", + "/properties/SourceParameters/ManagedStreamingKafkaParameters/ConsumerGroupID", + "/properties/SourceParameters/SelfManagedApacheKafkaParameters/TopicName", + "/properties/SourceParameters/SelfManagedApacheKafkaParameters/StartingPosition", + "/properties/SourceParameters/SelfManagedApacheKafkaParameters/AdditionalBootstrapServers", + "/properties/SourceParameters/SelfManagedApacheKafkaParameters/ConsumerGroupID" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/TargetParameters", + "/properties/SourceParameters" + ], + "additionalIdentifiers": [ + [ + "/properties/Arn" + ] + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "pipes:CreatePipe", + "pipes:DescribePipe", + "pipes:TagResource", + "iam:PassRole", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "iam:CreateServiceLinkedRole", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "firehose:TagDeliveryStream" + ] + }, + "read": { + "permissions": [ + "pipes:DescribePipe" + ] + }, + "update": { + "permissions": [ + "pipes:UpdatePipe", + "pipes:TagResource", + "pipes:UntagResource", + "pipes:DescribePipe", + "iam:PassRole", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "iam:CreateServiceLinkedRole", + "logs:CreateLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "firehose:TagDeliveryStream" + ] + }, + "delete": { + "permissions": [ + "pipes:DeletePipe", + "pipes:DescribePipe", + "logs:CreateLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:GetLogDelivery", + "logs:ListLogDeliveries" + ] + }, + "list": { + "permissions": [ + "pipes:ListPipes" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/proton/environmentaccountconnection.json b/internal/aws/cfn/schemas/aws/proton/environmentaccountconnection.json new file mode 100644 index 00000000..8ec492c9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/proton/environmentaccountconnection.json @@ -0,0 +1,165 @@ +{ + "typeName": "AWS::Proton::EnvironmentAccountConnection", + "description": "Resource Schema describing various properties for AWS Proton Environment Account Connections resources.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-proton", + "definitions": { + "Status": { + "type": "string", + "enum": [ + "PENDING", + "CONNECTED", + "REJECTED" + ] + }, + "Tag": { + "type": "object", + "description": "

A description of a resource tag.

", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The key of the resource tag.

" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "

The value of the resource tag.

" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the environment account connection.", + "type": "string" + }, + "CodebuildRoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM service role in the environment account. AWS Proton uses this role to provision infrastructure resources using CodeBuild-based provisioning in the associated environment account.", + "type": "string", + "minLength": 1, + "maxLength": 200, + "pattern": "^arn:(aws|aws-cn|aws-us-gov):iam::\\d{12}:role/([\\w+=,.@-]{1,512}[/:])*([\\w+=,.@-]{1,64})$" + }, + "ComponentRoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM service role that AWS Proton uses when provisioning directly defined components in the associated environment account. It determines the scope of infrastructure that a component can provision in the account.", + "type": "string", + "minLength": 1, + "maxLength": 200, + "pattern": "^arn:(aws|aws-cn|aws-us-gov):iam::\\d{12}:role/([\\w+=,.@-]{1,512}[/:])*([\\w+=,.@-]{1,64})$" + }, + "EnvironmentAccountId": { + "description": "The environment account that's connected to the environment account connection.", + "type": "string", + "pattern": "^\\d{12}$" + }, + "EnvironmentName": { + "description": "The name of the AWS Proton environment that's created in the associated management account.", + "type": "string", + "pattern": "^[0-9A-Za-z]+[0-9A-Za-z_\\-]*$", + "minLength": 1, + "maxLength": 100 + }, + "Id": { + "description": "The ID of the environment account connection.", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "ManagementAccountId": { + "description": "The ID of the management account that accepts or rejects the environment account connection. You create an manage the AWS Proton environment in this account. If the management account accepts the environment account connection, AWS Proton can use the associated IAM role to provision environment infrastructure resources in the associated environment account.", + "type": "string", + "pattern": "^\\d{12}$" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM service role that's created in the environment account. AWS Proton uses this role to provision infrastructure resources in the associated environment account.", + "type": "string", + "minLength": 1, + "maxLength": 200, + "pattern": "^arn:(aws|aws-cn|aws-us-gov):iam::\\d{12}:role/([\\w+=,.@-]{1,512}[/:])*([\\w+=,.@-]{1,64})$" + }, + "Status": { + "description": "The status of the environment account connection.", + "$ref": "#/definitions/Status" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": true, + "insertionOrder": false, + "description": "

An optional list of metadata items that you can associate with the Proton environment account connection. A tag is a key-value pair.

\n

For more information, see Proton resources and tagging in the\n Proton User Guide.

" + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/Status" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ] + ], + "handlers": { + "create": { + "permissions": [ + "proton:CreateEnvironmentAccountConnection", + "proton:TagResource", + "iam:PassRole", + "proton:ListTagsForResource", + "proton:GetEnvironmentAccountConnection" + ] + }, + "read": { + "permissions": [ + "proton:GetEnvironmentAccountConnection", + "proton:ListTagsForResource", + "iam:PassRole", + "proton:GetEnvironmentAccountConnection" + ] + }, + "update": { + "permissions": [ + "proton:CreateEnvironmentAccountConnection", + "proton:ListTagsForResource", + "proton:TagResource", + "proton:UntagResource", + "proton:UpdateEnvironmentAccountConnection", + "iam:PassRole", + "proton:GetEnvironmentAccountConnection" + ] + }, + "delete": { + "permissions": [ + "proton:DeleteEnvironmentAccountConnection", + "proton:UntagResource", + "iam:PassRole", + "proton:ListTagsForResource", + "proton:GetEnvironmentAccountConnection" + ] + }, + "list": { + "permissions": [ + "proton:ListEnvironmentAccountConnections" + ] + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/proton/environmenttemplate.json b/internal/aws/cfn/schemas/aws/proton/environmenttemplate.json new file mode 100644 index 00000000..827c976f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/proton/environmenttemplate.json @@ -0,0 +1,144 @@ +{ + "typeName": "AWS::Proton::EnvironmentTemplate", + "description": "Definition of AWS::Proton::EnvironmentTemplate Resource Type", + "definitions": { + "Provisioning": { + "type": "string", + "enum": [ + "CUSTOMER_MANAGED" + ] + }, + "Tag": { + "type": "object", + "description": "

A description of a resource tag.

", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The key of the resource tag.

" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "

The value of the resource tag.

" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) of the environment template.

" + }, + "Description": { + "type": "string", + "maxLength": 500, + "minLength": 0, + "description": "

A description of the environment template.

" + }, + "DisplayName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "description": "

The environment template name as displayed in the developer interface.

" + }, + "EncryptionKey": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^arn:(aws|aws-cn|aws-us-gov):[a-zA-Z0-9-]+:[a-zA-Z0-9-]*:\\d{12}:([\\w+=,.@-]+[/:])*[\\w+=,.@-]+$", + "description": "

A customer provided encryption key that Proton uses to encrypt data.

" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[0-9A-Za-z]+[0-9A-Za-z_\\-]*$" + }, + "Provisioning": { + "$ref": "#/definitions/Provisioning" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50, + "minItems": 0, + "uniqueItems": true, + "description": "

An optional list of metadata items that you can associate with the Proton environment template. A tag is a key-value pair.

\n

For more information, see Proton resources and tagging in the\n Proton User Guide.

" + } + }, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/EncryptionKey", + "/properties/Name", + "/properties/Provisioning" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "proton:CreateEnvironmentTemplate", + "proton:TagResource", + "proton:GetEnvironmentTemplate", + "kms:*" + ] + }, + "read": { + "permissions": [ + "proton:GetEnvironmentTemplate", + "proton:ListTagsForResource", + "kms:*" + ] + }, + "update": { + "permissions": [ + "proton:CreateEnvironmentTemplate", + "proton:ListTagsForResource", + "proton:TagResource", + "proton:UntagResource", + "proton:UpdateEnvironmentTemplate", + "proton:GetEnvironmentTemplate", + "kms:*" + ] + }, + "delete": { + "permissions": [ + "proton:DeleteEnvironmentTemplate", + "proton:GetEnvironmentTemplate", + "kms:*" + ] + }, + "list": { + "permissions": [ + "proton:ListEnvironmentTemplates" + ] + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-proton" +} diff --git a/internal/aws/cfn/schemas/aws/proton/servicetemplate.json b/internal/aws/cfn/schemas/aws/proton/servicetemplate.json new file mode 100644 index 00000000..b5dd95ea --- /dev/null +++ b/internal/aws/cfn/schemas/aws/proton/servicetemplate.json @@ -0,0 +1,148 @@ +{ + "typeName": "AWS::Proton::ServiceTemplate", + "description": "Definition of AWS::Proton::ServiceTemplate Resource Type", + "definitions": { + "Provisioning": { + "type": "string", + "enum": [ + "CUSTOMER_MANAGED" + ] + }, + "Tag": { + "type": "object", + "description": "

A description of a resource tag.

", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The key of the resource tag.

" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "description": "

The value of the resource tag.

" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^arn:(aws|aws-cn|aws-us-gov):[a-zA-Z0-9-]+:[a-zA-Z0-9-]*:\\d{12}:([\\w+=,.@-]+[/:])*[\\w+=,.@-]+$", + "description": "

The Amazon Resource Name (ARN) of the service template.

" + }, + "Description": { + "type": "string", + "maxLength": 500, + "minLength": 0, + "description": "

A description of the service template.

" + }, + "DisplayName": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "description": "

The name of the service template as displayed in the developer interface.

" + }, + "EncryptionKey": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^arn:(aws|aws-cn|aws-us-gov):[a-zA-Z0-9-]+:[a-zA-Z0-9-]*:\\d{12}:([\\w+=,.@-]+[/:])*[\\w+=,.@-]+$", + "description": "

A customer provided encryption key that's used to encrypt data.

" + }, + "Name": { + "type": "string", + "maxLength": 100, + "minLength": 1, + "pattern": "^[0-9A-Za-z]+[0-9A-Za-z_\\-]*$" + }, + "PipelineProvisioning": { + "$ref": "#/definitions/Provisioning" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50, + "minItems": 0, + "uniqueItems": true, + "description": "

An optional list of metadata items that you can associate with the Proton service template. A tag is a key-value pair.

\n

For more information, see Proton resources and tagging in the\n Proton User Guide.

" + } + }, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/EncryptionKey", + "/properties/Name", + "/properties/PipelineProvisioning" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "proton:CreateServiceTemplate", + "proton:TagResource", + "kms:*", + "proton:GetServiceTemplate" + ] + }, + "read": { + "permissions": [ + "proton:GetServiceTemplate", + "proton:ListTagsForResource", + "kms:*" + ] + }, + "update": { + "permissions": [ + "proton:GetServiceTemplate", + "proton:CreateServiceTemplate", + "proton:ListTagsForResource", + "proton:TagResource", + "proton:UntagResource", + "proton:UpdateServiceTemplate", + "kms:*" + ] + }, + "delete": { + "permissions": [ + "proton:DeleteServiceTemplate", + "proton:UntagResource", + "kms:*", + "proton:GetServiceTemplate" + ] + }, + "list": { + "permissions": [ + "proton:ListServiceTemplates" + ] + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-proton" +} diff --git a/internal/aws/cfn/schemas/aws/qldb/ledger.json b/internal/aws/cfn/schemas/aws/qldb/ledger.json new file mode 100644 index 00000000..c153a17d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/qldb/ledger.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::QLDB::Ledger", + "description": "Resource Type definition for AWS::QLDB::Ledger", + "additionalProperties": false, + "properties": { + "PermissionsMode": { + "type": "string" + }, + "DeletionProtection": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "KmsKey": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "PermissionsMode" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/qldb/stream.json b/internal/aws/cfn/schemas/aws/qldb/stream.json new file mode 100644 index 00000000..50ecc436 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/qldb/stream.json @@ -0,0 +1,139 @@ +{ + "typeName": "AWS::QLDB::Stream", + "description": "Resource schema for AWS::QLDB::Stream.", + "additionalProperties": false, + "definitions": { + "Arn": { + "type": "string", + "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*" + }, + "KinesisConfiguration": { + "type": "object", + "properties": { + "StreamArn": { + "type": "object", + "$ref": "#/definitions/Arn" + }, + "AggregationEnabled": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "LedgerName": { + "type": "string" + }, + "StreamName": { + "type": "string" + }, + "RoleArn": { + "$ref": "#/definitions/Arn" + }, + "InclusiveStartTime": { + "type": "string" + }, + "ExclusiveEndTime": { + "type": "string" + }, + "KinesisConfiguration": { + "$ref": "#/definitions/KinesisConfiguration" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "insertionOrder": false, + "uniqueItems": true, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "LedgerName", + "StreamName", + "RoleArn", + "KinesisConfiguration", + "InclusiveStartTime" + ], + "createOnlyProperties": [ + "/properties/LedgerName", + "/properties/StreamName", + "/properties/RoleArn", + "/properties/KinesisConfiguration", + "/properties/InclusiveStartTime", + "/properties/ExclusiveEndTime" + ], + "primaryIdentifier": [ + "/properties/LedgerName", + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "qldb:StreamJournalToKinesis", + "qldb:DescribeJournalKinesisStream" + ] + }, + "delete": { + "permissions": [ + "qldb:CancelJournalKinesisStream", + "qldb:DescribeJournalKinesisStream" + ] + }, + "read": { + "permissions": [ + "qldb:DescribeJournalKinesisStream", + "qldb:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "qldb:DescribeJournalKinesisStream", + "qldb:UntagResource", + "qldb:TagResource" + ] + }, + "list": { + "permissions": [ + "qldb:listJournalKinesisStreamsForLedger" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/analysis.json b/internal/aws/cfn/schemas/aws/quicksight/analysis.json new file mode 100644 index 00000000..98e7681d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/analysis.json @@ -0,0 +1,11061 @@ +{ + "typeName": "AWS::QuickSight::Analysis", + "description": "Definition of the AWS::QuickSight::Analysis Resource Type.", + "definitions": { + "AggregationFunction": { + "type": "object", + "properties": { + "NumericalAggregationFunction": { + "$ref": "#/definitions/NumericalAggregationFunction" + }, + "CategoricalAggregationFunction": { + "$ref": "#/definitions/CategoricalAggregationFunction" + }, + "DateAggregationFunction": { + "$ref": "#/definitions/DateAggregationFunction" + }, + "AttributeAggregationFunction": { + "$ref": "#/definitions/AttributeAggregationFunction" + } + }, + "additionalProperties": false + }, + "AggregationSortConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "SortDirection": { + "$ref": "#/definitions/SortDirection" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Column", + "SortDirection" + ], + "additionalProperties": false + }, + "AllSheetsFilterScopeConfiguration": { + "type": "object", + "additionalProperties": false + }, + "AnalysisDefaults": { + "type": "object", + "properties": { + "DefaultNewSheetConfiguration": { + "$ref": "#/definitions/DefaultNewSheetConfiguration" + } + }, + "required": [ + "DefaultNewSheetConfiguration" + ], + "additionalProperties": false + }, + "AnalysisDefinition": { + "type": "object", + "properties": { + "DataSetIdentifierDeclarations": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSetIdentifierDeclaration" + }, + "maxItems": 50, + "minItems": 1 + }, + "Sheets": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetDefinition" + }, + "maxItems": 20, + "minItems": 0 + }, + "CalculatedFields": { + "type": "array", + "items": { + "$ref": "#/definitions/CalculatedField" + }, + "maxItems": 500, + "minItems": 0 + }, + "ParameterDeclarations": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterDeclaration" + }, + "maxItems": 200, + "minItems": 0 + }, + "FilterGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterGroup" + }, + "maxItems": 2000, + "minItems": 0 + }, + "ColumnConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnConfiguration" + }, + "maxItems": 200, + "minItems": 0 + }, + "AnalysisDefaults": { + "$ref": "#/definitions/AnalysisDefaults" + }, + "Options": { + "$ref": "#/definitions/AssetOptions" + } + }, + "required": [ + "DataSetIdentifierDeclarations" + ], + "additionalProperties": false + }, + "AnalysisError": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/AnalysisErrorType" + }, + "Message": { + "type": "string", + "pattern": ".*\\S.*" + }, + "ViolatedEntities": { + "type": "array", + "items": { + "$ref": "#/definitions/Entity" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "AnalysisErrorType": { + "type": "string", + "enum": [ + "ACCESS_DENIED", + "SOURCE_NOT_FOUND", + "DATA_SET_NOT_FOUND", + "INTERNAL_FAILURE", + "PARAMETER_VALUE_INCOMPATIBLE", + "PARAMETER_TYPE_INVALID", + "PARAMETER_NOT_FOUND", + "COLUMN_TYPE_MISMATCH", + "COLUMN_GEOGRAPHIC_ROLE_MISMATCH", + "COLUMN_REPLACEMENT_MISSING" + ] + }, + "AnalysisSourceEntity": { + "type": "object", + "properties": { + "SourceTemplate": { + "$ref": "#/definitions/AnalysisSourceTemplate" + } + }, + "additionalProperties": false + }, + "AnalysisSourceTemplate": { + "type": "object", + "properties": { + "DataSetReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSetReference" + }, + "minItems": 1 + }, + "Arn": { + "type": "string" + } + }, + "required": [ + "Arn", + "DataSetReferences" + ], + "additionalProperties": false + }, + "AnchorDateConfiguration": { + "type": "object", + "properties": { + "AnchorOption": { + "$ref": "#/definitions/AnchorOption" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "AnchorOption": { + "type": "string", + "enum": [ + "NOW" + ] + }, + "ArcAxisConfiguration": { + "type": "object", + "properties": { + "Range": { + "$ref": "#/definitions/ArcAxisDisplayRange" + }, + "ReserveRange": { + "type": "number", + "default": 0 + } + }, + "additionalProperties": false + }, + "ArcAxisDisplayRange": { + "type": "object", + "properties": { + "Min": { + "type": "number", + "default": null + }, + "Max": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "ArcConfiguration": { + "type": "object", + "properties": { + "ArcAngle": { + "type": "number", + "default": null + }, + "ArcThickness": { + "$ref": "#/definitions/ArcThicknessOptions" + } + }, + "additionalProperties": false + }, + "ArcOptions": { + "type": "object", + "properties": { + "ArcThickness": { + "$ref": "#/definitions/ArcThickness" + } + }, + "additionalProperties": false + }, + "ArcThickness": { + "type": "string", + "enum": [ + "SMALL", + "MEDIUM", + "LARGE", + "WHOLE" + ] + }, + "ArcThicknessOptions": { + "type": "string", + "enum": [ + "SMALL", + "MEDIUM", + "LARGE" + ] + }, + "AssetOptions": { + "type": "object", + "properties": { + "Timezone": { + "type": "string" + }, + "WeekStart": { + "$ref": "#/definitions/DayOfTheWeek" + } + }, + "additionalProperties": false + }, + "AttributeAggregationFunction": { + "type": "object", + "properties": { + "SimpleAttributeAggregation": { + "$ref": "#/definitions/SimpleAttributeAggregationFunction" + }, + "ValueForMultipleValues": { + "type": "string" + } + }, + "additionalProperties": false + }, + "AxisBinding": { + "type": "string", + "enum": [ + "PRIMARY_YAXIS", + "SECONDARY_YAXIS" + ] + }, + "AxisDataOptions": { + "type": "object", + "properties": { + "NumericAxisOptions": { + "$ref": "#/definitions/NumericAxisOptions" + }, + "DateAxisOptions": { + "$ref": "#/definitions/DateAxisOptions" + } + }, + "additionalProperties": false + }, + "AxisDisplayDataDrivenRange": { + "type": "object", + "additionalProperties": false + }, + "AxisDisplayMinMaxRange": { + "type": "object", + "properties": { + "Minimum": { + "type": "number", + "default": null + }, + "Maximum": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisDisplayOptions": { + "type": "object", + "properties": { + "TickLabelOptions": { + "$ref": "#/definitions/AxisTickLabelOptions" + }, + "AxisLineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "GridLineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "DataOptions": { + "$ref": "#/definitions/AxisDataOptions" + }, + "ScrollbarOptions": { + "$ref": "#/definitions/ScrollBarOptions" + }, + "AxisOffset": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "AxisDisplayRange": { + "type": "object", + "properties": { + "MinMax": { + "$ref": "#/definitions/AxisDisplayMinMaxRange" + }, + "DataDriven": { + "$ref": "#/definitions/AxisDisplayDataDrivenRange" + } + }, + "additionalProperties": false + }, + "AxisLabelOptions": { + "type": "object", + "properties": { + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "CustomLabel": { + "type": "string" + }, + "ApplyTo": { + "$ref": "#/definitions/AxisLabelReferenceOptions" + } + }, + "additionalProperties": false + }, + "AxisLabelReferenceOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "AxisLinearScale": { + "type": "object", + "properties": { + "StepCount": { + "type": "number", + "default": null + }, + "StepSize": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisLogarithmicScale": { + "type": "object", + "properties": { + "Base": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisScale": { + "type": "object", + "properties": { + "Linear": { + "$ref": "#/definitions/AxisLinearScale" + }, + "Logarithmic": { + "$ref": "#/definitions/AxisLogarithmicScale" + } + }, + "additionalProperties": false + }, + "AxisTickLabelOptions": { + "type": "object", + "properties": { + "LabelOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "RotationAngle": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "BarChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "BarChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/BarChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/BarChartSortConfiguration" + }, + "Orientation": { + "$ref": "#/definitions/BarChartOrientation" + }, + "BarsArrangement": { + "$ref": "#/definitions/BarsArrangement" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "BarChartFieldWells": { + "type": "object", + "properties": { + "BarChartAggregatedFieldWells": { + "$ref": "#/definitions/BarChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "BarChartOrientation": { + "type": "string", + "enum": [ + "HORIZONTAL", + "VERTICAL" + ] + }, + "BarChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "BarChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/BarChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "BarsArrangement": { + "type": "string", + "enum": [ + "CLUSTERED", + "STACKED", + "STACKED_PERCENT" + ] + }, + "BaseMapStyleType": { + "type": "string", + "enum": [ + "LIGHT_GRAY", + "DARK_GRAY", + "STREET", + "IMAGERY" + ] + }, + "BinCountOptions": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "BinWidthOptions": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "minimum": 0 + }, + "BinCountLimit": { + "type": "number", + "maximum": 1000, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "BodySectionConfiguration": { + "type": "object", + "properties": { + "SectionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Content": { + "$ref": "#/definitions/BodySectionContent" + }, + "Style": { + "$ref": "#/definitions/SectionStyle" + }, + "PageBreakConfiguration": { + "$ref": "#/definitions/SectionPageBreakConfiguration" + } + }, + "required": [ + "Content", + "SectionId" + ], + "additionalProperties": false + }, + "BodySectionContent": { + "type": "object", + "properties": { + "Layout": { + "$ref": "#/definitions/SectionLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "BoxPlotAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 5, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "BoxPlotChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/BoxPlotFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/BoxPlotSortConfiguration" + }, + "BoxPlotOptions": { + "$ref": "#/definitions/BoxPlotOptions" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "BoxPlotFieldWells": { + "type": "object", + "properties": { + "BoxPlotAggregatedFieldWells": { + "$ref": "#/definitions/BoxPlotAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "BoxPlotFillStyle": { + "type": "string", + "enum": [ + "SOLID", + "TRANSPARENT" + ] + }, + "BoxPlotOptions": { + "type": "object", + "properties": { + "StyleOptions": { + "$ref": "#/definitions/BoxPlotStyleOptions" + }, + "OutlierVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AllDataPointsVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "BoxPlotSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "PaginationConfiguration": { + "$ref": "#/definitions/PaginationConfiguration" + } + }, + "additionalProperties": false + }, + "BoxPlotStyleOptions": { + "type": "object", + "properties": { + "FillStyle": { + "$ref": "#/definitions/BoxPlotFillStyle" + } + }, + "additionalProperties": false + }, + "BoxPlotVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/BoxPlotChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "CalculatedField": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Name": { + "type": "string", + "maxLength": 127, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 32000, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "Expression", + "Name" + ], + "additionalProperties": false + }, + "CalculatedMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "required": [ + "Expression", + "FieldId" + ], + "additionalProperties": false + }, + "CascadingControlConfiguration": { + "type": "object", + "properties": { + "SourceControls": { + "type": "array", + "items": { + "$ref": "#/definitions/CascadingControlSource" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "CascadingControlSource": { + "type": "object", + "properties": { + "SourceSheetControlId": { + "type": "string" + }, + "ColumnToMatch": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "CategoricalAggregationFunction": { + "type": "string", + "enum": [ + "COUNT", + "DISTINCT_COUNT" + ] + }, + "CategoricalDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "CategoricalMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/CategoricalAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "CategoryDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + } + }, + "required": [ + "CategoryValues", + "Column" + ], + "additionalProperties": false + }, + "CategoryFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Configuration": { + "$ref": "#/definitions/CategoryFilterConfiguration" + } + }, + "required": [ + "Column", + "Configuration", + "FilterId" + ], + "additionalProperties": false + }, + "CategoryFilterConfiguration": { + "type": "object", + "properties": { + "FilterListConfiguration": { + "$ref": "#/definitions/FilterListConfiguration" + }, + "CustomFilterListConfiguration": { + "$ref": "#/definitions/CustomFilterListConfiguration" + }, + "CustomFilterConfiguration": { + "$ref": "#/definitions/CustomFilterConfiguration" + } + }, + "additionalProperties": false + }, + "CategoryFilterMatchOperator": { + "type": "string", + "enum": [ + "EQUALS", + "DOES_NOT_EQUAL", + "CONTAINS", + "DOES_NOT_CONTAIN", + "STARTS_WITH", + "ENDS_WITH" + ] + }, + "CategoryFilterSelectAllOptions": { + "type": "string", + "enum": [ + "FILTER_ALL_VALUES" + ] + }, + "ChartAxisLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "SortIconVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AxisLabelOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/AxisLabelOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ClusterMarker": { + "type": "object", + "properties": { + "SimpleClusterMarker": { + "$ref": "#/definitions/SimpleClusterMarker" + } + }, + "additionalProperties": false + }, + "ClusterMarkerConfiguration": { + "type": "object", + "properties": { + "ClusterMarker": { + "$ref": "#/definitions/ClusterMarker" + } + }, + "additionalProperties": false + }, + "ColorFillType": { + "type": "string", + "enum": [ + "DISCRETE", + "GRADIENT" + ] + }, + "ColorScale": { + "type": "object", + "properties": { + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DataColor" + }, + "maxItems": 3, + "minItems": 2 + }, + "ColorFillType": { + "$ref": "#/definitions/ColorFillType" + }, + "NullValueColor": { + "$ref": "#/definitions/DataColor" + } + }, + "required": [ + "ColorFillType", + "Colors" + ], + "additionalProperties": false + }, + "ColorsConfiguration": { + "type": "object", + "properties": { + "CustomColors": { + "type": "array", + "items": { + "$ref": "#/definitions/CustomColor" + }, + "maxItems": 50, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ColumnConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "FormatConfiguration": { + "$ref": "#/definitions/FormatConfiguration" + }, + "Role": { + "$ref": "#/definitions/ColumnRole" + }, + "ColorsConfiguration": { + "$ref": "#/definitions/ColorsConfiguration" + } + }, + "required": [ + "Column" + ], + "additionalProperties": false + }, + "ColumnHierarchy": { + "type": "object", + "properties": { + "ExplicitHierarchy": { + "$ref": "#/definitions/ExplicitHierarchy" + }, + "DateTimeHierarchy": { + "$ref": "#/definitions/DateTimeHierarchy" + }, + "PredefinedHierarchy": { + "$ref": "#/definitions/PredefinedHierarchy" + } + }, + "additionalProperties": false + }, + "ColumnIdentifier": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ColumnName": { + "type": "string", + "maxLength": 127, + "minLength": 1 + } + }, + "required": [ + "ColumnName", + "DataSetIdentifier" + ], + "additionalProperties": false + }, + "ColumnRole": { + "type": "string", + "enum": [ + "DIMENSION", + "MEASURE" + ] + }, + "ColumnSort": { + "type": "object", + "properties": { + "SortBy": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Direction": { + "$ref": "#/definitions/SortDirection" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Direction", + "SortBy" + ], + "additionalProperties": false + }, + "ColumnTooltipItem": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Label": { + "type": "string" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Aggregation": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Column" + ], + "additionalProperties": false + }, + "ComboChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "BarValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "LineValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ComboChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/ComboChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/ComboChartSortConfiguration" + }, + "BarsArrangement": { + "$ref": "#/definitions/BarsArrangement" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SecondaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "SecondaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "BarDataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "LineDataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "ComboChartFieldWells": { + "type": "object", + "properties": { + "ComboChartAggregatedFieldWells": { + "$ref": "#/definitions/ComboChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "ComboChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "ComboChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/ComboChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ComparisonConfiguration": { + "type": "object", + "properties": { + "ComparisonMethod": { + "$ref": "#/definitions/ComparisonMethod" + }, + "ComparisonFormat": { + "$ref": "#/definitions/ComparisonFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ComparisonFormatConfiguration": { + "type": "object", + "properties": { + "NumberDisplayFormatConfiguration": { + "$ref": "#/definitions/NumberDisplayFormatConfiguration" + }, + "PercentageDisplayFormatConfiguration": { + "$ref": "#/definitions/PercentageDisplayFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ComparisonMethod": { + "type": "string", + "enum": [ + "DIFFERENCE", + "PERCENT_DIFFERENCE", + "PERCENT" + ] + }, + "Computation": { + "type": "object", + "properties": { + "TopBottomRanked": { + "$ref": "#/definitions/TopBottomRankedComputation" + }, + "TopBottomMovers": { + "$ref": "#/definitions/TopBottomMoversComputation" + }, + "TotalAggregation": { + "$ref": "#/definitions/TotalAggregationComputation" + }, + "MaximumMinimum": { + "$ref": "#/definitions/MaximumMinimumComputation" + }, + "MetricComparison": { + "$ref": "#/definitions/MetricComparisonComputation" + }, + "PeriodOverPeriod": { + "$ref": "#/definitions/PeriodOverPeriodComputation" + }, + "PeriodToDate": { + "$ref": "#/definitions/PeriodToDateComputation" + }, + "GrowthRate": { + "$ref": "#/definitions/GrowthRateComputation" + }, + "UniqueValues": { + "$ref": "#/definitions/UniqueValuesComputation" + }, + "Forecast": { + "$ref": "#/definitions/ForecastComputation" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingColor": { + "type": "object", + "properties": { + "Solid": { + "$ref": "#/definitions/ConditionalFormattingSolidColor" + }, + "Gradient": { + "$ref": "#/definitions/ConditionalFormattingGradientColor" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingCustomIconCondition": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "IconOptions": { + "$ref": "#/definitions/ConditionalFormattingCustomIconOptions" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DisplayConfiguration": { + "$ref": "#/definitions/ConditionalFormattingIconDisplayConfiguration" + } + }, + "required": [ + "Expression", + "IconOptions" + ], + "additionalProperties": false + }, + "ConditionalFormattingCustomIconOptions": { + "type": "object", + "properties": { + "Icon": { + "$ref": "#/definitions/Icon" + }, + "UnicodeIcon": { + "type": "string", + "pattern": "^[^\\u0000-\\u00FF]$" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingGradientColor": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "Color": { + "$ref": "#/definitions/GradientColor" + } + }, + "required": [ + "Color", + "Expression" + ], + "additionalProperties": false + }, + "ConditionalFormattingIcon": { + "type": "object", + "properties": { + "IconSet": { + "$ref": "#/definitions/ConditionalFormattingIconSet" + }, + "CustomCondition": { + "$ref": "#/definitions/ConditionalFormattingCustomIconCondition" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingIconDisplayConfiguration": { + "type": "object", + "properties": { + "IconDisplayOption": { + "$ref": "#/definitions/ConditionalFormattingIconDisplayOption" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingIconDisplayOption": { + "type": "string", + "enum": [ + "ICON_ONLY" + ] + }, + "ConditionalFormattingIconSet": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "IconSetType": { + "$ref": "#/definitions/ConditionalFormattingIconSetType" + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "ConditionalFormattingIconSetType": { + "type": "string", + "enum": [ + "PLUS_MINUS", + "CHECK_X", + "THREE_COLOR_ARROW", + "THREE_GRAY_ARROW", + "CARET_UP_MINUS_DOWN", + "THREE_SHAPE", + "THREE_CIRCLE", + "FLAGS", + "BARS", + "FOUR_COLOR_ARROW", + "FOUR_GRAY_ARROW" + ] + }, + "ConditionalFormattingSolidColor": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "ContributionAnalysisDefault": { + "type": "object", + "properties": { + "MeasureFieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "ContributorDimensions": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 4, + "minItems": 1 + } + }, + "required": [ + "ContributorDimensions", + "MeasureFieldId" + ], + "additionalProperties": false + }, + "CrossDatasetTypes": { + "type": "string", + "enum": [ + "ALL_DATASETS", + "SINGLE_DATASET" + ] + }, + "CurrencyDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "Symbol": { + "type": "string", + "pattern": "[A-Z]{3}" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NumberScale": { + "$ref": "#/definitions/NumberScale" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "CustomActionFilterOperation": { + "type": "object", + "properties": { + "SelectedFieldsConfiguration": { + "$ref": "#/definitions/FilterOperationSelectedFieldsConfiguration" + }, + "TargetVisualsConfiguration": { + "$ref": "#/definitions/FilterOperationTargetVisualsConfiguration" + } + }, + "required": [ + "SelectedFieldsConfiguration", + "TargetVisualsConfiguration" + ], + "additionalProperties": false + }, + "CustomActionNavigationOperation": { + "type": "object", + "properties": { + "LocalNavigationConfiguration": { + "$ref": "#/definitions/LocalNavigationConfiguration" + } + }, + "additionalProperties": false + }, + "CustomActionSetParametersOperation": { + "type": "object", + "properties": { + "ParameterValueConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/SetParameterValueConfiguration" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "required": [ + "ParameterValueConfigurations" + ], + "additionalProperties": false + }, + "CustomActionURLOperation": { + "type": "object", + "properties": { + "URLTemplate": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "URLTarget": { + "$ref": "#/definitions/URLTargetConfiguration" + } + }, + "required": [ + "URLTarget", + "URLTemplate" + ], + "additionalProperties": false + }, + "CustomColor": { + "type": "object", + "properties": { + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "SpecialValue": { + "$ref": "#/definitions/SpecialValue" + } + }, + "required": [ + "Color" + ], + "additionalProperties": false + }, + "CustomContentConfiguration": { + "type": "object", + "properties": { + "ContentUrl": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ContentType": { + "$ref": "#/definitions/CustomContentType" + }, + "ImageScaling": { + "$ref": "#/definitions/CustomContentImageScalingConfiguration" + } + }, + "additionalProperties": false + }, + "CustomContentImageScalingConfiguration": { + "type": "string", + "enum": [ + "FIT_TO_HEIGHT", + "FIT_TO_WIDTH", + "DO_NOT_SCALE", + "SCALE_TO_VISUAL" + ] + }, + "CustomContentType": { + "type": "string", + "enum": [ + "IMAGE", + "OTHER_EMBEDDED_CONTENT" + ] + }, + "CustomContentVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/CustomContentConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "CustomFilterConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValue": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "CustomFilterListConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "CustomNarrativeOptions": { + "type": "object", + "properties": { + "Narrative": { + "type": "string", + "maxLength": 150000, + "minLength": 0 + } + }, + "required": [ + "Narrative" + ], + "additionalProperties": false + }, + "CustomParameterValues": { + "type": "object", + "properties": { + "StringValues": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + }, + "IntegerValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + }, + "DecimalValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + }, + "DateTimeValues": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "CustomValuesConfiguration": { + "type": "object", + "properties": { + "IncludeNullValue": { + "type": "boolean" + }, + "CustomValues": { + "$ref": "#/definitions/CustomParameterValues" + } + }, + "required": [ + "CustomValues" + ], + "additionalProperties": false + }, + "DataBarsOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "PositiveColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "NegativeColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "DataColor": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DataValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "DataFieldSeriesItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string" + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "Settings": { + "$ref": "#/definitions/LineChartSeriesSettings" + } + }, + "required": [ + "AxisBinding", + "FieldId" + ], + "additionalProperties": false + }, + "DataLabelContent": { + "type": "string", + "enum": [ + "VALUE", + "PERCENT", + "VALUE_AND_PERCENT" + ] + }, + "DataLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CategoryLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MeasureLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "DataLabelTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/DataLabelType" + }, + "maxItems": 100, + "minItems": 0 + }, + "Position": { + "$ref": "#/definitions/DataLabelPosition" + }, + "LabelContent": { + "$ref": "#/definitions/DataLabelContent" + }, + "LabelFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "LabelColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Overlap": { + "$ref": "#/definitions/DataLabelOverlap" + }, + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DataLabelOverlap": { + "type": "string", + "enum": [ + "DISABLE_OVERLAP", + "ENABLE_OVERLAP" + ] + }, + "DataLabelPosition": { + "type": "string", + "enum": [ + "INSIDE", + "OUTSIDE", + "LEFT", + "TOP", + "BOTTOM", + "RIGHT" + ] + }, + "DataLabelType": { + "type": "object", + "properties": { + "FieldLabelType": { + "$ref": "#/definitions/FieldLabelType" + }, + "DataPathLabelType": { + "$ref": "#/definitions/DataPathLabelType" + }, + "RangeEndsLabelType": { + "$ref": "#/definitions/RangeEndsLabelType" + }, + "MinimumLabelType": { + "$ref": "#/definitions/MinimumLabelType" + }, + "MaximumLabelType": { + "$ref": "#/definitions/MaximumLabelType" + } + }, + "additionalProperties": false + }, + "DataPathColor": { + "type": "object", + "properties": { + "Element": { + "$ref": "#/definitions/DataPathValue" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Color", + "Element" + ], + "additionalProperties": false + }, + "DataPathLabelType": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DataPathSort": { + "type": "object", + "properties": { + "Direction": { + "$ref": "#/definitions/SortDirection" + }, + "SortPaths": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "required": [ + "Direction", + "SortPaths" + ], + "additionalProperties": false + }, + "DataPathType": { + "type": "object", + "properties": { + "PivotTableDataPathType": { + "$ref": "#/definitions/PivotTableDataPathType" + } + }, + "additionalProperties": false + }, + "DataPathValue": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "DataPathType": { + "$ref": "#/definitions/DataPathType" + } + }, + "additionalProperties": false + }, + "DataSetIdentifierDeclaration": { + "type": "object", + "properties": { + "Identifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DataSetArn": { + "type": "string" + } + }, + "required": [ + "DataSetArn", + "Identifier" + ], + "additionalProperties": false + }, + "DataSetReference": { + "type": "object", + "properties": { + "DataSetPlaceholder": { + "type": "string", + "pattern": ".*\\S.*" + }, + "DataSetArn": { + "type": "string" + } + }, + "required": [ + "DataSetArn", + "DataSetPlaceholder" + ], + "additionalProperties": false + }, + "DateAggregationFunction": { + "type": "string", + "enum": [ + "COUNT", + "DISTINCT_COUNT", + "MIN", + "MAX" + ] + }, + "DateAxisOptions": { + "type": "object", + "properties": { + "MissingDateVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DateDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "DateGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "DateMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/DateAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "DateTimeDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + }, + "maxItems": 50000, + "minItems": 0 + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + } + }, + "additionalProperties": false + }, + "DateTimeFormatConfiguration": { + "type": "object", + "properties": { + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + }, + "NumericFormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "DateTimeHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "HierarchyId" + ], + "additionalProperties": false + }, + "DateTimeParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "DateTimeParameterDeclaration": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/DateTimeDefaultValues" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/DateTimeValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "DateTimePickerControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "DateTimeValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "DayOfTheWeek": { + "type": "string", + "enum": [ + "SUNDAY", + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY" + ] + }, + "DecimalDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "DecimalParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "number", + "default": 0 + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "DecimalParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/DecimalDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/DecimalValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "DecimalPlacesConfiguration": { + "type": "object", + "properties": { + "DecimalPlaces": { + "type": "number", + "maximum": 20, + "minimum": 0 + } + }, + "required": [ + "DecimalPlaces" + ], + "additionalProperties": false + }, + "DecimalValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "DefaultFreeFormLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DefaultGridLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DefaultInteractiveLayoutConfiguration": { + "type": "object", + "properties": { + "Grid": { + "$ref": "#/definitions/DefaultGridLayoutConfiguration" + }, + "FreeForm": { + "$ref": "#/definitions/DefaultFreeFormLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "DefaultNewSheetConfiguration": { + "type": "object", + "properties": { + "InteractiveLayoutConfiguration": { + "$ref": "#/definitions/DefaultInteractiveLayoutConfiguration" + }, + "PaginatedLayoutConfiguration": { + "$ref": "#/definitions/DefaultPaginatedLayoutConfiguration" + }, + "SheetContentType": { + "$ref": "#/definitions/SheetContentType" + } + }, + "additionalProperties": false + }, + "DefaultPaginatedLayoutConfiguration": { + "type": "object", + "properties": { + "SectionBased": { + "$ref": "#/definitions/DefaultSectionBasedLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "DefaultSectionBasedLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DestinationParameterValueConfiguration": { + "type": "object", + "properties": { + "CustomValuesConfiguration": { + "$ref": "#/definitions/CustomValuesConfiguration" + }, + "SelectAllValueOptions": { + "$ref": "#/definitions/SelectAllValueOptions" + }, + "SourceParameterName": { + "type": "string" + }, + "SourceField": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "SourceColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "DimensionField": { + "type": "object", + "properties": { + "NumericalDimensionField": { + "$ref": "#/definitions/NumericalDimensionField" + }, + "CategoricalDimensionField": { + "$ref": "#/definitions/CategoricalDimensionField" + }, + "DateDimensionField": { + "$ref": "#/definitions/DateDimensionField" + } + }, + "additionalProperties": false + }, + "DonutCenterOptions": { + "type": "object", + "properties": { + "LabelVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DonutOptions": { + "type": "object", + "properties": { + "ArcOptions": { + "$ref": "#/definitions/ArcOptions" + }, + "DonutCenterOptions": { + "$ref": "#/definitions/DonutCenterOptions" + } + }, + "additionalProperties": false + }, + "DrillDownFilter": { + "type": "object", + "properties": { + "NumericEqualityFilter": { + "$ref": "#/definitions/NumericEqualityDrillDownFilter" + }, + "CategoryFilter": { + "$ref": "#/definitions/CategoryDrillDownFilter" + }, + "TimeRangeFilter": { + "$ref": "#/definitions/TimeRangeDrillDownFilter" + } + }, + "additionalProperties": false + }, + "DropDownControlDisplayOptions": { + "type": "object", + "properties": { + "SelectAllOptions": { + "$ref": "#/definitions/ListControlSelectAllOptions" + }, + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "DynamicDefaultValue": { + "type": "object", + "properties": { + "UserNameColumn": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "GroupNameColumn": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "DefaultValueColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "required": [ + "DefaultValueColumn" + ], + "additionalProperties": false + }, + "EmptyVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "Entity": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "pattern": ".*\\S.*" + } + }, + "additionalProperties": false + }, + "ExcludePeriodConfiguration": { + "type": "object", + "properties": { + "Amount": { + "type": "number", + "default": null + }, + "Granularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + } + }, + "required": [ + "Amount", + "Granularity" + ], + "additionalProperties": false + }, + "ExplicitHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 2 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "Columns", + "HierarchyId" + ], + "additionalProperties": false + }, + "FieldBasedTooltip": { + "type": "object", + "properties": { + "AggregationVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TooltipTitleType": { + "$ref": "#/definitions/TooltipTitleType" + }, + "TooltipFields": { + "type": "array", + "items": { + "$ref": "#/definitions/TooltipItem" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FieldLabelType": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "FieldSeriesItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "Settings": { + "$ref": "#/definitions/LineChartSeriesSettings" + } + }, + "required": [ + "AxisBinding", + "FieldId" + ], + "additionalProperties": false + }, + "FieldSort": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Direction": { + "$ref": "#/definitions/SortDirection" + } + }, + "required": [ + "Direction", + "FieldId" + ], + "additionalProperties": false + }, + "FieldSortOptions": { + "type": "object", + "properties": { + "FieldSort": { + "$ref": "#/definitions/FieldSort" + }, + "ColumnSort": { + "$ref": "#/definitions/ColumnSort" + } + }, + "additionalProperties": false + }, + "FieldTooltipItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Label": { + "type": "string" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "FilledMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Geospatial": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilledMapConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/FilledMapConditionalFormattingOption" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "required": [ + "ConditionalFormattingOptions" + ], + "additionalProperties": false + }, + "FilledMapConditionalFormattingOption": { + "type": "object", + "properties": { + "Shape": { + "$ref": "#/definitions/FilledMapShapeConditionalFormatting" + } + }, + "required": [ + "Shape" + ], + "additionalProperties": false + }, + "FilledMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/FilledMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/FilledMapSortConfiguration" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "WindowOptions": { + "$ref": "#/definitions/GeospatialWindowOptions" + }, + "MapStyleOptions": { + "$ref": "#/definitions/GeospatialMapStyleOptions" + } + }, + "additionalProperties": false + }, + "FilledMapFieldWells": { + "type": "object", + "properties": { + "FilledMapAggregatedFieldWells": { + "$ref": "#/definitions/FilledMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "FilledMapShapeConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Format": { + "$ref": "#/definitions/ShapeConditionalFormat" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "FilledMapSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilledMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/FilledMapConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/FilledMapConditionalFormatting" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "Filter": { + "type": "object", + "properties": { + "CategoryFilter": { + "$ref": "#/definitions/CategoryFilter" + }, + "NumericRangeFilter": { + "$ref": "#/definitions/NumericRangeFilter" + }, + "NumericEqualityFilter": { + "$ref": "#/definitions/NumericEqualityFilter" + }, + "TimeEqualityFilter": { + "$ref": "#/definitions/TimeEqualityFilter" + }, + "TimeRangeFilter": { + "$ref": "#/definitions/TimeRangeFilter" + }, + "RelativeDatesFilter": { + "$ref": "#/definitions/RelativeDatesFilter" + }, + "TopBottomFilter": { + "$ref": "#/definitions/TopBottomFilter" + } + }, + "additionalProperties": false + }, + "FilterControl": { + "type": "object", + "properties": { + "DateTimePicker": { + "$ref": "#/definitions/FilterDateTimePickerControl" + }, + "List": { + "$ref": "#/definitions/FilterListControl" + }, + "Dropdown": { + "$ref": "#/definitions/FilterDropDownControl" + }, + "TextField": { + "$ref": "#/definitions/FilterTextFieldControl" + }, + "TextArea": { + "$ref": "#/definitions/FilterTextAreaControl" + }, + "Slider": { + "$ref": "#/definitions/FilterSliderControl" + }, + "RelativeDateTime": { + "$ref": "#/definitions/FilterRelativeDateTimeControl" + } + }, + "additionalProperties": false + }, + "FilterDateTimePickerControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/DateTimePickerControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlDateTimePickerType" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterDropDownControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/DropDownControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/FilterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterGroup": { + "type": "object", + "properties": { + "FilterGroupId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Filters": { + "type": "array", + "items": { + "$ref": "#/definitions/Filter" + }, + "maxItems": 20, + "minItems": 0 + }, + "ScopeConfiguration": { + "$ref": "#/definitions/FilterScopeConfiguration" + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "CrossDataset": { + "$ref": "#/definitions/CrossDatasetTypes" + } + }, + "required": [ + "CrossDataset", + "FilterGroupId", + "Filters", + "ScopeConfiguration" + ], + "additionalProperties": false + }, + "FilterListConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator" + ], + "additionalProperties": false + }, + "FilterListControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/ListControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/FilterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterNullOption": { + "type": "string", + "enum": [ + "ALL_VALUES", + "NULLS_ONLY", + "NON_NULLS_ONLY" + ] + }, + "FilterOperationSelectedFieldsConfiguration": { + "type": "object", + "properties": { + "SelectedFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 20, + "minItems": 1 + }, + "SelectedFieldOptions": { + "$ref": "#/definitions/SelectedFieldOptions" + }, + "SelectedColumns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilterOperationTargetVisualsConfiguration": { + "type": "object", + "properties": { + "SameSheetTargetVisualConfiguration": { + "$ref": "#/definitions/SameSheetTargetVisualConfiguration" + } + }, + "additionalProperties": false + }, + "FilterRelativeDateTimeControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/RelativeDateTimeControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterScopeConfiguration": { + "type": "object", + "properties": { + "SelectedSheets": { + "$ref": "#/definitions/SelectedSheetsFilterScopeConfiguration" + }, + "AllSheets": { + "$ref": "#/definitions/AllSheetsFilterScopeConfiguration" + } + }, + "additionalProperties": false + }, + "FilterSelectableValues": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilterSliderControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/SliderControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlSliderType" + }, + "MaximumValue": { + "type": "number", + "default": 0 + }, + "MinimumValue": { + "type": "number", + "default": 0 + }, + "StepSize": { + "type": "number", + "default": 0 + } + }, + "required": [ + "FilterControlId", + "MaximumValue", + "MinimumValue", + "SourceFilterId", + "StepSize", + "Title" + ], + "additionalProperties": false + }, + "FilterTextAreaControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Delimiter": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DisplayOptions": { + "$ref": "#/definitions/TextAreaControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterTextFieldControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/TextFieldControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterVisualScope": { + "type": "string", + "enum": [ + "ALL_VISUALS", + "SELECTED_VISUALS" + ] + }, + "FontConfiguration": { + "type": "object", + "properties": { + "FontSize": { + "$ref": "#/definitions/FontSize" + }, + "FontDecoration": { + "$ref": "#/definitions/FontDecoration" + }, + "FontColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "FontWeight": { + "$ref": "#/definitions/FontWeight" + }, + "FontStyle": { + "$ref": "#/definitions/FontStyle" + } + }, + "additionalProperties": false + }, + "FontDecoration": { + "type": "string", + "enum": [ + "UNDERLINE", + "NONE" + ] + }, + "FontSize": { + "type": "object", + "properties": { + "Relative": { + "$ref": "#/definitions/RelativeFontSize" + } + }, + "additionalProperties": false + }, + "FontStyle": { + "type": "string", + "enum": [ + "NORMAL", + "ITALIC" + ] + }, + "FontWeight": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/FontWeightName" + } + }, + "additionalProperties": false + }, + "FontWeightName": { + "type": "string", + "enum": [ + "NORMAL", + "BOLD" + ] + }, + "ForecastComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodsForward": { + "type": "number", + "maximum": 1000, + "minimum": 1 + }, + "PeriodsBackward": { + "type": "number", + "maximum": 1000, + "minimum": 0 + }, + "UpperBoundary": { + "type": "number", + "default": null + }, + "LowerBoundary": { + "type": "number", + "default": null + }, + "PredictionInterval": { + "type": "number", + "maximum": 95, + "minimum": 50 + }, + "Seasonality": { + "$ref": "#/definitions/ForecastComputationSeasonality" + }, + "CustomSeasonalityValue": { + "type": "number", + "default": null, + "maximum": 180, + "minimum": 1 + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "ForecastComputationSeasonality": { + "type": "string", + "enum": [ + "AUTOMATIC", + "CUSTOM" + ] + }, + "ForecastConfiguration": { + "type": "object", + "properties": { + "ForecastProperties": { + "$ref": "#/definitions/TimeBasedForecastProperties" + }, + "Scenario": { + "$ref": "#/definitions/ForecastScenario" + } + }, + "additionalProperties": false + }, + "ForecastScenario": { + "type": "object", + "properties": { + "WhatIfPointScenario": { + "$ref": "#/definitions/WhatIfPointScenario" + }, + "WhatIfRangeScenario": { + "$ref": "#/definitions/WhatIfRangeScenario" + } + }, + "additionalProperties": false + }, + "FormatConfiguration": { + "type": "object", + "properties": { + "StringFormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + }, + "NumberFormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + }, + "DateTimeFormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "ScreenCanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutScreenCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/FreeFormLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutCanvasSizeOptions" + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "FreeFormLayoutElement": { + "type": "object", + "properties": { + "ElementId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "ElementType": { + "$ref": "#/definitions/LayoutElementType" + }, + "XAxisLocation": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "YAxisLocation": { + "type": "string", + "description": "String based length that is composed of value and unit in px with Integer.MAX_VALUE as maximum value" + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "RenderingRules": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetElementRenderingRule" + }, + "maxItems": 10000, + "minItems": 0 + }, + "BorderStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBorderStyle" + }, + "SelectedBorderStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBorderStyle" + }, + "BackgroundStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBackgroundStyle" + }, + "LoadingAnimation": { + "$ref": "#/definitions/LoadingAnimation" + } + }, + "required": [ + "ElementId", + "ElementType", + "Height", + "Width", + "XAxisLocation", + "YAxisLocation" + ], + "additionalProperties": false + }, + "FreeFormLayoutElementBackgroundStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutElementBorderStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutScreenCanvasSizeOptions": { + "type": "object", + "properties": { + "OptimizedViewPortWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "OptimizedViewPortWidth" + ], + "additionalProperties": false + }, + "FreeFormSectionLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/FreeFormLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "FunnelChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FunnelChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/FunnelChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/FunnelChartSortConfiguration" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "DataLabelOptions": { + "$ref": "#/definitions/FunnelChartDataLabelOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "FunnelChartDataLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CategoryLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MeasureLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "Position": { + "$ref": "#/definitions/DataLabelPosition" + }, + "LabelFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "LabelColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "MeasureDataLabelStyle": { + "$ref": "#/definitions/FunnelChartMeasureDataLabelStyle" + } + }, + "additionalProperties": false + }, + "FunnelChartFieldWells": { + "type": "object", + "properties": { + "FunnelChartAggregatedFieldWells": { + "$ref": "#/definitions/FunnelChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "FunnelChartMeasureDataLabelStyle": { + "type": "string", + "enum": [ + "VALUE_ONLY", + "PERCENTAGE_BY_FIRST_STAGE", + "PERCENTAGE_BY_PREVIOUS_STAGE", + "VALUE_AND_PERCENTAGE_BY_FIRST_STAGE", + "VALUE_AND_PERCENTAGE_BY_PREVIOUS_STAGE" + ] + }, + "FunnelChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "FunnelChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/FunnelChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GaugeChartArcConditionalFormatting": { + "type": "object", + "properties": { + "ForegroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "GaugeChartConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/GaugeChartConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GaugeChartConditionalFormattingOption": { + "type": "object", + "properties": { + "PrimaryValue": { + "$ref": "#/definitions/GaugeChartPrimaryValueConditionalFormatting" + }, + "Arc": { + "$ref": "#/definitions/GaugeChartArcConditionalFormatting" + } + }, + "additionalProperties": false + }, + "GaugeChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/GaugeChartFieldWells" + }, + "GaugeChartOptions": { + "$ref": "#/definitions/GaugeChartOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "TooltipOptions": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "GaugeChartFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TargetValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GaugeChartOptions": { + "type": "object", + "properties": { + "PrimaryValueDisplayType": { + "$ref": "#/definitions/PrimaryValueDisplayType" + }, + "Comparison": { + "$ref": "#/definitions/ComparisonConfiguration" + }, + "ArcAxis": { + "$ref": "#/definitions/ArcAxisConfiguration" + }, + "Arc": { + "$ref": "#/definitions/ArcConfiguration" + }, + "PrimaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + } + }, + "additionalProperties": false + }, + "GaugeChartPrimaryValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "GaugeChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/GaugeChartConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/GaugeChartConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GeospatialCoordinateBounds": { + "type": "object", + "properties": { + "North": { + "type": "number", + "maximum": 90, + "minimum": -90 + }, + "South": { + "type": "number", + "maximum": 90, + "minimum": -90 + }, + "West": { + "type": "number", + "maximum": 1800, + "minimum": -1800 + }, + "East": { + "type": "number", + "maximum": 1800, + "minimum": -1800 + } + }, + "required": [ + "East", + "North", + "South", + "West" + ], + "additionalProperties": false + }, + "GeospatialHeatmapColorScale": { + "type": "object", + "properties": { + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/GeospatialHeatmapDataColor" + }, + "maxItems": 2, + "minItems": 2 + } + }, + "additionalProperties": false + }, + "GeospatialHeatmapConfiguration": { + "type": "object", + "properties": { + "HeatmapColor": { + "$ref": "#/definitions/GeospatialHeatmapColorScale" + } + }, + "additionalProperties": false + }, + "GeospatialHeatmapDataColor": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "Color" + ], + "additionalProperties": false + }, + "GeospatialMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Geospatial": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GeospatialMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/GeospatialMapFieldWells" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "WindowOptions": { + "$ref": "#/definitions/GeospatialWindowOptions" + }, + "MapStyleOptions": { + "$ref": "#/definitions/GeospatialMapStyleOptions" + }, + "PointStyleOptions": { + "$ref": "#/definitions/GeospatialPointStyleOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "GeospatialMapFieldWells": { + "type": "object", + "properties": { + "GeospatialMapAggregatedFieldWells": { + "$ref": "#/definitions/GeospatialMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "GeospatialMapStyleOptions": { + "type": "object", + "properties": { + "BaseMapStyle": { + "$ref": "#/definitions/BaseMapStyleType" + } + }, + "additionalProperties": false + }, + "GeospatialMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/GeospatialMapConfiguration" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GeospatialPointStyleOptions": { + "type": "object", + "properties": { + "SelectedPointStyle": { + "$ref": "#/definitions/GeospatialSelectedPointStyle" + }, + "ClusterMarkerConfiguration": { + "$ref": "#/definitions/ClusterMarkerConfiguration" + }, + "HeatmapConfiguration": { + "$ref": "#/definitions/GeospatialHeatmapConfiguration" + } + }, + "additionalProperties": false + }, + "GeospatialSelectedPointStyle": { + "type": "string", + "enum": [ + "POINT", + "CLUSTER", + "HEATMAP" + ] + }, + "GeospatialWindowOptions": { + "type": "object", + "properties": { + "Bounds": { + "$ref": "#/definitions/GeospatialCoordinateBounds" + }, + "MapZoomMode": { + "$ref": "#/definitions/MapZoomMode" + } + }, + "additionalProperties": false + }, + "GlobalTableBorderOptions": { + "type": "object", + "properties": { + "UniformBorder": { + "$ref": "#/definitions/TableBorderOptions" + }, + "SideSpecificBorder": { + "$ref": "#/definitions/TableSideBorderOptions" + } + }, + "additionalProperties": false + }, + "GradientColor": { + "type": "object", + "properties": { + "Stops": { + "type": "array", + "items": { + "$ref": "#/definitions/GradientStop" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GradientStop": { + "type": "object", + "properties": { + "GradientOffset": { + "type": "number", + "default": 0 + }, + "DataValue": { + "type": "number", + "default": null + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "GradientOffset" + ], + "additionalProperties": false + }, + "GridLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "ScreenCanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutScreenCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "GridLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/GridLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutCanvasSizeOptions" + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "GridLayoutElement": { + "type": "object", + "properties": { + "ElementId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "ElementType": { + "$ref": "#/definitions/LayoutElementType" + }, + "ColumnIndex": { + "type": "number", + "maximum": 35, + "minimum": 0 + }, + "ColumnSpan": { + "type": "number", + "maximum": 36, + "minimum": 1 + }, + "RowIndex": { + "type": "number", + "maximum": 9009, + "minimum": 0 + }, + "RowSpan": { + "type": "number", + "maximum": 21, + "minimum": 1 + } + }, + "required": [ + "ColumnSpan", + "ElementId", + "ElementType", + "RowSpan" + ], + "additionalProperties": false + }, + "GridLayoutScreenCanvasSizeOptions": { + "type": "object", + "properties": { + "ResizeOption": { + "$ref": "#/definitions/ResizeOption" + }, + "OptimizedViewPortWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "ResizeOption" + ], + "additionalProperties": false + }, + "GrowthRateComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodSize": { + "type": "number", + "default": 0, + "maximum": 52, + "minimum": 2 + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "HeaderFooterSectionConfiguration": { + "type": "object", + "properties": { + "SectionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Layout": { + "$ref": "#/definitions/SectionLayoutConfiguration" + }, + "Style": { + "$ref": "#/definitions/SectionStyle" + } + }, + "required": [ + "Layout", + "SectionId" + ], + "additionalProperties": false + }, + "HeatMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Rows": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "HeatMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/HeatMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/HeatMapSortConfiguration" + }, + "RowLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColumnLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorScale": { + "$ref": "#/definitions/ColorScale" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + } + }, + "additionalProperties": false + }, + "HeatMapFieldWells": { + "type": "object", + "properties": { + "HeatMapAggregatedFieldWells": { + "$ref": "#/definitions/HeatMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "HeatMapSortConfiguration": { + "type": "object", + "properties": { + "HeatMapRowSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "HeatMapColumnSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "HeatMapRowItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "HeatMapColumnItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "HeatMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/HeatMapConfiguration" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "HistogramAggregatedFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "HistogramBinOptions": { + "type": "object", + "properties": { + "SelectedBinType": { + "$ref": "#/definitions/HistogramBinType" + }, + "BinCount": { + "$ref": "#/definitions/BinCountOptions" + }, + "BinWidth": { + "$ref": "#/definitions/BinWidthOptions" + }, + "StartValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "HistogramBinType": { + "type": "string", + "enum": [ + "BIN_COUNT", + "BIN_WIDTH" + ] + }, + "HistogramConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/HistogramFieldWells" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "YAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "BinOptions": { + "$ref": "#/definitions/HistogramBinOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "HistogramFieldWells": { + "type": "object", + "properties": { + "HistogramAggregatedFieldWells": { + "$ref": "#/definitions/HistogramAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "HistogramVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/HistogramConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "HorizontalTextAlignment": { + "type": "string", + "enum": [ + "LEFT", + "CENTER", + "RIGHT", + "AUTO" + ] + }, + "Icon": { + "type": "string", + "enum": [ + "CARET_UP", + "CARET_DOWN", + "PLUS", + "MINUS", + "ARROW_UP", + "ARROW_DOWN", + "ARROW_LEFT", + "ARROW_UP_LEFT", + "ARROW_DOWN_LEFT", + "ARROW_RIGHT", + "ARROW_UP_RIGHT", + "ARROW_DOWN_RIGHT", + "FACE_UP", + "FACE_DOWN", + "FACE_FLAT", + "ONE_BAR", + "TWO_BAR", + "THREE_BAR", + "CIRCLE", + "TRIANGLE", + "SQUARE", + "FLAG", + "THUMBS_UP", + "THUMBS_DOWN", + "CHECKMARK", + "X" + ] + }, + "InsightConfiguration": { + "type": "object", + "properties": { + "Computations": { + "type": "array", + "items": { + "$ref": "#/definitions/Computation" + }, + "maxItems": 100, + "minItems": 0 + }, + "CustomNarrative": { + "$ref": "#/definitions/CustomNarrativeOptions" + } + }, + "additionalProperties": false + }, + "InsightVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "InsightConfiguration": { + "$ref": "#/definitions/InsightConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "IntegerDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "IntegerParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "number", + "default": 0 + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "IntegerParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/IntegerDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/IntegerValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "IntegerValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "ItemsLimitConfiguration": { + "type": "object", + "properties": { + "ItemsLimit": { + "type": "number", + "default": null + }, + "OtherCategories": { + "$ref": "#/definitions/OtherCategories" + } + }, + "additionalProperties": false + }, + "KPIActualValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIComparisonValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/KPIConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPIConditionalFormattingOption": { + "type": "object", + "properties": { + "PrimaryValue": { + "$ref": "#/definitions/KPIPrimaryValueConditionalFormatting" + }, + "ProgressBar": { + "$ref": "#/definitions/KPIProgressBarConditionalFormatting" + }, + "ActualValue": { + "$ref": "#/definitions/KPIActualValueConditionalFormatting" + }, + "ComparisonValue": { + "$ref": "#/definitions/KPIComparisonValueConditionalFormatting" + } + }, + "additionalProperties": false + }, + "KPIConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/KPIFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/KPISortConfiguration" + }, + "KPIOptions": { + "$ref": "#/definitions/KPIOptions" + } + }, + "additionalProperties": false + }, + "KPIFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TargetValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TrendGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPIOptions": { + "type": "object", + "properties": { + "ProgressBar": { + "$ref": "#/definitions/ProgressBarOptions" + }, + "TrendArrows": { + "$ref": "#/definitions/TrendArrowOptions" + }, + "SecondaryValue": { + "$ref": "#/definitions/SecondaryValueOptions" + }, + "Comparison": { + "$ref": "#/definitions/ComparisonConfiguration" + }, + "PrimaryValueDisplayType": { + "$ref": "#/definitions/PrimaryValueDisplayType" + }, + "PrimaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "SecondaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "Sparkline": { + "$ref": "#/definitions/KPISparklineOptions" + }, + "VisualLayoutOptions": { + "$ref": "#/definitions/KPIVisualLayoutOptions" + } + }, + "additionalProperties": false + }, + "KPIPrimaryValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIProgressBarConditionalFormatting": { + "type": "object", + "properties": { + "ForegroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "KPISortConfiguration": { + "type": "object", + "properties": { + "TrendGroupSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPISparklineOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Type": { + "$ref": "#/definitions/KPISparklineType" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "TooltipVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "KPISparklineType": { + "type": "string", + "enum": [ + "LINE", + "AREA" + ] + }, + "KPIVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/KPIConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/KPIConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "KPIVisualLayoutOptions": { + "type": "object", + "properties": { + "StandardLayout": { + "$ref": "#/definitions/KPIVisualStandardLayout" + } + }, + "additionalProperties": false + }, + "KPIVisualStandardLayout": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/KPIVisualStandardLayoutType" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "KPIVisualStandardLayoutType": { + "type": "string", + "enum": [ + "CLASSIC", + "VERTICAL" + ] + }, + "LabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "CustomLabel": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Layout": { + "type": "object", + "properties": { + "Configuration": { + "$ref": "#/definitions/LayoutConfiguration" + } + }, + "required": [ + "Configuration" + ], + "additionalProperties": false + }, + "LayoutConfiguration": { + "type": "object", + "properties": { + "GridLayout": { + "$ref": "#/definitions/GridLayoutConfiguration" + }, + "FreeFormLayout": { + "$ref": "#/definitions/FreeFormLayoutConfiguration" + }, + "SectionBasedLayout": { + "$ref": "#/definitions/SectionBasedLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "LayoutElementType": { + "type": "string", + "enum": [ + "VISUAL", + "FILTER_CONTROL", + "PARAMETER_CONTROL", + "TEXT_BOX" + ] + }, + "LegendOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Title": { + "$ref": "#/definitions/LabelOptions" + }, + "Position": { + "$ref": "#/definitions/LegendPosition" + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "LegendPosition": { + "type": "string", + "enum": [ + "AUTO", + "RIGHT", + "BOTTOM", + "TOP" + ] + }, + "LineChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "LineChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/LineChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/LineChartSortConfiguration" + }, + "ForecastConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/ForecastConfiguration" + }, + "maxItems": 10, + "minItems": 0 + }, + "Type": { + "$ref": "#/definitions/LineChartType" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/LineSeriesAxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SecondaryYAxisDisplayOptions": { + "$ref": "#/definitions/LineSeriesAxisDisplayOptions" + }, + "SecondaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "DefaultSeriesSettings": { + "$ref": "#/definitions/LineChartDefaultSeriesSettings" + }, + "Series": { + "type": "array", + "items": { + "$ref": "#/definitions/SeriesItem" + }, + "maxItems": 10, + "minItems": 0 + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "LineChartDefaultSeriesSettings": { + "type": "object", + "properties": { + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "LineStyleSettings": { + "$ref": "#/definitions/LineChartLineStyleSettings" + }, + "MarkerStyleSettings": { + "$ref": "#/definitions/LineChartMarkerStyleSettings" + } + }, + "additionalProperties": false + }, + "LineChartFieldWells": { + "type": "object", + "properties": { + "LineChartAggregatedFieldWells": { + "$ref": "#/definitions/LineChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "LineChartLineStyle": { + "type": "string", + "enum": [ + "SOLID", + "DOTTED", + "DASHED" + ] + }, + "LineChartLineStyleSettings": { + "type": "object", + "properties": { + "LineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "LineInterpolation": { + "$ref": "#/definitions/LineInterpolation" + }, + "LineStyle": { + "$ref": "#/definitions/LineChartLineStyle" + }, + "LineWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "LineChartMarkerShape": { + "type": "string", + "enum": [ + "CIRCLE", + "TRIANGLE", + "SQUARE", + "DIAMOND", + "ROUNDED_SQUARE" + ] + }, + "LineChartMarkerStyleSettings": { + "type": "object", + "properties": { + "MarkerVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MarkerShape": { + "$ref": "#/definitions/LineChartMarkerShape" + }, + "MarkerSize": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "MarkerColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "LineChartSeriesSettings": { + "type": "object", + "properties": { + "LineStyleSettings": { + "$ref": "#/definitions/LineChartLineStyleSettings" + }, + "MarkerStyleSettings": { + "$ref": "#/definitions/LineChartMarkerStyleSettings" + } + }, + "additionalProperties": false + }, + "LineChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "LineChartType": { + "type": "string", + "enum": [ + "LINE", + "AREA", + "STACKED_AREA" + ] + }, + "LineChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/LineChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "LineInterpolation": { + "type": "string", + "enum": [ + "LINEAR", + "SMOOTH", + "STEPPED" + ] + }, + "LineSeriesAxisDisplayOptions": { + "type": "object", + "properties": { + "AxisOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "MissingDataConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/MissingDataConfiguration" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ListControlDisplayOptions": { + "type": "object", + "properties": { + "SearchOptions": { + "$ref": "#/definitions/ListControlSearchOptions" + }, + "SelectAllOptions": { + "$ref": "#/definitions/ListControlSelectAllOptions" + }, + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "ListControlSearchOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "ListControlSelectAllOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "LoadingAnimation": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "LocalNavigationConfiguration": { + "type": "object", + "properties": { + "TargetSheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + } + }, + "required": [ + "TargetSheetId" + ], + "additionalProperties": false + }, + "LongFormatText": { + "type": "object", + "properties": { + "PlainText": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "RichText": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "MapZoomMode": { + "type": "string", + "enum": [ + "AUTO", + "MANUAL" + ] + }, + "MappedDataSetParameter": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DataSetParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "required": [ + "DataSetIdentifier", + "DataSetParameterName" + ], + "additionalProperties": false + }, + "MaximumLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "MaximumMinimumComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "Type": { + "$ref": "#/definitions/MaximumMinimumComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "MaximumMinimumComputationType": { + "type": "string", + "enum": [ + "MAXIMUM", + "MINIMUM" + ] + }, + "MeasureField": { + "type": "object", + "properties": { + "NumericalMeasureField": { + "$ref": "#/definitions/NumericalMeasureField" + }, + "CategoricalMeasureField": { + "$ref": "#/definitions/CategoricalMeasureField" + }, + "DateMeasureField": { + "$ref": "#/definitions/DateMeasureField" + }, + "CalculatedMeasureField": { + "$ref": "#/definitions/CalculatedMeasureField" + } + }, + "additionalProperties": false + }, + "MetricComparisonComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "FromValue": { + "$ref": "#/definitions/MeasureField" + }, + "TargetValue": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "MinimumLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "MissingDataConfiguration": { + "type": "object", + "properties": { + "TreatmentOption": { + "$ref": "#/definitions/MissingDataTreatmentOption" + } + }, + "additionalProperties": false + }, + "MissingDataTreatmentOption": { + "type": "string", + "enum": [ + "INTERPOLATE", + "SHOW_AS_ZERO", + "SHOW_AS_BLANK" + ] + }, + "NegativeValueConfiguration": { + "type": "object", + "properties": { + "DisplayMode": { + "$ref": "#/definitions/NegativeValueDisplayMode" + } + }, + "required": [ + "DisplayMode" + ], + "additionalProperties": false + }, + "NegativeValueDisplayMode": { + "type": "string", + "enum": [ + "POSITIVE", + "NEGATIVE" + ] + }, + "NullValueFormatConfiguration": { + "type": "object", + "properties": { + "NullString": { + "type": "string", + "maxLength": 128, + "minLength": 1 + } + }, + "required": [ + "NullString" + ], + "additionalProperties": false + }, + "NumberDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NumberScale": { + "$ref": "#/definitions/NumberScale" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumberFormatConfiguration": { + "type": "object", + "properties": { + "FormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumberScale": { + "type": "string", + "enum": [ + "NONE", + "AUTO", + "THOUSANDS", + "MILLIONS", + "BILLIONS", + "TRILLIONS" + ] + }, + "NumericAxisOptions": { + "type": "object", + "properties": { + "Scale": { + "$ref": "#/definitions/AxisScale" + }, + "Range": { + "$ref": "#/definitions/AxisDisplayRange" + } + }, + "additionalProperties": false + }, + "NumericEqualityDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Column", + "Value" + ], + "additionalProperties": false + }, + "NumericEqualityFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "number", + "default": null + }, + "SelectAllOptions": { + "$ref": "#/definitions/NumericFilterSelectAllOptions" + }, + "MatchOperator": { + "$ref": "#/definitions/NumericEqualityMatchOperator" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "Column", + "FilterId", + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "NumericEqualityMatchOperator": { + "type": "string", + "enum": [ + "EQUALS", + "DOES_NOT_EQUAL" + ] + }, + "NumericFilterSelectAllOptions": { + "type": "string", + "enum": [ + "FILTER_ALL_VALUES" + ] + }, + "NumericFormatConfiguration": { + "type": "object", + "properties": { + "NumberDisplayFormatConfiguration": { + "$ref": "#/definitions/NumberDisplayFormatConfiguration" + }, + "CurrencyDisplayFormatConfiguration": { + "$ref": "#/definitions/CurrencyDisplayFormatConfiguration" + }, + "PercentageDisplayFormatConfiguration": { + "$ref": "#/definitions/PercentageDisplayFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumericRangeFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "IncludeMinimum": { + "type": "boolean", + "default": null + }, + "IncludeMaximum": { + "type": "boolean", + "default": null + }, + "RangeMinimum": { + "$ref": "#/definitions/NumericRangeFilterValue" + }, + "RangeMaximum": { + "$ref": "#/definitions/NumericRangeFilterValue" + }, + "SelectAllOptions": { + "$ref": "#/definitions/NumericFilterSelectAllOptions" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "Column", + "FilterId", + "NullOption" + ], + "additionalProperties": false + }, + "NumericRangeFilterValue": { + "type": "object", + "properties": { + "StaticValue": { + "type": "number", + "default": null + }, + "Parameter": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "NumericSeparatorConfiguration": { + "type": "object", + "properties": { + "DecimalSeparator": { + "$ref": "#/definitions/NumericSeparatorSymbol" + }, + "ThousandsSeparator": { + "$ref": "#/definitions/ThousandSeparatorOptions" + } + }, + "additionalProperties": false + }, + "NumericSeparatorSymbol": { + "type": "string", + "enum": [ + "COMMA", + "DOT", + "SPACE" + ] + }, + "NumericalAggregationFunction": { + "type": "object", + "properties": { + "SimpleNumericalAggregation": { + "$ref": "#/definitions/SimpleNumericalAggregationFunction" + }, + "PercentileAggregation": { + "$ref": "#/definitions/PercentileAggregation" + } + }, + "additionalProperties": false + }, + "NumericalDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "NumericalMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/NumericalAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "OtherCategories": { + "type": "string", + "enum": [ + "INCLUDE", + "EXCLUDE" + ] + }, + "PaginationConfiguration": { + "type": "object", + "properties": { + "PageSize": { + "type": "number", + "default": null + }, + "PageNumber": { + "type": "number", + "minimum": 0 + } + }, + "required": [ + "PageNumber", + "PageSize" + ], + "additionalProperties": false + }, + "PanelBorderStyle": { + "type": "string", + "enum": [ + "SOLID", + "DASHED", + "DOTTED" + ] + }, + "PanelConfiguration": { + "type": "object", + "properties": { + "Title": { + "$ref": "#/definitions/PanelTitleOptions" + }, + "BorderVisibility": { + "$ref": "#/definitions/Visibility" + }, + "BorderThickness": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "BorderStyle": { + "$ref": "#/definitions/PanelBorderStyle" + }, + "BorderColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + }, + "GutterVisibility": { + "$ref": "#/definitions/Visibility" + }, + "GutterSpacing": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "BackgroundVisibility": { + "$ref": "#/definitions/Visibility" + }, + "BackgroundColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "PanelTitleOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "HorizontalTextAlignment": { + "$ref": "#/definitions/HorizontalTextAlignment" + } + }, + "additionalProperties": false + }, + "PaperOrientation": { + "type": "string", + "enum": [ + "PORTRAIT", + "LANDSCAPE" + ] + }, + "PaperSize": { + "type": "string", + "enum": [ + "US_LETTER", + "US_LEGAL", + "US_TABLOID_LEDGER", + "A0", + "A1", + "A2", + "A3", + "A4", + "A5", + "JIS_B4", + "JIS_B5" + ] + }, + "ParameterControl": { + "type": "object", + "properties": { + "DateTimePicker": { + "$ref": "#/definitions/ParameterDateTimePickerControl" + }, + "List": { + "$ref": "#/definitions/ParameterListControl" + }, + "Dropdown": { + "$ref": "#/definitions/ParameterDropDownControl" + }, + "TextField": { + "$ref": "#/definitions/ParameterTextFieldControl" + }, + "TextArea": { + "$ref": "#/definitions/ParameterTextAreaControl" + }, + "Slider": { + "$ref": "#/definitions/ParameterSliderControl" + } + }, + "additionalProperties": false + }, + "ParameterDateTimePickerControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/DateTimePickerControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterDeclaration": { + "type": "object", + "properties": { + "StringParameterDeclaration": { + "$ref": "#/definitions/StringParameterDeclaration" + }, + "DecimalParameterDeclaration": { + "$ref": "#/definitions/DecimalParameterDeclaration" + }, + "IntegerParameterDeclaration": { + "$ref": "#/definitions/IntegerParameterDeclaration" + }, + "DateTimeParameterDeclaration": { + "$ref": "#/definitions/DateTimeParameterDeclaration" + } + }, + "additionalProperties": false + }, + "ParameterDropDownControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/DropDownControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/ParameterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterListControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/ListControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/ParameterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterSelectableValues": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + }, + "LinkToDataSetColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "ParameterSliderControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/SliderControlDisplayOptions" + }, + "MaximumValue": { + "type": "number", + "default": 0 + }, + "MinimumValue": { + "type": "number", + "default": 0 + }, + "StepSize": { + "type": "number", + "default": 0 + } + }, + "required": [ + "MaximumValue", + "MinimumValue", + "ParameterControlId", + "SourceParameterName", + "StepSize", + "Title" + ], + "additionalProperties": false + }, + "ParameterTextAreaControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "Delimiter": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DisplayOptions": { + "$ref": "#/definitions/TextAreaControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterTextFieldControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/TextFieldControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterValueType": { + "type": "string", + "enum": [ + "MULTI_VALUED", + "SINGLE_VALUED" + ] + }, + "Parameters": { + "type": "object", + "properties": { + "StringParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/StringParameter" + }, + "maxItems": 100, + "minItems": 0 + }, + "IntegerParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/IntegerParameter" + }, + "maxItems": 100, + "minItems": 0 + }, + "DecimalParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/DecimalParameter" + }, + "maxItems": 100, + "minItems": 0 + }, + "DateTimeParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/DateTimeParameter" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PercentVisibleRange": { + "type": "object", + "properties": { + "From": { + "type": "number", + "default": null, + "maximum": 100, + "minimum": 0 + }, + "To": { + "type": "number", + "default": null, + "maximum": 100, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "PercentageDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "PercentileAggregation": { + "type": "object", + "properties": { + "PercentileValue": { + "type": "number", + "maximum": 100, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "PeriodOverPeriodComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "PeriodToDateComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodTimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "PieChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PieChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/PieChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/PieChartSortConfiguration" + }, + "DonutOptions": { + "$ref": "#/definitions/DonutOptions" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "PieChartFieldWells": { + "type": "object", + "properties": { + "PieChartAggregatedFieldWells": { + "$ref": "#/definitions/PieChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "PieChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "PieChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/PieChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "PivotFieldSortOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "SortBy": { + "$ref": "#/definitions/PivotTableSortBy" + } + }, + "required": [ + "FieldId", + "SortBy" + ], + "additionalProperties": false + }, + "PivotTableAggregatedFieldWells": { + "type": "object", + "properties": { + "Rows": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 40, + "minItems": 0 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 40, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 40, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableCellConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TextFormat": { + "$ref": "#/definitions/TextConditionalFormat" + }, + "Scope": { + "$ref": "#/definitions/PivotTableConditionalFormattingScope" + }, + "Scopes": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableConditionalFormattingScope" + }, + "maxItems": 3, + "minItems": 0 + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "PivotTableConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingOption": { + "type": "object", + "properties": { + "Cell": { + "$ref": "#/definitions/PivotTableCellConditionalFormatting" + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingScope": { + "type": "object", + "properties": { + "Role": { + "$ref": "#/definitions/PivotTableConditionalFormattingScopeRole" + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingScopeRole": { + "type": "string", + "enum": [ + "FIELD", + "FIELD_TOTAL", + "GRAND_TOTAL" + ] + }, + "PivotTableConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/PivotTableFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/PivotTableSortConfiguration" + }, + "TableOptions": { + "$ref": "#/definitions/PivotTableOptions" + }, + "TotalOptions": { + "$ref": "#/definitions/PivotTableTotalOptions" + }, + "FieldOptions": { + "$ref": "#/definitions/PivotTableFieldOptions" + }, + "PaginatedReportOptions": { + "$ref": "#/definitions/PivotTablePaginatedReportOptions" + } + }, + "additionalProperties": false + }, + "PivotTableDataPathOption": { + "type": "object", + "properties": { + "DataPathList": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "DataPathList" + ], + "additionalProperties": false + }, + "PivotTableDataPathType": { + "type": "string", + "enum": [ + "HIERARCHY_ROWS_LAYOUT_COLUMN", + "MULTIPLE_ROW_METRICS_COLUMN", + "EMPTY_COLUMN_HEADER", + "COUNT_METRIC_COLUMN" + ] + }, + "PivotTableFieldCollapseState": { + "type": "string", + "enum": [ + "COLLAPSED", + "EXPANDED" + ] + }, + "PivotTableFieldCollapseStateOption": { + "type": "object", + "properties": { + "Target": { + "$ref": "#/definitions/PivotTableFieldCollapseStateTarget" + }, + "State": { + "$ref": "#/definitions/PivotTableFieldCollapseState" + } + }, + "required": [ + "Target" + ], + "additionalProperties": false + }, + "PivotTableFieldCollapseStateTarget": { + "type": "object", + "properties": { + "FieldId": { + "type": "string" + }, + "FieldDataPathValues": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableFieldOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "CustomLabel": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "PivotTableFieldOptions": { + "type": "object", + "properties": { + "SelectedFieldOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "DataPathOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableDataPathOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "CollapseStateOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldCollapseStateOption" + } + } + }, + "additionalProperties": false + }, + "PivotTableFieldSubtotalOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "PivotTableFieldWells": { + "type": "object", + "properties": { + "PivotTableAggregatedFieldWells": { + "$ref": "#/definitions/PivotTableAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "PivotTableMetricPlacement": { + "type": "string", + "enum": [ + "ROW", + "COLUMN" + ] + }, + "PivotTableOptions": { + "type": "object", + "properties": { + "MetricPlacement": { + "$ref": "#/definitions/PivotTableMetricPlacement" + }, + "SingleMetricVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ColumnNamesVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ToggleButtonsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ColumnHeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowHeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "CellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowFieldNamesStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowAlternateColorOptions": { + "$ref": "#/definitions/RowAlternateColorOptions" + }, + "CollapsedRowDimensionsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "RowsLayout": { + "$ref": "#/definitions/PivotTableRowsLayout" + }, + "RowsLabelOptions": { + "$ref": "#/definitions/PivotTableRowsLabelOptions" + }, + "DefaultCellWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "PivotTablePaginatedReportOptions": { + "type": "object", + "properties": { + "VerticalOverflowVisibility": { + "$ref": "#/definitions/Visibility" + }, + "OverflowColumnHeaderVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "PivotTableRowsLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CustomLabel": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "PivotTableRowsLayout": { + "type": "string", + "enum": [ + "TABULAR", + "HIERARCHY" + ] + }, + "PivotTableSortBy": { + "type": "object", + "properties": { + "Field": { + "$ref": "#/definitions/FieldSort" + }, + "Column": { + "$ref": "#/definitions/ColumnSort" + }, + "DataPath": { + "$ref": "#/definitions/DataPathSort" + } + }, + "additionalProperties": false + }, + "PivotTableSortConfiguration": { + "type": "object", + "properties": { + "FieldSortOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotFieldSortOptions" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableSubtotalLevel": { + "type": "string", + "enum": [ + "ALL", + "CUSTOM", + "LAST" + ] + }, + "PivotTableTotalOptions": { + "type": "object", + "properties": { + "RowSubtotalOptions": { + "$ref": "#/definitions/SubtotalOptions" + }, + "ColumnSubtotalOptions": { + "$ref": "#/definitions/SubtotalOptions" + }, + "RowTotalOptions": { + "$ref": "#/definitions/PivotTotalOptions" + }, + "ColumnTotalOptions": { + "$ref": "#/definitions/PivotTotalOptions" + } + }, + "additionalProperties": false + }, + "PivotTableVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/PivotTableConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/PivotTableConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "PivotTotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TotalAggregationOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TotalAggregationOption" + }, + "maxItems": 200, + "minItems": 0 + }, + "Placement": { + "$ref": "#/definitions/TableTotalsPlacement" + }, + "ScrollStatus": { + "$ref": "#/definitions/TableTotalsScrollStatus" + }, + "CustomLabel": { + "type": "string" + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "ValueCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "MetricHeaderCellStyle": { + "$ref": "#/definitions/TableCellStyle" + } + }, + "additionalProperties": false + }, + "PredefinedHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 1 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "Columns", + "HierarchyId" + ], + "additionalProperties": false + }, + "PrimaryValueDisplayType": { + "type": "string", + "enum": [ + "HIDDEN", + "COMPARISON", + "ACTUAL" + ] + }, + "ProgressBarOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "RadarChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Color": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "RadarChartAreaStyleSettings": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "RadarChartAxesRangeScale": { + "type": "string", + "enum": [ + "AUTO", + "INDEPENDENT", + "SHARED" + ] + }, + "RadarChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/RadarChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/RadarChartSortConfiguration" + }, + "Shape": { + "$ref": "#/definitions/RadarChartShape" + }, + "BaseSeriesSettings": { + "$ref": "#/definitions/RadarChartSeriesSettings" + }, + "StartAngle": { + "type": "number", + "maximum": 360, + "minimum": -360 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "AlternateBandColorsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AlternateBandEvenColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "AlternateBandOddColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "AxesRangeScale": { + "$ref": "#/definitions/RadarChartAxesRangeScale" + } + }, + "additionalProperties": false + }, + "RadarChartFieldWells": { + "type": "object", + "properties": { + "RadarChartAggregatedFieldWells": { + "$ref": "#/definitions/RadarChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "RadarChartSeriesSettings": { + "type": "object", + "properties": { + "AreaStyleSettings": { + "$ref": "#/definitions/RadarChartAreaStyleSettings" + } + }, + "additionalProperties": false + }, + "RadarChartShape": { + "type": "string", + "enum": [ + "CIRCLE", + "POLYGON" + ] + }, + "RadarChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "RadarChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/RadarChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "RangeEndsLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "ReferenceLine": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "DataConfiguration": { + "$ref": "#/definitions/ReferenceLineDataConfiguration" + }, + "StyleConfiguration": { + "$ref": "#/definitions/ReferenceLineStyleConfiguration" + }, + "LabelConfiguration": { + "$ref": "#/definitions/ReferenceLineLabelConfiguration" + } + }, + "required": [ + "DataConfiguration" + ], + "additionalProperties": false + }, + "ReferenceLineCustomLabelConfiguration": { + "type": "object", + "properties": { + "CustomLabel": { + "type": "string", + "pattern": ".*\\S.*" + } + }, + "required": [ + "CustomLabel" + ], + "additionalProperties": false + }, + "ReferenceLineDataConfiguration": { + "type": "object", + "properties": { + "StaticConfiguration": { + "$ref": "#/definitions/ReferenceLineStaticDataConfiguration" + }, + "DynamicConfiguration": { + "$ref": "#/definitions/ReferenceLineDynamicDataConfiguration" + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "SeriesType": { + "$ref": "#/definitions/ReferenceLineSeriesType" + } + }, + "additionalProperties": false + }, + "ReferenceLineDynamicDataConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "MeasureAggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "Calculation": { + "$ref": "#/definitions/NumericalAggregationFunction" + } + }, + "required": [ + "Calculation", + "Column" + ], + "additionalProperties": false + }, + "ReferenceLineLabelConfiguration": { + "type": "object", + "properties": { + "ValueLabelConfiguration": { + "$ref": "#/definitions/ReferenceLineValueLabelConfiguration" + }, + "CustomLabelConfiguration": { + "$ref": "#/definitions/ReferenceLineCustomLabelConfiguration" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "FontColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "HorizontalPosition": { + "$ref": "#/definitions/ReferenceLineLabelHorizontalPosition" + }, + "VerticalPosition": { + "$ref": "#/definitions/ReferenceLineLabelVerticalPosition" + } + }, + "additionalProperties": false + }, + "ReferenceLineLabelHorizontalPosition": { + "type": "string", + "enum": [ + "LEFT", + "CENTER", + "RIGHT" + ] + }, + "ReferenceLineLabelVerticalPosition": { + "type": "string", + "enum": [ + "ABOVE", + "BELOW" + ] + }, + "ReferenceLinePatternType": { + "type": "string", + "enum": [ + "SOLID", + "DASHED", + "DOTTED" + ] + }, + "ReferenceLineSeriesType": { + "type": "string", + "enum": [ + "BAR", + "LINE" + ] + }, + "ReferenceLineStaticDataConfiguration": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "ReferenceLineStyleConfiguration": { + "type": "object", + "properties": { + "Pattern": { + "$ref": "#/definitions/ReferenceLinePatternType" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "ReferenceLineValueLabelConfiguration": { + "type": "object", + "properties": { + "RelativePosition": { + "$ref": "#/definitions/ReferenceLineValueLabelRelativePosition" + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ReferenceLineValueLabelRelativePosition": { + "type": "string", + "enum": [ + "BEFORE_CUSTOM_LABEL", + "AFTER_CUSTOM_LABEL" + ] + }, + "RelativeDateTimeControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "RelativeDateType": { + "type": "string", + "enum": [ + "PREVIOUS", + "THIS", + "LAST", + "NOW", + "NEXT" + ] + }, + "RelativeDatesFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AnchorDateConfiguration": { + "$ref": "#/definitions/AnchorDateConfiguration" + }, + "MinimumGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "RelativeDateType": { + "$ref": "#/definitions/RelativeDateType" + }, + "RelativeDateValue": { + "type": "number", + "default": null + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + }, + "ExcludePeriodConfiguration": { + "$ref": "#/definitions/ExcludePeriodConfiguration" + } + }, + "required": [ + "AnchorDateConfiguration", + "Column", + "FilterId", + "NullOption", + "RelativeDateType", + "TimeGranularity" + ], + "additionalProperties": false + }, + "RelativeFontSize": { + "type": "string", + "enum": [ + "EXTRA_SMALL", + "SMALL", + "MEDIUM", + "LARGE", + "EXTRA_LARGE" + ] + }, + "ResizeOption": { + "type": "string", + "enum": [ + "FIXED", + "RESPONSIVE" + ] + }, + "ResourcePermission": { + "type": "object", + "properties": { + "Principal": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Actions": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1 + } + }, + "required": [ + "Actions", + "Principal" + ], + "additionalProperties": false + }, + "ResourceStatus": { + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "CREATION_SUCCESSFUL", + "CREATION_FAILED", + "UPDATE_IN_PROGRESS", + "UPDATE_SUCCESSFUL", + "UPDATE_FAILED", + "DELETED" + ] + }, + "RollingDateConfiguration": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "RowAlternateColorOptions": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "RowAlternateColors": { + "type": "array", + "items": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "maxItems": 1, + "minItems": 0 + }, + "UsePrimaryBackgroundColor": { + "$ref": "#/definitions/WidgetStatus" + } + }, + "additionalProperties": false + }, + "SameSheetTargetVisualConfiguration": { + "type": "object", + "properties": { + "TargetVisuals": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "maxItems": 50, + "minItems": 1 + }, + "TargetVisualOptions": { + "$ref": "#/definitions/TargetVisualOptions" + } + }, + "additionalProperties": false + }, + "SankeyDiagramAggregatedFieldWells": { + "type": "object", + "properties": { + "Source": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Destination": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Weight": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "SankeyDiagramChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/SankeyDiagramFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/SankeyDiagramSortConfiguration" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + } + }, + "additionalProperties": false + }, + "SankeyDiagramFieldWells": { + "type": "object", + "properties": { + "SankeyDiagramAggregatedFieldWells": { + "$ref": "#/definitions/SankeyDiagramAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "SankeyDiagramSortConfiguration": { + "type": "object", + "properties": { + "WeightSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SourceItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "DestinationItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "SankeyDiagramVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/SankeyDiagramChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ScatterPlotCategoricallyAggregatedFieldWells": { + "type": "object", + "properties": { + "XAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "YAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Label": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ScatterPlotConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/ScatterPlotFieldWells" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "YAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "YAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "ScatterPlotFieldWells": { + "type": "object", + "properties": { + "ScatterPlotCategoricallyAggregatedFieldWells": { + "$ref": "#/definitions/ScatterPlotCategoricallyAggregatedFieldWells" + }, + "ScatterPlotUnaggregatedFieldWells": { + "$ref": "#/definitions/ScatterPlotUnaggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "ScatterPlotUnaggregatedFieldWells": { + "type": "object", + "properties": { + "XAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "YAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Label": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ScatterPlotVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/ScatterPlotConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ScrollBarOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "VisibleRange": { + "$ref": "#/definitions/VisibleRangeOptions" + } + }, + "additionalProperties": false + }, + "SecondaryValueOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "SectionAfterPageBreak": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/SectionPageBreakStatus" + } + }, + "additionalProperties": false + }, + "SectionBasedLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "PaperCanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutPaperCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "SectionBasedLayoutConfiguration": { + "type": "object", + "properties": { + "HeaderSections": { + "type": "array", + "items": { + "$ref": "#/definitions/HeaderFooterSectionConfiguration" + }, + "maxItems": 1, + "minItems": 0 + }, + "BodySections": { + "type": "array", + "items": { + "$ref": "#/definitions/BodySectionConfiguration" + }, + "maxItems": 28, + "minItems": 0 + }, + "FooterSections": { + "type": "array", + "items": { + "$ref": "#/definitions/HeaderFooterSectionConfiguration" + }, + "maxItems": 1, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutCanvasSizeOptions" + } + }, + "required": [ + "BodySections", + "CanvasSizeOptions", + "FooterSections", + "HeaderSections" + ], + "additionalProperties": false + }, + "SectionBasedLayoutPaperCanvasSizeOptions": { + "type": "object", + "properties": { + "PaperSize": { + "$ref": "#/definitions/PaperSize" + }, + "PaperOrientation": { + "$ref": "#/definitions/PaperOrientation" + }, + "PaperMargin": { + "$ref": "#/definitions/Spacing" + } + }, + "additionalProperties": false + }, + "SectionLayoutConfiguration": { + "type": "object", + "properties": { + "FreeFormLayout": { + "$ref": "#/definitions/FreeFormSectionLayoutConfiguration" + } + }, + "required": [ + "FreeFormLayout" + ], + "additionalProperties": false + }, + "SectionPageBreakConfiguration": { + "type": "object", + "properties": { + "After": { + "$ref": "#/definitions/SectionAfterPageBreak" + } + }, + "additionalProperties": false + }, + "SectionPageBreakStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "SectionStyle": { + "type": "object", + "properties": { + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Padding": { + "$ref": "#/definitions/Spacing" + } + }, + "additionalProperties": false + }, + "SelectAllValueOptions": { + "type": "string", + "enum": [ + "ALL_VALUES" + ] + }, + "SelectedFieldOptions": { + "type": "string", + "enum": [ + "ALL_FIELDS" + ] + }, + "SelectedSheetsFilterScopeConfiguration": { + "type": "object", + "properties": { + "SheetVisualScopingConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetVisualScopingConfiguration" + }, + "maxItems": 50, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "SelectedTooltipType": { + "type": "string", + "enum": [ + "BASIC", + "DETAILED" + ] + }, + "SeriesItem": { + "type": "object", + "properties": { + "FieldSeriesItem": { + "$ref": "#/definitions/FieldSeriesItem" + }, + "DataFieldSeriesItem": { + "$ref": "#/definitions/DataFieldSeriesItem" + } + }, + "additionalProperties": false + }, + "SetParameterValueConfiguration": { + "type": "object", + "properties": { + "DestinationParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "Value": { + "$ref": "#/definitions/DestinationParameterValueConfiguration" + } + }, + "required": [ + "DestinationParameterName", + "Value" + ], + "additionalProperties": false + }, + "ShapeConditionalFormat": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "required": [ + "BackgroundColor" + ], + "additionalProperties": false + }, + "Sheet": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SheetContentType": { + "type": "string", + "enum": [ + "PAGINATED", + "INTERACTIVE" + ] + }, + "SheetControlDateTimePickerType": { + "type": "string", + "enum": [ + "SINGLE_VALUED", + "DATE_RANGE" + ] + }, + "SheetControlInfoIconLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "InfoIconText": { + "type": "string", + "maxLength": 100, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SheetControlLayout": { + "type": "object", + "properties": { + "Configuration": { + "$ref": "#/definitions/SheetControlLayoutConfiguration" + } + }, + "required": [ + "Configuration" + ], + "additionalProperties": false + }, + "SheetControlLayoutConfiguration": { + "type": "object", + "properties": { + "GridLayout": { + "$ref": "#/definitions/GridLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "SheetControlListType": { + "type": "string", + "enum": [ + "MULTI_SELECT", + "SINGLE_SELECT" + ] + }, + "SheetControlSliderType": { + "type": "string", + "enum": [ + "SINGLE_POINT", + "RANGE" + ] + }, + "SheetDefinition": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "Description": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ParameterControls": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterControl" + }, + "maxItems": 200, + "minItems": 0 + }, + "FilterControls": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterControl" + }, + "maxItems": 200, + "minItems": 0 + }, + "Visuals": { + "type": "array", + "items": { + "$ref": "#/definitions/Visual" + }, + "maxItems": 50, + "minItems": 0 + }, + "TextBoxes": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetTextBox" + }, + "maxItems": 100, + "minItems": 0 + }, + "Layouts": { + "type": "array", + "items": { + "$ref": "#/definitions/Layout" + }, + "maxItems": 1, + "minItems": 1 + }, + "SheetControlLayouts": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetControlLayout" + }, + "maxItems": 1, + "minItems": 0 + }, + "ContentType": { + "$ref": "#/definitions/SheetContentType" + } + }, + "required": [ + "SheetId" + ], + "additionalProperties": false + }, + "SheetElementConfigurationOverrides": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "SheetElementRenderingRule": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "ConfigurationOverrides": { + "$ref": "#/definitions/SheetElementConfigurationOverrides" + } + }, + "required": [ + "ConfigurationOverrides", + "Expression" + ], + "additionalProperties": false + }, + "SheetTextBox": { + "type": "object", + "properties": { + "SheetTextBoxId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Content": { + "type": "string", + "maxLength": 150000, + "minLength": 0 + } + }, + "required": [ + "SheetTextBoxId" + ], + "additionalProperties": false + }, + "SheetVisualScopingConfiguration": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Scope": { + "$ref": "#/definitions/FilterVisualScope" + }, + "VisualIds": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "maxItems": 50, + "minItems": 0 + } + }, + "required": [ + "Scope", + "SheetId" + ], + "additionalProperties": false + }, + "ShortFormatText": { + "type": "object", + "properties": { + "PlainText": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "RichText": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SimpleAttributeAggregationFunction": { + "type": "string", + "enum": [ + "UNIQUE_VALUE" + ] + }, + "SimpleClusterMarker": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "SimpleNumericalAggregationFunction": { + "type": "string", + "enum": [ + "SUM", + "AVERAGE", + "MIN", + "MAX", + "COUNT", + "DISTINCT_COUNT", + "VAR", + "VARP", + "STDEV", + "STDEVP", + "MEDIAN" + ] + }, + "SimpleTotalAggregationFunction": { + "type": "string", + "enum": [ + "DEFAULT", + "SUM", + "AVERAGE", + "MIN", + "MAX", + "NONE" + ] + }, + "SliderControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "SmallMultiplesAxisPlacement": { + "type": "string", + "enum": [ + "OUTSIDE", + "INSIDE" + ] + }, + "SmallMultiplesAxisProperties": { + "type": "object", + "properties": { + "Scale": { + "$ref": "#/definitions/SmallMultiplesAxisScale" + }, + "Placement": { + "$ref": "#/definitions/SmallMultiplesAxisPlacement" + } + }, + "additionalProperties": false + }, + "SmallMultiplesAxisScale": { + "type": "string", + "enum": [ + "SHARED", + "INDEPENDENT" + ] + }, + "SmallMultiplesOptions": { + "type": "object", + "properties": { + "MaxVisibleRows": { + "type": "number", + "maximum": 10, + "minimum": 1 + }, + "MaxVisibleColumns": { + "type": "number", + "maximum": 10, + "minimum": 1 + }, + "PanelConfiguration": { + "$ref": "#/definitions/PanelConfiguration" + }, + "XAxis": { + "$ref": "#/definitions/SmallMultiplesAxisProperties" + }, + "YAxis": { + "$ref": "#/definitions/SmallMultiplesAxisProperties" + } + }, + "additionalProperties": false + }, + "SortDirection": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + }, + "Spacing": { + "type": "object", + "properties": { + "Top": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Bottom": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Left": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Right": { + "type": "string", + "description": "String based length that is composed of value and unit" + } + }, + "additionalProperties": false + }, + "SpecialValue": { + "type": "string", + "enum": [ + "EMPTY", + "NULL", + "OTHER" + ] + }, + "StringDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "StringFormatConfiguration": { + "type": "object", + "properties": { + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + }, + "NumericFormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "StringParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "StringParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/StringDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/StringValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "StringValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "string" + } + }, + "additionalProperties": false + }, + "StyledCellType": { + "type": "string", + "enum": [ + "TOTAL", + "METRIC_HEADER", + "VALUE" + ] + }, + "SubtotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "CustomLabel": { + "type": "string" + }, + "FieldLevel": { + "$ref": "#/definitions/PivotTableSubtotalLevel" + }, + "FieldLevelOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldSubtotalOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "ValueCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "MetricHeaderCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "StyleTargets": { + "type": "array", + "items": { + "$ref": "#/definitions/TableStyleTarget" + }, + "maxItems": 3, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableBorderOptions": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Thickness": { + "type": "number", + "maximum": 4, + "minimum": 1 + }, + "Style": { + "$ref": "#/definitions/TableBorderStyle" + } + }, + "additionalProperties": false + }, + "TableBorderStyle": { + "type": "string", + "enum": [ + "NONE", + "SOLID" + ] + }, + "TableCellConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TextFormat": { + "$ref": "#/definitions/TextConditionalFormat" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "TableCellImageScalingConfiguration": { + "type": "string", + "enum": [ + "FIT_TO_CELL_HEIGHT", + "FIT_TO_CELL_WIDTH", + "DO_NOT_SCALE" + ] + }, + "TableCellImageSizingConfiguration": { + "type": "object", + "properties": { + "TableCellImageScalingConfiguration": { + "$ref": "#/definitions/TableCellImageScalingConfiguration" + } + }, + "additionalProperties": false + }, + "TableCellStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "TextWrap": { + "$ref": "#/definitions/TextWrap" + }, + "HorizontalTextAlignment": { + "$ref": "#/definitions/HorizontalTextAlignment" + }, + "VerticalTextAlignment": { + "$ref": "#/definitions/VerticalTextAlignment" + }, + "BackgroundColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Height": { + "type": "number", + "maximum": 500, + "minimum": 8 + }, + "Border": { + "$ref": "#/definitions/GlobalTableBorderOptions" + } + }, + "additionalProperties": false + }, + "TableConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TableConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableConditionalFormattingOption": { + "type": "object", + "properties": { + "Cell": { + "$ref": "#/definitions/TableCellConditionalFormatting" + }, + "Row": { + "$ref": "#/definitions/TableRowConditionalFormatting" + } + }, + "additionalProperties": false + }, + "TableConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/TableFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/TableSortConfiguration" + }, + "TableOptions": { + "$ref": "#/definitions/TableOptions" + }, + "TotalOptions": { + "$ref": "#/definitions/TotalOptions" + }, + "FieldOptions": { + "$ref": "#/definitions/TableFieldOptions" + }, + "PaginatedReportOptions": { + "$ref": "#/definitions/TablePaginatedReportOptions" + }, + "TableInlineVisualizations": { + "type": "array", + "items": { + "$ref": "#/definitions/TableInlineVisualization" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableFieldCustomIconContent": { + "type": "object", + "properties": { + "Icon": { + "$ref": "#/definitions/TableFieldIconSetType" + } + }, + "additionalProperties": false + }, + "TableFieldCustomTextContent": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + } + }, + "required": [ + "FontConfiguration" + ], + "additionalProperties": false + }, + "TableFieldIconSetType": { + "type": "string", + "enum": [ + "LINK" + ] + }, + "TableFieldImageConfiguration": { + "type": "object", + "properties": { + "SizingOptions": { + "$ref": "#/definitions/TableCellImageSizingConfiguration" + } + }, + "additionalProperties": false + }, + "TableFieldLinkConfiguration": { + "type": "object", + "properties": { + "Target": { + "$ref": "#/definitions/URLTargetConfiguration" + }, + "Content": { + "$ref": "#/definitions/TableFieldLinkContentConfiguration" + } + }, + "required": [ + "Content", + "Target" + ], + "additionalProperties": false + }, + "TableFieldLinkContentConfiguration": { + "type": "object", + "properties": { + "CustomTextContent": { + "$ref": "#/definitions/TableFieldCustomTextContent" + }, + "CustomIconContent": { + "$ref": "#/definitions/TableFieldCustomIconContent" + } + }, + "additionalProperties": false + }, + "TableFieldOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "CustomLabel": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "URLStyling": { + "$ref": "#/definitions/TableFieldURLConfiguration" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "TableFieldOptions": { + "type": "object", + "properties": { + "SelectedFieldOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TableFieldOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "Order": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 200, + "minItems": 0 + }, + "PinnedFieldOptions": { + "$ref": "#/definitions/TablePinnedFieldOptions" + } + }, + "additionalProperties": false + }, + "TableFieldURLConfiguration": { + "type": "object", + "properties": { + "LinkConfiguration": { + "$ref": "#/definitions/TableFieldLinkConfiguration" + }, + "ImageConfiguration": { + "$ref": "#/definitions/TableFieldImageConfiguration" + } + }, + "additionalProperties": false + }, + "TableFieldWells": { + "type": "object", + "properties": { + "TableAggregatedFieldWells": { + "$ref": "#/definitions/TableAggregatedFieldWells" + }, + "TableUnaggregatedFieldWells": { + "$ref": "#/definitions/TableUnaggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "TableInlineVisualization": { + "type": "object", + "properties": { + "DataBars": { + "$ref": "#/definitions/DataBarsOptions" + } + }, + "additionalProperties": false + }, + "TableOptions": { + "type": "object", + "properties": { + "Orientation": { + "$ref": "#/definitions/TableOrientation" + }, + "HeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "CellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowAlternateColorOptions": { + "$ref": "#/definitions/RowAlternateColorOptions" + } + }, + "additionalProperties": false + }, + "TableOrientation": { + "type": "string", + "enum": [ + "VERTICAL", + "HORIZONTAL" + ] + }, + "TablePaginatedReportOptions": { + "type": "object", + "properties": { + "VerticalOverflowVisibility": { + "$ref": "#/definitions/Visibility" + }, + "OverflowColumnHeaderVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TablePinnedFieldOptions": { + "type": "object", + "properties": { + "PinnedLeftFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 201, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableRowConditionalFormatting": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "TableSideBorderOptions": { + "type": "object", + "properties": { + "InnerVertical": { + "$ref": "#/definitions/TableBorderOptions" + }, + "InnerHorizontal": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Left": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Right": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Top": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Bottom": { + "$ref": "#/definitions/TableBorderOptions" + } + }, + "additionalProperties": false + }, + "TableSortConfiguration": { + "type": "object", + "properties": { + "RowSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "PaginationConfiguration": { + "$ref": "#/definitions/PaginationConfiguration" + } + }, + "additionalProperties": false + }, + "TableStyleTarget": { + "type": "object", + "properties": { + "CellType": { + "$ref": "#/definitions/StyledCellType" + } + }, + "required": [ + "CellType" + ], + "additionalProperties": false + }, + "TableTotalsPlacement": { + "type": "string", + "enum": [ + "START", + "END", + "AUTO" + ] + }, + "TableTotalsScrollStatus": { + "type": "string", + "enum": [ + "PINNED", + "SCROLLED" + ] + }, + "TableUnaggregatedFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/UnaggregatedField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/TableConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/TableConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TargetVisualOptions": { + "type": "string", + "enum": [ + "ALL_VISUALS" + ] + }, + "TextAreaControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "PlaceholderOptions": { + "$ref": "#/definitions/TextControlPlaceholderOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "TextConditionalFormat": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "TextControlPlaceholderOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TextFieldControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "PlaceholderOptions": { + "$ref": "#/definitions/TextControlPlaceholderOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "TextWrap": { + "type": "string", + "enum": [ + "NONE", + "WRAP" + ] + }, + "ThousandSeparatorOptions": { + "type": "object", + "properties": { + "Symbol": { + "$ref": "#/definitions/NumericSeparatorSymbol" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TimeBasedForecastProperties": { + "type": "object", + "properties": { + "PeriodsForward": { + "type": "number", + "maximum": 1000, + "minimum": 1 + }, + "PeriodsBackward": { + "type": "number", + "maximum": 1000, + "minimum": 0 + }, + "UpperBoundary": { + "type": "number", + "default": null + }, + "LowerBoundary": { + "type": "number", + "default": null + }, + "PredictionInterval": { + "type": "number", + "maximum": 95, + "minimum": 50 + }, + "Seasonality": { + "type": "number", + "maximum": 180, + "minimum": 1 + } + }, + "additionalProperties": false + }, + "TimeEqualityFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "string", + "format": "date-time" + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "FilterId" + ], + "additionalProperties": false + }, + "TimeGranularity": { + "type": "string", + "enum": [ + "YEAR", + "QUARTER", + "MONTH", + "WEEK", + "DAY", + "HOUR", + "MINUTE", + "SECOND", + "MILLISECOND" + ] + }, + "TimeRangeDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "RangeMinimum": { + "type": "string", + "format": "date-time" + }, + "RangeMaximum": { + "type": "string", + "format": "date-time" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "RangeMaximum", + "RangeMinimum", + "TimeGranularity" + ], + "additionalProperties": false + }, + "TimeRangeFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "IncludeMinimum": { + "type": "boolean", + "default": null + }, + "IncludeMaximum": { + "type": "boolean", + "default": null + }, + "RangeMinimumValue": { + "$ref": "#/definitions/TimeRangeFilterValue" + }, + "RangeMaximumValue": { + "$ref": "#/definitions/TimeRangeFilterValue" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + }, + "ExcludePeriodConfiguration": { + "$ref": "#/definitions/ExcludePeriodConfiguration" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "FilterId", + "NullOption" + ], + "additionalProperties": false + }, + "TimeRangeFilterValue": { + "type": "object", + "properties": { + "StaticValue": { + "type": "string", + "format": "date-time" + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + }, + "Parameter": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "TooltipItem": { + "type": "object", + "properties": { + "FieldTooltipItem": { + "$ref": "#/definitions/FieldTooltipItem" + }, + "ColumnTooltipItem": { + "$ref": "#/definitions/ColumnTooltipItem" + } + }, + "additionalProperties": false + }, + "TooltipOptions": { + "type": "object", + "properties": { + "TooltipVisibility": { + "$ref": "#/definitions/Visibility" + }, + "SelectedTooltipType": { + "$ref": "#/definitions/SelectedTooltipType" + }, + "FieldBasedTooltip": { + "$ref": "#/definitions/FieldBasedTooltip" + } + }, + "additionalProperties": false + }, + "TooltipTitleType": { + "type": "string", + "enum": [ + "NONE", + "PRIMARY_VALUE" + ] + }, + "TopBottomComputationType": { + "type": "string", + "enum": [ + "TOP", + "BOTTOM" + ] + }, + "TopBottomFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Limit": { + "type": "number", + "default": null + }, + "AggregationSortConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/AggregationSortConfiguration" + }, + "maxItems": 100, + "minItems": 0 + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "required": [ + "AggregationSortConfigurations", + "Column", + "FilterId" + ], + "additionalProperties": false + }, + "TopBottomMoversComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "MoverSize": { + "type": "number", + "default": 0, + "maximum": 20, + "minimum": 1 + }, + "SortOrder": { + "$ref": "#/definitions/TopBottomSortOrder" + }, + "Type": { + "$ref": "#/definitions/TopBottomComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "TopBottomRankedComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "ResultSize": { + "type": "number", + "default": 0, + "maximum": 20, + "minimum": 1 + }, + "Type": { + "$ref": "#/definitions/TopBottomComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "TopBottomSortOrder": { + "type": "string", + "enum": [ + "PERCENT_DIFFERENCE", + "ABSOLUTE_DIFFERENCE" + ] + }, + "TotalAggregationComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "TotalAggregationFunction": { + "type": "object", + "properties": { + "SimpleTotalAggregationFunction": { + "$ref": "#/definitions/SimpleTotalAggregationFunction" + } + }, + "additionalProperties": false + }, + "TotalAggregationOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TotalAggregationFunction": { + "$ref": "#/definitions/TotalAggregationFunction" + } + }, + "required": [ + "FieldId", + "TotalAggregationFunction" + ], + "additionalProperties": false + }, + "TotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TotalAggregationOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TotalAggregationOption" + }, + "maxItems": 200, + "minItems": 0 + }, + "Placement": { + "$ref": "#/definitions/TableTotalsPlacement" + }, + "ScrollStatus": { + "$ref": "#/definitions/TableTotalsScrollStatus" + }, + "CustomLabel": { + "type": "string" + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + } + }, + "additionalProperties": false + }, + "TreeMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Groups": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Sizes": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TreeMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/TreeMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/TreeMapSortConfiguration" + }, + "GroupLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SizeLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorScale": { + "$ref": "#/definitions/ColorScale" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + } + }, + "additionalProperties": false + }, + "TreeMapFieldWells": { + "type": "object", + "properties": { + "TreeMapAggregatedFieldWells": { + "$ref": "#/definitions/TreeMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "TreeMapSortConfiguration": { + "type": "object", + "properties": { + "TreeMapSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "TreeMapGroupItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "TreeMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/TreeMapConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "TrendArrowOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "URLTargetConfiguration": { + "type": "string", + "enum": [ + "NEW_TAB", + "NEW_WINDOW", + "SAME_TAB" + ] + }, + "UnaggregatedField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "FormatConfiguration": { + "$ref": "#/definitions/FormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "UniqueValuesComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "ValidationStrategy": { + "type": "object", + "properties": { + "Mode": { + "$ref": "#/definitions/ValidationStrategyMode" + } + }, + "required": [ + "Mode" + ], + "additionalProperties": false + }, + "ValidationStrategyMode": { + "type": "string", + "enum": [ + "STRICT", + "LENIENT" + ] + }, + "ValueWhenUnsetOption": { + "type": "string", + "enum": [ + "RECOMMENDED_VALUE", + "NULL" + ] + }, + "VerticalTextAlignment": { + "type": "string", + "enum": [ + "TOP", + "MIDDLE", + "BOTTOM", + "AUTO" + ] + }, + "Visibility": { + "type": "string", + "enum": [ + "HIDDEN", + "VISIBLE" + ] + }, + "VisibleRangeOptions": { + "type": "object", + "properties": { + "PercentRange": { + "$ref": "#/definitions/PercentVisibleRange" + } + }, + "additionalProperties": false + }, + "Visual": { + "type": "object", + "properties": { + "TableVisual": { + "$ref": "#/definitions/TableVisual" + }, + "PivotTableVisual": { + "$ref": "#/definitions/PivotTableVisual" + }, + "BarChartVisual": { + "$ref": "#/definitions/BarChartVisual" + }, + "KPIVisual": { + "$ref": "#/definitions/KPIVisual" + }, + "PieChartVisual": { + "$ref": "#/definitions/PieChartVisual" + }, + "GaugeChartVisual": { + "$ref": "#/definitions/GaugeChartVisual" + }, + "LineChartVisual": { + "$ref": "#/definitions/LineChartVisual" + }, + "HeatMapVisual": { + "$ref": "#/definitions/HeatMapVisual" + }, + "TreeMapVisual": { + "$ref": "#/definitions/TreeMapVisual" + }, + "GeospatialMapVisual": { + "$ref": "#/definitions/GeospatialMapVisual" + }, + "FilledMapVisual": { + "$ref": "#/definitions/FilledMapVisual" + }, + "FunnelChartVisual": { + "$ref": "#/definitions/FunnelChartVisual" + }, + "ScatterPlotVisual": { + "$ref": "#/definitions/ScatterPlotVisual" + }, + "ComboChartVisual": { + "$ref": "#/definitions/ComboChartVisual" + }, + "BoxPlotVisual": { + "$ref": "#/definitions/BoxPlotVisual" + }, + "WaterfallVisual": { + "$ref": "#/definitions/WaterfallVisual" + }, + "HistogramVisual": { + "$ref": "#/definitions/HistogramVisual" + }, + "WordCloudVisual": { + "$ref": "#/definitions/WordCloudVisual" + }, + "InsightVisual": { + "$ref": "#/definitions/InsightVisual" + }, + "SankeyDiagramVisual": { + "$ref": "#/definitions/SankeyDiagramVisual" + }, + "CustomContentVisual": { + "$ref": "#/definitions/CustomContentVisual" + }, + "EmptyVisual": { + "$ref": "#/definitions/EmptyVisual" + }, + "RadarChartVisual": { + "$ref": "#/definitions/RadarChartVisual" + } + }, + "additionalProperties": false + }, + "VisualCustomAction": { + "type": "object", + "properties": { + "CustomActionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "Trigger": { + "$ref": "#/definitions/VisualCustomActionTrigger" + }, + "ActionOperations": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomActionOperation" + }, + "maxItems": 2, + "minItems": 1 + } + }, + "required": [ + "ActionOperations", + "CustomActionId", + "Name", + "Trigger" + ], + "additionalProperties": false + }, + "VisualCustomActionOperation": { + "type": "object", + "properties": { + "FilterOperation": { + "$ref": "#/definitions/CustomActionFilterOperation" + }, + "NavigationOperation": { + "$ref": "#/definitions/CustomActionNavigationOperation" + }, + "URLOperation": { + "$ref": "#/definitions/CustomActionURLOperation" + }, + "SetParametersOperation": { + "$ref": "#/definitions/CustomActionSetParametersOperation" + } + }, + "additionalProperties": false + }, + "VisualCustomActionTrigger": { + "type": "string", + "enum": [ + "DATA_POINT_CLICK", + "DATA_POINT_MENU" + ] + }, + "VisualPalette": { + "type": "object", + "properties": { + "ChartColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "ColorMap": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathColor" + }, + "maxItems": 5000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "VisualSubtitleLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FormatText": { + "$ref": "#/definitions/LongFormatText" + } + }, + "additionalProperties": false + }, + "VisualTitleLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FormatText": { + "$ref": "#/definitions/ShortFormatText" + } + }, + "additionalProperties": false + }, + "WaterfallChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Breakdowns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WaterfallChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/WaterfallChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/WaterfallChartSortConfiguration" + }, + "WaterfallChartOptions": { + "$ref": "#/definitions/WaterfallChartOptions" + }, + "CategoryAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "CategoryAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "WaterfallChartFieldWells": { + "type": "object", + "properties": { + "WaterfallChartAggregatedFieldWells": { + "$ref": "#/definitions/WaterfallChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "WaterfallChartOptions": { + "type": "object", + "properties": { + "TotalBarLabel": { + "type": "string" + } + }, + "additionalProperties": false + }, + "WaterfallChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "BreakdownItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "WaterfallVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/WaterfallChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "WhatIfPointScenario": { + "type": "object", + "properties": { + "Date": { + "type": "string", + "format": "date-time" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Date", + "Value" + ], + "additionalProperties": false + }, + "WhatIfRangeScenario": { + "type": "object", + "properties": { + "StartDate": { + "type": "string", + "format": "date-time" + }, + "EndDate": { + "type": "string", + "format": "date-time" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "EndDate", + "StartDate", + "Value" + ], + "additionalProperties": false + }, + "WidgetStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "WordCloudAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 10, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WordCloudChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/WordCloudFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/WordCloudSortConfiguration" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "WordCloudOptions": { + "$ref": "#/definitions/WordCloudOptions" + } + }, + "additionalProperties": false + }, + "WordCloudCloudLayout": { + "type": "string", + "enum": [ + "FLUID", + "NORMAL" + ] + }, + "WordCloudFieldWells": { + "type": "object", + "properties": { + "WordCloudAggregatedFieldWells": { + "$ref": "#/definitions/WordCloudAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "WordCloudOptions": { + "type": "object", + "properties": { + "WordOrientation": { + "$ref": "#/definitions/WordCloudWordOrientation" + }, + "WordScaling": { + "$ref": "#/definitions/WordCloudWordScaling" + }, + "CloudLayout": { + "$ref": "#/definitions/WordCloudCloudLayout" + }, + "WordCasing": { + "$ref": "#/definitions/WordCloudWordCasing" + }, + "WordPadding": { + "$ref": "#/definitions/WordCloudWordPadding" + }, + "MaximumStringLength": { + "type": "number", + "maximum": 100, + "minimum": 1 + } + }, + "additionalProperties": false + }, + "WordCloudSortConfiguration": { + "type": "object", + "properties": { + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WordCloudVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/WordCloudChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "WordCloudWordCasing": { + "type": "string", + "enum": [ + "LOWER_CASE", + "EXISTING_CASE" + ] + }, + "WordCloudWordOrientation": { + "type": "string", + "enum": [ + "HORIZONTAL", + "HORIZONTAL_AND_VERTICAL" + ] + }, + "WordCloudWordPadding": { + "type": "string", + "enum": [ + "NONE", + "SMALL", + "MEDIUM", + "LARGE" + ] + }, + "WordCloudWordScaling": { + "type": "string", + "enum": [ + "EMPHASIZE", + "NORMAL" + ] + } + }, + "properties": { + "AnalysisId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Arn": { + "type": "string" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "DataSetArns": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 100, + "minItems": 0 + }, + "Definition": { + "$ref": "#/definitions/AnalysisDefinition" + }, + "Errors": { + "type": "array", + "items": { + "$ref": "#/definitions/AnalysisError" + }, + "minItems": 1 + }, + "LastUpdatedTime": { + "type": "string", + "format": "date-time" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Parameters": { + "$ref": "#/definitions/Parameters" + }, + "Permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePermission" + }, + "maxItems": 64, + "minItems": 1 + }, + "Sheets": { + "type": "array", + "items": { + "$ref": "#/definitions/Sheet" + }, + "maxItems": 20, + "minItems": 0 + }, + "SourceEntity": { + "$ref": "#/definitions/AnalysisSourceEntity" + }, + "Status": { + "$ref": "#/definitions/ResourceStatus" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1 + }, + "ThemeArn": { + "type": "string" + }, + "ValidationStrategy": { + "$ref": "#/definitions/ValidationStrategy" + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/DataSetArns", + "/properties/LastUpdatedTime" + ], + "writeOnlyProperties": [ + "/properties/Definition", + "/properties/Parameters", + "/properties/SourceEntity", + "/properties/Status", + "/properties/ValidationStrategy" + ], + "createOnlyProperties": [ + "/properties/AnalysisId", + "/properties/AwsAccountId" + ], + "primaryIdentifier": [ + "/properties/AnalysisId", + "/properties/AwsAccountId" + ], + "handlers": { + "create": { + "permissions": [ + "quicksight:DescribeAnalysis", + "quicksight:DescribeAnalysisPermissions", + "quicksight:CreateAnalysis", + "quicksight:DescribeTemplate", + "quicksight:DescribeTheme", + "quicksight:PassDataSet", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeAnalysis", + "quicksight:DescribeAnalysisPermissions", + "quicksight:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "quicksight:DescribeAnalysis", + "quicksight:DescribeAnalysisPermissions", + "quicksight:UpdateAnalysis", + "quicksight:UpdateAnalysisPermissions", + "quicksight:DescribeTemplate", + "quicksight:DescribeTheme", + "quicksight:PassDataSet", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "quicksight:DescribeAnalysis", + "quicksight:DeleteAnalysis" + ] + }, + "list": { + "permissions": [ + "quicksight:ListAnalyses" + ], + "handlerSchema": { + "properties": { + "AwsAccountId": { + "$ref": "resource-schema.json#/properties/AwsAccountId" + } + }, + "required": [ + "AwsAccountId" + ] + } + } + }, + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-quicksight", + "required": [ + "AwsAccountId", + "AnalysisId", + "Name" + ] +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/dashboard.json b/internal/aws/cfn/schemas/aws/quicksight/dashboard.json new file mode 100644 index 00000000..96a24f7f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/dashboard.json @@ -0,0 +1,11299 @@ +{ + "typeName": "AWS::QuickSight::Dashboard", + "description": "Definition of the AWS::QuickSight::Dashboard Resource Type.", + "definitions": { + "AdHocFilteringOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "AggregationFunction": { + "type": "object", + "properties": { + "NumericalAggregationFunction": { + "$ref": "#/definitions/NumericalAggregationFunction" + }, + "CategoricalAggregationFunction": { + "$ref": "#/definitions/CategoricalAggregationFunction" + }, + "DateAggregationFunction": { + "$ref": "#/definitions/DateAggregationFunction" + }, + "AttributeAggregationFunction": { + "$ref": "#/definitions/AttributeAggregationFunction" + } + }, + "additionalProperties": false + }, + "AggregationSortConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "SortDirection": { + "$ref": "#/definitions/SortDirection" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Column", + "SortDirection" + ], + "additionalProperties": false + }, + "AllSheetsFilterScopeConfiguration": { + "type": "object", + "additionalProperties": false + }, + "AnalysisDefaults": { + "type": "object", + "properties": { + "DefaultNewSheetConfiguration": { + "$ref": "#/definitions/DefaultNewSheetConfiguration" + } + }, + "required": [ + "DefaultNewSheetConfiguration" + ], + "additionalProperties": false + }, + "AnchorDateConfiguration": { + "type": "object", + "properties": { + "AnchorOption": { + "$ref": "#/definitions/AnchorOption" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "AnchorOption": { + "type": "string", + "enum": [ + "NOW" + ] + }, + "ArcAxisConfiguration": { + "type": "object", + "properties": { + "Range": { + "$ref": "#/definitions/ArcAxisDisplayRange" + }, + "ReserveRange": { + "type": "number", + "default": 0 + } + }, + "additionalProperties": false + }, + "ArcAxisDisplayRange": { + "type": "object", + "properties": { + "Min": { + "type": "number", + "default": null + }, + "Max": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "ArcConfiguration": { + "type": "object", + "properties": { + "ArcAngle": { + "type": "number", + "default": null + }, + "ArcThickness": { + "$ref": "#/definitions/ArcThicknessOptions" + } + }, + "additionalProperties": false + }, + "ArcOptions": { + "type": "object", + "properties": { + "ArcThickness": { + "$ref": "#/definitions/ArcThickness" + } + }, + "additionalProperties": false + }, + "ArcThickness": { + "type": "string", + "enum": [ + "SMALL", + "MEDIUM", + "LARGE", + "WHOLE" + ] + }, + "ArcThicknessOptions": { + "type": "string", + "enum": [ + "SMALL", + "MEDIUM", + "LARGE" + ] + }, + "AssetOptions": { + "type": "object", + "properties": { + "Timezone": { + "type": "string" + }, + "WeekStart": { + "$ref": "#/definitions/DayOfTheWeek" + } + }, + "additionalProperties": false + }, + "AttributeAggregationFunction": { + "type": "object", + "properties": { + "SimpleAttributeAggregation": { + "$ref": "#/definitions/SimpleAttributeAggregationFunction" + }, + "ValueForMultipleValues": { + "type": "string" + } + }, + "additionalProperties": false + }, + "AxisBinding": { + "type": "string", + "enum": [ + "PRIMARY_YAXIS", + "SECONDARY_YAXIS" + ] + }, + "AxisDataOptions": { + "type": "object", + "properties": { + "NumericAxisOptions": { + "$ref": "#/definitions/NumericAxisOptions" + }, + "DateAxisOptions": { + "$ref": "#/definitions/DateAxisOptions" + } + }, + "additionalProperties": false + }, + "AxisDisplayDataDrivenRange": { + "type": "object", + "additionalProperties": false + }, + "AxisDisplayMinMaxRange": { + "type": "object", + "properties": { + "Minimum": { + "type": "number", + "default": null + }, + "Maximum": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisDisplayOptions": { + "type": "object", + "properties": { + "TickLabelOptions": { + "$ref": "#/definitions/AxisTickLabelOptions" + }, + "AxisLineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "GridLineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "DataOptions": { + "$ref": "#/definitions/AxisDataOptions" + }, + "ScrollbarOptions": { + "$ref": "#/definitions/ScrollBarOptions" + }, + "AxisOffset": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "AxisDisplayRange": { + "type": "object", + "properties": { + "MinMax": { + "$ref": "#/definitions/AxisDisplayMinMaxRange" + }, + "DataDriven": { + "$ref": "#/definitions/AxisDisplayDataDrivenRange" + } + }, + "additionalProperties": false + }, + "AxisLabelOptions": { + "type": "object", + "properties": { + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "CustomLabel": { + "type": "string" + }, + "ApplyTo": { + "$ref": "#/definitions/AxisLabelReferenceOptions" + } + }, + "additionalProperties": false + }, + "AxisLabelReferenceOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "AxisLinearScale": { + "type": "object", + "properties": { + "StepCount": { + "type": "number", + "default": null + }, + "StepSize": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisLogarithmicScale": { + "type": "object", + "properties": { + "Base": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisScale": { + "type": "object", + "properties": { + "Linear": { + "$ref": "#/definitions/AxisLinearScale" + }, + "Logarithmic": { + "$ref": "#/definitions/AxisLogarithmicScale" + } + }, + "additionalProperties": false + }, + "AxisTickLabelOptions": { + "type": "object", + "properties": { + "LabelOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "RotationAngle": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "BarChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "BarChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/BarChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/BarChartSortConfiguration" + }, + "Orientation": { + "$ref": "#/definitions/BarChartOrientation" + }, + "BarsArrangement": { + "$ref": "#/definitions/BarsArrangement" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "BarChartFieldWells": { + "type": "object", + "properties": { + "BarChartAggregatedFieldWells": { + "$ref": "#/definitions/BarChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "BarChartOrientation": { + "type": "string", + "enum": [ + "HORIZONTAL", + "VERTICAL" + ] + }, + "BarChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "BarChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/BarChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "BarsArrangement": { + "type": "string", + "enum": [ + "CLUSTERED", + "STACKED", + "STACKED_PERCENT" + ] + }, + "BaseMapStyleType": { + "type": "string", + "enum": [ + "LIGHT_GRAY", + "DARK_GRAY", + "STREET", + "IMAGERY" + ] + }, + "BinCountOptions": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "BinWidthOptions": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "minimum": 0 + }, + "BinCountLimit": { + "type": "number", + "maximum": 1000, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "BodySectionConfiguration": { + "type": "object", + "properties": { + "SectionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Content": { + "$ref": "#/definitions/BodySectionContent" + }, + "Style": { + "$ref": "#/definitions/SectionStyle" + }, + "PageBreakConfiguration": { + "$ref": "#/definitions/SectionPageBreakConfiguration" + } + }, + "required": [ + "Content", + "SectionId" + ], + "additionalProperties": false + }, + "BodySectionContent": { + "type": "object", + "properties": { + "Layout": { + "$ref": "#/definitions/SectionLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "BoxPlotAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 5, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "BoxPlotChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/BoxPlotFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/BoxPlotSortConfiguration" + }, + "BoxPlotOptions": { + "$ref": "#/definitions/BoxPlotOptions" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "BoxPlotFieldWells": { + "type": "object", + "properties": { + "BoxPlotAggregatedFieldWells": { + "$ref": "#/definitions/BoxPlotAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "BoxPlotFillStyle": { + "type": "string", + "enum": [ + "SOLID", + "TRANSPARENT" + ] + }, + "BoxPlotOptions": { + "type": "object", + "properties": { + "StyleOptions": { + "$ref": "#/definitions/BoxPlotStyleOptions" + }, + "OutlierVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AllDataPointsVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "BoxPlotSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "PaginationConfiguration": { + "$ref": "#/definitions/PaginationConfiguration" + } + }, + "additionalProperties": false + }, + "BoxPlotStyleOptions": { + "type": "object", + "properties": { + "FillStyle": { + "$ref": "#/definitions/BoxPlotFillStyle" + } + }, + "additionalProperties": false + }, + "BoxPlotVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/BoxPlotChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "CalculatedField": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Name": { + "type": "string", + "maxLength": 127, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 32000, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "Expression", + "Name" + ], + "additionalProperties": false + }, + "CalculatedMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "required": [ + "Expression", + "FieldId" + ], + "additionalProperties": false + }, + "CascadingControlConfiguration": { + "type": "object", + "properties": { + "SourceControls": { + "type": "array", + "items": { + "$ref": "#/definitions/CascadingControlSource" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "CascadingControlSource": { + "type": "object", + "properties": { + "SourceSheetControlId": { + "type": "string" + }, + "ColumnToMatch": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "CategoricalAggregationFunction": { + "type": "string", + "enum": [ + "COUNT", + "DISTINCT_COUNT" + ] + }, + "CategoricalDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "CategoricalMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/CategoricalAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "CategoryDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + } + }, + "required": [ + "CategoryValues", + "Column" + ], + "additionalProperties": false + }, + "CategoryFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Configuration": { + "$ref": "#/definitions/CategoryFilterConfiguration" + } + }, + "required": [ + "Column", + "Configuration", + "FilterId" + ], + "additionalProperties": false + }, + "CategoryFilterConfiguration": { + "type": "object", + "properties": { + "FilterListConfiguration": { + "$ref": "#/definitions/FilterListConfiguration" + }, + "CustomFilterListConfiguration": { + "$ref": "#/definitions/CustomFilterListConfiguration" + }, + "CustomFilterConfiguration": { + "$ref": "#/definitions/CustomFilterConfiguration" + } + }, + "additionalProperties": false + }, + "CategoryFilterMatchOperator": { + "type": "string", + "enum": [ + "EQUALS", + "DOES_NOT_EQUAL", + "CONTAINS", + "DOES_NOT_CONTAIN", + "STARTS_WITH", + "ENDS_WITH" + ] + }, + "CategoryFilterSelectAllOptions": { + "type": "string", + "enum": [ + "FILTER_ALL_VALUES" + ] + }, + "ChartAxisLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "SortIconVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AxisLabelOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/AxisLabelOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ClusterMarker": { + "type": "object", + "properties": { + "SimpleClusterMarker": { + "$ref": "#/definitions/SimpleClusterMarker" + } + }, + "additionalProperties": false + }, + "ClusterMarkerConfiguration": { + "type": "object", + "properties": { + "ClusterMarker": { + "$ref": "#/definitions/ClusterMarker" + } + }, + "additionalProperties": false + }, + "ColorFillType": { + "type": "string", + "enum": [ + "DISCRETE", + "GRADIENT" + ] + }, + "ColorScale": { + "type": "object", + "properties": { + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DataColor" + }, + "maxItems": 3, + "minItems": 2 + }, + "ColorFillType": { + "$ref": "#/definitions/ColorFillType" + }, + "NullValueColor": { + "$ref": "#/definitions/DataColor" + } + }, + "required": [ + "ColorFillType", + "Colors" + ], + "additionalProperties": false + }, + "ColorsConfiguration": { + "type": "object", + "properties": { + "CustomColors": { + "type": "array", + "items": { + "$ref": "#/definitions/CustomColor" + }, + "maxItems": 50, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ColumnConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "FormatConfiguration": { + "$ref": "#/definitions/FormatConfiguration" + }, + "Role": { + "$ref": "#/definitions/ColumnRole" + }, + "ColorsConfiguration": { + "$ref": "#/definitions/ColorsConfiguration" + } + }, + "required": [ + "Column" + ], + "additionalProperties": false + }, + "ColumnHierarchy": { + "type": "object", + "properties": { + "ExplicitHierarchy": { + "$ref": "#/definitions/ExplicitHierarchy" + }, + "DateTimeHierarchy": { + "$ref": "#/definitions/DateTimeHierarchy" + }, + "PredefinedHierarchy": { + "$ref": "#/definitions/PredefinedHierarchy" + } + }, + "additionalProperties": false + }, + "ColumnIdentifier": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ColumnName": { + "type": "string", + "maxLength": 127, + "minLength": 1 + } + }, + "required": [ + "ColumnName", + "DataSetIdentifier" + ], + "additionalProperties": false + }, + "ColumnRole": { + "type": "string", + "enum": [ + "DIMENSION", + "MEASURE" + ] + }, + "ColumnSort": { + "type": "object", + "properties": { + "SortBy": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Direction": { + "$ref": "#/definitions/SortDirection" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Direction", + "SortBy" + ], + "additionalProperties": false + }, + "ColumnTooltipItem": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Label": { + "type": "string" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Aggregation": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Column" + ], + "additionalProperties": false + }, + "ComboChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "BarValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "LineValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ComboChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/ComboChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/ComboChartSortConfiguration" + }, + "BarsArrangement": { + "$ref": "#/definitions/BarsArrangement" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SecondaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "SecondaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "BarDataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "LineDataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "ComboChartFieldWells": { + "type": "object", + "properties": { + "ComboChartAggregatedFieldWells": { + "$ref": "#/definitions/ComboChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "ComboChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "ComboChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/ComboChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ComparisonConfiguration": { + "type": "object", + "properties": { + "ComparisonMethod": { + "$ref": "#/definitions/ComparisonMethod" + }, + "ComparisonFormat": { + "$ref": "#/definitions/ComparisonFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ComparisonFormatConfiguration": { + "type": "object", + "properties": { + "NumberDisplayFormatConfiguration": { + "$ref": "#/definitions/NumberDisplayFormatConfiguration" + }, + "PercentageDisplayFormatConfiguration": { + "$ref": "#/definitions/PercentageDisplayFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ComparisonMethod": { + "type": "string", + "enum": [ + "DIFFERENCE", + "PERCENT_DIFFERENCE", + "PERCENT" + ] + }, + "Computation": { + "type": "object", + "properties": { + "TopBottomRanked": { + "$ref": "#/definitions/TopBottomRankedComputation" + }, + "TopBottomMovers": { + "$ref": "#/definitions/TopBottomMoversComputation" + }, + "TotalAggregation": { + "$ref": "#/definitions/TotalAggregationComputation" + }, + "MaximumMinimum": { + "$ref": "#/definitions/MaximumMinimumComputation" + }, + "MetricComparison": { + "$ref": "#/definitions/MetricComparisonComputation" + }, + "PeriodOverPeriod": { + "$ref": "#/definitions/PeriodOverPeriodComputation" + }, + "PeriodToDate": { + "$ref": "#/definitions/PeriodToDateComputation" + }, + "GrowthRate": { + "$ref": "#/definitions/GrowthRateComputation" + }, + "UniqueValues": { + "$ref": "#/definitions/UniqueValuesComputation" + }, + "Forecast": { + "$ref": "#/definitions/ForecastComputation" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingColor": { + "type": "object", + "properties": { + "Solid": { + "$ref": "#/definitions/ConditionalFormattingSolidColor" + }, + "Gradient": { + "$ref": "#/definitions/ConditionalFormattingGradientColor" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingCustomIconCondition": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "IconOptions": { + "$ref": "#/definitions/ConditionalFormattingCustomIconOptions" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DisplayConfiguration": { + "$ref": "#/definitions/ConditionalFormattingIconDisplayConfiguration" + } + }, + "required": [ + "Expression", + "IconOptions" + ], + "additionalProperties": false + }, + "ConditionalFormattingCustomIconOptions": { + "type": "object", + "properties": { + "Icon": { + "$ref": "#/definitions/Icon" + }, + "UnicodeIcon": { + "type": "string", + "pattern": "^[^\\u0000-\\u00FF]$" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingGradientColor": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "Color": { + "$ref": "#/definitions/GradientColor" + } + }, + "required": [ + "Color", + "Expression" + ], + "additionalProperties": false + }, + "ConditionalFormattingIcon": { + "type": "object", + "properties": { + "IconSet": { + "$ref": "#/definitions/ConditionalFormattingIconSet" + }, + "CustomCondition": { + "$ref": "#/definitions/ConditionalFormattingCustomIconCondition" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingIconDisplayConfiguration": { + "type": "object", + "properties": { + "IconDisplayOption": { + "$ref": "#/definitions/ConditionalFormattingIconDisplayOption" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingIconDisplayOption": { + "type": "string", + "enum": [ + "ICON_ONLY" + ] + }, + "ConditionalFormattingIconSet": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "IconSetType": { + "$ref": "#/definitions/ConditionalFormattingIconSetType" + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "ConditionalFormattingIconSetType": { + "type": "string", + "enum": [ + "PLUS_MINUS", + "CHECK_X", + "THREE_COLOR_ARROW", + "THREE_GRAY_ARROW", + "CARET_UP_MINUS_DOWN", + "THREE_SHAPE", + "THREE_CIRCLE", + "FLAGS", + "BARS", + "FOUR_COLOR_ARROW", + "FOUR_GRAY_ARROW" + ] + }, + "ConditionalFormattingSolidColor": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "ContributionAnalysisDefault": { + "type": "object", + "properties": { + "MeasureFieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "ContributorDimensions": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 4, + "minItems": 1 + } + }, + "required": [ + "ContributorDimensions", + "MeasureFieldId" + ], + "additionalProperties": false + }, + "CrossDatasetTypes": { + "type": "string", + "enum": [ + "ALL_DATASETS", + "SINGLE_DATASET" + ] + }, + "CurrencyDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "Symbol": { + "type": "string", + "pattern": "[A-Z]{3}" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NumberScale": { + "$ref": "#/definitions/NumberScale" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "CustomActionFilterOperation": { + "type": "object", + "properties": { + "SelectedFieldsConfiguration": { + "$ref": "#/definitions/FilterOperationSelectedFieldsConfiguration" + }, + "TargetVisualsConfiguration": { + "$ref": "#/definitions/FilterOperationTargetVisualsConfiguration" + } + }, + "required": [ + "SelectedFieldsConfiguration", + "TargetVisualsConfiguration" + ], + "additionalProperties": false + }, + "CustomActionNavigationOperation": { + "type": "object", + "properties": { + "LocalNavigationConfiguration": { + "$ref": "#/definitions/LocalNavigationConfiguration" + } + }, + "additionalProperties": false + }, + "CustomActionSetParametersOperation": { + "type": "object", + "properties": { + "ParameterValueConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/SetParameterValueConfiguration" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "required": [ + "ParameterValueConfigurations" + ], + "additionalProperties": false + }, + "CustomActionURLOperation": { + "type": "object", + "properties": { + "URLTemplate": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "URLTarget": { + "$ref": "#/definitions/URLTargetConfiguration" + } + }, + "required": [ + "URLTarget", + "URLTemplate" + ], + "additionalProperties": false + }, + "CustomColor": { + "type": "object", + "properties": { + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "SpecialValue": { + "$ref": "#/definitions/SpecialValue" + } + }, + "required": [ + "Color" + ], + "additionalProperties": false + }, + "CustomContentConfiguration": { + "type": "object", + "properties": { + "ContentUrl": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ContentType": { + "$ref": "#/definitions/CustomContentType" + }, + "ImageScaling": { + "$ref": "#/definitions/CustomContentImageScalingConfiguration" + } + }, + "additionalProperties": false + }, + "CustomContentImageScalingConfiguration": { + "type": "string", + "enum": [ + "FIT_TO_HEIGHT", + "FIT_TO_WIDTH", + "DO_NOT_SCALE", + "SCALE_TO_VISUAL" + ] + }, + "CustomContentType": { + "type": "string", + "enum": [ + "IMAGE", + "OTHER_EMBEDDED_CONTENT" + ] + }, + "CustomContentVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/CustomContentConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "CustomFilterConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValue": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "CustomFilterListConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "CustomNarrativeOptions": { + "type": "object", + "properties": { + "Narrative": { + "type": "string", + "maxLength": 150000, + "minLength": 0 + } + }, + "required": [ + "Narrative" + ], + "additionalProperties": false + }, + "CustomParameterValues": { + "type": "object", + "properties": { + "StringValues": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + }, + "IntegerValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + }, + "DecimalValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + }, + "DateTimeValues": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "CustomValuesConfiguration": { + "type": "object", + "properties": { + "IncludeNullValue": { + "type": "boolean" + }, + "CustomValues": { + "$ref": "#/definitions/CustomParameterValues" + } + }, + "required": [ + "CustomValues" + ], + "additionalProperties": false + }, + "DashboardBehavior": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "DashboardError": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/DashboardErrorType" + }, + "Message": { + "type": "string", + "pattern": ".*\\S.*" + }, + "ViolatedEntities": { + "type": "array", + "items": { + "$ref": "#/definitions/Entity" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "DashboardErrorType": { + "type": "string", + "enum": [ + "ACCESS_DENIED", + "SOURCE_NOT_FOUND", + "DATA_SET_NOT_FOUND", + "INTERNAL_FAILURE", + "PARAMETER_VALUE_INCOMPATIBLE", + "PARAMETER_TYPE_INVALID", + "PARAMETER_NOT_FOUND", + "COLUMN_TYPE_MISMATCH", + "COLUMN_GEOGRAPHIC_ROLE_MISMATCH", + "COLUMN_REPLACEMENT_MISSING" + ] + }, + "DashboardPublishOptions": { + "type": "object", + "properties": { + "AdHocFilteringOption": { + "$ref": "#/definitions/AdHocFilteringOption" + }, + "ExportToCSVOption": { + "$ref": "#/definitions/ExportToCSVOption" + }, + "SheetControlsOption": { + "$ref": "#/definitions/SheetControlsOption" + }, + "VisualPublishOptions": { + "$ref": "#/definitions/DashboardVisualPublishOptions" + }, + "SheetLayoutElementMaximizationOption": { + "$ref": "#/definitions/SheetLayoutElementMaximizationOption" + }, + "VisualMenuOption": { + "$ref": "#/definitions/VisualMenuOption" + }, + "VisualAxisSortOption": { + "$ref": "#/definitions/VisualAxisSortOption" + }, + "ExportWithHiddenFieldsOption": { + "$ref": "#/definitions/ExportWithHiddenFieldsOption" + }, + "DataPointDrillUpDownOption": { + "$ref": "#/definitions/DataPointDrillUpDownOption" + }, + "DataPointMenuLabelOption": { + "$ref": "#/definitions/DataPointMenuLabelOption" + }, + "DataPointTooltipOption": { + "$ref": "#/definitions/DataPointTooltipOption" + } + }, + "additionalProperties": false + }, + "DashboardSourceEntity": { + "type": "object", + "properties": { + "SourceTemplate": { + "$ref": "#/definitions/DashboardSourceTemplate" + } + }, + "additionalProperties": false + }, + "DashboardSourceTemplate": { + "type": "object", + "properties": { + "DataSetReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSetReference" + }, + "minItems": 1 + }, + "Arn": { + "type": "string" + } + }, + "required": [ + "Arn", + "DataSetReferences" + ], + "additionalProperties": false + }, + "DashboardUIState": { + "type": "string", + "enum": [ + "EXPANDED", + "COLLAPSED" + ] + }, + "DashboardVersion": { + "type": "object", + "properties": { + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "Errors": { + "type": "array", + "items": { + "$ref": "#/definitions/DashboardError" + }, + "minItems": 1 + }, + "VersionNumber": { + "type": "number", + "minimum": 1 + }, + "Status": { + "$ref": "#/definitions/ResourceStatus" + }, + "Arn": { + "type": "string" + }, + "SourceEntityArn": { + "type": "string" + }, + "DataSetArns": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 100, + "minItems": 0 + }, + "Description": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "ThemeArn": { + "type": "string" + }, + "Sheets": { + "type": "array", + "items": { + "$ref": "#/definitions/Sheet" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "DashboardVersionDefinition": { + "type": "object", + "properties": { + "DataSetIdentifierDeclarations": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSetIdentifierDeclaration" + }, + "maxItems": 50, + "minItems": 1 + }, + "Sheets": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetDefinition" + }, + "maxItems": 20, + "minItems": 0 + }, + "CalculatedFields": { + "type": "array", + "items": { + "$ref": "#/definitions/CalculatedField" + }, + "maxItems": 500, + "minItems": 0 + }, + "ParameterDeclarations": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterDeclaration" + }, + "maxItems": 200, + "minItems": 0 + }, + "FilterGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterGroup" + }, + "maxItems": 2000, + "minItems": 0 + }, + "ColumnConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnConfiguration" + }, + "maxItems": 200, + "minItems": 0 + }, + "AnalysisDefaults": { + "$ref": "#/definitions/AnalysisDefaults" + }, + "Options": { + "$ref": "#/definitions/AssetOptions" + } + }, + "required": [ + "DataSetIdentifierDeclarations" + ], + "additionalProperties": false + }, + "DashboardVisualPublishOptions": { + "type": "object", + "properties": { + "ExportHiddenFieldsOption": { + "$ref": "#/definitions/ExportHiddenFieldsOption" + } + }, + "additionalProperties": false + }, + "DataBarsOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "PositiveColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "NegativeColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "DataColor": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DataValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "DataFieldSeriesItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string" + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "Settings": { + "$ref": "#/definitions/LineChartSeriesSettings" + } + }, + "required": [ + "AxisBinding", + "FieldId" + ], + "additionalProperties": false + }, + "DataLabelContent": { + "type": "string", + "enum": [ + "VALUE", + "PERCENT", + "VALUE_AND_PERCENT" + ] + }, + "DataLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CategoryLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MeasureLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "DataLabelTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/DataLabelType" + }, + "maxItems": 100, + "minItems": 0 + }, + "Position": { + "$ref": "#/definitions/DataLabelPosition" + }, + "LabelContent": { + "$ref": "#/definitions/DataLabelContent" + }, + "LabelFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "LabelColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Overlap": { + "$ref": "#/definitions/DataLabelOverlap" + }, + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DataLabelOverlap": { + "type": "string", + "enum": [ + "DISABLE_OVERLAP", + "ENABLE_OVERLAP" + ] + }, + "DataLabelPosition": { + "type": "string", + "enum": [ + "INSIDE", + "OUTSIDE", + "LEFT", + "TOP", + "BOTTOM", + "RIGHT" + ] + }, + "DataLabelType": { + "type": "object", + "properties": { + "FieldLabelType": { + "$ref": "#/definitions/FieldLabelType" + }, + "DataPathLabelType": { + "$ref": "#/definitions/DataPathLabelType" + }, + "RangeEndsLabelType": { + "$ref": "#/definitions/RangeEndsLabelType" + }, + "MinimumLabelType": { + "$ref": "#/definitions/MinimumLabelType" + }, + "MaximumLabelType": { + "$ref": "#/definitions/MaximumLabelType" + } + }, + "additionalProperties": false + }, + "DataPathColor": { + "type": "object", + "properties": { + "Element": { + "$ref": "#/definitions/DataPathValue" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Color", + "Element" + ], + "additionalProperties": false + }, + "DataPathLabelType": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DataPathSort": { + "type": "object", + "properties": { + "Direction": { + "$ref": "#/definitions/SortDirection" + }, + "SortPaths": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "required": [ + "Direction", + "SortPaths" + ], + "additionalProperties": false + }, + "DataPathType": { + "type": "object", + "properties": { + "PivotTableDataPathType": { + "$ref": "#/definitions/PivotTableDataPathType" + } + }, + "additionalProperties": false + }, + "DataPathValue": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "DataPathType": { + "$ref": "#/definitions/DataPathType" + } + }, + "additionalProperties": false + }, + "DataPointDrillUpDownOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "DataPointMenuLabelOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "DataPointTooltipOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "DataSetIdentifierDeclaration": { + "type": "object", + "properties": { + "Identifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DataSetArn": { + "type": "string" + } + }, + "required": [ + "DataSetArn", + "Identifier" + ], + "additionalProperties": false + }, + "DataSetReference": { + "type": "object", + "properties": { + "DataSetPlaceholder": { + "type": "string", + "pattern": ".*\\S.*" + }, + "DataSetArn": { + "type": "string" + } + }, + "required": [ + "DataSetArn", + "DataSetPlaceholder" + ], + "additionalProperties": false + }, + "DateAggregationFunction": { + "type": "string", + "enum": [ + "COUNT", + "DISTINCT_COUNT", + "MIN", + "MAX" + ] + }, + "DateAxisOptions": { + "type": "object", + "properties": { + "MissingDateVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DateDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "DateGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "DateMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/DateAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "DateTimeDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + }, + "maxItems": 50000, + "minItems": 0 + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + } + }, + "additionalProperties": false + }, + "DateTimeFormatConfiguration": { + "type": "object", + "properties": { + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + }, + "NumericFormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "DateTimeHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "HierarchyId" + ], + "additionalProperties": false + }, + "DateTimeParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "DateTimeParameterDeclaration": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/DateTimeDefaultValues" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/DateTimeValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "DateTimePickerControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "DateTimeValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "DayOfTheWeek": { + "type": "string", + "enum": [ + "SUNDAY", + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY" + ] + }, + "DecimalDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "DecimalParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "number", + "default": 0 + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "DecimalParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/DecimalDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/DecimalValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "DecimalPlacesConfiguration": { + "type": "object", + "properties": { + "DecimalPlaces": { + "type": "number", + "maximum": 20, + "minimum": 0 + } + }, + "required": [ + "DecimalPlaces" + ], + "additionalProperties": false + }, + "DecimalValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "DefaultFreeFormLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DefaultGridLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DefaultInteractiveLayoutConfiguration": { + "type": "object", + "properties": { + "Grid": { + "$ref": "#/definitions/DefaultGridLayoutConfiguration" + }, + "FreeForm": { + "$ref": "#/definitions/DefaultFreeFormLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "DefaultNewSheetConfiguration": { + "type": "object", + "properties": { + "InteractiveLayoutConfiguration": { + "$ref": "#/definitions/DefaultInteractiveLayoutConfiguration" + }, + "PaginatedLayoutConfiguration": { + "$ref": "#/definitions/DefaultPaginatedLayoutConfiguration" + }, + "SheetContentType": { + "$ref": "#/definitions/SheetContentType" + } + }, + "additionalProperties": false + }, + "DefaultPaginatedLayoutConfiguration": { + "type": "object", + "properties": { + "SectionBased": { + "$ref": "#/definitions/DefaultSectionBasedLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "DefaultSectionBasedLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DestinationParameterValueConfiguration": { + "type": "object", + "properties": { + "CustomValuesConfiguration": { + "$ref": "#/definitions/CustomValuesConfiguration" + }, + "SelectAllValueOptions": { + "$ref": "#/definitions/SelectAllValueOptions" + }, + "SourceParameterName": { + "type": "string" + }, + "SourceField": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "SourceColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "DimensionField": { + "type": "object", + "properties": { + "NumericalDimensionField": { + "$ref": "#/definitions/NumericalDimensionField" + }, + "CategoricalDimensionField": { + "$ref": "#/definitions/CategoricalDimensionField" + }, + "DateDimensionField": { + "$ref": "#/definitions/DateDimensionField" + } + }, + "additionalProperties": false + }, + "DonutCenterOptions": { + "type": "object", + "properties": { + "LabelVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DonutOptions": { + "type": "object", + "properties": { + "ArcOptions": { + "$ref": "#/definitions/ArcOptions" + }, + "DonutCenterOptions": { + "$ref": "#/definitions/DonutCenterOptions" + } + }, + "additionalProperties": false + }, + "DrillDownFilter": { + "type": "object", + "properties": { + "NumericEqualityFilter": { + "$ref": "#/definitions/NumericEqualityDrillDownFilter" + }, + "CategoryFilter": { + "$ref": "#/definitions/CategoryDrillDownFilter" + }, + "TimeRangeFilter": { + "$ref": "#/definitions/TimeRangeDrillDownFilter" + } + }, + "additionalProperties": false + }, + "DropDownControlDisplayOptions": { + "type": "object", + "properties": { + "SelectAllOptions": { + "$ref": "#/definitions/ListControlSelectAllOptions" + }, + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "DynamicDefaultValue": { + "type": "object", + "properties": { + "UserNameColumn": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "GroupNameColumn": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "DefaultValueColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "required": [ + "DefaultValueColumn" + ], + "additionalProperties": false + }, + "EmptyVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "Entity": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "pattern": ".*\\S.*" + } + }, + "additionalProperties": false + }, + "ExcludePeriodConfiguration": { + "type": "object", + "properties": { + "Amount": { + "type": "number", + "default": null + }, + "Granularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + } + }, + "required": [ + "Amount", + "Granularity" + ], + "additionalProperties": false + }, + "ExplicitHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 2 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "Columns", + "HierarchyId" + ], + "additionalProperties": false + }, + "ExportHiddenFieldsOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "ExportToCSVOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "ExportWithHiddenFieldsOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "FieldBasedTooltip": { + "type": "object", + "properties": { + "AggregationVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TooltipTitleType": { + "$ref": "#/definitions/TooltipTitleType" + }, + "TooltipFields": { + "type": "array", + "items": { + "$ref": "#/definitions/TooltipItem" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FieldLabelType": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "FieldSeriesItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "Settings": { + "$ref": "#/definitions/LineChartSeriesSettings" + } + }, + "required": [ + "AxisBinding", + "FieldId" + ], + "additionalProperties": false + }, + "FieldSort": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Direction": { + "$ref": "#/definitions/SortDirection" + } + }, + "required": [ + "Direction", + "FieldId" + ], + "additionalProperties": false + }, + "FieldSortOptions": { + "type": "object", + "properties": { + "FieldSort": { + "$ref": "#/definitions/FieldSort" + }, + "ColumnSort": { + "$ref": "#/definitions/ColumnSort" + } + }, + "additionalProperties": false + }, + "FieldTooltipItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Label": { + "type": "string" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "FilledMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Geospatial": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilledMapConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/FilledMapConditionalFormattingOption" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "required": [ + "ConditionalFormattingOptions" + ], + "additionalProperties": false + }, + "FilledMapConditionalFormattingOption": { + "type": "object", + "properties": { + "Shape": { + "$ref": "#/definitions/FilledMapShapeConditionalFormatting" + } + }, + "required": [ + "Shape" + ], + "additionalProperties": false + }, + "FilledMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/FilledMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/FilledMapSortConfiguration" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "WindowOptions": { + "$ref": "#/definitions/GeospatialWindowOptions" + }, + "MapStyleOptions": { + "$ref": "#/definitions/GeospatialMapStyleOptions" + } + }, + "additionalProperties": false + }, + "FilledMapFieldWells": { + "type": "object", + "properties": { + "FilledMapAggregatedFieldWells": { + "$ref": "#/definitions/FilledMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "FilledMapShapeConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Format": { + "$ref": "#/definitions/ShapeConditionalFormat" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "FilledMapSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilledMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/FilledMapConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/FilledMapConditionalFormatting" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "Filter": { + "type": "object", + "properties": { + "CategoryFilter": { + "$ref": "#/definitions/CategoryFilter" + }, + "NumericRangeFilter": { + "$ref": "#/definitions/NumericRangeFilter" + }, + "NumericEqualityFilter": { + "$ref": "#/definitions/NumericEqualityFilter" + }, + "TimeEqualityFilter": { + "$ref": "#/definitions/TimeEqualityFilter" + }, + "TimeRangeFilter": { + "$ref": "#/definitions/TimeRangeFilter" + }, + "RelativeDatesFilter": { + "$ref": "#/definitions/RelativeDatesFilter" + }, + "TopBottomFilter": { + "$ref": "#/definitions/TopBottomFilter" + } + }, + "additionalProperties": false + }, + "FilterControl": { + "type": "object", + "properties": { + "DateTimePicker": { + "$ref": "#/definitions/FilterDateTimePickerControl" + }, + "List": { + "$ref": "#/definitions/FilterListControl" + }, + "Dropdown": { + "$ref": "#/definitions/FilterDropDownControl" + }, + "TextField": { + "$ref": "#/definitions/FilterTextFieldControl" + }, + "TextArea": { + "$ref": "#/definitions/FilterTextAreaControl" + }, + "Slider": { + "$ref": "#/definitions/FilterSliderControl" + }, + "RelativeDateTime": { + "$ref": "#/definitions/FilterRelativeDateTimeControl" + } + }, + "additionalProperties": false + }, + "FilterDateTimePickerControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/DateTimePickerControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlDateTimePickerType" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterDropDownControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/DropDownControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/FilterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterGroup": { + "type": "object", + "properties": { + "FilterGroupId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Filters": { + "type": "array", + "items": { + "$ref": "#/definitions/Filter" + }, + "maxItems": 20, + "minItems": 0 + }, + "ScopeConfiguration": { + "$ref": "#/definitions/FilterScopeConfiguration" + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "CrossDataset": { + "$ref": "#/definitions/CrossDatasetTypes" + } + }, + "required": [ + "CrossDataset", + "FilterGroupId", + "Filters", + "ScopeConfiguration" + ], + "additionalProperties": false + }, + "FilterListConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator" + ], + "additionalProperties": false + }, + "FilterListControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/ListControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/FilterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterNullOption": { + "type": "string", + "enum": [ + "ALL_VALUES", + "NULLS_ONLY", + "NON_NULLS_ONLY" + ] + }, + "FilterOperationSelectedFieldsConfiguration": { + "type": "object", + "properties": { + "SelectedFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 20, + "minItems": 1 + }, + "SelectedFieldOptions": { + "$ref": "#/definitions/SelectedFieldOptions" + }, + "SelectedColumns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilterOperationTargetVisualsConfiguration": { + "type": "object", + "properties": { + "SameSheetTargetVisualConfiguration": { + "$ref": "#/definitions/SameSheetTargetVisualConfiguration" + } + }, + "additionalProperties": false + }, + "FilterRelativeDateTimeControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/RelativeDateTimeControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterScopeConfiguration": { + "type": "object", + "properties": { + "SelectedSheets": { + "$ref": "#/definitions/SelectedSheetsFilterScopeConfiguration" + }, + "AllSheets": { + "$ref": "#/definitions/AllSheetsFilterScopeConfiguration" + } + }, + "additionalProperties": false + }, + "FilterSelectableValues": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilterSliderControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/SliderControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlSliderType" + }, + "MaximumValue": { + "type": "number", + "default": 0 + }, + "MinimumValue": { + "type": "number", + "default": 0 + }, + "StepSize": { + "type": "number", + "default": 0 + } + }, + "required": [ + "FilterControlId", + "MaximumValue", + "MinimumValue", + "SourceFilterId", + "StepSize", + "Title" + ], + "additionalProperties": false + }, + "FilterTextAreaControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Delimiter": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DisplayOptions": { + "$ref": "#/definitions/TextAreaControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterTextFieldControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/TextFieldControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterVisualScope": { + "type": "string", + "enum": [ + "ALL_VISUALS", + "SELECTED_VISUALS" + ] + }, + "FontConfiguration": { + "type": "object", + "properties": { + "FontSize": { + "$ref": "#/definitions/FontSize" + }, + "FontDecoration": { + "$ref": "#/definitions/FontDecoration" + }, + "FontColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "FontWeight": { + "$ref": "#/definitions/FontWeight" + }, + "FontStyle": { + "$ref": "#/definitions/FontStyle" + } + }, + "additionalProperties": false + }, + "FontDecoration": { + "type": "string", + "enum": [ + "UNDERLINE", + "NONE" + ] + }, + "FontSize": { + "type": "object", + "properties": { + "Relative": { + "$ref": "#/definitions/RelativeFontSize" + } + }, + "additionalProperties": false + }, + "FontStyle": { + "type": "string", + "enum": [ + "NORMAL", + "ITALIC" + ] + }, + "FontWeight": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/FontWeightName" + } + }, + "additionalProperties": false + }, + "FontWeightName": { + "type": "string", + "enum": [ + "NORMAL", + "BOLD" + ] + }, + "ForecastComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodsForward": { + "type": "number", + "maximum": 1000, + "minimum": 1 + }, + "PeriodsBackward": { + "type": "number", + "maximum": 1000, + "minimum": 0 + }, + "UpperBoundary": { + "type": "number", + "default": null + }, + "LowerBoundary": { + "type": "number", + "default": null + }, + "PredictionInterval": { + "type": "number", + "maximum": 95, + "minimum": 50 + }, + "Seasonality": { + "$ref": "#/definitions/ForecastComputationSeasonality" + }, + "CustomSeasonalityValue": { + "type": "number", + "default": null, + "maximum": 180, + "minimum": 1 + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "ForecastComputationSeasonality": { + "type": "string", + "enum": [ + "AUTOMATIC", + "CUSTOM" + ] + }, + "ForecastConfiguration": { + "type": "object", + "properties": { + "ForecastProperties": { + "$ref": "#/definitions/TimeBasedForecastProperties" + }, + "Scenario": { + "$ref": "#/definitions/ForecastScenario" + } + }, + "additionalProperties": false + }, + "ForecastScenario": { + "type": "object", + "properties": { + "WhatIfPointScenario": { + "$ref": "#/definitions/WhatIfPointScenario" + }, + "WhatIfRangeScenario": { + "$ref": "#/definitions/WhatIfRangeScenario" + } + }, + "additionalProperties": false + }, + "FormatConfiguration": { + "type": "object", + "properties": { + "StringFormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + }, + "NumberFormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + }, + "DateTimeFormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "ScreenCanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutScreenCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/FreeFormLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutCanvasSizeOptions" + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "FreeFormLayoutElement": { + "type": "object", + "properties": { + "ElementId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "ElementType": { + "$ref": "#/definitions/LayoutElementType" + }, + "XAxisLocation": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "YAxisLocation": { + "type": "string", + "description": "String based length that is composed of value and unit in px with Integer.MAX_VALUE as maximum value" + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "RenderingRules": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetElementRenderingRule" + }, + "maxItems": 10000, + "minItems": 0 + }, + "BorderStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBorderStyle" + }, + "SelectedBorderStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBorderStyle" + }, + "BackgroundStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBackgroundStyle" + }, + "LoadingAnimation": { + "$ref": "#/definitions/LoadingAnimation" + } + }, + "required": [ + "ElementId", + "ElementType", + "Height", + "Width", + "XAxisLocation", + "YAxisLocation" + ], + "additionalProperties": false + }, + "FreeFormLayoutElementBackgroundStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutElementBorderStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutScreenCanvasSizeOptions": { + "type": "object", + "properties": { + "OptimizedViewPortWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "OptimizedViewPortWidth" + ], + "additionalProperties": false + }, + "FreeFormSectionLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/FreeFormLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "FunnelChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FunnelChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/FunnelChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/FunnelChartSortConfiguration" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "DataLabelOptions": { + "$ref": "#/definitions/FunnelChartDataLabelOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "FunnelChartDataLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CategoryLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MeasureLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "Position": { + "$ref": "#/definitions/DataLabelPosition" + }, + "LabelFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "LabelColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "MeasureDataLabelStyle": { + "$ref": "#/definitions/FunnelChartMeasureDataLabelStyle" + } + }, + "additionalProperties": false + }, + "FunnelChartFieldWells": { + "type": "object", + "properties": { + "FunnelChartAggregatedFieldWells": { + "$ref": "#/definitions/FunnelChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "FunnelChartMeasureDataLabelStyle": { + "type": "string", + "enum": [ + "VALUE_ONLY", + "PERCENTAGE_BY_FIRST_STAGE", + "PERCENTAGE_BY_PREVIOUS_STAGE", + "VALUE_AND_PERCENTAGE_BY_FIRST_STAGE", + "VALUE_AND_PERCENTAGE_BY_PREVIOUS_STAGE" + ] + }, + "FunnelChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "FunnelChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/FunnelChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GaugeChartArcConditionalFormatting": { + "type": "object", + "properties": { + "ForegroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "GaugeChartConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/GaugeChartConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GaugeChartConditionalFormattingOption": { + "type": "object", + "properties": { + "PrimaryValue": { + "$ref": "#/definitions/GaugeChartPrimaryValueConditionalFormatting" + }, + "Arc": { + "$ref": "#/definitions/GaugeChartArcConditionalFormatting" + } + }, + "additionalProperties": false + }, + "GaugeChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/GaugeChartFieldWells" + }, + "GaugeChartOptions": { + "$ref": "#/definitions/GaugeChartOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "TooltipOptions": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "GaugeChartFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TargetValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GaugeChartOptions": { + "type": "object", + "properties": { + "PrimaryValueDisplayType": { + "$ref": "#/definitions/PrimaryValueDisplayType" + }, + "Comparison": { + "$ref": "#/definitions/ComparisonConfiguration" + }, + "ArcAxis": { + "$ref": "#/definitions/ArcAxisConfiguration" + }, + "Arc": { + "$ref": "#/definitions/ArcConfiguration" + }, + "PrimaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + } + }, + "additionalProperties": false + }, + "GaugeChartPrimaryValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "GaugeChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/GaugeChartConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/GaugeChartConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GeospatialCoordinateBounds": { + "type": "object", + "properties": { + "North": { + "type": "number", + "maximum": 90, + "minimum": -90 + }, + "South": { + "type": "number", + "maximum": 90, + "minimum": -90 + }, + "West": { + "type": "number", + "maximum": 1800, + "minimum": -1800 + }, + "East": { + "type": "number", + "maximum": 1800, + "minimum": -1800 + } + }, + "required": [ + "East", + "North", + "South", + "West" + ], + "additionalProperties": false + }, + "GeospatialHeatmapColorScale": { + "type": "object", + "properties": { + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/GeospatialHeatmapDataColor" + }, + "maxItems": 2, + "minItems": 2 + } + }, + "additionalProperties": false + }, + "GeospatialHeatmapConfiguration": { + "type": "object", + "properties": { + "HeatmapColor": { + "$ref": "#/definitions/GeospatialHeatmapColorScale" + } + }, + "additionalProperties": false + }, + "GeospatialHeatmapDataColor": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "Color" + ], + "additionalProperties": false + }, + "GeospatialMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Geospatial": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GeospatialMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/GeospatialMapFieldWells" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "WindowOptions": { + "$ref": "#/definitions/GeospatialWindowOptions" + }, + "MapStyleOptions": { + "$ref": "#/definitions/GeospatialMapStyleOptions" + }, + "PointStyleOptions": { + "$ref": "#/definitions/GeospatialPointStyleOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "GeospatialMapFieldWells": { + "type": "object", + "properties": { + "GeospatialMapAggregatedFieldWells": { + "$ref": "#/definitions/GeospatialMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "GeospatialMapStyleOptions": { + "type": "object", + "properties": { + "BaseMapStyle": { + "$ref": "#/definitions/BaseMapStyleType" + } + }, + "additionalProperties": false + }, + "GeospatialMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/GeospatialMapConfiguration" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GeospatialPointStyleOptions": { + "type": "object", + "properties": { + "SelectedPointStyle": { + "$ref": "#/definitions/GeospatialSelectedPointStyle" + }, + "ClusterMarkerConfiguration": { + "$ref": "#/definitions/ClusterMarkerConfiguration" + }, + "HeatmapConfiguration": { + "$ref": "#/definitions/GeospatialHeatmapConfiguration" + } + }, + "additionalProperties": false + }, + "GeospatialSelectedPointStyle": { + "type": "string", + "enum": [ + "POINT", + "CLUSTER", + "HEATMAP" + ] + }, + "GeospatialWindowOptions": { + "type": "object", + "properties": { + "Bounds": { + "$ref": "#/definitions/GeospatialCoordinateBounds" + }, + "MapZoomMode": { + "$ref": "#/definitions/MapZoomMode" + } + }, + "additionalProperties": false + }, + "GlobalTableBorderOptions": { + "type": "object", + "properties": { + "UniformBorder": { + "$ref": "#/definitions/TableBorderOptions" + }, + "SideSpecificBorder": { + "$ref": "#/definitions/TableSideBorderOptions" + } + }, + "additionalProperties": false + }, + "GradientColor": { + "type": "object", + "properties": { + "Stops": { + "type": "array", + "items": { + "$ref": "#/definitions/GradientStop" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GradientStop": { + "type": "object", + "properties": { + "GradientOffset": { + "type": "number", + "default": 0 + }, + "DataValue": { + "type": "number", + "default": null + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "GradientOffset" + ], + "additionalProperties": false + }, + "GridLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "ScreenCanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutScreenCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "GridLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/GridLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutCanvasSizeOptions" + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "GridLayoutElement": { + "type": "object", + "properties": { + "ElementId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "ElementType": { + "$ref": "#/definitions/LayoutElementType" + }, + "ColumnIndex": { + "type": "number", + "maximum": 35, + "minimum": 0 + }, + "ColumnSpan": { + "type": "number", + "maximum": 36, + "minimum": 1 + }, + "RowIndex": { + "type": "number", + "maximum": 9009, + "minimum": 0 + }, + "RowSpan": { + "type": "number", + "maximum": 21, + "minimum": 1 + } + }, + "required": [ + "ColumnSpan", + "ElementId", + "ElementType", + "RowSpan" + ], + "additionalProperties": false + }, + "GridLayoutScreenCanvasSizeOptions": { + "type": "object", + "properties": { + "ResizeOption": { + "$ref": "#/definitions/ResizeOption" + }, + "OptimizedViewPortWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "ResizeOption" + ], + "additionalProperties": false + }, + "GrowthRateComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodSize": { + "type": "number", + "default": 0, + "maximum": 52, + "minimum": 2 + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "HeaderFooterSectionConfiguration": { + "type": "object", + "properties": { + "SectionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Layout": { + "$ref": "#/definitions/SectionLayoutConfiguration" + }, + "Style": { + "$ref": "#/definitions/SectionStyle" + } + }, + "required": [ + "Layout", + "SectionId" + ], + "additionalProperties": false + }, + "HeatMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Rows": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "HeatMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/HeatMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/HeatMapSortConfiguration" + }, + "RowLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColumnLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorScale": { + "$ref": "#/definitions/ColorScale" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + } + }, + "additionalProperties": false + }, + "HeatMapFieldWells": { + "type": "object", + "properties": { + "HeatMapAggregatedFieldWells": { + "$ref": "#/definitions/HeatMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "HeatMapSortConfiguration": { + "type": "object", + "properties": { + "HeatMapRowSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "HeatMapColumnSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "HeatMapRowItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "HeatMapColumnItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "HeatMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/HeatMapConfiguration" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "HistogramAggregatedFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "HistogramBinOptions": { + "type": "object", + "properties": { + "SelectedBinType": { + "$ref": "#/definitions/HistogramBinType" + }, + "BinCount": { + "$ref": "#/definitions/BinCountOptions" + }, + "BinWidth": { + "$ref": "#/definitions/BinWidthOptions" + }, + "StartValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "HistogramBinType": { + "type": "string", + "enum": [ + "BIN_COUNT", + "BIN_WIDTH" + ] + }, + "HistogramConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/HistogramFieldWells" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "YAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "BinOptions": { + "$ref": "#/definitions/HistogramBinOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "HistogramFieldWells": { + "type": "object", + "properties": { + "HistogramAggregatedFieldWells": { + "$ref": "#/definitions/HistogramAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "HistogramVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/HistogramConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "HorizontalTextAlignment": { + "type": "string", + "enum": [ + "LEFT", + "CENTER", + "RIGHT", + "AUTO" + ] + }, + "Icon": { + "type": "string", + "enum": [ + "CARET_UP", + "CARET_DOWN", + "PLUS", + "MINUS", + "ARROW_UP", + "ARROW_DOWN", + "ARROW_LEFT", + "ARROW_UP_LEFT", + "ARROW_DOWN_LEFT", + "ARROW_RIGHT", + "ARROW_UP_RIGHT", + "ARROW_DOWN_RIGHT", + "FACE_UP", + "FACE_DOWN", + "FACE_FLAT", + "ONE_BAR", + "TWO_BAR", + "THREE_BAR", + "CIRCLE", + "TRIANGLE", + "SQUARE", + "FLAG", + "THUMBS_UP", + "THUMBS_DOWN", + "CHECKMARK", + "X" + ] + }, + "InsightConfiguration": { + "type": "object", + "properties": { + "Computations": { + "type": "array", + "items": { + "$ref": "#/definitions/Computation" + }, + "maxItems": 100, + "minItems": 0 + }, + "CustomNarrative": { + "$ref": "#/definitions/CustomNarrativeOptions" + } + }, + "additionalProperties": false + }, + "InsightVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "InsightConfiguration": { + "$ref": "#/definitions/InsightConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "IntegerDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "IntegerParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "number", + "default": 0 + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "IntegerParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/IntegerDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/IntegerValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "IntegerValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "ItemsLimitConfiguration": { + "type": "object", + "properties": { + "ItemsLimit": { + "type": "number", + "default": null + }, + "OtherCategories": { + "$ref": "#/definitions/OtherCategories" + } + }, + "additionalProperties": false + }, + "KPIActualValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIComparisonValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/KPIConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPIConditionalFormattingOption": { + "type": "object", + "properties": { + "PrimaryValue": { + "$ref": "#/definitions/KPIPrimaryValueConditionalFormatting" + }, + "ProgressBar": { + "$ref": "#/definitions/KPIProgressBarConditionalFormatting" + }, + "ActualValue": { + "$ref": "#/definitions/KPIActualValueConditionalFormatting" + }, + "ComparisonValue": { + "$ref": "#/definitions/KPIComparisonValueConditionalFormatting" + } + }, + "additionalProperties": false + }, + "KPIConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/KPIFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/KPISortConfiguration" + }, + "KPIOptions": { + "$ref": "#/definitions/KPIOptions" + } + }, + "additionalProperties": false + }, + "KPIFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TargetValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TrendGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPIOptions": { + "type": "object", + "properties": { + "ProgressBar": { + "$ref": "#/definitions/ProgressBarOptions" + }, + "TrendArrows": { + "$ref": "#/definitions/TrendArrowOptions" + }, + "SecondaryValue": { + "$ref": "#/definitions/SecondaryValueOptions" + }, + "Comparison": { + "$ref": "#/definitions/ComparisonConfiguration" + }, + "PrimaryValueDisplayType": { + "$ref": "#/definitions/PrimaryValueDisplayType" + }, + "PrimaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "SecondaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "Sparkline": { + "$ref": "#/definitions/KPISparklineOptions" + }, + "VisualLayoutOptions": { + "$ref": "#/definitions/KPIVisualLayoutOptions" + } + }, + "additionalProperties": false + }, + "KPIPrimaryValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIProgressBarConditionalFormatting": { + "type": "object", + "properties": { + "ForegroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "KPISortConfiguration": { + "type": "object", + "properties": { + "TrendGroupSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPISparklineOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Type": { + "$ref": "#/definitions/KPISparklineType" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "TooltipVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "KPISparklineType": { + "type": "string", + "enum": [ + "LINE", + "AREA" + ] + }, + "KPIVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/KPIConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/KPIConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "KPIVisualLayoutOptions": { + "type": "object", + "properties": { + "StandardLayout": { + "$ref": "#/definitions/KPIVisualStandardLayout" + } + }, + "additionalProperties": false + }, + "KPIVisualStandardLayout": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/KPIVisualStandardLayoutType" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "KPIVisualStandardLayoutType": { + "type": "string", + "enum": [ + "CLASSIC", + "VERTICAL" + ] + }, + "LabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "CustomLabel": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Layout": { + "type": "object", + "properties": { + "Configuration": { + "$ref": "#/definitions/LayoutConfiguration" + } + }, + "required": [ + "Configuration" + ], + "additionalProperties": false + }, + "LayoutConfiguration": { + "type": "object", + "properties": { + "GridLayout": { + "$ref": "#/definitions/GridLayoutConfiguration" + }, + "FreeFormLayout": { + "$ref": "#/definitions/FreeFormLayoutConfiguration" + }, + "SectionBasedLayout": { + "$ref": "#/definitions/SectionBasedLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "LayoutElementType": { + "type": "string", + "enum": [ + "VISUAL", + "FILTER_CONTROL", + "PARAMETER_CONTROL", + "TEXT_BOX" + ] + }, + "LegendOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Title": { + "$ref": "#/definitions/LabelOptions" + }, + "Position": { + "$ref": "#/definitions/LegendPosition" + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "LegendPosition": { + "type": "string", + "enum": [ + "AUTO", + "RIGHT", + "BOTTOM", + "TOP" + ] + }, + "LineChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "LineChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/LineChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/LineChartSortConfiguration" + }, + "ForecastConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/ForecastConfiguration" + }, + "maxItems": 10, + "minItems": 0 + }, + "Type": { + "$ref": "#/definitions/LineChartType" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/LineSeriesAxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SecondaryYAxisDisplayOptions": { + "$ref": "#/definitions/LineSeriesAxisDisplayOptions" + }, + "SecondaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "DefaultSeriesSettings": { + "$ref": "#/definitions/LineChartDefaultSeriesSettings" + }, + "Series": { + "type": "array", + "items": { + "$ref": "#/definitions/SeriesItem" + }, + "maxItems": 10, + "minItems": 0 + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "LineChartDefaultSeriesSettings": { + "type": "object", + "properties": { + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "LineStyleSettings": { + "$ref": "#/definitions/LineChartLineStyleSettings" + }, + "MarkerStyleSettings": { + "$ref": "#/definitions/LineChartMarkerStyleSettings" + } + }, + "additionalProperties": false + }, + "LineChartFieldWells": { + "type": "object", + "properties": { + "LineChartAggregatedFieldWells": { + "$ref": "#/definitions/LineChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "LineChartLineStyle": { + "type": "string", + "enum": [ + "SOLID", + "DOTTED", + "DASHED" + ] + }, + "LineChartLineStyleSettings": { + "type": "object", + "properties": { + "LineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "LineInterpolation": { + "$ref": "#/definitions/LineInterpolation" + }, + "LineStyle": { + "$ref": "#/definitions/LineChartLineStyle" + }, + "LineWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "LineChartMarkerShape": { + "type": "string", + "enum": [ + "CIRCLE", + "TRIANGLE", + "SQUARE", + "DIAMOND", + "ROUNDED_SQUARE" + ] + }, + "LineChartMarkerStyleSettings": { + "type": "object", + "properties": { + "MarkerVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MarkerShape": { + "$ref": "#/definitions/LineChartMarkerShape" + }, + "MarkerSize": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "MarkerColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "LineChartSeriesSettings": { + "type": "object", + "properties": { + "LineStyleSettings": { + "$ref": "#/definitions/LineChartLineStyleSettings" + }, + "MarkerStyleSettings": { + "$ref": "#/definitions/LineChartMarkerStyleSettings" + } + }, + "additionalProperties": false + }, + "LineChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "LineChartType": { + "type": "string", + "enum": [ + "LINE", + "AREA", + "STACKED_AREA" + ] + }, + "LineChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/LineChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "LineInterpolation": { + "type": "string", + "enum": [ + "LINEAR", + "SMOOTH", + "STEPPED" + ] + }, + "LineSeriesAxisDisplayOptions": { + "type": "object", + "properties": { + "AxisOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "MissingDataConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/MissingDataConfiguration" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "LinkSharingConfiguration": { + "type": "object", + "properties": { + "Permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePermission" + }, + "maxItems": 64, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "ListControlDisplayOptions": { + "type": "object", + "properties": { + "SearchOptions": { + "$ref": "#/definitions/ListControlSearchOptions" + }, + "SelectAllOptions": { + "$ref": "#/definitions/ListControlSelectAllOptions" + }, + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "ListControlSearchOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "ListControlSelectAllOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "LoadingAnimation": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "LocalNavigationConfiguration": { + "type": "object", + "properties": { + "TargetSheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + } + }, + "required": [ + "TargetSheetId" + ], + "additionalProperties": false + }, + "LongFormatText": { + "type": "object", + "properties": { + "PlainText": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "RichText": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "MapZoomMode": { + "type": "string", + "enum": [ + "AUTO", + "MANUAL" + ] + }, + "MappedDataSetParameter": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DataSetParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "required": [ + "DataSetIdentifier", + "DataSetParameterName" + ], + "additionalProperties": false + }, + "MaximumLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "MaximumMinimumComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "Type": { + "$ref": "#/definitions/MaximumMinimumComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "MaximumMinimumComputationType": { + "type": "string", + "enum": [ + "MAXIMUM", + "MINIMUM" + ] + }, + "MeasureField": { + "type": "object", + "properties": { + "NumericalMeasureField": { + "$ref": "#/definitions/NumericalMeasureField" + }, + "CategoricalMeasureField": { + "$ref": "#/definitions/CategoricalMeasureField" + }, + "DateMeasureField": { + "$ref": "#/definitions/DateMeasureField" + }, + "CalculatedMeasureField": { + "$ref": "#/definitions/CalculatedMeasureField" + } + }, + "additionalProperties": false + }, + "MetricComparisonComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "FromValue": { + "$ref": "#/definitions/MeasureField" + }, + "TargetValue": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "MinimumLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "MissingDataConfiguration": { + "type": "object", + "properties": { + "TreatmentOption": { + "$ref": "#/definitions/MissingDataTreatmentOption" + } + }, + "additionalProperties": false + }, + "MissingDataTreatmentOption": { + "type": "string", + "enum": [ + "INTERPOLATE", + "SHOW_AS_ZERO", + "SHOW_AS_BLANK" + ] + }, + "NegativeValueConfiguration": { + "type": "object", + "properties": { + "DisplayMode": { + "$ref": "#/definitions/NegativeValueDisplayMode" + } + }, + "required": [ + "DisplayMode" + ], + "additionalProperties": false + }, + "NegativeValueDisplayMode": { + "type": "string", + "enum": [ + "POSITIVE", + "NEGATIVE" + ] + }, + "NullValueFormatConfiguration": { + "type": "object", + "properties": { + "NullString": { + "type": "string", + "maxLength": 128, + "minLength": 1 + } + }, + "required": [ + "NullString" + ], + "additionalProperties": false + }, + "NumberDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NumberScale": { + "$ref": "#/definitions/NumberScale" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumberFormatConfiguration": { + "type": "object", + "properties": { + "FormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumberScale": { + "type": "string", + "enum": [ + "NONE", + "AUTO", + "THOUSANDS", + "MILLIONS", + "BILLIONS", + "TRILLIONS" + ] + }, + "NumericAxisOptions": { + "type": "object", + "properties": { + "Scale": { + "$ref": "#/definitions/AxisScale" + }, + "Range": { + "$ref": "#/definitions/AxisDisplayRange" + } + }, + "additionalProperties": false + }, + "NumericEqualityDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Column", + "Value" + ], + "additionalProperties": false + }, + "NumericEqualityFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "number", + "default": null + }, + "SelectAllOptions": { + "$ref": "#/definitions/NumericFilterSelectAllOptions" + }, + "MatchOperator": { + "$ref": "#/definitions/NumericEqualityMatchOperator" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "Column", + "FilterId", + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "NumericEqualityMatchOperator": { + "type": "string", + "enum": [ + "EQUALS", + "DOES_NOT_EQUAL" + ] + }, + "NumericFilterSelectAllOptions": { + "type": "string", + "enum": [ + "FILTER_ALL_VALUES" + ] + }, + "NumericFormatConfiguration": { + "type": "object", + "properties": { + "NumberDisplayFormatConfiguration": { + "$ref": "#/definitions/NumberDisplayFormatConfiguration" + }, + "CurrencyDisplayFormatConfiguration": { + "$ref": "#/definitions/CurrencyDisplayFormatConfiguration" + }, + "PercentageDisplayFormatConfiguration": { + "$ref": "#/definitions/PercentageDisplayFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumericRangeFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "IncludeMinimum": { + "type": "boolean", + "default": null + }, + "IncludeMaximum": { + "type": "boolean", + "default": null + }, + "RangeMinimum": { + "$ref": "#/definitions/NumericRangeFilterValue" + }, + "RangeMaximum": { + "$ref": "#/definitions/NumericRangeFilterValue" + }, + "SelectAllOptions": { + "$ref": "#/definitions/NumericFilterSelectAllOptions" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "Column", + "FilterId", + "NullOption" + ], + "additionalProperties": false + }, + "NumericRangeFilterValue": { + "type": "object", + "properties": { + "StaticValue": { + "type": "number", + "default": null + }, + "Parameter": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "NumericSeparatorConfiguration": { + "type": "object", + "properties": { + "DecimalSeparator": { + "$ref": "#/definitions/NumericSeparatorSymbol" + }, + "ThousandsSeparator": { + "$ref": "#/definitions/ThousandSeparatorOptions" + } + }, + "additionalProperties": false + }, + "NumericSeparatorSymbol": { + "type": "string", + "enum": [ + "COMMA", + "DOT", + "SPACE" + ] + }, + "NumericalAggregationFunction": { + "type": "object", + "properties": { + "SimpleNumericalAggregation": { + "$ref": "#/definitions/SimpleNumericalAggregationFunction" + }, + "PercentileAggregation": { + "$ref": "#/definitions/PercentileAggregation" + } + }, + "additionalProperties": false + }, + "NumericalDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "NumericalMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/NumericalAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "OtherCategories": { + "type": "string", + "enum": [ + "INCLUDE", + "EXCLUDE" + ] + }, + "PaginationConfiguration": { + "type": "object", + "properties": { + "PageSize": { + "type": "number", + "default": null + }, + "PageNumber": { + "type": "number", + "minimum": 0 + } + }, + "required": [ + "PageNumber", + "PageSize" + ], + "additionalProperties": false + }, + "PanelBorderStyle": { + "type": "string", + "enum": [ + "SOLID", + "DASHED", + "DOTTED" + ] + }, + "PanelConfiguration": { + "type": "object", + "properties": { + "Title": { + "$ref": "#/definitions/PanelTitleOptions" + }, + "BorderVisibility": { + "$ref": "#/definitions/Visibility" + }, + "BorderThickness": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "BorderStyle": { + "$ref": "#/definitions/PanelBorderStyle" + }, + "BorderColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + }, + "GutterVisibility": { + "$ref": "#/definitions/Visibility" + }, + "GutterSpacing": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "BackgroundVisibility": { + "$ref": "#/definitions/Visibility" + }, + "BackgroundColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "PanelTitleOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "HorizontalTextAlignment": { + "$ref": "#/definitions/HorizontalTextAlignment" + } + }, + "additionalProperties": false + }, + "PaperOrientation": { + "type": "string", + "enum": [ + "PORTRAIT", + "LANDSCAPE" + ] + }, + "PaperSize": { + "type": "string", + "enum": [ + "US_LETTER", + "US_LEGAL", + "US_TABLOID_LEDGER", + "A0", + "A1", + "A2", + "A3", + "A4", + "A5", + "JIS_B4", + "JIS_B5" + ] + }, + "ParameterControl": { + "type": "object", + "properties": { + "DateTimePicker": { + "$ref": "#/definitions/ParameterDateTimePickerControl" + }, + "List": { + "$ref": "#/definitions/ParameterListControl" + }, + "Dropdown": { + "$ref": "#/definitions/ParameterDropDownControl" + }, + "TextField": { + "$ref": "#/definitions/ParameterTextFieldControl" + }, + "TextArea": { + "$ref": "#/definitions/ParameterTextAreaControl" + }, + "Slider": { + "$ref": "#/definitions/ParameterSliderControl" + } + }, + "additionalProperties": false + }, + "ParameterDateTimePickerControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/DateTimePickerControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterDeclaration": { + "type": "object", + "properties": { + "StringParameterDeclaration": { + "$ref": "#/definitions/StringParameterDeclaration" + }, + "DecimalParameterDeclaration": { + "$ref": "#/definitions/DecimalParameterDeclaration" + }, + "IntegerParameterDeclaration": { + "$ref": "#/definitions/IntegerParameterDeclaration" + }, + "DateTimeParameterDeclaration": { + "$ref": "#/definitions/DateTimeParameterDeclaration" + } + }, + "additionalProperties": false + }, + "ParameterDropDownControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/DropDownControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/ParameterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterListControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/ListControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/ParameterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterSelectableValues": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + }, + "LinkToDataSetColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "ParameterSliderControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/SliderControlDisplayOptions" + }, + "MaximumValue": { + "type": "number", + "default": 0 + }, + "MinimumValue": { + "type": "number", + "default": 0 + }, + "StepSize": { + "type": "number", + "default": 0 + } + }, + "required": [ + "MaximumValue", + "MinimumValue", + "ParameterControlId", + "SourceParameterName", + "StepSize", + "Title" + ], + "additionalProperties": false + }, + "ParameterTextAreaControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "Delimiter": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DisplayOptions": { + "$ref": "#/definitions/TextAreaControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterTextFieldControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/TextFieldControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterValueType": { + "type": "string", + "enum": [ + "MULTI_VALUED", + "SINGLE_VALUED" + ] + }, + "Parameters": { + "type": "object", + "properties": { + "StringParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/StringParameter" + }, + "maxItems": 100, + "minItems": 0 + }, + "IntegerParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/IntegerParameter" + }, + "maxItems": 100, + "minItems": 0 + }, + "DecimalParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/DecimalParameter" + }, + "maxItems": 100, + "minItems": 0 + }, + "DateTimeParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/DateTimeParameter" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PercentVisibleRange": { + "type": "object", + "properties": { + "From": { + "type": "number", + "default": null, + "maximum": 100, + "minimum": 0 + }, + "To": { + "type": "number", + "default": null, + "maximum": 100, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "PercentageDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "PercentileAggregation": { + "type": "object", + "properties": { + "PercentileValue": { + "type": "number", + "maximum": 100, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "PeriodOverPeriodComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "PeriodToDateComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodTimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "PieChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PieChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/PieChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/PieChartSortConfiguration" + }, + "DonutOptions": { + "$ref": "#/definitions/DonutOptions" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "PieChartFieldWells": { + "type": "object", + "properties": { + "PieChartAggregatedFieldWells": { + "$ref": "#/definitions/PieChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "PieChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "PieChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/PieChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "PivotFieldSortOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "SortBy": { + "$ref": "#/definitions/PivotTableSortBy" + } + }, + "required": [ + "FieldId", + "SortBy" + ], + "additionalProperties": false + }, + "PivotTableAggregatedFieldWells": { + "type": "object", + "properties": { + "Rows": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 40, + "minItems": 0 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 40, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 40, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableCellConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TextFormat": { + "$ref": "#/definitions/TextConditionalFormat" + }, + "Scope": { + "$ref": "#/definitions/PivotTableConditionalFormattingScope" + }, + "Scopes": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableConditionalFormattingScope" + }, + "maxItems": 3, + "minItems": 0 + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "PivotTableConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingOption": { + "type": "object", + "properties": { + "Cell": { + "$ref": "#/definitions/PivotTableCellConditionalFormatting" + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingScope": { + "type": "object", + "properties": { + "Role": { + "$ref": "#/definitions/PivotTableConditionalFormattingScopeRole" + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingScopeRole": { + "type": "string", + "enum": [ + "FIELD", + "FIELD_TOTAL", + "GRAND_TOTAL" + ] + }, + "PivotTableConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/PivotTableFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/PivotTableSortConfiguration" + }, + "TableOptions": { + "$ref": "#/definitions/PivotTableOptions" + }, + "TotalOptions": { + "$ref": "#/definitions/PivotTableTotalOptions" + }, + "FieldOptions": { + "$ref": "#/definitions/PivotTableFieldOptions" + }, + "PaginatedReportOptions": { + "$ref": "#/definitions/PivotTablePaginatedReportOptions" + } + }, + "additionalProperties": false + }, + "PivotTableDataPathOption": { + "type": "object", + "properties": { + "DataPathList": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "DataPathList" + ], + "additionalProperties": false + }, + "PivotTableDataPathType": { + "type": "string", + "enum": [ + "HIERARCHY_ROWS_LAYOUT_COLUMN", + "MULTIPLE_ROW_METRICS_COLUMN", + "EMPTY_COLUMN_HEADER", + "COUNT_METRIC_COLUMN" + ] + }, + "PivotTableFieldCollapseState": { + "type": "string", + "enum": [ + "COLLAPSED", + "EXPANDED" + ] + }, + "PivotTableFieldCollapseStateOption": { + "type": "object", + "properties": { + "Target": { + "$ref": "#/definitions/PivotTableFieldCollapseStateTarget" + }, + "State": { + "$ref": "#/definitions/PivotTableFieldCollapseState" + } + }, + "required": [ + "Target" + ], + "additionalProperties": false + }, + "PivotTableFieldCollapseStateTarget": { + "type": "object", + "properties": { + "FieldId": { + "type": "string" + }, + "FieldDataPathValues": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableFieldOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "CustomLabel": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "PivotTableFieldOptions": { + "type": "object", + "properties": { + "SelectedFieldOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "DataPathOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableDataPathOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "CollapseStateOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldCollapseStateOption" + } + } + }, + "additionalProperties": false + }, + "PivotTableFieldSubtotalOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "PivotTableFieldWells": { + "type": "object", + "properties": { + "PivotTableAggregatedFieldWells": { + "$ref": "#/definitions/PivotTableAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "PivotTableMetricPlacement": { + "type": "string", + "enum": [ + "ROW", + "COLUMN" + ] + }, + "PivotTableOptions": { + "type": "object", + "properties": { + "MetricPlacement": { + "$ref": "#/definitions/PivotTableMetricPlacement" + }, + "SingleMetricVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ColumnNamesVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ToggleButtonsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ColumnHeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowHeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "CellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowFieldNamesStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowAlternateColorOptions": { + "$ref": "#/definitions/RowAlternateColorOptions" + }, + "CollapsedRowDimensionsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "RowsLayout": { + "$ref": "#/definitions/PivotTableRowsLayout" + }, + "RowsLabelOptions": { + "$ref": "#/definitions/PivotTableRowsLabelOptions" + }, + "DefaultCellWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "PivotTablePaginatedReportOptions": { + "type": "object", + "properties": { + "VerticalOverflowVisibility": { + "$ref": "#/definitions/Visibility" + }, + "OverflowColumnHeaderVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "PivotTableRowsLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CustomLabel": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "PivotTableRowsLayout": { + "type": "string", + "enum": [ + "TABULAR", + "HIERARCHY" + ] + }, + "PivotTableSortBy": { + "type": "object", + "properties": { + "Field": { + "$ref": "#/definitions/FieldSort" + }, + "Column": { + "$ref": "#/definitions/ColumnSort" + }, + "DataPath": { + "$ref": "#/definitions/DataPathSort" + } + }, + "additionalProperties": false + }, + "PivotTableSortConfiguration": { + "type": "object", + "properties": { + "FieldSortOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotFieldSortOptions" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableSubtotalLevel": { + "type": "string", + "enum": [ + "ALL", + "CUSTOM", + "LAST" + ] + }, + "PivotTableTotalOptions": { + "type": "object", + "properties": { + "RowSubtotalOptions": { + "$ref": "#/definitions/SubtotalOptions" + }, + "ColumnSubtotalOptions": { + "$ref": "#/definitions/SubtotalOptions" + }, + "RowTotalOptions": { + "$ref": "#/definitions/PivotTotalOptions" + }, + "ColumnTotalOptions": { + "$ref": "#/definitions/PivotTotalOptions" + } + }, + "additionalProperties": false + }, + "PivotTableVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/PivotTableConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/PivotTableConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "PivotTotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TotalAggregationOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TotalAggregationOption" + }, + "maxItems": 200, + "minItems": 0 + }, + "Placement": { + "$ref": "#/definitions/TableTotalsPlacement" + }, + "ScrollStatus": { + "$ref": "#/definitions/TableTotalsScrollStatus" + }, + "CustomLabel": { + "type": "string" + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "ValueCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "MetricHeaderCellStyle": { + "$ref": "#/definitions/TableCellStyle" + } + }, + "additionalProperties": false + }, + "PredefinedHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 1 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "Columns", + "HierarchyId" + ], + "additionalProperties": false + }, + "PrimaryValueDisplayType": { + "type": "string", + "enum": [ + "HIDDEN", + "COMPARISON", + "ACTUAL" + ] + }, + "ProgressBarOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "RadarChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Color": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "RadarChartAreaStyleSettings": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "RadarChartAxesRangeScale": { + "type": "string", + "enum": [ + "AUTO", + "INDEPENDENT", + "SHARED" + ] + }, + "RadarChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/RadarChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/RadarChartSortConfiguration" + }, + "Shape": { + "$ref": "#/definitions/RadarChartShape" + }, + "BaseSeriesSettings": { + "$ref": "#/definitions/RadarChartSeriesSettings" + }, + "StartAngle": { + "type": "number", + "maximum": 360, + "minimum": -360 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "AlternateBandColorsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AlternateBandEvenColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "AlternateBandOddColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "AxesRangeScale": { + "$ref": "#/definitions/RadarChartAxesRangeScale" + } + }, + "additionalProperties": false + }, + "RadarChartFieldWells": { + "type": "object", + "properties": { + "RadarChartAggregatedFieldWells": { + "$ref": "#/definitions/RadarChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "RadarChartSeriesSettings": { + "type": "object", + "properties": { + "AreaStyleSettings": { + "$ref": "#/definitions/RadarChartAreaStyleSettings" + } + }, + "additionalProperties": false + }, + "RadarChartShape": { + "type": "string", + "enum": [ + "CIRCLE", + "POLYGON" + ] + }, + "RadarChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "RadarChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/RadarChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "RangeEndsLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "ReferenceLine": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "DataConfiguration": { + "$ref": "#/definitions/ReferenceLineDataConfiguration" + }, + "StyleConfiguration": { + "$ref": "#/definitions/ReferenceLineStyleConfiguration" + }, + "LabelConfiguration": { + "$ref": "#/definitions/ReferenceLineLabelConfiguration" + } + }, + "required": [ + "DataConfiguration" + ], + "additionalProperties": false + }, + "ReferenceLineCustomLabelConfiguration": { + "type": "object", + "properties": { + "CustomLabel": { + "type": "string", + "pattern": ".*\\S.*" + } + }, + "required": [ + "CustomLabel" + ], + "additionalProperties": false + }, + "ReferenceLineDataConfiguration": { + "type": "object", + "properties": { + "StaticConfiguration": { + "$ref": "#/definitions/ReferenceLineStaticDataConfiguration" + }, + "DynamicConfiguration": { + "$ref": "#/definitions/ReferenceLineDynamicDataConfiguration" + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "SeriesType": { + "$ref": "#/definitions/ReferenceLineSeriesType" + } + }, + "additionalProperties": false + }, + "ReferenceLineDynamicDataConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "MeasureAggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "Calculation": { + "$ref": "#/definitions/NumericalAggregationFunction" + } + }, + "required": [ + "Calculation", + "Column" + ], + "additionalProperties": false + }, + "ReferenceLineLabelConfiguration": { + "type": "object", + "properties": { + "ValueLabelConfiguration": { + "$ref": "#/definitions/ReferenceLineValueLabelConfiguration" + }, + "CustomLabelConfiguration": { + "$ref": "#/definitions/ReferenceLineCustomLabelConfiguration" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "FontColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "HorizontalPosition": { + "$ref": "#/definitions/ReferenceLineLabelHorizontalPosition" + }, + "VerticalPosition": { + "$ref": "#/definitions/ReferenceLineLabelVerticalPosition" + } + }, + "additionalProperties": false + }, + "ReferenceLineLabelHorizontalPosition": { + "type": "string", + "enum": [ + "LEFT", + "CENTER", + "RIGHT" + ] + }, + "ReferenceLineLabelVerticalPosition": { + "type": "string", + "enum": [ + "ABOVE", + "BELOW" + ] + }, + "ReferenceLinePatternType": { + "type": "string", + "enum": [ + "SOLID", + "DASHED", + "DOTTED" + ] + }, + "ReferenceLineSeriesType": { + "type": "string", + "enum": [ + "BAR", + "LINE" + ] + }, + "ReferenceLineStaticDataConfiguration": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "ReferenceLineStyleConfiguration": { + "type": "object", + "properties": { + "Pattern": { + "$ref": "#/definitions/ReferenceLinePatternType" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "ReferenceLineValueLabelConfiguration": { + "type": "object", + "properties": { + "RelativePosition": { + "$ref": "#/definitions/ReferenceLineValueLabelRelativePosition" + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ReferenceLineValueLabelRelativePosition": { + "type": "string", + "enum": [ + "BEFORE_CUSTOM_LABEL", + "AFTER_CUSTOM_LABEL" + ] + }, + "RelativeDateTimeControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "RelativeDateType": { + "type": "string", + "enum": [ + "PREVIOUS", + "THIS", + "LAST", + "NOW", + "NEXT" + ] + }, + "RelativeDatesFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AnchorDateConfiguration": { + "$ref": "#/definitions/AnchorDateConfiguration" + }, + "MinimumGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "RelativeDateType": { + "$ref": "#/definitions/RelativeDateType" + }, + "RelativeDateValue": { + "type": "number", + "default": null + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + }, + "ExcludePeriodConfiguration": { + "$ref": "#/definitions/ExcludePeriodConfiguration" + } + }, + "required": [ + "AnchorDateConfiguration", + "Column", + "FilterId", + "NullOption", + "RelativeDateType", + "TimeGranularity" + ], + "additionalProperties": false + }, + "RelativeFontSize": { + "type": "string", + "enum": [ + "EXTRA_SMALL", + "SMALL", + "MEDIUM", + "LARGE", + "EXTRA_LARGE" + ] + }, + "ResizeOption": { + "type": "string", + "enum": [ + "FIXED", + "RESPONSIVE" + ] + }, + "ResourcePermission": { + "type": "object", + "properties": { + "Principal": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Actions": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1 + } + }, + "required": [ + "Actions", + "Principal" + ], + "additionalProperties": false + }, + "ResourceStatus": { + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "CREATION_SUCCESSFUL", + "CREATION_FAILED", + "UPDATE_IN_PROGRESS", + "UPDATE_SUCCESSFUL", + "UPDATE_FAILED", + "DELETED" + ] + }, + "RollingDateConfiguration": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "RowAlternateColorOptions": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "RowAlternateColors": { + "type": "array", + "items": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "maxItems": 1, + "minItems": 0 + }, + "UsePrimaryBackgroundColor": { + "$ref": "#/definitions/WidgetStatus" + } + }, + "additionalProperties": false + }, + "SameSheetTargetVisualConfiguration": { + "type": "object", + "properties": { + "TargetVisuals": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "maxItems": 50, + "minItems": 1 + }, + "TargetVisualOptions": { + "$ref": "#/definitions/TargetVisualOptions" + } + }, + "additionalProperties": false + }, + "SankeyDiagramAggregatedFieldWells": { + "type": "object", + "properties": { + "Source": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Destination": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Weight": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "SankeyDiagramChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/SankeyDiagramFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/SankeyDiagramSortConfiguration" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + } + }, + "additionalProperties": false + }, + "SankeyDiagramFieldWells": { + "type": "object", + "properties": { + "SankeyDiagramAggregatedFieldWells": { + "$ref": "#/definitions/SankeyDiagramAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "SankeyDiagramSortConfiguration": { + "type": "object", + "properties": { + "WeightSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SourceItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "DestinationItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "SankeyDiagramVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/SankeyDiagramChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ScatterPlotCategoricallyAggregatedFieldWells": { + "type": "object", + "properties": { + "XAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "YAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Label": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ScatterPlotConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/ScatterPlotFieldWells" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "YAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "YAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "ScatterPlotFieldWells": { + "type": "object", + "properties": { + "ScatterPlotCategoricallyAggregatedFieldWells": { + "$ref": "#/definitions/ScatterPlotCategoricallyAggregatedFieldWells" + }, + "ScatterPlotUnaggregatedFieldWells": { + "$ref": "#/definitions/ScatterPlotUnaggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "ScatterPlotUnaggregatedFieldWells": { + "type": "object", + "properties": { + "XAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "YAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Label": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ScatterPlotVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/ScatterPlotConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ScrollBarOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "VisibleRange": { + "$ref": "#/definitions/VisibleRangeOptions" + } + }, + "additionalProperties": false + }, + "SecondaryValueOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "SectionAfterPageBreak": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/SectionPageBreakStatus" + } + }, + "additionalProperties": false + }, + "SectionBasedLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "PaperCanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutPaperCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "SectionBasedLayoutConfiguration": { + "type": "object", + "properties": { + "HeaderSections": { + "type": "array", + "items": { + "$ref": "#/definitions/HeaderFooterSectionConfiguration" + }, + "maxItems": 1, + "minItems": 0 + }, + "BodySections": { + "type": "array", + "items": { + "$ref": "#/definitions/BodySectionConfiguration" + }, + "maxItems": 28, + "minItems": 0 + }, + "FooterSections": { + "type": "array", + "items": { + "$ref": "#/definitions/HeaderFooterSectionConfiguration" + }, + "maxItems": 1, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutCanvasSizeOptions" + } + }, + "required": [ + "BodySections", + "CanvasSizeOptions", + "FooterSections", + "HeaderSections" + ], + "additionalProperties": false + }, + "SectionBasedLayoutPaperCanvasSizeOptions": { + "type": "object", + "properties": { + "PaperSize": { + "$ref": "#/definitions/PaperSize" + }, + "PaperOrientation": { + "$ref": "#/definitions/PaperOrientation" + }, + "PaperMargin": { + "$ref": "#/definitions/Spacing" + } + }, + "additionalProperties": false + }, + "SectionLayoutConfiguration": { + "type": "object", + "properties": { + "FreeFormLayout": { + "$ref": "#/definitions/FreeFormSectionLayoutConfiguration" + } + }, + "required": [ + "FreeFormLayout" + ], + "additionalProperties": false + }, + "SectionPageBreakConfiguration": { + "type": "object", + "properties": { + "After": { + "$ref": "#/definitions/SectionAfterPageBreak" + } + }, + "additionalProperties": false + }, + "SectionPageBreakStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "SectionStyle": { + "type": "object", + "properties": { + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Padding": { + "$ref": "#/definitions/Spacing" + } + }, + "additionalProperties": false + }, + "SelectAllValueOptions": { + "type": "string", + "enum": [ + "ALL_VALUES" + ] + }, + "SelectedFieldOptions": { + "type": "string", + "enum": [ + "ALL_FIELDS" + ] + }, + "SelectedSheetsFilterScopeConfiguration": { + "type": "object", + "properties": { + "SheetVisualScopingConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetVisualScopingConfiguration" + }, + "maxItems": 50, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "SelectedTooltipType": { + "type": "string", + "enum": [ + "BASIC", + "DETAILED" + ] + }, + "SeriesItem": { + "type": "object", + "properties": { + "FieldSeriesItem": { + "$ref": "#/definitions/FieldSeriesItem" + }, + "DataFieldSeriesItem": { + "$ref": "#/definitions/DataFieldSeriesItem" + } + }, + "additionalProperties": false + }, + "SetParameterValueConfiguration": { + "type": "object", + "properties": { + "DestinationParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "Value": { + "$ref": "#/definitions/DestinationParameterValueConfiguration" + } + }, + "required": [ + "DestinationParameterName", + "Value" + ], + "additionalProperties": false + }, + "ShapeConditionalFormat": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "required": [ + "BackgroundColor" + ], + "additionalProperties": false + }, + "Sheet": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SheetContentType": { + "type": "string", + "enum": [ + "PAGINATED", + "INTERACTIVE" + ] + }, + "SheetControlDateTimePickerType": { + "type": "string", + "enum": [ + "SINGLE_VALUED", + "DATE_RANGE" + ] + }, + "SheetControlInfoIconLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "InfoIconText": { + "type": "string", + "maxLength": 100, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SheetControlLayout": { + "type": "object", + "properties": { + "Configuration": { + "$ref": "#/definitions/SheetControlLayoutConfiguration" + } + }, + "required": [ + "Configuration" + ], + "additionalProperties": false + }, + "SheetControlLayoutConfiguration": { + "type": "object", + "properties": { + "GridLayout": { + "$ref": "#/definitions/GridLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "SheetControlListType": { + "type": "string", + "enum": [ + "MULTI_SELECT", + "SINGLE_SELECT" + ] + }, + "SheetControlSliderType": { + "type": "string", + "enum": [ + "SINGLE_POINT", + "RANGE" + ] + }, + "SheetControlsOption": { + "type": "object", + "properties": { + "VisibilityState": { + "$ref": "#/definitions/DashboardUIState" + } + }, + "additionalProperties": false + }, + "SheetDefinition": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "Description": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ParameterControls": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterControl" + }, + "maxItems": 200, + "minItems": 0 + }, + "FilterControls": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterControl" + }, + "maxItems": 200, + "minItems": 0 + }, + "Visuals": { + "type": "array", + "items": { + "$ref": "#/definitions/Visual" + }, + "maxItems": 50, + "minItems": 0 + }, + "TextBoxes": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetTextBox" + }, + "maxItems": 100, + "minItems": 0 + }, + "Layouts": { + "type": "array", + "items": { + "$ref": "#/definitions/Layout" + }, + "maxItems": 1, + "minItems": 1 + }, + "SheetControlLayouts": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetControlLayout" + }, + "maxItems": 1, + "minItems": 0 + }, + "ContentType": { + "$ref": "#/definitions/SheetContentType" + } + }, + "required": [ + "SheetId" + ], + "additionalProperties": false + }, + "SheetElementConfigurationOverrides": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "SheetElementRenderingRule": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "ConfigurationOverrides": { + "$ref": "#/definitions/SheetElementConfigurationOverrides" + } + }, + "required": [ + "ConfigurationOverrides", + "Expression" + ], + "additionalProperties": false + }, + "SheetLayoutElementMaximizationOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "SheetTextBox": { + "type": "object", + "properties": { + "SheetTextBoxId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Content": { + "type": "string", + "maxLength": 150000, + "minLength": 0 + } + }, + "required": [ + "SheetTextBoxId" + ], + "additionalProperties": false + }, + "SheetVisualScopingConfiguration": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Scope": { + "$ref": "#/definitions/FilterVisualScope" + }, + "VisualIds": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "maxItems": 50, + "minItems": 0 + } + }, + "required": [ + "Scope", + "SheetId" + ], + "additionalProperties": false + }, + "ShortFormatText": { + "type": "object", + "properties": { + "PlainText": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "RichText": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SimpleAttributeAggregationFunction": { + "type": "string", + "enum": [ + "UNIQUE_VALUE" + ] + }, + "SimpleClusterMarker": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "SimpleNumericalAggregationFunction": { + "type": "string", + "enum": [ + "SUM", + "AVERAGE", + "MIN", + "MAX", + "COUNT", + "DISTINCT_COUNT", + "VAR", + "VARP", + "STDEV", + "STDEVP", + "MEDIAN" + ] + }, + "SimpleTotalAggregationFunction": { + "type": "string", + "enum": [ + "DEFAULT", + "SUM", + "AVERAGE", + "MIN", + "MAX", + "NONE" + ] + }, + "SliderControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "SmallMultiplesAxisPlacement": { + "type": "string", + "enum": [ + "OUTSIDE", + "INSIDE" + ] + }, + "SmallMultiplesAxisProperties": { + "type": "object", + "properties": { + "Scale": { + "$ref": "#/definitions/SmallMultiplesAxisScale" + }, + "Placement": { + "$ref": "#/definitions/SmallMultiplesAxisPlacement" + } + }, + "additionalProperties": false + }, + "SmallMultiplesAxisScale": { + "type": "string", + "enum": [ + "SHARED", + "INDEPENDENT" + ] + }, + "SmallMultiplesOptions": { + "type": "object", + "properties": { + "MaxVisibleRows": { + "type": "number", + "maximum": 10, + "minimum": 1 + }, + "MaxVisibleColumns": { + "type": "number", + "maximum": 10, + "minimum": 1 + }, + "PanelConfiguration": { + "$ref": "#/definitions/PanelConfiguration" + }, + "XAxis": { + "$ref": "#/definitions/SmallMultiplesAxisProperties" + }, + "YAxis": { + "$ref": "#/definitions/SmallMultiplesAxisProperties" + } + }, + "additionalProperties": false + }, + "SortDirection": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + }, + "Spacing": { + "type": "object", + "properties": { + "Top": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Bottom": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Left": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Right": { + "type": "string", + "description": "String based length that is composed of value and unit" + } + }, + "additionalProperties": false + }, + "SpecialValue": { + "type": "string", + "enum": [ + "EMPTY", + "NULL", + "OTHER" + ] + }, + "StringDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "StringFormatConfiguration": { + "type": "object", + "properties": { + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + }, + "NumericFormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "StringParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*" + }, + "Values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "Name", + "Values" + ], + "additionalProperties": false + }, + "StringParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/StringDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/StringValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "StringValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "string" + } + }, + "additionalProperties": false + }, + "StyledCellType": { + "type": "string", + "enum": [ + "TOTAL", + "METRIC_HEADER", + "VALUE" + ] + }, + "SubtotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "CustomLabel": { + "type": "string" + }, + "FieldLevel": { + "$ref": "#/definitions/PivotTableSubtotalLevel" + }, + "FieldLevelOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldSubtotalOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "ValueCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "MetricHeaderCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "StyleTargets": { + "type": "array", + "items": { + "$ref": "#/definitions/TableStyleTarget" + }, + "maxItems": 3, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableBorderOptions": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Thickness": { + "type": "number", + "maximum": 4, + "minimum": 1 + }, + "Style": { + "$ref": "#/definitions/TableBorderStyle" + } + }, + "additionalProperties": false + }, + "TableBorderStyle": { + "type": "string", + "enum": [ + "NONE", + "SOLID" + ] + }, + "TableCellConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TextFormat": { + "$ref": "#/definitions/TextConditionalFormat" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "TableCellImageScalingConfiguration": { + "type": "string", + "enum": [ + "FIT_TO_CELL_HEIGHT", + "FIT_TO_CELL_WIDTH", + "DO_NOT_SCALE" + ] + }, + "TableCellImageSizingConfiguration": { + "type": "object", + "properties": { + "TableCellImageScalingConfiguration": { + "$ref": "#/definitions/TableCellImageScalingConfiguration" + } + }, + "additionalProperties": false + }, + "TableCellStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "TextWrap": { + "$ref": "#/definitions/TextWrap" + }, + "HorizontalTextAlignment": { + "$ref": "#/definitions/HorizontalTextAlignment" + }, + "VerticalTextAlignment": { + "$ref": "#/definitions/VerticalTextAlignment" + }, + "BackgroundColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Height": { + "type": "number", + "maximum": 500, + "minimum": 8 + }, + "Border": { + "$ref": "#/definitions/GlobalTableBorderOptions" + } + }, + "additionalProperties": false + }, + "TableConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TableConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableConditionalFormattingOption": { + "type": "object", + "properties": { + "Cell": { + "$ref": "#/definitions/TableCellConditionalFormatting" + }, + "Row": { + "$ref": "#/definitions/TableRowConditionalFormatting" + } + }, + "additionalProperties": false + }, + "TableConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/TableFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/TableSortConfiguration" + }, + "TableOptions": { + "$ref": "#/definitions/TableOptions" + }, + "TotalOptions": { + "$ref": "#/definitions/TotalOptions" + }, + "FieldOptions": { + "$ref": "#/definitions/TableFieldOptions" + }, + "PaginatedReportOptions": { + "$ref": "#/definitions/TablePaginatedReportOptions" + }, + "TableInlineVisualizations": { + "type": "array", + "items": { + "$ref": "#/definitions/TableInlineVisualization" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableFieldCustomIconContent": { + "type": "object", + "properties": { + "Icon": { + "$ref": "#/definitions/TableFieldIconSetType" + } + }, + "additionalProperties": false + }, + "TableFieldCustomTextContent": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + } + }, + "required": [ + "FontConfiguration" + ], + "additionalProperties": false + }, + "TableFieldIconSetType": { + "type": "string", + "enum": [ + "LINK" + ] + }, + "TableFieldImageConfiguration": { + "type": "object", + "properties": { + "SizingOptions": { + "$ref": "#/definitions/TableCellImageSizingConfiguration" + } + }, + "additionalProperties": false + }, + "TableFieldLinkConfiguration": { + "type": "object", + "properties": { + "Target": { + "$ref": "#/definitions/URLTargetConfiguration" + }, + "Content": { + "$ref": "#/definitions/TableFieldLinkContentConfiguration" + } + }, + "required": [ + "Content", + "Target" + ], + "additionalProperties": false + }, + "TableFieldLinkContentConfiguration": { + "type": "object", + "properties": { + "CustomTextContent": { + "$ref": "#/definitions/TableFieldCustomTextContent" + }, + "CustomIconContent": { + "$ref": "#/definitions/TableFieldCustomIconContent" + } + }, + "additionalProperties": false + }, + "TableFieldOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "CustomLabel": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "URLStyling": { + "$ref": "#/definitions/TableFieldURLConfiguration" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "TableFieldOptions": { + "type": "object", + "properties": { + "SelectedFieldOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TableFieldOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "Order": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 200, + "minItems": 0 + }, + "PinnedFieldOptions": { + "$ref": "#/definitions/TablePinnedFieldOptions" + } + }, + "additionalProperties": false + }, + "TableFieldURLConfiguration": { + "type": "object", + "properties": { + "LinkConfiguration": { + "$ref": "#/definitions/TableFieldLinkConfiguration" + }, + "ImageConfiguration": { + "$ref": "#/definitions/TableFieldImageConfiguration" + } + }, + "additionalProperties": false + }, + "TableFieldWells": { + "type": "object", + "properties": { + "TableAggregatedFieldWells": { + "$ref": "#/definitions/TableAggregatedFieldWells" + }, + "TableUnaggregatedFieldWells": { + "$ref": "#/definitions/TableUnaggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "TableInlineVisualization": { + "type": "object", + "properties": { + "DataBars": { + "$ref": "#/definitions/DataBarsOptions" + } + }, + "additionalProperties": false + }, + "TableOptions": { + "type": "object", + "properties": { + "Orientation": { + "$ref": "#/definitions/TableOrientation" + }, + "HeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "CellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowAlternateColorOptions": { + "$ref": "#/definitions/RowAlternateColorOptions" + } + }, + "additionalProperties": false + }, + "TableOrientation": { + "type": "string", + "enum": [ + "VERTICAL", + "HORIZONTAL" + ] + }, + "TablePaginatedReportOptions": { + "type": "object", + "properties": { + "VerticalOverflowVisibility": { + "$ref": "#/definitions/Visibility" + }, + "OverflowColumnHeaderVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TablePinnedFieldOptions": { + "type": "object", + "properties": { + "PinnedLeftFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 201, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableRowConditionalFormatting": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "TableSideBorderOptions": { + "type": "object", + "properties": { + "InnerVertical": { + "$ref": "#/definitions/TableBorderOptions" + }, + "InnerHorizontal": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Left": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Right": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Top": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Bottom": { + "$ref": "#/definitions/TableBorderOptions" + } + }, + "additionalProperties": false + }, + "TableSortConfiguration": { + "type": "object", + "properties": { + "RowSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "PaginationConfiguration": { + "$ref": "#/definitions/PaginationConfiguration" + } + }, + "additionalProperties": false + }, + "TableStyleTarget": { + "type": "object", + "properties": { + "CellType": { + "$ref": "#/definitions/StyledCellType" + } + }, + "required": [ + "CellType" + ], + "additionalProperties": false + }, + "TableTotalsPlacement": { + "type": "string", + "enum": [ + "START", + "END", + "AUTO" + ] + }, + "TableTotalsScrollStatus": { + "type": "string", + "enum": [ + "PINNED", + "SCROLLED" + ] + }, + "TableUnaggregatedFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/UnaggregatedField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/TableConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/TableConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TargetVisualOptions": { + "type": "string", + "enum": [ + "ALL_VISUALS" + ] + }, + "TextAreaControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "PlaceholderOptions": { + "$ref": "#/definitions/TextControlPlaceholderOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "TextConditionalFormat": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "TextControlPlaceholderOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TextFieldControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "PlaceholderOptions": { + "$ref": "#/definitions/TextControlPlaceholderOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "TextWrap": { + "type": "string", + "enum": [ + "NONE", + "WRAP" + ] + }, + "ThousandSeparatorOptions": { + "type": "object", + "properties": { + "Symbol": { + "$ref": "#/definitions/NumericSeparatorSymbol" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TimeBasedForecastProperties": { + "type": "object", + "properties": { + "PeriodsForward": { + "type": "number", + "maximum": 1000, + "minimum": 1 + }, + "PeriodsBackward": { + "type": "number", + "maximum": 1000, + "minimum": 0 + }, + "UpperBoundary": { + "type": "number", + "default": null + }, + "LowerBoundary": { + "type": "number", + "default": null + }, + "PredictionInterval": { + "type": "number", + "maximum": 95, + "minimum": 50 + }, + "Seasonality": { + "type": "number", + "maximum": 180, + "minimum": 1 + } + }, + "additionalProperties": false + }, + "TimeEqualityFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "string", + "format": "date-time" + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "FilterId" + ], + "additionalProperties": false + }, + "TimeGranularity": { + "type": "string", + "enum": [ + "YEAR", + "QUARTER", + "MONTH", + "WEEK", + "DAY", + "HOUR", + "MINUTE", + "SECOND", + "MILLISECOND" + ] + }, + "TimeRangeDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "RangeMinimum": { + "type": "string", + "format": "date-time" + }, + "RangeMaximum": { + "type": "string", + "format": "date-time" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "RangeMaximum", + "RangeMinimum", + "TimeGranularity" + ], + "additionalProperties": false + }, + "TimeRangeFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "IncludeMinimum": { + "type": "boolean", + "default": null + }, + "IncludeMaximum": { + "type": "boolean", + "default": null + }, + "RangeMinimumValue": { + "$ref": "#/definitions/TimeRangeFilterValue" + }, + "RangeMaximumValue": { + "$ref": "#/definitions/TimeRangeFilterValue" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + }, + "ExcludePeriodConfiguration": { + "$ref": "#/definitions/ExcludePeriodConfiguration" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "FilterId", + "NullOption" + ], + "additionalProperties": false + }, + "TimeRangeFilterValue": { + "type": "object", + "properties": { + "StaticValue": { + "type": "string", + "format": "date-time" + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + }, + "Parameter": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "TooltipItem": { + "type": "object", + "properties": { + "FieldTooltipItem": { + "$ref": "#/definitions/FieldTooltipItem" + }, + "ColumnTooltipItem": { + "$ref": "#/definitions/ColumnTooltipItem" + } + }, + "additionalProperties": false + }, + "TooltipOptions": { + "type": "object", + "properties": { + "TooltipVisibility": { + "$ref": "#/definitions/Visibility" + }, + "SelectedTooltipType": { + "$ref": "#/definitions/SelectedTooltipType" + }, + "FieldBasedTooltip": { + "$ref": "#/definitions/FieldBasedTooltip" + } + }, + "additionalProperties": false + }, + "TooltipTitleType": { + "type": "string", + "enum": [ + "NONE", + "PRIMARY_VALUE" + ] + }, + "TopBottomComputationType": { + "type": "string", + "enum": [ + "TOP", + "BOTTOM" + ] + }, + "TopBottomFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Limit": { + "type": "number", + "default": null + }, + "AggregationSortConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/AggregationSortConfiguration" + }, + "maxItems": 100, + "minItems": 0 + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "required": [ + "AggregationSortConfigurations", + "Column", + "FilterId" + ], + "additionalProperties": false + }, + "TopBottomMoversComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "MoverSize": { + "type": "number", + "default": 0, + "maximum": 20, + "minimum": 1 + }, + "SortOrder": { + "$ref": "#/definitions/TopBottomSortOrder" + }, + "Type": { + "$ref": "#/definitions/TopBottomComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "TopBottomRankedComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "ResultSize": { + "type": "number", + "default": 0, + "maximum": 20, + "minimum": 1 + }, + "Type": { + "$ref": "#/definitions/TopBottomComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "TopBottomSortOrder": { + "type": "string", + "enum": [ + "PERCENT_DIFFERENCE", + "ABSOLUTE_DIFFERENCE" + ] + }, + "TotalAggregationComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "TotalAggregationFunction": { + "type": "object", + "properties": { + "SimpleTotalAggregationFunction": { + "$ref": "#/definitions/SimpleTotalAggregationFunction" + } + }, + "additionalProperties": false + }, + "TotalAggregationOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TotalAggregationFunction": { + "$ref": "#/definitions/TotalAggregationFunction" + } + }, + "required": [ + "FieldId", + "TotalAggregationFunction" + ], + "additionalProperties": false + }, + "TotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TotalAggregationOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TotalAggregationOption" + }, + "maxItems": 200, + "minItems": 0 + }, + "Placement": { + "$ref": "#/definitions/TableTotalsPlacement" + }, + "ScrollStatus": { + "$ref": "#/definitions/TableTotalsScrollStatus" + }, + "CustomLabel": { + "type": "string" + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + } + }, + "additionalProperties": false + }, + "TreeMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Groups": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Sizes": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TreeMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/TreeMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/TreeMapSortConfiguration" + }, + "GroupLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SizeLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorScale": { + "$ref": "#/definitions/ColorScale" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + } + }, + "additionalProperties": false + }, + "TreeMapFieldWells": { + "type": "object", + "properties": { + "TreeMapAggregatedFieldWells": { + "$ref": "#/definitions/TreeMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "TreeMapSortConfiguration": { + "type": "object", + "properties": { + "TreeMapSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "TreeMapGroupItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "TreeMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/TreeMapConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "TrendArrowOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "URLTargetConfiguration": { + "type": "string", + "enum": [ + "NEW_TAB", + "NEW_WINDOW", + "SAME_TAB" + ] + }, + "UnaggregatedField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "FormatConfiguration": { + "$ref": "#/definitions/FormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "UniqueValuesComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "ValidationStrategy": { + "type": "object", + "properties": { + "Mode": { + "$ref": "#/definitions/ValidationStrategyMode" + } + }, + "required": [ + "Mode" + ], + "additionalProperties": false + }, + "ValidationStrategyMode": { + "type": "string", + "enum": [ + "STRICT", + "LENIENT" + ] + }, + "ValueWhenUnsetOption": { + "type": "string", + "enum": [ + "RECOMMENDED_VALUE", + "NULL" + ] + }, + "VerticalTextAlignment": { + "type": "string", + "enum": [ + "TOP", + "MIDDLE", + "BOTTOM", + "AUTO" + ] + }, + "Visibility": { + "type": "string", + "enum": [ + "HIDDEN", + "VISIBLE" + ] + }, + "VisibleRangeOptions": { + "type": "object", + "properties": { + "PercentRange": { + "$ref": "#/definitions/PercentVisibleRange" + } + }, + "additionalProperties": false + }, + "Visual": { + "type": "object", + "properties": { + "TableVisual": { + "$ref": "#/definitions/TableVisual" + }, + "PivotTableVisual": { + "$ref": "#/definitions/PivotTableVisual" + }, + "BarChartVisual": { + "$ref": "#/definitions/BarChartVisual" + }, + "KPIVisual": { + "$ref": "#/definitions/KPIVisual" + }, + "PieChartVisual": { + "$ref": "#/definitions/PieChartVisual" + }, + "GaugeChartVisual": { + "$ref": "#/definitions/GaugeChartVisual" + }, + "LineChartVisual": { + "$ref": "#/definitions/LineChartVisual" + }, + "HeatMapVisual": { + "$ref": "#/definitions/HeatMapVisual" + }, + "TreeMapVisual": { + "$ref": "#/definitions/TreeMapVisual" + }, + "GeospatialMapVisual": { + "$ref": "#/definitions/GeospatialMapVisual" + }, + "FilledMapVisual": { + "$ref": "#/definitions/FilledMapVisual" + }, + "FunnelChartVisual": { + "$ref": "#/definitions/FunnelChartVisual" + }, + "ScatterPlotVisual": { + "$ref": "#/definitions/ScatterPlotVisual" + }, + "ComboChartVisual": { + "$ref": "#/definitions/ComboChartVisual" + }, + "BoxPlotVisual": { + "$ref": "#/definitions/BoxPlotVisual" + }, + "WaterfallVisual": { + "$ref": "#/definitions/WaterfallVisual" + }, + "HistogramVisual": { + "$ref": "#/definitions/HistogramVisual" + }, + "WordCloudVisual": { + "$ref": "#/definitions/WordCloudVisual" + }, + "InsightVisual": { + "$ref": "#/definitions/InsightVisual" + }, + "SankeyDiagramVisual": { + "$ref": "#/definitions/SankeyDiagramVisual" + }, + "CustomContentVisual": { + "$ref": "#/definitions/CustomContentVisual" + }, + "EmptyVisual": { + "$ref": "#/definitions/EmptyVisual" + }, + "RadarChartVisual": { + "$ref": "#/definitions/RadarChartVisual" + } + }, + "additionalProperties": false + }, + "VisualAxisSortOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "VisualCustomAction": { + "type": "object", + "properties": { + "CustomActionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "Trigger": { + "$ref": "#/definitions/VisualCustomActionTrigger" + }, + "ActionOperations": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomActionOperation" + }, + "maxItems": 2, + "minItems": 1 + } + }, + "required": [ + "ActionOperations", + "CustomActionId", + "Name", + "Trigger" + ], + "additionalProperties": false + }, + "VisualCustomActionOperation": { + "type": "object", + "properties": { + "FilterOperation": { + "$ref": "#/definitions/CustomActionFilterOperation" + }, + "NavigationOperation": { + "$ref": "#/definitions/CustomActionNavigationOperation" + }, + "URLOperation": { + "$ref": "#/definitions/CustomActionURLOperation" + }, + "SetParametersOperation": { + "$ref": "#/definitions/CustomActionSetParametersOperation" + } + }, + "additionalProperties": false + }, + "VisualCustomActionTrigger": { + "type": "string", + "enum": [ + "DATA_POINT_CLICK", + "DATA_POINT_MENU" + ] + }, + "VisualMenuOption": { + "type": "object", + "properties": { + "AvailabilityStatus": { + "$ref": "#/definitions/DashboardBehavior" + } + }, + "additionalProperties": false + }, + "VisualPalette": { + "type": "object", + "properties": { + "ChartColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "ColorMap": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathColor" + }, + "maxItems": 5000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "VisualSubtitleLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FormatText": { + "$ref": "#/definitions/LongFormatText" + } + }, + "additionalProperties": false + }, + "VisualTitleLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FormatText": { + "$ref": "#/definitions/ShortFormatText" + } + }, + "additionalProperties": false + }, + "WaterfallChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Breakdowns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WaterfallChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/WaterfallChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/WaterfallChartSortConfiguration" + }, + "WaterfallChartOptions": { + "$ref": "#/definitions/WaterfallChartOptions" + }, + "CategoryAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "CategoryAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "WaterfallChartFieldWells": { + "type": "object", + "properties": { + "WaterfallChartAggregatedFieldWells": { + "$ref": "#/definitions/WaterfallChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "WaterfallChartOptions": { + "type": "object", + "properties": { + "TotalBarLabel": { + "type": "string" + } + }, + "additionalProperties": false + }, + "WaterfallChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "BreakdownItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "WaterfallVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/WaterfallChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "WhatIfPointScenario": { + "type": "object", + "properties": { + "Date": { + "type": "string", + "format": "date-time" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Date", + "Value" + ], + "additionalProperties": false + }, + "WhatIfRangeScenario": { + "type": "object", + "properties": { + "StartDate": { + "type": "string", + "format": "date-time" + }, + "EndDate": { + "type": "string", + "format": "date-time" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "EndDate", + "StartDate", + "Value" + ], + "additionalProperties": false + }, + "WidgetStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "WordCloudAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 10, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WordCloudChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/WordCloudFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/WordCloudSortConfiguration" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "WordCloudOptions": { + "$ref": "#/definitions/WordCloudOptions" + } + }, + "additionalProperties": false + }, + "WordCloudCloudLayout": { + "type": "string", + "enum": [ + "FLUID", + "NORMAL" + ] + }, + "WordCloudFieldWells": { + "type": "object", + "properties": { + "WordCloudAggregatedFieldWells": { + "$ref": "#/definitions/WordCloudAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "WordCloudOptions": { + "type": "object", + "properties": { + "WordOrientation": { + "$ref": "#/definitions/WordCloudWordOrientation" + }, + "WordScaling": { + "$ref": "#/definitions/WordCloudWordScaling" + }, + "CloudLayout": { + "$ref": "#/definitions/WordCloudCloudLayout" + }, + "WordCasing": { + "$ref": "#/definitions/WordCloudWordCasing" + }, + "WordPadding": { + "$ref": "#/definitions/WordCloudWordPadding" + }, + "MaximumStringLength": { + "type": "number", + "maximum": 100, + "minimum": 1 + } + }, + "additionalProperties": false + }, + "WordCloudSortConfiguration": { + "type": "object", + "properties": { + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WordCloudVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/WordCloudChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "WordCloudWordCasing": { + "type": "string", + "enum": [ + "LOWER_CASE", + "EXISTING_CASE" + ] + }, + "WordCloudWordOrientation": { + "type": "string", + "enum": [ + "HORIZONTAL", + "HORIZONTAL_AND_VERTICAL" + ] + }, + "WordCloudWordPadding": { + "type": "string", + "enum": [ + "NONE", + "SMALL", + "MEDIUM", + "LARGE" + ] + }, + "WordCloudWordScaling": { + "type": "string", + "enum": [ + "EMPHASIZE", + "NORMAL" + ] + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "DashboardId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DashboardPublishOptions": { + "$ref": "#/definitions/DashboardPublishOptions" + }, + "Definition": { + "$ref": "#/definitions/DashboardVersionDefinition" + }, + "LastPublishedTime": { + "type": "string", + "format": "date-time" + }, + "LastUpdatedTime": { + "type": "string", + "format": "date-time" + }, + "LinkEntities": { + "type": "array", + "items": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^arn:aws[\\w\\-]*:quicksight:[\\w\\-]+:\\d+:analysis/[\\w\\-]{1,512}" + }, + "maxItems": 5, + "minItems": 0 + }, + "LinkSharingConfiguration": { + "$ref": "#/definitions/LinkSharingConfiguration" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Parameters": { + "$ref": "#/definitions/Parameters" + }, + "Permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePermission" + }, + "maxItems": 64, + "minItems": 1 + }, + "SourceEntity": { + "$ref": "#/definitions/DashboardSourceEntity" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1 + }, + "ThemeArn": { + "type": "string" + }, + "ValidationStrategy": { + "$ref": "#/definitions/ValidationStrategy" + }, + "Version": { + "$ref": "#/definitions/DashboardVersion" + }, + "VersionDescription": { + "type": "string", + "maxLength": 512, + "minLength": 1 + } + }, + "required": [ + "AwsAccountId", + "DashboardId", + "Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastPublishedTime", + "/properties/LastUpdatedTime", + "/properties/Version" + ], + "writeOnlyProperties": [ + "/properties/DashboardPublishOptions", + "/properties/Definition", + "/properties/LinkSharingConfiguration", + "/properties/Parameters", + "/properties/SourceEntity", + "/properties/ThemeArn", + "/properties/VersionDescription", + "/properties/ValidationStrategy" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/DashboardId" + ], + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/DashboardId" + ], + "handlers": { + "create": { + "permissions": [ + "quicksight:DescribeDashboard", + "quicksight:DescribeDashboardPermissions", + "quicksight:CreateDashboard", + "quicksight:DescribeTemplate", + "quicksight:DescribeTheme", + "quicksight:PassDataSet", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeDashboard", + "quicksight:DescribeDashboardPermissions", + "quicksight:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "quicksight:DescribeDashboard", + "quicksight:DescribeDashboardPermissions", + "quicksight:UpdateDashboard", + "quicksight:UpdateDashboardLinks", + "quicksight:UpdateDashboardPermissions", + "quicksight:UpdateDashboardPublishedVersion", + "quicksight:DescribeTemplate", + "quicksight:DescribeTheme", + "quicksight:PassDataSet", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "quicksight:DescribeDashboard", + "quicksight:DeleteDashboard" + ] + }, + "list": { + "permissions": [ + "quicksight:ListDashboards" + ], + "handlerSchema": { + "properties": { + "AwsAccountId": { + "$ref": "resource-schema.json#/properties/AwsAccountId" + } + }, + "required": [ + "AwsAccountId" + ] + } + } + }, + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-quicksight" +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/dataset.json b/internal/aws/cfn/schemas/aws/quicksight/dataset.json new file mode 100644 index 00000000..f2a303e7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/dataset.json @@ -0,0 +1,1444 @@ +{ + "typeName": "AWS::QuickSight::DataSet", + "description": "Definition of the AWS::QuickSight::DataSet Resource Type.", + "definitions": { + "CalculatedColumn": { + "type": "object", + "description": "

A calculated column for a dataset.

", + "properties": { + "ColumnId": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

A unique ID to identify a calculated column. During a dataset update, if the column ID\n of a calculated column matches that of an existing calculated column, Amazon QuickSight\n preserves the existing calculated column.

" + }, + "ColumnName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Column name.

" + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1, + "description": "

An expression that defines the calculated column.

" + } + }, + "required": [ + "ColumnId", + "ColumnName", + "Expression" + ], + "additionalProperties": false + }, + "CastColumnTypeOperation": { + "type": "object", + "description": "

A transform operation that casts a column to a different type.

", + "properties": { + "ColumnName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Column name.

" + }, + "Format": { + "type": "string", + "maxLength": 32, + "minLength": 0, + "description": "

When casting a column from string to datetime type, you can supply a string in a\n format supported by Amazon QuickSight to denote the source data format.

" + }, + "NewColumnType": { + "$ref": "#/definitions/ColumnDataType" + }, + "SubType": { + "$ref": "#/definitions/ColumnSubDataType" + } + }, + "required": [ + "ColumnName", + "NewColumnType" + ], + "additionalProperties": false + }, + "ColumnDataType": { + "type": "string", + "enum": [ + "STRING", + "INTEGER", + "DECIMAL", + "DATETIME" + ] + }, + "ColumnSubDataType": { + "type": "string", + "enum": [ + "FIXED", + "FLOAT" + ] + }, + "ColumnDescription": { + "type": "object", + "description": "

Metadata that contains a description for a column.

", + "properties": { + "Text": { + "type": "string", + "maxLength": 500, + "minLength": 0, + "description": "

The text of a description for a column.

" + } + }, + "additionalProperties": false + }, + "ColumnGroup": { + "type": "object", + "description": "

Groupings of columns that work together in certain Amazon QuickSight features. This is\n a variant type structure. For this structure to be valid, only one of the attributes can\n be non-null.

", + "properties": { + "GeoSpatialColumnGroup": { + "$ref": "#/definitions/GeoSpatialColumnGroup" + } + }, + "additionalProperties": false + }, + "ColumnLevelPermissionRule": { + "type": "object", + "properties": { + "ColumnNames": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "Principals": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 100, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "ColumnTag": { + "type": "object", + "description": "

A tag for a column in a TagColumnOperation structure. This is a\n variant type structure. For this structure to be valid, only one of the attributes can\n be non-null.

", + "properties": { + "ColumnGeographicRole": { + "$ref": "#/definitions/GeoSpatialDataRole" + }, + "ColumnDescription": { + "$ref": "#/definitions/ColumnDescription" + } + }, + "additionalProperties": false + }, + "CreateColumnsOperation": { + "type": "object", + "description": "

A transform operation that creates calculated columns. Columns created in one such\n operation form a lexical closure.

", + "properties": { + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/CalculatedColumn" + }, + "maxItems": 128, + "minItems": 1, + "description": "

Calculated columns to create.

" + } + }, + "required": [ + "Columns" + ], + "additionalProperties": false + }, + "CustomSql": { + "type": "object", + "description": "

A physical table type built from the results of the custom SQL query.

", + "properties": { + "DataSourceArn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) of the data source.

" + }, + "SqlQuery": { + "type": "string", + "maxLength": 65536, + "minLength": 1, + "description": "

The SQL query.

" + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/InputColumn" + }, + "maxItems": 2048, + "minItems": 1, + "description": "

The column schema from the SQL query result set.

" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

A display name for the SQL query result.

" + } + }, + "required": [ + "Columns", + "DataSourceArn", + "Name", + "SqlQuery" + ], + "additionalProperties": false + }, + "DataSetImportMode": { + "type": "string", + "enum": [ + "SPICE", + "DIRECT_QUERY" + ] + }, + "DatasetParameter": { + "type": "object", + "description": "

A parameter created in the dataset that could be of any one data type such as string, integer, decimal or datetime.

", + "properties": { + "StringDatasetParameter": { + "$ref": "#/definitions/StringDatasetParameter" + }, + "DecimalDatasetParameter": { + "$ref": "#/definitions/DecimalDatasetParameter" + }, + "IntegerDatasetParameter": { + "$ref": "#/definitions/IntegerDatasetParameter" + }, + "DateTimeDatasetParameter": { + "$ref": "#/definitions/DateTimeDatasetParameter" + } + }, + "additionalProperties": false + }, + "DatasetParameterId": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]+$", + "description": "

Identifier of the parameter created in the dataset.

" + }, + "DatasetParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$", + "description": "

Name of the parameter created in the dataset.

" + }, + "DatasetParameterValueType": { + "type": "string", + "enum": [ + "MULTI_VALUED", + "SINGLE_VALUED" + ], + "description": "

Every parameter value could be either a single value or multi value which helps to validate before evaluation.

" + }, + "DateTimeDatasetParameter": { + "type": "object", + "description": "

A parameter created in the dataset of date time data type.

", + "properties": { + "Id": { + "$ref": "#/definitions/DatasetParameterId" + }, + "Name": { + "$ref": "#/definitions/DatasetParameterName" + }, + "ValueType": { + "$ref": "#/definitions/DatasetParameterValueType" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "DefaultValues": { + "$ref": "#/definitions/DateTimeDatasetParameterDefaultValues" + } + }, + "required": [ + "Id", + "Name", + "ValueType" + ], + "additionalProperties": false + }, + "DateTimeDatasetParameterDefaultValues": { + "type": "object", + "description": "

List of default values defined for a given string date time parameter type. Currently only static values are supported.

", + "properties": { + "StaticValues": { + "$ref": "#/definitions/DateTimeDatasetParameterValueList", + "description": "

List of static default values defined for a given string date time parameter type.

" + } + }, + "additionalProperties": false + }, + "DateTimeDatasetParameterValueList": { + "type": "array", + "items": { + "type": "string", + "description": "

Default value defined for the dataset parameter of date time type.

" + }, + "maxItems": 32, + "minItems": 1 + }, + "DecimalDatasetParameter": { + "type": "object", + "description": "

A parameter created in the dataset of decimal data type.

", + "properties": { + "Id": { + "$ref": "#/definitions/DatasetParameterId" + }, + "Name": { + "$ref": "#/definitions/DatasetParameterName" + }, + "ValueType": { + "$ref": "#/definitions/DatasetParameterValueType" + }, + "DefaultValues": { + "$ref": "#/definitions/DecimalDatasetParameterDefaultValues" + } + }, + "required": [ + "Id", + "Name", + "ValueType" + ], + "additionalProperties": false + }, + "DecimalDatasetParameterDefaultValues": { + "type": "object", + "description": "

List of default values defined for a given decimal dataset parameter type. Currently only static values are supported.

", + "properties": { + "StaticValues": { + "$ref": "#/definitions/DecimalDatasetParameterValueList", + "description": "

List of static default values defined for a given decimal dataset parameter type.

" + } + }, + "additionalProperties": false + }, + "DecimalDatasetParameterValueList": { + "type": "array", + "items": { + "type": "number", + "description": "

Default value defined for the dataset parameter of decimal type.

" + }, + "maxItems": 32, + "minItems": 1 + }, + "IntegerDatasetParameter": { + "type": "object", + "description": "

A parameter created in the dataset of integer data type.

", + "properties": { + "Id": { + "$ref": "#/definitions/DatasetParameterId" + }, + "Name": { + "$ref": "#/definitions/DatasetParameterName" + }, + "ValueType": { + "$ref": "#/definitions/DatasetParameterValueType" + }, + "DefaultValues": { + "$ref": "#/definitions/IntegerDatasetParameterDefaultValues" + } + }, + "required": [ + "Id", + "Name", + "ValueType" + ], + "additionalProperties": false + }, + "IntegerDatasetParameterDefaultValues": { + "type": "object", + "description": "

List of default values defined for a given integer dataset parameter type. Currently only static values are supported.

", + "properties": { + "StaticValues": { + "$ref": "#/definitions/IntegerDatasetParameterValueList", + "description": "

List of static default values defined for a given integer dataset parameter type.

" + } + }, + "additionalProperties": false + }, + "IntegerDatasetParameterValueList": { + "type": "array", + "items": { + "type": "number", + "description": "

Default value defined for the dataset parameter of integer type.

" + }, + "maxItems": 32, + "minItems": 1 + }, + "StringDatasetParameter": { + "type": "object", + "description": "

A parameter created in the dataset of string data type.

", + "properties": { + "Id": { + "$ref": "#/definitions/DatasetParameterId" + }, + "Name": { + "$ref": "#/definitions/DatasetParameterName" + }, + "ValueType": { + "$ref": "#/definitions/DatasetParameterValueType" + }, + "DefaultValues": { + "$ref": "#/definitions/StringDatasetParameterDefaultValues" + } + }, + "required": [ + "Id", + "Name", + "ValueType" + ], + "additionalProperties": false + }, + "StringDatasetParameterDefaultValues": { + "type": "object", + "description": "

List of default values defined for a given string dataset parameter type. Currently only static values are supported.

", + "properties": { + "StaticValues": { + "$ref": "#/definitions/StringDatasetParameterValueList", + "description": "

List of static default values defined for a given string dataset parameter type.

" + } + }, + "additionalProperties": false + }, + "StringDatasetParameterValueList": { + "type": "array", + "items": { + "type": "string", + "description": "

Default value defined for the dataset parameter of string type.

" + }, + "maxItems": 32, + "minItems": 1 + }, + "FieldFolder": { + "type": "object", + "properties": { + "Description": { + "type": "string", + "maxLength": 500, + "minLength": 0 + }, + "Columns": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 5000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FieldFolderMap": { + "type": "object", + "patternProperties": { + ".+": { + "$ref": "#/definitions/FieldFolder" + } + }, + "additionalProperties": false + }, + "FileFormat": { + "type": "string", + "enum": [ + "CSV", + "TSV", + "CLF", + "ELF", + "XLSX", + "JSON" + ] + }, + "FilterOperation": { + "type": "object", + "description": "

A transform operation that filters rows based on a condition.

", + "properties": { + "ConditionExpression": { + "type": "string", + "maxLength": 4096, + "minLength": 1, + "description": "

An expression that must evaluate to a Boolean value. Rows for which the expression\n evaluates to true are kept in the dataset.

" + } + }, + "required": [ + "ConditionExpression" + ], + "additionalProperties": false + }, + "GeoSpatialColumnGroup": { + "type": "object", + "description": "

Geospatial column group that denotes a hierarchy.

", + "properties": { + "Columns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "maxItems": 16, + "minItems": 1, + "description": "

Columns in this hierarchy.

" + }, + "CountryCode": { + "$ref": "#/definitions/GeoSpatialCountryCode" + }, + "Name": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

A display name for the hierarchy.

" + } + }, + "required": [ + "Columns", + "Name" + ], + "additionalProperties": false + }, + "GeoSpatialCountryCode": { + "type": "string", + "enum": [ + "US" + ] + }, + "GeoSpatialDataRole": { + "type": "string", + "enum": [ + "COUNTRY", + "STATE", + "COUNTY", + "CITY", + "POSTCODE", + "LONGITUDE", + "LATITUDE", + "POLITICAL1" + ] + }, + "InputColumn": { + "type": "object", + "description": "

Metadata for a column that is used as the input of a transform operation.

", + "properties": { + "Type": { + "$ref": "#/definitions/InputColumnDataType" + }, + "SubType": { + "$ref": "#/definitions/ColumnSubDataType" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The name of this column in the underlying data source.

" + } + }, + "required": [ + "Name", + "Type" + ], + "additionalProperties": false + }, + "InputColumnDataType": { + "type": "string", + "enum": [ + "STRING", + "INTEGER", + "DECIMAL", + "DATETIME", + "BIT", + "BOOLEAN", + "JSON" + ] + }, + "RefreshConfiguration": { + "type": "object", + "description": "

Refresh Configuration.

", + "properties": { + "IncrementalRefresh": { + "$ref": "#/definitions/IncrementalRefresh" + } + }, + "additionalProperties": false + }, + "IncrementalRefresh": { + "type": "object", + "description": "

Incremental Refresh

", + "properties": { + "LookbackWindow": { + "$ref": "#/definitions/LookbackWindow" + } + }, + "additionalProperties": false + }, + "LookbackWindow": { + "type": "object", + "properties": { + "ColumnName": { + "type": "string", + "description": "

Column Name

" + }, + "Size": { + "type": "number", + "description": "

Size

", + "minimum": 1 + }, + "SizeUnit": { + "$ref": "#/definitions/SizeUnit" + } + }, + "additionalProperties": false + }, + "SizeUnit": { + "type": "string", + "enum": [ + "HOUR", + "DAY", + "WEEK" + ] + }, + "JoinInstruction": { + "type": "object", + "description": "

Join instruction.

", + "properties": { + "OnClause": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "description": "

On Clause.

" + }, + "Type": { + "$ref": "#/definitions/JoinType" + }, + "LeftJoinKeyProperties": { + "$ref": "#/definitions/JoinKeyProperties" + }, + "LeftOperand": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "[0-9a-zA-Z-]*", + "description": "

Left operand.

" + }, + "RightOperand": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "[0-9a-zA-Z-]*", + "description": "

Right operand.

" + }, + "RightJoinKeyProperties": { + "$ref": "#/definitions/JoinKeyProperties" + } + }, + "required": [ + "LeftOperand", + "OnClause", + "RightOperand", + "Type" + ], + "additionalProperties": false + }, + "JoinKeyProperties": { + "type": "object", + "properties": { + "UniqueKey": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JoinType": { + "type": "string", + "enum": [ + "INNER", + "OUTER", + "LEFT", + "RIGHT" + ] + }, + "LogicalTable": { + "type": "object", + "description": "

A logical table is a unit that joins and that data\n transformations operate on. A logical table has a source, which can be either a physical\n table or result of a join. When a logical table points to a physical table, the logical\n table acts as a mutable copy of that physical table through transform operations.

", + "properties": { + "Alias": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

A display name for the logical table.

" + }, + "DataTransforms": { + "type": "array", + "items": { + "$ref": "#/definitions/TransformOperation" + }, + "maxItems": 2048, + "minItems": 1, + "description": "

Transform operations that act on this logical table.

" + }, + "Source": { + "$ref": "#/definitions/LogicalTableSource" + } + }, + "required": [ + "Alias", + "Source" + ], + "additionalProperties": false + }, + "LogicalTableMap": { + "type": "object", + "maxProperties": 64, + "minProperties": 1, + "patternProperties": { + "[0-9a-zA-Z-]*": { + "$ref": "#/definitions/LogicalTable" + } + }, + "additionalProperties": false + }, + "LogicalTableSource": { + "type": "object", + "description": "

Information about the source of a logical table. This is a variant type structure. For\n this structure to be valid, only one of the attributes can be non-null.

", + "properties": { + "PhysicalTableId": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "[0-9a-zA-Z-]*", + "description": "

Physical table ID.

" + }, + "JoinInstruction": { + "$ref": "#/definitions/JoinInstruction" + }, + "DataSetArn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) for the dataset.

" + } + }, + "additionalProperties": false + }, + "NewDefaultValues": { + "type": "object", + "properties": { + "StringStaticValues": { + "$ref": "#/definitions/StringDatasetParameterValueList" + }, + "DecimalStaticValues": { + "$ref": "#/definitions/DecimalDatasetParameterValueList" + }, + "DateTimeStaticValues": { + "$ref": "#/definitions/DateTimeDatasetParameterValueList" + }, + "IntegerStaticValues": { + "$ref": "#/definitions/IntegerDatasetParameterValueList" + } + }, + "additionalProperties": false + }, + "OutputColumn": { + "type": "object", + "description": "

Output column.

", + "properties": { + "Type": { + "$ref": "#/definitions/ColumnDataType" + }, + "SubType": { + "$ref": "#/definitions/ColumnSubDataType" + }, + "Description": { + "type": "string", + "maxLength": 500, + "minLength": 0, + "description": "

A description for a column.

" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

A display name for the dataset.

" + } + }, + "additionalProperties": false + }, + "OverrideDatasetParameterOperation": { + "type": "object", + "description": "

A transform operation that overrides the dataset parameter values defined in another dataset.

", + "properties": { + "ParameterName": { + "$ref": "#/definitions/DatasetParameterName", + "description": "

The name of the parameter to be overridden with different values.

" + }, + "NewParameterName": { + "$ref": "#/definitions/DatasetParameterName", + "description": "

The new name for the parameter.

" + }, + "NewDefaultValues": { + "$ref": "#/definitions/NewDefaultValues", + "description": "

The new default values for the parameter.

" + } + }, + "required": [ + "ParameterName" + ], + "additionalProperties": false + }, + "PhysicalTable": { + "type": "object", + "description": "

A view of a data source that contains information about the shape of the data in the\n underlying source. This is a variant type structure. For this structure to be valid,\n only one of the attributes can be non-null.

", + "properties": { + "RelationalTable": { + "$ref": "#/definitions/RelationalTable" + }, + "CustomSql": { + "$ref": "#/definitions/CustomSql" + }, + "S3Source": { + "$ref": "#/definitions/S3Source" + } + }, + "additionalProperties": false + }, + "PhysicalTableMap": { + "type": "object", + "maxProperties": 32, + "minProperties": 0, + "patternProperties": { + "[0-9a-zA-Z-]*": { + "$ref": "#/definitions/PhysicalTable" + } + }, + "additionalProperties": false + }, + "ProjectOperation": { + "type": "object", + "description": "

A transform operation that projects columns. Operations that come after a projection\n can only refer to projected columns.

", + "properties": { + "ProjectedColumns": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 2000, + "minItems": 1, + "description": "

Projected columns.

" + } + }, + "required": [ + "ProjectedColumns" + ], + "additionalProperties": false + }, + "RelationalTable": { + "type": "object", + "description": "

A physical table type for relational data sources.

", + "properties": { + "DataSourceArn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) for the data source.

" + }, + "InputColumns": { + "type": "array", + "items": { + "$ref": "#/definitions/InputColumn" + }, + "maxItems": 2048, + "minItems": 1, + "description": "

The column schema of the table.

" + }, + "Schema": { + "type": "string", + "maxLength": 64, + "minLength": 0, + "description": "

The schema name. This name applies to certain relational database engines.

" + }, + "Catalog": { + "type": "string", + "description": "

The catalog associated with a table.

", + "maxLength": 256, + "minLength": 0 + }, + "Name": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

The name of the relational table.

" + } + }, + "required": [ + "DataSourceArn", + "InputColumns", + "Name" + ], + "additionalProperties": false + }, + "RenameColumnOperation": { + "type": "object", + "description": "

A transform operation that renames a column.

", + "properties": { + "NewColumnName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The new name for the column.

" + }, + "ColumnName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The name of the column to be renamed.

" + } + }, + "required": [ + "ColumnName", + "NewColumnName" + ], + "additionalProperties": false + }, + "ResourcePermission": { + "type": "object", + "description": "

Permission for the resource.

", + "properties": { + "Actions": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1, + "description": "

The IAM action to grant or revoke permissions on.

" + }, + "Principal": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:

\n
    \n
  • \n

    The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)

    \n
  • \n
  • \n

    The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)

    \n
  • \n
  • \n

    The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)

    \n
  • \n
" + } + }, + "required": [ + "Actions", + "Principal" + ], + "additionalProperties": false + }, + "RowLevelPermissionDataSet": { + "type": "object", + "description": "

The row-level security configuration for the dataset.

", + "properties": { + "Arn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) of the permission dataset.

" + }, + "Namespace": { + "type": "string", + "maxLength": 64, + "minLength": 0, + "pattern": "^[a-zA-Z0-9._-]*$", + "description": "

The namespace associated with the row-level permissions dataset.

" + }, + "PermissionPolicy": { + "$ref": "#/definitions/RowLevelPermissionPolicy" + }, + "FormatVersion": { + "$ref": "#/definitions/RowLevelPermissionFormatVersion" + }, + "Status": { + "$ref": "#/definitions/Status" + } + }, + "required": [ + "Arn", + "PermissionPolicy" + ], + "additionalProperties": false + }, + "RowLevelPermissionPolicy": { + "type": "string", + "enum": [ + "GRANT_ACCESS", + "DENY_ACCESS" + ] + }, + "RowLevelPermissionFormatVersion": { + "type": "string", + "enum": [ + "VERSION_1", + "VERSION_2" + ] + }, + "RowLevelPermissionTagConfiguration": { + "type": "object", + "description": "

The configuration of tags on a dataset to set row-level security.

", + "properties": { + "Status": { + "$ref": "#/definitions/Status" + }, + "TagRules": { + "type": "array", + "items": { + "$ref": "#/definitions/RowLevelPermissionTagRule" + }, + "maxItems": 50, + "minItems": 1, + "description": "

A set of rules associated with row-level security, such as the tag names and columns that they are assigned to.

" + }, + "TagRuleConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/RowLevelPermissionTagRuleConfiguration" + }, + "maxItems": 50, + "minItems": 1, + "description": "

A list of tag configuration rules to apply to a dataset. All tag configurations have the OR condition. Tags within each tile will be joined (AND). At least one rule in this structure must have all tag values assigned to it to apply Row-level security (RLS) to the dataset.

" + } + }, + "required": [ + "TagRules" + ], + "additionalProperties": false + }, + "Status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "RowLevelPermissionTagRule": { + "type": "object", + "description": "

Permission for the resource.

", + "properties": { + "ColumnName": { + "type": "string", + "description": "

The column name that a tag key is assigned to.

" + }, + "TagKey": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The unique key for a tag.

" + }, + "MatchAllValue": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

A string that you want to use to filter by all the values in a column in the dataset and don?t want to list the values one by one. For example, you can use an asterisk as your match all value.

" + }, + "TagMultiValueDelimiter": { + "type": "string", + "maxLength": 10, + "description": "

A string that you want to use to delimit the values when you pass the values at run time. For example, you can delimit the values with a comma.

" + } + }, + "required": [ + "ColumnName", + "TagKey" + ], + "additionalProperties": false + }, + "RowLevelPermissionTagRuleConfiguration": { + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "maxItems": 50, + "minItems": 1 + }, + "S3Source": { + "type": "object", + "description": "

A physical table type for as S3 data source.

", + "properties": { + "DataSourceArn": { + "type": "string", + "description": "

The amazon Resource Name (ARN) for the data source.

" + }, + "InputColumns": { + "type": "array", + "items": { + "$ref": "#/definitions/InputColumn" + }, + "maxItems": 2048, + "minItems": 1, + "description": "

A physical table type for as S3 data source.

" + }, + "UploadSettings": { + "$ref": "#/definitions/UploadSettings" + } + }, + "required": [ + "DataSourceArn", + "InputColumns" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "description": "

The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.

", + "properties": { + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Tag value.

" + }, + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Tag key.

" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TagColumnOperation": { + "type": "object", + "description": "

A transform operation that tags a column with additional information.

", + "properties": { + "ColumnName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The column that this operation acts on.

" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnTag" + }, + "maxItems": 16, + "minItems": 1, + "description": "

The dataset column tag, currently only used for geospatial type tagging. .

\n \n

This is not tags for the AWS tagging feature. .

\n
" + } + }, + "required": [ + "ColumnName", + "Tags" + ], + "additionalProperties": false + }, + "TextQualifier": { + "type": "string", + "enum": [ + "DOUBLE_QUOTE", + "SINGLE_QUOTE" + ] + }, + "TimeGranularity": { + "type": "string", + "enum": [ + "YEAR", + "QUARTER", + "MONTH", + "WEEK", + "DAY", + "HOUR", + "MINUTE", + "SECOND", + "MILLISECOND" + ] + }, + "TransformOperation": { + "type": "object", + "description": "

A data transformation on a logical table. This is a variant type structure. For this\n structure to be valid, only one of the attributes can be non-null.

", + "properties": { + "TagColumnOperation": { + "$ref": "#/definitions/TagColumnOperation" + }, + "FilterOperation": { + "$ref": "#/definitions/FilterOperation" + }, + "CastColumnTypeOperation": { + "$ref": "#/definitions/CastColumnTypeOperation" + }, + "CreateColumnsOperation": { + "$ref": "#/definitions/CreateColumnsOperation" + }, + "RenameColumnOperation": { + "$ref": "#/definitions/RenameColumnOperation" + }, + "ProjectOperation": { + "$ref": "#/definitions/ProjectOperation" + }, + "OverrideDatasetParameterOperation": { + "$ref": "#/definitions/OverrideDatasetParameterOperation" + } + }, + "additionalProperties": false + }, + "UploadSettings": { + "type": "object", + "description": "

Information about the format for a source file or files.

", + "properties": { + "ContainsHeader": { + "type": "boolean", + "description": "

Whether the file has a header row, or the files each have a header row.

" + }, + "TextQualifier": { + "$ref": "#/definitions/TextQualifier" + }, + "Format": { + "$ref": "#/definitions/FileFormat" + }, + "StartFromRow": { + "type": "number", + "minimum": 1, + "description": "

A row number to start reading data from.

" + }, + "Delimiter": { + "type": "string", + "maxLength": 1, + "minLength": 1, + "description": "

The delimiter between values in the file.

" + } + }, + "additionalProperties": false + }, + "IngestionWaitPolicy": { + "type": "object", + "description": "

Wait policy to use when creating/updating dataset. Default is to wait for SPICE ingestion to finish with timeout of 36 hours.

", + "properties": { + "WaitForSpiceIngestion": { + "type": "boolean", + "description": "

Wait for SPICE ingestion to finish to mark dataset creation/update successful. Default (true).\n Applicable only when DataSetImportMode mode is set to SPICE.

", + "default": true + }, + "IngestionWaitTimeInHours": { + "type": "number", + "description": "

The maximum time (in hours) to wait for Ingestion to complete. Default timeout is 36 hours.\n Applicable only when DataSetImportMode mode is set to SPICE and WaitForSpiceIngestion is set to true.

", + "minimum": 1, + "maximum": 36, + "default": 36 + } + }, + "additionalProperties": false + }, + "DataSetUsageConfiguration": { + "type": "object", + "description": "

The dataset usage configuration for the dataset.

", + "properties": { + "DisableUseAsDirectQuerySource": { + "type": "boolean" + }, + "DisableUseAsImportedSource": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "DataSetRefreshProperties": { + "type": "object", + "description": "

The dataset refresh properties for the dataset.

", + "properties": { + "RefreshConfiguration": { + "$ref": "#/definitions/RefreshConfiguration" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) of the resource.

" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "ColumnGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnGroup" + }, + "maxItems": 8, + "minItems": 1, + "description": "

Groupings of columns that work together in certain QuickSight features. Currently, only geospatial hierarchy is supported.

" + }, + "ColumnLevelPermissionRules": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnLevelPermissionRule" + }, + "minItems": 1 + }, + "ConsumedSpiceCapacityInBytes": { + "type": "number", + "description": "

The amount of SPICE capacity used by this dataset. This is 0 if the dataset isn't\n imported into SPICE.

" + }, + "CreatedTime": { + "type": "string", + "description": "

The time that this dataset was created.

", + "format": "string" + }, + "DataSetId": { + "type": "string" + }, + "DatasetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/DatasetParameter" + }, + "maxItems": 32, + "minItems": 1, + "description": "

The parameters declared in the dataset.

" + }, + "FieldFolders": { + "$ref": "#/definitions/FieldFolderMap" + }, + "ImportMode": { + "$ref": "#/definitions/DataSetImportMode" + }, + "LastUpdatedTime": { + "type": "string", + "description": "

The last time that this dataset was updated.

", + "format": "string" + }, + "LogicalTableMap": { + "$ref": "#/definitions/LogicalTableMap" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The display name for the dataset.

" + }, + "OutputColumns": { + "type": "array", + "items": { + "$ref": "#/definitions/OutputColumn" + }, + "description": "

The list of columns after all transforms. These columns are available in templates,\n analyses, and dashboards.

" + }, + "Permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePermission" + }, + "maxItems": 64, + "minItems": 1, + "description": "

A list of resource permissions on the dataset.

" + }, + "PhysicalTableMap": { + "$ref": "#/definitions/PhysicalTableMap" + }, + "RowLevelPermissionDataSet": { + "$ref": "#/definitions/RowLevelPermissionDataSet" + }, + "RowLevelPermissionTagConfiguration": { + "$ref": "#/definitions/RowLevelPermissionTagConfiguration" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1, + "description": "

Contains a map of the key-value pairs for the resource tag or tags assigned to the dataset.

" + }, + "IngestionWaitPolicy": { + "$ref": "#/definitions/IngestionWaitPolicy" + }, + "DataSetUsageConfiguration": { + "$ref": "#/definitions/DataSetUsageConfiguration" + }, + "DataSetRefreshProperties": { + "$ref": "#/definitions/DataSetRefreshProperties" + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/ConsumedSpiceCapacityInBytes", + "/properties/CreatedTime", + "/properties/LastUpdatedTime", + "/properties/OutputColumns" + ], + "writeOnlyProperties": [ + "/properties/FieldFolders", + "/properties/IngestionWaitPolicy" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/DataSetId" + ], + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/DataSetId" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "quicksight:DescribeDataSet", + "quicksight:DescribeDataSetPermissions", + "quicksight:DescribeIngestion", + "quicksight:ListIngestions", + "quicksight:CreateDataSet", + "quicksight:PassDataSource", + "quicksight:PassDataSet", + "quicksight:TagResource", + "quicksight:ListTagsForResource", + "quicksight:DescribeDataSetRefreshProperties", + "quicksight:PutDataSetRefreshProperties" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeDataSet", + "quicksight:DescribeDataSetPermissions", + "quicksight:ListTagsForResource", + "quicksight:DescribeDataSetRefreshProperties" + ] + }, + "update": { + "permissions": [ + "quicksight:DescribeDataSet", + "quicksight:DescribeDataSetPermissions", + "quicksight:PassDataSource", + "quicksight:UpdateDataSet", + "quicksight:UpdateDataSetPermissions", + "quicksight:PassDataSet", + "quicksight:DescribeIngestion", + "quicksight:ListIngestions", + "quicksight:CancelIngestion", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource", + "quicksight:PutDataSetRefreshProperties", + "quicksight:DescribeDataSetRefreshProperties", + "quicksight:DeleteDataSetRefreshProperties" + ] + }, + "delete": { + "permissions": [ + "quicksight:DescribeDataSet", + "quicksight:DeleteDataSet", + "quicksight:ListTagsForResource", + "quicksight:DescribeIngestion", + "quicksight:DeleteDataSetRefreshProperties", + "quicksight:DescribeDataSetRefreshProperties" + ] + }, + "list": { + "permissions": [ + "quicksight:DescribeDataSet", + "quicksight:ListDataSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/datasource.json b/internal/aws/cfn/schemas/aws/quicksight/datasource.json new file mode 100644 index 00000000..ca711b68 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/datasource.json @@ -0,0 +1,968 @@ +{ + "typeName": "AWS::QuickSight::DataSource", + "description": "Definition of the AWS::QuickSight::DataSource Resource Type.", + "definitions": { + "AmazonElasticsearchParameters": { + "type": "object", + "description": "

Amazon Elasticsearch Service parameters.

", + "properties": { + "Domain": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

The Amazon Elasticsearch Service domain.

" + } + }, + "required": [ + "Domain" + ] + }, + "AmazonOpenSearchParameters": { + "type": "object", + "description": "

Amazon OpenSearch Service parameters.

", + "properties": { + "Domain": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

The Amazon OpenSearch Service domain.

" + } + }, + "required": [ + "Domain" + ] + }, + "AthenaParameters": { + "type": "object", + "description": "

Amazon Athena parameters.

", + "properties": { + "WorkGroup": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The workgroup that Amazon Athena uses.

" + }, + "RoleArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "description": "

Use the RoleArn structure to override an account-wide role for a specific Athena data source. For example, say an account administrator has turned off all Athena access with an account-wide role. The administrator can then use RoleArn to bypass the account-wide role and allow Athena access for the single Athena data source that is specified in the structure, even if the account-wide role forbidding Athena access is still active.

" + } + } + }, + "AuroraParameters": { + "type": "object", + "description": "

Amazon Aurora parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "AuroraPostgreSqlParameters": { + "type": "object", + "description": "

Amazon Aurora with PostgreSQL compatibility parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "AwsIotAnalyticsParameters": { + "type": "object", + "description": "

AWS IoT Analytics parameters.

", + "properties": { + "DataSetName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Dataset name.

" + } + }, + "required": [ + "DataSetName" + ] + }, + "CredentialPair": { + "type": "object", + "description": "

The combination of user name and password that are used as credentials.

", + "properties": { + "AlternateDataSourceParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSourceParameters" + }, + "maxItems": 50, + "minItems": 1, + "description": "

A set of alternate data source parameters that you want to share for these\n credentials. The credentials are applied in tandem with the data source parameters when\n you copy a data source by using a create or update request. The API operation compares\n the DataSourceParameters structure that's in the request with the\n structures in the AlternateDataSourceParameters allow list. If the\n structures are an exact match, the request is allowed to use the new data source with\n the existing credentials. If the AlternateDataSourceParameters list is\n null, the DataSourceParameters originally used with these\n Credentials is automatically allowed.

" + }, + "Username": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

User name.

" + }, + "Password": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "description": "

Password.

" + } + }, + "required": [ + "Password", + "Username" + ] + }, + "DatabricksParameters": { + "type": "object", + "description": "

Databricks parameters.

", + "properties": { + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + }, + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "SqlEndpointPath": { + "type": "string", + "maxLength": 4096, + "minLength": 1, + "description": "

The HTTP Path of the Databricks data source.

" + } + }, + "required": [ + "Host", + "Port", + "SqlEndpointPath" + ] + }, + "DataSourceCredentials": { + "type": "object", + "description": "

Data source credentials. This is a variant type structure. For this structure to be\n valid, only one of the attributes can be non-null.

", + "properties": { + "CopySourceArn": { + "type": "string", + "pattern": "^arn:[-a-z0-9]*:quicksight:[-a-z0-9]*:[0-9]{12}:datasource/.+", + "description": "

The Amazon Resource Name (ARN) of a data source that has the credential pair that you\n want to use. When CopySourceArn is not null, the credential pair from the\n data source in the ARN is used as the credentials for the\n DataSourceCredentials structure.

" + }, + "CredentialPair": { + "$ref": "#/definitions/CredentialPair" + }, + "SecretArn": { + "type": "string", + "pattern": "^arn:[-a-z0-9]*:secretsmanager:[-a-z0-9]*:[0-9]{12}:secret:.+", + "maxLength": 2048, + "minLength": 1, + "description": "

The Amazon Resource Name (ARN) of the secret associated with the data source in Amazon Secrets Manager.

" + } + } + }, + "DataSourceErrorInfo": { + "type": "object", + "description": "

Error information for the data source creation or update.

", + "properties": { + "Type": { + "$ref": "#/definitions/DataSourceErrorInfoType" + }, + "Message": { + "type": "string", + "description": "

Error message.

" + } + } + }, + "DataSourceErrorInfoType": { + "type": "string", + "enum": [ + "ACCESS_DENIED", + "COPY_SOURCE_NOT_FOUND", + "TIMEOUT", + "ENGINE_VERSION_NOT_SUPPORTED", + "UNKNOWN_HOST", + "GENERIC_SQL_FAILURE", + "CONFLICT", + "UNKNOWN" + ] + }, + "DataSourceParameters": { + "type": "object", + "description": "

The parameters that Amazon QuickSight uses to connect to your underlying data source.\n This is a variant type structure. For this structure to be valid, only one of the\n attributes can be non-null.

", + "properties": { + "AuroraPostgreSqlParameters": { + "$ref": "#/definitions/AuroraPostgreSqlParameters" + }, + "TeradataParameters": { + "$ref": "#/definitions/TeradataParameters" + }, + "RdsParameters": { + "$ref": "#/definitions/RdsParameters" + }, + "AthenaParameters": { + "$ref": "#/definitions/AthenaParameters" + }, + "SparkParameters": { + "$ref": "#/definitions/SparkParameters" + }, + "MariaDbParameters": { + "$ref": "#/definitions/MariaDbParameters" + }, + "OracleParameters": { + "$ref": "#/definitions/OracleParameters" + }, + "PrestoParameters": { + "$ref": "#/definitions/PrestoParameters" + }, + "RedshiftParameters": { + "$ref": "#/definitions/RedshiftParameters" + }, + "MySqlParameters": { + "$ref": "#/definitions/MySqlParameters" + }, + "SqlServerParameters": { + "$ref": "#/definitions/SqlServerParameters" + }, + "SnowflakeParameters": { + "$ref": "#/definitions/SnowflakeParameters" + }, + "AmazonElasticsearchParameters": { + "$ref": "#/definitions/AmazonElasticsearchParameters" + }, + "AmazonOpenSearchParameters": { + "$ref": "#/definitions/AmazonOpenSearchParameters" + }, + "PostgreSqlParameters": { + "$ref": "#/definitions/PostgreSqlParameters" + }, + "AuroraParameters": { + "$ref": "#/definitions/AuroraParameters" + }, + "S3Parameters": { + "$ref": "#/definitions/S3Parameters" + }, + "DatabricksParameters": { + "$ref": "#/definitions/DatabricksParameters" + }, + "StarburstParameters": { + "$ref": "#/definitions/StarburstParameters" + }, + "TrinoParameters": { + "$ref": "#/definitions/TrinoParameters" + } + } + }, + "DataSourceType": { + "type": "string", + "enum": [ + "ADOBE_ANALYTICS", + "AMAZON_ELASTICSEARCH", + "AMAZON_OPENSEARCH", + "ATHENA", + "AURORA", + "AURORA_POSTGRESQL", + "AWS_IOT_ANALYTICS", + "DATABRICKS", + "GITHUB", + "JIRA", + "MARIADB", + "MYSQL", + "ORACLE", + "POSTGRESQL", + "PRESTO", + "REDSHIFT", + "S3", + "SALESFORCE", + "SERVICENOW", + "SNOWFLAKE", + "SPARK", + "SQLSERVER", + "TERADATA", + "TWITTER", + "TIMESTREAM", + "STARBURST", + "TRINO" + ] + }, + "ManifestFileLocation": { + "type": "object", + "description": "

Amazon S3 manifest file location.

", + "properties": { + "Bucket": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "description": "

Amazon S3 bucket.

" + }, + "Key": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "description": "

Amazon S3 key that identifies an object.

" + } + }, + "required": [ + "Bucket", + "Key" + ] + }, + "MariaDbParameters": { + "type": "object", + "description": "

MariaDB parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "MySqlParameters": { + "type": "object", + "description": "

MySQL parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "OracleParameters": { + "type": "object", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1 + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "PostgreSqlParameters": { + "type": "object", + "description": "

PostgreSQL parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "PrestoParameters": { + "type": "object", + "description": "

Presto parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + }, + "Catalog": { + "type": "string", + "maxLength": 128, + "minLength": 0, + "description": "

Catalog.

" + } + }, + "required": [ + "Catalog", + "Host", + "Port" + ] + }, + "RdsParameters": { + "type": "object", + "description": "

Amazon RDS parameters.

", + "properties": { + "InstanceId": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

Instance ID.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + } + }, + "required": [ + "Database", + "InstanceId" + ] + }, + "RedshiftParameters": { + "type": "object", + "description": "

Amazon Redshift parameters. The ClusterId field can be blank if\n Host and Port are both set. The Host and\n Port fields can be blank if the ClusterId field is set.

", + "properties": { + "ClusterId": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "description": "

Cluster ID. This field can be blank if the Host and Port are\n provided.

" + }, + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 0, + "description": "

Port. This field can be blank if the ClusterId is provided.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host. This field can be blank if ClusterId is provided.

" + } + }, + "required": [ + "Database" + ] + }, + "ResourcePermission": { + "type": "object", + "description": "

Permission for the resource.

", + "properties": { + "Actions": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1, + "description": "

The IAM action to grant or revoke permissions on.

" + }, + "Principal": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:

\n
    \n
  • \n

    The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)

    \n
  • \n
  • \n

    The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)

    \n
  • \n
  • \n

    The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)

    \n
  • \n
" + } + }, + "required": [ + "Actions", + "Principal" + ] + }, + "ResourceStatus": { + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "CREATION_SUCCESSFUL", + "CREATION_FAILED", + "UPDATE_IN_PROGRESS", + "UPDATE_SUCCESSFUL", + "UPDATE_FAILED", + "DELETED" + ] + }, + "S3Parameters": { + "type": "object", + "description": "

S3 parameters.

", + "properties": { + "ManifestFileLocation": { + "$ref": "#/definitions/ManifestFileLocation" + }, + "RoleArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "description": "

Use the RoleArn structure to override an account-wide role for a specific S3 data source. For example, say an account administrator has turned off all S3 access with an account-wide role. The administrator can then use RoleArn to bypass the account-wide role and allow S3 access for the single S3 data source that is specified in the structure, even if the account-wide role forbidding S3 access is still active.

" + } + }, + "required": [ + "ManifestFileLocation" + ] + }, + "SnowflakeParameters": { + "type": "object", + "description": "

Snowflake parameters.

", + "properties": { + "Warehouse": { + "type": "string", + "maxLength": 128, + "minLength": 0, + "description": "

Warehouse.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Warehouse" + ] + }, + "StarburstParameters": { + "type": "object", + "description": "

Starburst parameters.

", + "properties": { + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + }, + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Catalog": { + "type": "string", + "maxLength": 128, + "minLength": 0, + "description": "

Catalog.

" + }, + "ProductType": { + "$ref": "#/definitions/StarburstProductType" + } + }, + "required": [ + "Host", + "Port", + "Catalog" + ] + }, + "StarburstProductType": { + "type": "string", + "enum": [ + "GALAXY", + "ENTERPRISE" + ] + }, + "TrinoParameters": { + "type": "object", + "description": "

Trino parameters.

", + "properties": { + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + }, + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Catalog": { + "type": "string", + "maxLength": 128, + "minLength": 0, + "description": "

Catalog.

" + } + }, + "required": [ + "Host", + "Port", + "Catalog" + ] + }, + "SparkParameters": { + "type": "object", + "description": "

Spark parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Host", + "Port" + ] + }, + "SqlServerParameters": { + "type": "object", + "description": "

SQL Server parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "SslProperties": { + "type": "object", + "description": "

Secure Socket Layer (SSL) properties that apply when QuickSight connects to your\n underlying data source.

", + "properties": { + "DisableSsl": { + "type": "boolean", + "description": "

A Boolean option to control whether SSL should be disabled.

" + } + } + }, + "Tag": { + "type": "object", + "description": "

The key or keys of the key-value pairs for the resource tag or tags assigned to the\n resource.

", + "properties": { + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Tag value.

" + }, + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Tag key.

" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "TeradataParameters": { + "type": "object", + "description": "

Teradata parameters.

", + "properties": { + "Port": { + "type": "number", + "maximum": 65535, + "minimum": 1, + "description": "

Port.

" + }, + "Database": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

Database.

" + }, + "Host": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "description": "

Host.

" + } + }, + "required": [ + "Database", + "Host", + "Port" + ] + }, + "VpcConnectionProperties": { + "type": "object", + "description": "

VPC connection properties.

", + "properties": { + "VpcConnectionArn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) for the VPC connection.

" + } + }, + "required": [ + "VpcConnectionArn" + ] + } + }, + "properties": { + "AlternateDataSourceParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSourceParameters" + }, + "maxItems": 50, + "minItems": 1, + "description": "

A set of alternate data source parameters that you want to share for the credentials\n stored with this data source. The credentials are applied in tandem with the data source\n parameters when you copy a data source by using a create or update request. The API\n operation compares the DataSourceParameters structure that's in the request\n with the structures in the AlternateDataSourceParameters allow list. If the\n structures are an exact match, the request is allowed to use the credentials from this\n existing data source. If the AlternateDataSourceParameters list is null,\n the Credentials originally used with this DataSourceParameters\n are automatically allowed.

" + }, + "Arn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) of the data source.

" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "CreatedTime": { + "type": "string", + "description": "

The time that this data source was created.

", + "format": "date-time" + }, + "Credentials": { + "$ref": "#/definitions/DataSourceCredentials" + }, + "DataSourceId": { + "type": "string" + }, + "DataSourceParameters": { + "$ref": "#/definitions/DataSourceParameters" + }, + "ErrorInfo": { + "$ref": "#/definitions/DataSourceErrorInfo" + }, + "LastUpdatedTime": { + "type": "string", + "description": "

The last time that this data source was updated.

", + "format": "date-time" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

A display name for the data source.

" + }, + "Permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePermission" + }, + "maxItems": 64, + "minItems": 1, + "description": "

A list of resource permissions on the data source.

" + }, + "SslProperties": { + "$ref": "#/definitions/SslProperties" + }, + "Status": { + "$ref": "#/definitions/ResourceStatus" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1, + "description": "

Contains a map of the key-value pairs for the resource tag or tags assigned to the data source.

" + }, + "Type": { + "$ref": "#/definitions/DataSourceType" + }, + "VpcConnectionProperties": { + "$ref": "#/definitions/VpcConnectionProperties" + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime", + "/properties/Status" + ], + "writeOnlyProperties": [ + "/properties/Credentials" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/DataSourceId", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/DataSourceId" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "quicksight:CreateDataSource", + "quicksight:DescribeDataSource", + "quicksight:DescribeDataSourcePermissions", + "quicksight:TagResource", + "quicksight:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeDataSource", + "quicksight:DescribeDataSourcePermissions", + "quicksight:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "quicksight:DescribeDataSource", + "quicksight:DescribeDataSourcePermissions", + "quicksight:UpdateDataSource", + "quicksight:UpdateDataSourcePermissions", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "quicksight:DescribeDataSource", + "quicksight:DescribeDataSourcePermissions", + "quicksight:DeleteDataSource", + "quicksight:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "quicksight:DescribeDataSource", + "quicksight:ListDataSources" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/refreshschedule.json b/internal/aws/cfn/schemas/aws/quicksight/refreshschedule.json new file mode 100644 index 00000000..f031c383 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/refreshschedule.json @@ -0,0 +1,158 @@ +{ + "typeName": "AWS::QuickSight::RefreshSchedule", + "description": "Definition of the AWS::QuickSight::RefreshSchedule Resource Type.", + "definitions": { + "RefreshScheduleMap": { + "type": "object", + "properties": { + "ScheduleId": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

An unique identifier for the refresh schedule.

" + }, + "ScheduleFrequency": { + "type": "object", + "description": "

Information about the schedule frequency.

", + "properties": { + "Interval": { + "type": "string", + "enum": [ + "MINUTE15", + "MINUTE30", + "HOURLY", + "DAILY", + "WEEKLY", + "MONTHLY" + ] + }, + "RefreshOnDay": { + "type": "object", + "description": "

The day scheduled for refresh.

", + "properties": { + "DayOfWeek": { + "type": "string", + "enum": [ + "SUNDAY", + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY" + ] + }, + "DayOfMonth": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The Day Of Month for scheduled refresh.

" + } + }, + "additionalProperties": false, + "required": [] + }, + "TimeZone": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The timezone for scheduled refresh.

" + }, + "TimeOfTheDay": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The time of the day for scheduled refresh.

" + } + }, + "additionalProperties": false, + "required": [] + }, + "StartAfterDateTime": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "description": "

The date time after which refresh is to be scheduled

" + }, + "RefreshType": { + "type": "string", + "enum": [ + "FULL_REFRESH", + "INCREMENTAL_REFRESH" + ] + } + }, + "additionalProperties": false, + "required": [] + } + }, + "properties": { + "Arn": { + "type": "string", + "description": "

The Amazon Resource Name (ARN) of the data source.

" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "DataSetId": { + "type": "string" + }, + "Schedule": { + "$ref": "#/definitions/RefreshScheduleMap" + } + }, + "additionalProperties": false, + "required": [], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/DataSetId", + "/properties/Schedule/ScheduleId" + ], + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/DataSetId", + "/properties/Schedule/ScheduleId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "quicksight:CreateRefreshSchedule", + "quicksight:DescribeRefreshSchedule" + ] + }, + "update": { + "permissions": [ + "quicksight:UpdateRefreshSchedule", + "quicksight:DescribeRefreshSchedule" + ] + }, + "delete": { + "permissions": [ + "quicksight:DeleteRefreshSchedule", + "quicksight:DescribeRefreshSchedule" + ] + }, + "list": { + "permissions": [ + "quicksight:ListRefreshSchedules" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeRefreshSchedule" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/template.json b/internal/aws/cfn/schemas/aws/quicksight/template.json new file mode 100644 index 00000000..c4c84f31 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/template.json @@ -0,0 +1,11028 @@ +{ + "typeName": "AWS::QuickSight::Template", + "description": "Definition of the AWS::QuickSight::Template Resource Type.", + "definitions": { + "AggregationFunction": { + "type": "object", + "properties": { + "NumericalAggregationFunction": { + "$ref": "#/definitions/NumericalAggregationFunction" + }, + "CategoricalAggregationFunction": { + "$ref": "#/definitions/CategoricalAggregationFunction" + }, + "DateAggregationFunction": { + "$ref": "#/definitions/DateAggregationFunction" + }, + "AttributeAggregationFunction": { + "$ref": "#/definitions/AttributeAggregationFunction" + } + }, + "additionalProperties": false + }, + "AggregationSortConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "SortDirection": { + "$ref": "#/definitions/SortDirection" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Column", + "SortDirection" + ], + "additionalProperties": false + }, + "AllSheetsFilterScopeConfiguration": { + "type": "object", + "additionalProperties": false + }, + "AnalysisDefaults": { + "type": "object", + "properties": { + "DefaultNewSheetConfiguration": { + "$ref": "#/definitions/DefaultNewSheetConfiguration" + } + }, + "required": [ + "DefaultNewSheetConfiguration" + ], + "additionalProperties": false + }, + "AnchorDateConfiguration": { + "type": "object", + "properties": { + "AnchorOption": { + "$ref": "#/definitions/AnchorOption" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "AnchorOption": { + "type": "string", + "enum": [ + "NOW" + ] + }, + "ArcAxisConfiguration": { + "type": "object", + "properties": { + "Range": { + "$ref": "#/definitions/ArcAxisDisplayRange" + }, + "ReserveRange": { + "type": "number", + "default": 0 + } + }, + "additionalProperties": false + }, + "ArcAxisDisplayRange": { + "type": "object", + "properties": { + "Min": { + "type": "number", + "default": null + }, + "Max": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "ArcConfiguration": { + "type": "object", + "properties": { + "ArcAngle": { + "type": "number", + "default": null + }, + "ArcThickness": { + "$ref": "#/definitions/ArcThicknessOptions" + } + }, + "additionalProperties": false + }, + "ArcOptions": { + "type": "object", + "properties": { + "ArcThickness": { + "$ref": "#/definitions/ArcThickness" + } + }, + "additionalProperties": false + }, + "ArcThickness": { + "type": "string", + "enum": [ + "SMALL", + "MEDIUM", + "LARGE", + "WHOLE" + ] + }, + "ArcThicknessOptions": { + "type": "string", + "enum": [ + "SMALL", + "MEDIUM", + "LARGE" + ] + }, + "AssetOptions": { + "type": "object", + "properties": { + "Timezone": { + "type": "string" + }, + "WeekStart": { + "$ref": "#/definitions/DayOfTheWeek" + } + }, + "additionalProperties": false + }, + "AttributeAggregationFunction": { + "type": "object", + "properties": { + "SimpleAttributeAggregation": { + "$ref": "#/definitions/SimpleAttributeAggregationFunction" + }, + "ValueForMultipleValues": { + "type": "string" + } + }, + "additionalProperties": false + }, + "AxisBinding": { + "type": "string", + "enum": [ + "PRIMARY_YAXIS", + "SECONDARY_YAXIS" + ] + }, + "AxisDataOptions": { + "type": "object", + "properties": { + "NumericAxisOptions": { + "$ref": "#/definitions/NumericAxisOptions" + }, + "DateAxisOptions": { + "$ref": "#/definitions/DateAxisOptions" + } + }, + "additionalProperties": false + }, + "AxisDisplayDataDrivenRange": { + "type": "object", + "additionalProperties": false + }, + "AxisDisplayMinMaxRange": { + "type": "object", + "properties": { + "Minimum": { + "type": "number", + "default": null + }, + "Maximum": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisDisplayOptions": { + "type": "object", + "properties": { + "TickLabelOptions": { + "$ref": "#/definitions/AxisTickLabelOptions" + }, + "AxisLineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "GridLineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "DataOptions": { + "$ref": "#/definitions/AxisDataOptions" + }, + "ScrollbarOptions": { + "$ref": "#/definitions/ScrollBarOptions" + }, + "AxisOffset": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "AxisDisplayRange": { + "type": "object", + "properties": { + "MinMax": { + "$ref": "#/definitions/AxisDisplayMinMaxRange" + }, + "DataDriven": { + "$ref": "#/definitions/AxisDisplayDataDrivenRange" + } + }, + "additionalProperties": false + }, + "AxisLabelOptions": { + "type": "object", + "properties": { + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "CustomLabel": { + "type": "string" + }, + "ApplyTo": { + "$ref": "#/definitions/AxisLabelReferenceOptions" + } + }, + "additionalProperties": false + }, + "AxisLabelReferenceOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "AxisLinearScale": { + "type": "object", + "properties": { + "StepCount": { + "type": "number", + "default": null + }, + "StepSize": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisLogarithmicScale": { + "type": "object", + "properties": { + "Base": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "AxisScale": { + "type": "object", + "properties": { + "Linear": { + "$ref": "#/definitions/AxisLinearScale" + }, + "Logarithmic": { + "$ref": "#/definitions/AxisLogarithmicScale" + } + }, + "additionalProperties": false + }, + "AxisTickLabelOptions": { + "type": "object", + "properties": { + "LabelOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "RotationAngle": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "BarChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "BarChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/BarChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/BarChartSortConfiguration" + }, + "Orientation": { + "$ref": "#/definitions/BarChartOrientation" + }, + "BarsArrangement": { + "$ref": "#/definitions/BarsArrangement" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "BarChartFieldWells": { + "type": "object", + "properties": { + "BarChartAggregatedFieldWells": { + "$ref": "#/definitions/BarChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "BarChartOrientation": { + "type": "string", + "enum": [ + "HORIZONTAL", + "VERTICAL" + ] + }, + "BarChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "BarChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/BarChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "BarsArrangement": { + "type": "string", + "enum": [ + "CLUSTERED", + "STACKED", + "STACKED_PERCENT" + ] + }, + "BaseMapStyleType": { + "type": "string", + "enum": [ + "LIGHT_GRAY", + "DARK_GRAY", + "STREET", + "IMAGERY" + ] + }, + "BinCountOptions": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "BinWidthOptions": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "minimum": 0 + }, + "BinCountLimit": { + "type": "number", + "maximum": 1000, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "BodySectionConfiguration": { + "type": "object", + "properties": { + "SectionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Content": { + "$ref": "#/definitions/BodySectionContent" + }, + "Style": { + "$ref": "#/definitions/SectionStyle" + }, + "PageBreakConfiguration": { + "$ref": "#/definitions/SectionPageBreakConfiguration" + } + }, + "required": [ + "Content", + "SectionId" + ], + "additionalProperties": false + }, + "BodySectionContent": { + "type": "object", + "properties": { + "Layout": { + "$ref": "#/definitions/SectionLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "BoxPlotAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 5, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "BoxPlotChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/BoxPlotFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/BoxPlotSortConfiguration" + }, + "BoxPlotOptions": { + "$ref": "#/definitions/BoxPlotOptions" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "BoxPlotFieldWells": { + "type": "object", + "properties": { + "BoxPlotAggregatedFieldWells": { + "$ref": "#/definitions/BoxPlotAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "BoxPlotFillStyle": { + "type": "string", + "enum": [ + "SOLID", + "TRANSPARENT" + ] + }, + "BoxPlotOptions": { + "type": "object", + "properties": { + "StyleOptions": { + "$ref": "#/definitions/BoxPlotStyleOptions" + }, + "OutlierVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AllDataPointsVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "BoxPlotSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "PaginationConfiguration": { + "$ref": "#/definitions/PaginationConfiguration" + } + }, + "additionalProperties": false + }, + "BoxPlotStyleOptions": { + "type": "object", + "properties": { + "FillStyle": { + "$ref": "#/definitions/BoxPlotFillStyle" + } + }, + "additionalProperties": false + }, + "BoxPlotVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/BoxPlotChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "CalculatedField": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Name": { + "type": "string", + "maxLength": 127, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 32000, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "Expression", + "Name" + ], + "additionalProperties": false + }, + "CalculatedMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "required": [ + "Expression", + "FieldId" + ], + "additionalProperties": false + }, + "CascadingControlConfiguration": { + "type": "object", + "properties": { + "SourceControls": { + "type": "array", + "items": { + "$ref": "#/definitions/CascadingControlSource" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "CascadingControlSource": { + "type": "object", + "properties": { + "SourceSheetControlId": { + "type": "string" + }, + "ColumnToMatch": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "CategoricalAggregationFunction": { + "type": "string", + "enum": [ + "COUNT", + "DISTINCT_COUNT" + ] + }, + "CategoricalDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "CategoricalMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/CategoricalAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "CategoryDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + } + }, + "required": [ + "CategoryValues", + "Column" + ], + "additionalProperties": false + }, + "CategoryFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Configuration": { + "$ref": "#/definitions/CategoryFilterConfiguration" + } + }, + "required": [ + "Column", + "Configuration", + "FilterId" + ], + "additionalProperties": false + }, + "CategoryFilterConfiguration": { + "type": "object", + "properties": { + "FilterListConfiguration": { + "$ref": "#/definitions/FilterListConfiguration" + }, + "CustomFilterListConfiguration": { + "$ref": "#/definitions/CustomFilterListConfiguration" + }, + "CustomFilterConfiguration": { + "$ref": "#/definitions/CustomFilterConfiguration" + } + }, + "additionalProperties": false + }, + "CategoryFilterMatchOperator": { + "type": "string", + "enum": [ + "EQUALS", + "DOES_NOT_EQUAL", + "CONTAINS", + "DOES_NOT_CONTAIN", + "STARTS_WITH", + "ENDS_WITH" + ] + }, + "CategoryFilterSelectAllOptions": { + "type": "string", + "enum": [ + "FILTER_ALL_VALUES" + ] + }, + "ChartAxisLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "SortIconVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AxisLabelOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/AxisLabelOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ClusterMarker": { + "type": "object", + "properties": { + "SimpleClusterMarker": { + "$ref": "#/definitions/SimpleClusterMarker" + } + }, + "additionalProperties": false + }, + "ClusterMarkerConfiguration": { + "type": "object", + "properties": { + "ClusterMarker": { + "$ref": "#/definitions/ClusterMarker" + } + }, + "additionalProperties": false + }, + "ColorFillType": { + "type": "string", + "enum": [ + "DISCRETE", + "GRADIENT" + ] + }, + "ColorScale": { + "type": "object", + "properties": { + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DataColor" + }, + "maxItems": 3, + "minItems": 2 + }, + "ColorFillType": { + "$ref": "#/definitions/ColorFillType" + }, + "NullValueColor": { + "$ref": "#/definitions/DataColor" + } + }, + "required": [ + "ColorFillType", + "Colors" + ], + "additionalProperties": false + }, + "ColorsConfiguration": { + "type": "object", + "properties": { + "CustomColors": { + "type": "array", + "items": { + "$ref": "#/definitions/CustomColor" + }, + "maxItems": 50, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ColumnConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "FormatConfiguration": { + "$ref": "#/definitions/FormatConfiguration" + }, + "Role": { + "$ref": "#/definitions/ColumnRole" + }, + "ColorsConfiguration": { + "$ref": "#/definitions/ColorsConfiguration" + } + }, + "required": [ + "Column" + ], + "additionalProperties": false + }, + "ColumnGroupColumnSchema": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ColumnGroupSchema": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "ColumnGroupColumnSchemaList": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnGroupColumnSchema" + }, + "maxItems": 500, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ColumnHierarchy": { + "type": "object", + "properties": { + "ExplicitHierarchy": { + "$ref": "#/definitions/ExplicitHierarchy" + }, + "DateTimeHierarchy": { + "$ref": "#/definitions/DateTimeHierarchy" + }, + "PredefinedHierarchy": { + "$ref": "#/definitions/PredefinedHierarchy" + } + }, + "additionalProperties": false + }, + "ColumnIdentifier": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ColumnName": { + "type": "string", + "maxLength": 127, + "minLength": 1 + } + }, + "required": [ + "ColumnName", + "DataSetIdentifier" + ], + "additionalProperties": false + }, + "ColumnRole": { + "type": "string", + "enum": [ + "DIMENSION", + "MEASURE" + ] + }, + "ColumnSchema": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "DataType": { + "type": "string" + }, + "GeographicRole": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ColumnSort": { + "type": "object", + "properties": { + "SortBy": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Direction": { + "$ref": "#/definitions/SortDirection" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Direction", + "SortBy" + ], + "additionalProperties": false + }, + "ColumnTooltipItem": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Label": { + "type": "string" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Aggregation": { + "$ref": "#/definitions/AggregationFunction" + } + }, + "required": [ + "Column" + ], + "additionalProperties": false + }, + "ComboChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "BarValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "LineValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ComboChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/ComboChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/ComboChartSortConfiguration" + }, + "BarsArrangement": { + "$ref": "#/definitions/BarsArrangement" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SecondaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "SecondaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "BarDataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "LineDataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "ComboChartFieldWells": { + "type": "object", + "properties": { + "ComboChartAggregatedFieldWells": { + "$ref": "#/definitions/ComboChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "ComboChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "ComboChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/ComboChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ComparisonConfiguration": { + "type": "object", + "properties": { + "ComparisonMethod": { + "$ref": "#/definitions/ComparisonMethod" + }, + "ComparisonFormat": { + "$ref": "#/definitions/ComparisonFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ComparisonFormatConfiguration": { + "type": "object", + "properties": { + "NumberDisplayFormatConfiguration": { + "$ref": "#/definitions/NumberDisplayFormatConfiguration" + }, + "PercentageDisplayFormatConfiguration": { + "$ref": "#/definitions/PercentageDisplayFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ComparisonMethod": { + "type": "string", + "enum": [ + "DIFFERENCE", + "PERCENT_DIFFERENCE", + "PERCENT" + ] + }, + "Computation": { + "type": "object", + "properties": { + "TopBottomRanked": { + "$ref": "#/definitions/TopBottomRankedComputation" + }, + "TopBottomMovers": { + "$ref": "#/definitions/TopBottomMoversComputation" + }, + "TotalAggregation": { + "$ref": "#/definitions/TotalAggregationComputation" + }, + "MaximumMinimum": { + "$ref": "#/definitions/MaximumMinimumComputation" + }, + "MetricComparison": { + "$ref": "#/definitions/MetricComparisonComputation" + }, + "PeriodOverPeriod": { + "$ref": "#/definitions/PeriodOverPeriodComputation" + }, + "PeriodToDate": { + "$ref": "#/definitions/PeriodToDateComputation" + }, + "GrowthRate": { + "$ref": "#/definitions/GrowthRateComputation" + }, + "UniqueValues": { + "$ref": "#/definitions/UniqueValuesComputation" + }, + "Forecast": { + "$ref": "#/definitions/ForecastComputation" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingColor": { + "type": "object", + "properties": { + "Solid": { + "$ref": "#/definitions/ConditionalFormattingSolidColor" + }, + "Gradient": { + "$ref": "#/definitions/ConditionalFormattingGradientColor" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingCustomIconCondition": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "IconOptions": { + "$ref": "#/definitions/ConditionalFormattingCustomIconOptions" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DisplayConfiguration": { + "$ref": "#/definitions/ConditionalFormattingIconDisplayConfiguration" + } + }, + "required": [ + "Expression", + "IconOptions" + ], + "additionalProperties": false + }, + "ConditionalFormattingCustomIconOptions": { + "type": "object", + "properties": { + "Icon": { + "$ref": "#/definitions/Icon" + }, + "UnicodeIcon": { + "type": "string", + "pattern": "^[^\\u0000-\\u00FF]$" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingGradientColor": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "Color": { + "$ref": "#/definitions/GradientColor" + } + }, + "required": [ + "Color", + "Expression" + ], + "additionalProperties": false + }, + "ConditionalFormattingIcon": { + "type": "object", + "properties": { + "IconSet": { + "$ref": "#/definitions/ConditionalFormattingIconSet" + }, + "CustomCondition": { + "$ref": "#/definitions/ConditionalFormattingCustomIconCondition" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingIconDisplayConfiguration": { + "type": "object", + "properties": { + "IconDisplayOption": { + "$ref": "#/definitions/ConditionalFormattingIconDisplayOption" + } + }, + "additionalProperties": false + }, + "ConditionalFormattingIconDisplayOption": { + "type": "string", + "enum": [ + "ICON_ONLY" + ] + }, + "ConditionalFormattingIconSet": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "IconSetType": { + "$ref": "#/definitions/ConditionalFormattingIconSetType" + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "ConditionalFormattingIconSetType": { + "type": "string", + "enum": [ + "PLUS_MINUS", + "CHECK_X", + "THREE_COLOR_ARROW", + "THREE_GRAY_ARROW", + "CARET_UP_MINUS_DOWN", + "THREE_SHAPE", + "THREE_CIRCLE", + "FLAGS", + "BARS", + "FOUR_COLOR_ARROW", + "FOUR_GRAY_ARROW" + ] + }, + "ConditionalFormattingSolidColor": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "ContributionAnalysisDefault": { + "type": "object", + "properties": { + "MeasureFieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "ContributorDimensions": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 4, + "minItems": 1 + } + }, + "required": [ + "ContributorDimensions", + "MeasureFieldId" + ], + "additionalProperties": false + }, + "CrossDatasetTypes": { + "type": "string", + "enum": [ + "ALL_DATASETS", + "SINGLE_DATASET" + ] + }, + "CurrencyDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "Symbol": { + "type": "string", + "pattern": "[A-Z]{3}" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NumberScale": { + "$ref": "#/definitions/NumberScale" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "CustomActionFilterOperation": { + "type": "object", + "properties": { + "SelectedFieldsConfiguration": { + "$ref": "#/definitions/FilterOperationSelectedFieldsConfiguration" + }, + "TargetVisualsConfiguration": { + "$ref": "#/definitions/FilterOperationTargetVisualsConfiguration" + } + }, + "required": [ + "SelectedFieldsConfiguration", + "TargetVisualsConfiguration" + ], + "additionalProperties": false + }, + "CustomActionNavigationOperation": { + "type": "object", + "properties": { + "LocalNavigationConfiguration": { + "$ref": "#/definitions/LocalNavigationConfiguration" + } + }, + "additionalProperties": false + }, + "CustomActionSetParametersOperation": { + "type": "object", + "properties": { + "ParameterValueConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/SetParameterValueConfiguration" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "required": [ + "ParameterValueConfigurations" + ], + "additionalProperties": false + }, + "CustomActionURLOperation": { + "type": "object", + "properties": { + "URLTemplate": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "URLTarget": { + "$ref": "#/definitions/URLTargetConfiguration" + } + }, + "required": [ + "URLTarget", + "URLTemplate" + ], + "additionalProperties": false + }, + "CustomColor": { + "type": "object", + "properties": { + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "SpecialValue": { + "$ref": "#/definitions/SpecialValue" + } + }, + "required": [ + "Color" + ], + "additionalProperties": false + }, + "CustomContentConfiguration": { + "type": "object", + "properties": { + "ContentUrl": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ContentType": { + "$ref": "#/definitions/CustomContentType" + }, + "ImageScaling": { + "$ref": "#/definitions/CustomContentImageScalingConfiguration" + } + }, + "additionalProperties": false + }, + "CustomContentImageScalingConfiguration": { + "type": "string", + "enum": [ + "FIT_TO_HEIGHT", + "FIT_TO_WIDTH", + "DO_NOT_SCALE", + "SCALE_TO_VISUAL" + ] + }, + "CustomContentType": { + "type": "string", + "enum": [ + "IMAGE", + "OTHER_EMBEDDED_CONTENT" + ] + }, + "CustomContentVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/CustomContentConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "CustomFilterConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValue": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "CustomFilterListConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "CustomNarrativeOptions": { + "type": "object", + "properties": { + "Narrative": { + "type": "string", + "maxLength": 150000, + "minLength": 0 + } + }, + "required": [ + "Narrative" + ], + "additionalProperties": false + }, + "CustomParameterValues": { + "type": "object", + "properties": { + "StringValues": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + }, + "IntegerValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + }, + "DecimalValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + }, + "DateTimeValues": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "CustomValuesConfiguration": { + "type": "object", + "properties": { + "IncludeNullValue": { + "type": "boolean" + }, + "CustomValues": { + "$ref": "#/definitions/CustomParameterValues" + } + }, + "required": [ + "CustomValues" + ], + "additionalProperties": false + }, + "DataBarsOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "PositiveColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "NegativeColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "DataColor": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DataValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "DataFieldSeriesItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string" + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "Settings": { + "$ref": "#/definitions/LineChartSeriesSettings" + } + }, + "required": [ + "AxisBinding", + "FieldId" + ], + "additionalProperties": false + }, + "DataLabelContent": { + "type": "string", + "enum": [ + "VALUE", + "PERCENT", + "VALUE_AND_PERCENT" + ] + }, + "DataLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CategoryLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MeasureLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "DataLabelTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/DataLabelType" + }, + "maxItems": 100, + "minItems": 0 + }, + "Position": { + "$ref": "#/definitions/DataLabelPosition" + }, + "LabelContent": { + "$ref": "#/definitions/DataLabelContent" + }, + "LabelFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "LabelColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Overlap": { + "$ref": "#/definitions/DataLabelOverlap" + }, + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DataLabelOverlap": { + "type": "string", + "enum": [ + "DISABLE_OVERLAP", + "ENABLE_OVERLAP" + ] + }, + "DataLabelPosition": { + "type": "string", + "enum": [ + "INSIDE", + "OUTSIDE", + "LEFT", + "TOP", + "BOTTOM", + "RIGHT" + ] + }, + "DataLabelType": { + "type": "object", + "properties": { + "FieldLabelType": { + "$ref": "#/definitions/FieldLabelType" + }, + "DataPathLabelType": { + "$ref": "#/definitions/DataPathLabelType" + }, + "RangeEndsLabelType": { + "$ref": "#/definitions/RangeEndsLabelType" + }, + "MinimumLabelType": { + "$ref": "#/definitions/MinimumLabelType" + }, + "MaximumLabelType": { + "$ref": "#/definitions/MaximumLabelType" + } + }, + "additionalProperties": false + }, + "DataPathColor": { + "type": "object", + "properties": { + "Element": { + "$ref": "#/definitions/DataPathValue" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Color", + "Element" + ], + "additionalProperties": false + }, + "DataPathLabelType": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DataPathSort": { + "type": "object", + "properties": { + "Direction": { + "$ref": "#/definitions/SortDirection" + }, + "SortPaths": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "required": [ + "Direction", + "SortPaths" + ], + "additionalProperties": false + }, + "DataPathType": { + "type": "object", + "properties": { + "PivotTableDataPathType": { + "$ref": "#/definitions/PivotTableDataPathType" + } + }, + "additionalProperties": false + }, + "DataPathValue": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldValue": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + }, + "DataPathType": { + "$ref": "#/definitions/DataPathType" + } + }, + "additionalProperties": false + }, + "DataSetConfiguration": { + "type": "object", + "properties": { + "Placeholder": { + "type": "string" + }, + "DataSetSchema": { + "$ref": "#/definitions/DataSetSchema" + }, + "ColumnGroupSchemaList": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnGroupSchema" + }, + "maxItems": 500, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "DataSetReference": { + "type": "object", + "properties": { + "DataSetPlaceholder": { + "type": "string", + "pattern": ".*\\S.*" + }, + "DataSetArn": { + "type": "string" + } + }, + "required": [ + "DataSetArn", + "DataSetPlaceholder" + ], + "additionalProperties": false + }, + "DataSetSchema": { + "type": "object", + "properties": { + "ColumnSchemaList": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnSchema" + }, + "maxItems": 500, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "DateAggregationFunction": { + "type": "string", + "enum": [ + "COUNT", + "DISTINCT_COUNT", + "MIN", + "MAX" + ] + }, + "DateAxisOptions": { + "type": "object", + "properties": { + "MissingDateVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DateDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "DateGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "DateMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/DateAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "DateTimeDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + }, + "maxItems": 50000, + "minItems": 0 + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + } + }, + "additionalProperties": false + }, + "DateTimeFormatConfiguration": { + "type": "object", + "properties": { + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + }, + "NumericFormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "DateTimeHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "HierarchyId" + ], + "additionalProperties": false + }, + "DateTimeParameterDeclaration": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/DateTimeDefaultValues" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/DateTimeValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "DateTimePickerControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "DateTimeValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "DayOfTheWeek": { + "type": "string", + "enum": [ + "SUNDAY", + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY" + ] + }, + "DecimalDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "DecimalParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/DecimalDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/DecimalValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "DecimalPlacesConfiguration": { + "type": "object", + "properties": { + "DecimalPlaces": { + "type": "number", + "maximum": 20, + "minimum": 0 + } + }, + "required": [ + "DecimalPlaces" + ], + "additionalProperties": false + }, + "DecimalValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "DefaultFreeFormLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DefaultGridLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DefaultInteractiveLayoutConfiguration": { + "type": "object", + "properties": { + "Grid": { + "$ref": "#/definitions/DefaultGridLayoutConfiguration" + }, + "FreeForm": { + "$ref": "#/definitions/DefaultFreeFormLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "DefaultNewSheetConfiguration": { + "type": "object", + "properties": { + "InteractiveLayoutConfiguration": { + "$ref": "#/definitions/DefaultInteractiveLayoutConfiguration" + }, + "PaginatedLayoutConfiguration": { + "$ref": "#/definitions/DefaultPaginatedLayoutConfiguration" + }, + "SheetContentType": { + "$ref": "#/definitions/SheetContentType" + } + }, + "additionalProperties": false + }, + "DefaultPaginatedLayoutConfiguration": { + "type": "object", + "properties": { + "SectionBased": { + "$ref": "#/definitions/DefaultSectionBasedLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "DefaultSectionBasedLayoutConfiguration": { + "type": "object", + "properties": { + "CanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutCanvasSizeOptions" + } + }, + "required": [ + "CanvasSizeOptions" + ], + "additionalProperties": false + }, + "DestinationParameterValueConfiguration": { + "type": "object", + "properties": { + "CustomValuesConfiguration": { + "$ref": "#/definitions/CustomValuesConfiguration" + }, + "SelectAllValueOptions": { + "$ref": "#/definitions/SelectAllValueOptions" + }, + "SourceParameterName": { + "type": "string" + }, + "SourceField": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "SourceColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "DimensionField": { + "type": "object", + "properties": { + "NumericalDimensionField": { + "$ref": "#/definitions/NumericalDimensionField" + }, + "CategoricalDimensionField": { + "$ref": "#/definitions/CategoricalDimensionField" + }, + "DateDimensionField": { + "$ref": "#/definitions/DateDimensionField" + } + }, + "additionalProperties": false + }, + "DonutCenterOptions": { + "type": "object", + "properties": { + "LabelVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "DonutOptions": { + "type": "object", + "properties": { + "ArcOptions": { + "$ref": "#/definitions/ArcOptions" + }, + "DonutCenterOptions": { + "$ref": "#/definitions/DonutCenterOptions" + } + }, + "additionalProperties": false + }, + "DrillDownFilter": { + "type": "object", + "properties": { + "NumericEqualityFilter": { + "$ref": "#/definitions/NumericEqualityDrillDownFilter" + }, + "CategoryFilter": { + "$ref": "#/definitions/CategoryDrillDownFilter" + }, + "TimeRangeFilter": { + "$ref": "#/definitions/TimeRangeDrillDownFilter" + } + }, + "additionalProperties": false + }, + "DropDownControlDisplayOptions": { + "type": "object", + "properties": { + "SelectAllOptions": { + "$ref": "#/definitions/ListControlSelectAllOptions" + }, + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "DynamicDefaultValue": { + "type": "object", + "properties": { + "UserNameColumn": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "GroupNameColumn": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "DefaultValueColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "required": [ + "DefaultValueColumn" + ], + "additionalProperties": false + }, + "EmptyVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "Entity": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "pattern": ".*\\S.*" + } + }, + "additionalProperties": false + }, + "ExcludePeriodConfiguration": { + "type": "object", + "properties": { + "Amount": { + "type": "number", + "default": null + }, + "Granularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + } + }, + "required": [ + "Amount", + "Granularity" + ], + "additionalProperties": false + }, + "ExplicitHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 2 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "Columns", + "HierarchyId" + ], + "additionalProperties": false + }, + "FieldBasedTooltip": { + "type": "object", + "properties": { + "AggregationVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TooltipTitleType": { + "$ref": "#/definitions/TooltipTitleType" + }, + "TooltipFields": { + "type": "array", + "items": { + "$ref": "#/definitions/TooltipItem" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FieldLabelType": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "FieldSeriesItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "Settings": { + "$ref": "#/definitions/LineChartSeriesSettings" + } + }, + "required": [ + "AxisBinding", + "FieldId" + ], + "additionalProperties": false + }, + "FieldSort": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Direction": { + "$ref": "#/definitions/SortDirection" + } + }, + "required": [ + "Direction", + "FieldId" + ], + "additionalProperties": false + }, + "FieldSortOptions": { + "type": "object", + "properties": { + "FieldSort": { + "$ref": "#/definitions/FieldSort" + }, + "ColumnSort": { + "$ref": "#/definitions/ColumnSort" + } + }, + "additionalProperties": false + }, + "FieldTooltipItem": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Label": { + "type": "string" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "FilledMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Geospatial": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilledMapConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/FilledMapConditionalFormattingOption" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "required": [ + "ConditionalFormattingOptions" + ], + "additionalProperties": false + }, + "FilledMapConditionalFormattingOption": { + "type": "object", + "properties": { + "Shape": { + "$ref": "#/definitions/FilledMapShapeConditionalFormatting" + } + }, + "required": [ + "Shape" + ], + "additionalProperties": false + }, + "FilledMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/FilledMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/FilledMapSortConfiguration" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "WindowOptions": { + "$ref": "#/definitions/GeospatialWindowOptions" + }, + "MapStyleOptions": { + "$ref": "#/definitions/GeospatialMapStyleOptions" + } + }, + "additionalProperties": false + }, + "FilledMapFieldWells": { + "type": "object", + "properties": { + "FilledMapAggregatedFieldWells": { + "$ref": "#/definitions/FilledMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "FilledMapShapeConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Format": { + "$ref": "#/definitions/ShapeConditionalFormat" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "FilledMapSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilledMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/FilledMapConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/FilledMapConditionalFormatting" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "Filter": { + "type": "object", + "properties": { + "CategoryFilter": { + "$ref": "#/definitions/CategoryFilter" + }, + "NumericRangeFilter": { + "$ref": "#/definitions/NumericRangeFilter" + }, + "NumericEqualityFilter": { + "$ref": "#/definitions/NumericEqualityFilter" + }, + "TimeEqualityFilter": { + "$ref": "#/definitions/TimeEqualityFilter" + }, + "TimeRangeFilter": { + "$ref": "#/definitions/TimeRangeFilter" + }, + "RelativeDatesFilter": { + "$ref": "#/definitions/RelativeDatesFilter" + }, + "TopBottomFilter": { + "$ref": "#/definitions/TopBottomFilter" + } + }, + "additionalProperties": false + }, + "FilterControl": { + "type": "object", + "properties": { + "DateTimePicker": { + "$ref": "#/definitions/FilterDateTimePickerControl" + }, + "List": { + "$ref": "#/definitions/FilterListControl" + }, + "Dropdown": { + "$ref": "#/definitions/FilterDropDownControl" + }, + "TextField": { + "$ref": "#/definitions/FilterTextFieldControl" + }, + "TextArea": { + "$ref": "#/definitions/FilterTextAreaControl" + }, + "Slider": { + "$ref": "#/definitions/FilterSliderControl" + }, + "RelativeDateTime": { + "$ref": "#/definitions/FilterRelativeDateTimeControl" + } + }, + "additionalProperties": false + }, + "FilterDateTimePickerControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/DateTimePickerControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlDateTimePickerType" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterDropDownControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/DropDownControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/FilterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterGroup": { + "type": "object", + "properties": { + "FilterGroupId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Filters": { + "type": "array", + "items": { + "$ref": "#/definitions/Filter" + }, + "maxItems": 20, + "minItems": 0 + }, + "ScopeConfiguration": { + "$ref": "#/definitions/FilterScopeConfiguration" + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "CrossDataset": { + "$ref": "#/definitions/CrossDatasetTypes" + } + }, + "required": [ + "CrossDataset", + "FilterGroupId", + "Filters", + "ScopeConfiguration" + ], + "additionalProperties": false + }, + "FilterListConfiguration": { + "type": "object", + "properties": { + "MatchOperator": { + "$ref": "#/definitions/CategoryFilterMatchOperator" + }, + "CategoryValues": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + }, + "maxItems": 100000, + "minItems": 0 + }, + "SelectAllOptions": { + "$ref": "#/definitions/CategoryFilterSelectAllOptions" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "MatchOperator" + ], + "additionalProperties": false + }, + "FilterListControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/ListControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/FilterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterNullOption": { + "type": "string", + "enum": [ + "ALL_VALUES", + "NULLS_ONLY", + "NON_NULLS_ONLY" + ] + }, + "FilterOperationSelectedFieldsConfiguration": { + "type": "object", + "properties": { + "SelectedFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 20, + "minItems": 1 + }, + "SelectedFieldOptions": { + "$ref": "#/definitions/SelectedFieldOptions" + }, + "SelectedColumns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilterOperationTargetVisualsConfiguration": { + "type": "object", + "properties": { + "SameSheetTargetVisualConfiguration": { + "$ref": "#/definitions/SameSheetTargetVisualConfiguration" + } + }, + "additionalProperties": false + }, + "FilterRelativeDateTimeControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/RelativeDateTimeControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterScopeConfiguration": { + "type": "object", + "properties": { + "SelectedSheets": { + "$ref": "#/definitions/SelectedSheetsFilterScopeConfiguration" + }, + "AllSheets": { + "$ref": "#/definitions/AllSheetsFilterScopeConfiguration" + } + }, + "additionalProperties": false + }, + "FilterSelectableValues": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FilterSliderControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/SliderControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlSliderType" + }, + "MaximumValue": { + "type": "number", + "default": 0 + }, + "MinimumValue": { + "type": "number", + "default": 0 + }, + "StepSize": { + "type": "number", + "default": 0 + } + }, + "required": [ + "FilterControlId", + "MaximumValue", + "MinimumValue", + "SourceFilterId", + "StepSize", + "Title" + ], + "additionalProperties": false + }, + "FilterTextAreaControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Delimiter": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DisplayOptions": { + "$ref": "#/definitions/TextAreaControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterTextFieldControl": { + "type": "object", + "properties": { + "FilterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceFilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "DisplayOptions": { + "$ref": "#/definitions/TextFieldControlDisplayOptions" + } + }, + "required": [ + "FilterControlId", + "SourceFilterId", + "Title" + ], + "additionalProperties": false + }, + "FilterVisualScope": { + "type": "string", + "enum": [ + "ALL_VISUALS", + "SELECTED_VISUALS" + ] + }, + "FontConfiguration": { + "type": "object", + "properties": { + "FontSize": { + "$ref": "#/definitions/FontSize" + }, + "FontDecoration": { + "$ref": "#/definitions/FontDecoration" + }, + "FontColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "FontWeight": { + "$ref": "#/definitions/FontWeight" + }, + "FontStyle": { + "$ref": "#/definitions/FontStyle" + } + }, + "additionalProperties": false + }, + "FontDecoration": { + "type": "string", + "enum": [ + "UNDERLINE", + "NONE" + ] + }, + "FontSize": { + "type": "object", + "properties": { + "Relative": { + "$ref": "#/definitions/RelativeFontSize" + } + }, + "additionalProperties": false + }, + "FontStyle": { + "type": "string", + "enum": [ + "NORMAL", + "ITALIC" + ] + }, + "FontWeight": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/FontWeightName" + } + }, + "additionalProperties": false + }, + "FontWeightName": { + "type": "string", + "enum": [ + "NORMAL", + "BOLD" + ] + }, + "ForecastComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodsForward": { + "type": "number", + "maximum": 1000, + "minimum": 1 + }, + "PeriodsBackward": { + "type": "number", + "maximum": 1000, + "minimum": 0 + }, + "UpperBoundary": { + "type": "number", + "default": null + }, + "LowerBoundary": { + "type": "number", + "default": null + }, + "PredictionInterval": { + "type": "number", + "maximum": 95, + "minimum": 50 + }, + "Seasonality": { + "$ref": "#/definitions/ForecastComputationSeasonality" + }, + "CustomSeasonalityValue": { + "type": "number", + "default": null, + "maximum": 180, + "minimum": 1 + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "ForecastComputationSeasonality": { + "type": "string", + "enum": [ + "AUTOMATIC", + "CUSTOM" + ] + }, + "ForecastConfiguration": { + "type": "object", + "properties": { + "ForecastProperties": { + "$ref": "#/definitions/TimeBasedForecastProperties" + }, + "Scenario": { + "$ref": "#/definitions/ForecastScenario" + } + }, + "additionalProperties": false + }, + "ForecastScenario": { + "type": "object", + "properties": { + "WhatIfPointScenario": { + "$ref": "#/definitions/WhatIfPointScenario" + }, + "WhatIfRangeScenario": { + "$ref": "#/definitions/WhatIfRangeScenario" + } + }, + "additionalProperties": false + }, + "FormatConfiguration": { + "type": "object", + "properties": { + "StringFormatConfiguration": { + "$ref": "#/definitions/StringFormatConfiguration" + }, + "NumberFormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + }, + "DateTimeFormatConfiguration": { + "$ref": "#/definitions/DateTimeFormatConfiguration" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "ScreenCanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutScreenCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/FreeFormLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/FreeFormLayoutCanvasSizeOptions" + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "FreeFormLayoutElement": { + "type": "object", + "properties": { + "ElementId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "ElementType": { + "$ref": "#/definitions/LayoutElementType" + }, + "XAxisLocation": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "YAxisLocation": { + "type": "string", + "description": "String based length that is composed of value and unit in px with Integer.MAX_VALUE as maximum value" + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "RenderingRules": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetElementRenderingRule" + }, + "maxItems": 10000, + "minItems": 0 + }, + "BorderStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBorderStyle" + }, + "SelectedBorderStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBorderStyle" + }, + "BackgroundStyle": { + "$ref": "#/definitions/FreeFormLayoutElementBackgroundStyle" + }, + "LoadingAnimation": { + "$ref": "#/definitions/LoadingAnimation" + } + }, + "required": [ + "ElementId", + "ElementType", + "Height", + "Width", + "XAxisLocation", + "YAxisLocation" + ], + "additionalProperties": false + }, + "FreeFormLayoutElementBackgroundStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutElementBorderStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "FreeFormLayoutScreenCanvasSizeOptions": { + "type": "object", + "properties": { + "OptimizedViewPortWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "OptimizedViewPortWidth" + ], + "additionalProperties": false + }, + "FreeFormSectionLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/FreeFormLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "FunnelChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "FunnelChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/FunnelChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/FunnelChartSortConfiguration" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "DataLabelOptions": { + "$ref": "#/definitions/FunnelChartDataLabelOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "FunnelChartDataLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CategoryLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MeasureLabelVisibility": { + "$ref": "#/definitions/Visibility" + }, + "Position": { + "$ref": "#/definitions/DataLabelPosition" + }, + "LabelFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "LabelColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "MeasureDataLabelStyle": { + "$ref": "#/definitions/FunnelChartMeasureDataLabelStyle" + } + }, + "additionalProperties": false + }, + "FunnelChartFieldWells": { + "type": "object", + "properties": { + "FunnelChartAggregatedFieldWells": { + "$ref": "#/definitions/FunnelChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "FunnelChartMeasureDataLabelStyle": { + "type": "string", + "enum": [ + "VALUE_ONLY", + "PERCENTAGE_BY_FIRST_STAGE", + "PERCENTAGE_BY_PREVIOUS_STAGE", + "VALUE_AND_PERCENTAGE_BY_FIRST_STAGE", + "VALUE_AND_PERCENTAGE_BY_PREVIOUS_STAGE" + ] + }, + "FunnelChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "FunnelChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/FunnelChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GaugeChartArcConditionalFormatting": { + "type": "object", + "properties": { + "ForegroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "GaugeChartConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/GaugeChartConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GaugeChartConditionalFormattingOption": { + "type": "object", + "properties": { + "PrimaryValue": { + "$ref": "#/definitions/GaugeChartPrimaryValueConditionalFormatting" + }, + "Arc": { + "$ref": "#/definitions/GaugeChartArcConditionalFormatting" + } + }, + "additionalProperties": false + }, + "GaugeChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/GaugeChartFieldWells" + }, + "GaugeChartOptions": { + "$ref": "#/definitions/GaugeChartOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "TooltipOptions": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "GaugeChartFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TargetValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GaugeChartOptions": { + "type": "object", + "properties": { + "PrimaryValueDisplayType": { + "$ref": "#/definitions/PrimaryValueDisplayType" + }, + "Comparison": { + "$ref": "#/definitions/ComparisonConfiguration" + }, + "ArcAxis": { + "$ref": "#/definitions/ArcAxisConfiguration" + }, + "Arc": { + "$ref": "#/definitions/ArcConfiguration" + }, + "PrimaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + } + }, + "additionalProperties": false + }, + "GaugeChartPrimaryValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "GaugeChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/GaugeChartConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/GaugeChartConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GeospatialCoordinateBounds": { + "type": "object", + "properties": { + "North": { + "type": "number", + "maximum": 90, + "minimum": -90 + }, + "South": { + "type": "number", + "maximum": 90, + "minimum": -90 + }, + "West": { + "type": "number", + "maximum": 1800, + "minimum": -1800 + }, + "East": { + "type": "number", + "maximum": 1800, + "minimum": -1800 + } + }, + "required": [ + "East", + "North", + "South", + "West" + ], + "additionalProperties": false + }, + "GeospatialHeatmapColorScale": { + "type": "object", + "properties": { + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/GeospatialHeatmapDataColor" + }, + "maxItems": 2, + "minItems": 2 + } + }, + "additionalProperties": false + }, + "GeospatialHeatmapConfiguration": { + "type": "object", + "properties": { + "HeatmapColor": { + "$ref": "#/definitions/GeospatialHeatmapColorScale" + } + }, + "additionalProperties": false + }, + "GeospatialHeatmapDataColor": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "Color" + ], + "additionalProperties": false + }, + "GeospatialMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Geospatial": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GeospatialMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/GeospatialMapFieldWells" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "WindowOptions": { + "$ref": "#/definitions/GeospatialWindowOptions" + }, + "MapStyleOptions": { + "$ref": "#/definitions/GeospatialMapStyleOptions" + }, + "PointStyleOptions": { + "$ref": "#/definitions/GeospatialPointStyleOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "GeospatialMapFieldWells": { + "type": "object", + "properties": { + "GeospatialMapAggregatedFieldWells": { + "$ref": "#/definitions/GeospatialMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "GeospatialMapStyleOptions": { + "type": "object", + "properties": { + "BaseMapStyle": { + "$ref": "#/definitions/BaseMapStyleType" + } + }, + "additionalProperties": false + }, + "GeospatialMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/GeospatialMapConfiguration" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "GeospatialPointStyleOptions": { + "type": "object", + "properties": { + "SelectedPointStyle": { + "$ref": "#/definitions/GeospatialSelectedPointStyle" + }, + "ClusterMarkerConfiguration": { + "$ref": "#/definitions/ClusterMarkerConfiguration" + }, + "HeatmapConfiguration": { + "$ref": "#/definitions/GeospatialHeatmapConfiguration" + } + }, + "additionalProperties": false + }, + "GeospatialSelectedPointStyle": { + "type": "string", + "enum": [ + "POINT", + "CLUSTER", + "HEATMAP" + ] + }, + "GeospatialWindowOptions": { + "type": "object", + "properties": { + "Bounds": { + "$ref": "#/definitions/GeospatialCoordinateBounds" + }, + "MapZoomMode": { + "$ref": "#/definitions/MapZoomMode" + } + }, + "additionalProperties": false + }, + "GlobalTableBorderOptions": { + "type": "object", + "properties": { + "UniformBorder": { + "$ref": "#/definitions/TableBorderOptions" + }, + "SideSpecificBorder": { + "$ref": "#/definitions/TableSideBorderOptions" + } + }, + "additionalProperties": false + }, + "GradientColor": { + "type": "object", + "properties": { + "Stops": { + "type": "array", + "items": { + "$ref": "#/definitions/GradientStop" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "GradientStop": { + "type": "object", + "properties": { + "GradientOffset": { + "type": "number", + "default": 0 + }, + "DataValue": { + "type": "number", + "default": null + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "required": [ + "GradientOffset" + ], + "additionalProperties": false + }, + "GridLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "ScreenCanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutScreenCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "GridLayoutConfiguration": { + "type": "object", + "properties": { + "Elements": { + "type": "array", + "items": { + "$ref": "#/definitions/GridLayoutElement" + }, + "maxItems": 430, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/GridLayoutCanvasSizeOptions" + } + }, + "required": [ + "Elements" + ], + "additionalProperties": false + }, + "GridLayoutElement": { + "type": "object", + "properties": { + "ElementId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "ElementType": { + "$ref": "#/definitions/LayoutElementType" + }, + "ColumnIndex": { + "type": "number", + "maximum": 35, + "minimum": 0 + }, + "ColumnSpan": { + "type": "number", + "maximum": 36, + "minimum": 1 + }, + "RowIndex": { + "type": "number", + "maximum": 9009, + "minimum": 0 + }, + "RowSpan": { + "type": "number", + "maximum": 21, + "minimum": 1 + } + }, + "required": [ + "ColumnSpan", + "ElementId", + "ElementType", + "RowSpan" + ], + "additionalProperties": false + }, + "GridLayoutScreenCanvasSizeOptions": { + "type": "object", + "properties": { + "ResizeOption": { + "$ref": "#/definitions/ResizeOption" + }, + "OptimizedViewPortWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "ResizeOption" + ], + "additionalProperties": false + }, + "GrowthRateComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodSize": { + "type": "number", + "default": 0, + "maximum": 52, + "minimum": 2 + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "HeaderFooterSectionConfiguration": { + "type": "object", + "properties": { + "SectionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Layout": { + "$ref": "#/definitions/SectionLayoutConfiguration" + }, + "Style": { + "$ref": "#/definitions/SectionStyle" + } + }, + "required": [ + "Layout", + "SectionId" + ], + "additionalProperties": false + }, + "HeatMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Rows": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "HeatMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/HeatMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/HeatMapSortConfiguration" + }, + "RowLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColumnLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorScale": { + "$ref": "#/definitions/ColorScale" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + } + }, + "additionalProperties": false + }, + "HeatMapFieldWells": { + "type": "object", + "properties": { + "HeatMapAggregatedFieldWells": { + "$ref": "#/definitions/HeatMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "HeatMapSortConfiguration": { + "type": "object", + "properties": { + "HeatMapRowSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "HeatMapColumnSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "HeatMapRowItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "HeatMapColumnItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "HeatMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/HeatMapConfiguration" + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "HistogramAggregatedFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "HistogramBinOptions": { + "type": "object", + "properties": { + "SelectedBinType": { + "$ref": "#/definitions/HistogramBinType" + }, + "BinCount": { + "$ref": "#/definitions/BinCountOptions" + }, + "BinWidth": { + "$ref": "#/definitions/BinWidthOptions" + }, + "StartValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "HistogramBinType": { + "type": "string", + "enum": [ + "BIN_COUNT", + "BIN_WIDTH" + ] + }, + "HistogramConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/HistogramFieldWells" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "YAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "BinOptions": { + "$ref": "#/definitions/HistogramBinOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "HistogramFieldWells": { + "type": "object", + "properties": { + "HistogramAggregatedFieldWells": { + "$ref": "#/definitions/HistogramAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "HistogramVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/HistogramConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "HorizontalTextAlignment": { + "type": "string", + "enum": [ + "LEFT", + "CENTER", + "RIGHT", + "AUTO" + ] + }, + "Icon": { + "type": "string", + "enum": [ + "CARET_UP", + "CARET_DOWN", + "PLUS", + "MINUS", + "ARROW_UP", + "ARROW_DOWN", + "ARROW_LEFT", + "ARROW_UP_LEFT", + "ARROW_DOWN_LEFT", + "ARROW_RIGHT", + "ARROW_UP_RIGHT", + "ARROW_DOWN_RIGHT", + "FACE_UP", + "FACE_DOWN", + "FACE_FLAT", + "ONE_BAR", + "TWO_BAR", + "THREE_BAR", + "CIRCLE", + "TRIANGLE", + "SQUARE", + "FLAG", + "THUMBS_UP", + "THUMBS_DOWN", + "CHECKMARK", + "X" + ] + }, + "InsightConfiguration": { + "type": "object", + "properties": { + "Computations": { + "type": "array", + "items": { + "$ref": "#/definitions/Computation" + }, + "maxItems": 100, + "minItems": 0 + }, + "CustomNarrative": { + "$ref": "#/definitions/CustomNarrativeOptions" + } + }, + "additionalProperties": false + }, + "InsightVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "InsightConfiguration": { + "$ref": "#/definitions/InsightConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "required": [ + "DataSetIdentifier", + "VisualId" + ], + "additionalProperties": false + }, + "IntegerDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "number" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "IntegerParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/IntegerDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/IntegerValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "IntegerValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "number", + "default": null + } + }, + "additionalProperties": false + }, + "ItemsLimitConfiguration": { + "type": "object", + "properties": { + "ItemsLimit": { + "type": "number", + "default": null + }, + "OtherCategories": { + "$ref": "#/definitions/OtherCategories" + } + }, + "additionalProperties": false + }, + "KPIActualValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIComparisonValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/KPIConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPIConditionalFormattingOption": { + "type": "object", + "properties": { + "PrimaryValue": { + "$ref": "#/definitions/KPIPrimaryValueConditionalFormatting" + }, + "ProgressBar": { + "$ref": "#/definitions/KPIProgressBarConditionalFormatting" + }, + "ActualValue": { + "$ref": "#/definitions/KPIActualValueConditionalFormatting" + }, + "ComparisonValue": { + "$ref": "#/definitions/KPIComparisonValueConditionalFormatting" + } + }, + "additionalProperties": false + }, + "KPIConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/KPIFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/KPISortConfiguration" + }, + "KPIOptions": { + "$ref": "#/definitions/KPIOptions" + } + }, + "additionalProperties": false + }, + "KPIFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TargetValues": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "TrendGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPIOptions": { + "type": "object", + "properties": { + "ProgressBar": { + "$ref": "#/definitions/ProgressBarOptions" + }, + "TrendArrows": { + "$ref": "#/definitions/TrendArrowOptions" + }, + "SecondaryValue": { + "$ref": "#/definitions/SecondaryValueOptions" + }, + "Comparison": { + "$ref": "#/definitions/ComparisonConfiguration" + }, + "PrimaryValueDisplayType": { + "$ref": "#/definitions/PrimaryValueDisplayType" + }, + "PrimaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "SecondaryValueFontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "Sparkline": { + "$ref": "#/definitions/KPISparklineOptions" + }, + "VisualLayoutOptions": { + "$ref": "#/definitions/KPIVisualLayoutOptions" + } + }, + "additionalProperties": false + }, + "KPIPrimaryValueConditionalFormatting": { + "type": "object", + "properties": { + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "KPIProgressBarConditionalFormatting": { + "type": "object", + "properties": { + "ForegroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "KPISortConfiguration": { + "type": "object", + "properties": { + "TrendGroupSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "KPISparklineOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Type": { + "$ref": "#/definitions/KPISparklineType" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "TooltipVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "KPISparklineType": { + "type": "string", + "enum": [ + "LINE", + "AREA" + ] + }, + "KPIVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/KPIConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/KPIConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "KPIVisualLayoutOptions": { + "type": "object", + "properties": { + "StandardLayout": { + "$ref": "#/definitions/KPIVisualStandardLayout" + } + }, + "additionalProperties": false + }, + "KPIVisualStandardLayout": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/KPIVisualStandardLayoutType" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "KPIVisualStandardLayoutType": { + "type": "string", + "enum": [ + "CLASSIC", + "VERTICAL" + ] + }, + "LabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "CustomLabel": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Layout": { + "type": "object", + "properties": { + "Configuration": { + "$ref": "#/definitions/LayoutConfiguration" + } + }, + "required": [ + "Configuration" + ], + "additionalProperties": false + }, + "LayoutConfiguration": { + "type": "object", + "properties": { + "GridLayout": { + "$ref": "#/definitions/GridLayoutConfiguration" + }, + "FreeFormLayout": { + "$ref": "#/definitions/FreeFormLayoutConfiguration" + }, + "SectionBasedLayout": { + "$ref": "#/definitions/SectionBasedLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "LayoutElementType": { + "type": "string", + "enum": [ + "VISUAL", + "FILTER_CONTROL", + "PARAMETER_CONTROL", + "TEXT_BOX" + ] + }, + "LegendOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "Title": { + "$ref": "#/definitions/LabelOptions" + }, + "Position": { + "$ref": "#/definitions/LegendPosition" + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "LegendPosition": { + "type": "string", + "enum": [ + "AUTO", + "RIGHT", + "BOTTOM", + "TOP" + ] + }, + "LineChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "LineChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/LineChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/LineChartSortConfiguration" + }, + "ForecastConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/ForecastConfiguration" + }, + "maxItems": 10, + "minItems": 0 + }, + "Type": { + "$ref": "#/definitions/LineChartType" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/LineSeriesAxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SecondaryYAxisDisplayOptions": { + "$ref": "#/definitions/LineSeriesAxisDisplayOptions" + }, + "SecondaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "DefaultSeriesSettings": { + "$ref": "#/definitions/LineChartDefaultSeriesSettings" + }, + "Series": { + "type": "array", + "items": { + "$ref": "#/definitions/SeriesItem" + }, + "maxItems": 10, + "minItems": 0 + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "ReferenceLines": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceLine" + }, + "maxItems": 20, + "minItems": 0 + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "LineChartDefaultSeriesSettings": { + "type": "object", + "properties": { + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "LineStyleSettings": { + "$ref": "#/definitions/LineChartLineStyleSettings" + }, + "MarkerStyleSettings": { + "$ref": "#/definitions/LineChartMarkerStyleSettings" + } + }, + "additionalProperties": false + }, + "LineChartFieldWells": { + "type": "object", + "properties": { + "LineChartAggregatedFieldWells": { + "$ref": "#/definitions/LineChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "LineChartLineStyle": { + "type": "string", + "enum": [ + "SOLID", + "DOTTED", + "DASHED" + ] + }, + "LineChartLineStyleSettings": { + "type": "object", + "properties": { + "LineVisibility": { + "$ref": "#/definitions/Visibility" + }, + "LineInterpolation": { + "$ref": "#/definitions/LineInterpolation" + }, + "LineStyle": { + "$ref": "#/definitions/LineChartLineStyle" + }, + "LineWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "LineChartMarkerShape": { + "type": "string", + "enum": [ + "CIRCLE", + "TRIANGLE", + "SQUARE", + "DIAMOND", + "ROUNDED_SQUARE" + ] + }, + "LineChartMarkerStyleSettings": { + "type": "object", + "properties": { + "MarkerVisibility": { + "$ref": "#/definitions/Visibility" + }, + "MarkerShape": { + "$ref": "#/definitions/LineChartMarkerShape" + }, + "MarkerSize": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "MarkerColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "LineChartSeriesSettings": { + "type": "object", + "properties": { + "LineStyleSettings": { + "$ref": "#/definitions/LineChartLineStyleSettings" + }, + "MarkerStyleSettings": { + "$ref": "#/definitions/LineChartMarkerStyleSettings" + } + }, + "additionalProperties": false + }, + "LineChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "LineChartType": { + "type": "string", + "enum": [ + "LINE", + "AREA", + "STACKED_AREA" + ] + }, + "LineChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/LineChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "LineInterpolation": { + "type": "string", + "enum": [ + "LINEAR", + "SMOOTH", + "STEPPED" + ] + }, + "LineSeriesAxisDisplayOptions": { + "type": "object", + "properties": { + "AxisOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "MissingDataConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/MissingDataConfiguration" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ListControlDisplayOptions": { + "type": "object", + "properties": { + "SearchOptions": { + "$ref": "#/definitions/ListControlSearchOptions" + }, + "SelectAllOptions": { + "$ref": "#/definitions/ListControlSelectAllOptions" + }, + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "ListControlSearchOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "ListControlSelectAllOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "LoadingAnimation": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "LocalNavigationConfiguration": { + "type": "object", + "properties": { + "TargetSheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + } + }, + "required": [ + "TargetSheetId" + ], + "additionalProperties": false + }, + "LongFormatText": { + "type": "object", + "properties": { + "PlainText": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "RichText": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "MapZoomMode": { + "type": "string", + "enum": [ + "AUTO", + "MANUAL" + ] + }, + "MappedDataSetParameter": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DataSetParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "required": [ + "DataSetIdentifier", + "DataSetParameterName" + ], + "additionalProperties": false + }, + "MaximumLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "MaximumMinimumComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "Type": { + "$ref": "#/definitions/MaximumMinimumComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "MaximumMinimumComputationType": { + "type": "string", + "enum": [ + "MAXIMUM", + "MINIMUM" + ] + }, + "MeasureField": { + "type": "object", + "properties": { + "NumericalMeasureField": { + "$ref": "#/definitions/NumericalMeasureField" + }, + "CategoricalMeasureField": { + "$ref": "#/definitions/CategoricalMeasureField" + }, + "DateMeasureField": { + "$ref": "#/definitions/DateMeasureField" + }, + "CalculatedMeasureField": { + "$ref": "#/definitions/CalculatedMeasureField" + } + }, + "additionalProperties": false + }, + "MetricComparisonComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "FromValue": { + "$ref": "#/definitions/MeasureField" + }, + "TargetValue": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "MinimumLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "MissingDataConfiguration": { + "type": "object", + "properties": { + "TreatmentOption": { + "$ref": "#/definitions/MissingDataTreatmentOption" + } + }, + "additionalProperties": false + }, + "MissingDataTreatmentOption": { + "type": "string", + "enum": [ + "INTERPOLATE", + "SHOW_AS_ZERO", + "SHOW_AS_BLANK" + ] + }, + "NegativeValueConfiguration": { + "type": "object", + "properties": { + "DisplayMode": { + "$ref": "#/definitions/NegativeValueDisplayMode" + } + }, + "required": [ + "DisplayMode" + ], + "additionalProperties": false + }, + "NegativeValueDisplayMode": { + "type": "string", + "enum": [ + "POSITIVE", + "NEGATIVE" + ] + }, + "NullValueFormatConfiguration": { + "type": "object", + "properties": { + "NullString": { + "type": "string", + "maxLength": 128, + "minLength": 1 + } + }, + "required": [ + "NullString" + ], + "additionalProperties": false + }, + "NumberDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NumberScale": { + "$ref": "#/definitions/NumberScale" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumberFormatConfiguration": { + "type": "object", + "properties": { + "FormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumberScale": { + "type": "string", + "enum": [ + "NONE", + "AUTO", + "THOUSANDS", + "MILLIONS", + "BILLIONS", + "TRILLIONS" + ] + }, + "NumericAxisOptions": { + "type": "object", + "properties": { + "Scale": { + "$ref": "#/definitions/AxisScale" + }, + "Range": { + "$ref": "#/definitions/AxisDisplayRange" + } + }, + "additionalProperties": false + }, + "NumericEqualityDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Column", + "Value" + ], + "additionalProperties": false + }, + "NumericEqualityFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "number", + "default": null + }, + "SelectAllOptions": { + "$ref": "#/definitions/NumericFilterSelectAllOptions" + }, + "MatchOperator": { + "$ref": "#/definitions/NumericEqualityMatchOperator" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "Column", + "FilterId", + "MatchOperator", + "NullOption" + ], + "additionalProperties": false + }, + "NumericEqualityMatchOperator": { + "type": "string", + "enum": [ + "EQUALS", + "DOES_NOT_EQUAL" + ] + }, + "NumericFilterSelectAllOptions": { + "type": "string", + "enum": [ + "FILTER_ALL_VALUES" + ] + }, + "NumericFormatConfiguration": { + "type": "object", + "properties": { + "NumberDisplayFormatConfiguration": { + "$ref": "#/definitions/NumberDisplayFormatConfiguration" + }, + "CurrencyDisplayFormatConfiguration": { + "$ref": "#/definitions/CurrencyDisplayFormatConfiguration" + }, + "PercentageDisplayFormatConfiguration": { + "$ref": "#/definitions/PercentageDisplayFormatConfiguration" + } + }, + "additionalProperties": false + }, + "NumericRangeFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "IncludeMinimum": { + "type": "boolean", + "default": null + }, + "IncludeMaximum": { + "type": "boolean", + "default": null + }, + "RangeMinimum": { + "$ref": "#/definitions/NumericRangeFilterValue" + }, + "RangeMaximum": { + "$ref": "#/definitions/NumericRangeFilterValue" + }, + "SelectAllOptions": { + "$ref": "#/definitions/NumericFilterSelectAllOptions" + }, + "AggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + } + }, + "required": [ + "Column", + "FilterId", + "NullOption" + ], + "additionalProperties": false + }, + "NumericRangeFilterValue": { + "type": "object", + "properties": { + "StaticValue": { + "type": "number", + "default": null + }, + "Parameter": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "NumericSeparatorConfiguration": { + "type": "object", + "properties": { + "DecimalSeparator": { + "$ref": "#/definitions/NumericSeparatorSymbol" + }, + "ThousandsSeparator": { + "$ref": "#/definitions/ThousandSeparatorOptions" + } + }, + "additionalProperties": false + }, + "NumericSeparatorSymbol": { + "type": "string", + "enum": [ + "COMMA", + "DOT", + "SPACE" + ] + }, + "NumericalAggregationFunction": { + "type": "object", + "properties": { + "SimpleNumericalAggregation": { + "$ref": "#/definitions/SimpleNumericalAggregationFunction" + }, + "PercentileAggregation": { + "$ref": "#/definitions/PercentileAggregation" + } + }, + "additionalProperties": false + }, + "NumericalDimensionField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "NumericalMeasureField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AggregationFunction": { + "$ref": "#/definitions/NumericalAggregationFunction" + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumberFormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "OtherCategories": { + "type": "string", + "enum": [ + "INCLUDE", + "EXCLUDE" + ] + }, + "PaginationConfiguration": { + "type": "object", + "properties": { + "PageSize": { + "type": "number", + "default": null + }, + "PageNumber": { + "type": "number", + "minimum": 0 + } + }, + "required": [ + "PageNumber", + "PageSize" + ], + "additionalProperties": false + }, + "PanelBorderStyle": { + "type": "string", + "enum": [ + "SOLID", + "DASHED", + "DOTTED" + ] + }, + "PanelConfiguration": { + "type": "object", + "properties": { + "Title": { + "$ref": "#/definitions/PanelTitleOptions" + }, + "BorderVisibility": { + "$ref": "#/definitions/Visibility" + }, + "BorderThickness": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "BorderStyle": { + "$ref": "#/definitions/PanelBorderStyle" + }, + "BorderColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + }, + "GutterVisibility": { + "$ref": "#/definitions/Visibility" + }, + "GutterSpacing": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "BackgroundVisibility": { + "$ref": "#/definitions/Visibility" + }, + "BackgroundColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}(?:[A-F0-9]{2})?$" + } + }, + "additionalProperties": false + }, + "PanelTitleOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "HorizontalTextAlignment": { + "$ref": "#/definitions/HorizontalTextAlignment" + } + }, + "additionalProperties": false + }, + "PaperOrientation": { + "type": "string", + "enum": [ + "PORTRAIT", + "LANDSCAPE" + ] + }, + "PaperSize": { + "type": "string", + "enum": [ + "US_LETTER", + "US_LEGAL", + "US_TABLOID_LEDGER", + "A0", + "A1", + "A2", + "A3", + "A4", + "A5", + "JIS_B4", + "JIS_B5" + ] + }, + "ParameterControl": { + "type": "object", + "properties": { + "DateTimePicker": { + "$ref": "#/definitions/ParameterDateTimePickerControl" + }, + "List": { + "$ref": "#/definitions/ParameterListControl" + }, + "Dropdown": { + "$ref": "#/definitions/ParameterDropDownControl" + }, + "TextField": { + "$ref": "#/definitions/ParameterTextFieldControl" + }, + "TextArea": { + "$ref": "#/definitions/ParameterTextAreaControl" + }, + "Slider": { + "$ref": "#/definitions/ParameterSliderControl" + } + }, + "additionalProperties": false + }, + "ParameterDateTimePickerControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/DateTimePickerControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterDeclaration": { + "type": "object", + "properties": { + "StringParameterDeclaration": { + "$ref": "#/definitions/StringParameterDeclaration" + }, + "DecimalParameterDeclaration": { + "$ref": "#/definitions/DecimalParameterDeclaration" + }, + "IntegerParameterDeclaration": { + "$ref": "#/definitions/IntegerParameterDeclaration" + }, + "DateTimeParameterDeclaration": { + "$ref": "#/definitions/DateTimeParameterDeclaration" + } + }, + "additionalProperties": false + }, + "ParameterDropDownControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/DropDownControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/ParameterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterListControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/ListControlDisplayOptions" + }, + "Type": { + "$ref": "#/definitions/SheetControlListType" + }, + "SelectableValues": { + "$ref": "#/definitions/ParameterSelectableValues" + }, + "CascadingControlConfiguration": { + "$ref": "#/definitions/CascadingControlConfiguration" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterSelectableValues": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + }, + "LinkToDataSetColumn": { + "$ref": "#/definitions/ColumnIdentifier" + } + }, + "additionalProperties": false + }, + "ParameterSliderControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/SliderControlDisplayOptions" + }, + "MaximumValue": { + "type": "number", + "default": 0 + }, + "MinimumValue": { + "type": "number", + "default": 0 + }, + "StepSize": { + "type": "number", + "default": 0 + } + }, + "required": [ + "MaximumValue", + "MinimumValue", + "ParameterControlId", + "SourceParameterName", + "StepSize", + "Title" + ], + "additionalProperties": false + }, + "ParameterTextAreaControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "Delimiter": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "DisplayOptions": { + "$ref": "#/definitions/TextAreaControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterTextFieldControl": { + "type": "object", + "properties": { + "ParameterControlId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "SourceParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DisplayOptions": { + "$ref": "#/definitions/TextFieldControlDisplayOptions" + } + }, + "required": [ + "ParameterControlId", + "SourceParameterName", + "Title" + ], + "additionalProperties": false + }, + "ParameterValueType": { + "type": "string", + "enum": [ + "MULTI_VALUED", + "SINGLE_VALUED" + ] + }, + "PercentVisibleRange": { + "type": "object", + "properties": { + "From": { + "type": "number", + "default": null, + "maximum": 100, + "minimum": 0 + }, + "To": { + "type": "number", + "default": null, + "maximum": 100, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "PercentageDisplayFormatConfiguration": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Suffix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "SeparatorConfiguration": { + "$ref": "#/definitions/NumericSeparatorConfiguration" + }, + "DecimalPlacesConfiguration": { + "$ref": "#/definitions/DecimalPlacesConfiguration" + }, + "NegativeValueConfiguration": { + "$ref": "#/definitions/NegativeValueConfiguration" + }, + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + } + }, + "additionalProperties": false + }, + "PercentileAggregation": { + "type": "object", + "properties": { + "PercentileValue": { + "type": "number", + "maximum": 100, + "minimum": 0 + } + }, + "additionalProperties": false + }, + "PeriodOverPeriodComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "PeriodToDateComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "PeriodTimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "PieChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "SmallMultiples": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PieChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/PieChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/PieChartSortConfiguration" + }, + "DonutOptions": { + "$ref": "#/definitions/DonutOptions" + }, + "SmallMultiplesOptions": { + "$ref": "#/definitions/SmallMultiplesOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ValueLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "ContributionAnalysisDefaults": { + "type": "array", + "items": { + "$ref": "#/definitions/ContributionAnalysisDefault" + }, + "maxItems": 200, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "PieChartFieldWells": { + "type": "object", + "properties": { + "PieChartAggregatedFieldWells": { + "$ref": "#/definitions/PieChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "PieChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "SmallMultiplesSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SmallMultiplesLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "PieChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/PieChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "PivotFieldSortOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "SortBy": { + "$ref": "#/definitions/PivotTableSortBy" + } + }, + "required": [ + "FieldId", + "SortBy" + ], + "additionalProperties": false + }, + "PivotTableAggregatedFieldWells": { + "type": "object", + "properties": { + "Rows": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 40, + "minItems": 0 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 40, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 40, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableCellConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TextFormat": { + "$ref": "#/definitions/TextConditionalFormat" + }, + "Scope": { + "$ref": "#/definitions/PivotTableConditionalFormattingScope" + }, + "Scopes": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableConditionalFormattingScope" + }, + "maxItems": 3, + "minItems": 0 + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "PivotTableConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingOption": { + "type": "object", + "properties": { + "Cell": { + "$ref": "#/definitions/PivotTableCellConditionalFormatting" + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingScope": { + "type": "object", + "properties": { + "Role": { + "$ref": "#/definitions/PivotTableConditionalFormattingScopeRole" + } + }, + "additionalProperties": false + }, + "PivotTableConditionalFormattingScopeRole": { + "type": "string", + "enum": [ + "FIELD", + "FIELD_TOTAL", + "GRAND_TOTAL" + ] + }, + "PivotTableConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/PivotTableFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/PivotTableSortConfiguration" + }, + "TableOptions": { + "$ref": "#/definitions/PivotTableOptions" + }, + "TotalOptions": { + "$ref": "#/definitions/PivotTableTotalOptions" + }, + "FieldOptions": { + "$ref": "#/definitions/PivotTableFieldOptions" + }, + "PaginatedReportOptions": { + "$ref": "#/definitions/PivotTablePaginatedReportOptions" + } + }, + "additionalProperties": false + }, + "PivotTableDataPathOption": { + "type": "object", + "properties": { + "DataPathList": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "required": [ + "DataPathList" + ], + "additionalProperties": false + }, + "PivotTableDataPathType": { + "type": "string", + "enum": [ + "HIERARCHY_ROWS_LAYOUT_COLUMN", + "MULTIPLE_ROW_METRICS_COLUMN", + "EMPTY_COLUMN_HEADER", + "COUNT_METRIC_COLUMN" + ] + }, + "PivotTableFieldCollapseState": { + "type": "string", + "enum": [ + "COLLAPSED", + "EXPANDED" + ] + }, + "PivotTableFieldCollapseStateOption": { + "type": "object", + "properties": { + "Target": { + "$ref": "#/definitions/PivotTableFieldCollapseStateTarget" + }, + "State": { + "$ref": "#/definitions/PivotTableFieldCollapseState" + } + }, + "required": [ + "Target" + ], + "additionalProperties": false + }, + "PivotTableFieldCollapseStateTarget": { + "type": "object", + "properties": { + "FieldId": { + "type": "string" + }, + "FieldDataPathValues": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathValue" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableFieldOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "CustomLabel": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "PivotTableFieldOptions": { + "type": "object", + "properties": { + "SelectedFieldOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "DataPathOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableDataPathOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "CollapseStateOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldCollapseStateOption" + } + } + }, + "additionalProperties": false + }, + "PivotTableFieldSubtotalOptions": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "PivotTableFieldWells": { + "type": "object", + "properties": { + "PivotTableAggregatedFieldWells": { + "$ref": "#/definitions/PivotTableAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "PivotTableMetricPlacement": { + "type": "string", + "enum": [ + "ROW", + "COLUMN" + ] + }, + "PivotTableOptions": { + "type": "object", + "properties": { + "MetricPlacement": { + "$ref": "#/definitions/PivotTableMetricPlacement" + }, + "SingleMetricVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ColumnNamesVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ToggleButtonsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "ColumnHeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowHeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "CellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowFieldNamesStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowAlternateColorOptions": { + "$ref": "#/definitions/RowAlternateColorOptions" + }, + "CollapsedRowDimensionsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "RowsLayout": { + "$ref": "#/definitions/PivotTableRowsLayout" + }, + "RowsLabelOptions": { + "$ref": "#/definitions/PivotTableRowsLabelOptions" + }, + "DefaultCellWidth": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + } + }, + "additionalProperties": false + }, + "PivotTablePaginatedReportOptions": { + "type": "object", + "properties": { + "VerticalOverflowVisibility": { + "$ref": "#/definitions/Visibility" + }, + "OverflowColumnHeaderVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "PivotTableRowsLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "CustomLabel": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "PivotTableRowsLayout": { + "type": "string", + "enum": [ + "TABULAR", + "HIERARCHY" + ] + }, + "PivotTableSortBy": { + "type": "object", + "properties": { + "Field": { + "$ref": "#/definitions/FieldSort" + }, + "Column": { + "$ref": "#/definitions/ColumnSort" + }, + "DataPath": { + "$ref": "#/definitions/DataPathSort" + } + }, + "additionalProperties": false + }, + "PivotTableSortConfiguration": { + "type": "object", + "properties": { + "FieldSortOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotFieldSortOptions" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "PivotTableSubtotalLevel": { + "type": "string", + "enum": [ + "ALL", + "CUSTOM", + "LAST" + ] + }, + "PivotTableTotalOptions": { + "type": "object", + "properties": { + "RowSubtotalOptions": { + "$ref": "#/definitions/SubtotalOptions" + }, + "ColumnSubtotalOptions": { + "$ref": "#/definitions/SubtotalOptions" + }, + "RowTotalOptions": { + "$ref": "#/definitions/PivotTotalOptions" + }, + "ColumnTotalOptions": { + "$ref": "#/definitions/PivotTotalOptions" + } + }, + "additionalProperties": false + }, + "PivotTableVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/PivotTableConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/PivotTableConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "PivotTotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TotalAggregationOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TotalAggregationOption" + }, + "maxItems": 200, + "minItems": 0 + }, + "Placement": { + "$ref": "#/definitions/TableTotalsPlacement" + }, + "ScrollStatus": { + "$ref": "#/definitions/TableTotalsScrollStatus" + }, + "CustomLabel": { + "type": "string" + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "ValueCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "MetricHeaderCellStyle": { + "$ref": "#/definitions/TableCellStyle" + } + }, + "additionalProperties": false + }, + "PredefinedHierarchy": { + "type": "object", + "properties": { + "HierarchyId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "maxItems": 10, + "minItems": 1 + }, + "DrillDownFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/DrillDownFilter" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "Columns", + "HierarchyId" + ], + "additionalProperties": false + }, + "PrimaryValueDisplayType": { + "type": "string", + "enum": [ + "HIDDEN", + "COMPARISON", + "ACTUAL" + ] + }, + "ProgressBarOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "RadarChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Color": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "RadarChartAreaStyleSettings": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "RadarChartAxesRangeScale": { + "type": "string", + "enum": [ + "AUTO", + "INDEPENDENT", + "SHARED" + ] + }, + "RadarChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/RadarChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/RadarChartSortConfiguration" + }, + "Shape": { + "$ref": "#/definitions/RadarChartShape" + }, + "BaseSeriesSettings": { + "$ref": "#/definitions/RadarChartSeriesSettings" + }, + "StartAngle": { + "type": "number", + "maximum": 360, + "minimum": -360 + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + }, + "AlternateBandColorsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "AlternateBandEvenColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "AlternateBandOddColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "CategoryAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorAxis": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "AxesRangeScale": { + "$ref": "#/definitions/RadarChartAxesRangeScale" + } + }, + "additionalProperties": false + }, + "RadarChartFieldWells": { + "type": "object", + "properties": { + "RadarChartAggregatedFieldWells": { + "$ref": "#/definitions/RadarChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "RadarChartSeriesSettings": { + "type": "object", + "properties": { + "AreaStyleSettings": { + "$ref": "#/definitions/RadarChartAreaStyleSettings" + } + }, + "additionalProperties": false + }, + "RadarChartShape": { + "type": "string", + "enum": [ + "CIRCLE", + "POLYGON" + ] + }, + "RadarChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "ColorSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "ColorItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "RadarChartVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/RadarChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "RangeEndsLabelType": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "ReferenceLine": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "DataConfiguration": { + "$ref": "#/definitions/ReferenceLineDataConfiguration" + }, + "StyleConfiguration": { + "$ref": "#/definitions/ReferenceLineStyleConfiguration" + }, + "LabelConfiguration": { + "$ref": "#/definitions/ReferenceLineLabelConfiguration" + } + }, + "required": [ + "DataConfiguration" + ], + "additionalProperties": false + }, + "ReferenceLineCustomLabelConfiguration": { + "type": "object", + "properties": { + "CustomLabel": { + "type": "string", + "pattern": ".*\\S.*" + } + }, + "required": [ + "CustomLabel" + ], + "additionalProperties": false + }, + "ReferenceLineDataConfiguration": { + "type": "object", + "properties": { + "StaticConfiguration": { + "$ref": "#/definitions/ReferenceLineStaticDataConfiguration" + }, + "DynamicConfiguration": { + "$ref": "#/definitions/ReferenceLineDynamicDataConfiguration" + }, + "AxisBinding": { + "$ref": "#/definitions/AxisBinding" + }, + "SeriesType": { + "$ref": "#/definitions/ReferenceLineSeriesType" + } + }, + "additionalProperties": false + }, + "ReferenceLineDynamicDataConfiguration": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "MeasureAggregationFunction": { + "$ref": "#/definitions/AggregationFunction" + }, + "Calculation": { + "$ref": "#/definitions/NumericalAggregationFunction" + } + }, + "required": [ + "Calculation", + "Column" + ], + "additionalProperties": false + }, + "ReferenceLineLabelConfiguration": { + "type": "object", + "properties": { + "ValueLabelConfiguration": { + "$ref": "#/definitions/ReferenceLineValueLabelConfiguration" + }, + "CustomLabelConfiguration": { + "$ref": "#/definitions/ReferenceLineCustomLabelConfiguration" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "FontColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "HorizontalPosition": { + "$ref": "#/definitions/ReferenceLineLabelHorizontalPosition" + }, + "VerticalPosition": { + "$ref": "#/definitions/ReferenceLineLabelVerticalPosition" + } + }, + "additionalProperties": false + }, + "ReferenceLineLabelHorizontalPosition": { + "type": "string", + "enum": [ + "LEFT", + "CENTER", + "RIGHT" + ] + }, + "ReferenceLineLabelVerticalPosition": { + "type": "string", + "enum": [ + "ABOVE", + "BELOW" + ] + }, + "ReferenceLinePatternType": { + "type": "string", + "enum": [ + "SOLID", + "DASHED", + "DOTTED" + ] + }, + "ReferenceLineSeriesType": { + "type": "string", + "enum": [ + "BAR", + "LINE" + ] + }, + "ReferenceLineStaticDataConfiguration": { + "type": "object", + "properties": { + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Value" + ], + "additionalProperties": false + }, + "ReferenceLineStyleConfiguration": { + "type": "object", + "properties": { + "Pattern": { + "$ref": "#/definitions/ReferenceLinePatternType" + }, + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "ReferenceLineValueLabelConfiguration": { + "type": "object", + "properties": { + "RelativePosition": { + "$ref": "#/definitions/ReferenceLineValueLabelRelativePosition" + }, + "FormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "ReferenceLineValueLabelRelativePosition": { + "type": "string", + "enum": [ + "BEFORE_CUSTOM_LABEL", + "AFTER_CUSTOM_LABEL" + ] + }, + "RelativeDateTimeControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "DateTimeFormat": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "RelativeDateType": { + "type": "string", + "enum": [ + "PREVIOUS", + "THIS", + "LAST", + "NOW", + "NEXT" + ] + }, + "RelativeDatesFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "AnchorDateConfiguration": { + "$ref": "#/definitions/AnchorDateConfiguration" + }, + "MinimumGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "RelativeDateType": { + "$ref": "#/definitions/RelativeDateType" + }, + "RelativeDateValue": { + "type": "number", + "default": null + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + }, + "ExcludePeriodConfiguration": { + "$ref": "#/definitions/ExcludePeriodConfiguration" + } + }, + "required": [ + "AnchorDateConfiguration", + "Column", + "FilterId", + "NullOption", + "RelativeDateType", + "TimeGranularity" + ], + "additionalProperties": false + }, + "RelativeFontSize": { + "type": "string", + "enum": [ + "EXTRA_SMALL", + "SMALL", + "MEDIUM", + "LARGE", + "EXTRA_LARGE" + ] + }, + "ResizeOption": { + "type": "string", + "enum": [ + "FIXED", + "RESPONSIVE" + ] + }, + "ResourcePermission": { + "type": "object", + "properties": { + "Principal": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Actions": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1 + } + }, + "required": [ + "Actions", + "Principal" + ], + "additionalProperties": false + }, + "ResourceStatus": { + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "CREATION_SUCCESSFUL", + "CREATION_FAILED", + "UPDATE_IN_PROGRESS", + "UPDATE_SUCCESSFUL", + "UPDATE_FAILED", + "DELETED" + ] + }, + "RollingDateConfiguration": { + "type": "object", + "properties": { + "DataSetIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "required": [ + "Expression" + ], + "additionalProperties": false + }, + "RowAlternateColorOptions": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "RowAlternateColors": { + "type": "array", + "items": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "maxItems": 1, + "minItems": 0 + }, + "UsePrimaryBackgroundColor": { + "$ref": "#/definitions/WidgetStatus" + } + }, + "additionalProperties": false + }, + "SameSheetTargetVisualConfiguration": { + "type": "object", + "properties": { + "TargetVisuals": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "maxItems": 50, + "minItems": 1 + }, + "TargetVisualOptions": { + "$ref": "#/definitions/TargetVisualOptions" + } + }, + "additionalProperties": false + }, + "SankeyDiagramAggregatedFieldWells": { + "type": "object", + "properties": { + "Source": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Destination": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Weight": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "SankeyDiagramChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/SankeyDiagramFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/SankeyDiagramSortConfiguration" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + } + }, + "additionalProperties": false + }, + "SankeyDiagramFieldWells": { + "type": "object", + "properties": { + "SankeyDiagramAggregatedFieldWells": { + "$ref": "#/definitions/SankeyDiagramAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "SankeyDiagramSortConfiguration": { + "type": "object", + "properties": { + "WeightSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "SourceItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "DestinationItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "SankeyDiagramVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/SankeyDiagramChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ScatterPlotCategoricallyAggregatedFieldWells": { + "type": "object", + "properties": { + "XAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "YAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Label": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ScatterPlotConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/ScatterPlotFieldWells" + }, + "XAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "XAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "YAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "YAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "ScatterPlotFieldWells": { + "type": "object", + "properties": { + "ScatterPlotCategoricallyAggregatedFieldWells": { + "$ref": "#/definitions/ScatterPlotCategoricallyAggregatedFieldWells" + }, + "ScatterPlotUnaggregatedFieldWells": { + "$ref": "#/definitions/ScatterPlotUnaggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "ScatterPlotUnaggregatedFieldWells": { + "type": "object", + "properties": { + "XAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "YAxis": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Category": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Label": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "ScatterPlotVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/ScatterPlotConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "ScrollBarOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "VisibleRange": { + "$ref": "#/definitions/VisibleRangeOptions" + } + }, + "additionalProperties": false + }, + "SecondaryValueOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "SectionAfterPageBreak": { + "type": "object", + "properties": { + "Status": { + "$ref": "#/definitions/SectionPageBreakStatus" + } + }, + "additionalProperties": false + }, + "SectionBasedLayoutCanvasSizeOptions": { + "type": "object", + "properties": { + "PaperCanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutPaperCanvasSizeOptions" + } + }, + "additionalProperties": false + }, + "SectionBasedLayoutConfiguration": { + "type": "object", + "properties": { + "HeaderSections": { + "type": "array", + "items": { + "$ref": "#/definitions/HeaderFooterSectionConfiguration" + }, + "maxItems": 1, + "minItems": 0 + }, + "BodySections": { + "type": "array", + "items": { + "$ref": "#/definitions/BodySectionConfiguration" + }, + "maxItems": 28, + "minItems": 0 + }, + "FooterSections": { + "type": "array", + "items": { + "$ref": "#/definitions/HeaderFooterSectionConfiguration" + }, + "maxItems": 1, + "minItems": 0 + }, + "CanvasSizeOptions": { + "$ref": "#/definitions/SectionBasedLayoutCanvasSizeOptions" + } + }, + "required": [ + "BodySections", + "CanvasSizeOptions", + "FooterSections", + "HeaderSections" + ], + "additionalProperties": false + }, + "SectionBasedLayoutPaperCanvasSizeOptions": { + "type": "object", + "properties": { + "PaperSize": { + "$ref": "#/definitions/PaperSize" + }, + "PaperOrientation": { + "$ref": "#/definitions/PaperOrientation" + }, + "PaperMargin": { + "$ref": "#/definitions/Spacing" + } + }, + "additionalProperties": false + }, + "SectionLayoutConfiguration": { + "type": "object", + "properties": { + "FreeFormLayout": { + "$ref": "#/definitions/FreeFormSectionLayoutConfiguration" + } + }, + "required": [ + "FreeFormLayout" + ], + "additionalProperties": false + }, + "SectionPageBreakConfiguration": { + "type": "object", + "properties": { + "After": { + "$ref": "#/definitions/SectionAfterPageBreak" + } + }, + "additionalProperties": false + }, + "SectionPageBreakStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "SectionStyle": { + "type": "object", + "properties": { + "Height": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "Padding": { + "$ref": "#/definitions/Spacing" + } + }, + "additionalProperties": false + }, + "SelectAllValueOptions": { + "type": "string", + "enum": [ + "ALL_VALUES" + ] + }, + "SelectedFieldOptions": { + "type": "string", + "enum": [ + "ALL_FIELDS" + ] + }, + "SelectedSheetsFilterScopeConfiguration": { + "type": "object", + "properties": { + "SheetVisualScopingConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetVisualScopingConfiguration" + }, + "maxItems": 50, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "SelectedTooltipType": { + "type": "string", + "enum": [ + "BASIC", + "DETAILED" + ] + }, + "SeriesItem": { + "type": "object", + "properties": { + "FieldSeriesItem": { + "$ref": "#/definitions/FieldSeriesItem" + }, + "DataFieldSeriesItem": { + "$ref": "#/definitions/DataFieldSeriesItem" + } + }, + "additionalProperties": false + }, + "SetParameterValueConfiguration": { + "type": "object", + "properties": { + "DestinationParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "Value": { + "$ref": "#/definitions/DestinationParameterValueConfiguration" + } + }, + "required": [ + "DestinationParameterName", + "Value" + ], + "additionalProperties": false + }, + "ShapeConditionalFormat": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "required": [ + "BackgroundColor" + ], + "additionalProperties": false + }, + "Sheet": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SheetContentType": { + "type": "string", + "enum": [ + "PAGINATED", + "INTERACTIVE" + ] + }, + "SheetControlDateTimePickerType": { + "type": "string", + "enum": [ + "SINGLE_VALUED", + "DATE_RANGE" + ] + }, + "SheetControlInfoIconLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "InfoIconText": { + "type": "string", + "maxLength": 100, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SheetControlLayout": { + "type": "object", + "properties": { + "Configuration": { + "$ref": "#/definitions/SheetControlLayoutConfiguration" + } + }, + "required": [ + "Configuration" + ], + "additionalProperties": false + }, + "SheetControlLayoutConfiguration": { + "type": "object", + "properties": { + "GridLayout": { + "$ref": "#/definitions/GridLayoutConfiguration" + } + }, + "additionalProperties": false + }, + "SheetControlListType": { + "type": "string", + "enum": [ + "MULTI_SELECT", + "SINGLE_SELECT" + ] + }, + "SheetControlSliderType": { + "type": "string", + "enum": [ + "SINGLE_POINT", + "RANGE" + ] + }, + "SheetDefinition": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "Description": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "ParameterControls": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterControl" + }, + "maxItems": 200, + "minItems": 0 + }, + "FilterControls": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterControl" + }, + "maxItems": 200, + "minItems": 0 + }, + "Visuals": { + "type": "array", + "items": { + "$ref": "#/definitions/Visual" + }, + "maxItems": 50, + "minItems": 0 + }, + "TextBoxes": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetTextBox" + }, + "maxItems": 100, + "minItems": 0 + }, + "Layouts": { + "type": "array", + "items": { + "$ref": "#/definitions/Layout" + }, + "maxItems": 1, + "minItems": 1 + }, + "SheetControlLayouts": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetControlLayout" + }, + "maxItems": 1, + "minItems": 0 + }, + "ContentType": { + "$ref": "#/definitions/SheetContentType" + } + }, + "required": [ + "SheetId" + ], + "additionalProperties": false + }, + "SheetElementConfigurationOverrides": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "SheetElementRenderingRule": { + "type": "object", + "properties": { + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "ConfigurationOverrides": { + "$ref": "#/definitions/SheetElementConfigurationOverrides" + } + }, + "required": [ + "ConfigurationOverrides", + "Expression" + ], + "additionalProperties": false + }, + "SheetTextBox": { + "type": "object", + "properties": { + "SheetTextBoxId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Content": { + "type": "string", + "maxLength": 150000, + "minLength": 0 + } + }, + "required": [ + "SheetTextBoxId" + ], + "additionalProperties": false + }, + "SheetVisualScopingConfiguration": { + "type": "object", + "properties": { + "SheetId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Scope": { + "$ref": "#/definitions/FilterVisualScope" + }, + "VisualIds": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "maxItems": 50, + "minItems": 0 + } + }, + "required": [ + "Scope", + "SheetId" + ], + "additionalProperties": false + }, + "ShortFormatText": { + "type": "object", + "properties": { + "PlainText": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "RichText": { + "type": "string", + "maxLength": 1024, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SimpleAttributeAggregationFunction": { + "type": "string", + "enum": [ + "UNIQUE_VALUE" + ] + }, + "SimpleClusterMarker": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "SimpleNumericalAggregationFunction": { + "type": "string", + "enum": [ + "SUM", + "AVERAGE", + "MIN", + "MAX", + "COUNT", + "DISTINCT_COUNT", + "VAR", + "VARP", + "STDEV", + "STDEVP", + "MEDIAN" + ] + }, + "SimpleTotalAggregationFunction": { + "type": "string", + "enum": [ + "DEFAULT", + "SUM", + "AVERAGE", + "MIN", + "MAX", + "NONE" + ] + }, + "SliderControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "SmallMultiplesAxisPlacement": { + "type": "string", + "enum": [ + "OUTSIDE", + "INSIDE" + ] + }, + "SmallMultiplesAxisProperties": { + "type": "object", + "properties": { + "Scale": { + "$ref": "#/definitions/SmallMultiplesAxisScale" + }, + "Placement": { + "$ref": "#/definitions/SmallMultiplesAxisPlacement" + } + }, + "additionalProperties": false + }, + "SmallMultiplesAxisScale": { + "type": "string", + "enum": [ + "SHARED", + "INDEPENDENT" + ] + }, + "SmallMultiplesOptions": { + "type": "object", + "properties": { + "MaxVisibleRows": { + "type": "number", + "maximum": 10, + "minimum": 1 + }, + "MaxVisibleColumns": { + "type": "number", + "maximum": 10, + "minimum": 1 + }, + "PanelConfiguration": { + "$ref": "#/definitions/PanelConfiguration" + }, + "XAxis": { + "$ref": "#/definitions/SmallMultiplesAxisProperties" + }, + "YAxis": { + "$ref": "#/definitions/SmallMultiplesAxisProperties" + } + }, + "additionalProperties": false + }, + "SortDirection": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + }, + "Spacing": { + "type": "object", + "properties": { + "Top": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Bottom": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Left": { + "type": "string", + "description": "String based length that is composed of value and unit" + }, + "Right": { + "type": "string", + "description": "String based length that is composed of value and unit" + } + }, + "additionalProperties": false + }, + "SpecialValue": { + "type": "string", + "enum": [ + "EMPTY", + "NULL", + "OTHER" + ] + }, + "StringDefaultValues": { + "type": "object", + "properties": { + "DynamicValue": { + "$ref": "#/definitions/DynamicDefaultValue" + }, + "StaticValues": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 50000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "StringFormatConfiguration": { + "type": "object", + "properties": { + "NullValueFormatConfiguration": { + "$ref": "#/definitions/NullValueFormatConfiguration" + }, + "NumericFormatConfiguration": { + "$ref": "#/definitions/NumericFormatConfiguration" + } + }, + "additionalProperties": false + }, + "StringParameterDeclaration": { + "type": "object", + "properties": { + "ParameterValueType": { + "$ref": "#/definitions/ParameterValueType" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "DefaultValues": { + "$ref": "#/definitions/StringDefaultValues" + }, + "ValueWhenUnset": { + "$ref": "#/definitions/StringValueWhenUnsetConfiguration" + }, + "MappedDataSetParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/MappedDataSetParameter" + }, + "maxItems": 150, + "minItems": 0 + } + }, + "required": [ + "Name", + "ParameterValueType" + ], + "additionalProperties": false + }, + "StringValueWhenUnsetConfiguration": { + "type": "object", + "properties": { + "ValueWhenUnsetOption": { + "$ref": "#/definitions/ValueWhenUnsetOption" + }, + "CustomValue": { + "type": "string" + } + }, + "additionalProperties": false + }, + "StyledCellType": { + "type": "string", + "enum": [ + "TOTAL", + "METRIC_HEADER", + "VALUE" + ] + }, + "SubtotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "CustomLabel": { + "type": "string" + }, + "FieldLevel": { + "$ref": "#/definitions/PivotTableSubtotalLevel" + }, + "FieldLevelOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/PivotTableFieldSubtotalOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "ValueCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "MetricHeaderCellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "StyleTargets": { + "type": "array", + "items": { + "$ref": "#/definitions/TableStyleTarget" + }, + "maxItems": 3, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableBorderOptions": { + "type": "object", + "properties": { + "Color": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Thickness": { + "type": "number", + "maximum": 4, + "minimum": 1 + }, + "Style": { + "$ref": "#/definitions/TableBorderStyle" + } + }, + "additionalProperties": false + }, + "TableBorderStyle": { + "type": "string", + "enum": [ + "NONE", + "SOLID" + ] + }, + "TableCellConditionalFormatting": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TextFormat": { + "$ref": "#/definitions/TextConditionalFormat" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "TableCellImageScalingConfiguration": { + "type": "string", + "enum": [ + "FIT_TO_CELL_HEIGHT", + "FIT_TO_CELL_WIDTH", + "DO_NOT_SCALE" + ] + }, + "TableCellImageSizingConfiguration": { + "type": "object", + "properties": { + "TableCellImageScalingConfiguration": { + "$ref": "#/definitions/TableCellImageScalingConfiguration" + } + }, + "additionalProperties": false + }, + "TableCellStyle": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + }, + "TextWrap": { + "$ref": "#/definitions/TextWrap" + }, + "HorizontalTextAlignment": { + "$ref": "#/definitions/HorizontalTextAlignment" + }, + "VerticalTextAlignment": { + "$ref": "#/definitions/VerticalTextAlignment" + }, + "BackgroundColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Height": { + "type": "number", + "maximum": 500, + "minimum": 8 + }, + "Border": { + "$ref": "#/definitions/GlobalTableBorderOptions" + } + }, + "additionalProperties": false + }, + "TableConditionalFormatting": { + "type": "object", + "properties": { + "ConditionalFormattingOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TableConditionalFormattingOption" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableConditionalFormattingOption": { + "type": "object", + "properties": { + "Cell": { + "$ref": "#/definitions/TableCellConditionalFormatting" + }, + "Row": { + "$ref": "#/definitions/TableRowConditionalFormatting" + } + }, + "additionalProperties": false + }, + "TableConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/TableFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/TableSortConfiguration" + }, + "TableOptions": { + "$ref": "#/definitions/TableOptions" + }, + "TotalOptions": { + "$ref": "#/definitions/TotalOptions" + }, + "FieldOptions": { + "$ref": "#/definitions/TableFieldOptions" + }, + "PaginatedReportOptions": { + "$ref": "#/definitions/TablePaginatedReportOptions" + }, + "TableInlineVisualizations": { + "type": "array", + "items": { + "$ref": "#/definitions/TableInlineVisualization" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableFieldCustomIconContent": { + "type": "object", + "properties": { + "Icon": { + "$ref": "#/definitions/TableFieldIconSetType" + } + }, + "additionalProperties": false + }, + "TableFieldCustomTextContent": { + "type": "object", + "properties": { + "Value": { + "type": "string" + }, + "FontConfiguration": { + "$ref": "#/definitions/FontConfiguration" + } + }, + "required": [ + "FontConfiguration" + ], + "additionalProperties": false + }, + "TableFieldIconSetType": { + "type": "string", + "enum": [ + "LINK" + ] + }, + "TableFieldImageConfiguration": { + "type": "object", + "properties": { + "SizingOptions": { + "$ref": "#/definitions/TableCellImageSizingConfiguration" + } + }, + "additionalProperties": false + }, + "TableFieldLinkConfiguration": { + "type": "object", + "properties": { + "Target": { + "$ref": "#/definitions/URLTargetConfiguration" + }, + "Content": { + "$ref": "#/definitions/TableFieldLinkContentConfiguration" + } + }, + "required": [ + "Content", + "Target" + ], + "additionalProperties": false + }, + "TableFieldLinkContentConfiguration": { + "type": "object", + "properties": { + "CustomTextContent": { + "$ref": "#/definitions/TableFieldCustomTextContent" + }, + "CustomIconContent": { + "$ref": "#/definitions/TableFieldCustomIconContent" + } + }, + "additionalProperties": false + }, + "TableFieldOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Width": { + "type": "string", + "description": "String based length that is composed of value and unit in px" + }, + "CustomLabel": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "URLStyling": { + "$ref": "#/definitions/TableFieldURLConfiguration" + } + }, + "required": [ + "FieldId" + ], + "additionalProperties": false + }, + "TableFieldOptions": { + "type": "object", + "properties": { + "SelectedFieldOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TableFieldOption" + }, + "maxItems": 100, + "minItems": 0 + }, + "Order": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 200, + "minItems": 0 + }, + "PinnedFieldOptions": { + "$ref": "#/definitions/TablePinnedFieldOptions" + } + }, + "additionalProperties": false + }, + "TableFieldURLConfiguration": { + "type": "object", + "properties": { + "LinkConfiguration": { + "$ref": "#/definitions/TableFieldLinkConfiguration" + }, + "ImageConfiguration": { + "$ref": "#/definitions/TableFieldImageConfiguration" + } + }, + "additionalProperties": false + }, + "TableFieldWells": { + "type": "object", + "properties": { + "TableAggregatedFieldWells": { + "$ref": "#/definitions/TableAggregatedFieldWells" + }, + "TableUnaggregatedFieldWells": { + "$ref": "#/definitions/TableUnaggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "TableInlineVisualization": { + "type": "object", + "properties": { + "DataBars": { + "$ref": "#/definitions/DataBarsOptions" + } + }, + "additionalProperties": false + }, + "TableOptions": { + "type": "object", + "properties": { + "Orientation": { + "$ref": "#/definitions/TableOrientation" + }, + "HeaderStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "CellStyle": { + "$ref": "#/definitions/TableCellStyle" + }, + "RowAlternateColorOptions": { + "$ref": "#/definitions/RowAlternateColorOptions" + } + }, + "additionalProperties": false + }, + "TableOrientation": { + "type": "string", + "enum": [ + "VERTICAL", + "HORIZONTAL" + ] + }, + "TablePaginatedReportOptions": { + "type": "object", + "properties": { + "VerticalOverflowVisibility": { + "$ref": "#/definitions/Visibility" + }, + "OverflowColumnHeaderVisibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TablePinnedFieldOptions": { + "type": "object", + "properties": { + "PinnedLeftFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "maxItems": 201, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableRowConditionalFormatting": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + } + }, + "additionalProperties": false + }, + "TableSideBorderOptions": { + "type": "object", + "properties": { + "InnerVertical": { + "$ref": "#/definitions/TableBorderOptions" + }, + "InnerHorizontal": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Left": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Right": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Top": { + "$ref": "#/definitions/TableBorderOptions" + }, + "Bottom": { + "$ref": "#/definitions/TableBorderOptions" + } + }, + "additionalProperties": false + }, + "TableSortConfiguration": { + "type": "object", + "properties": { + "RowSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "PaginationConfiguration": { + "$ref": "#/definitions/PaginationConfiguration" + } + }, + "additionalProperties": false + }, + "TableStyleTarget": { + "type": "object", + "properties": { + "CellType": { + "$ref": "#/definitions/StyledCellType" + } + }, + "required": [ + "CellType" + ], + "additionalProperties": false + }, + "TableTotalsPlacement": { + "type": "string", + "enum": [ + "START", + "END", + "AUTO" + ] + }, + "TableTotalsScrollStatus": { + "type": "string", + "enum": [ + "PINNED", + "SCROLLED" + ] + }, + "TableUnaggregatedFieldWells": { + "type": "object", + "properties": { + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/UnaggregatedField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TableVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/TableConfiguration" + }, + "ConditionalFormatting": { + "$ref": "#/definitions/TableConditionalFormatting" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TargetVisualOptions": { + "type": "string", + "enum": [ + "ALL_VISUALS" + ] + }, + "TemplateError": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/TemplateErrorType" + }, + "Message": { + "type": "string", + "pattern": ".*\\S.*" + }, + "ViolatedEntities": { + "type": "array", + "items": { + "$ref": "#/definitions/Entity" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TemplateErrorType": { + "type": "string", + "enum": [ + "SOURCE_NOT_FOUND", + "DATA_SET_NOT_FOUND", + "INTERNAL_FAILURE", + "ACCESS_DENIED" + ] + }, + "TemplateSourceAnalysis": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + }, + "DataSetReferences": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSetReference" + }, + "minItems": 1 + } + }, + "required": [ + "Arn", + "DataSetReferences" + ], + "additionalProperties": false + }, + "TemplateSourceEntity": { + "type": "object", + "properties": { + "SourceAnalysis": { + "$ref": "#/definitions/TemplateSourceAnalysis" + }, + "SourceTemplate": { + "$ref": "#/definitions/TemplateSourceTemplate" + } + }, + "additionalProperties": false + }, + "TemplateSourceTemplate": { + "type": "object", + "properties": { + "Arn": { + "type": "string" + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "TemplateVersion": { + "type": "object", + "properties": { + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "Errors": { + "type": "array", + "items": { + "$ref": "#/definitions/TemplateError" + }, + "minItems": 1 + }, + "VersionNumber": { + "type": "number", + "minimum": 1 + }, + "Status": { + "$ref": "#/definitions/ResourceStatus" + }, + "DataSetConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSetConfiguration" + }, + "maxItems": 30, + "minItems": 0 + }, + "Description": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "SourceEntityArn": { + "type": "string" + }, + "ThemeArn": { + "type": "string" + }, + "Sheets": { + "type": "array", + "items": { + "$ref": "#/definitions/Sheet" + }, + "maxItems": 20, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TemplateVersionDefinition": { + "type": "object", + "properties": { + "DataSetConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/DataSetConfiguration" + }, + "maxItems": 30, + "minItems": 0 + }, + "Sheets": { + "type": "array", + "items": { + "$ref": "#/definitions/SheetDefinition" + }, + "maxItems": 20, + "minItems": 0 + }, + "CalculatedFields": { + "type": "array", + "items": { + "$ref": "#/definitions/CalculatedField" + }, + "maxItems": 500, + "minItems": 0 + }, + "ParameterDeclarations": { + "type": "array", + "items": { + "$ref": "#/definitions/ParameterDeclaration" + }, + "maxItems": 200, + "minItems": 0 + }, + "FilterGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/FilterGroup" + }, + "maxItems": 2000, + "minItems": 0 + }, + "ColumnConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnConfiguration" + }, + "maxItems": 200, + "minItems": 0 + }, + "AnalysisDefaults": { + "$ref": "#/definitions/AnalysisDefaults" + }, + "Options": { + "$ref": "#/definitions/AssetOptions" + } + }, + "required": [ + "DataSetConfigurations" + ], + "additionalProperties": false + }, + "TextAreaControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "PlaceholderOptions": { + "$ref": "#/definitions/TextControlPlaceholderOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "TextConditionalFormat": { + "type": "object", + "properties": { + "BackgroundColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "TextColor": { + "$ref": "#/definitions/ConditionalFormattingColor" + }, + "Icon": { + "$ref": "#/definitions/ConditionalFormattingIcon" + } + }, + "additionalProperties": false + }, + "TextControlPlaceholderOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TextFieldControlDisplayOptions": { + "type": "object", + "properties": { + "TitleOptions": { + "$ref": "#/definitions/LabelOptions" + }, + "PlaceholderOptions": { + "$ref": "#/definitions/TextControlPlaceholderOptions" + }, + "InfoIconLabelOptions": { + "$ref": "#/definitions/SheetControlInfoIconLabelOptions" + } + }, + "additionalProperties": false + }, + "TextWrap": { + "type": "string", + "enum": [ + "NONE", + "WRAP" + ] + }, + "ThousandSeparatorOptions": { + "type": "object", + "properties": { + "Symbol": { + "$ref": "#/definitions/NumericSeparatorSymbol" + }, + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "TimeBasedForecastProperties": { + "type": "object", + "properties": { + "PeriodsForward": { + "type": "number", + "maximum": 1000, + "minimum": 1 + }, + "PeriodsBackward": { + "type": "number", + "maximum": 1000, + "minimum": 0 + }, + "UpperBoundary": { + "type": "number", + "default": null + }, + "LowerBoundary": { + "type": "number", + "default": null + }, + "PredictionInterval": { + "type": "number", + "maximum": 95, + "minimum": 50 + }, + "Seasonality": { + "type": "number", + "maximum": 180, + "minimum": 1 + } + }, + "additionalProperties": false + }, + "TimeEqualityFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Value": { + "type": "string", + "format": "date-time" + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "FilterId" + ], + "additionalProperties": false + }, + "TimeGranularity": { + "type": "string", + "enum": [ + "YEAR", + "QUARTER", + "MONTH", + "WEEK", + "DAY", + "HOUR", + "MINUTE", + "SECOND", + "MILLISECOND" + ] + }, + "TimeRangeDrillDownFilter": { + "type": "object", + "properties": { + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "RangeMinimum": { + "type": "string", + "format": "date-time" + }, + "RangeMaximum": { + "type": "string", + "format": "date-time" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "RangeMaximum", + "RangeMinimum", + "TimeGranularity" + ], + "additionalProperties": false + }, + "TimeRangeFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "IncludeMinimum": { + "type": "boolean", + "default": null + }, + "IncludeMaximum": { + "type": "boolean", + "default": null + }, + "RangeMinimumValue": { + "$ref": "#/definitions/TimeRangeFilterValue" + }, + "RangeMaximumValue": { + "$ref": "#/definitions/TimeRangeFilterValue" + }, + "NullOption": { + "$ref": "#/definitions/FilterNullOption" + }, + "ExcludePeriodConfiguration": { + "$ref": "#/definitions/ExcludePeriodConfiguration" + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + } + }, + "required": [ + "Column", + "FilterId", + "NullOption" + ], + "additionalProperties": false + }, + "TimeRangeFilterValue": { + "type": "object", + "properties": { + "StaticValue": { + "type": "string", + "format": "date-time" + }, + "RollingDate": { + "$ref": "#/definitions/RollingDateConfiguration" + }, + "Parameter": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "additionalProperties": false + }, + "TooltipItem": { + "type": "object", + "properties": { + "FieldTooltipItem": { + "$ref": "#/definitions/FieldTooltipItem" + }, + "ColumnTooltipItem": { + "$ref": "#/definitions/ColumnTooltipItem" + } + }, + "additionalProperties": false + }, + "TooltipOptions": { + "type": "object", + "properties": { + "TooltipVisibility": { + "$ref": "#/definitions/Visibility" + }, + "SelectedTooltipType": { + "$ref": "#/definitions/SelectedTooltipType" + }, + "FieldBasedTooltip": { + "$ref": "#/definitions/FieldBasedTooltip" + } + }, + "additionalProperties": false + }, + "TooltipTitleType": { + "type": "string", + "enum": [ + "NONE", + "PRIMARY_VALUE" + ] + }, + "TopBottomComputationType": { + "type": "string", + "enum": [ + "TOP", + "BOTTOM" + ] + }, + "TopBottomFilter": { + "type": "object", + "properties": { + "FilterId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "Limit": { + "type": "number", + "default": null + }, + "AggregationSortConfigurations": { + "type": "array", + "items": { + "$ref": "#/definitions/AggregationSortConfiguration" + }, + "maxItems": 100, + "minItems": 0 + }, + "TimeGranularity": { + "$ref": "#/definitions/TimeGranularity" + }, + "ParameterName": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + }, + "required": [ + "AggregationSortConfigurations", + "Column", + "FilterId" + ], + "additionalProperties": false + }, + "TopBottomMoversComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Time": { + "$ref": "#/definitions/DimensionField" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "MoverSize": { + "type": "number", + "default": 0, + "maximum": 20, + "minimum": 1 + }, + "SortOrder": { + "$ref": "#/definitions/TopBottomSortOrder" + }, + "Type": { + "$ref": "#/definitions/TopBottomComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "TopBottomRankedComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + }, + "ResultSize": { + "type": "number", + "default": 0, + "maximum": 20, + "minimum": 1 + }, + "Type": { + "$ref": "#/definitions/TopBottomComputationType" + } + }, + "required": [ + "ComputationId", + "Type" + ], + "additionalProperties": false + }, + "TopBottomSortOrder": { + "type": "string", + "enum": [ + "PERCENT_DIFFERENCE", + "ABSOLUTE_DIFFERENCE" + ] + }, + "TotalAggregationComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Value": { + "$ref": "#/definitions/MeasureField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "TotalAggregationFunction": { + "type": "object", + "properties": { + "SimpleTotalAggregationFunction": { + "$ref": "#/definitions/SimpleTotalAggregationFunction" + } + }, + "additionalProperties": false + }, + "TotalAggregationOption": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "TotalAggregationFunction": { + "$ref": "#/definitions/TotalAggregationFunction" + } + }, + "required": [ + "FieldId", + "TotalAggregationFunction" + ], + "additionalProperties": false + }, + "TotalOptions": { + "type": "object", + "properties": { + "TotalsVisibility": { + "$ref": "#/definitions/Visibility" + }, + "TotalAggregationOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/TotalAggregationOption" + }, + "maxItems": 200, + "minItems": 0 + }, + "Placement": { + "$ref": "#/definitions/TableTotalsPlacement" + }, + "ScrollStatus": { + "$ref": "#/definitions/TableTotalsScrollStatus" + }, + "CustomLabel": { + "type": "string" + }, + "TotalCellStyle": { + "$ref": "#/definitions/TableCellStyle" + } + }, + "additionalProperties": false + }, + "TreeMapAggregatedFieldWells": { + "type": "object", + "properties": { + "Groups": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Sizes": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + }, + "Colors": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "TreeMapConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/TreeMapFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/TreeMapSortConfiguration" + }, + "GroupLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "SizeLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "ColorScale": { + "$ref": "#/definitions/ColorScale" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "Tooltip": { + "$ref": "#/definitions/TooltipOptions" + } + }, + "additionalProperties": false + }, + "TreeMapFieldWells": { + "type": "object", + "properties": { + "TreeMapAggregatedFieldWells": { + "$ref": "#/definitions/TreeMapAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "TreeMapSortConfiguration": { + "type": "object", + "properties": { + "TreeMapSort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "TreeMapGroupItemsLimitConfiguration": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "TreeMapVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/TreeMapConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "TrendArrowOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + } + }, + "additionalProperties": false + }, + "URLTargetConfiguration": { + "type": "string", + "enum": [ + "NEW_TAB", + "NEW_WINDOW", + "SAME_TAB" + ] + }, + "UnaggregatedField": { + "type": "object", + "properties": { + "FieldId": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "Column": { + "$ref": "#/definitions/ColumnIdentifier" + }, + "FormatConfiguration": { + "$ref": "#/definitions/FormatConfiguration" + } + }, + "required": [ + "Column", + "FieldId" + ], + "additionalProperties": false + }, + "UniqueValuesComputation": { + "type": "object", + "properties": { + "ComputationId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string" + }, + "Category": { + "$ref": "#/definitions/DimensionField" + } + }, + "required": [ + "ComputationId" + ], + "additionalProperties": false + }, + "ValidationStrategy": { + "type": "object", + "properties": { + "Mode": { + "$ref": "#/definitions/ValidationStrategyMode" + } + }, + "required": [ + "Mode" + ], + "additionalProperties": false + }, + "ValidationStrategyMode": { + "type": "string", + "enum": [ + "STRICT", + "LENIENT" + ] + }, + "ValueWhenUnsetOption": { + "type": "string", + "enum": [ + "RECOMMENDED_VALUE", + "NULL" + ] + }, + "VerticalTextAlignment": { + "type": "string", + "enum": [ + "TOP", + "MIDDLE", + "BOTTOM", + "AUTO" + ] + }, + "Visibility": { + "type": "string", + "enum": [ + "HIDDEN", + "VISIBLE" + ] + }, + "VisibleRangeOptions": { + "type": "object", + "properties": { + "PercentRange": { + "$ref": "#/definitions/PercentVisibleRange" + } + }, + "additionalProperties": false + }, + "Visual": { + "type": "object", + "properties": { + "TableVisual": { + "$ref": "#/definitions/TableVisual" + }, + "PivotTableVisual": { + "$ref": "#/definitions/PivotTableVisual" + }, + "BarChartVisual": { + "$ref": "#/definitions/BarChartVisual" + }, + "KPIVisual": { + "$ref": "#/definitions/KPIVisual" + }, + "PieChartVisual": { + "$ref": "#/definitions/PieChartVisual" + }, + "GaugeChartVisual": { + "$ref": "#/definitions/GaugeChartVisual" + }, + "LineChartVisual": { + "$ref": "#/definitions/LineChartVisual" + }, + "HeatMapVisual": { + "$ref": "#/definitions/HeatMapVisual" + }, + "TreeMapVisual": { + "$ref": "#/definitions/TreeMapVisual" + }, + "GeospatialMapVisual": { + "$ref": "#/definitions/GeospatialMapVisual" + }, + "FilledMapVisual": { + "$ref": "#/definitions/FilledMapVisual" + }, + "FunnelChartVisual": { + "$ref": "#/definitions/FunnelChartVisual" + }, + "ScatterPlotVisual": { + "$ref": "#/definitions/ScatterPlotVisual" + }, + "ComboChartVisual": { + "$ref": "#/definitions/ComboChartVisual" + }, + "BoxPlotVisual": { + "$ref": "#/definitions/BoxPlotVisual" + }, + "WaterfallVisual": { + "$ref": "#/definitions/WaterfallVisual" + }, + "HistogramVisual": { + "$ref": "#/definitions/HistogramVisual" + }, + "WordCloudVisual": { + "$ref": "#/definitions/WordCloudVisual" + }, + "InsightVisual": { + "$ref": "#/definitions/InsightVisual" + }, + "SankeyDiagramVisual": { + "$ref": "#/definitions/SankeyDiagramVisual" + }, + "CustomContentVisual": { + "$ref": "#/definitions/CustomContentVisual" + }, + "EmptyVisual": { + "$ref": "#/definitions/EmptyVisual" + }, + "RadarChartVisual": { + "$ref": "#/definitions/RadarChartVisual" + } + }, + "additionalProperties": false + }, + "VisualCustomAction": { + "type": "object", + "properties": { + "CustomActionId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Name": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Status": { + "$ref": "#/definitions/WidgetStatus" + }, + "Trigger": { + "$ref": "#/definitions/VisualCustomActionTrigger" + }, + "ActionOperations": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomActionOperation" + }, + "maxItems": 2, + "minItems": 1 + } + }, + "required": [ + "ActionOperations", + "CustomActionId", + "Name", + "Trigger" + ], + "additionalProperties": false + }, + "VisualCustomActionOperation": { + "type": "object", + "properties": { + "FilterOperation": { + "$ref": "#/definitions/CustomActionFilterOperation" + }, + "NavigationOperation": { + "$ref": "#/definitions/CustomActionNavigationOperation" + }, + "URLOperation": { + "$ref": "#/definitions/CustomActionURLOperation" + }, + "SetParametersOperation": { + "$ref": "#/definitions/CustomActionSetParametersOperation" + } + }, + "additionalProperties": false + }, + "VisualCustomActionTrigger": { + "type": "string", + "enum": [ + "DATA_POINT_CLICK", + "DATA_POINT_MENU" + ] + }, + "VisualPalette": { + "type": "object", + "properties": { + "ChartColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "ColorMap": { + "type": "array", + "items": { + "$ref": "#/definitions/DataPathColor" + }, + "maxItems": 5000, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "VisualSubtitleLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FormatText": { + "$ref": "#/definitions/LongFormatText" + } + }, + "additionalProperties": false + }, + "VisualTitleLabelOptions": { + "type": "object", + "properties": { + "Visibility": { + "$ref": "#/definitions/Visibility" + }, + "FormatText": { + "$ref": "#/definitions/ShortFormatText" + } + }, + "additionalProperties": false + }, + "WaterfallChartAggregatedFieldWells": { + "type": "object", + "properties": { + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Values": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 200, + "minItems": 0 + }, + "Breakdowns": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WaterfallChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/WaterfallChartFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/WaterfallChartSortConfiguration" + }, + "WaterfallChartOptions": { + "$ref": "#/definitions/WaterfallChartOptions" + }, + "CategoryAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "CategoryAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "PrimaryYAxisLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "PrimaryYAxisDisplayOptions": { + "$ref": "#/definitions/AxisDisplayOptions" + }, + "Legend": { + "$ref": "#/definitions/LegendOptions" + }, + "DataLabels": { + "$ref": "#/definitions/DataLabelOptions" + }, + "VisualPalette": { + "$ref": "#/definitions/VisualPalette" + } + }, + "additionalProperties": false + }, + "WaterfallChartFieldWells": { + "type": "object", + "properties": { + "WaterfallChartAggregatedFieldWells": { + "$ref": "#/definitions/WaterfallChartAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "WaterfallChartOptions": { + "type": "object", + "properties": { + "TotalBarLabel": { + "type": "string" + } + }, + "additionalProperties": false + }, + "WaterfallChartSortConfiguration": { + "type": "object", + "properties": { + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + }, + "BreakdownItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + } + }, + "additionalProperties": false + }, + "WaterfallVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/WaterfallChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "WhatIfPointScenario": { + "type": "object", + "properties": { + "Date": { + "type": "string", + "format": "date-time" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "Date", + "Value" + ], + "additionalProperties": false + }, + "WhatIfRangeScenario": { + "type": "object", + "properties": { + "StartDate": { + "type": "string", + "format": "date-time" + }, + "EndDate": { + "type": "string", + "format": "date-time" + }, + "Value": { + "type": "number", + "default": 0 + } + }, + "required": [ + "EndDate", + "StartDate", + "Value" + ], + "additionalProperties": false + }, + "WidgetStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "WordCloudAggregatedFieldWells": { + "type": "object", + "properties": { + "GroupBy": { + "type": "array", + "items": { + "$ref": "#/definitions/DimensionField" + }, + "maxItems": 10, + "minItems": 0 + }, + "Size": { + "type": "array", + "items": { + "$ref": "#/definitions/MeasureField" + }, + "maxItems": 1, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WordCloudChartConfiguration": { + "type": "object", + "properties": { + "FieldWells": { + "$ref": "#/definitions/WordCloudFieldWells" + }, + "SortConfiguration": { + "$ref": "#/definitions/WordCloudSortConfiguration" + }, + "CategoryLabelOptions": { + "$ref": "#/definitions/ChartAxisLabelOptions" + }, + "WordCloudOptions": { + "$ref": "#/definitions/WordCloudOptions" + } + }, + "additionalProperties": false + }, + "WordCloudCloudLayout": { + "type": "string", + "enum": [ + "FLUID", + "NORMAL" + ] + }, + "WordCloudFieldWells": { + "type": "object", + "properties": { + "WordCloudAggregatedFieldWells": { + "$ref": "#/definitions/WordCloudAggregatedFieldWells" + } + }, + "additionalProperties": false + }, + "WordCloudOptions": { + "type": "object", + "properties": { + "WordOrientation": { + "$ref": "#/definitions/WordCloudWordOrientation" + }, + "WordScaling": { + "$ref": "#/definitions/WordCloudWordScaling" + }, + "CloudLayout": { + "$ref": "#/definitions/WordCloudCloudLayout" + }, + "WordCasing": { + "$ref": "#/definitions/WordCloudWordCasing" + }, + "WordPadding": { + "$ref": "#/definitions/WordCloudWordPadding" + }, + "MaximumStringLength": { + "type": "number", + "maximum": 100, + "minimum": 1 + } + }, + "additionalProperties": false + }, + "WordCloudSortConfiguration": { + "type": "object", + "properties": { + "CategoryItemsLimit": { + "$ref": "#/definitions/ItemsLimitConfiguration" + }, + "CategorySort": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldSortOptions" + }, + "maxItems": 100, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "WordCloudVisual": { + "type": "object", + "properties": { + "VisualId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Title": { + "$ref": "#/definitions/VisualTitleLabelOptions" + }, + "Subtitle": { + "$ref": "#/definitions/VisualSubtitleLabelOptions" + }, + "ChartConfiguration": { + "$ref": "#/definitions/WordCloudChartConfiguration" + }, + "Actions": { + "type": "array", + "items": { + "$ref": "#/definitions/VisualCustomAction" + }, + "maxItems": 10, + "minItems": 0 + }, + "ColumnHierarchies": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnHierarchy" + }, + "maxItems": 2, + "minItems": 0 + } + }, + "required": [ + "VisualId" + ], + "additionalProperties": false + }, + "WordCloudWordCasing": { + "type": "string", + "enum": [ + "LOWER_CASE", + "EXISTING_CASE" + ] + }, + "WordCloudWordOrientation": { + "type": "string", + "enum": [ + "HORIZONTAL", + "HORIZONTAL_AND_VERTICAL" + ] + }, + "WordCloudWordPadding": { + "type": "string", + "enum": [ + "NONE", + "SMALL", + "MEDIUM", + "LARGE" + ] + }, + "WordCloudWordScaling": { + "type": "string", + "enum": [ + "EMPHASIZE", + "NORMAL" + ] + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "Definition": { + "$ref": "#/definitions/TemplateVersionDefinition" + }, + "LastUpdatedTime": { + "type": "string", + "format": "date-time" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePermission" + }, + "maxItems": 64, + "minItems": 1 + }, + "SourceEntity": { + "$ref": "#/definitions/TemplateSourceEntity" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1 + }, + "TemplateId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "ValidationStrategy": { + "$ref": "#/definitions/ValidationStrategy" + }, + "Version": { + "$ref": "#/definitions/TemplateVersion" + }, + "VersionDescription": { + "type": "string", + "maxLength": 512, + "minLength": 1 + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime", + "/properties/Version" + ], + "writeOnlyProperties": [ + "/properties/Definition", + "/properties/VersionDescription", + "/properties/SourceEntity", + "/properties/ValidationStrategy" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/TemplateId" + ], + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/TemplateId" + ], + "handlers": { + "create": { + "permissions": [ + "quicksight:DescribeTemplate", + "quicksight:DescribeTemplatePermissions", + "quicksight:CreateTemplate", + "quicksight:DescribeAnalysis", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeTemplate", + "quicksight:DescribeTemplatePermissions", + "quicksight:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "quicksight:DescribeTemplate", + "quicksight:DescribeTemplatePermissions", + "quicksight:UpdateTemplate", + "quicksight:UpdateTemplatePermissions", + "quicksight:PassDataSet", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "quicksight:DescribeTemplate", + "quicksight:DeleteTemplate" + ] + }, + "list": { + "permissions": [ + "quicksight:ListTemplates" + ], + "handlerSchema": { + "properties": { + "AwsAccountId": { + "$ref": "resource-schema.json#/properties/AwsAccountId" + } + }, + "required": [ + "AwsAccountId" + ] + } + } + }, + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-quicksight", + "required": [ + "AwsAccountId", + "TemplateId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/theme.json b/internal/aws/cfn/schemas/aws/quicksight/theme.json new file mode 100644 index 00000000..98de8baa --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/theme.json @@ -0,0 +1,477 @@ +{ + "typeName": "AWS::QuickSight::Theme", + "description": "Definition of the AWS::QuickSight::Theme Resource Type.", + "definitions": { + "BorderStyle": { + "type": "object", + "properties": { + "Show": { + "type": "boolean", + "default": null + } + }, + "additionalProperties": false + }, + "DataColorPalette": { + "type": "object", + "properties": { + "Colors": { + "type": "array", + "items": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "maxItems": 100, + "minItems": 0 + }, + "MinMaxGradient": { + "type": "array", + "items": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "maxItems": 100, + "minItems": 0 + }, + "EmptyFillColor": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + }, + "Font": { + "type": "object", + "properties": { + "FontFamily": { + "type": "string" + } + }, + "additionalProperties": false + }, + "GutterStyle": { + "type": "object", + "properties": { + "Show": { + "type": "boolean", + "default": null + } + }, + "additionalProperties": false + }, + "MarginStyle": { + "type": "object", + "properties": { + "Show": { + "type": "boolean", + "default": null + } + }, + "additionalProperties": false + }, + "ResourcePermission": { + "type": "object", + "properties": { + "Principal": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Actions": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1 + } + }, + "required": [ + "Actions", + "Principal" + ], + "additionalProperties": false + }, + "ResourceStatus": { + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "CREATION_SUCCESSFUL", + "CREATION_FAILED", + "UPDATE_IN_PROGRESS", + "UPDATE_SUCCESSFUL", + "UPDATE_FAILED", + "DELETED" + ] + }, + "SheetStyle": { + "type": "object", + "properties": { + "Tile": { + "$ref": "#/definitions/TileStyle" + }, + "TileLayout": { + "$ref": "#/definitions/TileLayoutStyle" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "ThemeConfiguration": { + "type": "object", + "properties": { + "DataColorPalette": { + "$ref": "#/definitions/DataColorPalette" + }, + "UIColorPalette": { + "$ref": "#/definitions/UIColorPalette" + }, + "Sheet": { + "$ref": "#/definitions/SheetStyle" + }, + "Typography": { + "$ref": "#/definitions/Typography" + } + }, + "additionalProperties": false + }, + "ThemeError": { + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/ThemeErrorType" + }, + "Message": { + "type": "string", + "pattern": ".*\\S.*" + } + }, + "additionalProperties": false + }, + "ThemeErrorType": { + "type": "string", + "enum": [ + "INTERNAL_FAILURE" + ] + }, + "ThemeType": { + "type": "string", + "enum": [ + "QUICKSIGHT", + "CUSTOM", + "ALL" + ] + }, + "ThemeVersion": { + "type": "object", + "properties": { + "VersionNumber": { + "type": "number", + "minimum": 1 + }, + "Arn": { + "type": "string" + }, + "Description": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "BaseThemeId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "Configuration": { + "$ref": "#/definitions/ThemeConfiguration" + }, + "Errors": { + "type": "array", + "items": { + "$ref": "#/definitions/ThemeError" + }, + "minItems": 1 + }, + "Status": { + "$ref": "#/definitions/ResourceStatus" + } + }, + "additionalProperties": false + }, + "TileLayoutStyle": { + "type": "object", + "properties": { + "Gutter": { + "$ref": "#/definitions/GutterStyle" + }, + "Margin": { + "$ref": "#/definitions/MarginStyle" + } + }, + "additionalProperties": false + }, + "TileStyle": { + "type": "object", + "properties": { + "Border": { + "$ref": "#/definitions/BorderStyle" + } + }, + "additionalProperties": false + }, + "Typography": { + "type": "object", + "properties": { + "FontFamilies": { + "type": "array", + "items": { + "$ref": "#/definitions/Font" + }, + "maxItems": 5, + "minItems": 0 + } + }, + "additionalProperties": false + }, + "UIColorPalette": { + "type": "object", + "properties": { + "PrimaryForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "PrimaryBackground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "SecondaryForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "SecondaryBackground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Accent": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "AccentForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Danger": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DangerForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Warning": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "WarningForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Success": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "SuccessForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Dimension": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "DimensionForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "Measure": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + }, + "MeasureForeground": { + "type": "string", + "pattern": "^#[A-F0-9]{6}$" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "BaseThemeId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Configuration": { + "$ref": "#/definitions/ThemeConfiguration" + }, + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "LastUpdatedTime": { + "type": "string", + "format": "date-time" + }, + "Name": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + }, + "Permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourcePermission" + }, + "maxItems": 64, + "minItems": 1 + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1 + }, + "ThemeId": { + "type": "string", + "maxLength": 512, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "Type": { + "$ref": "#/definitions/ThemeType" + }, + "Version": { + "$ref": "#/definitions/ThemeVersion" + }, + "VersionDescription": { + "type": "string", + "maxLength": 512, + "minLength": 1 + } + }, + "required": [ + "AwsAccountId", + "ThemeId", + "BaseThemeId", + "Configuration", + "Name" + ], + "readOnlyProperties": [ + "/properties/CreatedTime", + "/properties/Version", + "/properties/LastUpdatedTime", + "/properties/Arn", + "/properties/Type" + ], + "writeOnlyProperties": [ + "/properties/BaseThemeId", + "/properties/Configuration", + "/properties/VersionDescription" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/ThemeId" + ], + "primaryIdentifier": [ + "/properties/ThemeId", + "/properties/AwsAccountId" + ], + "handlers": { + "read": { + "permissions": [ + "quicksight:DescribeTheme", + "quicksight:DescribeThemePermissions", + "quicksight:ListTagsForResource" + ] + }, + "create": { + "permissions": [ + "quicksight:DescribeTheme", + "quicksight:DescribeThemePermissions", + "quicksight:CreateTheme", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "quicksight:ListThemes" + ], + "handlerSchema": { + "properties": { + "AwsAccountId": { + "$ref": "resource-schema.json#/properties/AwsAccountId" + } + }, + "required": [ + "AwsAccountId" + ] + } + }, + "update": { + "permissions": [ + "quicksight:DescribeTheme", + "quicksight:DescribeThemePermissions", + "quicksight:UpdateTheme", + "quicksight:UpdateThemePermissions", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "quicksight:DescribeTheme", + "quicksight:DeleteTheme" + ] + } + }, + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-quicksight" +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/topic.json b/internal/aws/cfn/schemas/aws/quicksight/topic.json new file mode 100644 index 00000000..c9c064ce --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/topic.json @@ -0,0 +1,1016 @@ +{ + "typeName": "AWS::QuickSight::Topic", + "description": "Definition of the AWS::QuickSight::Topic Resource Type.", + "definitions": { + "AggregationFunctionParameters": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "AuthorSpecifiedAggregation": { + "type": "string", + "enum": [ + "COUNT", + "DISTINCT_COUNT", + "MIN", + "MAX", + "MEDIAN", + "SUM", + "AVERAGE", + "STDEV", + "STDEVP", + "VAR", + "VARP", + "PERCENTILE" + ] + }, + "CategoryFilterFunction": { + "type": "string", + "enum": [ + "EXACT", + "CONTAINS" + ] + }, + "CategoryFilterType": { + "type": "string", + "enum": [ + "CUSTOM_FILTER", + "CUSTOM_FILTER_LIST", + "FILTER_LIST" + ] + }, + "CellValueSynonym": { + "type": "object", + "properties": { + "CellValue": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "Synonyms": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "CollectiveConstant": { + "type": "object", + "properties": { + "ValueList": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "ColumnDataRole": { + "type": "string", + "enum": [ + "DIMENSION", + "MEASURE" + ] + }, + "ColumnOrderingType": { + "type": "string", + "enum": [ + "GREATER_IS_BETTER", + "LESSER_IS_BETTER", + "SPECIFIED" + ] + }, + "ComparativeOrder": { + "type": "object", + "properties": { + "UseOrdering": { + "$ref": "#/definitions/ColumnOrderingType" + }, + "SpecifedOrder": { + "type": "array", + "items": { + "type": "string" + } + }, + "TreatUndefinedSpecifiedValues": { + "$ref": "#/definitions/UndefinedSpecifiedValueType" + } + }, + "additionalProperties": false + }, + "ConstantType": { + "type": "string", + "enum": [ + "SINGULAR", + "RANGE", + "COLLECTIVE" + ] + }, + "DataAggregation": { + "type": "object", + "properties": { + "DatasetRowDateGranularity": { + "$ref": "#/definitions/TopicTimeGranularity" + }, + "DefaultDateColumnName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "DatasetMetadata": { + "type": "object", + "properties": { + "DatasetArn": { + "type": "string" + }, + "DatasetName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "DatasetDescription": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "DataAggregation": { + "$ref": "#/definitions/DataAggregation" + }, + "Filters": { + "type": "array", + "items": { + "$ref": "#/definitions/TopicFilter" + } + }, + "Columns": { + "type": "array", + "items": { + "$ref": "#/definitions/TopicColumn" + } + }, + "CalculatedFields": { + "type": "array", + "items": { + "$ref": "#/definitions/TopicCalculatedField" + } + }, + "NamedEntities": { + "type": "array", + "items": { + "$ref": "#/definitions/TopicNamedEntity" + } + } + }, + "required": [ + "DatasetArn" + ], + "additionalProperties": false + }, + "DefaultAggregation": { + "type": "string", + "enum": [ + "SUM", + "MAX", + "MIN", + "COUNT", + "DISTINCT_COUNT", + "AVERAGE", + "MEDIAN", + "STDEV", + "STDEVP", + "VAR", + "VARP" + ] + }, + "DefaultFormatting": { + "type": "object", + "properties": { + "DisplayFormat": { + "$ref": "#/definitions/DisplayFormat" + }, + "DisplayFormatOptions": { + "$ref": "#/definitions/DisplayFormatOptions" + } + }, + "additionalProperties": false + }, + "DisplayFormat": { + "type": "string", + "enum": [ + "AUTO", + "PERCENT", + "CURRENCY", + "NUMBER", + "DATE", + "STRING" + ] + }, + "DisplayFormatOptions": { + "type": "object", + "properties": { + "UseBlankCellFormat": { + "type": "boolean", + "default": false + }, + "BlankCellFormat": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "DateFormat": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "DecimalSeparator": { + "$ref": "#/definitions/TopicNumericSeparatorSymbol" + }, + "GroupingSeparator": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "UseGrouping": { + "type": "boolean", + "default": false + }, + "FractionDigits": { + "type": "number", + "default": 0 + }, + "Prefix": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "Suffix": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "UnitScaler": { + "$ref": "#/definitions/NumberScale" + }, + "NegativeFormat": { + "$ref": "#/definitions/NegativeFormat" + }, + "CurrencySymbol": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "FilterClass": { + "type": "string", + "enum": [ + "ENFORCED_VALUE_FILTER", + "CONDITIONAL_VALUE_FILTER", + "NAMED_VALUE_FILTER" + ] + }, + "NamedEntityAggType": { + "type": "string", + "enum": [ + "SUM", + "MIN", + "MAX", + "COUNT", + "AVERAGE", + "DISTINCT_COUNT", + "STDEV", + "STDEVP", + "VAR", + "VARP", + "PERCENTILE", + "MEDIAN", + "CUSTOM" + ] + }, + "NamedEntityDefinition": { + "type": "object", + "properties": { + "FieldName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "PropertyName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "PropertyRole": { + "$ref": "#/definitions/PropertyRole" + }, + "PropertyUsage": { + "$ref": "#/definitions/PropertyUsage" + }, + "Metric": { + "$ref": "#/definitions/NamedEntityDefinitionMetric" + } + }, + "additionalProperties": false + }, + "NamedEntityDefinitionMetric": { + "type": "object", + "properties": { + "Aggregation": { + "$ref": "#/definitions/NamedEntityAggType" + }, + "AggregationFunctionParameters": { + "$ref": "#/definitions/AggregationFunctionParameters" + } + }, + "additionalProperties": false + }, + "NamedFilterAggType": { + "type": "string", + "enum": [ + "NO_AGGREGATION", + "SUM", + "AVERAGE", + "COUNT", + "DISTINCT_COUNT", + "MAX", + "MEDIAN", + "MIN", + "STDEV", + "STDEVP", + "VAR", + "VARP" + ] + }, + "NamedFilterType": { + "type": "string", + "enum": [ + "CATEGORY_FILTER", + "NUMERIC_EQUALITY_FILTER", + "NUMERIC_RANGE_FILTER", + "DATE_RANGE_FILTER", + "RELATIVE_DATE_FILTER" + ] + }, + "NegativeFormat": { + "type": "object", + "properties": { + "Prefix": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "Suffix": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "NumberScale": { + "type": "string", + "enum": [ + "NONE", + "AUTO", + "THOUSANDS", + "MILLIONS", + "BILLIONS", + "TRILLIONS" + ] + }, + "PropertyRole": { + "type": "string", + "enum": [ + "PRIMARY", + "ID" + ] + }, + "PropertyUsage": { + "type": "string", + "enum": [ + "INHERIT", + "DIMENSION", + "MEASURE" + ] + }, + "RangeConstant": { + "type": "object", + "properties": { + "Minimum": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "Maximum": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "SemanticEntityType": { + "type": "object", + "properties": { + "TypeName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "SubTypeName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "TypeParameters": { + "$ref": "#/definitions/TypeParameters" + } + }, + "additionalProperties": false + }, + "SemanticType": { + "type": "object", + "properties": { + "TypeName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "SubTypeName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "TypeParameters": { + "$ref": "#/definitions/TypeParameters" + }, + "TruthyCellValue": { + "type": "string" + }, + "TruthyCellValueSynonyms": { + "type": "array", + "items": { + "type": "string" + } + }, + "FalseyCellValue": { + "type": "string" + }, + "FalseyCellValueSynonyms": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "TopicCalculatedField": { + "type": "object", + "properties": { + "CalculatedFieldName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "CalculatedFieldDescription": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "Expression": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "CalculatedFieldSynonyms": { + "type": "array", + "items": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "IsIncludedInTopic": { + "type": "boolean", + "default": false + }, + "ColumnDataRole": { + "$ref": "#/definitions/ColumnDataRole" + }, + "TimeGranularity": { + "$ref": "#/definitions/TopicTimeGranularity" + }, + "DefaultFormatting": { + "$ref": "#/definitions/DefaultFormatting" + }, + "Aggregation": { + "$ref": "#/definitions/DefaultAggregation" + }, + "ComparativeOrder": { + "$ref": "#/definitions/ComparativeOrder" + }, + "SemanticType": { + "$ref": "#/definitions/SemanticType" + }, + "AllowedAggregations": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthorSpecifiedAggregation" + } + }, + "NotAllowedAggregations": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthorSpecifiedAggregation" + } + }, + "NeverAggregateInFilter": { + "type": "boolean", + "default": false + }, + "NonAdditive": { + "type": "boolean", + "default": false + }, + "CellValueSynonyms": { + "type": "array", + "items": { + "$ref": "#/definitions/CellValueSynonym" + } + } + }, + "required": [ + "CalculatedFieldName", + "Expression" + ], + "additionalProperties": false + }, + "TopicCategoryFilter": { + "type": "object", + "properties": { + "CategoryFilterFunction": { + "$ref": "#/definitions/CategoryFilterFunction" + }, + "CategoryFilterType": { + "$ref": "#/definitions/CategoryFilterType" + }, + "Constant": { + "$ref": "#/definitions/TopicCategoryFilterConstant" + }, + "Inverse": { + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "TopicCategoryFilterConstant": { + "type": "object", + "properties": { + "ConstantType": { + "$ref": "#/definitions/ConstantType" + }, + "SingularConstant": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "CollectiveConstant": { + "$ref": "#/definitions/CollectiveConstant" + } + }, + "additionalProperties": false + }, + "TopicColumn": { + "type": "object", + "properties": { + "ColumnName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "ColumnFriendlyName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "ColumnDescription": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "ColumnSynonyms": { + "type": "array", + "items": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "ColumnDataRole": { + "$ref": "#/definitions/ColumnDataRole" + }, + "Aggregation": { + "$ref": "#/definitions/DefaultAggregation" + }, + "IsIncludedInTopic": { + "type": "boolean", + "default": false + }, + "ComparativeOrder": { + "$ref": "#/definitions/ComparativeOrder" + }, + "SemanticType": { + "$ref": "#/definitions/SemanticType" + }, + "TimeGranularity": { + "$ref": "#/definitions/TopicTimeGranularity" + }, + "AllowedAggregations": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthorSpecifiedAggregation" + } + }, + "NotAllowedAggregations": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthorSpecifiedAggregation" + } + }, + "DefaultFormatting": { + "$ref": "#/definitions/DefaultFormatting" + }, + "NeverAggregateInFilter": { + "type": "boolean", + "default": false + }, + "NonAdditive": { + "type": "boolean", + "default": false + }, + "CellValueSynonyms": { + "type": "array", + "items": { + "$ref": "#/definitions/CellValueSynonym" + } + } + }, + "required": [ + "ColumnName" + ], + "additionalProperties": false + }, + "TopicDateRangeFilter": { + "type": "object", + "properties": { + "Inclusive": { + "type": "boolean", + "default": false + }, + "Constant": { + "$ref": "#/definitions/TopicRangeFilterConstant" + } + }, + "additionalProperties": false + }, + "TopicDetails": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "DataSets": { + "type": "array", + "items": { + "$ref": "#/definitions/DatasetMetadata" + } + }, + "UserExperienceVersion": { + "$ref": "#/definitions/TopicUserExperienceVersion" + } + }, + "additionalProperties": false + }, + "TopicFilter": { + "type": "object", + "properties": { + "FilterDescription": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "FilterClass": { + "$ref": "#/definitions/FilterClass" + }, + "FilterName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "FilterSynonyms": { + "type": "array", + "items": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "OperandFieldName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "FilterType": { + "$ref": "#/definitions/NamedFilterType" + }, + "CategoryFilter": { + "$ref": "#/definitions/TopicCategoryFilter" + }, + "NumericEqualityFilter": { + "$ref": "#/definitions/TopicNumericEqualityFilter" + }, + "NumericRangeFilter": { + "$ref": "#/definitions/TopicNumericRangeFilter" + }, + "DateRangeFilter": { + "$ref": "#/definitions/TopicDateRangeFilter" + }, + "RelativeDateFilter": { + "$ref": "#/definitions/TopicRelativeDateFilter" + } + }, + "required": [ + "FilterName", + "OperandFieldName" + ], + "additionalProperties": false + }, + "TopicNamedEntity": { + "type": "object", + "properties": { + "EntityName": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "EntityDescription": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "EntitySynonyms": { + "type": "array", + "items": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "SemanticEntityType": { + "$ref": "#/definitions/SemanticEntityType" + }, + "Definition": { + "type": "array", + "items": { + "$ref": "#/definitions/NamedEntityDefinition" + } + } + }, + "required": [ + "EntityName" + ], + "additionalProperties": false + }, + "TopicNumericEqualityFilter": { + "type": "object", + "properties": { + "Constant": { + "$ref": "#/definitions/TopicSingularFilterConstant" + }, + "Aggregation": { + "$ref": "#/definitions/NamedFilterAggType" + } + }, + "additionalProperties": false + }, + "TopicNumericRangeFilter": { + "type": "object", + "properties": { + "Inclusive": { + "type": "boolean", + "default": false + }, + "Constant": { + "$ref": "#/definitions/TopicRangeFilterConstant" + }, + "Aggregation": { + "$ref": "#/definitions/NamedFilterAggType" + } + }, + "additionalProperties": false + }, + "TopicNumericSeparatorSymbol": { + "type": "string", + "enum": [ + "COMMA", + "DOT" + ] + }, + "TopicRangeFilterConstant": { + "type": "object", + "properties": { + "ConstantType": { + "$ref": "#/definitions/ConstantType" + }, + "RangeConstant": { + "$ref": "#/definitions/RangeConstant" + } + }, + "additionalProperties": false + }, + "TopicRelativeDateFilter": { + "type": "object", + "properties": { + "TimeGranularity": { + "$ref": "#/definitions/TopicTimeGranularity" + }, + "RelativeDateFilterFunction": { + "$ref": "#/definitions/TopicRelativeDateFilterFunction" + }, + "Constant": { + "$ref": "#/definitions/TopicSingularFilterConstant" + } + }, + "additionalProperties": false + }, + "TopicRelativeDateFilterFunction": { + "type": "string", + "enum": [ + "PREVIOUS", + "THIS", + "LAST", + "NEXT", + "NOW" + ] + }, + "TopicSingularFilterConstant": { + "type": "object", + "properties": { + "ConstantType": { + "$ref": "#/definitions/ConstantType" + }, + "SingularConstant": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "TopicTimeGranularity": { + "type": "string", + "enum": [ + "SECOND", + "MINUTE", + "HOUR", + "DAY", + "WEEK", + "MONTH", + "QUARTER", + "YEAR" + ] + }, + "TopicUserExperienceVersion": { + "type": "string", + "enum": [ + "LEGACY", + "NEW_READER_EXPERIENCE" + ] + }, + "TypeParameters": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "UndefinedSpecifiedValueType": { + "type": "string", + "enum": [ + "LEAST", + "MOST" + ] + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "DataSets": { + "type": "array", + "items": { + "$ref": "#/definitions/DatasetMetadata" + } + }, + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 0 + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "TopicId": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^[A-Za-z0-9-_.\\\\+]*$" + }, + "UserExperienceVersion": { + "$ref": "#/definitions/TopicUserExperienceVersion" + } + }, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/TopicId" + ], + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/TopicId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "quicksight:CreateTopic", + "quicksight:PassDataSet", + "quicksight:DescribeTopicRefresh" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeTopic" + ] + }, + "update": { + "permissions": [ + "quicksight:UpdateTopic", + "quicksight:PassDataSet", + "quicksight:DescribeTopicRefresh" + ] + }, + "delete": { + "permissions": [ + "quicksight:DeleteTopic" + ] + }, + "list": { + "permissions": [ + "quicksight:ListTopics" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/quicksight/vpcconnection.json b/internal/aws/cfn/schemas/aws/quicksight/vpcconnection.json new file mode 100644 index 00000000..c2c0741d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/quicksight/vpcconnection.json @@ -0,0 +1,277 @@ +{ + "typeName": "AWS::QuickSight::VPCConnection", + "description": "Definition of the AWS::QuickSight::VPCConnection Resource Type.", + "definitions": { + "Arn": { + "type": "string" + }, + "DnsResolvers": { + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "NetworkInterfaces": { + "type": "array", + "items": { + "$ref": "#/definitions/NetworkInterface" + }, + "maxItems": 15, + "insertionOrder": false + }, + "NetworkInterface": { + "type": "object", + "properties": { + "SubnetId": { + "$ref": "#/definitions/SubnetId" + }, + "AvailabilityZone": { + "type": "string" + }, + "ErrorMessage": { + "type": "string" + }, + "Status": { + "type": "string", + "enum": [ + "CREATING", + "AVAILABLE", + "CREATION_FAILED", + "UPDATING", + "UPDATE_FAILED", + "DELETING", + "DELETED", + "DELETION_FAILED", + "DELETION_SCHEDULED", + "ATTACHMENT_FAILED_ROLLBACK_FAILED" + ] + }, + "NetworkInterfaceId": { + "$ref": "#/definitions/NetworkInterfaceId" + } + }, + "additionalProperties": false, + "required": [] + }, + "NetworkInterfaceId": { + "type": "string", + "pattern": "^eni-[0-9a-z]*$", + "maxLength": 255 + }, + "RoleArn": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "items": { + "$ref": "#/definitions/SecurityGroupId" + }, + "maxItems": 16, + "minItems": 1, + "insertionOrder": false + }, + "SecurityGroupId": { + "type": "string", + "pattern": "^sg-[0-9a-z]*$", + "maxItems": 255, + "minItems": 1 + }, + "SubnetIds": { + "type": "array", + "items": { + "$ref": "#/definitions/SubnetId" + }, + "maxItems": 15, + "minItems": 2, + "insertionOrder": false + }, + "SubnetId": { + "type": "string", + "pattern": "^subnet-[0-9a-z]*$", + "maxLength": 255, + "minLength": 1 + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 1, + "insertionOrder": false + }, + "Tag": { + "type": "object", + "properties": { + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 1 + }, + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "VPCConnectionId": { + "type": "string", + "maxLength": 1000, + "minLength": 1, + "pattern": "[\\w\\-]+" + }, + "VPCId": { + "type": "string" + }, + "VPCConnectionResourceStatus": { + "type": "string", + "enum": [ + "CREATION_IN_PROGRESS", + "CREATION_SUCCESSFUL", + "CREATION_FAILED", + "UPDATE_IN_PROGRESS", + "UPDATE_SUCCESSFUL", + "UPDATE_FAILED", + "DELETION_IN_PROGRESS", + "DELETION_FAILED", + "DELETED" + ] + }, + "VPCConnectionAvailabilityStatus": { + "type": "string", + "enum": [ + "AVAILABLE", + "UNAVAILABLE", + "PARTIALLY_AVAILABLE" + ] + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "AwsAccountId": { + "type": "string", + "maxLength": 12, + "minLength": 12, + "pattern": "^[0-9]{12}$" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "VPCConnectionId": { + "$ref": "#/definitions/VPCConnectionId" + }, + "VPCId": { + "$ref": "#/definitions/VPCId" + }, + "SecurityGroupIds": { + "$ref": "#/definitions/SecurityGroupIds" + }, + "SubnetIds": { + "$ref": "#/definitions/SubnetIds" + }, + "DnsResolvers": { + "$ref": "#/definitions/DnsResolvers" + }, + "Status": { + "$ref": "#/definitions/VPCConnectionResourceStatus" + }, + "AvailabilityStatus": { + "$ref": "#/definitions/VPCConnectionAvailabilityStatus" + }, + "NetworkInterfaces": { + "$ref": "#/definitions/NetworkInterfaces" + }, + "RoleArn": { + "$ref": "#/definitions/RoleArn" + }, + "CreatedTime": { + "type": "string", + "format": "date-time" + }, + "LastUpdatedTime": { + "type": "string", + "format": "date-time" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/AwsAccountId", + "/properties/VPCConnectionId" + ], + "writeOnlyProperties": [ + "/properties/SubnetIds" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedTime", + "/properties/LastUpdatedTime", + "/properties/NetworkInterfaces", + "/properties/Status", + "/properties/VPCId" + ], + "primaryIdentifier": [ + "/properties/AwsAccountId", + "/properties/VPCConnectionId" + ], + "handlers": { + "create": { + "permissions": [ + "quicksight:CreateVPCConnection", + "quicksight:DescribeVPCConnection", + "quicksight:ListTagsForResource", + "quicksight:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "quicksight:DescribeVPCConnection", + "quicksight:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "quicksight:DescribeVPCConnection", + "quicksight:UpdateVPCConnection", + "quicksight:TagResource", + "quicksight:UntagResource", + "quicksight:ListTagsForResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "quicksight:DescribeVPCConnection", + "quicksight:DeleteVPCConnection", + "quicksight:ListTagsForResource", + "iam:PassRole" + ] + }, + "list": { + "permissions": [ + "quicksight:ListVPCConnections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ram/permission.json b/internal/aws/cfn/schemas/aws/ram/permission.json new file mode 100644 index 00000000..28961360 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ram/permission.json @@ -0,0 +1,129 @@ +{ + "typeName": "AWS::RAM::Permission", + "description": "Resource type definition for AWS::RAM::Permission", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ram", + "additionalProperties": false, + "properties": { + "Arn": { + "type": "string" + }, + "Name": { + "description": "The name of the permission.", + "type": "string" + }, + "Version": { + "description": "Version of the permission.", + "type": "string" + }, + "IsResourceTypeDefault": { + "description": "Set to true to use this as the default permission.", + "type": "boolean" + }, + "PermissionType": { + "type": "string" + }, + "ResourceType": { + "description": "The resource type this permission can be used with.", + "type": "string" + }, + "PolicyTemplate": { + "description": "Policy template for the permission.", + "type": "object" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "Name", + "ResourceType", + "PolicyTemplate" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Version", + "/properties/IsResourceTypeDefault", + "/properties/PermissionType" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/ResourceType", + "/properties/PolicyTemplate" + ], + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ram:CreatePermission", + "ram:TagResource" + ] + }, + "read": { + "permissions": [ + "ram:GetPermission" + ] + }, + "update": { + "permissions": [ + "ram:CreatePermissionVersion", + "ram:DeletePermissionVersion", + "ram:SetDefaultPermissionVersion", + "ram:GetPermission", + "ram:ReplacePermissionAssociations", + "ram:ListReplacePermissionAssociationsWork", + "ram:ListPermissionVersions", + "ram:UntagResource", + "ram:TagResource" + ] + }, + "delete": { + "permissions": [ + "ram:DeletePermissionVersion", + "ram:DeletePermission" + ] + }, + "list": { + "permissions": [ + "ram:ListPermissions", + "ram:ListPermissionVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ram/resourceshare.json b/internal/aws/cfn/schemas/aws/ram/resourceshare.json new file mode 100644 index 00000000..07f16406 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ram/resourceshare.json @@ -0,0 +1,82 @@ +{ + "typeName": "AWS::RAM::ResourceShare", + "description": "Resource Type definition for AWS::RAM::ResourceShare", + "additionalProperties": false, + "properties": { + "PermissionArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Principals": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AllowExternalPrincipals": { + "type": "boolean" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "ResourceArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Sources": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/rds/customdbengineversion.json b/internal/aws/cfn/schemas/aws/rds/customdbengineversion.json new file mode 100644 index 00000000..4521af65 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/customdbengineversion.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::RDS::CustomDBEngineVersion", + "description": "The AWS::RDS::CustomDBEngineVersion resource creates an Amazon RDS custom DB engine version.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "tagging": { + "taggable": true + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "DatabaseInstallationFilesS3BucketName": { + "type": "string", + "description": "The name of an Amazon S3 bucket that contains database installation files for your CEV. For example, a valid bucket name is `my-custom-installation-files`.", + "minLength": 3, + "maxLength": 63 + }, + "DatabaseInstallationFilesS3Prefix": { + "type": "string", + "description": "The Amazon S3 directory that contains the database installation files for your CEV. For example, a valid bucket name is `123456789012/cev1`. If this setting isn't specified, no prefix is assumed.", + "minLength": 1, + "maxLength": 255 + }, + "Description": { + "type": "string", + "description": "An optional description of your CEV.", + "minLength": 1, + "maxLength": 1000 + }, + "Engine": { + "type": "string", + "description": "The database engine to use for your custom engine version (CEV). The only supported value is `custom-oracle-ee`.", + "minLength": 1, + "maxLength": 35 + }, + "EngineVersion": { + "type": "string", + "description": "The name of your CEV. The name format is 19.customized_string . For example, a valid name is 19.my_cev1. This setting is required for RDS Custom for Oracle, but optional for Amazon RDS. The combination of Engine and EngineVersion is unique per customer per Region.", + "minLength": 1, + "maxLength": 60 + }, + "KMSKeyId": { + "type": "string", + "description": "The AWS KMS key identifier for an encrypted CEV. A symmetric KMS key is required for RDS Custom, but optional for Amazon RDS.", + "minLength": 1, + "maxLength": 2048 + }, + "Manifest": { + "type": "string", + "description": "The CEV manifest, which is a JSON document that describes the installation .zip files stored in Amazon S3. Specify the name/value pairs in a file or a quoted string. RDS Custom applies the patches in the order in which they are listed.", + "minLength": 1, + "maxLength": 51000 + }, + "DBEngineVersionArn": { + "type": "string", + "description": "The ARN of the custom engine version." + }, + "Status": { + "type": "string", + "description": "The availability status to be assigned to the CEV.", + "default": "available", + "enum": [ + "available", + "inactive", + "inactive-except-restore" + ] + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/Engine": "$lowercase(Engine)", + "/properties/EngineVersion": "$lowercase(EngineVersion)", + "/properties/KMSKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", KMSKeyId])" + }, + "required": [ + "DatabaseInstallationFilesS3BucketName", + "Engine", + "EngineVersion" + ], + "writeOnlyProperties": [ + "/properties/Manifest" + ], + "readOnlyProperties": [ + "/properties/DBEngineVersionArn" + ], + "primaryIdentifier": [ + "/properties/Engine", + "/properties/EngineVersion" + ], + "createOnlyProperties": [ + "/properties/Engine", + "/properties/EngineVersion", + "/properties/DatabaseInstallationFilesS3BucketName", + "/properties/DatabaseInstallationFilesS3Prefix", + "/properties/KMSKeyId", + "/properties/Manifest" + ], + "handlers": { + "create": { + "permissions": [ + "kms:CreateGrant", + "kms:DescribeKey", + "mediaimport:CreateDatabaseBinarySnapshot", + "rds:AddTagsToResource", + "rds:CreateCustomDBEngineVersion", + "rds:DescribeDBEngineVersions", + "rds:ModifyCustomDBEngineVersion", + "s3:CreateBucket", + "s3:GetObject", + "s3:GetObjectAcl", + "s3:GetObjectTagging", + "s3:ListBucket", + "s3:PutBucketObjectLockConfiguration", + "s3:PutBucketPolicy", + "s3:PutBucketVersioning" + ], + "timeoutInMinutes": 600 + }, + "read": { + "permissions": [ + "rds:DescribeDBEngineVersions" + ] + }, + "update": { + "permissions": [ + "rds:AddTagsToResource", + "rds:DescribeDBEngineVersions", + "rds:ModifyCustomDBEngineVersion", + "rds:RemoveTagsFromResource" + ], + "timeoutInMinutes": 600 + }, + "delete": { + "permissions": [ + "rds:DeleteCustomDBEngineVersion", + "rds:DescribeDBEngineVersions" + ], + "timeoutInMinutes": 600 + }, + "list": { + "permissions": [ + "rds:DescribeDBEngineVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbcluster.json b/internal/aws/cfn/schemas/aws/rds/dbcluster.json new file mode 100644 index 00000000..d1ab0c35 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbcluster.json @@ -0,0 +1,530 @@ +{ + "typeName": "AWS::RDS::DBCluster", + "description": "The AWS::RDS::DBCluster resource creates an Amazon Aurora DB cluster.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "properties": { + "Endpoint": { + "$ref": "#/definitions/Endpoint" + }, + "ReadEndpoint": { + "$ref": "#/definitions/ReadEndpoint" + }, + "AllocatedStorage": { + "description": "The amount of storage in gibibytes (GiB) to allocate to each DB instance in the Multi-AZ DB cluster.", + "type": "integer" + }, + "AssociatedRoles": { + "description": "Provides a list of the AWS Identity and Access Management (IAM) roles that are associated with the DB cluster. IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other AWS services on your behalf.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/DBClusterRole" + } + }, + "AvailabilityZones": { + "description": "A list of Availability Zones (AZs) where instances in the DB cluster can be created. For information on AWS Regions and Availability Zones, see Choosing the Regions and Availability Zones in the Amazon Aurora User Guide.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "AutoMinorVersionUpgrade": { + "description": "A value that indicates whether minor engine upgrades are applied automatically to the DB cluster during the maintenance window. By default, minor engine upgrades are applied automatically.", + "type": "boolean" + }, + "BacktrackWindow": { + "description": "The target backtrack window, in seconds. To disable backtracking, set this value to 0.", + "default": 0, + "minimum": 0, + "type": "integer" + }, + "BackupRetentionPeriod": { + "description": "The number of days for which automated backups are retained.", + "default": 1, + "minimum": 1, + "type": "integer" + }, + "CopyTagsToSnapshot": { + "description": "A value that indicates whether to copy all tags from the DB cluster to snapshots of the DB cluster. The default is not to copy them.", + "type": "boolean" + }, + "DatabaseName": { + "description": "The name of your database. If you don't provide a name, then Amazon RDS won't create a database in this DB cluster. For naming constraints, see Naming Constraints in the Amazon RDS User Guide.", + "type": "string" + }, + "DBClusterArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) for the DB cluster." + }, + "DBClusterInstanceClass": { + "description": "The compute and memory capacity of each DB instance in the Multi-AZ DB cluster, for example db.m6g.xlarge.", + "type": "string" + }, + "DBClusterResourceId": { + "description": "The AWS Region-unique, immutable identifier for the DB cluster.", + "type": "string" + }, + "DBInstanceParameterGroupName": { + "description": "The name of the DB parameter group to apply to all instances of the DB cluster.", + "type": "string" + }, + "DBSystemId": { + "description": "Reserved for future use.", + "type": "string" + }, + "GlobalClusterIdentifier": { + "description": "If you are configuring an Aurora global database cluster and want your Aurora DB cluster to be a secondary member in the global database cluster, specify the global cluster ID of the global database cluster. To define the primary database cluster of the global cluster, use the AWS::RDS::GlobalCluster resource.\n\nIf you aren't configuring a global database cluster, don't specify this property.", + "type": "string", + "pattern": "^$|^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$", + "minLength": 0, + "maxLength": 63 + }, + "DBClusterIdentifier": { + "description": "The DB cluster identifier. This parameter is stored as a lowercase string.", + "type": "string", + "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$", + "minLength": 1, + "maxLength": 63 + }, + "DBClusterParameterGroupName": { + "description": "The name of the DB cluster parameter group to associate with this DB cluster.", + "type": "string", + "default": "default.aurora5.6" + }, + "DBSubnetGroupName": { + "description": "A DB subnet group that you want to associate with this DB cluster.", + "type": "string" + }, + "DeletionProtection": { + "description": "A value that indicates whether the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is disabled.", + "type": "boolean" + }, + "Domain": { + "description": "The Active Directory directory ID to create the DB cluster in.", + "type": "string" + }, + "DomainIAMRoleName": { + "description": "Specify the name of the IAM role to be used when making API calls to the Directory Service.", + "type": "string" + }, + "EnableCloudwatchLogsExports": { + "description": "The list of log types that need to be enabled for exporting to CloudWatch Logs. The values in the list depend on the DB engine being used. For more information, see Publishing Database Logs to Amazon CloudWatch Logs in the Amazon Aurora User Guide.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "EnableGlobalWriteForwarding": { + "description": "Specifies whether to enable this DB cluster to forward write operations to the primary cluster of a global cluster (Aurora global database). By default, write operations are not allowed on Aurora DB clusters that are secondary clusters in an Aurora global database.", + "type": "boolean" + }, + "EnableHttpEndpoint": { + "description": "A value that indicates whether to enable the HTTP endpoint for DB cluster. By default, the HTTP endpoint is disabled.", + "type": "boolean" + }, + "EnableIAMDatabaseAuthentication": { + "description": "A value that indicates whether to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts. By default, mapping is disabled.", + "type": "boolean" + }, + "Engine": { + "description": "The name of the database engine to be used for this DB cluster. Valid Values: aurora (for MySQL 5.6-compatible Aurora), aurora-mysql (for MySQL 5.7-compatible Aurora), and aurora-postgresql", + "type": "string" + }, + "EngineMode": { + "description": "The DB engine mode of the DB cluster, either provisioned, serverless, parallelquery, global, or multimaster.", + "type": "string" + }, + "EngineVersion": { + "description": "The version number of the database engine to use.", + "type": "string" + }, + "ManageMasterUserPassword": { + "description": "A value that indicates whether to manage the master user password with AWS Secrets Manager.", + "type": "boolean" + }, + "Iops": { + "description": "The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for each DB instance in the Multi-AZ DB cluster.", + "type": "integer" + }, + "KmsKeyId": { + "description": "The Amazon Resource Name (ARN) of the AWS Key Management Service master key that is used to encrypt the database instances in the DB cluster, such as arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. If you enable the StorageEncrypted property but don't specify this property, the default master key is used. If you specify this property, you must set the StorageEncrypted property to true.", + "type": "string" + }, + "MasterUsername": { + "description": "The name of the master user for the DB cluster. You must specify MasterUsername, unless you specify SnapshotIdentifier. In that case, don't specify MasterUsername.", + "type": "string", + "pattern": "^[a-zA-Z]{1}[a-zA-Z0-9_]*$", + "minLength": 1 + }, + "MasterUserPassword": { + "description": "The master password for the DB instance.", + "type": "string" + }, + "MasterUserSecret": { + "$ref": "#/definitions/MasterUserSecret", + "description": "Contains the secret managed by RDS in AWS Secrets Manager for the master user password." + }, + "MonitoringInterval": { + "description": "The interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB cluster. To turn off collecting Enhanced Monitoring metrics, specify 0. The default is 0.", + "type": "integer", + "default": 0 + }, + "MonitoringRoleArn": { + "description": "The Amazon Resource Name (ARN) for the IAM role that permits RDS to send Enhanced Monitoring metrics to Amazon CloudWatch Logs.", + "type": "string" + }, + "NetworkType": { + "description": "The network type of the DB cluster.", + "type": "string" + }, + "PerformanceInsightsEnabled": { + "description": "A value that indicates whether to turn on Performance Insights for the DB cluster.", + "type": "boolean" + }, + "PerformanceInsightsKmsKeyId": { + "description": "The Amazon Web Services KMS key identifier for encryption of Performance Insights data.", + "type": "string" + }, + "PerformanceInsightsRetentionPeriod": { + "description": "The amount of time, in days, to retain Performance Insights data.", + "type": "integer" + }, + "Port": { + "description": "The port number on which the instances in the DB cluster accept connections. Default: 3306 if engine is set as aurora or 5432 if set to aurora-postgresql.", + "type": "integer" + }, + "PreferredBackupWindow": { + "description": "The daily time range during which automated backups are created if automated backups are enabled using the BackupRetentionPeriod parameter. The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region. To see the time blocks available, see Adjusting the Preferred DB Cluster Maintenance Window in the Amazon Aurora User Guide.", + "type": "string" + }, + "PreferredMaintenanceWindow": { + "description": "The weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC). The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. To see the time blocks available, see Adjusting the Preferred DB Cluster Maintenance Window in the Amazon Aurora User Guide.", + "type": "string" + }, + "PubliclyAccessible": { + "description": "A value that indicates whether the DB cluster is publicly accessible.", + "type": "boolean" + }, + "ReplicationSourceIdentifier": { + "description": "The Amazon Resource Name (ARN) of the source DB instance or DB cluster if this DB cluster is created as a Read Replica.", + "type": "string" + }, + "RestoreToTime": { + "description": "The date and time to restore the DB cluster to. Value must be a time in Universal Coordinated Time (UTC) format. An example: 2015-03-07T23:45:00Z", + "type": "string" + }, + "RestoreType": { + "description": "The type of restore to be performed. You can specify one of the following values:\nfull-copy - The new DB cluster is restored as a full copy of the source DB cluster.\ncopy-on-write - The new DB cluster is restored as a clone of the source DB cluster.", + "type": "string", + "default": "full-copy" + }, + "ServerlessV2ScalingConfiguration": { + "description": "Contains the scaling configuration of an Aurora Serverless v2 DB cluster.", + "$ref": "#/definitions/ServerlessV2ScalingConfiguration" + }, + "ScalingConfiguration": { + "description": "The ScalingConfiguration property type specifies the scaling configuration of an Aurora Serverless DB cluster.", + "$ref": "#/definitions/ScalingConfiguration" + }, + "SnapshotIdentifier": { + "description": "The identifier for the DB snapshot or DB cluster snapshot to restore from.\nYou can use either the name or the Amazon Resource Name (ARN) to specify a DB cluster snapshot. However, you can use only the ARN to specify a DB snapshot.\nAfter you restore a DB cluster with a SnapshotIdentifier property, you must specify the same SnapshotIdentifier property for any future updates to the DB cluster. When you specify this property for an update, the DB cluster is not restored from the snapshot again, and the data in the database is not changed. However, if you don't specify the SnapshotIdentifier property, an empty DB cluster is created, and the original DB cluster is deleted. If you specify a property that is different from the previous snapshot restore property, the DB cluster is restored from the specified SnapshotIdentifier property, and the original DB cluster is deleted.", + "type": "string" + }, + "SourceDBClusterIdentifier": { + "description": "The identifier of the source DB cluster from which to restore.", + "type": "string" + }, + "SourceRegion": { + "description": "The AWS Region which contains the source DB cluster when replicating a DB cluster. For example, us-east-1.", + "type": "string" + }, + "StorageEncrypted": { + "description": "Indicates whether the DB instance is encrypted.\nIf you specify the DBClusterIdentifier, SnapshotIdentifier, or SourceDBInstanceIdentifier property, don't specify this property. The value is inherited from the cluster, snapshot, or source DB instance.", + "type": "boolean" + }, + "StorageThroughput": { + "description": "Specifies the storage throughput value for the DB cluster. This setting applies only to the gp3 storage type.", + "type": "integer" + }, + "StorageType": { + "description": "Specifies the storage type to be associated with the DB cluster.", + "type": "string" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UseLatestRestorableTime": { + "description": "A value that indicates whether to restore the DB cluster to the latest restorable backup time. By default, the DB cluster is not restored to the latest restorable backup time.", + "type": "boolean" + }, + "VpcSecurityGroupIds": { + "description": "A list of EC2 VPC security groups to associate with this DB cluster.", + "uniqueItems": true, + "items": { + "type": "string" + }, + "type": "array" + } + }, + "definitions": { + "Endpoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "Address": { + "description": "The connection endpoint for the DB cluster.", + "type": "string" + }, + "Port": { + "description": "The port number that will accept connections on this DB cluster.", + "type": "string" + } + } + }, + "ReadEndpoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "Address": { + "description": "The reader endpoint for the DB cluster.", + "type": "string" + } + } + }, + "DBClusterRole": { + "description": "Describes an AWS Identity and Access Management (IAM) role that is associated with a DB cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "FeatureName": { + "description": "The name of the feature associated with the AWS Identity and Access Management (IAM) role. For the list of supported feature names, see DBEngineVersion in the Amazon RDS API Reference.", + "type": "string" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role that is associated with the DB cluster.", + "type": "string" + } + }, + "required": [ + "RoleArn" + ] + }, + "ServerlessV2ScalingConfiguration": { + "description": "Contains the scaling configuration of an Aurora Serverless v2 DB cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinCapacity": { + "description": "The minimum number of Aurora capacity units (ACUs) for a DB instance in an Aurora Serverless v2 cluster. You can specify ACU values in half-step increments, such as 8, 8.5, 9, and so on. The smallest value that you can use is 0.5.", + "type": "number" + }, + "MaxCapacity": { + "description": "The maximum number of Aurora capacity units (ACUs) for a DB instance in an Aurora Serverless v2 cluster. You can specify ACU values in half-step increments, such as 40, 40.5, 41, and so on. The largest value that you can use is 128.", + "type": "number" + } + } + }, + "ScalingConfiguration": { + "description": "The ScalingConfiguration property type specifies the scaling configuration of an Aurora Serverless DB cluster.", + "type": "object", + "additionalProperties": false, + "properties": { + "AutoPause": { + "description": "A value that indicates whether to allow or disallow automatic pause for an Aurora DB cluster in serverless DB engine mode. A DB cluster can be paused only when it's idle (it has no connections).", + "type": "boolean" + }, + "MaxCapacity": { + "description": "The maximum capacity for an Aurora DB cluster in serverless DB engine mode.\nFor Aurora MySQL, valid capacity values are 1, 2, 4, 8, 16, 32, 64, 128, and 256.\nFor Aurora PostgreSQL, valid capacity values are 2, 4, 8, 16, 32, 64, 192, and 384.\nThe maximum capacity must be greater than or equal to the minimum capacity.", + "type": "integer" + }, + "MinCapacity": { + "description": "The minimum capacity for an Aurora DB cluster in serverless DB engine mode.\nFor Aurora MySQL, valid capacity values are 1, 2, 4, 8, 16, 32, 64, 128, and 256.\nFor Aurora PostgreSQL, valid capacity values are 2, 4, 8, 16, 32, 64, 192, and 384.\nThe minimum capacity must be less than or equal to the maximum capacity.", + "type": "integer" + }, + "SecondsBeforeTimeout": { + "description": "The amount of time, in seconds, that Aurora Serverless v1 tries to find a scaling point to perform seamless scaling before enforcing the timeout action.\nThe default is 300.", + "type": "integer" + }, + "SecondsUntilAutoPause": { + "description": "The time, in seconds, before an Aurora DB cluster in serverless mode is paused.", + "type": "integer" + }, + "TimeoutAction": { + "description": "The action to take when the timeout is reached, either ForceApplyCapacityChange or RollbackCapacityChange.\nForceApplyCapacityChange sets the capacity to the specified value as soon as possible.\nRollbackCapacityChange, the default, ignores the capacity change if a scaling point isn't found in the timeout period.\n\nFor more information, see Autoscaling for Aurora Serverless v1 in the Amazon Aurora User Guide.", + "type": "string" + } + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + }, + "MasterUserSecret": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the secret." + }, + "KmsKeyId": { + "type": "string", + "description": "The AWS KMS key identifier that is used to encrypt the secret." + } + } + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/DBClusterIdentifier": "$lowercase(DBClusterIdentifier)", + "/properties/DBClusterParameterGroupName": "$lowercase(DBClusterParameterGroupName)", + "/properties/DBSubnetGroupName": "$lowercase(DBSubnetGroupName)", + "/properties/EnableHttpEndpoint": "$lowercase($string(EngineMode)) = 'serverless' ? EnableHttpEndpoint : ($lowercase($string(Engine)) = 'aurora-postgresql' ? EnableHttpEndpoint : false )", + "/properties/Engine": "$lowercase(Engine)", + "/properties/EngineVersion": "$join([$string(EngineVersion), \".*\"])", + "/properties/KmsKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", KmsKeyId])", + "/properties/MasterUserSecret/KmsKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", MasterUserSecret.KmsKeyId])", + "/properties/NetworkType": "$lowercase(NetworkType)", + "/properties/PerformanceInsightsKmsKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", PerformanceInsightsKmsKeyId])", + "/properties/PreferredMaintenanceWindow": "$lowercase(PreferredMaintenanceWindow)", + "/properties/SnapshotIdentifier": "$lowercase(SnapshotIdentifier)", + "/properties/SourceDBClusterIdentifier": "$lowercase(SourceDBClusterIdentifier)", + "/properties/StorageType": "$lowercase(StorageType)" + }, + "readOnlyProperties": [ + "/properties/DBClusterArn", + "/properties/DBClusterResourceId", + "/properties/Endpoint", + "/properties/Endpoint/Address", + "/properties/Endpoint/Port", + "/properties/ReadEndpoint/Port", + "/properties/ReadEndpoint/Address", + "/properties/MasterUserSecret/SecretArn", + "/properties/StorageThroughput" + ], + "createOnlyProperties": [ + "/properties/AvailabilityZones", + "/properties/DBClusterIdentifier", + "/properties/DBSubnetGroupName", + "/properties/DBSystemId", + "/properties/DatabaseName", + "/properties/EngineMode", + "/properties/KmsKeyId", + "/properties/PubliclyAccessible", + "/properties/RestoreToTime", + "/properties/RestoreType", + "/properties/SnapshotIdentifier", + "/properties/SourceDBClusterIdentifier", + "/properties/SourceRegion", + "/properties/StorageEncrypted", + "/properties/UseLatestRestorableTime" + ], + "conditionalCreateOnlyProperties": [ + "/properties/Engine", + "/properties/GlobalClusterIdentifier", + "/properties/MasterUsername" + ], + "primaryIdentifier": [ + "/properties/DBClusterIdentifier" + ], + "writeOnlyProperties": [ + "/properties/DBInstanceParameterGroupName", + "/properties/MasterUserPassword", + "/properties/RestoreToTime", + "/properties/RestoreType", + "/properties/SnapshotIdentifier", + "/properties/SourceDBClusterIdentifier", + "/properties/SourceRegion", + "/properties/UseLatestRestorableTime" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "iam:PassRole", + "rds:AddRoleToDBCluster", + "rds:AddTagsToResource", + "rds:CreateDBCluster", + "rds:CreateDBInstance", + "rds:DescribeDBClusters", + "rds:DescribeEvents", + "rds:EnableHttpEndpoint", + "rds:ModifyDBCluster", + "rds:RestoreDBClusterFromSnapshot", + "rds:RestoreDBClusterToPointInTime", + "secretsmanager:CreateSecret", + "secretsmanager:TagResource" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "rds:DescribeDBClusters" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeSecurityGroups", + "iam:PassRole", + "rds:AddRoleToDBCluster", + "rds:AddTagsToResource", + "rds:DescribeDBClusters", + "rds:DescribeDBSubnetGroups", + "rds:DescribeEvents", + "rds:DescribeGlobalClusters", + "rds:DisableHttpEndpoint", + "rds:EnableHttpEndpoint", + "rds:ModifyDBCluster", + "rds:ModifyDBInstance", + "rds:RemoveFromGlobalCluster", + "rds:RemoveRoleFromDBCluster", + "rds:RemoveTagsFromResource", + "secretsmanager:CreateSecret", + "secretsmanager:TagResource" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "rds:CreateDBClusterSnapshot", + "rds:DeleteDBCluster", + "rds:DeleteDBInstance", + "rds:DescribeDBClusters", + "rds:DescribeGlobalClusters", + "rds:RemoveFromGlobalCluster" + ] + }, + "list": { + "permissions": [ + "rds:DescribeDBClusters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbclusterparametergroup.json b/internal/aws/cfn/schemas/aws/rds/dbclusterparametergroup.json new file mode 100644 index 00000000..ecd159e2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbclusterparametergroup.json @@ -0,0 +1,122 @@ +{ + "typeName": "AWS::RDS::DBClusterParameterGroup", + "description": "The AWS::RDS::DBClusterParameterGroup resource creates a new Amazon RDS DB cluster parameter group. For more information, see Managing an Amazon Aurora DB Cluster in the Amazon Aurora User Guide.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "Description": { + "description": "A friendly description for this DB cluster parameter group.", + "type": "string" + }, + "Family": { + "description": "The DB cluster parameter group family name. A DB cluster parameter group can be associated with one and only one DB cluster parameter group family, and can be applied only to a DB cluster running a DB engine and engine version compatible with that DB cluster parameter group family.", + "type": "string" + }, + "Parameters": { + "description": "An array of parameters to be modified. A maximum of 20 parameters can be modified in a single request.", + "type": "object" + }, + "DBClusterParameterGroupName": { + "type": "string", + "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9])*$" + }, + "Tags": { + "description": "The list of tags for the cluster parameter group.", + "type": "array", + "maxItems": 50, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/DBClusterParameterGroupName": "$lowercase(DBClusterParameterGroupName)" + }, + "required": [ + "Description", + "Family", + "Parameters" + ], + "createOnlyProperties": [ + "/properties/DBClusterParameterGroupName", + "/properties/Description", + "/properties/Family" + ], + "primaryIdentifier": [ + "/properties/DBClusterParameterGroupName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "rds:AddTagsToResource", + "rds:CreateDBClusterParameterGroup", + "rds:DescribeDBClusterParameterGroups", + "rds:DescribeDBClusterParameters", + "rds:DescribeDBClusters", + "rds:DescribeEngineDefaultClusterParameters", + "rds:ListTagsForResource", + "rds:ModifyDBClusterParameterGroup", + "rds:RemoveTagsFromResource" + ], + "timeoutInMinutes": 180 + }, + "read": { + "permissions": [ + "rds:DescribeDBClusterParameterGroups", + "rds:DescribeDBClusterParameters", + "rds:DescribeEngineDefaultClusterParameters", + "rds:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rds:AddTagsToResource", + "rds:DescribeDBClusterParameterGroups", + "rds:DescribeDBClusterParameters", + "rds:DescribeDBClusters", + "rds:DescribeEngineDefaultClusterParameters", + "rds:ListTagsForResource", + "rds:ModifyDBClusterParameterGroup", + "rds:RemoveTagsFromResource", + "rds:ResetDBClusterParameterGroup" + ], + "timeoutInMinutes": 180 + }, + "delete": { + "permissions": [ + "rds:DeleteDBClusterParameterGroup" + ] + }, + "list": { + "permissions": [ + "rds:DescribeDBClusterParameterGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbinstance.json b/internal/aws/cfn/schemas/aws/rds/dbinstance.json new file mode 100644 index 00000000..c54ed61f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbinstance.json @@ -0,0 +1,659 @@ +{ + "typeName": "AWS::RDS::DBInstance", + "description": "The ``AWS::RDS::DBInstance`` resource creates an Amazon DB instance. The new DB instance can be an RDS DB instance, or it can be a DB instance in an Aurora DB cluster.\n For more information about creating an RDS DB instance, see [Creating an Amazon RDS DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html) in the *Amazon RDS User Guide*.\n For more information about creating a DB instance in an Aurora DB cluster, see [Creating an Amazon Aurora DB cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html) in the *Amazon Aurora User Guide*.\n If you import an existing DB instance, and the template configuration doesn't match the actual configuration of the DB instance, AWS CloudFormation applies the changes in the template during the import operation.\n If a DB instance is deleted or replaced during an update, AWS CloudFormation deletes all automated snapshots. However, it retains manual DB snapshots. During an", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "CertificateDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "CAIdentifier": { + "type": "string", + "description": "The CA identifier of the CA certificate used for the DB instance's server certificate." + }, + "ValidTill": { + "type": "string", + "format": "date-time", + "description": "The expiration date of the DB instance?s server certificate." + } + }, + "description": "Returns the details of the DB instance?s server certificate.\n For more information, see [Using SSL/TLS to encrypt a connection to a DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) in the *Amazon RDS User Guide* and [Using SSL/TLS to encrypt a connection to a DB cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html) in the *Amazon Aurora User Guide*." + }, + "Endpoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "Address": { + "type": "string", + "description": "Specifies the DNS address of the DB instance." + }, + "Port": { + "type": "string", + "description": "Specifies the port that the database engine is listening on." + }, + "HostedZoneId": { + "type": "string", + "description": "Specifies the ID that Amazon Route 53 assigns when you create a hosted zone." + } + }, + "description": "This data type represents the information you need to connect to an Amazon RDS DB instance. This data type is used as a response element in the following actions:\n + ``CreateDBInstance`` \n + ``DescribeDBInstances`` \n + ``DeleteDBInstance`` \n \n For the data structure that represents Amazon Aurora DB cluster endpoints, see ``DBClusterEndpoint``." + }, + "DBInstanceRole": { + "type": "object", + "additionalProperties": false, + "properties": { + "FeatureName": { + "type": "string", + "description": "The name of the feature associated with the AWS Identity and Access Management (IAM) role. IAM roles that are associated with a DB instance grant permission for the DB instance to access other AWS services on your behalf. For the list of supported feature names, see the ``SupportedFeatureNames`` description in [DBEngineVersion](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBEngineVersion.html) in the *Amazon RDS API Reference*." + }, + "RoleArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the IAM role that is associated with the DB instance." + } + }, + "required": [ + "FeatureName", + "RoleArn" + ], + "description": "Information about an AWS Identity and Access Management (IAM) role that is associated with a DB instance." + }, + "ProcessorFeature": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "enum": [ + "coreCount", + "threadsPerCore" + ], + "description": "The name of the processor feature. Valid names are ``coreCount`` and ``threadsPerCore``." + }, + "Value": { + "type": "string", + "description": "The value of a processor feature name." + } + }, + "description": "The ``ProcessorFeature`` property type specifies the processor features of a DB instance class status." + }, + "Tag": { + "description": "Metadata assigned to an Amazon RDS resource consisting of a key-value pair.\n For more information, see [Tagging Amazon RDS Resources](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the *Amazon RDS User Guide.*", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "A key is the required name of the tag. The string value can be from 1 to 128 Unicode characters in length and can't be prefixed with ``aws:`` or ``rds:``. The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', ':', '/', '=', '+', '-', '@' (Java regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:/=+\\\\-@]*)$\").", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "A value is the optional value of the tag. The string value can be from 1 to 256 Unicode characters in length and can't be prefixed with ``aws:`` or ``rds:``. The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', ':', '/', '=', '+', '-', '@' (Java regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:/=+\\\\-@]*)$\").", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + }, + "MasterUserSecret": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the secret." + }, + "KmsKeyId": { + "type": "string", + "description": "The AWS KMS key identifier that is used to encrypt the secret." + } + }, + "description": "The ``MasterUserSecret`` return value specifies the secret managed by RDS in AWS Secrets Manager for the master user password.\n For more information, see [Password management with Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html) in the *Amazon RDS User Guide* and [Password management with Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html) in the *Amazon Aurora User Guide.*" + } + }, + "properties": { + "AllocatedStorage": { + "type": "string", + "description": "The amount of storage in gibibytes (GiB) to be initially allocated for the database instance.\n If any value is set in the ``Iops`` parameter, ``AllocatedStorage`` must be at least 100 GiB, which corresponds to the minimum Iops value of 1,000. If you increase the ``Iops`` value (in 1,000 IOPS increments), then you must also increase the ``AllocatedStorage`` value (in 100-GiB increments). \n *Amazon Aurora* \n Not applicable. Aurora cluster volumes automatically grow as the amount of data in your database increases, though you are only charged for the space that you use in an Aurora cluster volume.\n *Db2* \n Constraints to the amount of storage for each storage type are the following:\n + General Purpose (SSD) storage (gp3): Must be an integer from 20 to 64000.\n + Provisioned IOPS storage (io1): Must be an integer from 100 to 64000.\n \n *MySQL* \n Constraints to the amount of storage for each storage type are the following: \n + General Purpose (SSD) storage (gp2): Must be an integer fro", + "pattern": "^[0-9]*$" + }, + "AllowMajorVersionUpgrade": { + "type": "boolean", + "description": "A value that indicates whether major version upgrades are allowed. Changing this parameter doesn't result in an outage and the change is asynchronously applied as soon as possible.\n Constraints: Major version upgrades must be allowed when specifying a value for the ``EngineVersion`` parameter that is a different major version than the DB instance's current version." + }, + "AssociatedRoles": { + "type": "array", + "items": { + "$ref": "#/definitions/DBInstanceRole" + }, + "description": "The IAMlong (IAM) roles associated with the DB instance. \n *Amazon Aurora* \n Not applicable. The associated roles are managed by the DB cluster." + }, + "AutoMinorVersionUpgrade": { + "type": "boolean", + "description": "A value that indicates whether minor engine upgrades are applied automatically to the DB instance during the maintenance window. By default, minor engine upgrades are applied automatically." + }, + "AutomaticBackupReplicationRegion": { + "type": "string", + "description": "The destination region for the backup replication of the DB instance. For more info, see [Replicating automated backups to another Region](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReplicateBackups.html) in the *Amazon RDS User Guide*." + }, + "AvailabilityZone": { + "type": "string", + "description": "The Availability Zone (AZ) where the database will be created. For information on AWS-Regions and Availability Zones, see [Regions and Availability Zones](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html).\n For Amazon Aurora, each Aurora DB cluster hosts copies of its storage in three separate Availability Zones. Specify one of these Availability Zones. Aurora automatically chooses an appropriate Availability Zone if you don't specify one.\n Default: A random, system-chosen Availability Zone in the endpoint's AWS-Region.\n Constraints:\n + The ``AvailabilityZone`` parameter can't be specified if the DB instance is a Multi-AZ deployment.\n + The specified Availability Zone must be in the same AWS-Region as the current endpoint.\n \n Example: ``us-east-1d``" + }, + "BackupRetentionPeriod": { + "type": "integer", + "minimum": 0, + "default": 1, + "description": "The number of days for which automated backups are retained. Setting this parameter to a positive number enables backups. Setting this parameter to 0 disables automated backups.\n *Amazon Aurora*\n Not applicable. The retention period for automated backups is managed by the DB cluster.\n Default: 1\n Constraints:\n + Must be a value from 0 to 35\n + Can't be set to 0 if the DB instance is a source to read replicas" + }, + "CACertificateIdentifier": { + "type": "string", + "description": "The identifier of the CA certificate for this DB instance.\n For more information, see [Using SSL/TLS to encrypt a connection to a DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) in the *Amazon RDS User Guide* and [Using SSL/TLS to encrypt a connection to a DB cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html) in the *Amazon Aurora User Guide*." + }, + "CertificateDetails": { + "$ref": "#/definitions/CertificateDetails", + "description": "The details of the DB instance's server certificate." + }, + "CertificateRotationRestart": { + "type": "boolean", + "description": "Specifies whether the DB instance is restarted when you rotate your SSL/TLS certificate.\n By default, the DB instance is restarted when you rotate your SSL/TLS certificate. The certificate is not updated until the DB instance is restarted.\n Set this parameter only if you are *not* using SSL/TLS to connect to the DB instance.\n If you are using SSL/TLS to connect to the DB instance, follow the appropriate instructions for your DB engine to rotate your SSL/TLS certificate:\n + For more information about rotating your SSL/TLS certificate for RDS DB engines, see [Rotating Your SSL/TLS Certificate.](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html) in the *Amazon RDS User Guide.* \n + For more information about rotating your SSL/TLS certificate for Aurora DB engines, see [Rotating Your SSL/TLS Certificate](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL-certificate-rotation.html) in the *Amazon Aurora User Gui" + }, + "CharacterSetName": { + "type": "string", + "description": "For supported engines, indicates that the DB instance should be associated with the specified character set.\n *Amazon Aurora* \n Not applicable. The character set is managed by the DB cluster. For more information, see [AWS::RDS::DBCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html)." + }, + "CopyTagsToSnapshot": { + "type": "boolean", + "description": "Specifies whether to copy tags from the DB instance to snapshots of the DB instance. By default, tags are not copied.\n This setting doesn't apply to Amazon Aurora DB instances. Copying tags to snapshots is managed by the DB cluster. Setting this value for an Aurora DB instance has no effect on the DB cluster setting." + }, + "CustomIAMInstanceProfile": { + "type": "string", + "description": "The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance.\n This setting is required for RDS Custom.\n Constraints:\n + The profile must exist in your account.\n + The profile must have an IAM role that Amazon EC2 has permissions to assume.\n + The instance profile name and the associated IAM role name must start with the prefix ``AWSRDSCustom``.\n \n For the list of permissions required for the IAM role, see [Configure IAM and your VPC](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc) in the *Amazon RDS User Guide*." + }, + "DBClusterIdentifier": { + "type": "string", + "description": "The identifier of the DB cluster that the instance will belong to." + }, + "DBClusterSnapshotIdentifier": { + "type": "string", + "description": "The identifier for the RDS for MySQL Multi-AZ DB cluster snapshot to restore from.\n For more information on Multi-AZ DB clusters, see [Multi-AZ DB cluster deployments](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html) in the *Amazon RDS User Guide*.\n Constraints:\n + Must match the identifier of an existing Multi-AZ DB cluster snapshot.\n + Can't be specified when ``DBSnapshotIdentifier`` is specified.\n + Must be specified when ``DBSnapshotIdentifier`` isn't specified.\n + If you are restoring from a shared manual Multi-AZ DB cluster snapshot, the ``DBClusterSnapshotIdentifier`` must be the ARN of the shared snapshot.\n + Can't be the identifier of an Aurora DB cluster snapshot.\n + Can't be the identifier of an RDS for PostgreSQL Multi-AZ DB cluster snapshot." + }, + "DBInstanceArn": { + "type": "string", + "description": "" + }, + "DBInstanceClass": { + "type": "string", + "description": "The compute and memory capacity of the DB instance, for example, ``db.m4.large``. Not all DB instance classes are available in all AWS Regions, or for all database engines.\n For the full list of DB instance classes, and availability for your engine, see [DB Instance Class](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html) in the *Amazon RDS User Guide.* For more information about DB instance class pricing and AWS Region support for DB instance classes, see [Amazon RDS Pricing](https://docs.aws.amazon.com/rds/pricing/)." + }, + "DBInstanceIdentifier": { + "type": "string", + "pattern": "^$|^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$", + "minLength": 1, + "maxLength": 63, + "description": "A name for the DB instance. If you specify a name, AWS CloudFormation converts it to lowercase. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the DB instance. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html).\n For information about constraints that apply to DB instance identifiers, see [Naming constraints in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.Constraints) in the *Amazon RDS User Guide*.\n If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name." + }, + "DbiResourceId": { + "type": "string", + "description": "" + }, + "DBName": { + "type": "string", + "description": "The meaning of this parameter differs according to the database engine you use.\n If you specify the ``DBSnapshotIdentifier`` property, this property only applies to RDS for Oracle.\n *Amazon Aurora* \n Not applicable. The database name is managed by the DB cluster.\n *Db2* \n The name of the database to create when the DB instance is created. If this parameter isn't specified, no database is created in the DB instance.\n Constraints:\n + Must contain 1 to 64 letters or numbers.\n + Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0-9).\n + Can't be a word reserved by the specified database engine.\n \n *MySQL* \n The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance.\n Constraints:\n + Must contain 1 to 64 letters or numbers.\n + Can't be a word reserved by the specified database engine\n \n *MariaDB* \n The name of the database to create when the DB instance is" + }, + "DBParameterGroupName": { + "type": "string", + "description": "The name of an existing DB parameter group or a reference to an [AWS::RDS::DBParameterGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbparametergroup.html) resource created in the template.\n To list all of the available DB parameter group names, use the following command:\n ``aws rds describe-db-parameter-groups --query \"DBParameterGroups[].DBParameterGroupName\" --output text``\n If any of the data members of the referenced parameter group are changed during an update, the DB instance might need to be restarted, which causes some interruption. If the parameter group contains static parameters, whether they were changed or not, an update triggers a reboot.\n If you don't specify a value for ``DBParameterGroupName`` property, the default DB parameter group for the specified engine and engine version is used." + }, + "DBSecurityGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "A list of the DB security groups to assign to the DB instance. The list can include both the name of existing DB security groups or references to AWS::RDS::DBSecurityGroup resources created in the template.\n If you set DBSecurityGroups, you must not set VPCSecurityGroups, and vice versa. Also, note that the DBSecurityGroups property exists only for backwards compatibility with older regions and is no longer recommended for providing security information to an RDS DB instance. Instead, use VPCSecurityGroups.\n If you specify this property, AWS CloudFormation sends only the following properties (if specified) to Amazon RDS during create operations:\n + ``AllocatedStorage``\n + ``AutoMinorVersionUpgrade``\n + ``AvailabilityZone``\n + ``BackupRetentionPeriod``\n + ``CharacterSetName``\n + ``DBInstanceClass``\n + ``DBName``\n + ``DBParameterGroupName``\n + ``DBSecurityGroups``\n + ``DBSubnetGroupName``\n + ``Engine``\n + ``EngineVersion``\n + ``Iops``\n + ``LicenseModel``\n +" + }, + "DBSnapshotIdentifier": { + "type": "string", + "description": "The name or Amazon Resource Name (ARN) of the DB snapshot that's used to restore the DB instance. If you're restoring from a shared manual DB snapshot, you must specify the ARN of the snapshot.\n By specifying this property, you can create a DB instance from the specified DB snapshot. If the ``DBSnapshotIdentifier`` property is an empty string or the ``AWS::RDS::DBInstance`` declaration has no ``DBSnapshotIdentifier`` property, AWS CloudFormation creates a new database. If the property contains a value (other than an empty string), AWS CloudFormation creates a database from the specified snapshot. If a snapshot with the specified name doesn't exist, AWS CloudFormation can't create the database and it rolls back the stack.\n Some DB instance properties aren't valid when you restore from a snapshot, such as the ``MasterUsername`` and ``MasterUserPassword`` properties. For information about the properties that you can specify, see the ``RestoreDBInstanceFromDBSnapshot`` action in the *Amazo" + }, + "DBSubnetGroupName": { + "type": "string", + "description": "A DB subnet group to associate with the DB instance. If you update this value, the new subnet group must be a subnet group in a new VPC. \n If there's no DB subnet group, then the DB instance isn't a VPC DB instance.\n For more information about using Amazon RDS in a VPC, see [Using Amazon RDS with Amazon Virtual Private Cloud (VPC)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html) in the *Amazon RDS User Guide*. \n *Amazon Aurora*\n Not applicable. The DB subnet group is managed by the DB cluster. If specified, the setting must match the DB cluster setting." + }, + "DBSystemId": { + "type": "string", + "description": "The Oracle system identifier (SID), which is the name of the Oracle database instance that manages your database files. In this context, the term \"Oracle database instance\" refers exclusively to the system global area (SGA) and Oracle background processes. If you don't specify a SID, the value defaults to ``RDSCDB``. The Oracle SID is also the name of your CDB." + }, + "DedicatedLogVolume": { + "type": "boolean", + "description": "Indicates whether the DB instance has a dedicated log volume (DLV) enabled." + }, + "DeleteAutomatedBackups": { + "type": "boolean", + "description": "A value that indicates whether to remove automated backups immediately after the DB instance is deleted. This parameter isn't case-sensitive. The default is to remove automated backups immediately after the DB instance is deleted.\n *Amazon Aurora*\n Not applicable. When you delete a DB cluster, all automated backups for that DB cluster are deleted and can't be recovered. Manual DB cluster snapshots of the DB cluster are not deleted." + }, + "DeletionProtection": { + "type": "boolean", + "description": "A value that indicates whether the DB instance has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is disabled. For more information, see [Deleting a DB Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html). \n *Amazon Aurora* \n Not applicable. You can enable or disable deletion protection for the DB cluster. For more information, see ``CreateDBCluster``. DB instances in a DB cluster can be deleted even when deletion protection is enabled for the DB cluster." + }, + "Domain": { + "type": "string", + "description": "The Active Directory directory ID to create the DB instance in. Currently, only Db2, MySQL, Microsoft SQL Server, Oracle, and PostgreSQL DB instances can be created in an Active Directory Domain.\n For more information, see [Kerberos Authentication](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/kerberos-authentication.html) in the *Amazon RDS User Guide*." + }, + "DomainAuthSecretArn": { + "type": "string", + "description": "The ARN for the Secrets Manager secret with the credentials for the user joining the domain.\n Example: ``arn:aws:secretsmanager:region:account-number:secret:myselfmanagedADtestsecret-123456``" + }, + "DomainDnsIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The IPv4 DNS IP addresses of your primary and secondary Active Directory domain controllers.\n Constraints:\n + Two IP addresses must be provided. If there isn't a secondary domain controller, use the IP address of the primary domain controller for both entries in the list.\n \n Example: ``123.124.125.126,234.235.236.237``" + }, + "DomainFqdn": { + "type": "string", + "description": "The fully qualified domain name (FQDN) of an Active Directory domain.\n Constraints:\n + Can't be longer than 64 characters.\n \n Example: ``mymanagedADtest.mymanagedAD.mydomain``" + }, + "DomainIAMRoleName": { + "type": "string", + "description": "The name of the IAM role to use when making API calls to the Directory Service.\n This setting doesn't apply to the following DB instances:\n + Amazon Aurora (The domain is managed by the DB cluster.)\n + RDS Custom" + }, + "DomainOu": { + "type": "string", + "description": "The Active Directory organizational unit for your DB instance to join.\n Constraints:\n + Must be in the distinguished name format.\n + Can't be longer than 64 characters.\n \n Example: ``OU=mymanagedADtestOU,DC=mymanagedADtest,DC=mymanagedAD,DC=mydomain``" + }, + "EnableCloudwatchLogsExports": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The list of log types that need to be enabled for exporting to CloudWatch Logs. The values in the list depend on the DB engine being used. For more information, see [Publishing Database Logs to Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch) in the *Amazon Relational Database Service User Guide*.\n *Amazon Aurora* \n Not applicable. CloudWatch Logs exports are managed by the DB cluster. \n *Db2* \n Valid values: ``diag.log``, ``notify.log`` \n *MariaDB* \n Valid values: ``audit``, ``error``, ``general``, ``slowquery`` \n *Microsoft SQL Server* \n Valid values: ``agent``, ``error`` \n *MySQL* \n Valid values: ``audit``, ``error``, ``general``, ``slowquery`` \n *Oracle* \n Valid values: ``alert``, ``audit``, ``listener``, ``trace``, ``oemagent`` \n *PostgreSQL* \n Valid values: ``postgresql``, ``upgrade``" + }, + "EnableIAMDatabaseAuthentication": { + "type": "boolean", + "description": "A value that indicates whether to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts. By default, mapping is disabled.\n This property is supported for RDS for MariaDB, RDS for MySQL, and RDS for PostgreSQL. For more information, see [IAM Database Authentication for MariaDB, MySQL, and PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html) in the *Amazon RDS User Guide.* \n *Amazon Aurora* \n Not applicable. Mapping AWS IAM accounts to database accounts is managed by the DB cluster." + }, + "EnablePerformanceInsights": { + "type": "boolean", + "description": "Specifies whether to enable Performance Insights for the DB instance. For more information, see [Using Amazon Performance Insights](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html) in the *Amazon RDS User Guide*.\n This setting doesn't apply to RDS Custom DB instances." + }, + "Endpoint": { + "$ref": "#/definitions/Endpoint", + "description": "The connection endpoint for the DB instance.\n The endpoint might not be shown for instances with the status of ``creating``." + }, + "Engine": { + "type": "string", + "description": "The name of the database engine that you want to use for this DB instance.\n Not every database engine is available in every AWS Region.\n When you are creating a DB instance, the ``Engine`` property is required.\n Valid Values:\n + ``aurora-mysql`` (for Aurora MySQL DB instances)\n + ``aurora-postgresql`` (for Aurora PostgreSQL DB instances)\n + ``custom-oracle-ee`` (for RDS Custom for Oracle DB instances)\n + ``custom-oracle-ee-cdb`` (for RDS Custom for Oracle DB instances)\n + ``custom-sqlserver-ee`` (for RDS Custom for SQL Server DB instances)\n + ``custom-sqlserver-se`` (for RDS Custom for SQL Server DB instances)\n + ``custom-sqlserver-web`` (for RDS Custom for SQL Server DB instances)\n + ``db2-ae``\n + ``db2-se``\n + ``mariadb``\n + ``mysql``\n + ``oracle-ee``\n + ``oracle-ee-cdb``\n + ``oracle-se2``\n + ``oracle-se2-cdb``\n + ``postgres``\n + ``sqlserver-ee``\n + ``sqlserver-se``\n + ``sqlserver-ex``\n + ``sqlserver-web``" + }, + "EngineVersion": { + "type": "string", + "description": "The version number of the database engine to use.\n For a list of valid engine versions, use the ``DescribeDBEngineVersions`` action.\n The following are the database engines and links to information about the major and minor versions that are available with Amazon RDS. Not every database engine is available for every AWS Region.\n *Amazon Aurora* \n Not applicable. The version number of the database engine to be used by the DB instance is managed by the DB cluster.\n *Db2* \n See [Amazon RDS for Db2](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Db2.html#Db2.Concepts.VersionMgmt) in the *Amazon RDS User Guide.*\n *MariaDB*\n See [MariaDB on Amazon RDS Versions](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html#MariaDB.Concepts.VersionMgmt) in the *Amazon RDS User Guide.*\n *Microsoft SQL Server*\n See [Microsoft SQL Server Versions on Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.VersionSu" + }, + "ManageMasterUserPassword": { + "type": "boolean", + "description": "Specifies whether to manage the master user password with AWS Secrets Manager.\n For more information, see [Password management with Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html) in the *Amazon RDS User Guide.* \n Constraints:\n + Can't manage the master user password with AWS Secrets Manager if ``MasterUserPassword`` is specified." + }, + "Iops": { + "type": "integer", + "description": "The number of I/O operations per second (IOPS) that the database provisions. The value must be equal to or greater than 1000. \n If you specify this property, you must follow the range of allowed ratios of your requested IOPS rate to the amount of storage that you allocate (IOPS to allocated storage). For example, you can provision an Oracle database instance with 1000 IOPS and 200 GiB of storage (a ratio of 5:1), or specify 2000 IOPS with 200 GiB of storage (a ratio of 10:1). For more information, see [Amazon RDS Provisioned IOPS Storage to Improve Performance](https://docs.aws.amazon.com/AmazonRDS/latest/DeveloperGuide/CHAP_Storage.html#USER_PIOPS) in the *Amazon RDS User Guide*.\n If you specify ``io1`` for the ``StorageType`` property, then you must also specify the ``Iops`` property.\n Constraints:\n + For RDS for Db2, MariaDB, MySQL, Oracle, and PostgreSQL - Must be a multiple between .5 and 50 of the storage amount for the DB instance.\n + For RDS for SQL Server - Must be a multip" + }, + "KmsKeyId": { + "type": "string", + "description": "The ARN of the AWS KMS key that's used to encrypt the DB instance, such as ``arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef``. If you enable the StorageEncrypted property but don't specify this property, AWS CloudFormation uses the default KMS key. If you specify this property, you must set the StorageEncrypted property to true. \n If you specify the ``SourceDBInstanceIdentifier`` property, the value is inherited from the source DB instance if the read replica is created in the same region.\n If you create an encrypted read replica in a different AWS Region, then you must specify a KMS key for the destination AWS Region. KMS encryption keys are specific to the region that they're created in, and you can't use encryption keys from one region in another region.\n If you specify the ``SnapshotIdentifier`` property, the ``StorageEncrypted`` property value is inherited from the snapshot, and if the DB instance is encrypted, the specified ``KmsKeyId`` property is us" + }, + "LicenseModel": { + "type": "string", + "description": "License model information for this DB instance.\n Valid Values:\n + Aurora MySQL - ``general-public-license``\n + Aurora PostgreSQL - ``postgresql-license``\n + RDS for Db2 - ``bring-your-own-license``. For more information about RDS for Db2 licensing, see [](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html) in the *Amazon RDS User Guide.*\n + RDS for MariaDB - ``general-public-license``\n + RDS for Microsoft SQL Server - ``license-included``\n + RDS for MySQL - ``general-public-license``\n + RDS for Oracle - ``bring-your-own-license`` or ``license-included``\n + RDS for PostgreSQL - ``postgresql-license``\n \n If you've specified ``DBSecurityGroups`` and then you update the license model, AWS CloudFormation replaces the underlying DB instance. This will incur some interruptions to database availability." + }, + "MasterUsername": { + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9_]{0,127}$", + "description": "The master user name for the DB instance.\n If you specify the ``SourceDBInstanceIdentifier`` or ``DBSnapshotIdentifier`` property, don't specify this property. The value is inherited from the source DB instance or snapshot.\n When migrating a self-managed Db2 database, we recommend that you use the same master username as your self-managed Db2 instance name.\n *Amazon Aurora* \n Not applicable. The name for the master user is managed by the DB cluster. \n *RDS for Db2* \n Constraints:\n + Must be 1 to 16 letters or numbers.\n + First character must be a letter.\n + Can't be a reserved word for the chosen database engine.\n \n *RDS for MariaDB* \n Constraints:\n + Must be 1 to 16 letters or numbers.\n + Can't be a reserved word for the chosen database engine.\n \n *RDS for Microsoft SQL Server* \n Constraints:\n + Must be 1 to 128 letters or numbers.\n + First character must be a letter.\n + Can't be a reserved word for the chosen database engine.\n \n *RDS for MySQL* \n Constrain", + "minLength": 1, + "maxLength": 128 + }, + "MasterUserPassword": { + "type": "string", + "description": "The password for the master user. The password can include any printable ASCII character except \"/\", \"\"\", or \"@\".\n *Amazon Aurora* \n Not applicable. The password for the master user is managed by the DB cluster.\n *RDS for Db2* \n Must contain from 8 to 255 characters.\n *RDS for MariaDB* \n Constraints: Must contain from 8 to 41 characters.\n *RDS for Microsoft SQL Server* \n Constraints: Must contain from 8 to 128 characters.\n *RDS for MySQL* \n Constraints: Must contain from 8 to 41 characters.\n *RDS for Oracle* \n Constraints: Must contain from 8 to 30 characters.\n *RDS for PostgreSQL* \n Constraints: Must contain from 8 to 128 characters." + }, + "MasterUserSecret": { + "$ref": "#/definitions/MasterUserSecret", + "description": "The secret managed by RDS in AWS Secrets Manager for the master user password.\n For more information, see [Password management with Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html) in the *Amazon RDS User Guide.*" + }, + "MaxAllocatedStorage": { + "type": "integer", + "description": "The upper limit in gibibytes (GiB) to which Amazon RDS can automatically scale the storage of the DB instance.\n For more information about this setting, including limitations that apply to it, see [Managing capacity automatically with Amazon RDS storage autoscaling](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.Autoscaling) in the *Amazon RDS User Guide*.\n This setting doesn't apply to the following DB instances:\n + Amazon Aurora (Storage is managed by the DB cluster.)\n + RDS Custom" + }, + "MonitoringInterval": { + "type": "integer", + "default": 0, + "description": "The interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB instance. To disable collection of Enhanced Monitoring metrics, specify 0. The default is 0.\n If ``MonitoringRoleArn`` is specified, then you must set ``MonitoringInterval`` to a value other than 0.\n This setting doesn't apply to RDS Custom.\n Valid Values: ``0, 1, 5, 10, 15, 30, 60``" + }, + "MonitoringRoleArn": { + "type": "string", + "description": "The ARN for the IAM role that permits RDS to send enhanced monitoring metrics to Amazon CloudWatch Logs. For example, ``arn:aws:iam:123456789012:role/emaccess``. For information on creating a monitoring role, see [Setting Up and Enabling Enhanced Monitoring](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html#USER_Monitoring.OS.Enabling) in the *Amazon RDS User Guide*.\n If ``MonitoringInterval`` is set to a value other than ``0``, then you must supply a ``MonitoringRoleArn`` value.\n This setting doesn't apply to RDS Custom DB instances." + }, + "MultiAZ": { + "type": "boolean", + "description": "Specifies whether the database instance is a Multi-AZ DB instance deployment. You can't set the ``AvailabilityZone`` parameter if the ``MultiAZ`` parameter is set to true. \n For more information, see [Multi-AZ deployments for high availability](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) in the *Amazon RDS User Guide*.\n *Amazon Aurora* \n Not applicable. Amazon Aurora storage is replicated across all of the Availability Zones and doesn't require the ``MultiAZ`` option to be set." + }, + "NcharCharacterSetName": { + "type": "string", + "description": "The name of the NCHAR character set for the Oracle DB instance.\n This setting doesn't apply to RDS Custom DB instances." + }, + "NetworkType": { + "description": "The network type of the DB instance.\n Valid values:\n + ``IPV4`` \n + ``DUAL`` \n \n The network type is determined by the ``DBSubnetGroup`` specified for the DB instance. A ``DBSubnetGroup`` can support only the IPv4 protocol or the IPv4 and IPv6 protocols (``DUAL``).\n For more information, see [Working with a DB instance in a VPC](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html) in the *Amazon RDS User Guide.*", + "type": "string" + }, + "OptionGroupName": { + "type": "string", + "description": "Indicates that the DB instance should be associated with the specified option group.\n Permanent options, such as the TDE option for Oracle Advanced Security TDE, can't be removed from an option group. Also, that option group can't be removed from a DB instance once it is associated with a DB instance." + }, + "PerformanceInsightsKMSKeyId": { + "type": "string", + "description": "The AWS KMS key identifier for encryption of Performance Insights data.\n The KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key.\n If you do not specify a value for ``PerformanceInsightsKMSKeyId``, then Amazon RDS uses your default KMS key. There is a default KMS key for your AWS account. Your AWS account has a different default KMS key for each AWS Region.\n For information about enabling Performance Insights, see [EnablePerformanceInsights](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-enableperformanceinsights)." + }, + "PerformanceInsightsRetentionPeriod": { + "type": "integer", + "description": "The number of days to retain Performance Insights data.\n This setting doesn't apply to RDS Custom DB instances.\n Valid Values:\n + ``7`` \n + *month* * 31, where *month* is a number of months from 1-23. Examples: ``93`` (3 months * 31), ``341`` (11 months * 31), ``589`` (19 months * 31)\n + ``731`` \n \n Default: ``7`` days\n If you specify a retention period that isn't valid, such as ``94``, Amazon RDS returns an error." + }, + "Port": { + "type": "string", + "description": "The port number on which the database accepts connections.\n *Amazon Aurora* \n Not applicable. The port number is managed by the DB cluster.\n *Db2* \n Default value: ``50000``", + "pattern": "^\\d*$" + }, + "PreferredBackupWindow": { + "type": "string", + "description": "The daily time range during which automated backups are created if automated backups are enabled, using the ``BackupRetentionPeriod`` parameter. For more information, see [Backup Window](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupWindow) in the *Amazon RDS User Guide.* \n Constraints:\n + Must be in the format ``hh24:mi-hh24:mi``.\n + Must be in Universal Coordinated Time (UTC).\n + Must not conflict with the preferred maintenance window.\n + Must be at least 30 minutes.\n \n *Amazon Aurora* \n Not applicable. The daily time range for creating automated backups is managed by the DB cluster." + }, + "PreferredMaintenanceWindow": { + "type": "string", + "description": "The weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).\n Format: ``ddd:hh24:mi-ddd:hh24:mi`` \n The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. To see the time blocks available, see [Adjusting the Preferred DB Instance Maintenance Window](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow) in the *Amazon RDS User Guide.* \n This property applies when AWS CloudFormation initially creates the DB instance. If you use AWS CloudFormation to update the DB instance, those updates are applied immediately.\n Constraints: Minimum 30-minute window." + }, + "ProcessorFeatures": { + "type": "array", + "items": { + "$ref": "#/definitions/ProcessorFeature" + }, + "description": "The number of CPU cores and the number of threads per core for the DB instance class of the DB instance.\n This setting doesn't apply to Amazon Aurora or RDS Custom DB instances." + }, + "PromotionTier": { + "type": "integer", + "minimum": 0, + "default": 1, + "description": "The order of priority in which an Aurora Replica is promoted to the primary instance after a failure of the existing primary instance. For more information, see [Fault Tolerance for an Aurora DB Cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html#Aurora.Managing.FaultTolerance) in the *Amazon Aurora User Guide*.\n This setting doesn't apply to RDS Custom DB instances.\n Default: ``1`` \n Valid Values: ``0 - 15``" + }, + "PubliclyAccessible": { + "type": "boolean", + "description": "Indicates whether the DB instance is an internet-facing instance. If you specify true, AWS CloudFormation creates an instance with a publicly resolvable DNS name, which resolves to a public IP address. If you specify false, AWS CloudFormation creates an internal instance with a DNS name that resolves to a private IP address. \n The default behavior value depends on your VPC setup and the database subnet group. For more information, see the ``PubliclyAccessible`` parameter in the [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) in the *Amazon RDS API Reference*." + }, + "ReplicaMode": { + "description": "The open mode of an Oracle read replica. For more information, see [Working with Oracle Read Replicas for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) in the *Amazon RDS User Guide*.\n This setting is only supported in RDS for Oracle.\n Default: ``open-read-only``\n Valid Values: ``open-read-only`` or ``mounted``", + "type": "string" + }, + "RestoreTime": { + "description": "The date and time to restore from.\n Constraints:\n + Must be a time in Universal Coordinated Time (UTC) format.\n + Must be before the latest restorable time for the DB instance.\n + Can't be specified if the ``UseLatestRestorableTime`` parameter is enabled.\n \n Example: ``2009-09-07T23:45:00Z``", + "type": "string", + "format": "date-time" + }, + "SourceDBClusterIdentifier": { + "description": "The identifier of the Multi-AZ DB cluster that will act as the source for the read replica. Each DB cluster can have up to 15 read replicas.\n Constraints:\n + Must be the identifier of an existing Multi-AZ DB cluster.\n + Can't be specified if the ``SourceDBInstanceIdentifier`` parameter is also specified.\n + The specified DB cluster must have automatic backups enabled, that is, its backup retention period must be greater than 0.\n + The source DB cluster must be in the same AWS-Region as the read replica. Cross-Region replication isn't supported.", + "type": "string" + }, + "SourceDbiResourceId": { + "type": "string", + "description": "The resource ID of the source DB instance from which to restore." + }, + "SourceDBInstanceAutomatedBackupsArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the replicated automated backups from which to restore, for example, ``arn:aws:rds:us-east-1:123456789012:auto-backup:ab-L2IJCEXJP7XQ7HOJ4SIEXAMPLE``.\n This setting doesn't apply to RDS Custom." + }, + "SourceDBInstanceIdentifier": { + "type": "string", + "description": "If you want to create a read replica DB instance, specify the ID of the source DB instance. Each DB instance can have a limited number of read replicas. For more information, see [Working with Read Replicas](https://docs.aws.amazon.com/AmazonRDS/latest/DeveloperGuide/USER_ReadRepl.html) in the *Amazon RDS User Guide*.\n For information about constraints that apply to DB instance identifiers, see [Naming constraints in Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.Constraints) in the *Amazon RDS User Guide*.\n The ``SourceDBInstanceIdentifier`` property determines whether a DB instance is a read replica. If you remove the ``SourceDBInstanceIdentifier`` property from your template and then update your stack, AWS CloudFormation promotes the Read Replica to a standalone DB instance.\n + If you specify a source DB instance that uses VPC security groups, we recommend that you specify the ``VPCSecurityGroups`` property. If you don't specify the" + }, + "SourceRegion": { + "type": "string", + "description": "The ID of the region that contains the source DB instance for the read replica." + }, + "StorageEncrypted": { + "type": "boolean", + "description": "A value that indicates whether the DB instance is encrypted. By default, it isn't encrypted.\n If you specify the ``KmsKeyId`` property, then you must enable encryption.\n If you specify the ``SourceDBInstanceIdentifier`` property, don't specify this property. The value is inherited from the source DB instance, and if the DB instance is encrypted, the specified ``KmsKeyId`` property is used.\n If you specify the ``DBSnapshotIdentifier`` and the specified snapshot is encrypted, don't specify this property. The value is inherited from the snapshot, and the specified ``KmsKeyId`` property is used.\n If you specify the ``DBSnapshotIdentifier`` and the specified snapshot isn't encrypted, you can use this property to specify that the restored DB instance is encrypted. Specify the ``KmsKeyId`` property for the KMS key to use for encryption. If you don't want the restored DB instance to be encrypted, then don't set this property or set it to ``false``.\n *Amazon Aurora*\n Not applicable. The encrypt" + }, + "StorageType": { + "type": "string", + "description": "Specifies the storage type to be associated with the DB instance.\n Valid values: ``gp2 | gp3 | io1 | standard`` \n The ``standard`` value is also known as magnetic.\n If you specify ``io1`` or ``gp3``, you must also include a value for the ``Iops`` parameter. \n Default: ``io1`` if the ``Iops`` parameter is specified, otherwise ``gp2`` \n For more information, see [Amazon RDS DB Instance Storage](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) in the *Amazon RDS User Guide*.\n *Amazon Aurora* \n Not applicable. Aurora data is stored in the cluster volume, which is a single, virtual volume that uses solid state drives (SSDs)." + }, + "StorageThroughput": { + "type": "integer", + "description": "Specifies the storage throughput value for the DB instance. This setting applies only to the ``gp3`` storage type. \n This setting doesn't apply to RDS Custom or Amazon Aurora." + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "An optional array of key-value pairs to apply to this DB instance." + }, + "TdeCredentialArn": { + "type": "string", + "description": "" + }, + "TdeCredentialPassword": { + "type": "string", + "description": "" + }, + "Timezone": { + "type": "string", + "description": "The time zone of the DB instance. The time zone parameter is currently supported only by [Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone)." + }, + "UseDefaultProcessorFeatures": { + "type": "boolean", + "description": "Specifies whether the DB instance class of the DB instance uses its default processor features.\n This setting doesn't apply to RDS Custom DB instances." + }, + "UseLatestRestorableTime": { + "type": "boolean", + "description": "Specifies whether the DB instance is restored from the latest backup time. By default, the DB instance isn't restored from the latest backup time.\n Constraints:\n + Can't be specified if the ``RestoreTime`` parameter is provided." + }, + "VPCSecurityGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "description": "A list of the VPC security group IDs to assign to the DB instance. The list can include both the physical IDs of existing VPC security groups and references to [AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html) resources created in the template.\n If you plan to update the resource, don't specify VPC security groups in a shared VPC.\n If you set ``VPCSecurityGroups``, you must not set [DBSecurityGroups](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbsecuritygroups), and vice versa.\n You can migrate a DB instance in your stack from an RDS DB security group to a VPC security group, but keep the following in mind:\n + You can't revert to using an RDS security group after you establish a VPC security group membership.\n + When you migrate your DB instance to VPC security groups, if your stack update rolls back because the DB instanc" + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/DBClusterIdentifier": "$lowercase(DBClusterIdentifier)", + "/properties/DBClusterSnapshotIdentifier": "$lowercase(DBClusterSnapshotIdentifier)", + "/properties/DBInstanceIdentifier": "$lowercase(DBInstanceIdentifier)", + "/properties/DBName": "$lowercase(DBName) $OR $uppercase(DBName)", + "/properties/DBParameterGroupName": "$lowercase(DBParameterGroupName)", + "/properties/DBSnapshotIdentifier": "$lowercase(DBSnapshotIdentifier)", + "/properties/DBSubnetGroupName": "$lowercase(DBSubnetGroupName)", + "/properties/Engine": "$lowercase(Engine)", + "/properties/EngineVersion": "$join([$string(EngineVersion), \".*\"])", + "/properties/KmsKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", KmsKeyId])", + "/properties/MasterUserSecret/KmsKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", MasterUserSecret.KmsKeyId])", + "/properties/NetworkType": "$lowercase(NetworkType)", + "/properties/OptionGroupName": "$lowercase(OptionGroupName)", + "/properties/PerformanceInsightsKMSKeyId": "$join([\"arn:(aws)[-]{0,1}[a-z]{0,2}[-]{0,1}[a-z]{0,3}:kms:[a-z]{2}[-]{1}[a-z]{3,10}[-]{0,1}[a-z]{0,10}[-]{1}[1-3]{1}:[0-9]{12}[:]{1}key\\/\", PerformanceInsightsKMSKeyId])", + "/properties/PreferredMaintenanceWindow": "$lowercase(PreferredMaintenanceWindow)", + "/properties/SourceDBInstanceAutomatedBackupsArn": "$lowercase(SourceDBInstanceAutomatedBackupsArn)", + "/properties/SourceDBInstanceIdentifier": "$lowercase(SourceDBInstanceIdentifier)", + "/properties/StorageType": "$lowercase(StorageType)" + }, + "createOnlyProperties": [ + "/properties/CharacterSetName", + "/properties/CustomIAMInstanceProfile", + "/properties/DBClusterIdentifier", + "/properties/DBInstanceIdentifier", + "/properties/DBName", + "/properties/DBSubnetGroupName", + "/properties/KmsKeyId", + "/properties/MasterUsername", + "/properties/NcharCharacterSetName", + "/properties/Port", + "/properties/SourceRegion", + "/properties/StorageEncrypted", + "/properties/Timezone" + ], + "conditionalCreateOnlyProperties": [ + "/properties/AutoMinorVersionUpgrade", + "/properties/AvailabilityZone", + "/properties/BackupRetentionPeriod", + "/properties/DBClusterSnapshotIdentifier", + "/properties/DBParameterGroupName", + "/properties/DBSnapshotIdentifier", + "/properties/Engine", + "/properties/MultiAZ", + "/properties/PerformanceInsightsKMSKeyId", + "/properties/PreferredMaintenanceWindow", + "/properties/RestoreTime", + "/properties/SourceDBClusterIdentifier", + "/properties/SourceDBInstanceAutomatedBackupsArn", + "/properties/SourceDBInstanceIdentifier", + "/properties/SourceDbiResourceId", + "/properties/StorageType", + "/properties/UseLatestRestorableTime" + ], + "deprecatedProperties": [ + "/properties/TdeCredentialArn", + "/properties/TdeCredentialPassword" + ], + "writeOnlyProperties": [ + "/properties/AllowMajorVersionUpgrade", + "/properties/CertificateRotationRestart", + "/properties/DBSnapshotIdentifier", + "/properties/DeleteAutomatedBackups", + "/properties/MasterUserPassword", + "/properties/Port", + "/properties/RestoreTime", + "/properties/SourceDBInstanceAutomatedBackupsArn", + "/properties/SourceDBInstanceIdentifier", + "/properties/SourceDbiResourceId", + "/properties/SourceRegion", + "/properties/TdeCredentialPassword", + "/properties/UseDefaultProcessorFeatures", + "/properties/UseLatestRestorableTime" + ], + "readOnlyProperties": [ + "/properties/Endpoint/Address", + "/properties/Endpoint/Port", + "/properties/Endpoint/HostedZoneId", + "/properties/DbiResourceId", + "/properties/DBInstanceArn", + "/properties/DBSystemId", + "/properties/MasterUserSecret/SecretArn", + "/properties/CertificateDetails/CAIdentifier", + "/properties/CertificateDetails/ValidTill" + ], + "primaryIdentifier": [ + "/properties/DBInstanceIdentifier" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "iam:CreateServiceLinkedRole", + "iam:GetRole", + "iam:ListRoles", + "iam:PassRole", + "kms:CreateGrant", + "kms:DescribeKey", + "rds:AddRoleToDBInstance", + "rds:AddTagsToResource", + "rds:CreateDBInstance", + "rds:CreateDBInstanceReadReplica", + "rds:DescribeDBInstances", + "rds:DescribeDBClusters", + "rds:DescribeDBClusterSnapshots", + "rds:DescribeDBInstanceAutomatedBackups", + "rds:DescribeDBSnapshots", + "rds:DescribeEvents", + "rds:ModifyDBInstance", + "rds:RebootDBInstance", + "rds:RestoreDBInstanceFromDBSnapshot", + "rds:RestoreDBInstanceToPointInTime", + "rds:StartDBInstanceAutomatedBackupsReplication", + "secretsmanager:CreateSecret", + "secretsmanager:TagResource" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "rds:DescribeDBInstances" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "iam:CreateServiceLinkedRole", + "iam:GetRole", + "iam:ListRoles", + "iam:PassRole", + "kms:CreateGrant", + "kms:DescribeKey", + "rds:AddRoleToDBInstance", + "rds:AddTagsToResource", + "rds:DescribeDBClusters", + "rds:DescribeDBEngineVersions", + "rds:DescribeDBInstances", + "rds:DescribeDBParameterGroups", + "rds:DescribeEvents", + "rds:ModifyDBInstance", + "rds:PromoteReadReplica", + "rds:RebootDBInstance", + "rds:RemoveRoleFromDBInstance", + "rds:RemoveTagsFromResource", + "rds:StartDBInstanceAutomatedBackupsReplication", + "rds:StopDBInstanceAutomatedBackupsReplication", + "secretsmanager:CreateSecret", + "secretsmanager:TagResource" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "rds:CreateDBSnapshot", + "rds:DeleteDBInstance", + "rds:DescribeDBInstances" + ], + "timeoutInMinutes": 2160 + }, + "list": { + "permissions": [ + "rds:DescribeDBInstances" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbparametergroup.json b/internal/aws/cfn/schemas/aws/rds/dbparametergroup.json new file mode 100644 index 00000000..451ca9e0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbparametergroup.json @@ -0,0 +1,119 @@ +{ + "typeName": "AWS::RDS::DBParameterGroup", + "description": "The ``AWS::RDS::DBParameterGroup`` resource creates a custom parameter group for an RDS database family.\n This type can be declared in a template and referenced in the ``DBParameterGroupName`` property of an ``AWS::RDS::DBInstance`` resource.\n For information about configuring parameters for Amazon RDS DB instances, see [Working with parameter groups](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html) in the *Amazon RDS User Guide*.\n For information about configuring parameters for Amazon Aurora DB instances, see [Working with parameter groups](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithParamGroups.html) in the *Amazon Aurora User Guide*.\n Applying a parameter group to a DB instance may require the DB instance to reboot, resulting in a database outage for the duration of the reboot.", + "additionalProperties": false, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "definitions": { + "Tag": { + "description": "Metadata assigned to an Amazon RDS resource consisting of a key-value pair.\n For more information, see [Tagging Amazon RDS Resources](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the *Amazon RDS User Guide.*", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "A key is the required name of the tag. The string value can be from 1 to 128 Unicode characters in length and can't be prefixed with ``aws:`` or ``rds:``. The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', ':', '/', '=', '+', '-', '@' (Java regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:/=+\\\\-@]*)$\").", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "A value is the optional value of the tag. The string value can be from 1 to 256 Unicode characters in length and can't be prefixed with ``aws:`` or ``rds:``. The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', ':', '/', '=', '+', '-', '@' (Java regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:/=+\\\\-@]*)$\").", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "DBParameterGroupName": { + "description": "The name of the DB parameter group.\n Constraints:\n + Must be 1 to 255 letters, numbers, or hyphens.\n + First character must be a letter\n + Can't end with a hyphen or contain two consecutive hyphens\n \n If you don't specify a value for ``DBParameterGroupName`` property, a name is automatically created for the DB parameter group.\n This value is stored as a lowercase string.", + "type": "string", + "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9])*$" + }, + "Description": { + "description": "Provides the customer-specified description for this DB parameter group.", + "type": "string" + }, + "Family": { + "description": "The DB parameter group family name. A DB parameter group can be associated with one and only one DB parameter group family, and can be applied only to a DB instance running a DB engine and engine version compatible with that DB parameter group family.\n The DB parameter group family can't be changed when updating a DB parameter group.\n To list all of the available parameter group families, use the following command:\n ``aws rds describe-db-engine-versions --query \"DBEngineVersions[].DBParameterGroupFamily\"``\n The output contains duplicates.\n For more information, see ``CreateDBParameterGroup``.", + "type": "string" + }, + "Parameters": { + "description": "An array of parameter names and values for the parameter update. At least one parameter name and value must be supplied. Subsequent arguments are optional.\n RDS for Db2 requires you to bring your own Db2 license. You must enter your IBM customer ID (``rds.ibm_customer_id``) and site number (``rds.ibm_site_id``) before starting a Db2 instance.\n For more information about DB parameters and DB parameter groups for Amazon RDS DB engines, see [Working with DB Parameter Groups](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html) in the *Amazon RDS User Guide*.\n For more information about DB cluster and DB instance parameters and parameter groups for Amazon Aurora DB engines, see [Working with DB Parameter Groups and DB Cluster Parameter Groups](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithParamGroups.html) in the *Amazon Aurora User Guide*.\n AWS CloudFormation doesn't support specifying an apply method for each individual ", + "type": "object" + }, + "Tags": { + "description": "An optional array of key-value pairs to apply to this DB parameter group.\n Currently, this is the only property that supports drift detection.", + "type": "array", + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "propertyTransform": { + "/properties/DBParameterGroupName": "$lowercase(DBParameterGroupName)" + }, + "required": [ + "Family", + "Description" + ], + "primaryIdentifier": [ + "/properties/DBParameterGroupName" + ], + "createOnlyProperties": [ + "/properties/DBParameterGroupName", + "/properties/Description", + "/properties/Family" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "rds:AddTagsToResource", + "rds:CreateDBParameterGroup", + "rds:DescribeDBParameterGroups", + "rds:DescribeDBParameters", + "rds:DescribeEngineDefaultParameters", + "rds:ListTagsForResource", + "rds:ModifyDBParameterGroup", + "rds:RemoveTagsFromResource" + ] + }, + "read": { + "permissions": [ + "rds:DescribeDBParameterGroups", + "rds:DescribeDBParameters", + "rds:DescribeEngineDefaultParameters", + "rds:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rds:AddTagsToResource", + "rds:DescribeDBParameterGroups", + "rds:DescribeDBParameters", + "rds:DescribeEngineDefaultParameters", + "rds:ListTagsForResource", + "rds:ModifyDBParameterGroup", + "rds:ResetDBParameterGroup", + "rds:RemoveTagsFromResource" + ] + }, + "delete": { + "permissions": [ + "rds:DeleteDBParameterGroup" + ] + }, + "list": { + "permissions": [ + "rds:DescribeDBParameterGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbproxy.json b/internal/aws/cfn/schemas/aws/rds/dbproxy.json new file mode 100644 index 00000000..6dd78f47 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbproxy.json @@ -0,0 +1,204 @@ +{ + "typeName": "AWS::RDS::DBProxy", + "description": "Resource schema for AWS::RDS::DBProxy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AuthFormat": { + "type": "object", + "properties": { + "AuthScheme": { + "description": "The type of authentication that the proxy uses for connections from the proxy to the underlying database. ", + "type": "string", + "enum": [ + "SECRETS" + ] + }, + "Description": { + "description": "A user-specified description about the authentication used by a proxy to log in as a specific database user. ", + "type": "string" + }, + "IAMAuth": { + "description": "Whether to require or disallow Amazon Web Services Identity and Access Management (IAM) authentication for connections to the proxy. The ENABLED value is valid only for proxies with RDS for Microsoft SQL Server.", + "type": "string", + "enum": [ + "DISABLED", + "REQUIRED", + "ENABLED" + ] + }, + "SecretArn": { + "description": "The Amazon Resource Name (ARN) representing the secret that the proxy uses to authenticate to the RDS DB instance or Aurora DB cluster. These secrets are stored within Amazon Secrets Manager. ", + "type": "string" + }, + "ClientPasswordAuthType": { + "description": "The type of authentication the proxy uses for connections from clients.", + "type": "string", + "enum": [ + "MYSQL_NATIVE_PASSWORD", + "POSTGRES_SCRAM_SHA_256", + "POSTGRES_MD5", + "SQL_SERVER_AUTHENTICATION" + ] + } + }, + "additionalProperties": false + }, + "TagFormat": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*", + "maxLength": 128 + }, + "Value": { + "type": "string", + "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*", + "maxLength": 128 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Auth": { + "description": "The authorization mechanism that the proxy uses.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/AuthFormat" + } + }, + "DBProxyArn": { + "description": "The Amazon Resource Name (ARN) for the proxy.", + "type": "string" + }, + "DBProxyName": { + "description": "The identifier for the proxy. This name must be unique for all proxies owned by your AWS account in the specified AWS Region.", + "type": "string", + "pattern": "[0-z]*", + "maxLength": 64 + }, + "DebugLogging": { + "description": "Whether the proxy includes detailed information about SQL statements in its logs.", + "type": "boolean" + }, + "Endpoint": { + "description": "The endpoint that you can use to connect to the proxy. You include the endpoint value in the connection string for a database client application.", + "type": "string" + }, + "EngineFamily": { + "description": "The kinds of databases that the proxy can connect to.", + "type": "string", + "enum": [ + "MYSQL", + "POSTGRESQL", + "SQLSERVER" + ] + }, + "IdleClientTimeout": { + "description": "The number of seconds that a connection to the proxy can be inactive before the proxy disconnects it.", + "type": "integer" + }, + "RequireTLS": { + "description": "A Boolean parameter that specifies whether Transport Layer Security (TLS) encryption is required for connections to the proxy.", + "type": "boolean" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of the IAM role that the proxy uses to access secrets in AWS Secrets Manager.", + "type": "string" + }, + "Tags": { + "description": "An optional set of key-value pairs to associate arbitrary data of your choosing with the proxy.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TagFormat" + } + }, + "VpcId": { + "description": "VPC ID to associate with the new DB proxy.", + "type": "string" + }, + "VpcSecurityGroupIds": { + "description": "VPC security group IDs to associate with the new proxy.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string" + } + }, + "VpcSubnetIds": { + "description": "VPC subnet IDs to associate with the new proxy.", + "type": "array", + "insertionOrder": false, + "minItems": 2, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "Auth", + "DBProxyName", + "EngineFamily", + "RoleArn", + "VpcSubnetIds" + ], + "readOnlyProperties": [ + "/properties/DBProxyArn", + "/properties/Endpoint", + "/properties/VpcId" + ], + "createOnlyProperties": [ + "/properties/DBProxyName", + "/properties/EngineFamily", + "/properties/VpcSubnetIds" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/DBProxyName" + ], + "handlers": { + "create": { + "permissions": [ + "rds:CreateDBProxy", + "rds:DescribeDBProxies", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "rds:DescribeDBProxies" + ] + }, + "update": { + "permissions": [ + "rds:ModifyDBProxy", + "rds:AddTagsToResource", + "rds:RemoveTagsFromResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "rds:DescribeDBProxies", + "rds:DeleteDBProxy" + ] + }, + "list": { + "permissions": [ + "rds:DescribeDBProxies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbproxyendpoint.json b/internal/aws/cfn/schemas/aws/rds/dbproxyendpoint.json new file mode 100644 index 00000000..089da49b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbproxyendpoint.json @@ -0,0 +1,148 @@ +{ + "typeName": "AWS::RDS::DBProxyEndpoint", + "description": "Resource schema for AWS::RDS::DBProxyEndpoint.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "TagFormat": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*", + "maxLength": 128 + }, + "Value": { + "type": "string", + "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*", + "maxLength": 128 + } + }, + "additionalProperties": false + } + }, + "properties": { + "DBProxyEndpointName": { + "description": "The identifier for the DB proxy endpoint. This name must be unique for all DB proxy endpoints owned by your AWS account in the specified AWS Region.", + "type": "string", + "pattern": "[0-z]*", + "maxLength": 64 + }, + "DBProxyEndpointArn": { + "description": "The Amazon Resource Name (ARN) for the DB proxy endpoint.", + "type": "string", + "pattern": "arn:aws[A-Za-z0-9-]{0,64}:rds:[A-Za-z0-9-]{1,64}:[0-9]{12}:.*" + }, + "DBProxyName": { + "description": "The identifier for the proxy. This name must be unique for all proxies owned by your AWS account in the specified AWS Region.", + "type": "string", + "pattern": "[0-z]*", + "maxLength": 64 + }, + "VpcId": { + "description": "VPC ID to associate with the new DB proxy endpoint.", + "type": "string" + }, + "VpcSecurityGroupIds": { + "description": "VPC security group IDs to associate with the new DB proxy endpoint.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string" + } + }, + "VpcSubnetIds": { + "description": "VPC subnet IDs to associate with the new DB proxy endpoint.", + "type": "array", + "minItems": 2, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Endpoint": { + "description": "The endpoint that you can use to connect to the DB proxy. You include the endpoint value in the connection string for a database client application.", + "type": "string", + "maxLength": 256 + }, + "TargetRole": { + "description": "A value that indicates whether the DB proxy endpoint can be used for read/write or read-only operations.", + "type": "string", + "enum": [ + "READ_WRITE", + "READ_ONLY" + ] + }, + "IsDefault": { + "description": "A value that indicates whether this endpoint is the default endpoint for the associated DB proxy. Default DB proxy endpoints always have read/write capability. Other endpoints that you associate with the DB proxy can be either read/write or read-only.", + "type": "boolean" + }, + "Tags": { + "description": "An optional set of key-value pairs to associate arbitrary data of your choosing with the DB proxy endpoint.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TagFormat" + } + } + }, + "additionalProperties": false, + "required": [ + "DBProxyName", + "DBProxyEndpointName", + "VpcSubnetIds" + ], + "readOnlyProperties": [ + "/properties/DBProxyEndpointArn", + "/properties/Endpoint", + "/properties/VpcId", + "/properties/IsDefault" + ], + "createOnlyProperties": [ + "/properties/DBProxyName", + "/properties/DBProxyEndpointName", + "/properties/VpcSubnetIds" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "primaryIdentifier": [ + "/properties/DBProxyEndpointName" + ], + "handlers": { + "create": { + "permissions": [ + "rds:CreateDBProxyEndpoint", + "rds:DescribeDBProxyEndpoints" + ] + }, + "read": { + "permissions": [ + "rds:DescribeDBProxyEndpoints", + "rds:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rds:ModifyDBProxyEndpoint", + "rds:AddTagsToResource", + "rds:RemoveTagsFromResource" + ] + }, + "delete": { + "permissions": [ + "rds:DescribeDBProxyEndpoints", + "rds:DeleteDBProxyEndpoint" + ] + }, + "list": { + "permissions": [ + "rds:DescribeDBProxyEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbproxytargetgroup.json b/internal/aws/cfn/schemas/aws/rds/dbproxytargetgroup.json new file mode 100644 index 00000000..814f56fd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbproxytargetgroup.json @@ -0,0 +1,132 @@ +{ + "typeName": "AWS::RDS::DBProxyTargetGroup", + "description": "Resource schema for AWS::RDS::DBProxyTargetGroup", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds-proxy", + "definitions": { + "ConnectionPoolConfigurationInfoFormat": { + "type": "object", + "properties": { + "MaxConnectionsPercent": { + "description": "The maximum size of the connection pool for each target in a target group.", + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "MaxIdleConnectionsPercent": { + "description": "Controls how actively the proxy closes idle database connections in the connection pool.", + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "ConnectionBorrowTimeout": { + "description": "The number of seconds for a proxy to wait for a connection to become available in the connection pool.", + "type": "integer" + }, + "SessionPinningFilters": { + "description": "Each item in the list represents a class of SQL operations that normally cause all later statements in a session using a proxy to be pinned to the same underlying database connection.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "InitQuery": { + "description": "One or more SQL statements for the proxy to run when opening each new database connection.", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "DBProxyName": { + "description": "The identifier for the proxy.", + "type": "string", + "pattern": "[A-z][0-z]*", + "maxLength": 64 + }, + "TargetGroupArn": { + "description": "The Amazon Resource Name (ARN) representing the target group.", + "type": "string" + }, + "TargetGroupName": { + "description": "The identifier for the DBProxyTargetGroup", + "type": "string", + "enum": [ + "default" + ] + }, + "ConnectionPoolConfigurationInfo": { + "$ref": "#/definitions/ConnectionPoolConfigurationInfoFormat" + }, + "DBInstanceIdentifiers": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "DBClusterIdentifiers": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "DBProxyName", + "TargetGroupName" + ], + "readOnlyProperties": [ + "/properties/TargetGroupArn" + ], + "createOnlyProperties": [ + "/properties/DBProxyName", + "/properties/TargetGroupName" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "primaryIdentifier": [ + "/properties/TargetGroupArn" + ], + "handlers": { + "create": { + "permissions": [ + "rds:DescribeDBProxies", + "rds:DescribeDBProxyTargetGroups", + "rds:ModifyDBProxyTargetGroup", + "rds:RegisterDBProxyTargets" + ] + }, + "read": { + "permissions": [ + "rds:DescribeDBProxyTargetGroups", + "rds:DescribeDBProxyTargets" + ] + }, + "update": { + "permissions": [ + "rds:DescribeDBProxyTargetGroups", + "rds:ModifyDBProxyTargetGroup", + "rds:RegisterDBProxyTargets", + "rds:DeregisterDBProxyTargets" + ] + }, + "delete": { + "permissions": [ + "rds:DeregisterDBProxyTargets" + ] + }, + "list": { + "permissions": [ + "rds:DescribeDBProxyTargetGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbsecuritygroup.json b/internal/aws/cfn/schemas/aws/rds/dbsecuritygroup.json new file mode 100644 index 00000000..aef4d55d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbsecuritygroup.json @@ -0,0 +1,80 @@ +{ + "typeName": "AWS::RDS::DBSecurityGroup", + "description": "Resource Type definition for AWS::RDS::DBSecurityGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DBSecurityGroupIngress": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Ingress" + } + }, + "EC2VpcId": { + "type": "string" + }, + "GroupDescription": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Ingress": { + "type": "object", + "additionalProperties": false, + "properties": { + "CIDRIP": { + "type": "string" + }, + "EC2SecurityGroupId": { + "type": "string" + }, + "EC2SecurityGroupName": { + "type": "string" + }, + "EC2SecurityGroupOwnerId": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "GroupDescription", + "DBSecurityGroupIngress" + ], + "createOnlyProperties": [ + "/properties/GroupDescription", + "/properties/EC2VpcId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbsecuritygroupingress.json b/internal/aws/cfn/schemas/aws/rds/dbsecuritygroupingress.json new file mode 100644 index 00000000..a2471926 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbsecuritygroupingress.json @@ -0,0 +1,34 @@ +{ + "typeName": "AWS::RDS::DBSecurityGroupIngress", + "description": "Resource Type definition for AWS::RDS::DBSecurityGroupIngress", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "CIDRIP": { + "type": "string" + }, + "DBSecurityGroupName": { + "type": "string" + }, + "EC2SecurityGroupId": { + "type": "string" + }, + "EC2SecurityGroupName": { + "type": "string" + }, + "EC2SecurityGroupOwnerId": { + "type": "string" + } + }, + "required": [ + "DBSecurityGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/rds/dbsubnetgroup.json b/internal/aws/cfn/schemas/aws/rds/dbsubnetgroup.json new file mode 100644 index 00000000..615223ea --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/dbsubnetgroup.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::RDS::DBSubnetGroup", + "description": "The ``AWS::RDS::DBSubnetGroup`` resource creates a database subnet group. Subnet groups must contain at least two subnets in two different Availability Zones in the same region. \n For more information, see [Working with DB subnet groups](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.Subnets) in the *Amazon RDS User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "properties": { + "DBSubnetGroupDescription": { + "type": "string", + "description": "The description for the DB subnet group." + }, + "DBSubnetGroupName": { + "type": "string", + "pattern": "^(?!default$)[a-zA-Z]{1}[a-zA-Z0-9-_\\.\\s]{0,254}$", + "description": "The name for the DB subnet group. This value is stored as a lowercase string.\n Constraints: Must contain no more than 255 lowercase alphanumeric characters or hyphens. Must not be \"Default\".\n Example: ``mysubnetgroup``" + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "The EC2 Subnet IDs for the DB subnet group." + }, + "Tags": { + "type": "array", + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "description": "An optional array of key-value pairs to apply to this DB subnet group.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "Metadata assigned to an Amazon RDS resource consisting of a key-value pair.\n For more information, see [Tagging Amazon RDS Resources](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the *Amazon RDS User Guide.*", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "A key is the required name of the tag. The string value can be from 1 to 128 Unicode characters in length and can't be prefixed with ``aws:`` or ``rds:``. The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', ':', '/', '=', '+', '-', '@' (Java regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:/=+\\\\-@]*)$\").", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "A value is the optional value of the tag. The string value can be from 1 to 256 Unicode characters in length and can't be prefixed with ``aws:`` or ``rds:``. The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', ':', '/', '=', '+', '-', '@' (Java regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:/=+\\\\-@]*)$\").", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "additionalProperties": false, + "required": [ + "DBSubnetGroupDescription", + "SubnetIds" + ], + "propertyTransform": { + "/properties/DBSubnetGroupName": "$lowercase(DBSubnetGroupName)" + }, + "createOnlyProperties": [ + "/properties/DBSubnetGroupName" + ], + "primaryIdentifier": [ + "/properties/DBSubnetGroupName" + ], + "writeOnlyProperties": [ + "/properties/SubnetIds" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "rds:CreateDBSubnetGroup", + "rds:DescribeDBSubnetGroups", + "rds:AddTagsToResource", + "rds:RemoveTagsFromResource", + "rds:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "rds:DescribeDBSubnetGroups", + "rds:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rds:ModifyDBSubnetGroup", + "rds:DescribeDBSubnetGroups", + "rds:AddTagsToResource", + "rds:RemoveTagsFromResource", + "rds:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "rds:DeleteDBSubnetGroup", + "rds:DescribeDBSubnetGroups", + "rds:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "rds:DescribeDBSubnetGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/eventsubscription.json b/internal/aws/cfn/schemas/aws/rds/eventsubscription.json new file mode 100644 index 00000000..8e8fca3d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/eventsubscription.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::RDS::EventSubscription", + "description": "The AWS::RDS::EventSubscription resource allows you to receive notifications for Amazon Relational Database Service events through the Amazon Simple Notification Service (Amazon SNS). For more information, see Using Amazon RDS Event Notification in the Amazon RDS User Guide.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key" + ] + } + }, + "properties": { + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "SubscriptionName": { + "description": "The name of the subscription.", + "type": "string", + "maxLength": 255 + }, + "Enabled": { + "description": "A Boolean value; set to true to activate the subscription, set to false to create the subscription but not active it.", + "type": "boolean", + "default": true + }, + "EventCategories": { + "description": "A list of event categories for a SourceType that you want to subscribe to. You can see a list of the categories for a given SourceType in the Events topic in the Amazon RDS User Guide or by using the DescribeEventCategories action.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "SnsTopicArn": { + "description": "The Amazon Resource Name (ARN) of the SNS topic created for event notification. The ARN is created by Amazon SNS when you create a topic and subscribe to it.", + "type": "string" + }, + "SourceIds": { + "description": "The list of identifiers of the event sources for which events will be returned. If not specified, then all sources are included in the response. An identifier must begin with a letter and must contain only ASCII letters, digits, and hyphens; it cannot end with a hyphen or contain two consecutive hyphens.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "SourceType": { + "description": "The type of source that will be generating the events. For example, if you want to be notified of events generated by a DB instance, you would set this parameter to db-instance. if this value is not specified, all events are returned.", + "type": "string" + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/SubscriptionName": "$lowercase(SubscriptionName)" + }, + "required": [ + "SnsTopicArn" + ], + "createOnlyProperties": [ + "/properties/SubscriptionName", + "/properties/SnsTopicArn" + ], + "primaryIdentifier": [ + "/properties/SubscriptionName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "rds:CreateEventSubscription", + "rds:DescribeEventSubscriptions", + "rds:ListTagsForResource", + "rds:AddTagsToResource", + "rds:RemoveTagsFromResource" + ] + }, + "read": { + "permissions": [ + "rds:DescribeEventSubscriptions", + "rds:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rds:ModifyEventSubscription", + "rds:AddSourceIdentifierToSubscription", + "rds:RemoveSourceIdentifierFromSubscription", + "rds:DescribeEventSubscriptions", + "rds:ListTagsForResource", + "rds:AddTagsToResource", + "rds:RemoveTagsFromResource" + ] + }, + "delete": { + "permissions": [ + "rds:DeleteEventSubscription", + "rds:DescribeEventSubscriptions" + ] + }, + "list": { + "permissions": [ + "rds:DescribeEventSubscriptions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/globalcluster.json b/internal/aws/cfn/schemas/aws/rds/globalcluster.json new file mode 100644 index 00000000..e968b249 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/globalcluster.json @@ -0,0 +1,103 @@ +{ + "typeName": "AWS::RDS::GlobalCluster", + "description": "Resource Type definition for AWS::RDS::GlobalCluster", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "properties": { + "Engine": { + "description": "The name of the database engine to be used for this DB cluster. Valid Values: aurora (for MySQL 5.6-compatible Aurora), aurora-mysql (for MySQL 5.7-compatible Aurora).\nIf you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.", + "type": "string", + "enum": [ + "aurora", + "aurora-mysql", + "aurora-postgresql" + ] + }, + "EngineVersion": { + "description": "The version number of the database engine to use. If you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.", + "type": "string" + }, + "DeletionProtection": { + "description": "The deletion protection setting for the new global database. The global database can't be deleted when deletion protection is enabled.", + "type": "boolean" + }, + "GlobalClusterIdentifier": { + "description": "The cluster identifier of the new global database cluster. This parameter is stored as a lowercase string.", + "type": "string", + "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$" + }, + "SourceDBClusterIdentifier": { + "description": "The Amazon Resource Name (ARN) to use as the primary cluster of the global database. This parameter is optional. This parameter is stored as a lowercase string.", + "type": "string", + "oneOf": [ + { + "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$" + }, + { + "pattern": "^(?=.{40,128}$)arn.*" + } + ] + }, + "StorageEncrypted": { + "description": " The storage encryption setting for the new global database cluster.\nIf you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.", + "type": "boolean" + } + }, + "oneOf": [ + { + "required": [ + "SourceDBClusterIdentifier" + ] + }, + { + "required": [ + "Engine" + ] + } + ], + "additionalProperties": false, + "propertyTransform": { + "/properties/GlobalClusterIdentifier": "$lowercase(GlobalClusterIdentifier)" + }, + "createOnlyProperties": [ + "/properties/GlobalClusterIdentifier", + "/properties/SourceDBClusterIdentifier", + "/properties/StorageEncrypted", + "/properties/Engine" + ], + "primaryIdentifier": [ + "/properties/GlobalClusterIdentifier" + ], + "handlers": { + "create": { + "permissions": [ + "rds:CreateGlobalCluster", + "rds:DescribeDBClusters", + "rds:DescribeGlobalClusters" + ] + }, + "read": { + "permissions": [ + "rds:DescribeGlobalClusters" + ] + }, + "update": { + "permissions": [ + "rds:ModifyGlobalCluster", + "rds:DescribeGlobalClusters" + ] + }, + "delete": { + "permissions": [ + "rds:DescribeGlobalClusters", + "rds:DeleteGlobalCluster", + "rds:RemoveFromGlobalCluster", + "rds:DescribeDBClusters" + ] + }, + "list": { + "permissions": [ + "rds:DescribeGlobalClusters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rds/optiongroup.json b/internal/aws/cfn/schemas/aws/rds/optiongroup.json new file mode 100644 index 00000000..7dc69908 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rds/optiongroup.json @@ -0,0 +1,186 @@ +{ + "typeName": "AWS::RDS::OptionGroup", + "description": "The AWS::RDS::OptionGroup resource creates an option group, to enable and configure features that are specific to a particular DB engine.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "definitions": { + "OptionConfiguration": { + "description": "The OptionConfiguration property type specifies an individual option, and its settings, within an AWS::RDS::OptionGroup resource.", + "type": "object", + "properties": { + "DBSecurityGroupMemberships": { + "description": "A list of DBSecurityGroupMembership name strings used for this option.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "OptionName": { + "description": "The configuration of options to include in a group.", + "type": "string" + }, + "OptionSettings": { + "description": "The option settings to include in an option group.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/OptionSetting" + } + }, + "OptionVersion": { + "description": "The version for the option.", + "type": "string" + }, + "Port": { + "description": "The optional port for the option.", + "type": "integer" + }, + "VpcSecurityGroupMemberships": { + "description": "A list of VpcSecurityGroupMembership name strings used for this option.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "OptionName" + ] + }, + "OptionSetting": { + "description": "The OptionSetting property type specifies the value for an option within an OptionSetting property.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the option that has settings that you can set.", + "type": "string" + }, + "Value": { + "description": "The current value of the option setting.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key" + ] + } + }, + "properties": { + "OptionGroupName": { + "description": "Specifies the name of the option group.", + "type": "string" + }, + "OptionGroupDescription": { + "description": "Provides a description of the option group.", + "type": "string" + }, + "EngineName": { + "description": "Indicates the name of the engine that this option group can be applied to.", + "type": "string" + }, + "MajorEngineVersion": { + "description": "Indicates the major engine version associated with this option group.", + "type": "string" + }, + "OptionConfigurations": { + "description": "Indicates what options are available in the option group.", + "type": "array", + "arrayType": "AttributeList", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/OptionConfiguration" + } + }, + "Tags": { + "type": "array", + "description": "An array of key-value pairs to apply to this resource.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "propertyTransform": { + "/properties/OptionGroupName": "$lowercase(OptionGroupName)" + }, + "required": [ + "EngineName", + "MajorEngineVersion", + "OptionGroupDescription" + ], + "createOnlyProperties": [ + "/properties/EngineName", + "/properties/MajorEngineVersion", + "/properties/OptionGroupDescription", + "/properties/OptionGroupName" + ], + "primaryIdentifier": [ + "/properties/OptionGroupName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "rds:AddTagsToResource", + "rds:CreateOptionGroup", + "rds:DescribeOptionGroups", + "rds:ListTagsForResource", + "rds:ModifyOptionGroup", + "rds:RemoveTagsFromResource" + ] + }, + "read": { + "permissions": [ + "rds:DescribeOptionGroups", + "rds:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rds:AddTagsToResource", + "rds:DescribeOptionGroups", + "rds:ListTagsForResource", + "rds:ModifyOptionGroup", + "rds:RemoveTagsFromResource" + ] + }, + "delete": { + "permissions": [ + "rds:DeleteOptionGroup", + "rds:DescribeOptionGroups", + "rds:ListTagsForResource", + "rds:RemoveTagsFromResource" + ] + }, + "list": { + "permissions": [ + "rds:DescribeOptionGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshift/cluster.json b/internal/aws/cfn/schemas/aws/redshift/cluster.json new file mode 100644 index 00000000..4fc7622c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/cluster.json @@ -0,0 +1,430 @@ +{ + "typeName": "AWS::Redshift::Cluster", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "LoggingProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketName": { + "type": "string" + }, + "S3KeyPrefix": { + "type": "string" + } + } + }, + "Endpoint": { + "type": "object", + "additionalProperties": false, + "properties": { + "Port": { + "type": "string" + }, + "Address": { + "type": "string" + } + } + } + }, + "properties": { + "ClusterIdentifier": { + "description": "A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. All alphabetical characters must be lower case, no hypens at the end, no two consecutive hyphens. Cluster name should be unique for all clusters within an AWS account", + "type": "string", + "maxLength": 63 + }, + "ClusterNamespaceArn": { + "description": "The Amazon Resource Name (ARN) of the cluster namespace.", + "type": "string" + }, + "MasterUsername": { + "description": "The user name associated with the master user account for the cluster that is being created. The user name can't be PUBLIC and first character must be a letter.", + "type": "string", + "maxLength": 128 + }, + "MasterUserPassword": { + "description": "The password associated with the master user account for the cluster that is being created. You can't use MasterUserPassword if ManageMasterPassword is true. Password must be between 8 and 64 characters in length, should have at least one uppercase letter.Must contain at least one lowercase letter.Must contain one number.Can be any printable ASCII character.", + "type": "string", + "maxLength": 64 + }, + "NodeType": { + "description": "The node type to be provisioned for the cluster.Valid Values: ds2.xlarge | ds2.8xlarge | dc1.large | dc1.8xlarge | dc2.large | dc2.8xlarge | ra3.4xlarge | ra3.16xlarge", + "type": "string" + }, + "AllowVersionUpgrade": { + "description": "Major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster. Default value is True", + "type": "boolean" + }, + "AutomatedSnapshotRetentionPeriod": { + "description": "The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Default value is 1", + "type": "integer" + }, + "AvailabilityZone": { + "description": "The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint", + "type": "string" + }, + "ClusterParameterGroupName": { + "description": "The name of the parameter group to be associated with this cluster.", + "type": "string", + "maxLength": 255 + }, + "ClusterType": { + "description": "The type of the cluster. When cluster type is specified as single-node, the NumberOfNodes parameter is not required and if multi-node, the NumberOfNodes parameter is required", + "type": "string" + }, + "ClusterVersion": { + "description": "The version of the Amazon Redshift engine software that you want to deploy on the cluster.The version selected runs on all the nodes in the cluster.", + "type": "string" + }, + "ClusterSubnetGroupName": { + "description": "The name of a cluster subnet group to be associated with this cluster.", + "type": "string" + }, + "DBName": { + "description": "The name of the first database to be created when the cluster is created. To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database.", + "type": "string" + }, + "ElasticIp": { + "description": "The Elastic IP (EIP) address for the cluster.", + "type": "string" + }, + "Encrypted": { + "description": "If true, the data in the cluster is encrypted at rest.", + "type": "boolean" + }, + "HsmClientCertificateIdentifier": { + "description": "Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM", + "type": "string" + }, + "HsmConfigurationIdentifier": { + "description": "Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.", + "type": "string" + }, + "KmsKeyId": { + "description": "The AWS Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.", + "type": "string" + }, + "NumberOfNodes": { + "description": "The number of compute nodes in the cluster. This parameter is required when the ClusterType parameter is specified as multi-node.", + "type": "integer" + }, + "Port": { + "description": "The port number on which the cluster accepts incoming connections. The cluster is accessible only via the JDBC and ODBC connection strings", + "type": "integer" + }, + "PreferredMaintenanceWindow": { + "description": "The weekly time range (in UTC) during which automated cluster maintenance can occur.", + "type": "string" + }, + "PubliclyAccessible": { + "description": "If true, the cluster can be accessed from a public network.", + "type": "boolean" + }, + "ClusterSecurityGroups": { + "description": "A list of security groups to be associated with this cluster.", + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "IamRoles": { + "description": "A list of AWS Identity and Access Management (IAM) roles that can be used by the cluster to access other AWS services. You must supply the IAM roles in their Amazon Resource Name (ARN) format. You can supply up to 50 IAM roles in a single request", + "type": "array", + "insertionOrder": false, + "maxItems": 50, + "items": { + "type": "string" + } + }, + "Tags": { + "description": "The list of tags for the cluster parameter group.", + "type": "array", + "insertionOrder": false, + "maxItems": 50, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VpcSecurityGroupIds": { + "description": "A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.", + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SnapshotClusterIdentifier": { + "description": "The name of the cluster the source snapshot was created from. This parameter is required if your IAM user has a policy containing a snapshot resource element that specifies anything other than * for the cluster name.", + "type": "string" + }, + "SnapshotIdentifier": { + "description": "The name of the snapshot from which to create the new cluster. This parameter isn't case sensitive.", + "type": "string" + }, + "OwnerAccount": { + "type": "string" + }, + "LoggingProperties": { + "$ref": "#/definitions/LoggingProperties" + }, + "Endpoint": { + "$ref": "#/definitions/Endpoint" + }, + "DestinationRegion": { + "description": "The destination AWS Region that you want to copy snapshots to. Constraints: Must be the name of a valid AWS Region. For more information, see Regions and Endpoints in the Amazon Web Services [https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region] General Reference", + "type": "string" + }, + "SnapshotCopyRetentionPeriod": { + "description": "The number of days to retain automated snapshots in the destination region after they are copied from the source region. \n\n Default is 7. \n\n Constraints: Must be at least 1 and no more than 35.", + "type": "integer" + }, + "SnapshotCopyGrantName": { + "description": "The name of the snapshot copy grant to use when snapshots of an AWS KMS-encrypted cluster are copied to the destination region.", + "type": "string" + }, + "ManualSnapshotRetentionPeriod": { + "description": "The number of days to retain newly copied snapshots in the destination AWS Region after they are copied from the source AWS Region. If the value is -1, the manual snapshot is retained indefinitely.\n\nThe value must be either -1 or an integer between 1 and 3,653.", + "type": "integer" + }, + "SnapshotCopyManual": { + "description": "Indicates whether to apply the snapshot retention period to newly copied manual snapshots instead of automated snapshots.", + "type": "boolean" + }, + "AvailabilityZoneRelocation": { + "description": "The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.", + "type": "boolean" + }, + "AvailabilityZoneRelocationStatus": { + "description": "The availability zone relocation status of the cluster", + "type": "string" + }, + "AquaConfigurationStatus": { + "description": "The value represents how the cluster is configured to use AQUA (Advanced Query Accelerator) after the cluster is restored. Possible values include the following.\n\nenabled - Use AQUA if it is available for the current Region and Amazon Redshift node type.\ndisabled - Don't use AQUA.\nauto - Amazon Redshift determines whether to use AQUA.\n", + "type": "string" + }, + "Classic": { + "description": "A boolean value indicating whether the resize operation is using the classic resize process. If you don't provide this parameter or set the value to false , the resize type is elastic.", + "type": "boolean" + }, + "EnhancedVpcRouting": { + "description": "An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see Enhanced VPC Routing in the Amazon Redshift Cluster Management Guide.\n\nIf this option is true , enhanced VPC routing is enabled.\n\nDefault: false", + "type": "boolean" + }, + "MaintenanceTrackName": { + "description": "The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the PendingModifiedValues for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.", + "type": "string" + }, + "DeferMaintenance": { + "description": "A boolean indicating whether to enable the deferred maintenance window.", + "type": "boolean" + }, + "DeferMaintenanceIdentifier": { + "description": "A unique identifier for the deferred maintenance window.", + "type": "string" + }, + "DeferMaintenanceStartTime": { + "description": "A timestamp indicating the start time for the deferred maintenance window.", + "type": "string" + }, + "DeferMaintenanceEndTime": { + "description": "A timestamp indicating end time for the deferred maintenance window. If you specify an end time, you can't specify a duration.", + "type": "string" + }, + "DeferMaintenanceDuration": { + "description": "An integer indicating the duration of the maintenance window in days. If you specify a duration, you can't specify an end time. The duration must be 45 days or less.", + "type": "integer" + }, + "RevisionTarget": { + "description": "The identifier of the database revision. You can retrieve this value from the response to the DescribeClusterDbRevisions request.", + "type": "string" + }, + "ResourceAction": { + "description": "The Redshift operation to be performed. Resource Action supports pause-cluster, resume-cluster, failover-primary-compute APIs", + "type": "string" + }, + "RotateEncryptionKey": { + "description": "A boolean indicating if we want to rotate Encryption Keys.", + "type": "boolean" + }, + "MultiAZ": { + "description": "A boolean indicating if the redshift cluster is multi-az or not. If you don't provide this parameter or set the value to false, the redshift cluster will be single-az.", + "type": "boolean" + }, + "NamespaceResourcePolicy": { + "description": "The namespace resource policy document that will be attached to a Redshift cluster.", + "type": "object" + }, + "ManageMasterPassword": { + "description": "A boolean indicating if the redshift cluster's admin user credentials is managed by Redshift or not. You can't use MasterUserPassword if ManageMasterPassword is true. If ManageMasterPassword is false or not set, Amazon Redshift uses MasterUserPassword for the admin user account's password.", + "type": "boolean" + }, + "MasterPasswordSecretKmsKeyId": { + "description": "The ID of the Key Management Service (KMS) key used to encrypt and store the cluster's admin user credentials secret.", + "type": "string" + }, + "MasterPasswordSecretArn": { + "description": "The Amazon Resource Name (ARN) for the cluster's admin user credentials secret.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "NodeType", + "MasterUsername", + "DBName", + "ClusterType" + ], + "primaryIdentifier": [ + "/properties/ClusterIdentifier" + ], + "readOnlyProperties": [ + "/properties/DeferMaintenanceIdentifier", + "/properties/Endpoint/Port", + "/properties/Endpoint/Address", + "/properties/ClusterNamespaceArn", + "/properties/MasterPasswordSecretArn" + ], + "createOnlyProperties": [ + "/properties/ClusterIdentifier", + "/properties/OwnerAccount", + "/properties/SnapshotIdentifier", + "/properties/DBName", + "/properties/SnapshotClusterIdentifier", + "/properties/ClusterSubnetGroupName", + "/properties/MasterUsername" + ], + "writeOnlyProperties": [ + "/properties/MasterUserPassword", + "/properties/Classic", + "/properties/SnapshotIdentifier", + "/properties/DeferMaintenance", + "/properties/DeferMaintenanceDuration", + "/properties/ManageMasterPassword" + ], + "tagging": { + "taggable": true + }, + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "redshift:DescribeClusters", + "redshift:CreateCluster", + "redshift:RestoreFromClusterSnapshot", + "redshift:EnableLogging", + "redshift:DescribeLoggingStatus", + "redshift:CreateTags", + "redshift:DescribeTags", + "redshift:GetResourcePolicy", + "redshift:PutResourcePolicy", + "redshift:ModifyClusterMaintenance", + "ec2:DescribeVpcs", + "ec2:DescribeSubnets", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeAddresses", + "ec2:AssociateAddress", + "ec2:CreateNetworkInterface", + "ec2:ModifyNetworkInterfaceAttribute", + "ec2:CreateVpcEndpoint", + "ec2:DescribeVpcEndpoints", + "ec2:ModifyVpcEndpoint", + "ec2:AllocateAddress", + "ec2:CreateSecurityGroup", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroupRules", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeNetworkAcls", + "ec2:DescribeRouteTables", + "cloudwatch:PutMetricData" + ], + "timeoutInMinutes": 2160 + }, + "read": { + "permissions": [ + "redshift:DescribeClusters", + "redshift:DescribeLoggingStatus", + "redshift:DescribeSnapshotCopyGrant", + "redshift:DescribeClusterDbRevisions", + "redshift:DescribeTags", + "redshift:GetResourcePolicy" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "redshift:DescribeClusters", + "redshift:ModifyCluster", + "redshift:ModifyClusterIamRoles", + "redshift:EnableLogging", + "redshift:CreateTags", + "redshift:DeleteTags", + "redshift:DescribeTags", + "redshift:DisableLogging", + "redshift:DescribeLoggingStatus", + "redshift:RebootCluster", + "redshift:EnableSnapshotCopy", + "redshift:DisableSnapshotCopy", + "redshift:ModifySnapshotCopyRetentionPeriod", + "redshift:ModifyAquaConfiguration", + "redshift:ResizeCluster", + "redshift:ModifyClusterMaintenance", + "redshift:DescribeClusterDbRevisions", + "redshift:ModifyClusterDbRevisions", + "redshift:PauseCluster", + "redshift:ResumeCluster", + "redshift:RotateEncryptionKey", + "redshift:FailoverPrimaryCompute", + "redshift:PutResourcePolicy", + "redshift:GetResourcePolicy", + "redshift:DeleteResourcePolicy", + "cloudwatch:PutMetricData" + ], + "timeoutInMinutes": 2160 + }, + "delete": { + "permissions": [ + "redshift:DescribeTags", + "redshift:DescribeClusters", + "redshift:DeleteCluster" + ], + "timeoutInMinutes": 2160 + }, + "list": { + "permissions": [ + "redshift:DescribeTags", + "redshift:DescribeClusters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshift/clusterparametergroup.json b/internal/aws/cfn/schemas/aws/redshift/clusterparametergroup.json new file mode 100644 index 00000000..1ac83dc1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/clusterparametergroup.json @@ -0,0 +1,158 @@ +{ + "typeName": "AWS::Redshift::ClusterParameterGroup", + "description": "Resource Type definition for AWS::Redshift::ClusterParameterGroup", + "additionalProperties": false, + "definitions": { + "Parameter": { + "type": "object", + "additionalProperties": false, + "properties": { + "ParameterName": { + "type": "string", + "description": "The name of the parameter." + }, + "ParameterValue": { + "type": "string", + "description": "The value of the parameter. If `ParameterName` is `wlm_json_configuration`, then the maximum size of `ParameterValue` is 8000 characters." + } + }, + "required": [ + "ParameterValue", + "ParameterName" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "ParameterGroupName": { + "type": "string", + "description": "The name of the cluster parameter group.", + "maxLength": 255 + }, + "Description": { + "type": "string", + "description": "A description of the parameter group." + }, + "ParameterGroupFamily": { + "type": "string", + "description": "The Amazon Redshift engine version to which the cluster parameter group applies. The cluster engine version determines the set of parameters." + }, + "Parameters": { + "type": "array", + "description": "An array of parameters to be modified. A maximum of 20 parameters can be modified in a single request.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Parameter" + } + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true + }, + "required": [ + "Description", + "ParameterGroupFamily" + ], + "createOnlyProperties": [ + "/properties/ParameterGroupName", + "/properties/ParameterGroupFamily", + "/properties/Description" + ], + "primaryIdentifier": [ + "/properties/ParameterGroupName" + ], + "writeOnlyProperties": [ + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "handlers": { + "create": { + "permissions": [ + "redshift:CreateClusterParameterGroup", + "redshift:ModifyClusterParameterGroup", + "redshift:DescribeClusterParameterGroups", + "redshift:DescribeClusterParameters", + "redshift:DescribeTags", + "redshift:CreateTags", + "ec2:AllocateAddress", + "ec2:AssociateAddress", + "ec2:AttachNetworkInterface", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAddresses", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs" + ] + }, + "read": { + "permissions": [ + "redshift:DescribeClusterParameterGroups", + "initech:DescribeReport", + "redshift:DescribeClusterParameters", + "redshift:DescribeTags" + ] + }, + "update": { + "permissions": [ + "redshift:DescribeClusterParameterGroups", + "redshift:ResetClusterParameterGroup", + "redshift:ModifyClusterParameterGroup", + "redshift:DescribeClusterParameters", + "redshift:DescribeTags", + "redshift:CreateTags", + "redshift:DeleteTags", + "initech:UpdateReport" + ] + }, + "delete": { + "permissions": [ + "redshift:DescribeTags", + "redshift:DescribeClusterParameterGroups", + "redshift:DeleteClusterParameterGroup", + "redshift:DescribeClusterParameters", + "initech:DeleteReport" + ] + }, + "list": { + "permissions": [ + "redshift:DescribeTags", + "redshift:DescribeClusterParameterGroups", + "redshift:DescribeClusterParameters", + "initech:ListReports" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshift/clustersecuritygroup.json b/internal/aws/cfn/schemas/aws/redshift/clustersecuritygroup.json new file mode 100644 index 00000000..7fafef45 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/clustersecuritygroup.json @@ -0,0 +1,50 @@ +{ + "typeName": "AWS::Redshift::ClusterSecurityGroup", + "description": "Resource Type definition for AWS::Redshift::ClusterSecurityGroup", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Description" + ], + "createOnlyProperties": [ + "/properties/Description" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/redshift/clustersecuritygroupingress.json b/internal/aws/cfn/schemas/aws/redshift/clustersecuritygroupingress.json new file mode 100644 index 00000000..3d6eee70 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/clustersecuritygroupingress.json @@ -0,0 +1,37 @@ +{ + "typeName": "AWS::Redshift::ClusterSecurityGroupIngress", + "description": "Resource Type definition for AWS::Redshift::ClusterSecurityGroupIngress", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "CIDRIP": { + "type": "string" + }, + "ClusterSecurityGroupName": { + "type": "string" + }, + "EC2SecurityGroupName": { + "type": "string" + }, + "EC2SecurityGroupOwnerId": { + "type": "string" + } + }, + "required": [ + "ClusterSecurityGroupName" + ], + "createOnlyProperties": [ + "/properties/ClusterSecurityGroupName", + "/properties/CIDRIP", + "/properties/EC2SecurityGroupOwnerId", + "/properties/EC2SecurityGroupName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/redshift/clustersubnetgroup.json b/internal/aws/cfn/schemas/aws/redshift/clustersubnetgroup.json new file mode 100644 index 00000000..8af417ef --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/clustersubnetgroup.json @@ -0,0 +1,166 @@ +{ + "typeName": "AWS::Redshift::ClusterSubnetGroup", + "description": "Specifies an Amazon Redshift subnet group.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Description": { + "description": "The description of the parameter group.", + "type": "string" + }, + "SubnetIds": { + "description": "The list of VPC subnet IDs", + "type": "array", + "insertionOrder": false, + "maxItems": 20, + "items": { + "type": "string" + } + }, + "Tags": { + "description": "The list of tags for the cluster parameter group.", + "type": "array", + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ClusterSubnetGroupName": { + "description": "This name must be unique for all subnet groups that are created by your AWS account. If costumer do not provide it, cloudformation will generate it. Must not be \"Default\". ", + "type": "string", + "maxLength": 255 + } + }, + "additionalProperties": false, + "required": [ + "Description", + "SubnetIds" + ], + "primaryIdentifier": [ + "/properties/ClusterSubnetGroupName" + ], + "readOnlyProperties": [ + "/properties/ClusterSubnetGroupName" + ], + "writeOnlyProperties": [ + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "tagging": { + "taggable": true + }, + "handlers": { + "create": { + "permissions": [ + "redshift:CreateClusterSubnetGroup", + "redshift:CreateTags", + "redshift:DescribeClusterSubnetGroups", + "redshift:DescribeTags", + "ec2:AllocateAddress", + "ec2:AssociateAddress", + "ec2:AttachNetworkInterface", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAddresses", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs" + ] + }, + "read": { + "permissions": [ + "redshift:DescribeClusterSubnetGroups", + "redshift:DescribeTags", + "ec2:AllocateAddress", + "ec2:AssociateAddress", + "ec2:AttachNetworkInterface", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAddresses", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs" + ] + }, + "update": { + "permissions": [ + "redshift:ModifyClusterSubnetGroup", + "redshift:DescribeClusterSubnetGroups", + "redshift:DescribeTags", + "redshift:CreateTags", + "redshift:DeleteTags", + "ec2:AllocateAddress", + "ec2:AssociateAddress", + "ec2:AttachNetworkInterface", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAddresses", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs" + ] + }, + "delete": { + "permissions": [ + "redshift:DeleteClusterSubnetGroup", + "redshift:DescribeClusterSubnetGroups", + "redshift:DescribeTags", + "ec2:AllocateAddress", + "ec2:AssociateAddress", + "ec2:AttachNetworkInterface", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAddresses", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs" + ] + }, + "list": { + "permissions": [ + "redshift:DescribeClusterSubnetGroups", + "redshift:DescribeTags", + "ec2:AllocateAddress", + "ec2:AssociateAddress", + "ec2:AttachNetworkInterface", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAddresses", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshift/endpointaccess.json b/internal/aws/cfn/schemas/aws/redshift/endpointaccess.json new file mode 100644 index 00000000..7dc60a21 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/endpointaccess.json @@ -0,0 +1,225 @@ +{ + "typeName": "AWS::Redshift::EndpointAccess", + "description": "Resource schema for a Redshift-managed VPC endpoint.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift", + "definitions": { + "VpcSecurityGroup": { + "description": "Describes the members of a VPC security group.", + "type": "object", + "properties": { + "VpcSecurityGroupId": { + "type": "string", + "description": "The identifier of the VPC security group." + }, + "Status": { + "type": "string", + "description": "The status of the VPC security group." + } + }, + "additionalProperties": false + }, + "NetworkInterface": { + "description": "Describes a network interface.", + "type": "object", + "properties": { + "NetworkInterfaceId": { + "type": "string", + "description": "The network interface identifier." + }, + "SubnetId": { + "type": "string", + "description": "The subnet identifier." + }, + "PrivateIpAddress": { + "type": "string", + "description": "The IPv4 address of the network interface within the subnet." + }, + "AvailabilityZone": { + "type": "string", + "description": "The Availability Zone." + } + }, + "additionalProperties": false + } + }, + "properties": { + "Address": { + "description": "The DNS address of the endpoint.", + "type": "string" + }, + "ClusterIdentifier": { + "description": "A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. All alphabetical characters must be lower case, no hypens at the end, no two consecutive hyphens. Cluster name should be unique for all clusters within an AWS account", + "type": "string" + }, + "VpcSecurityGroups": { + "description": "A list of Virtual Private Cloud (VPC) security groups to be associated with the endpoint.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VpcSecurityGroup" + } + }, + "ResourceOwner": { + "description": "The AWS account ID of the owner of the cluster.", + "type": "string", + "pattern": "^\\d{12}$" + }, + "EndpointStatus": { + "description": "The status of the endpoint.", + "type": "string" + }, + "EndpointName": { + "description": "The name of the endpoint.", + "type": "string", + "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,30}$" + }, + "EndpointCreateTime": { + "description": "The time (UTC) that the endpoint was created.", + "type": "string" + }, + "SubnetGroupName": { + "description": "The subnet group name where Amazon Redshift chooses to deploy the endpoint.", + "type": "string", + "pattern": "^(?=^[a-zA-Z0-9-]+$).{1,255}$" + }, + "Port": { + "description": "The port number on which the cluster accepts incoming connections.", + "type": "integer" + }, + "VpcSecurityGroupIds": { + "description": "A list of vpc security group ids to apply to the created endpoint access.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "VpcEndpoint": { + "description": "The connection endpoint for connecting to an Amazon Redshift cluster through the proxy.", + "type": "object", + "properties": { + "VpcEndpointId": { + "type": "string", + "description": "The connection endpoint ID for connecting an Amazon Redshift cluster through the proxy." + }, + "VpcId": { + "type": "string", + "description": "The VPC identifier that the endpoint is associated." + }, + "NetworkInterfaces": { + "type": "array", + "insertionOrder": false, + "description": "One or more network interfaces of the endpoint. Also known as an interface endpoint.", + "items": { + "$ref": "#/definitions/NetworkInterface" + } + } + }, + "additionalProperties": false + } + }, + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "required": [ + "ClusterIdentifier", + "SubnetGroupName", + "EndpointName", + "VpcSecurityGroupIds" + ], + "primaryIdentifier": [ + "/properties/EndpointName" + ], + "createOnlyProperties": [ + "/properties/EndpointName", + "/properties/ClusterIdentifier", + "/properties/ResourceOwner", + "/properties/SubnetGroupName" + ], + "readOnlyProperties": [ + "/properties/Address", + "/properties/EndpointStatus", + "/properties/EndpointCreateTime", + "/properties/Port", + "/properties/VpcSecurityGroups", + "/properties/VpcSecurityGroups/*/VpcSecurityGroupId", + "/properties/VpcSecurityGroups/*/Status", + "/properties/VpcEndpoint", + "/properties/VpcEndpoint/VpcEndpointId", + "/properties/VpcEndpoint/VpcId", + "/properties/VpcEndpoint/NetworkInterfaces/*/NetworkInterfaceId", + "/properties/VpcEndpoint/NetworkInterfaces/*/PrivateIpAddress", + "/properties/VpcEndpoint/NetworkInterfaces/*/SubnetId", + "/properties/VpcEndpoint/NetworkInterfaces/*/AvailabilityZone" + ], + "handlers": { + "create": { + "permissions": [ + "redshift:CreateEndpointAccess", + "redshift:DescribeEndpointAccess", + "ec2:CreateClientVpnEndpoint", + "ec2:CreateVpcEndpoint", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets" + ], + "timeoutInMinutes": 60 + }, + "read": { + "permissions": [ + "redshift:DescribeEndpointAccess", + "ec2:DescribeClientVpnEndpoints", + "ec2:DescribeVpcEndpoint", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets" + ] + }, + "update": { + "permissions": [ + "redshift:DescribeEndpointAccess", + "redshift:ModifyEndpointAccess", + "ec2:ModifyClientVpnEndpoint", + "ec2:ModifyVpcEndpoint", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets" + ], + "timeoutInMinutes": 60 + }, + "delete": { + "permissions": [ + "redshift:DeleteEndpointAccess", + "redshift:DescribeEndpointAccess", + "ec2:DeleteClientVpnEndpoint", + "ec2:DeleteVpcEndpoint", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets", + "ec2:DescribeVpcEndpoint" + ], + "timeoutInMinutes": 60 + }, + "list": { + "permissions": [ + "redshift:DescribeEndpointAccess", + "ec2:DescribeClientVpnEndpoints", + "ec2:DescribeVpcEndpoints", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshift/endpointauthorization.json b/internal/aws/cfn/schemas/aws/redshift/endpointauthorization.json new file mode 100644 index 00000000..ff926cab --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/endpointauthorization.json @@ -0,0 +1,144 @@ +{ + "typeName": "AWS::Redshift::EndpointAuthorization", + "description": "Describes an endpoint authorization for authorizing Redshift-managed VPC endpoint access to a cluster across AWS accounts.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift", + "definitions": { + "AwsAccount": { + "type": "string", + "pattern": "^\\d{12}$" + }, + "VpcId": { + "type": "string", + "pattern": "^vpc-[A-Za-z0-9]{1,17}$" + } + }, + "properties": { + "Grantor": { + "description": "The AWS account ID of the cluster owner.", + "$ref": "#/definitions/AwsAccount" + }, + "Grantee": { + "description": "The AWS account ID of the grantee of the cluster.", + "$ref": "#/definitions/AwsAccount" + }, + "ClusterIdentifier": { + "description": "The cluster identifier.", + "type": "string", + "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,63}$" + }, + "AuthorizeTime": { + "description": "The time (UTC) when the authorization was created.", + "type": "string" + }, + "ClusterStatus": { + "description": "The status of the cluster.", + "type": "string" + }, + "Status": { + "description": "The status of the authorization action.", + "type": "string" + }, + "AllowedAllVPCs": { + "description": "Indicates whether all VPCs in the grantee account are allowed access to the cluster.", + "type": "boolean" + }, + "AllowedVPCs": { + "description": "The VPCs allowed access to the cluster.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VpcId" + } + }, + "EndpointCount": { + "description": "The number of Redshift-managed VPC endpoints created for the authorization.", + "type": "integer" + }, + "Account": { + "description": "The target AWS account ID to grant or revoke access for.", + "$ref": "#/definitions/AwsAccount" + }, + "VpcIds": { + "description": "The virtual private cloud (VPC) identifiers to grant or revoke access to.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VpcId" + } + }, + "Force": { + "description": " Indicates whether to force the revoke action. If true, the Redshift-managed VPC endpoints associated with the endpoint authorization are also deleted.", + "type": "boolean" + } + }, + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "required": [ + "ClusterIdentifier", + "Account" + ], + "primaryIdentifier": [ + "/properties/ClusterIdentifier", + "/properties/Account" + ], + "createOnlyProperties": [ + "/properties/ClusterIdentifier", + "/properties/Account" + ], + "readOnlyProperties": [ + "/properties/Grantor", + "/properties/Grantee", + "/properties/AuthorizeTime", + "/properties/ClusterStatus", + "/properties/Status", + "/properties/AllowedAllVPCs", + "/properties/AllowedVPCs", + "/properties/EndpointCount" + ], + "writeOnlyProperties": [ + "/properties/Force" + ], + "handlers": { + "create": { + "permissions": [ + "redshift:AuthorizeEndpointAccess", + "redshift:DescribeEndpointAuthorization" + ], + "timeoutInMinutes": 60 + }, + "read": { + "permissions": [ + "redshift:DescribeEndpointAuthorization" + ] + }, + "update": { + "permissions": [ + "redshift:AuthorizeEndpointAccess", + "redshift:DescribeEndpointAuthorization", + "redshift:RevokeEndpointAccess" + ], + "timeoutInMinutes": 60 + }, + "delete": { + "permissions": [ + "redshift:RevokeEndpointAccess", + "redshift:DeleteEndpointAccess", + "redshift:DescribeEndpointAuthorization", + "ec2:DeleteClientVpnEndpoint", + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets" + ], + "timeoutInMinutes": 60 + }, + "list": { + "permissions": [ + "redshift:DescribeEndpointAuthorization" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshift/eventsubscription.json b/internal/aws/cfn/schemas/aws/redshift/eventsubscription.json new file mode 100644 index 00000000..674b2fe3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/eventsubscription.json @@ -0,0 +1,199 @@ +{ + "typeName": "AWS::Redshift::EventSubscription", + "description": "The `AWS::Redshift::EventSubscription` resource creates an Amazon Redshift Event Subscription.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "SubscriptionName": { + "description": "The name of the Amazon Redshift event notification subscription", + "type": "string", + "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,255}$" + }, + "SnsTopicArn": { + "description": "The Amazon Resource Name (ARN) of the Amazon SNS topic used to transmit the event notifications.", + "type": "string" + }, + "SourceType": { + "description": "The type of source that will be generating the events.", + "type": "string", + "enum": [ + "cluster", + "cluster-parameter-group", + "cluster-security-group", + "cluster-snapshot", + "scheduled-action" + ] + }, + "SourceIds": { + "description": "A list of one or more identifiers of Amazon Redshift source objects.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "EventCategories": { + "description": "Specifies the Amazon Redshift event categories to be published by the event notification subscription.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "configuration", + "management", + "monitoring", + "security", + "pending" + ] + } + }, + "Severity": { + "description": "Specifies the Amazon Redshift event severity to be published by the event notification subscription.", + "type": "string", + "enum": [ + "ERROR", + "INFO" + ] + }, + "Enabled": { + "description": "A boolean value; set to true to activate the subscription, and set to false to create the subscription but not activate it.", + "type": "boolean" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CustomerAwsId": { + "description": "The AWS account associated with the Amazon Redshift event notification subscription.", + "type": "string" + }, + "CustSubscriptionId": { + "description": "The name of the Amazon Redshift event notification subscription.", + "type": "string" + }, + "Status": { + "description": "The status of the Amazon Redshift event notification subscription.", + "type": "string", + "enum": [ + "active", + "no-permission", + "topic-not-exist" + ] + }, + "SubscriptionCreationTime": { + "description": "The date and time the Amazon Redshift event notification subscription was created.", + "type": "string" + }, + "SourceIdsList": { + "description": "A list of the sources that publish events to the Amazon Redshift event notification subscription.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "EventCategoriesList": { + "description": "The list of Amazon Redshift event categories specified in the event notification subscription.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + } + } + }, + "tagging": { + "taggable": true + }, + "additionalProperties": false, + "required": [ + "SubscriptionName" + ], + "primaryIdentifier": [ + "/properties/SubscriptionName" + ], + "createOnlyProperties": [ + "/properties/SubscriptionName" + ], + "readOnlyProperties": [ + "/properties/CustomerAwsId", + "/properties/CustSubscriptionId", + "/properties/Status", + "/properties/SubscriptionCreationTime", + "/properties/SourceIdsList", + "/properties/EventCategoriesList" + ], + "writeOnlyProperties": [ + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "handlers": { + "create": { + "permissions": [ + "redshift:CreateEventSubscription", + "redshift:CreateTags", + "redshift:DescribeTags", + "redshift:DescribeEventSubscriptions" + ] + }, + "read": { + "permissions": [ + "redshift:DescribeEventSubscriptions", + "redshift:DescribeTags" + ] + }, + "update": { + "permissions": [ + "redshift:ModifyEventSubscription", + "redshift:CreateTags", + "redshift:DescribeTags", + "redshift:DescribeEventSubscriptions", + "redshift:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "redshift:DescribeEventSubscriptions", + "redshift:DeleteEventSubscription", + "redshift:DescribeTags", + "redshift:DeleteTags" + ] + }, + "list": { + "permissions": [ + "redshift:DescribeTags", + "redshift:DescribeEventSubscriptions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshift/scheduledaction.json b/internal/aws/cfn/schemas/aws/redshift/scheduledaction.json new file mode 100644 index 00000000..5747fe9c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshift/scheduledaction.json @@ -0,0 +1,202 @@ +{ + "typeName": "AWS::Redshift::ScheduledAction", + "description": "The `AWS::Redshift::ScheduledAction` resource creates an Amazon Redshift Scheduled Action.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift", + "definitions": { + "ResizeClusterMessage": { + "description": "Describes a resize cluster operation. For example, a scheduled action to run the `ResizeCluster` API operation.", + "type": "object", + "properties": { + "ClusterIdentifier": { + "type": "string" + }, + "ClusterType": { + "type": "string" + }, + "NodeType": { + "type": "string" + }, + "NumberOfNodes": { + "type": "integer" + }, + "Classic": { + "type": "boolean" + } + }, + "required": [ + "ClusterIdentifier" + ], + "additionalProperties": false + }, + "PauseClusterMessage": { + "description": "Describes a pause cluster operation. For example, a scheduled action to run the `PauseCluster` API operation.", + "type": "object", + "properties": { + "ClusterIdentifier": { + "type": "string" + } + }, + "required": [ + "ClusterIdentifier" + ], + "additionalProperties": false + }, + "ResumeClusterMessage": { + "description": "Describes a resume cluster operation. For example, a scheduled action to run the `ResumeCluster` API operation.", + "type": "object", + "properties": { + "ClusterIdentifier": { + "type": "string" + } + }, + "required": [ + "ClusterIdentifier" + ], + "additionalProperties": false + }, + "ScheduledActionType": { + "type": "object", + "oneOf": [ + { + "properties": { + "ResizeCluster": { + "$ref": "#/definitions/ResizeClusterMessage" + } + }, + "additionalProperties": false + }, + { + "properties": { + "PauseCluster": { + "$ref": "#/definitions/PauseClusterMessage" + } + }, + "additionalProperties": false + }, + { + "properties": { + "ResumeCluster": { + "$ref": "#/definitions/ResumeClusterMessage" + } + }, + "additionalProperties": false + } + ] + }, + "timestamp": { + "type": "string" + } + }, + "properties": { + "ScheduledActionName": { + "description": "The name of the scheduled action. The name must be unique within an account.", + "type": "string", + "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,60}$" + }, + "TargetAction": { + "description": "A JSON format string of the Amazon Redshift API operation with input parameters.", + "$ref": "#/definitions/ScheduledActionType" + }, + "Schedule": { + "description": "The schedule in `at( )` or `cron( )` format.", + "type": "string" + }, + "IamRole": { + "description": "The IAM role to assume to run the target action.", + "type": "string" + }, + "ScheduledActionDescription": { + "description": "The description of the scheduled action.", + "type": "string", + "pattern": "^(?=^[\\x09\\x0a\\x0d\\x20-\\xff]*$).{1,255}$" + }, + "StartTime": { + "description": "The start time in UTC of the scheduled action. Before this time, the scheduled action does not trigger.", + "$ref": "#/definitions/timestamp" + }, + "EndTime": { + "description": "The end time in UTC of the scheduled action. After this time, the scheduled action does not trigger.", + "$ref": "#/definitions/timestamp" + }, + "Enable": { + "description": "If true, the schedule is enabled. If false, the scheduled action does not trigger.", + "type": "boolean" + }, + "State": { + "description": "The state of the scheduled action.", + "type": "string", + "enum": [ + "ACTIVE", + "DISABLED" + ] + }, + "NextInvocations": { + "description": "List of times when the scheduled action will run.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/timestamp" + } + } + }, + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "required": [ + "ScheduledActionName" + ], + "primaryIdentifier": [ + "/properties/ScheduledActionName" + ], + "createOnlyProperties": [ + "/properties/ScheduledActionName" + ], + "readOnlyProperties": [ + "/properties/State", + "/properties/NextInvocations" + ], + "handlers": { + "create": { + "permissions": [ + "redshift:CreateScheduledAction", + "redshift:DescribeScheduledActions", + "redshift:DescribeTags", + "redshift:PauseCluster", + "redshift:ResumeCluster", + "redshift:ResizeCluster", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "redshift:DescribeScheduledActions", + "redshift:DescribeTags" + ] + }, + "update": { + "permissions": [ + "redshift:DescribeScheduledActions", + "redshift:ModifyScheduledAction", + "redshift:PauseCluster", + "redshift:ResumeCluster", + "redshift:ResizeCluster", + "redshift:DescribeTags", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "redshift:DescribeTags", + "redshift:DescribeScheduledActions", + "redshift:DeleteScheduledAction" + ] + }, + "list": { + "permissions": [ + "redshift:DescribeTags", + "redshift:DescribeScheduledActions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/redshiftserverless/namespace.json b/internal/aws/cfn/schemas/aws/redshiftserverless/namespace.json new file mode 100644 index 00000000..e3d5f943 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshiftserverless/namespace.json @@ -0,0 +1,318 @@ +{ + "typeName": "AWS::RedshiftServerless::Namespace", + "description": "Definition of AWS::RedshiftServerless::Namespace Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift-serverless", + "definitions": { + "LogExport": { + "type": "string", + "enum": [ + "useractivitylog", + "userlog", + "connectionlog" + ] + }, + "Namespace": { + "type": "object", + "properties": { + "NamespaceArn": { + "type": "string" + }, + "NamespaceId": { + "type": "string" + }, + "NamespaceName": { + "type": "string", + "maxLength": 64, + "minLength": 3, + "pattern": "^[a-z0-9-]+$" + }, + "AdminUsername": { + "type": "string" + }, + "DbName": { + "type": "string", + "pattern": "[a-zA-Z][a-zA-Z_0-9+.@-]*" + }, + "KmsKeyId": { + "type": "string" + }, + "DefaultIamRoleArn": { + "type": "string" + }, + "IamRoles": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + } + }, + "LogExports": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LogExport" + }, + "maxItems": 16, + "minItems": 0 + }, + "Status": { + "$ref": "#/definitions/NamespaceStatus" + }, + "CreationDate": { + "type": "string" + }, + "AdminPasswordSecretArn": { + "type": "string" + }, + "AdminPasswordSecretKmsKeyId": { + "type": "string" + } + }, + "additionalProperties": false + }, + "NamespaceStatus": { + "type": "string", + "enum": [ + "AVAILABLE", + "MODIFYING", + "DELETING" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AdminPasswordSecretKmsKeyId": { + "description": "The ID of the AWS Key Management Service (KMS) key used to encrypt and store the namespace's admin credentials secret. You can only use this parameter if manageAdminPassword is true.", + "type": "string" + }, + "AdminUserPassword": { + "description": "The password associated with the admin user for the namespace that is being created. Password must be at least 8 characters in length, should be any printable ASCII character. Must contain at least one lowercase letter, one uppercase letter and one decimal digit. You can't use adminUserPassword if manageAdminPassword is true.", + "type": "string", + "maxLength": 64, + "minLength": 8, + "pattern": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[^\\x00-\\x20\\x22\\x27\\x2f\\x40\\x5c\\x7f-\\uffff]+" + }, + "AdminUsername": { + "description": "The user name associated with the admin user for the namespace that is being created. Only alphanumeric characters and underscores are allowed. It should start with an alphabet.", + "type": "string", + "pattern": "[a-zA-Z][a-zA-Z_0-9+.@-]*" + }, + "DbName": { + "description": "The database name associated for the namespace that is being created. Only alphanumeric characters and underscores are allowed. It should start with an alphabet.", + "type": "string", + "pattern": "[a-zA-Z][a-zA-Z_0-9+.@-]*", + "maxLength": 127 + }, + "DefaultIamRoleArn": { + "description": "The default IAM role ARN for the namespace that is being created.", + "type": "string" + }, + "IamRoles": { + "description": "A list of AWS Identity and Access Management (IAM) roles that can be used by the namespace to access other AWS services. You must supply the IAM roles in their Amazon Resource Name (ARN) format. The Default role limit for each request is 10.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 512, + "minLength": 0 + } + }, + "KmsKeyId": { + "description": "The AWS Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the namespace.", + "type": "string" + }, + "LogExports": { + "description": "The collection of log types to be exported provided by the customer. Should only be one of the three supported log types: userlog, useractivitylog and connectionlog", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LogExport" + }, + "maxItems": 16, + "minItems": 0 + }, + "ManageAdminPassword": { + "description": "If true, Amazon Redshift uses AWS Secrets Manager to manage the namespace's admin credentials. You can't use adminUserPassword if manageAdminPassword is true. If manageAdminPassword is false or not set, Amazon Redshift uses adminUserPassword for the admin user account's password.", + "type": "boolean" + }, + "Namespace": { + "$ref": "#/definitions/Namespace", + "description": "Definition of Namespace resource." + }, + "NamespaceName": { + "description": "A unique identifier for the namespace. You use this identifier to refer to the namespace for any subsequent namespace operations such as deleting or modifying. All alphabetical characters must be lower case. Namespace name should be unique for all namespaces within an AWS account.", + "type": "string", + "maxLength": 64, + "minLength": 3, + "pattern": "^[a-z0-9-]+$" + }, + "Tags": { + "description": "The list of tags for the namespace.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0 + }, + "FinalSnapshotName": { + "description": "The name of the namespace the source snapshot was created from. Please specify the name if needed before deleting namespace", + "type": "string", + "pattern": "[a-z][a-z0-9]*(-[a-z0-9]+)*", + "maxLength": 255 + }, + "FinalSnapshotRetentionPeriod": { + "description": "The number of days to retain automated snapshot in the destination region after they are copied from the source region. If the value is -1, the manual snapshot is retained indefinitely. The value must be either -1 or an integer between 1 and 3,653.", + "type": "integer" + }, + "NamespaceResourcePolicy": { + "description": "The resource policy document that will be attached to the namespace.", + "type": "object" + }, + "RedshiftIdcApplicationArn": { + "description": "The ARN for the Redshift application that integrates with IAM Identity Center.", + "type": "string" + } + }, + "tagging": { + "taggable": false + }, + "required": [ + "NamespaceName" + ], + "readOnlyProperties": [ + "/properties/Namespace", + "/properties/Namespace/NamespaceArn", + "/properties/Namespace/NamespaceId", + "/properties/Namespace/NamespaceName", + "/properties/Namespace/AdminUsername", + "/properties/Namespace/DbName", + "/properties/Namespace/KmsKeyId", + "/properties/Namespace/DefaultIamRoleArn", + "/properties/Namespace/IamRoles", + "/properties/Namespace/LogExports", + "/properties/Namespace/Status", + "/properties/Namespace/CreationDate" + ], + "writeOnlyProperties": [ + "/properties/AdminUserPassword", + "/properties/FinalSnapshotName", + "/properties/FinalSnapshotRetentionPeriod", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value", + "/properties/ManageAdminPassword", + "/properties/RedshiftIdcApplicationArn" + ], + "createOnlyProperties": [ + "/properties/NamespaceName", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/NamespaceName" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "kms:TagResource", + "kms:UntagResource", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:Encrypt", + "kms:Decrypt", + "kms:DescribeKey", + "kms:GenerateDataKeyPair", + "kms:GenerateDataKey", + "kms:CreateGrant", + "kms:ListGrants", + "kms:RevokeGrant", + "kms:RetireGrant", + "redshift-serverless:CreateNamespace", + "redshift-serverless:GetNamespace", + "redshift:GetResourcePolicy", + "redshift:PutResourcePolicy", + "secretsmanager:CreateSecret", + "secretsmanager:TagResource", + "secretsmanager:RotateSecret", + "secretsmanager:DescribeSecret" + ] + }, + "read": { + "permissions": [ + "iam:PassRole", + "redshift-serverless:GetNamespace", + "redshift:GetResourcePolicy" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "kms:TagResource", + "kms:UntagResource", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:Encrypt", + "kms:Decrypt", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:ListGrants", + "kms:RevokeGrant", + "kms:RetireGrant", + "kms:GenerateDataKeyPair", + "kms:GenerateDataKey", + "redshift-serverless:UpdateNamespace", + "redshift-serverless:GetNamespace", + "redshift:GetResourcePolicy", + "redshift:PutResourcePolicy", + "redshift:DeleteResourcePolicy", + "secretsmanager:CreateSecret", + "secretsmanager:TagResource", + "secretsmanager:RotateSecret", + "secretsmanager:DescribeSecret", + "secretsmanager:UpdateSecret", + "secretsmanager:DeleteSecret" + ] + }, + "delete": { + "permissions": [ + "iam:PassRole", + "redshift-serverless:DeleteNamespace", + "redshift-serverless:GetNamespace", + "kms:RetireGrant", + "secretsmanager:DescribeSecret", + "secretsmanager:DeleteSecret", + "redshift:DeleteResourcePolicy" + ] + }, + "list": { + "permissions": [ + "iam:PassRole", + "redshift-serverless:ListNamespaces" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/redshiftserverless/workgroup.json b/internal/aws/cfn/schemas/aws/redshiftserverless/workgroup.json new file mode 100644 index 00000000..3948ecc0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/redshiftserverless/workgroup.json @@ -0,0 +1,387 @@ +{ + "typeName": "AWS::RedshiftServerless::Workgroup", + "description": "Definition of AWS::RedshiftServerless::Workgroup Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift-serverless", + "definitions": { + "ConfigParameter": { + "type": "object", + "properties": { + "ParameterKey": { + "type": "string", + "maxLength": 255, + "minLength": 0 + }, + "ParameterValue": { + "type": "string", + "maxLength": 15000, + "minLength": 0 + } + }, + "additionalProperties": false + }, + "Endpoint": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "Port": { + "type": "integer" + }, + "VpcEndpoints": { + "type": "array", + "items": { + "$ref": "#/definitions/VpcEndpoint" + }, + "insertionOrder": false + } + }, + "additionalProperties": false + }, + "NetworkInterface": { + "type": "object", + "properties": { + "NetworkInterfaceId": { + "type": "string" + }, + "SubnetId": { + "type": "string" + }, + "PrivateIpAddress": { + "type": "string" + }, + "AvailabilityZone": { + "type": "string" + } + }, + "additionalProperties": false + }, + "VpcEndpoint": { + "type": "object", + "properties": { + "VpcEndpointId": { + "type": "string" + }, + "VpcId": { + "type": "string" + }, + "NetworkInterfaces": { + "type": "array", + "items": { + "$ref": "#/definitions/NetworkInterface" + }, + "insertionOrder": false + } + }, + "additionalProperties": false + }, + "Workgroup": { + "type": "object", + "properties": { + "WorkgroupId": { + "type": "string" + }, + "WorkgroupArn": { + "type": "string" + }, + "WorkgroupName": { + "type": "string", + "pattern": "^[a-z0-9-]*$", + "maxLength": 64, + "minLength": 3 + }, + "NamespaceName": { + "type": "string", + "pattern": "^[a-z0-9-]+$", + "maxLength": 64, + "minLength": 3 + }, + "BaseCapacity": { + "type": "integer" + }, + "MaxCapacity": { + "type": "integer" + }, + "EnhancedVpcRouting": { + "type": "boolean" + }, + "ConfigParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/ConfigParameter" + }, + "uniqueItems": true, + "insertionOrder": false + }, + "SecurityGroupIds": { + "type": "array", + "items": { + "type": "string", + "pattern": "^sg-[0-9a-fA-F]{8,}$", + "maxLength": 255, + "minLength": 0 + }, + "insertionOrder": false + }, + "SubnetIds": { + "type": "array", + "items": { + "type": "string", + "pattern": "^subnet-[0-9a-fA-F]{8,}$", + "maxLength": 255, + "minLength": 0 + }, + "insertionOrder": false + }, + "Status": { + "$ref": "#/definitions/WorkgroupStatus" + }, + "Endpoint": { + "$ref": "#/definitions/Endpoint" + }, + "PubliclyAccessible": { + "type": "boolean" + }, + "CreationDate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "WorkgroupStatus": { + "type": "string", + "enum": [ + "CREATING", + "AVAILABLE", + "MODIFYING", + "DELETING" + ] + } + }, + "properties": { + "WorkgroupName": { + "description": "The name of the workgroup.", + "type": "string", + "pattern": "^(?=^[a-z0-9-]+$).{3,64}$", + "maxLength": 64, + "minLength": 3 + }, + "NamespaceName": { + "description": "The namespace the workgroup is associated with.", + "type": "string", + "pattern": "^(?=^[a-z0-9-]+$).{3,64}$", + "maxLength": 64, + "minLength": 3 + }, + "BaseCapacity": { + "description": "The base compute capacity of the workgroup in Redshift Processing Units (RPUs).", + "type": "integer" + }, + "MaxCapacity": { + "description": "The max compute capacity of the workgroup in Redshift Processing Units (RPUs).", + "type": "integer" + }, + "EnhancedVpcRouting": { + "description": "The value that specifies whether to enable enhanced virtual private cloud (VPC) routing, which forces Amazon Redshift Serverless to route traffic through your VPC.", + "type": "boolean", + "default": false + }, + "ConfigParameters": { + "description": "A list of parameters to set for finer control over a database. Available options are datestyle, enable_user_activity_logging, query_group, search_path, max_query_execution_time, and require_ssl.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ConfigParameter" + }, + "minItems": 1 + }, + "SecurityGroupIds": { + "description": "A list of security group IDs to associate with the workgroup.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^sg-[0-9a-fA-F]{8,}$", + "maxLength": 255, + "minLength": 0 + }, + "maxItems": 32, + "minItems": 1 + }, + "SubnetIds": { + "description": "A list of subnet IDs the workgroup is associated with.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "pattern": "^subnet-[0-9a-fA-F]{8,}$", + "maxLength": 255, + "minLength": 0 + }, + "maxItems": 32, + "minItems": 1 + }, + "PubliclyAccessible": { + "description": "A value that specifies whether the workgroup can be accessible from a public network.", + "type": "boolean", + "default": false + }, + "Port": { + "description": "The custom port to use when connecting to a workgroup. Valid port ranges are 5431-5455 and 8191-8215. The default is 5439.", + "type": "integer" + }, + "Tags": { + "description": "The map of the key-value pairs used to tag the workgroup.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0 + }, + "Workgroup": { + "description": "Definition for workgroup resource", + "$ref": "#/definitions/Workgroup" + } + }, + "tagging": { + "taggable": true + }, + "additionalProperties": false, + "required": [ + "WorkgroupName" + ], + "createOnlyProperties": [ + "/properties/WorkgroupName", + "/properties/NamespaceName" + ], + "readOnlyProperties": [ + "/properties/Workgroup", + "/properties/Workgroup/WorkgroupId", + "/properties/Workgroup/WorkgroupArn", + "/properties/Workgroup/WorkgroupName", + "/properties/Workgroup/NamespaceName", + "/properties/Workgroup/BaseCapacity", + "/properties/Workgroup/MaxCapacity", + "/properties/Workgroup/EnhancedVpcRouting", + "/properties/Workgroup/ConfigParameters/*/ParameterKey", + "/properties/Workgroup/ConfigParameters/*/ParameterValue", + "/properties/Workgroup/SecurityGroupIds", + "/properties/Workgroup/SubnetIds", + "/properties/Workgroup/Status", + "/properties/Workgroup/Endpoint/Address", + "/properties/Workgroup/Endpoint/Port", + "/properties/Workgroup/Endpoint/VpcEndpoints/*/VpcEndpointId", + "/properties/Workgroup/Endpoint/VpcEndpoints/*/VpcId", + "/properties/Workgroup/Endpoint/VpcEndpoints/*/NetworkInterfaces/*/NetworkInterfaceId", + "/properties/Workgroup/Endpoint/VpcEndpoints/*/NetworkInterfaces/*/SubnetId", + "/properties/Workgroup/Endpoint/VpcEndpoints/*/NetworkInterfaces/*/PrivateIpAddress", + "/properties/Workgroup/Endpoint/VpcEndpoints/*/NetworkInterfaces/*/AvailabilityZone", + "/properties/Workgroup/PubliclyAccessible", + "/properties/Workgroup/CreationDate" + ], + "writeOnlyProperties": [ + "/properties/BaseCapacity", + "/properties/MaxCapacity", + "/properties/ConfigParameters", + "/properties/SecurityGroupIds", + "/properties/SubnetIds", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ], + "primaryIdentifier": [ + "/properties/WorkgroupName" + ], + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "redshift-serverless:CreateNamespace", + "redshift-serverless:CreateWorkgroup", + "redshift-serverless:GetWorkgroup" + ] + }, + "read": { + "permissions": [ + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "redshift-serverless:GetWorkgroup" + ] + }, + "update": { + "permissions": [ + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "redshift-serverless:ListTagsForResource", + "redshift-serverless:TagResource", + "redshift-serverless:UntagResource", + "redshift-serverless:GetWorkgroup", + "redshift-serverless:UpdateWorkgroup" + ] + }, + "delete": { + "permissions": [ + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "redshift-serverless:GetWorkgroup", + "redshift-serverless:DeleteWorkgroup" + ] + }, + "list": { + "permissions": [ + "ec2:DescribeVpcAttribute", + "ec2:DescribeSecurityGroups", + "ec2:DescribeAddresses", + "ec2:DescribeInternetGateways", + "ec2:DescribeSubnets", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "redshift-serverless:ListWorkgroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/refactorspaces/application.json b/internal/aws/cfn/schemas/aws/refactorspaces/application.json new file mode 100644 index 00000000..04248e91 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/refactorspaces/application.json @@ -0,0 +1,247 @@ +{ + "typeName": "AWS::RefactorSpaces::Application", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-refactor-spaces", + "description": "Definition of AWS::RefactorSpaces::Application Resource Type", + "definitions": { + "ApiGatewayEndpointType": { + "type": "string", + "enum": [ + "REGIONAL", + "PRIVATE" + ] + }, + "ApiGatewayProxyInput": { + "type": "object", + "properties": { + "StageName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[-a-zA-Z0-9_]*$" + }, + "EndpointType": { + "$ref": "#/definitions/ApiGatewayEndpointType" + } + }, + "additionalProperties": false + }, + "ProxyType": { + "type": "string", + "enum": [ + "API_GATEWAY" + ] + }, + "Tag": { + "description": "A label for tagging Environment resource", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:).+" + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "ApiGatewayProxy": { + "$ref": "#/definitions/ApiGatewayProxyInput" + }, + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:(aws[a-zA-Z-]*)?:refactor-spaces:[a-zA-Z0-9\\-]+:\\w{12}:[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "ApiGatewayId": { + "type": "string", + "maxLength": 10, + "minLength": 10, + "pattern": "^[a-z0-9]{10}$" + }, + "VpcLinkId": { + "type": "string", + "maxLength": 10, + "minLength": 10, + "pattern": "^[a-z0-9]{10}$" + }, + "NlbArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:(aws[a-zA-Z-]*)?:elasticloadbalancing:[a-zA-Z0-9\\\\-]+:\\\\w{12}:[a-zA-Z_0-9+=,.@\\\\-_\\/]+$" + }, + "NlbName": { + "type": "string", + "maxLength": 32, + "minLength": 1, + "pattern": "^(?!internal-)[a-zA-Z0-9]+[a-zA-Z0-9-_ ]+.*[^-]$" + }, + "ApplicationIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^app-([0-9A-Za-z]{10}$)" + }, + "EnvironmentIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^env-([0-9A-Za-z]{10}$)" + }, + "Name": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!app-)[a-zA-Z0-9]+[a-zA-Z0-9-_ ]+$" + }, + "ProxyType": { + "$ref": "#/definitions/ProxyType" + }, + "VpcId": { + "type": "string", + "maxLength": 21, + "minLength": 12, + "pattern": "^vpc-[-a-f0-9]{8}([-a-f0-9]{9})?$" + }, + "StageName": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[-a-zA-Z0-9_]*$" + }, + "ProxyUrl": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^http://[-a-zA-Z0-9+\\x38@#/%?=~_|!:,.;]*[-a-zA-Z0-9+\\x38@#/%=~_|]$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair." + } + }, + "required": [ + "EnvironmentIdentifier", + "VpcId", + "Name", + "ProxyType" + ], + "readOnlyProperties": [ + "/properties/ApplicationIdentifier", + "/properties/Arn", + "/properties/ApiGatewayId", + "/properties/VpcLinkId", + "/properties/NlbArn", + "/properties/NlbName", + "/properties/ProxyUrl", + "/properties/StageName" + ], + "writeOnlyProperties": [ + "/properties/ApiGatewayProxy" + ], + "createOnlyProperties": [ + "/properties/ApiGatewayProxy", + "/properties/EnvironmentIdentifier", + "/properties/Name", + "/properties/ProxyType", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/EnvironmentIdentifier", + "/properties/ApplicationIdentifier" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "refactor-spaces:GetApplication", + "refactor-spaces:CreateApplication", + "refactor-spaces:TagResource", + "ec2:CreateTags", + "ec2:CreateVpcEndpointServiceConfiguration", + "ec2:DescribeVpcs", + "ec2:DescribeSubnets", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:DescribeAccountAttributes", + "ec2:DescribeInternetGateways", + "ec2:ModifyVpcEndpointServicePermissions", + "apigateway:DELETE", + "apigateway:GET", + "apigateway:PATCH", + "apigateway:POST", + "apigateway:PUT", + "apigateway:UpdateRestApiPolicy", + "apigateway:Update*", + "apigateway:Delete*", + "apigateway:Get*", + "apigateway:Put*", + "elasticloadbalancing:CreateLoadBalancer", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeTags", + "elasticloadbalancing:AddTags", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "refactor-spaces:GetApplication", + "refactor-spaces:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "refactor-spaces:GetApplication", + "refactor-spaces:DeleteApplication", + "refactor-spaces:UntagResource", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:DeleteRoute", + "ec2:DeleteSecurityGroup", + "ec2:DeleteTransitGateway", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:DeleteVpcEndpointServiceConfigurations", + "ec2:DeleteTags", + "ec2:RevokeSecurityGroupIngress", + "elasticloadbalancing:DeleteLoadBalancer", + "apigateway:Update*", + "apigateway:Delete*", + "apigateway:Get*", + "apigateway:Put*" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "EnvironmentIdentifier": { + "$ref": "resource-schema.json#/properties/EnvironmentIdentifier" + } + }, + "required": [ + "EnvironmentIdentifier" + ] + }, + "permissions": [ + "refactor-spaces:ListApplications", + "refactor-spaces:ListTagsForResource" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/refactorspaces/environment.json b/internal/aws/cfn/schemas/aws/refactorspaces/environment.json new file mode 100644 index 00000000..0901345f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/refactorspaces/environment.json @@ -0,0 +1,163 @@ +{ + "typeName": "AWS::RefactorSpaces::Environment", + "description": "Definition of AWS::RefactorSpaces::Environment Resource Type", + "definitions": { + "NetworkFabricType": { + "type": "string", + "enum": [ + "TRANSIT_GATEWAY", + "NONE" + ] + }, + "Tag": { + "description": "A label for tagging Environment resource", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:).+" + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-_\\s\\.\\!\\*\\#\\@\\']+$" + }, + "EnvironmentIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^env-([0-9A-Za-z]{10}$)" + }, + "Name": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!env-)[a-zA-Z0-9]+[a-zA-Z0-9-_ ]+$" + }, + "NetworkFabricType": { + "$ref": "#/definitions/NetworkFabricType" + }, + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:(aws[a-zA-Z-]*)?:refactor-spaces:[a-zA-Z0-9\\-]+:\\w{12}:[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "TransitGatewayId": { + "type": "string", + "maxLength": 21, + "minLength": 21, + "pattern": "^tgw-[-a-f0-9]{17}$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair." + } + }, + "required": [ + "Name", + "NetworkFabricType" + ], + "readOnlyProperties": [ + "/properties/EnvironmentIdentifier", + "/properties/Arn", + "/properties/TransitGatewayId" + ], + "writeOnlyProperties": [ + "/properties/Description", + "/properties/Name", + "/properties/NetworkFabricType" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/Name", + "/properties/NetworkFabricType" + ], + "primaryIdentifier": [ + "/properties/EnvironmentIdentifier" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "refactor-spaces:CreateEnvironment", + "refactor-spaces:GetEnvironment", + "refactor-spaces:TagResource", + "ec2:CreateTransitGateway", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:CreateSecurityGroup", + "ec2:CreateTags", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeRouteTables", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeTags", + "ec2:DescribeTransitGateways", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:DescribeVpcEndpointServiceConfigurations", + "ec2:ModifyVpcEndpointServicePermissions", + "ec2:RevokeSecurityGroupIngress", + "ram:AssociateResourceShare", + "ram:CreateResourceShare", + "ram:GetResourceShareAssociations", + "ram:GetResourceShares", + "ram:TagResource", + "ram:GetResourceShareInvitations", + "ram:AcceptResourceShareInvitation", + "ram:DisassociateResourceShare", + "tag:GetResources", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "refactor-spaces:GetEnvironment", + "refactor-spaces:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "refactor-spaces:GetEnvironment", + "refactor-spaces:DeleteEnvironment", + "refactor-spaces:UntagResource", + "ec2:DescribeTransitGateways", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:DeleteTransitGateway", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:DeleteTags", + "ram:GetResourceShareAssociations", + "ram:DeleteResourceShare" + ] + }, + "list": { + "permissions": [ + "refactor-spaces:ListEnvironments", + "refactor-spaces:ListTagsForResource" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/refactorspaces/route.json b/internal/aws/cfn/schemas/aws/refactorspaces/route.json new file mode 100644 index 00000000..855dedf6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/refactorspaces/route.json @@ -0,0 +1,296 @@ +{ + "typeName": "AWS::RefactorSpaces::Route", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-refactor-spaces", + "description": "Definition of AWS::RefactorSpaces::Route Resource Type", + "definitions": { + "RouteActivationState": { + "type": "string", + "enum": [ + "INACTIVE", + "ACTIVE" + ] + }, + "Method": { + "type": "string", + "enum": [ + "DELETE", + "GET", + "HEAD", + "OPTIONS", + "PATCH", + "POST", + "PUT" + ] + }, + "RouteType": { + "type": "string", + "enum": [ + "DEFAULT", + "URI_PATH" + ] + }, + "DefaultRouteInput": { + "type": "object", + "properties": { + "ActivationState": { + "$ref": "#/definitions/RouteActivationState" + } + }, + "required": [ + "ActivationState" + ], + "additionalProperties": false + }, + "UriPathRouteInput": { + "type": "object", + "properties": { + "SourcePath": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^(/([a-zA-Z0-9._:-]+|\\{[a-zA-Z0-9._:-]+\\}))+$" + }, + "ActivationState": { + "$ref": "#/definitions/RouteActivationState" + }, + "Methods": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Method" + } + }, + "IncludeChildPaths": { + "type": "boolean" + }, + "AppendSourcePath": { + "type": "boolean" + } + }, + "required": [ + "ActivationState" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A label for tagging Environment resource", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:).+" + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "PathResourceToId": { + "type": "string" + }, + "Arn": { + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:(aws[a-zA-Z-]*)?:refactor-spaces:[a-zA-Z0-9\\-]+:\\w{12}:[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "ApplicationIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^app-([0-9A-Za-z]{10}$)" + }, + "EnvironmentIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^env-([0-9A-Za-z]{10}$)" + }, + "RouteIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^rte-([0-9A-Za-z]{10}$)" + }, + "RouteType": { + "$ref": "#/definitions/RouteType" + }, + "ServiceIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^svc-([0-9A-Za-z]{10}$)" + }, + "DefaultRoute": { + "$ref": "#/definitions/DefaultRouteInput" + }, + "UriPathRoute": { + "$ref": "#/definitions/UriPathRouteInput" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair." + } + }, + "required": [ + "EnvironmentIdentifier", + "ApplicationIdentifier", + "ServiceIdentifier", + "RouteType" + ], + "readOnlyProperties": [ + "/properties/RouteIdentifier", + "/properties/PathResourceToId", + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/RouteType", + "/properties/ServiceIdentifier", + "/properties/DefaultRoute", + "/properties/UriPathRoute" + ], + "createOnlyProperties": [ + "/properties/ApplicationIdentifier", + "/properties/EnvironmentIdentifier", + "/properties/RouteType", + "/properties/ServiceIdentifier", + "/properties/UriPathRoute/SourcePath", + "/properties/UriPathRoute/Methods", + "/properties/UriPathRoute/IncludeChildPaths", + "/properties/UriPathRoute/AppendSourcePath" + ], + "primaryIdentifier": [ + "/properties/EnvironmentIdentifier", + "/properties/ApplicationIdentifier", + "/properties/RouteIdentifier" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "refactor-spaces:CreateRoute", + "refactor-spaces:GetRoute", + "refactor-spaces:TagResource", + "iam:CreateServiceLinkedRole", + "apigateway:GET", + "apigateway:PATCH", + "apigateway:POST", + "apigateway:PUT", + "apigateway:DELETE", + "apigateway:UpdateRestApiPolicy", + "lambda:GetFunctionConfiguration", + "lambda:AddPermission", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:CreateTargetGroup", + "elasticloadbalancing:DescribeTags", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:DescribeTargetHealth", + "ec2:DescribeSubnets", + "tag:GetResources" + ] + }, + "read": { + "permissions": [ + "refactor-spaces:GetRoute", + "refactor-spaces:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "refactor-spaces:DeleteRoute", + "refactor-spaces:GetRoute", + "refactor-spaces:UntagResource", + "apigateway:GET", + "apigateway:PATCH", + "apigateway:POST", + "apigateway:PUT", + "apigateway:DELETE", + "apigateway:UpdateRestApiPolicy", + "lambda:GetFunctionConfiguration", + "lambda:AddPermission", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:CreateTargetGroup", + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:DeleteTargetGroup", + "elasticloadbalancing:DescribeTags", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:DescribeTargetHealth", + "ec2:DescribeSubnets", + "tag:GetResources" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "EnvironmentIdentifier": { + "$ref": "resource-schema.json#/properties/EnvironmentIdentifier" + }, + "ApplicationIdentifier": { + "$ref": "resource-schema.json#/properties/ApplicationIdentifier" + } + }, + "required": [ + "EnvironmentIdentifier", + "ApplicationIdentifier" + ] + }, + "permissions": [ + "refactor-spaces:ListRoutes", + "refactor-spaces:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "refactor-spaces:UpdateRoute", + "refactor-spaces:GetRoute", + "refactor-spaces:TagResource", + "iam:CreateServiceLinkedRole", + "apigateway:GET", + "apigateway:PATCH", + "apigateway:POST", + "apigateway:PUT", + "apigateway:DELETE", + "apigateway:UpdateRestApiPolicy", + "lambda:GetFunctionConfiguration", + "lambda:AddPermission", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:CreateTargetGroup", + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:DeleteTargetGroup", + "elasticloadbalancing:DescribeTags", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:DescribeTargetHealth", + "ec2:DescribeSubnets", + "ec2:DescribeSubnets", + "tag:GetResources" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/refactorspaces/service.json b/internal/aws/cfn/schemas/aws/refactorspaces/service.json new file mode 100644 index 00000000..b96c5a8a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/refactorspaces/service.json @@ -0,0 +1,232 @@ +{ + "typeName": "AWS::RefactorSpaces::Service", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-refactor-spaces", + "description": "Definition of AWS::RefactorSpaces::Service Resource Type", + "definitions": { + "LambdaEndpointInput": { + "type": "object", + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$" + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "ServiceEndpointType": { + "type": "string", + "enum": [ + "LAMBDA", + "URL" + ] + }, + "UrlEndpointInput": { + "type": "object", + "properties": { + "HealthUrl": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^https?://[-a-zA-Z0-9+\\x38@#/%?=~_|!:,.;]*[-a-zA-Z0-9+\\x38@#/%=~_|]$" + }, + "Url": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^https?://[-a-zA-Z0-9+\\x38@#/%?=~_|!:,.;]*[-a-zA-Z0-9+\\x38@#/%=~_|]$" + } + }, + "required": [ + "Url" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A label for tagging Environment resource", + "type": "object", + "properties": { + "Key": { + "description": "A string used to identify this tag", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:).+" + }, + "Value": { + "description": "A string containing the value for the tag", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:(aws[a-zA-Z-]*)?:refactor-spaces:[a-zA-Z0-9\\-]+:\\w{12}:[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "ApplicationIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^app-([0-9A-Za-z]{10}$)" + }, + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-_\\s\\.\\!\\*\\#\\@\\']+$" + }, + "EndpointType": { + "$ref": "#/definitions/ServiceEndpointType" + }, + "EnvironmentIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^env-([0-9A-Za-z]{10}$)" + }, + "LambdaEndpoint": { + "$ref": "#/definitions/LambdaEndpointInput" + }, + "Name": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!svc-)[a-zA-Z0-9]+[a-zA-Z0-9-_ ]+$" + }, + "ServiceIdentifier": { + "type": "string", + "maxLength": 14, + "minLength": 14, + "pattern": "^svc-([0-9A-Za-z]{10}$)" + }, + "UrlEndpoint": { + "$ref": "#/definitions/UrlEndpointInput" + }, + "VpcId": { + "type": "string", + "maxLength": 21, + "minLength": 12, + "pattern": "^vpc-[-a-f0-9]{8}([-a-f0-9]{9})?$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair." + } + }, + "required": [ + "EnvironmentIdentifier", + "ApplicationIdentifier", + "EndpointType", + "Name" + ], + "readOnlyProperties": [ + "/properties/ServiceIdentifier", + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/Description", + "/properties/EndpointType", + "/properties/LambdaEndpoint", + "/properties/Name", + "/properties/UrlEndpoint", + "/properties/VpcId" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/EndpointType", + "/properties/EnvironmentIdentifier", + "/properties/ApplicationIdentifier", + "/properties/LambdaEndpoint", + "/properties/Name", + "/properties/UrlEndpoint", + "/properties/VpcId" + ], + "primaryIdentifier": [ + "/properties/EnvironmentIdentifier", + "/properties/ApplicationIdentifier", + "/properties/ServiceIdentifier" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "refactor-spaces:CreateService", + "refactor-spaces:GetService", + "refactor-spaces:TagResource", + "ec2:DescribeVpcs", + "ec2:DescribeSubnets", + "ec2:DescribeRouteTables", + "ec2:CreateTags", + "ec2:CreateTransitGatewayVpcAttachment", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:CreateSecurityGroup", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:CreateRoute", + "lambda:GetFunctionConfiguration" + ] + }, + "read": { + "permissions": [ + "refactor-spacess:GetService", + "refactor-spaces:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "refactor-spaces:DeleteService", + "refactor-spaces:GetService", + "refactor-spaces:UntagResource", + "ram:DisassociateResourceShare", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeRouteTables", + "ec2:DescribeTransitGatewayVpcAttachments", + "ec2:DescribeSecurityGroups", + "ec2:DeleteSecurityGroup", + "ec2:DeleteRoute", + "ec2:RevokeSecurityGroupIngress", + "ec2:DeleteTransitGatewayVpcAttachment", + "ec2:DeleteTags" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "EnvironmentIdentifier": { + "$ref": "resource-schema.json#/properties/EnvironmentIdentifier" + }, + "ApplicationIdentifier": { + "$ref": "resource-schema.json#/properties/ApplicationIdentifier" + } + }, + "required": [ + "EnvironmentIdentifier", + "ApplicationIdentifier" + ] + }, + "permissions": [ + "refactor-spaces:ListServices", + "refactor-spaces:ListTagsForResource" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/rekognition/collection.json b/internal/aws/cfn/schemas/aws/rekognition/collection.json new file mode 100644 index 00000000..978c42a9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rekognition/collection.json @@ -0,0 +1,109 @@ +{ + "typeName": "AWS::Rekognition::Collection", + "description": "The AWS::Rekognition::Collection type creates an Amazon Rekognition Collection. A collection is a logical grouping of information about detected faces which can later be referenced for searches on the group", + "sourceUrl": "https://docs.aws.amazon.com/rekognition/latest/dg/collections.html", + "definitions": { + "Arn": { + "$comment": "Use the `definitions` block to provide shared resource property schemas", + "type": "string", + "maxLength": 2048, + "format": "(^arn:[a-z\\d-]+:rekognition:[a-z\\d-]+:\\d{12}:collection\\/([a-zA-Z0-9_.\\-]+){1,255})" + }, + "CollectionId": { + "description": "The name of the collection", + "type": "string", + "maxLength": 255, + "pattern": "\\A[a-zA-Z0-9_\\.\\-]+$" + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "maxLength": 128, + "pattern": "\\A(?!aws:)[a-zA-Z0-9+\\-=\\._\\:\\/@]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "maxLength": 256, + "pattern": "\\A[a-zA-Z0-9+\\-=\\._\\:\\/@]+$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "CollectionId": { + "$ref": "#/definitions/CollectionId" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "taggable": true, + "additionalProperties": false, + "required": [ + "CollectionId" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/CollectionId" + ], + "primaryIdentifier": [ + "/properties/CollectionId" + ], + "handlers": { + "create": { + "permissions": [ + "rekognition:CreateCollection", + "rekognition:DescribeCollection", + "rekognition:ListTagsForResource", + "rekognition:TagResource" + ] + }, + "read": { + "permissions": [ + "rekognition:DescribeCollection", + "rekognition:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rekognition:TagResource", + "rekognition:UntagResource", + "rekognition:DescribeCollection", + "rekognition:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "rekognition:DeleteCollection" + ] + }, + "list": { + "permissions": [ + "rekognition:ListCollections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rekognition/project.json b/internal/aws/cfn/schemas/aws/rekognition/project.json new file mode 100644 index 00000000..4431d1cc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rekognition/project.json @@ -0,0 +1,71 @@ +{ + "typeName": "AWS::Rekognition::Project", + "description": "The AWS::Rekognition::Project type creates an Amazon Rekognition CustomLabels Project. A project is a grouping of the resources needed to create and manage Dataset and ProjectVersions.", + "sourceUrl": "https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/cp-manage-project.html", + "definitions": { + "Arn": { + "type": "string", + "maxLength": 2048, + "pattern": "(^arn:[a-z\\d-]+:rekognition:[a-z\\d-]+:\\d{12}:project/[a-zA-Z0-9_.\\-]{1,255}/[0-9]+$)" + }, + "ProjectName": { + "description": "The name of the project", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[a-zA-Z0-9][a-zA-Z0-9_\\-]*" + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "ProjectName": { + "$ref": "#/definitions/ProjectName" + } + }, + "additionalProperties": false, + "required": [ + "ProjectName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ProjectName" + ], + "primaryIdentifier": [ + "/properties/ProjectName" + ], + "handlers": { + "create": { + "permissions": [ + "rekognition:CreateProject" + ], + "timeoutInMinutes": 15 + }, + "read": { + "permissions": [ + "rekognition:DescribeProjects" + ], + "timeoutInMinutes": 15 + }, + "update": { + "permissions": [], + "timeoutInMinutes": 15 + }, + "delete": { + "permissions": [ + "rekognition:DescribeProjects", + "rekognition:DeleteProject" + ], + "timeoutInMinutes": 15 + }, + "list": { + "permissions": [ + "rekognition:DescribeProjects" + ], + "timeoutInMinutes": 15 + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rekognition/streamprocessor.json b/internal/aws/cfn/schemas/aws/rekognition/streamprocessor.json new file mode 100644 index 00000000..c6acdf1f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rekognition/streamprocessor.json @@ -0,0 +1,395 @@ +{ + "typeName": "AWS::Rekognition::StreamProcessor", + "description": "The AWS::Rekognition::StreamProcessor type is used to create an Amazon Rekognition StreamProcessor that you can use to analyze streaming videos.\n\n", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "description": "The ARN of the stream processor", + "type": "string", + "maxLength": 2048 + }, + "KinesisVideoStream": { + "description": "The Kinesis Video Stream that streams the source video.", + "type": "object", + "properties": { + "Arn": { + "description": "ARN of the Kinesis Video Stream that streams the source video.", + "type": "string", + "maxLength": 2048, + "pattern": "(^arn:([a-z\\d-]+):kinesisvideo:([a-z\\d-]+):\\d{12}:.+$)" + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "S3Destination": { + "description": "The S3 location in customer's account where inference output & artifacts are stored, as part of connected home feature.", + "type": "object", + "properties": { + "BucketName": { + "description": "Name of the S3 bucket.", + "type": "string", + "maxLength": 63 + }, + "ObjectKeyPrefix": { + "description": "The object key prefix path where the results will be stored. Default is no prefix path", + "type": "string", + "maxLength": 256 + } + }, + "required": [ + "BucketName" + ], + "additionalProperties": false + }, + "KinesisDataStream": { + "description": "The Amazon Kinesis Data Stream stream to which the Amazon Rekognition stream processor streams the analysis results, as part of face search feature.", + "type": "object", + "properties": { + "Arn": { + "description": "ARN of the Kinesis Data Stream stream.", + "type": "string", + "maxLength": 2048, + "pattern": "(^arn:([a-z\\d-]+):kinesis:([a-z\\d-]+):\\d{12}:.+$)" + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "Labels": { + "description": "List of labels that need to be detected in the video stream. Current supported values are PERSON, PET, PACKAGE, ALL.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 1, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "ConnectedHomeSettings": { + "description": "Connected home settings to use on a streaming video. Note that either ConnectedHomeSettings or FaceSearchSettings should be set. Not both", + "type": "object", + "properties": { + "Labels": { + "$ref": "#/definitions/Labels" + }, + "MinConfidence": { + "description": "Minimum object class match confidence score that must be met to return a result for a recognized object.", + "type": "number", + "minimum": 0, + "maximum": 100 + } + }, + "required": [ + "Labels" + ], + "additionalProperties": false + }, + "FaceSearchSettings": { + "description": "Face search settings to use on a streaming video. Note that either FaceSearchSettings or ConnectedHomeSettings should be set. Not both", + "type": "object", + "properties": { + "CollectionId": { + "description": "The ID of a collection that contains faces that you want to search for.", + "type": "string", + "maxLength": 255, + "pattern": "\\A[a-zA-Z0-9_\\.\\-]+$" + }, + "FaceMatchThreshold": { + "description": "Minimum face match confidence score percentage that must be met to return a result for a recognized face. The default is 80. 0 is the lowest confidence. 100 is the highest confidence. Values between 0 and 100 are accepted.", + "type": "number", + "minimum": 0, + "maximum": 100 + } + }, + "required": [ + "CollectionId" + ], + "additionalProperties": false + }, + "NotificationChannel": { + "description": "The ARN of the SNS notification channel where events of interests are published, as part of connected home feature.", + "type": "object", + "properties": { + "Arn": { + "description": "ARN of the SNS topic.", + "type": "string", + "maxLength": 2048 + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "Point": { + "description": "An (X, Y) cartesian coordinate denoting a point on the frame", + "type": "object", + "properties": { + "X": { + "description": "The X coordinate of the point.", + "type": "number" + }, + "Y": { + "description": "The Y coordinate of the point.", + "type": "number" + } + }, + "required": [ + "X", + "Y" + ], + "additionalProperties": false + }, + "Polygon": { + "description": "A polygon showing a region of interest. Note that the ordering of the Point entries matter in defining the polygon", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "minItems": 3, + "items": { + "$ref": "#/definitions/Point" + } + }, + "BoundingBox": { + "description": "A bounding box denoting a region of interest in the frame to be analyzed.", + "type": "object", + "properties": { + "Height": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "Width": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "Left": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "Top": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + }, + "required": [ + "Height", + "Width", + "Left", + "Top" + ], + "additionalProperties": false + }, + "DataSharingPreference": { + "description": "Indicates whether Rekognition is allowed to store the video stream data for model-training.", + "properties": { + "OptIn": { + "description": "Flag to enable data-sharing", + "type": "boolean" + } + }, + "required": [ + "OptIn" + ], + "type": "object", + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "\\A(?!aws:)[a-zA-Z0-9+\\-=\\._\\:\\/@]+$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256, + "pattern": "\\A[a-zA-Z0-9+\\-=\\._\\:\\/@]+$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Name": { + "description": "Name of the stream processor. It's an identifier you assign to the stream processor. You can use it to manage the stream processor.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[a-zA-Z0-9_.\\-]+" + }, + "KmsKeyId": { + "description": "The KMS key that is used by Rekognition to encrypt any intermediate customer metadata and store in the customer's S3 bucket.", + "type": "string" + }, + "RoleArn": { + "description": "ARN of the IAM role that allows access to the stream processor, and provides Rekognition read permissions for KVS stream and write permissions to S3 bucket and SNS topic.", + "type": "string", + "maxLength": 2048, + "pattern": "arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*" + }, + "KinesisVideoStream": { + "$ref": "#/definitions/KinesisVideoStream" + }, + "FaceSearchSettings": { + "$ref": "#/definitions/FaceSearchSettings" + }, + "ConnectedHomeSettings": { + "$ref": "#/definitions/ConnectedHomeSettings" + }, + "KinesisDataStream": { + "$ref": "#/definitions/KinesisDataStream" + }, + "S3Destination": { + "$ref": "#/definitions/S3Destination" + }, + "NotificationChannel": { + "$ref": "#/definitions/NotificationChannel" + }, + "DataSharingPreference": { + "$ref": "#/definitions/DataSharingPreference" + }, + "PolygonRegionsOfInterest": { + "description": "The PolygonRegionsOfInterest specifies a set of polygon areas of interest in the video frames to analyze, as part of connected home feature. Each polygon is in turn, an ordered list of Point", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "items": { + "$ref": "#/definitions/Polygon" + } + }, + "BoundingBoxRegionsOfInterest": { + "description": "The BoundingBoxRegionsOfInterest specifies an array of bounding boxes of interest in the video frames to analyze, as part of connected home feature. If an object is partially in a region of interest, Rekognition will tag it as detected if the overlap of the object with the region-of-interest is greater than 20%.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "items": { + "$ref": "#/definitions/BoundingBox" + } + }, + "Status": { + "description": "Current status of the stream processor.", + "type": "string" + }, + "StatusMessage": { + "description": "Detailed status message about the stream processor.", + "type": "string" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "taggable": true, + "additionalProperties": false, + "required": [ + "RoleArn", + "KinesisVideoStream" + ], + "oneOf": [ + { + "required": [ + "ConnectedHomeSettings", + "S3Destination", + "NotificationChannel" + ] + }, + { + "required": [ + "FaceSearchSettings", + "KinesisDataStream" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Status", + "/properties/StatusMessage" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/KmsKeyId", + "/properties/RoleArn", + "/properties/KinesisVideoStream", + "/properties/ConnectedHomeSettings", + "/properties/FaceSearchSettings", + "/properties/KinesisDataStream", + "/properties/S3Destination", + "/properties/NotificationChannel", + "/properties/BoundingBoxRegionsOfInterest", + "/properties/PolygonRegionsOfInterest", + "/properties/DataSharingPreference" + ], + "$comment": "We explicitly specify the replacement strategy to be delete_then_create because we cannot create a new SP resource with the same name or same KVS input before deleting the old one", + "replacementStrategy": "delete_then_create", + "handlers": { + "create": { + "permissions": [ + "rekognition:CreateStreamProcessor", + "iam:PassRole", + "rekognition:DescribeStreamProcessor", + "rekognition:ListTagsForResource", + "rekognition:TagResource" + ] + }, + "read": { + "permissions": [ + "rekognition:DescribeStreamProcessor", + "rekognition:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rekognition:TagResource", + "rekognition:UntagResource", + "rekognition:ListTagsForResource", + "rekognition:DescribeStreamProcessor" + ] + }, + "delete": { + "permissions": [ + "rekognition:DeleteStreamProcessor" + ] + }, + "list": { + "permissions": [ + "rekognition:ListStreamProcessors" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/resiliencehub/app.json b/internal/aws/cfn/schemas/aws/resiliencehub/app.json new file mode 100644 index 00000000..76b0798b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/resiliencehub/app.json @@ -0,0 +1,307 @@ +{ + "typeName": "AWS::ResilienceHub::App", + "description": "Resource Type Definition for AWS::ResilienceHub::App.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-resiliencehub", + "definitions": { + "TagValue": { + "type": "string", + "maxLength": 256 + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".{1,128}": { + "$ref": "#/definitions/TagValue" + } + }, + "additionalProperties": false + }, + "PhysicalResourceId": { + "type": "object", + "additionalProperties": false, + "properties": { + "AwsAccountId": { + "type": "string", + "pattern": "^[0-9]{12}$" + }, + "AwsRegion": { + "type": "string", + "pattern": "^[a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]$" + }, + "Identifier": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Type": { + "type": "string", + "pattern": "Arn|Native" + } + }, + "required": [ + "Identifier", + "Type" + ] + }, + "ResourceMapping": { + "description": "Resource mapping is used to map logical resources from template to physical resource", + "type": "object", + "additionalProperties": false, + "properties": { + "LogicalStackName": { + "type": "string" + }, + "MappingType": { + "type": "string", + "pattern": "CfnStack|Resource|Terraform|EKS" + }, + "ResourceName": { + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$" + }, + "TerraformSourceName": { + "type": "string" + }, + "EksSourceName": { + "type": "string" + }, + "PhysicalResourceId": { + "$ref": "#/definitions/PhysicalResourceId" + } + }, + "required": [ + "MappingType", + "PhysicalResourceId" + ] + }, + "IamRoleArn": { + "type": "string", + "pattern": "arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):iam::[0-9]{12}:role\\/(([\\u0021-\\u007E]+\\u002F){1,511})?[A-Za-z0-9+=,.@_/-]{1,64}$" + }, + "PermissionModel": { + "description": "Defines the roles and credentials that AWS Resilience Hub would use while creating the application, importing its resources, and running an assessment.", + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "description": "Defines how AWS Resilience Hub scans your resources. It can scan for the resources by using a pre-existing role in your AWS account, or by using the credentials of the current IAM user.", + "type": "string", + "enum": [ + "LegacyIAMUser", + "RoleBased" + ] + }, + "InvokerRoleName": { + "description": "Existing AWS IAM role name in the primary AWS account that will be assumed by AWS Resilience Hub Service Principle to obtain a read-only access to your application resources while running an assessment.", + "type": "string", + "pattern": "((\\u002F[\\u0021-\\u007E]+\\u002F){1,511})?[A-Za-z0-9+=,.@_/-]{1,64}" + }, + "CrossAccountRoleArns": { + "description": "Defines a list of role Amazon Resource Names (ARNs) to be used in other accounts. These ARNs are used for querying purposes while importing resources and assessing your application.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/IamRoleArn" + } + } + }, + "required": [ + "Type" + ] + }, + "EventSubscription": { + "description": "Indicates an event you would like to subscribe and get notification for.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "Unique name to identify an event subscription.", + "type": "string", + "maxLength": 256 + }, + "EventType": { + "description": "The type of event you would like to subscribe and get notification for.", + "type": "string", + "enum": [ + "ScheduledAssessmentFailure", + "DriftDetected" + ] + }, + "SnsTopicArn": { + "description": "Amazon Resource Name (ARN) of the Amazon Simple Notification Service topic.", + "type": "string", + "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9/][A-Za-z0-9:_/+.-]{0,1023}$" + } + }, + "required": [ + "Name", + "EventType" + ] + } + }, + "properties": { + "Name": { + "description": "Name of the app.", + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$" + }, + "Description": { + "description": "App description.", + "type": "string", + "minLength": 0, + "maxLength": 500 + }, + "AppArn": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the App.", + "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "ResiliencyPolicyArn": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the Resiliency Policy.", + "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + }, + "AppTemplateBody": { + "description": "A string containing full ResilienceHub app template body.", + "type": "string", + "minLength": 0, + "maxLength": 409600, + "pattern": "^[\\w\\s:,-\\.'\\/{}\\[\\]:\"]+$" + }, + "ResourceMappings": { + "description": "An array of ResourceMapping objects.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ResourceMapping" + } + }, + "AppAssessmentSchedule": { + "description": "Assessment execution schedule.", + "type": "string", + "enum": [ + "Disabled", + "Daily" + ] + }, + "PermissionModel": { + "$ref": "#/definitions/PermissionModel" + }, + "EventSubscriptions": { + "description": "The list of events you would like to subscribe and get notification for.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/EventSubscription" + } + }, + "DriftStatus": { + "description": "Indicates if compliance drifts (deviations) were detected while running an assessment for your application.", + "type": "string", + "enum": [ + "NotChecked", + "NotDetected", + "Detected" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "Name", + "AppTemplateBody", + "ResourceMappings" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/AppArn", + "/properties/DriftStatus" + ], + "primaryIdentifier": [ + "/properties/AppArn" + ], + "handlers": { + "create": { + "permissions": [ + "cloudformation:DescribeStacks", + "cloudformation:ListStackResources", + "s3:GetBucketLocation", + "s3:GetObject", + "s3:ListAllMyBuckets", + "autoscaling:DescribeAutoScalingGroups", + "apigateway:GET", + "ec2:Describe*", + "ecs:DescribeServices", + "eks:DescribeCluster", + "elasticfilesystem:DescribeFileSystems", + "elasticloadbalancing:DescribeLoadBalancers", + "lambda:GetFunction*", + "rds:Describe*", + "dynamodb:Describe*", + "sqs:GetQueueAttributes", + "sns:GetTopicAttributes", + "route53:List*", + "iam:PassRole", + "resiliencehub:*" + ] + }, + "read": { + "permissions": [ + "resiliencehub:DescribeApp", + "resiliencehub:DescribeAppVersionTemplate", + "resiliencehub:ListAppVersionResourceMappings", + "resiliencehub:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "cloudformation:DescribeStacks", + "cloudformation:ListStackResources", + "s3:GetBucketLocation", + "s3:GetObject", + "s3:ListAllMyBuckets", + "autoscaling:DescribeAutoScalingGroups", + "apigateway:GET", + "ec2:Describe*", + "ecs:DescribeServices", + "eks:DescribeCluster", + "elasticfilesystem:DescribeFileSystems", + "elasticloadbalancing:DescribeLoadBalancers", + "lambda:GetFunction*", + "rds:Describe*", + "dynamodb:Describe*", + "sqs:GetQueueAttributes", + "sns:GetTopicAttributes", + "route53:List*", + "iam:PassRole", + "resiliencehub:*" + ] + }, + "delete": { + "permissions": [ + "resiliencehub:DeleteApp", + "resiliencehub:UntagResource", + "resiliencehub:ListApps" + ] + }, + "list": { + "permissions": [ + "resiliencehub:ListApps" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/resiliencehub/resiliencypolicy.json b/internal/aws/cfn/schemas/aws/resiliencehub/resiliencypolicy.json new file mode 100644 index 00000000..785959af --- /dev/null +++ b/internal/aws/cfn/schemas/aws/resiliencehub/resiliencypolicy.json @@ -0,0 +1,145 @@ +{ + "typeName": "AWS::ResilienceHub::ResiliencyPolicy", + "description": "Resource Type Definition for Resiliency Policy.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-resiliencehub", + "definitions": { + "FailurePolicy": { + "description": "Failure Policy.", + "type": "object", + "properties": { + "RtoInSecs": { + "description": "RTO in seconds.", + "type": "integer" + }, + "RpoInSecs": { + "description": "RPO in seconds.", + "type": "integer" + } + }, + "required": [ + "RtoInSecs", + "RpoInSecs" + ], + "additionalProperties": false + }, + "PolicyMap": { + "type": "object", + "patternProperties": { + ".*{1,8}": { + "$ref": "#/definitions/FailurePolicy" + } + }, + "additionalProperties": false + }, + "TagValue": { + "type": "string", + "maxLength": 256 + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".{1,128}": { + "$ref": "#/definitions/TagValue" + } + }, + "additionalProperties": false + } + }, + "properties": { + "PolicyName": { + "description": "Name of Resiliency Policy.", + "type": "string", + "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$" + }, + "PolicyDescription": { + "description": "Description of Resiliency Policy.", + "type": "string", + "maxLength": 500 + }, + "DataLocationConstraint": { + "type": "string", + "description": "Data Location Constraint of the Policy.", + "enum": [ + "AnyLocation", + "SameContinent", + "SameCountry" + ] + }, + "Tier": { + "type": "string", + "description": "Resiliency Policy Tier.", + "enum": [ + "MissionCritical", + "Critical", + "Important", + "CoreServices", + "NonCritical" + ] + }, + "Policy": { + "$ref": "#/definitions/PolicyMap" + }, + "PolicyArn": { + "type": "string", + "description": "Amazon Resource Name (ARN) of the Resiliency Policy.", + "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "required": [ + "PolicyName", + "Tier", + "Policy" + ], + "readOnlyProperties": [ + "/properties/PolicyArn" + ], + "primaryIdentifier": [ + "/properties/PolicyArn" + ], + "handlers": { + "create": { + "permissions": [ + "resiliencehub:CreateResiliencyPolicy", + "resiliencehub:DescribeResiliencyPolicy", + "resiliencehub:TagResource" + ] + }, + "update": { + "permissions": [ + "resiliencehub:DescribeResiliencyPolicy", + "resiliencehub:UpdateResiliencyPolicy", + "resiliencehub:TagResource", + "resiliencehub:UntagResource", + "resiliencehub:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "resiliencehub:DescribeResiliencyPolicy", + "resiliencehub:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "resiliencehub:DeleteResiliencyPolicy", + "resiliencehub:UntagResource" + ] + }, + "list": { + "permissions": [ + "resiliencehub:ListResiliencyPolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/resourceexplorer2/defaultviewassociation.json b/internal/aws/cfn/schemas/aws/resourceexplorer2/defaultviewassociation.json new file mode 100644 index 00000000..e295af41 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/resourceexplorer2/defaultviewassociation.json @@ -0,0 +1,52 @@ +{ + "typeName": "AWS::ResourceExplorer2::DefaultViewAssociation", + "description": "Definition of AWS::ResourceExplorer2::DefaultViewAssociation Resource Type", + "properties": { + "ViewArn": { + "type": "string" + }, + "AssociatedAwsPrincipal": { + "description": "The AWS principal that the default view is associated with, used as the unique identifier for this resource.", + "type": "string", + "pattern": "^[0-9]{12}$" + } + }, + "tagging": { + "taggable": false + }, + "required": [ + "ViewArn" + ], + "primaryIdentifier": [ + "/properties/AssociatedAwsPrincipal" + ], + "readOnlyProperties": [ + "/properties/AssociatedAwsPrincipal" + ], + "handlers": { + "create": { + "permissions": [ + "resource-explorer-2:GetDefaultView", + "resource-explorer-2:AssociateDefaultView" + ] + }, + "update": { + "permissions": [ + "resource-explorer-2:GetDefaultView", + "resource-explorer-2:AssociateDefaultView" + ] + }, + "read": { + "permissions": [ + "resource-explorer-2:GetDefaultView" + ] + }, + "delete": { + "permissions": [ + "resource-explorer-2:GetDefaultView", + "resource-explorer-2:DisassociateDefaultView" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/resourceexplorer2/index.json b/internal/aws/cfn/schemas/aws/resourceexplorer2/index.json new file mode 100644 index 00000000..21211e26 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/resourceexplorer2/index.json @@ -0,0 +1,102 @@ +{ + "typeName": "AWS::ResourceExplorer2::Index", + "description": "Definition of AWS::ResourceExplorer2::Index Resource Type", + "definitions": { + "IndexType": { + "type": "string", + "enum": [ + "LOCAL", + "AGGREGATOR" + ] + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + }, + "IndexState": { + "type": "string", + "enum": [ + "ACTIVE", + "CREATING", + "DELETING", + "DELETED", + "UPDATING" + ] + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + }, + "Type": { + "$ref": "#/definitions/IndexType" + }, + "IndexState": { + "$ref": "#/definitions/IndexState" + } + }, + "required": [ + "Type" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/IndexState" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "resource-explorer-2:CreateIndex", + "resource-explorer-2:GetIndex", + "resource-explorer-2:TagResource", + "resource-explorer-2:UpdateIndexType", + "resource-explorer-2:DeleteIndex", + "iam:CreateServiceLinkedRole" + ] + }, + "update": { + "permissions": [ + "resource-explorer-2:GetIndex", + "resource-explorer-2:UpdateIndexType", + "resource-explorer-2:TagResource", + "resource-explorer-2:UntagResource", + "resource-explorer-2:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "resource-explorer-2:DeleteIndex", + "resource-explorer-2:GetIndex", + "resource-explorer-2:UntagResource" + ] + }, + "list": { + "permissions": [ + "resource-explorer-2:ListIndexes" + ] + }, + "read": { + "permissions": [ + "resource-explorer-2:GetIndex" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "cloudFormationSystemTags": false, + "tagUpdatable": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/resourceexplorer2/view.json b/internal/aws/cfn/schemas/aws/resourceexplorer2/view.json new file mode 100644 index 00000000..6d0f3251 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/resourceexplorer2/view.json @@ -0,0 +1,121 @@ +{ + "typeName": "AWS::ResourceExplorer2::View", + "description": "Definition of AWS::ResourceExplorer2::View Resource Type", + "definitions": { + "IncludedProperty": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 1011, + "minLength": 1 + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "SearchFilter": { + "type": "object", + "properties": { + "FilterString": { + "type": "string", + "maxLength": 2048, + "minLength": 0 + } + }, + "required": [ + "FilterString" + ], + "additionalProperties": false + }, + "TagMap": { + "type": "object", + "patternProperties": { + ".+": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Filters": { + "$ref": "#/definitions/SearchFilter" + }, + "IncludedProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/IncludedProperty" + } + }, + "Scope": { + "type": "string" + }, + "Tags": { + "$ref": "#/definitions/TagMap" + }, + "ViewArn": { + "type": "string" + }, + "ViewName": { + "type": "string", + "pattern": "^[a-zA-Z0-9\\-]{1,64}$" + } + }, + "required": [ + "ViewName" + ], + "readOnlyProperties": [ + "/properties/ViewArn" + ], + "createOnlyProperties": [ + "/properties/Scope", + "/properties/ViewName" + ], + "primaryIdentifier": [ + "/properties/ViewArn" + ], + "handlers": { + "create": { + "permissions": [ + "resource-explorer-2:CreateView", + "resource-explorer-2:TagResource" + ] + }, + "read": { + "permissions": [ + "resource-explorer-2:GetView" + ] + }, + "update": { + "permissions": [ + "resource-explorer-2:UpdateView", + "resource-explorer-2:TagResource", + "resource-explorer-2:UntagResource", + "resource-explorer-2:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "resource-explorer-2:DeleteView", + "resource-explorer-2:GetView", + "resource-explorer-2:UntagResource" + ] + }, + "list": { + "permissions": [ + "resource-explorer-2:ListViews" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "cloudFormationSystemTags": false, + "tagUpdatable": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/resourcegroups/group.json b/internal/aws/cfn/schemas/aws/resourcegroups/group.json new file mode 100644 index 00000000..1902baa3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/resourcegroups/group.json @@ -0,0 +1,209 @@ +{ + "typeName": "AWS::ResourceGroups::Group", + "description": "Schema for ResourceGroups::Group", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "ResourceQuery": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "TAG_FILTERS_1_0", + "CLOUDFORMATION_STACK_1_0" + ] + }, + "Query": { + "$ref": "#/definitions/Query" + } + }, + "additionalProperties": false + }, + "Query": { + "type": "object", + "properties": { + "ResourceTypeFilters": { + "type": "array", + "items": { + "type": "string" + } + }, + "StackIdentifier": { + "type": "string" + }, + "TagFilters": { + "type": "array", + "items": { + "$ref": "#/definitions/TagFilter" + } + } + }, + "additionalProperties": false + }, + "TagFilter": { + "type": "object", + "properties": { + "Key": { + "type": "string" + }, + "Values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:).+" + }, + "Value": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Configuration": { + "type": "array", + "items": { + "$ref": "#/definitions/ConfigurationItem" + } + }, + "ConfigurationItem": { + "type": "object", + "properties": { + "Type": { + "type": "string" + }, + "Parameters": { + "type": "array", + "items": { + "$ref": "#/definitions/ConfigurationParameter" + } + } + }, + "additionalProperties": false + }, + "ConfigurationParameter": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Values": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the resource group", + "type": "string", + "maxLength": 128 + }, + "Description": { + "description": "The description of the resource group", + "type": "string", + "maxLength": 512 + }, + "ResourceQuery": { + "$ref": "#/definitions/ResourceQuery" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "The Resource Group ARN.", + "type": "string" + }, + "Configuration": { + "$ref": "#/definitions/Configuration" + }, + "Resources": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "resource-groups:CreateGroup", + "resource-groups:Tag", + "cloudformation:DescribeStacks", + "cloudformation:ListStackResources", + "resource-groups:ListGroupResources", + "resource-groups:GroupResources" + ] + }, + "read": { + "permissions": [ + "resource-groups:GetGroup", + "resource-groups:GetGroupQuery", + "resource-groups:GetTags", + "resource-groups:GetGroupConfiguration", + "resource-groups:ListGroupResources" + ] + }, + "update": { + "permissions": [ + "resource-groups:UpdateGroup", + "resource-groups:GetTags", + "resource-groups:GetGroupQuery", + "resource-groups:UpdateGroupQuery", + "resource-groups:Tag", + "resource-groups:Untag", + "resource-groups:PutGroupConfiguration", + "resource-groups:GetGroupConfiguration", + "resource-groups:ListGroupResources", + "resource-groups:GroupResources", + "resource-groups:UnGroupResources" + ] + }, + "delete": { + "permissions": [ + "resource-groups:DeleteGroup", + "resource-groups:UnGroupResources" + ] + }, + "list": { + "permissions": [ + "resource-groups:ListGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/robomaker/fleet.json b/internal/aws/cfn/schemas/aws/robomaker/fleet.json new file mode 100644 index 00000000..450f8dc8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/robomaker/fleet.json @@ -0,0 +1,78 @@ +{ + "typeName": "AWS::RoboMaker::Fleet", + "description": "AWS::RoboMaker::Fleet resource creates an AWS RoboMaker fleet. Fleets contain robots and can receive deployments.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-robomaker.git", + "additionalProperties": false, + "definitions": { + "Arn": { + "type": "string", + "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*" + }, + "Tags": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-zA-Z0-9-]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 256 + } + } + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "Name": { + "description": "The name of the fleet.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[a-zA-Z0-9_\\-]{1,255}$" + } + }, + "handlers": { + "create": { + "permissions": [ + "robomaker:CreateFleet" + ] + }, + "read": { + "permissions": [ + "robomaker:DescribeFleet" + ] + }, + "delete": { + "permissions": [ + "robomaker:DeleteFleet" + ] + }, + "update": { + "permissions": [ + "robomaker:TagResource", + "robomaker:UntagResource" + ] + }, + "list": { + "permissions": [ + "robomaker:ListFleets" + ] + } + }, + "required": [], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/robomaker/robot.json b/internal/aws/cfn/schemas/aws/robomaker/robot.json new file mode 100644 index 00000000..283a5331 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/robomaker/robot.json @@ -0,0 +1,107 @@ +{ + "typeName": "AWS::RoboMaker::Robot", + "description": "AWS::RoboMaker::Robot resource creates an AWS RoboMaker Robot.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-robomaker.git", + "additionalProperties": false, + "definitions": { + "Arn": { + "type": "string", + "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*" + }, + "Tags": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-zA-Z0-9-]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 256 + } + } + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Fleet": { + "description": "The Amazon Resource Name (ARN) of the fleet.", + "type": "string", + "minLength": 1, + "maxLength": 1224 + }, + "Architecture": { + "description": "The target architecture of the robot.", + "type": "string", + "enum": [ + "X86_64", + "ARM64", + "ARMHF" + ] + }, + "GreengrassGroupId": { + "description": "The Greengrass group id.", + "type": "string", + "minLength": 1, + "maxLength": 1224 + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "Name": { + "description": "The name for the robot.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "GreengrassGroupId", + "Architecture" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/GreengrassGroupId", + "/properties/Name", + "/properties/Architecture", + "/properties/Fleet" + ], + "handlers": { + "create": { + "permissions": [ + "robomaker:CreateRobot", + "robomaker:RegisterRobot" + ] + }, + "read": { + "permissions": [ + "robomaker:DescribeRobot" + ] + }, + "delete": { + "permissions": [ + "robomaker:DescribeRobot", + "robomaker:DeleteRobot", + "robomaker:DeregisterRobot" + ] + }, + "list": { + "permissions": [ + "robomaker:ListRobots" + ] + }, + "update": { + "permissions": [ + "robomaker:TagResource", + "robomaker:UntagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/robomaker/robotapplication.json b/internal/aws/cfn/schemas/aws/robomaker/robotapplication.json new file mode 100644 index 00000000..9fb5d01c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/robomaker/robotapplication.json @@ -0,0 +1,175 @@ +{ + "typeName": "AWS::RoboMaker::RobotApplication", + "description": "This schema is for testing purpose only.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "type": "string", + "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*" + }, + "Tags": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-zA-Z0-9-]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 256 + } + } + }, + "SourceConfig": { + "type": "object", + "properties": { + "S3Bucket": { + "type": "string", + "description": "The Arn of the S3Bucket that stores the robot application source." + }, + "S3Key": { + "type": "string", + "description": "The s3 key of robot application source." + }, + "Architecture": { + "type": "string", + "description": "The architecture of robot application.", + "minLength": 1, + "maxLength": 255, + "enum": [ + "X86_64", + "ARM64", + "ARMHF" + ] + } + }, + "required": [ + "S3Bucket", + "S3Key", + "Architecture" + ], + "additionalProperties": false + }, + "RobotSoftwareSuite": { + "description": "The robot software suite used by the robot application.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of robot software suite.", + "enum": [ + "ROS", + "ROS2", + "General" + ] + }, + "Version": { + "type": "string", + "description": "The version of robot software suite.", + "enum": [ + "Kinetic", + "Melodic", + "Dashing" + ] + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the robot application.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Sources": { + "description": "The sources of the robot application.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SourceConfig" + } + }, + "Environment": { + "description": "The URI of the Docker image for the robot application.", + "type": "string" + }, + "RobotSoftwareSuite": { + "$ref": "#/definitions/RobotSoftwareSuite" + }, + "CurrentRevisionId": { + "description": "The revision ID of robot application.", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "additionalProperties": false, + "required": [ + "RobotSoftwareSuite" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/RobotSoftwareSuite/Version", + "/properties/Sources" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "robomaker:CreateRobotApplication", + "robomaker:TagResource", + "robomaker:UntagResource", + "ecr:BatchGetImage", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr-public:GetAuthorizationToken", + "sts:GetServiceBearerToken" + ] + }, + "read": { + "permissions": [ + "robomaker:DescribeRobotApplication" + ] + }, + "update": { + "permissions": [ + "robomaker:TagResource", + "robomaker:UntagResource", + "robomaker:UpdateRobotApplication", + "ecr:BatchGetImage", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr-public:GetAuthorizationToken" + ] + }, + "delete": { + "permissions": [ + "robomaker:DescribeRobotApplication", + "robomaker:DeleteRobotApplication" + ] + }, + "list": { + "permissions": [ + "robomaker:ListRobotApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/robomaker/robotapplicationversion.json b/internal/aws/cfn/schemas/aws/robomaker/robotapplicationversion.json new file mode 100644 index 00000000..7702ca31 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/robomaker/robotapplicationversion.json @@ -0,0 +1,69 @@ +{ + "typeName": "AWS::RoboMaker::RobotApplicationVersion", + "description": "AWS::RoboMaker::RobotApplicationVersion resource creates an AWS RoboMaker RobotApplicationVersion. This helps you control which code your robot uses.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "type": "string", + "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*" + } + }, + "properties": { + "Application": { + "$ref": "#/definitions/Arn" + }, + "CurrentRevisionId": { + "description": "The revision ID of robot application.", + "type": "string", + "minLength": 1, + "maxLength": 40, + "pattern": "[a-zA-Z0-9_.\\-]*" + }, + "ApplicationVersion": { + "type": "string" + }, + "Arn": { + "$ref": "#/definitions/Arn" + } + }, + "additionalProperties": false, + "required": [ + "Application" + ], + "readOnlyProperties": [ + "/properties/ApplicationVersion", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Application", + "/properties/CurrentRevisionId" + ], + "taggable": false, + "handlers": { + "create": { + "permissions": [ + "robomaker:CreateRobotApplicationVersion", + "s3:GetObject", + "ecr:BatchGetImage", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr-public:GetAuthorizationToken", + "sts:GetServiceBearerToken" + ] + }, + "delete": { + "permissions": [ + "robomaker:DeleteRobotApplication", + "robomaker:DescribeRobotApplication" + ] + }, + "read": { + "permissions": [ + "robomaker:DescribeRobotApplication" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/robomaker/simulationapplication.json b/internal/aws/cfn/schemas/aws/robomaker/simulationapplication.json new file mode 100644 index 00000000..7c66c64d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/robomaker/simulationapplication.json @@ -0,0 +1,244 @@ +{ + "typeName": "AWS::RoboMaker::SimulationApplication", + "description": "This schema is for testing purpose only.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "type": "string", + "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*" + }, + "Tags": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-zA-Z0-9-]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 256 + } + } + }, + "RenderingEngine": { + "description": "Information about a rendering engine.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of the rendering engine.", + "enum": [ + "OGRE" + ] + }, + "Version": { + "type": "string", + "description": "The version of the rendering engine.", + "pattern": "1.x" + } + }, + "required": [ + "Name", + "Version" + ], + "additionalProperties": false + }, + "RobotSoftwareSuite": { + "description": "Information about a robot software suite.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of the robot software suite.", + "enum": [ + "ROS", + "ROS2", + "General" + ] + }, + "Version": { + "type": "string", + "description": "The version of the robot software suite.", + "enum": [ + "Kinetic", + "Melodic", + "Dashing", + "Foxy" + ] + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "SourceConfig": { + "type": "object", + "description": "Information about a source configuration.", + "properties": { + "S3Bucket": { + "type": "string", + "description": "The Amazon S3 bucket name.", + "pattern": "[a-z0-9][a-z0-9.\\-]*[a-z0-9]" + }, + "S3Key": { + "type": "string", + "description": "The s3 object key.", + "minLength": 1, + "maxLength": 1024 + }, + "Architecture": { + "type": "string", + "description": "The target processor architecture for the application.", + "enum": [ + "X86_64", + "ARM64", + "ARMHF" + ] + } + }, + "required": [ + "S3Bucket", + "S3Key", + "Architecture" + ], + "additionalProperties": false + }, + "SimulationSoftwareSuite": { + "description": "Information about a simulation software suite.", + "type": "object", + "properties": { + "Name": { + "type": "string", + "description": "The name of the simulation software suite.", + "enum": [ + "Gazebo", + "RosbagPlay", + "SimulationRuntime" + ] + }, + "Version": { + "type": "string", + "description": "The version of the simulation software suite.", + "enum": [ + "7", + "9", + "11", + "Kinetic", + "Melodic", + "Dashing", + "Foxy" + ] + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "Name": { + "description": "The name of the simulation application.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[a-zA-Z0-9_\\-]*" + }, + "CurrentRevisionId": { + "description": "The current revision id.", + "type": "string" + }, + "RenderingEngine": { + "description": "The rendering engine for the simulation application.", + "$ref": "#/definitions/RenderingEngine" + }, + "RobotSoftwareSuite": { + "description": "The robot software suite used by the simulation application.", + "$ref": "#/definitions/RobotSoftwareSuite" + }, + "SimulationSoftwareSuite": { + "description": "The simulation software suite used by the simulation application.", + "$ref": "#/definitions/SimulationSoftwareSuite" + }, + "Sources": { + "description": "The sources of the simulation application.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SourceConfig" + } + }, + "Environment": { + "description": "The URI of the Docker image for the robot application.", + "type": "string" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "additionalProperties": false, + "required": [ + "RobotSoftwareSuite", + "SimulationSoftwareSuite" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/RenderingEngine", + "/properties/RobotSoftwareSuite/Version", + "/properties/Sources", + "/properties/SimulationSoftwareSuite/Version" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "robomaker:CreateSimulationApplication", + "robomaker:TagResource", + "robomaker:UntagResource", + "ecr:BatchGetImage", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr-public:GetAuthorizationToken", + "sts:GetServiceBearerToken" + ] + }, + "read": { + "permissions": [ + "robomaker:DescribeSimulationApplication" + ] + }, + "update": { + "permissions": [ + "robomaker:TagResource", + "robomaker:UntagResource", + "robomaker:UpdateSimulationApplication", + "ecr:BatchGetImage", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr-public:GetAuthorizationToken" + ] + }, + "delete": { + "permissions": [ + "robomaker:DescribeSimulationApplication", + "robomaker:DeleteSimulationApplication" + ] + }, + "list": { + "permissions": [ + "robomaker:ListSimulationApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/robomaker/simulationapplicationversion.json b/internal/aws/cfn/schemas/aws/robomaker/simulationapplicationversion.json new file mode 100644 index 00000000..e12f0a88 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/robomaker/simulationapplicationversion.json @@ -0,0 +1,69 @@ +{ + "typeName": "AWS::RoboMaker::SimulationApplicationVersion", + "description": "AWS::RoboMaker::SimulationApplicationVersion resource creates an AWS RoboMaker SimulationApplicationVersion. This helps you control which code your simulation uses.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Arn": { + "type": "string", + "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*" + } + }, + "properties": { + "Application": { + "$ref": "#/definitions/Arn" + }, + "CurrentRevisionId": { + "description": "The revision ID of robot application.", + "type": "string", + "minLength": 1, + "maxLength": 40, + "pattern": "[a-zA-Z0-9_.\\-]*" + }, + "ApplicationVersion": { + "type": "string" + }, + "Arn": { + "$ref": "#/definitions/Arn" + } + }, + "additionalProperties": false, + "required": [ + "Application" + ], + "readOnlyProperties": [ + "/properties/ApplicationVersion", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Application", + "/properties/CurrentRevisionId" + ], + "taggable": false, + "handlers": { + "create": { + "permissions": [ + "robomaker:CreateSimulationApplicationVersion", + "s3:GetObject", + "ecr:BatchGetImage", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr-public:GetAuthorizationToken", + "sts:GetServiceBearerToken" + ] + }, + "delete": { + "permissions": [ + "robomaker:DeleteSimulationApplication", + "robomaker:DescribeSimulationApplication" + ] + }, + "read": { + "permissions": [ + "robomaker:DescribeSimulationApplication" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rolesanywhere/crl.json b/internal/aws/cfn/schemas/aws/rolesanywhere/crl.json new file mode 100644 index 00000000..f5a7b605 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rolesanywhere/crl.json @@ -0,0 +1,107 @@ +{ + "typeName": "AWS::RolesAnywhere::CRL", + "description": "Definition of AWS::RolesAnywhere::CRL Resource Type", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "CrlData": { + "type": "string" + }, + "CrlId": { + "type": "string", + "pattern": "[a-f0-9]{8}-([a-z0-9]{4}-){3}[a-z0-9]{12}" + }, + "Enabled": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "TrustAnchorArn": { + "type": "string", + "pattern": "^arn:aws(-[^:]+)?:rolesanywhere(:.*){2}(:trust-anchor.*)$" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "CrlData" + ], + "readOnlyProperties": [ + "/properties/CrlId" + ], + "primaryIdentifier": [ + "/properties/CrlId" + ], + "handlers": { + "create": { + "permissions": [ + "rolesanywhere:ImportCrl", + "rolesanywhere:TagResource", + "rolesanywhere:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "rolesanywhere:GetCrl", + "rolesanywhere:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "rolesanywhere:EnableCrl", + "rolesanywhere:DisableCrl", + "rolesanywhere:UpdateCrl", + "rolesanywhere:TagResource", + "rolesanywhere:UntagResource", + "rolesanywhere:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "rolesanywhere:DeleteCrl" + ] + }, + "list": { + "permissions": [ + "rolesanywhere:ListCrls", + "rolesanywhere:ListTagsForResource" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/rolesanywhere/profile.json b/internal/aws/cfn/schemas/aws/rolesanywhere/profile.json new file mode 100644 index 00000000..af2207b3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rolesanywhere/profile.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::RolesAnywhere::Profile", + "description": "Definition of AWS::RolesAnywhere::Profile Resource Type", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "DurationSeconds": { + "type": "number", + "maximum": 43200, + "minimum": 900 + }, + "Enabled": { + "type": "boolean" + }, + "ManagedPolicyArns": { + "type": "array", + "items": { + "type": "string" + } + }, + "Name": { + "type": "string" + }, + "ProfileArn": { + "type": "string" + }, + "ProfileId": { + "type": "string", + "pattern": "[a-f0-9]{8}-([a-z0-9]{4}-){3}[a-z0-9]{12}" + }, + "RequireInstanceProperties": { + "type": "boolean" + }, + "RoleArns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 1011, + "minLength": 1 + } + }, + "SessionPolicy": { + "type": "string" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "readOnlyProperties": [ + "/properties/ProfileId", + "/properties/ProfileArn" + ], + "primaryIdentifier": [ + "/properties/ProfileId" + ], + "required": [ + "Name", + "RoleArns" + ], + "handlers": { + "create": { + "permissions": [ + "iam:GetRole", + "iam:GetPolicy", + "iam:PassRole", + "rolesanywhere:CreateProfile", + "rolesanywhere:TagResource", + "rolesanywhere:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "rolesanywhere:GetProfile", + "rolesanywhere:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "iam:GetRole", + "iam:GetPolicy", + "iam:PassRole", + "rolesanywhere:UpdateProfile", + "rolesanywhere:EnableProfile", + "rolesanywhere:DisableProfile", + "rolesanywhere:TagResource", + "rolesanywhere:UntagResource", + "rolesanywhere:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "rolesanywhere:DeleteProfile" + ] + }, + "list": { + "permissions": [ + "rolesanywhere:ListProfiles", + "rolesanywhere:ListTagsForResource" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/rolesanywhere/trustanchor.json b/internal/aws/cfn/schemas/aws/rolesanywhere/trustanchor.json new file mode 100644 index 00000000..b6bb7850 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rolesanywhere/trustanchor.json @@ -0,0 +1,208 @@ +{ + "typeName": "AWS::RolesAnywhere::TrustAnchor", + "description": "Definition of AWS::RolesAnywhere::TrustAnchor Resource Type.", + "definitions": { + "NotificationChannel": { + "type": "string", + "enum": [ + "ALL" + ] + }, + "NotificationEvent": { + "type": "string", + "enum": [ + "CA_CERTIFICATE_EXPIRY", + "END_ENTITY_CERTIFICATE_EXPIRY" + ] + }, + "NotificationSetting": { + "type": "object", + "properties": { + "Enabled": { + "type": "boolean" + }, + "Event": { + "$ref": "#/definitions/NotificationEvent" + }, + "Threshold": { + "type": "number", + "maximum": 360, + "minimum": 1 + }, + "Channel": { + "$ref": "#/definitions/NotificationChannel" + } + }, + "required": [ + "Enabled", + "Event" + ], + "additionalProperties": false + }, + "Source": { + "type": "object", + "properties": { + "SourceType": { + "$ref": "#/definitions/TrustAnchorType" + }, + "SourceData": { + "$ref": "#/definitions/SourceData" + } + }, + "additionalProperties": false + }, + "SourceData": { + "oneOf": [ + { + "type": "object", + "title": "X509CertificateData", + "properties": { + "X509CertificateData": { + "type": "string" + } + }, + "required": [ + "X509CertificateData" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "AcmPcaArn", + "properties": { + "AcmPcaArn": { + "type": "string" + } + }, + "required": [ + "AcmPcaArn" + ], + "additionalProperties": false + } + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "TrustAnchorType": { + "type": "string", + "enum": [ + "AWS_ACM_PCA", + "CERTIFICATE_BUNDLE", + "SELF_SIGNED_REPOSITORY" + ] + } + }, + "properties": { + "Enabled": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "NotificationSettings": { + "type": "array", + "items": { + "$ref": "#/definitions/NotificationSetting" + }, + "maxItems": 50, + "minItems": 0 + }, + "Source": { + "$ref": "#/definitions/Source" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0 + }, + "TrustAnchorId": { + "type": "string", + "pattern": "[a-f0-9]{8}-([a-z0-9]{4}-){3}[a-z0-9]{12}" + }, + "TrustAnchorArn": { + "type": "string", + "pattern": "[a-f0-9]{8}-([a-z0-9]{4}-){3}[a-z0-9]{12}" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name", + "Source" + ], + "readOnlyProperties": [ + "/properties/TrustAnchorId", + "/properties/TrustAnchorArn" + ], + "primaryIdentifier": [ + "/properties/TrustAnchorId" + ], + "handlers": { + "create": { + "permissions": [ + "iam:CreateServiceLinkedRole", + "rolesanywhere:CreateTrustAnchor", + "rolesanywhere:TagResource", + "rolesanywhere:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "rolesanywhere:GetTrustAnchor", + "rolesanywhere:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "acm-pca:GetCertificateAuthorityCertificate", + "rolesanywhere:ListTagsForResource", + "rolesanywhere:TagResource", + "rolesanywhere:UntagResource", + "rolesanywhere:EnableTrustAnchor", + "rolesanywhere:DisableTrustAnchor", + "rolesanywhere:UpdateTrustAnchor", + "rolesanywhere:GetTrustAnchor", + "rolesanywhere:PutNotificationSettings", + "rolesanywhere:ResetNotificationSettings" + ] + }, + "delete": { + "permissions": [ + "rolesanywhere:DeleteTrustAnchor" + ] + }, + "list": { + "permissions": [ + "rolesanywhere:ListTrustAnchors", + "rolesanywhere:ListTagsForResource" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/route53/cidrcollection.json b/internal/aws/cfn/schemas/aws/route53/cidrcollection.json new file mode 100644 index 00000000..4ccd24fd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53/cidrcollection.json @@ -0,0 +1,107 @@ +{ + "typeName": "AWS::Route53::CidrCollection", + "description": "Resource schema for AWS::Route53::CidrCollection.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git", + "definitions": { + "Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "LocationName": { + "description": "The name of the location that is associated with the CIDR collection.", + "type": "string", + "minLength": 1, + "maxLength": 16 + }, + "CidrList": { + "description": "A list of CIDR blocks.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "LocationName", + "CidrList" + ] + } + }, + "properties": { + "Id": { + "description": "UUID of the CIDR collection.", + "type": "string" + }, + "Name": { + "description": "A unique name for the CIDR collection.", + "type": "string", + "pattern": "^[0-9A-Za-z_\\-]+$", + "minLength": 1, + "maxLength": 64 + }, + "Arn": { + "description": "The Amazon resource name (ARN) to uniquely identify the AWS resource.", + "type": "string" + }, + "Locations": { + "description": "A complex type that contains information about the list of CIDR locations.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Location" + } + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "route53:CreateCidrCollection", + "route53:ChangeCidrCollection" + ] + }, + "read": { + "permissions": [ + "route53:ListCidrCollections", + "route53:ListCidrBlocks" + ] + }, + "update": { + "permissions": [ + "route53:ChangeCidrCollection" + ] + }, + "delete": { + "permissions": [ + "route53:DeleteCidrCollection", + "route53:ChangeCidrCollection" + ] + }, + "list": { + "permissions": [ + "route53:ListCidrCollections", + "route53:ListCidrBlocks" + ] + } + }, + "tagging": { + "taggable": false, + "tagUpdatable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/route53/dnssec.json b/internal/aws/cfn/schemas/aws/route53/dnssec.json new file mode 100644 index 00000000..dcf428b5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53/dnssec.json @@ -0,0 +1,57 @@ +{ + "typeName": "AWS::Route53::DNSSEC", + "description": "Resource used to control (enable/disable) DNSSEC in a specific hosted zone.", + "properties": { + "HostedZoneId": { + "description": "The unique string (ID) used to identify a hosted zone.", + "type": "string", + "pattern": "^[A-Z0-9]{1,32}$" + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/HostedZoneId" + ], + "required": [ + "HostedZoneId" + ], + "primaryIdentifier": [ + "/properties/HostedZoneId" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "route53:GetDNSSEC", + "route53:EnableHostedZoneDNSSEC", + "kms:DescribeKey", + "kms:GetPublicKey", + "kms:Sign", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "route53:GetDNSSEC" + ] + }, + "delete": { + "permissions": [ + "route53:GetDNSSEC", + "route53:DisableHostedZoneDNSSEC", + "kms:DescribeKey", + "kms:GetPublicKey", + "kms:Sign", + "kms:CreateGrant" + ] + }, + "list": { + "permissions": [ + "route53:GetDNSSEC", + "route53:ListHostedZones" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53/healthcheck.json b/internal/aws/cfn/schemas/aws/route53/healthcheck.json new file mode 100644 index 00000000..2033fc1c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53/healthcheck.json @@ -0,0 +1,215 @@ +{ + "typeName": "AWS::Route53::HealthCheck", + "description": "Resource schema for AWS::Route53::HealthCheck.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git", + "definitions": { + "AlarmIdentifier": { + "description": "A complex type that identifies the CloudWatch alarm that you want Amazon Route 53 health checkers to use to determine whether the specified health check is healthy.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "The name of the CloudWatch alarm that you want Amazon Route 53 health checkers to use to determine whether this health check is healthy.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Region": { + "description": "For the CloudWatch alarm that you want Route 53 health checkers to use to determine whether this health check is healthy, the region that the alarm was created in.", + "type": "string" + } + }, + "required": [ + "Name", + "Region" + ] + }, + "HealthCheckTag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag.", + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag.", + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "HealthCheckId": { + "type": "string" + }, + "HealthCheckConfig": { + "description": "A complex type that contains information about the health check.", + "type": "object", + "properties": { + "AlarmIdentifier": { + "$ref": "#/definitions/AlarmIdentifier" + }, + "ChildHealthChecks": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 256, + "insertionOrder": false + }, + "EnableSNI": { + "type": "boolean" + }, + "FailureThreshold": { + "type": "integer", + "minimum": 1, + "maximum": 10 + }, + "FullyQualifiedDomainName": { + "type": "string", + "maxLength": 255 + }, + "HealthThreshold": { + "type": "integer", + "minimum": 0, + "maximum": 256 + }, + "InsufficientDataHealthStatus": { + "type": "string", + "enum": [ + "Healthy", + "LastKnownStatus", + "Unhealthy" + ] + }, + "Inverted": { + "type": "boolean" + }, + "IPAddress": { + "type": "string", + "maxLength": 45, + "pattern": "^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$" + }, + "MeasureLatency": { + "type": "boolean" + }, + "Port": { + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "Regions": { + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 64, + "insertionOrder": false + }, + "RequestInterval": { + "type": "integer", + "minimum": 10, + "maximum": 30 + }, + "ResourcePath": { + "type": "string", + "maxLength": 255 + }, + "SearchString": { + "type": "string", + "maxLength": 255 + }, + "RoutingControlArn": { + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Type": { + "type": "string", + "enum": [ + "CALCULATED", + "CLOUDWATCH_METRIC", + "HTTP", + "HTTP_STR_MATCH", + "HTTPS", + "HTTPS_STR_MATCH", + "TCP", + "RECOVERY_CONTROL" + ] + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "HealthCheckTags": { + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/HealthCheckTag" + } + } + }, + "additionalProperties": false, + "required": [ + "HealthCheckConfig" + ], + "createOnlyProperties": [ + "/properties/HealthCheckConfig/Type", + "/properties/HealthCheckConfig/MeasureLatency", + "/properties/HealthCheckConfig/RequestInterval" + ], + "readOnlyProperties": [ + "/properties/HealthCheckId" + ], + "primaryIdentifier": [ + "/properties/HealthCheckId" + ], + "handlers": { + "create": { + "permissions": [ + "route53:CreateHealthCheck", + "route53:ChangeTagsForResource", + "cloudwatch:DescribeAlarms", + "route53-recovery-control-config:DescribeRoutingControl" + ] + }, + "read": { + "permissions": [ + "route53:GetHealthCheck", + "route53:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "route53:UpdateHealthCheck", + "route53:ChangeTagsForResource", + "route53:ListTagsForResource", + "cloudwatch:DescribeAlarms" + ] + }, + "delete": { + "permissions": [ + "route53:DeleteHealthCheck" + ] + }, + "list": { + "permissions": [ + "route53:ListHealthChecks", + "route53:ListTagsForResource" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/route53/hostedzone.json b/internal/aws/cfn/schemas/aws/route53/hostedzone.json new file mode 100644 index 00000000..d131f528 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53/hostedzone.json @@ -0,0 +1,181 @@ +{ + "typeName": "AWS::Route53::HostedZone", + "description": "Creates a new public or private hosted zone. You create records in a public hosted zone to define how you want to route traffic on the internet for a domain, such as example.com, and its subdomains (apex.example.com, acme.example.com). You create records in a private hosted zone to define how you want to route traffic for a domain and its subdomains within one or more Amazon Virtual Private Clouds (Amazon VPCs). \n You can't convert a public hosted zone to a private hosted zone or vice versa. Instead, you must create a new hosted zone with the same name and create new resource record sets.\n For more information about charges for hosted zones, see [Amazon Route 53 Pricing](https://docs.aws.amazon.com/route53/pricing/).\n Note the following:\n + You can't create a hosted zone for a top-level domain (TLD) such as .com.\n + If your domain is registered with a registrar other than Route 53, you must update the name servers with your registrar to make Route 53 the DNS service for the domain. For more information, see [Migrating DNS Service for an Existing Domain to Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/MigratingDNS.html) in the *Amazon Route 53 Developer Guide*. \n \n When you submit a ``CreateHostedZone`` request, the initial status of the hosted zone is ``PENDING``. For public hosted zones, this means that the NS and SOA records are not yet available on all Route 53 DNS servers. When the NS and SOA records are available, the status of the zone changes to ``INSYNC``.\n The ``CreateHostedZone`` request requires the caller to have an ``ec2:DescribeVpcs`` permission.\n When creating private hosted zones, the Amazon VPC must belong to the same partition where the hosted zone is created. A partition is a group of AWS-Regions. Each AWS-account is scoped to one partition.\n The following are the supported partitions:\n + ``aws`` - AWS-Regions \n + ``aws-cn`` - China Regions\n + ``aws-us-gov`` - govcloud-us-region \n \n For more information, see [Access Management](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the *General Reference*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git", + "definitions": { + "HostedZoneConfig": { + "description": "A complex type that contains an optional comment about your hosted zone. If you don't want to specify a comment, omit both the ``HostedZoneConfig`` and ``Comment`` elements.", + "type": "object", + "additionalProperties": false, + "properties": { + "Comment": { + "description": "Any comments that you want to include about the hosted zone.", + "type": "string", + "maxLength": 256 + } + } + }, + "HostedZoneTag": { + "description": "A complex type that contains information about a tag that you want to add or edit for the specified health check or hosted zone.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The value of ``Key`` depends on the operation that you want to perform:\n + *Add a tag to a health check or hosted zone*: ``Key`` is the name that you want to give the new tag.\n + *Edit a tag*: ``Key`` is the name of the tag that you want to change the ``Value`` for.\n + *Delete a key*: ``Key`` is the name of the tag you want to remove.\n + *Give a name to a health check*: Edit the default ``Name`` tag. In the Amazon Route 53 console, the list of your health checks includes a *Name* column that lets you see the name that you've given to each health check.", + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value of ``Value`` depends on the operation that you want to perform:\n + *Add a tag to a health check or hosted zone*: ``Value`` is the value that you want to give the new tag.\n + *Edit a tag*: ``Value`` is the new value that you want to assign the tag.", + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "QueryLoggingConfig": { + "description": "A complex type that contains information about a configuration for DNS query logging.", + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogsLogGroupArn": { + "description": "The Amazon Resource Name (ARN) of the CloudWatch Logs log group that Amazon Route 53 is publishing logs to.", + "type": "string" + } + }, + "required": [ + "CloudWatchLogsLogGroupArn" + ] + }, + "VPC": { + "description": "*Private hosted zones only:* A complex type that contains information about an Amazon VPC. Route 53 Resolver uses the records in the private hosted zone to route traffic in that VPC. \n For public hosted zones, omit ``VPCs``, ``VPCId``, and ``VPCRegion``.", + "type": "object", + "additionalProperties": false, + "properties": { + "VPCId": { + "description": "*Private hosted zones only:* The ID of an Amazon VPC.\n For public hosted zones, omit ``VPCs``, ``VPCId``, and ``VPCRegion``.", + "type": "string" + }, + "VPCRegion": { + "description": "*Private hosted zones only:* The region that an Amazon VPC was created in.\n For public hosted zones, omit ``VPCs``, ``VPCId``, and ``VPCRegion``.", + "type": "string" + } + }, + "required": [ + "VPCId", + "VPCRegion" + ] + } + }, + "properties": { + "Id": { + "type": "string", + "description": "" + }, + "HostedZoneConfig": { + "$ref": "#/definitions/HostedZoneConfig", + "description": "A complex type that contains an optional comment.\n If you don't want to specify a comment, omit the ``HostedZoneConfig`` and ``Comment`` elements." + }, + "HostedZoneTags": { + "description": "Adds, edits, or deletes tags for a health check or a hosted zone.\n For information about using tags for cost allocation, see [Using Cost Allocation Tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) in the *User Guide*.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/HostedZoneTag" + } + }, + "Name": { + "description": "The name of the domain. Specify a fully qualified domain name, for example, *www.example.com*. The trailing dot is optional; Amazon Route 53 assumes that the domain name is fully qualified. This means that Route 53 treats *www.example.com* (without a trailing dot) and *www.example.com.* (with a trailing dot) as identical.\n If you're creating a public hosted zone, this is the name you have registered with your DNS registrar. If your domain name is registered with a registrar other than Route 53, change the name servers for your domain to the set of ``NameServers`` that are returned by the ``Fn::GetAtt`` intrinsic function.", + "type": "string", + "maxLength": 1024 + }, + "QueryLoggingConfig": { + "$ref": "#/definitions/QueryLoggingConfig", + "description": "Creates a configuration for DNS query logging. After you create a query logging configuration, Amazon Route 53 begins to publish log data to an Amazon CloudWatch Logs log group.\n DNS query logs contain information about the queries that Route 53 receives for a specified public hosted zone, such as the following:\n + Route 53 edge location that responded to the DNS query\n + Domain or subdomain that was requested\n + DNS record type, such as A or AAAA\n + DNS response code, such as ``NoError`` or ``ServFail`` \n \n + Log Group and Resource Policy Before you create a query logging configuration, perform the following operations. If you create a query logging configuration using the Route 53 console, Route 53 performs these operations automatically. Create a CloudWatch Logs log group, and make note of the ARN, which you specify when you create a query logging configuration. Note the following: You must create the log group in the us-east-1 region. You must use the same to create the log group and the hosted zone that you want to configure query logging for. When you create log groups for query logging, we recommend that you use a consistent prefix, for example: /aws/route53/hosted zone name In the next step, you'll create a resource policy, which controls access to one or more log groups and the associated resources, such as Route 53 hosted zones. There's a limit on the number of resource policies that you can create, so we recommend that you use a consistent prefix so you can use the same resource policy for all the log groups that you create for query logging. Create a CloudWatch Logs resource policy, and give it the permissions that Route 53 needs to create log streams and to send query logs to log streams. For the value of Resource, specify the ARN for the log group that you created in the previous step. To use the same resource policy for all the CloudWatch Logs log groups that you created for query logging configurations, replace the hosted zone name with *, for example: arn:aws:logs:us-east-1:123412341234:log-group:/aws/route53/* To avoid the confused deputy problem, a security issue where an entity without a permission for an action can coerce a more-privileged entity to perform it, you can optionally limit the permissions that a service has to a resource in a resource-based policy by supplying the following values: For aws:SourceArn, supply the hosted zone ARN used in creating the query logging configuration. For example, aws:SourceArn: arn:aws:route53:::hostedzone/hosted zone ID. For aws:SourceAccount, supply the account ID for the account that creates the query logging configuration. For example, aws:SourceAccount:111111111111. For more information, see The confused deputy problem in the IAM User Guide. You can't use the CloudWatch console to create or edit a resource policy. You must use the CloudWatch API, one of the SDKs, or the . + Log Streams and Edge Locations When Route 53 finishes creating the configuration for DNS query logging, it does the following: Creates a log stream for an edge location the first time that the edge location responds to DNS queries for the specified hosted zone. That log stream is used to log all queries that Route 53 responds to for that edge location. Begins to send query logs to the applicable log stream. The name of each log stream is in the following format: hosted zone ID/edge location code The edge location code is a three-letter code and an arbitrarily assigned number, for example, DFW3. The three-letter code typically corresponds with the International Air Transport Association airport code for an airport near the edge location. (These abbreviations might change in the future.) For a list of edge locations, see \"The Route 53 Global Network\" on the Route 53 Product Details page. + Queries That Are Logged Query logs contain only the queries that DNS resolvers forward to Route 53. If a DNS resolver has already cached the response to a query (such as the IP address for a load balancer for example.com), the resolver will continue to return the cached response. It doesn't forward another query to Route 53 until the TTL for the corresponding resource record set expires. Depending on how many DNS queries are submitted for a resource record set, and depending on the TTL for that resource record set, query logs might contain information about only one query out of every several thousand queries that are submitted to DNS. For more information about how DNS works, see Routing Internet Traffic to Your Website or Web Application in the Amazon Route 53 Developer Guide. + Log File Format For a list of the values in each query log and the format of each value, see Logging DNS Queries in the Amazon Route 53 Developer Guide. + Pricing For information about charges for query logs, see Amazon CloudWatch Pricing. + How to Stop Logging If you want Route 53 to stop sending query logs to CloudWatch Logs, delete the query logging configuration. For more information, see DeleteQueryLoggingConfig." + }, + "VPCs": { + "description": "*Private hosted zones:* A complex type that contains information about the VPCs that are associated with the specified hosted zone.\n For public hosted zones, omit ``VPCs``, ``VPCId``, and ``VPCRegion``.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/VPC" + } + }, + "NameServers": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "" + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/NameServers" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "propertyTransform": { + "/properties/Name": "$join([Name, \".\"])" + }, + "handlers": { + "create": { + "permissions": [ + "route53:CreateHostedZone", + "route53:CreateQueryLoggingConfig", + "route53:ChangeTagsForResource", + "route53:GetChange", + "route53:AssociateVPCWithHostedZone", + "ec2:DescribeVpcs" + ] + }, + "read": { + "permissions": [ + "route53:GetHostedZone", + "route53:ListTagsForResource", + "route53:ListQueryLoggingConfigs" + ] + }, + "update": { + "permissions": [ + "route53:GetChange", + "route53:ListTagsForResource", + "route53:UpdateHostedZoneComment", + "route53:ChangeTagsForResource", + "route53:AssociateVPCWithHostedZone", + "route53:DisassociateVPCFromHostedZone", + "route53:CreateQueryLoggingConfig", + "route53:DeleteQueryLoggingConfig", + "ec2:DescribeVpcs" + ] + }, + "delete": { + "permissions": [ + "route53:DeleteHostedZone", + "route53:DeleteQueryLoggingConfig", + "route53:ListQueryLoggingConfigs", + "route53:GetChange" + ] + }, + "list": { + "permissions": [ + "route53:GetHostedZone", + "route53:ListHostedZones", + "route53:ListHostedZonesByName", + "route53:ListQueryLoggingConfigs", + "route53:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53/keysigningkey.json b/internal/aws/cfn/schemas/aws/route53/keysigningkey.json new file mode 100644 index 00000000..040bcd0e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53/keysigningkey.json @@ -0,0 +1,92 @@ +{ + "typeName": "AWS::Route53::KeySigningKey", + "description": "Represents a key signing key (KSK) associated with a hosted zone. You can only have two KSKs per hosted zone.", + "properties": { + "HostedZoneId": { + "description": "The unique string (ID) used to identify a hosted zone.", + "type": "string", + "pattern": "^[A-Z0-9]{1,32}$" + }, + "Status": { + "description": "A string specifying the initial status of the key signing key (KSK). You can set the value to ACTIVE or INACTIVE.", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "Name": { + "description": "An alphanumeric string used to identify a key signing key (KSK). Name must be unique for each key signing key in the same hosted zone.", + "type": "string", + "pattern": "^[a-zA-Z0-9_]{3,128}$" + }, + "KeyManagementServiceArn": { + "description": "The Amazon resource name (ARN) for a customer managed key (CMK) in AWS Key Management Service (KMS). The KeyManagementServiceArn must be unique for each key signing key (KSK) in a single hosted zone.", + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/HostedZoneId", + "/properties/Name", + "/properties/KeyManagementServiceArn" + ], + "required": [ + "Status", + "HostedZoneId", + "Name", + "KeyManagementServiceArn" + ], + "primaryIdentifier": [ + "/properties/HostedZoneId", + "/properties/Name" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "route53:CreateKeySigningKey", + "kms:DescribeKey", + "kms:GetPublicKey", + "kms:Sign", + "kms:CreateGrant" + ] + }, + "read": { + "permissions": [ + "route53:GetDNSSEC" + ] + }, + "update": { + "permissions": [ + "route53:GetDNSSEC", + "route53:ActivateKeySigningKey", + "route53:DeactivateKeySigningKey", + "kms:DescribeKey", + "kms:GetPublicKey", + "kms:Sign", + "kms:CreateGrant" + ] + }, + "delete": { + "permissions": [ + "route53:DeactivateKeySigningKey", + "route53:DeleteKeySigningKey", + "kms:DescribeKey", + "kms:GetPublicKey", + "kms:Sign", + "kms:CreateGrant" + ] + }, + "list": { + "permissions": [ + "route53:GetDNSSEC", + "route53:ListHostedZones" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53/recordset.json b/internal/aws/cfn/schemas/aws/route53/recordset.json new file mode 100644 index 00000000..148de48a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53/recordset.json @@ -0,0 +1,166 @@ +{ + "typeName": "AWS::Route53::RecordSet", + "description": "Resource Type definition for AWS::Route53::RecordSet", + "additionalProperties": false, + "properties": { + "HealthCheckId": { + "type": "string" + }, + "AliasTarget": { + "$ref": "#/definitions/AliasTarget" + }, + "Comment": { + "type": "string" + }, + "HostedZoneName": { + "type": "string" + }, + "ResourceRecords": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "HostedZoneId": { + "type": "string" + }, + "SetIdentifier": { + "type": "string" + }, + "TTL": { + "type": "string" + }, + "Weight": { + "type": "integer" + }, + "Name": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "CidrRoutingConfig": { + "$ref": "#/definitions/CidrRoutingConfig" + }, + "Failover": { + "type": "string" + }, + "GeoProximityLocation": { + "$ref": "#/definitions/GeoProximityLocation" + }, + "Region": { + "type": "string" + }, + "GeoLocation": { + "$ref": "#/definitions/GeoLocation" + }, + "Id": { + "type": "string" + }, + "MultiValueAnswer": { + "type": "boolean" + } + }, + "definitions": { + "AliasTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "DNSName": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + }, + "EvaluateTargetHealth": { + "type": "boolean" + } + }, + "required": [ + "HostedZoneId", + "DNSName" + ] + }, + "CidrRoutingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "CollectionId": { + "type": "string" + }, + "LocationName": { + "type": "string" + } + }, + "required": [ + "CollectionId", + "LocationName" + ] + }, + "GeoProximityLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "AWSRegion": { + "type": "string" + }, + "LocalZoneGroup": { + "type": "string" + }, + "Bias": { + "type": "integer" + }, + "Coordinates": { + "$ref": "#/definitions/Coordinates" + } + } + }, + "Coordinates": { + "type": "object", + "additionalProperties": false, + "properties": { + "Longitude": { + "type": "string" + }, + "Latitude": { + "type": "string" + } + }, + "required": [ + "Latitude", + "Longitude" + ] + }, + "GeoLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContinentCode": { + "type": "string" + }, + "CountryCode": { + "type": "string" + }, + "SubdivisionCode": { + "type": "string" + } + } + } + }, + "required": [ + "Type", + "Name" + ], + "createOnlyProperties": [ + "/properties/HostedZoneName", + "/properties/Name", + "/properties/HostedZoneId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/route53/recordsetgroup.json b/internal/aws/cfn/schemas/aws/route53/recordsetgroup.json new file mode 100644 index 00000000..86c81b96 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53/recordsetgroup.json @@ -0,0 +1,184 @@ +{ + "typeName": "AWS::Route53::RecordSetGroup", + "description": "Resource Type definition for AWS::Route53::RecordSetGroup", + "additionalProperties": false, + "properties": { + "Comment": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "HostedZoneName": { + "type": "string" + }, + "RecordSets": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/RecordSet" + } + }, + "HostedZoneId": { + "type": "string" + } + }, + "definitions": { + "AliasTarget": { + "type": "object", + "additionalProperties": false, + "properties": { + "DNSName": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + }, + "EvaluateTargetHealth": { + "type": "boolean" + } + }, + "required": [ + "HostedZoneId", + "DNSName" + ] + }, + "CidrRoutingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "CollectionId": { + "type": "string" + }, + "LocationName": { + "type": "string" + } + }, + "required": [ + "CollectionId", + "LocationName" + ] + }, + "GeoProximityLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "AWSRegion": { + "type": "string" + }, + "LocalZoneGroup": { + "type": "string" + }, + "Bias": { + "type": "integer" + }, + "Coordinates": { + "$ref": "#/definitions/Coordinates" + } + } + }, + "Coordinates": { + "type": "object", + "additionalProperties": false, + "properties": { + "Longitude": { + "type": "string" + }, + "Latitude": { + "type": "string" + } + }, + "required": [ + "Latitude", + "Longitude" + ] + }, + "RecordSet": { + "type": "object", + "additionalProperties": false, + "properties": { + "HealthCheckId": { + "type": "string" + }, + "AliasTarget": { + "$ref": "#/definitions/AliasTarget" + }, + "HostedZoneName": { + "type": "string" + }, + "ResourceRecords": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "HostedZoneId": { + "type": "string" + }, + "SetIdentifier": { + "type": "string" + }, + "TTL": { + "type": "string" + }, + "Weight": { + "type": "integer" + }, + "Name": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "CidrRoutingConfig": { + "$ref": "#/definitions/CidrRoutingConfig" + }, + "Failover": { + "type": "string" + }, + "GeoProximityLocation": { + "$ref": "#/definitions/GeoProximityLocation" + }, + "Region": { + "type": "string" + }, + "GeoLocation": { + "$ref": "#/definitions/GeoLocation" + }, + "MultiValueAnswer": { + "type": "boolean" + } + }, + "required": [ + "Type", + "Name" + ] + }, + "GeoLocation": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContinentCode": { + "type": "string" + }, + "CountryCode": { + "type": "string" + }, + "SubdivisionCode": { + "type": "string" + } + } + } + }, + "createOnlyProperties": [ + "/properties/HostedZoneName", + "/properties/HostedZoneId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/route53recoverycontrol/cluster.json b/internal/aws/cfn/schemas/aws/route53recoverycontrol/cluster.json new file mode 100644 index 00000000..f319381e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoverycontrol/cluster.json @@ -0,0 +1,129 @@ +{ + "typeName": "AWS::Route53RecoveryControl::Cluster", + "description": "AWS Route53 Recovery Control Cluster resource schema", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git", + "taggable": true, + "definitions": { + "ClusterEndpoint": { + "type": "object", + "properties": { + "Endpoint": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Region": { + "type": "string", + "minLength": 1, + "maxLength": 32 + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "Name of a Cluster. You can use any non-white space character in the name", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "ClusterArn": { + "description": "The Amazon Resource Name (ARN) of the cluster.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Status": { + "description": "Deployment status of a resource. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.", + "type": "string", + "enum": [ + "PENDING", + "DEPLOYED", + "PENDING_DELETION" + ] + }, + "ClusterEndpoints": { + "description": "Endpoints for the cluster.", + "type": "array", + "items": { + "$ref": "#/definitions/ClusterEndpoint" + }, + "insertionOrder": false + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "items": { + "$ref": "#/definitions/Tag", + "maxItems": 20 + }, + "insertionOrder": false + } + }, + "required": [ + "Name" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name", + "/properties/Tags" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/ClusterArn", + "/properties/ClusterEndpoints", + "/properties/Status" + ], + "primaryIdentifier": [ + "/properties/ClusterArn" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-control-config:CreateCluster", + "route53-recovery-control-config:DescribeCluster", + "route53-recovery-control-config:ListTagsForResource", + "route53-recovery-control-config:TagResource" + ] + }, + "read": { + "permissions": [ + "route53-recovery-control-config:DescribeCluster", + "route53-recovery-control-config:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-control-config:DescribeCluster", + "route53-recovery-control-config:DeleteCluster" + ] + }, + "list": { + "permissions": [ + "route53-recovery-control-config:ListClusters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53recoverycontrol/controlpanel.json b/internal/aws/cfn/schemas/aws/route53recoverycontrol/controlpanel.json new file mode 100644 index 00000000..f9b2ac75 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoverycontrol/controlpanel.json @@ -0,0 +1,126 @@ +{ + "typeName": "AWS::Route53RecoveryControl::ControlPanel", + "description": "AWS Route53 Recovery Control Control Panel resource schema .", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git", + "taggable": true, + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "ClusterArn": { + "description": "Cluster to associate with the Control Panel", + "type": "string" + }, + "ControlPanelArn": { + "description": "The Amazon Resource Name (ARN) of the cluster.", + "type": "string" + }, + "Name": { + "description": "The name of the control panel. You can use any non-white space character in the name.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Status": { + "description": "The deployment status of control panel. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.", + "type": "string", + "enum": [ + "PENDING", + "DEPLOYED", + "PENDING_DELETION" + ] + }, + "DefaultControlPanel": { + "description": "A flag that Amazon Route 53 Application Recovery Controller sets to true to designate the default control panel for a cluster. When you create a cluster, Amazon Route 53 Application Recovery Controller creates a control panel, and sets this flag for that control panel. If you create a control panel yourself, this flag is set to false.", + "type": "boolean" + }, + "RoutingControlCount": { + "description": "Count of associated routing controls", + "type": "integer" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "items": { + "$ref": "#/definitions/Tag", + "maxItems": 20 + }, + "insertionOrder": false + } + }, + "required": [ + "Name" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/ClusterArn", + "/properties/Tags" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/ControlPanelArn" + ], + "readOnlyProperties": [ + "/properties/ControlPanelArn", + "/properties/Status", + "/properties/RoutingControlCount", + "/properties/DefaultControlPanel" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-control-config:CreateControlPanel", + "route53-recovery-control-config:DescribeCluster", + "route53-recovery-control-config:DescribeControlPanel", + "route53-recovery-control-config:ListTagsForResource", + "route53-recovery-control-config:TagResource" + ] + }, + "read": { + "permissions": [ + "route53-recovery-control-config:DescribeControlPanel", + "route53-recovery-control-config:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "route53-recovery-control-config:UpdateControlPanel", + "route53-recovery-control-config:DescribeControlPanel", + "route53-recovery-control-config:ListTagsForResource", + "route53-recovery-control-config:TagResource", + "route53-recovery-control-config:UntagResource" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-control-config:DeleteControlPanel", + "route53-recovery-control-config:DescribeControlPanel" + ] + }, + "list": { + "permissions": [ + "route53-recovery-control-config:ListControlPanels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53recoverycontrol/routingcontrol.json b/internal/aws/cfn/schemas/aws/route53recoverycontrol/routingcontrol.json new file mode 100644 index 00000000..5635f5f3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoverycontrol/routingcontrol.json @@ -0,0 +1,97 @@ +{ + "typeName": "AWS::Route53RecoveryControl::RoutingControl", + "description": "AWS Route53 Recovery Control Routing Control resource schema .", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git", + "taggable": false, + "definitions": {}, + "properties": { + "RoutingControlArn": { + "description": "The Amazon Resource Name (ARN) of the routing control.", + "type": "string" + }, + "ControlPanelArn": { + "description": "The Amazon Resource Name (ARN) of the control panel.", + "type": "string" + }, + "Name": { + "description": "The name of the routing control. You can use any non-white space character in the name.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Status": { + "description": "The deployment status of the routing control. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.", + "type": "string", + "enum": [ + "PENDING", + "DEPLOYED", + "PENDING_DELETION" + ] + }, + "ClusterArn": { + "description": "Arn associated with Control Panel", + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/ControlPanelArn", + "/properties/ClusterArn" + ], + "primaryIdentifier": [ + "/properties/RoutingControlArn" + ], + "readOnlyProperties": [ + "/properties/RoutingControlArn", + "/properties/Status" + ], + "writeOnlyProperties": [ + "/properties/ClusterArn" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-control-config:CreateRoutingControl", + "route53-recovery-control-config:DescribeRoutingControl", + "route53-recovery-control-config:DescribeControlPanel", + "route53-recovery-control-config:DescribeCluster" + ] + }, + "read": { + "permissions": [ + "route53-recovery-control-config:DescribeRoutingControl" + ] + }, + "update": { + "permissions": [ + "route53-recovery-control-config:UpdateRoutingControl", + "route53-recovery-control-config:DescribeRoutingControl", + "route53-recovery-control-config:DescribeControlPanel" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-control-config:DescribeRoutingControl", + "route53-recovery-control-config:DeleteRoutingControl" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ControlPanelArn": { + "$ref": "resource-schema.json#/properties/ControlPanelArn" + } + }, + "required": [ + "ControlPanelArn" + ] + }, + "permissions": [ + "route53-recovery-control-config:ListRoutingControls" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53recoverycontrol/safetyrule.json b/internal/aws/cfn/schemas/aws/route53recoverycontrol/safetyrule.json new file mode 100644 index 00000000..92e4b383 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoverycontrol/safetyrule.json @@ -0,0 +1,242 @@ +{ + "typeName": "AWS::Route53RecoveryControl::SafetyRule", + "description": "Resource schema for AWS Route53 Recovery Control basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git", + "taggable": true, + "definitions": { + "SafetyRuleName": { + "description": "The name for the safety rule.", + "type": "string" + }, + "RuleType": { + "description": "A rule can be one of the following: ATLEAST, AND, or OR.", + "type": "string", + "enum": [ + "AND", + "OR", + "ATLEAST" + ] + }, + "RuleConfig": { + "description": "The rule configuration for an assertion rule or gating rule. This is the criteria that you set for specific assertion controls (routing controls) or gating controls. This configuration specifies how many controls must be enabled after a transaction completes.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/RuleType" + }, + "Threshold": { + "description": "The value of N, when you specify an ATLEAST rule type. That is, Threshold is the number of controls that must be set when you specify an ATLEAST type.", + "type": "integer" + }, + "Inverted": { + "description": "Logical negation of the rule. If the rule would usually evaluate true, it's evaluated as false, and vice versa.", + "type": "boolean" + } + }, + "required": [ + "Type", + "Threshold", + "Inverted" + ], + "additionalProperties": false + }, + "GatingRule": { + "description": "A gating rule verifies that a set of gating controls evaluates as true, based on a rule configuration that you specify. If the gating rule evaluates to true, Amazon Route 53 Application Recovery Controller allows a set of routing control state changes to run and complete against the set of target controls.", + "type": "object", + "properties": { + "GatingControls": { + "description": "The gating controls for the gating rule. That is, routing controls that are evaluated by the rule configuration that you specify.", + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "TargetControls": { + "description": "Routing controls that can only be set or unset if the specified RuleConfig evaluates to true for the specified GatingControls. For example, say you have three gating controls, one for each of three AWS Regions. Now you specify AtLeast 2 as your RuleConfig. With these settings, you can only change (set or unset) the routing controls that you have specified as TargetControls if that rule evaluates to true. \nIn other words, your ability to change the routing controls that you have specified as TargetControls is gated by the rule that you set for the routing controls in GatingControls.", + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "WaitPeriodMs": { + "description": "An evaluation period, in milliseconds (ms), during which any request against the target routing controls will fail. This helps prevent \"flapping\" of state. The wait period is 5000 ms by default, but you can choose a custom value.", + "type": "integer" + } + }, + "required": [ + "WaitPeriodMs", + "TargetControls", + "GatingControls" + ], + "additionalProperties": false + }, + "AssertionRule": { + "description": "An assertion rule enforces that, when a routing control state is changed, that the criteria set by the rule configuration is met. Otherwise, the change to the routing control is not accepted.", + "type": "object", + "properties": { + "WaitPeriodMs": { + "description": "An evaluation period, in milliseconds (ms), during which any request against the target routing controls will fail. This helps prevent \"flapping\" of state. The wait period is 5000 ms by default, but you can choose a custom value.", + "type": "integer" + }, + "AssertedControls": { + "description": "The routing controls that are part of transactions that are evaluated to determine if a request to change a routing control state is allowed. For example, you might include three routing controls, one for each of three AWS Regions.", + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": false + } + }, + "required": [ + "AssertedControls", + "WaitPeriodMs" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + } + }, + "properties": { + "AssertionRule": { + "$ref": "#/definitions/AssertionRule" + }, + "GatingRule": { + "$ref": "#/definitions/GatingRule" + }, + "Name": { + "$ref": "#/definitions/SafetyRuleName" + }, + "SafetyRuleArn": { + "description": "The Amazon Resource Name (ARN) of the safety rule.", + "type": "string" + }, + "ControlPanelArn": { + "description": "The Amazon Resource Name (ARN) of the control panel.", + "type": "string" + }, + "Status": { + "description": "The deployment status of the routing control. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.", + "type": "string", + "enum": [ + "PENDING", + "DEPLOYED", + "PENDING_DELETION" + ] + }, + "RuleConfig": { + "$ref": "#/definitions/RuleConfig" + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "items": { + "$ref": "#/definitions/Tag", + "maxItems": 20 + }, + "insertionOrder": false + } + }, + "oneOf": [ + { + "required": [ + "AssertionRule", + "Name", + "ControlPanelArn", + "RuleConfig" + ] + }, + { + "required": [ + "GatingRule", + "Name", + "ControlPanelArn", + "RuleConfig" + ] + } + ], + "required": [], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/ControlPanelArn", + "/properties/RuleConfig", + "/properties/ControlPanelArn", + "/properties/Tags" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/SafetyRuleArn", + "/properties/Status" + ], + "primaryIdentifier": [ + "/properties/SafetyRuleArn" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-control-config:CreateSafetyRule", + "route53-recovery-control-config:DescribeSafetyRule", + "route53-recovery-control-config:DescribeControlPanel", + "route53-recovery-control-config:DescribeRoutingControl", + "route53-recovery-control-config:ListTagsForResource", + "route53-recovery-control-config:TagResource" + ] + }, + "read": { + "permissions": [ + "route53-recovery-control-config:DescribeSafetyRule", + "route53-recovery-control-config:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "route53-recovery-control-config:UpdateSafetyRule", + "route53-recovery-control-config:DescribeSafetyRule", + "route53-recovery-control-config:ListTagsForResource", + "route53-recovery-control-config:TagResource", + "route53-recovery-control-config:UntagResource" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-control-config:DescribeSafetyRule", + "route53-recovery-control-config:DeleteSafetyRule" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ControlPanelArn": { + "$ref": "resource-schema.json#/properties/ControlPanelArn" + } + }, + "required": [ + "ControlPanelArn" + ] + }, + "permissions": [ + "route53-recovery-control-config:ListSafetyRules" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53recoveryreadiness/cell.json b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/cell.json new file mode 100644 index 00000000..eedc0d53 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/cell.json @@ -0,0 +1,111 @@ +{ + "typeName": "AWS::Route53RecoveryReadiness::Cell", + "description": "The API Schema for AWS Route53 Recovery Readiness Cells.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-reoute53-recovery-readiness.git", + "taggable": true, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "CellName": { + "description": "The name of the cell to create.", + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "maxLength": 64 + }, + "CellArn": { + "description": "The Amazon Resource Name (ARN) of the cell.", + "type": "string", + "maxLength": 256 + }, + "Cells": { + "description": "A list of cell Amazon Resource Names (ARNs) contained within this cell, for use in nested cells. For example, Availability Zones within specific Regions.", + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 5, + "insertionOrder": false + }, + "ParentReadinessScopes": { + "description": "The readiness scope for the cell, which can be a cell Amazon Resource Name (ARN) or a recovery group ARN. This is a list but currently can have only one element.", + "type": "array", + "items": { + "type": "string" + }, + "maxItems": 5, + "insertionOrder": false + }, + "Tags": { + "description": "A collection of tags associated with a resource", + "type": "array", + "items": { + "$ref": "#/definitions/Tag", + "maxItems": 20 + }, + "insertionOrder": false + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/CellArn", + "/properties/ParentReadinessScopes" + ], + "createOnlyProperties": [ + "/properties/CellName" + ], + "primaryIdentifier": [ + "/properties/CellName" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-readiness:CreateCell", + "route53-recovery-readiness:GetCell", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource" + ] + }, + "read": { + "permissions": [ + "route53-recovery-readiness:GetCell", + "route53-recovery-readiness:ListTagsForResources" + ] + }, + "update": { + "permissions": [ + "route53-recovery-readiness:GetCell", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource", + "route53-recovery-readiness:UntagResource", + "route53-recovery-readiness:UpdateCell" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-readiness:DeleteCell", + "route53-recovery-readiness:GetCell" + ] + }, + "list": { + "permissions": [ + "route53-recovery-readiness:ListCells" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53recoveryreadiness/readinesscheck.json b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/readinesscheck.json new file mode 100644 index 00000000..64556654 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/readinesscheck.json @@ -0,0 +1,103 @@ +{ + "typeName": "AWS::Route53RecoveryReadiness::ReadinessCheck", + "description": "Aws Route53 Recovery Readiness Check Schema and API specification.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness.git", + "taggable": true, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "ResourceSetName": { + "description": "The name of the resource set to check.", + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "minLength": 1, + "maxLength": 64 + }, + "ReadinessCheckName": { + "description": "Name of the ReadinessCheck to create.", + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "minLength": 1, + "maxLength": 64 + }, + "ReadinessCheckArn": { + "description": "The Amazon Resource Name (ARN) of the readiness check.", + "type": "string", + "maxLength": 256 + }, + "Tags": { + "description": "A collection of tags associated with a resource.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag", + "maxItems": 20 + }, + "insertionOrder": false + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/ReadinessCheckName" + ], + "readOnlyProperties": [ + "/properties/ReadinessCheckArn" + ], + "primaryIdentifier": [ + "/properties/ReadinessCheckName" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-readiness:CreateReadinessCheck", + "route53-recovery-readiness:GetResourceSet", + "route53-recovery-readiness:GetReadinessCheck", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource" + ] + }, + "read": { + "permissions": [ + "route53-recovery-readiness:GetReadinessCheck", + "route53-recovery-readiness:ListTagsForResources" + ] + }, + "update": { + "permissions": [ + "route53-recovery-readiness:UpdateReadinessCheck", + "route53-recovery-readiness:GetResourceSet", + "route53-recovery-readiness:GetReadinessCheck", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource", + "route53-recovery-readiness:UntagResource" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-readiness:DeleteReadinessCheck", + "route53-recovery-readiness:GetReadinessCheck" + ] + }, + "list": { + "permissions": [ + "route53-recovery-readiness:ListReadinessChecks", + "route53-recovery-readiness:GetReadinessChecks" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53recoveryreadiness/recoverygroup.json b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/recoverygroup.json new file mode 100644 index 00000000..2b792957 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/recoverygroup.json @@ -0,0 +1,106 @@ +{ + "typeName": "AWS::Route53RecoveryReadiness::RecoveryGroup", + "description": "AWS Route53 Recovery Readiness Recovery Group Schema and API specifications.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness-readiness.git", + "taggable": true, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "RecoveryGroupName": { + "description": "The name of the recovery group to create.", + "type": "string", + "pattern": "[a-zA-Z0-9_]+", + "minLength": 1, + "maxLength": 64 + }, + "Cells": { + "description": "A list of the cell Amazon Resource Names (ARNs) in the recovery group.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "maxItems": 5, + "insertionOrder": false + }, + "RecoveryGroupArn": { + "description": "A collection of tags associated with a resource.", + "type": "string", + "maxLength": 256 + }, + "Tags": { + "description": "A collection of tags associated with a resource.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag", + "maxItems": 20 + }, + "insertionOrder": false + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/RecoveryGroupName" + ], + "readOnlyProperties": [ + "/properties/RecoveryGroupArn" + ], + "primaryIdentifier": [ + "/properties/RecoveryGroupName" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-readiness:CreateRecoveryGroup", + "route53-recovery-readiness:GetRecoveryGroup", + "route53-recovery-readiness:GetCell", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource" + ] + }, + "read": { + "permissions": [ + "route53-recovery-readiness:GetRecoveryGroup", + "route53-recovery-readiness:ListTagsForResources" + ] + }, + "update": { + "permissions": [ + "route53-recovery-readiness:UpdateRecoveryGroup", + "route53-recovery-readiness:GetRecoveryGroup", + "route53-recovery-readiness:GetCell", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource", + "route53-recovery-readiness:UntagResource" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-readiness:DeleteRecoveryGroup", + "route53-recovery-readiness:GetRecoveryGroup" + ] + }, + "list": { + "permissions": [ + "route53-recovery-readiness:ListRecoveryGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53recoveryreadiness/resourceset.json b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/resourceset.json new file mode 100644 index 00000000..8571ca80 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53recoveryreadiness/resourceset.json @@ -0,0 +1,218 @@ +{ + "typeName": "AWS::Route53RecoveryReadiness::ResourceSet", + "description": "Schema for the AWS Route53 Recovery Readiness ResourceSet Resource and API.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness.git", + "taggable": true, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "NLBResource": { + "description": "The Network Load Balancer resource that a DNS target resource points to.", + "type": "object", + "properties": { + "Arn": { + "description": "A Network Load Balancer resource Amazon Resource Name (ARN).", + "type": "string" + } + }, + "additionalProperties": false + }, + "R53ResourceRecord": { + "description": "The Route 53 resource that a DNS target resource record points to.", + "type": "object", + "properties": { + "DomainName": { + "description": "The DNS target domain name.", + "type": "string" + }, + "RecordSetId": { + "description": "The Resource Record set id.", + "type": "string" + } + }, + "additionalProperties": false + }, + "TargetResource": { + "description": "The target resource that the Route 53 record points to.", + "type": "object", + "properties": { + "NLBResource": { + "$ref": "#/definitions/NLBResource" + }, + "R53Resource": { + "$ref": "#/definitions/R53ResourceRecord" + } + }, + "oneOf": [ + { + "required": [ + "NLBResource" + ] + }, + { + "required": [ + "R53Resource" + ] + } + ], + "additionalProperties": false + }, + "DNSTargetResource": { + "description": "A component for DNS/routing control readiness checks.", + "type": "object", + "properties": { + "DomainName": { + "description": "The domain name that acts as an ingress point to a portion of the customer application.", + "type": "string" + }, + "RecordSetId": { + "description": "The Route 53 record set ID that will uniquely identify a DNS record, given a name and a type.", + "type": "string" + }, + "HostedZoneArn": { + "description": "The hosted zone Amazon Resource Name (ARN) that contains the DNS record with the provided name of the target resource.", + "type": "string" + }, + "RecordType": { + "description": "The type of DNS record of the target resource.", + "type": "string" + }, + "TargetResource": { + "$ref": "#/definitions/TargetResource" + } + }, + "additionalProperties": false + }, + "Resource": { + "description": "The resource element of a ResourceSet", + "type": "object", + "properties": { + "ResourceArn": { + "description": "The Amazon Resource Name (ARN) of the AWS resource.", + "type": "string" + }, + "ComponentId": { + "description": "The component identifier of the resource, generated when DNS target resource is used.", + "type": "string" + }, + "DnsTargetResource": { + "$ref": "#/definitions/DNSTargetResource" + }, + "ReadinessScopes": { + "description": "A list of recovery group Amazon Resource Names (ARNs) and cell ARNs that this resource is contained within.", + "type": "array", + "items": { + "type": "string", + "maxItems": 5 + }, + "insertionOrder": false + } + }, + "additionalProperties": false + } + }, + "properties": { + "ResourceSetName": { + "description": "The name of the resource set to create.", + "type": "string" + }, + "Resources": { + "description": "A list of resource objects in the resource set.", + "type": "array", + "items": { + "$ref": "#/definitions/Resource" + }, + "minItems": 1, + "maxItems": 6, + "insertionOrder": false + }, + "ResourceSetArn": { + "description": "The Amazon Resource Name (ARN) of the resource set.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "ResourceSetType": { + "description": "The resource type of the resources in the resource set. Enter one of the following values for resource type: \n\nAWS: :AutoScaling: :AutoScalingGroup, AWS: :CloudWatch: :Alarm, AWS: :EC2: :CustomerGateway, AWS: :DynamoDB: :Table, AWS: :EC2: :Volume, AWS: :ElasticLoadBalancing: :LoadBalancer, AWS: :ElasticLoadBalancingV2: :LoadBalancer, AWS: :MSK: :Cluster, AWS: :RDS: :DBCluster, AWS: :Route53: :HealthCheck, AWS: :SQS: :Queue, AWS: :SNS: :Topic, AWS: :SNS: :Subscription, AWS: :EC2: :VPC, AWS: :EC2: :VPNConnection, AWS: :EC2: :VPNGateway, AWS::Route53RecoveryReadiness::DNSTargetResource", + "type": "string" + }, + "Tags": { + "description": "A tag to associate with the parameters for a resource set.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag", + "maxItems": 20 + }, + "insertionOrder": false + } + }, + "additionalProperties": false, + "required": [ + "ResourceSetType", + "Resources" + ], + "createOnlyProperties": [ + "/properties/ResourceSetName", + "/properties/ResourceSetType" + ], + "readOnlyProperties": [ + "/properties/ResourceSetArn" + ], + "primaryIdentifier": [ + "/properties/ResourceSetName" + ], + "handlers": { + "create": { + "permissions": [ + "route53-recovery-readiness:CreateResourceSet", + "route53-recovery-readiness:GetResourceSet", + "route53-recovery-readiness:GetRecoveryGroup", + "route53-recovery-readiness:GetCell", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource" + ] + }, + "read": { + "permissions": [ + "route53-recovery-readiness:GetResourceSet", + "route53-recovery-readiness:ListTagsForResources" + ] + }, + "update": { + "permissions": [ + "route53-recovery-readiness:UpdateResourceSet", + "route53-recovery-readiness:GetResourceSet", + "route53-recovery-readiness:GetRecoveryGroup", + "route53-recovery-readiness:GetCell", + "route53-recovery-readiness:ListTagsForResources", + "route53-recovery-readiness:TagResource", + "route53-recovery-readiness:UntagResource" + ] + }, + "delete": { + "permissions": [ + "route53-recovery-readiness:DeleteResourceSet", + "route53-recovery-readiness:GetResourceSet" + ] + }, + "list": { + "permissions": [ + "route53-recovery-readiness:ListResourceSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/firewalldomainlist.json b/internal/aws/cfn/schemas/aws/route53resolver/firewalldomainlist.json new file mode 100644 index 00000000..75f3fb3b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/firewalldomainlist.json @@ -0,0 +1,205 @@ +{ + "typeName": "AWS::Route53Resolver::FirewallDomainList", + "description": "Resource schema for AWS::Route53Resolver::FirewallDomainList.", + "definitions": { + "Domains": { + "description": "An inline list of domains to use for this domain list.", + "type": "array", + "uniqueItems": true, + "items": { + "description": "FirewallDomainName", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 0, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "properties": { + "Id": { + "description": "ResourceId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Arn": { + "description": "Arn", + "type": "string", + "minLength": 1, + "maxLength": 600 + }, + "Name": { + "description": "FirewallDomainListName", + "type": "string", + "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)", + "minLength": 1, + "maxLength": 64 + }, + "DomainCount": { + "description": "Count", + "type": "integer", + "minimum": 0 + }, + "Status": { + "description": "ResolverFirewallDomainList, possible values are COMPLETE, DELETING, UPDATING, COMPLETE_IMPORT_FAILED, IMPORTING, and INACTIVE_OWNER_ACCOUNT_CLOSED.", + "type": "string", + "enum": [ + "COMPLETE", + "DELETING", + "UPDATING", + "COMPLETE_IMPORT_FAILED", + "IMPORTING", + "INACTIVE_OWNER_ACCOUNT_CLOSED" + ] + }, + "StatusMessage": { + "description": "FirewallDomainListAssociationStatus", + "type": "string" + }, + "ManagedOwnerName": { + "description": "ServicePrincipal", + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "CreatorRequestId": { + "description": "The id of the creator request.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "CreationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "ModificationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "Domains": { + "$ref": "#/definitions/Domains" + }, + "DomainFileUrl": { + "description": "S3 URL to import domains from.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Tags": { + "description": "Tags", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/DomainCount", + "/properties/Status", + "/properties/StatusMessage", + "/properties/ManagedOwnerName", + "/properties/CreatorRequestId", + "/properties/CreationTime", + "/properties/ModificationTime" + ], + "writeOnlyProperties": [ + "/properties/Domains", + "/properties/DomainFileUrl" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "list": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "read": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "delete": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "update": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroup.json b/internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroup.json new file mode 100644 index 00000000..aa3bebe2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroup.json @@ -0,0 +1,262 @@ +{ + "typeName": "AWS::Route53Resolver::FirewallRuleGroup", + "description": "Resource schema for AWS::Route53Resolver::FirewallRuleGroup.", + "definitions": { + "FirewallRule": { + "description": "Firewall Rule associating the Rule Group to a Domain List", + "type": "object", + "properties": { + "FirewallDomainListId": { + "description": "ResourceId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Priority": { + "description": "Rule Priority", + "type": "integer" + }, + "Action": { + "description": "Rule Action", + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "ALERT" + ] + }, + "BlockResponse": { + "description": "BlockResponse", + "type": "string", + "enum": [ + "NODATA", + "NXDOMAIN", + "OVERRIDE" + ] + }, + "BlockOverrideDomain": { + "description": "BlockOverrideDomain", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "BlockOverrideDnsType": { + "description": "BlockOverrideDnsType", + "type": "string", + "enum": [ + "CNAME" + ] + }, + "BlockOverrideTtl": { + "description": "BlockOverrideTtl", + "type": "integer", + "minimum": 0, + "maximum": 604800 + }, + "Qtype": { + "description": "Qtype", + "type": "string", + "minLength": 1, + "maxLength": 16 + } + }, + "required": [ + "FirewallDomainListId", + "Priority", + "Action" + ], + "additionalProperties": false + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 0, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Id": { + "description": "ResourceId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Arn": { + "description": "Arn", + "type": "string", + "minLength": 1, + "maxLength": 600 + }, + "Name": { + "description": "FirewallRuleGroupName", + "type": "string", + "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)", + "minLength": 1, + "maxLength": 64 + }, + "RuleCount": { + "description": "Count", + "type": "integer" + }, + "Status": { + "description": "ResolverFirewallRuleGroupAssociation, possible values are COMPLETE, DELETING, UPDATING, and INACTIVE_OWNER_ACCOUNT_CLOSED.", + "type": "string", + "enum": [ + "COMPLETE", + "DELETING", + "UPDATING", + "INACTIVE_OWNER_ACCOUNT_CLOSED" + ] + }, + "StatusMessage": { + "description": "FirewallRuleGroupStatus", + "type": "string" + }, + "OwnerId": { + "description": "AccountId", + "type": "string", + "minLength": 12, + "maxLength": 32 + }, + "ShareStatus": { + "description": "ShareStatus, possible values are NOT_SHARED, SHARED_WITH_ME, SHARED_BY_ME.", + "type": "string", + "enum": [ + "NOT_SHARED", + "SHARED_WITH_ME", + "SHARED_BY_ME" + ] + }, + "CreatorRequestId": { + "description": "The id of the creator request.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "CreationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "ModificationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "FirewallRules": { + "description": "FirewallRules", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/FirewallRule" + } + }, + "Tags": { + "description": "Tags", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/RuleCount", + "/properties/Status", + "/properties/StatusMessage", + "/properties/OwnerId", + "/properties/ShareStatus", + "/properties/CreatorRequestId", + "/properties/CreationTime", + "/properties/ModificationTime" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "read": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "list": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "delete": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "update": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroupassociation.json b/internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroupassociation.json new file mode 100644 index 00000000..cea5f21a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/firewallrulegroupassociation.json @@ -0,0 +1,203 @@ +{ + "typeName": "AWS::Route53Resolver::FirewallRuleGroupAssociation", + "description": "Resource schema for AWS::Route53Resolver::FirewallRuleGroupAssociation.", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 1, + "maxLength": 127 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string", + "minLength": 0, + "maxLength": 255 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Id": { + "description": "Id", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Arn": { + "description": "Arn", + "type": "string", + "minLength": 1, + "maxLength": 600 + }, + "FirewallRuleGroupId": { + "description": "FirewallRuleGroupId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "VpcId": { + "description": "VpcId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Name": { + "description": "FirewallRuleGroupAssociationName", + "type": "string", + "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)", + "minLength": 0, + "maxLength": 64 + }, + "Priority": { + "description": "Priority", + "type": "integer" + }, + "MutationProtection": { + "description": "MutationProtectionStatus", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "ManagedOwnerName": { + "description": "ServicePrincipal", + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "Status": { + "description": "ResolverFirewallRuleGroupAssociation, possible values are COMPLETE, DELETING, UPDATING, and INACTIVE_OWNER_ACCOUNT_CLOSED.", + "type": "string", + "enum": [ + "COMPLETE", + "DELETING", + "UPDATING", + "INACTIVE_OWNER_ACCOUNT_CLOSED" + ] + }, + "StatusMessage": { + "description": "FirewallDomainListAssociationStatus", + "type": "string" + }, + "CreatorRequestId": { + "description": "The id of the creator request.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "CreationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "ModificationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "Tags": { + "description": "Tags", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "FirewallRuleGroupId", + "VpcId", + "Priority" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/FirewallRuleGroupId", + "/properties/VpcId" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/ManagedOwnerName", + "/properties/Status", + "/properties/StatusMessage", + "/properties/CreatorRequestId", + "/properties/CreationTime", + "/properties/ModificationTime" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "read": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "list": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "delete": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + }, + "update": { + "permissions": [ + "route53resolver:*", + "ec2:*", + "logs:*", + "iam:*", + "lambda:*", + "s3:*" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/outpostresolver.json b/internal/aws/cfn/schemas/aws/route53resolver/outpostresolver.json new file mode 100644 index 00000000..56dbf18b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/outpostresolver.json @@ -0,0 +1,179 @@ +{ + "typeName": "AWS::Route53Resolver::OutpostResolver", + "description": "Resource schema for AWS::Route53Resolver::OutpostResolver.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Id": { + "description": "Id", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "CreatorRequestId": { + "description": "The id of the creator request.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Name": { + "description": "The OutpostResolver name.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Arn": { + "description": "The OutpostResolver ARN.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "OutpostArn": { + "description": "The Outpost ARN.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "PreferredInstanceType": { + "description": "The OutpostResolver instance type.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Status": { + "description": "The OutpostResolver status, possible values are CREATING, OPERATIONAL, UPDATING, DELETING, ACTION_NEEDED, FAILED_CREATION and FAILED_DELETION.", + "type": "string", + "enum": [ + "CREATING", + "OPERATIONAL", + "DELETING", + "UPDATING", + "ACTION_NEEDED", + "FAILED_CREATION", + "FAILED_DELETION" + ] + }, + "StatusMessage": { + "description": "The OutpostResolver status message.", + "type": "string" + }, + "InstanceCount": { + "description": "The number of OutpostResolvers.", + "type": "integer", + "minimum": 4, + "maximum": 256 + }, + "CreationTime": { + "description": "The OutpostResolver creation time", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "ModificationTime": { + "description": "The OutpostResolver last modified time", + "type": "string", + "minLength": 20, + "maxLength": 40 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "OutpostArn", + "PreferredInstanceType", + "Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/Status", + "/properties/StatusMessage", + "/properties/CreationTime", + "/properties/ModificationTime", + "/properties/CreatorRequestId" + ], + "createOnlyProperties": [ + "/properties/OutpostArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "route53resolver:CreateOutpostResolver", + "route53resolver:GetOutpostResolver", + "route53resolver:ListTagsForResource", + "outposts:GetOutpost" + ] + }, + "read": { + "permissions": [ + "route53resolver:GetOutpostResolver", + "route53resolver:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "route53resolver:UpdateOutpostResolver", + "route53resolver:GetOutpostResolver", + "route53resolver:UntagResource", + "route53resolver:TagResource", + "route53resolver:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "route53resolver:DeleteOutpostResolver", + "route53resolver:GetOutpostResolver", + "route53resolver:ListOutpostResolvers", + "route53resolver:ListResolverEndpoints" + ] + }, + "list": { + "permissions": [ + "route53resolver:ListOutpostResolvers", + "route53resolver:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/resolverconfig.json b/internal/aws/cfn/schemas/aws/route53resolver/resolverconfig.json new file mode 100644 index 00000000..43415b5d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/resolverconfig.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::Route53Resolver::ResolverConfig", + "description": "Resource schema for AWS::Route53Resolver::ResolverConfig.", + "properties": { + "Id": { + "description": "Id", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "OwnerId": { + "description": "AccountId", + "type": "string", + "minLength": 12, + "maxLength": 32 + }, + "ResourceId": { + "description": "ResourceId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "AutodefinedReverse": { + "description": "ResolverAutodefinedReverseStatus, possible values are ENABLING, ENABLED, DISABLING AND DISABLED.", + "type": "string", + "enum": [ + "ENABLING", + "ENABLED", + "DISABLING", + "DISABLED" + ] + }, + "AutodefinedReverseFlag": { + "description": "Represents the desired status of AutodefinedReverse. The only supported value on creation is DISABLE. Deletion of this resource will return AutodefinedReverse to its default value (ENABLED).", + "type": "string", + "enum": [ + "DISABLE" + ] + } + }, + "required": [ + "ResourceId", + "AutodefinedReverseFlag" + ], + "readOnlyProperties": [ + "/properties/OwnerId", + "/properties/Id", + "/properties/AutodefinedReverse" + ], + "createOnlyProperties": [ + "/properties/ResourceId", + "/properties/AutodefinedReverseFlag" + ], + "primaryIdentifier": [ + "/properties/ResourceId" + ], + "taggable": false, + "additionalProperties": false, + "propertyTransform": { + "/properties/AutodefinedReverseFlag": "$join([AutodefinedReverseFlag, \"D\"])" + }, + "handlers": { + "create": { + "permissions": [ + "route53resolver:UpdateResolverConfig", + "route53resolver:GetResolverConfig", + "ec2:DescribeVpcs" + ] + }, + "read": { + "permissions": [ + "route53resolver:GetResolverConfig", + "ec2:DescribeVpcs" + ] + }, + "delete": { + "permissions": [ + "route53resolver:UpdateResolverConfig", + "route53resolver:ListResolverConfigs", + "ec2:DescribeVpcs" + ] + }, + "list": { + "permissions": [ + "route53resolver:ListResolverConfigs", + "ec2:DescribeVpcs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/resolverdnssecconfig.json b/internal/aws/cfn/schemas/aws/route53resolver/resolverdnssecconfig.json new file mode 100644 index 00000000..80651f68 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/resolverdnssecconfig.json @@ -0,0 +1,79 @@ +{ + "typeName": "AWS::Route53Resolver::ResolverDNSSECConfig", + "description": "Resource schema for AWS::Route53Resolver::ResolverDNSSECConfig.", + "properties": { + "Id": { + "description": "Id", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "OwnerId": { + "description": "AccountId", + "type": "string", + "minLength": 12, + "maxLength": 32 + }, + "ResourceId": { + "description": "ResourceId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "ValidationStatus": { + "description": "ResolverDNSSECValidationStatus, possible values are ENABLING, ENABLED, DISABLING AND DISABLED.", + "type": "string", + "enum": [ + "ENABLING", + "ENABLED", + "DISABLING", + "DISABLED" + ] + } + }, + "tagging": { + "taggable": false + }, + "readOnlyProperties": [ + "/properties/OwnerId", + "/properties/Id", + "/properties/ValidationStatus" + ], + "createOnlyProperties": [ + "/properties/ResourceId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "resolverdnssec:CreateConfig", + "route53resolver:UpdateResolverDnssecConfig", + "route53resolver:GetResolverDnssecConfig", + "ec2:DescribeVpcs" + ] + }, + "read": { + "permissions": [ + "resolverdnssec:GetConfig", + "route53resolver:ListResolverDnssecConfigs" + ] + }, + "delete": { + "permissions": [ + "resolverdnssec:DeleteConfig", + "route53resolver:UpdateResolverDnssecConfig", + "route53resolver:ListResolverDnssecConfigs", + "ec2:DescribeVpcs" + ] + }, + "list": { + "permissions": [ + "resolverdnssec:ListConfig", + "route53resolver:ListResolverDnssecConfigs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/resolverendpoint.json b/internal/aws/cfn/schemas/aws/route53resolver/resolverendpoint.json new file mode 100644 index 00000000..915a69a4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/resolverendpoint.json @@ -0,0 +1,118 @@ +{ + "typeName": "AWS::Route53Resolver::ResolverEndpoint", + "description": "Resource Type definition for AWS::Route53Resolver::ResolverEndpoint", + "additionalProperties": false, + "properties": { + "ResolverEndpointId": { + "type": "string" + }, + "Protocols": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "OutpostArn": { + "type": "string" + }, + "ResolverEndpointType": { + "type": "string" + }, + "Direction": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Name": { + "type": "string" + }, + "IpAddresses": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/IpAddressRequest" + } + }, + "IpAddressCount": { + "type": "string" + }, + "PreferredInstanceType": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "HostVPCId": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "IpAddressRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "SubnetId": { + "type": "string" + }, + "Ipv6": { + "type": "string" + }, + "Ip": { + "type": "string" + } + }, + "required": [ + "SubnetId" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "IpAddresses", + "Direction", + "SecurityGroupIds" + ], + "createOnlyProperties": [ + "/properties/OutpostArn", + "/properties/Direction", + "/properties/SecurityGroupIds", + "/properties/PreferredInstanceType" + ], + "primaryIdentifier": [ + "/properties/ResolverEndpointId" + ], + "readOnlyProperties": [ + "/properties/ResolverEndpointId", + "/properties/IpAddressCount", + "/properties/Arn", + "/properties/HostVPCId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfig.json b/internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfig.json new file mode 100644 index 00000000..c2f227c1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfig.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::Route53Resolver::ResolverQueryLoggingConfig", + "description": "Resource schema for AWS::Route53Resolver::ResolverQueryLoggingConfig.", + "properties": { + "Id": { + "description": "ResourceId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "OwnerId": { + "description": "AccountId", + "type": "string", + "minLength": 12, + "maxLength": 32 + }, + "Status": { + "description": "ResolverQueryLogConfigStatus, possible values are CREATING, CREATED, DELETED AND FAILED.", + "type": "string", + "enum": [ + "CREATING", + "CREATED", + "DELETING", + "FAILED" + ] + }, + "ShareStatus": { + "description": "ShareStatus, possible values are NOT_SHARED, SHARED_WITH_ME, SHARED_BY_ME.", + "type": "string", + "enum": [ + "NOT_SHARED", + "SHARED_WITH_ME", + "SHARED_BY_ME" + ] + }, + "AssociationCount": { + "description": "Count", + "type": "integer" + }, + "Arn": { + "description": "Arn", + "type": "string", + "minLength": 1, + "maxLength": 600 + }, + "Name": { + "description": "ResolverQueryLogConfigName", + "type": "string", + "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)", + "minLength": 1, + "maxLength": 64 + }, + "CreatorRequestId": { + "description": "The id of the creator request.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "DestinationArn": { + "description": "destination arn", + "type": "string", + "minLength": 1, + "maxLength": 600 + }, + "CreationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + } + }, + "taggable": false, + "createOnlyProperties": [ + "/properties/Name", + "/properties/DestinationArn" + ], + "readOnlyProperties": [ + "/properties/OwnerId", + "/properties/Status", + "/properties/ShareStatus", + "/properties/AssociationCount", + "/properties/Arn", + "/properties/CreatorRequestId", + "/properties/CreationTime", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "resolverquerylogging:CreateConfig", + "resolverquerylogging:GetConfig", + "route53resolver:CreateResolverQueryLogConfig", + "route53resolver:GetResolverQueryLogConfig", + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "resolverquerylogging:GetConfig", + "route53resolver:GetResolverQueryLogConfig" + ] + }, + "delete": { + "permissions": [ + "resolverquerylogging:DeleteConfig", + "resolverquerylogging:ListConfig", + "route53resolver:DeleteResolverQueryLogConfig", + "route53resolver:ListResolverQueryLogConfigs" + ] + }, + "list": { + "permissions": [ + "resolverquerylogging:ListConfig", + "route53resolver:ListResolverQueryLogConfigs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfigassociation.json b/internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfigassociation.json new file mode 100644 index 00000000..81b23d13 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/resolverqueryloggingconfigassociation.json @@ -0,0 +1,102 @@ +{ + "typeName": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation", + "description": "Resource schema for AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation.", + "properties": { + "Id": { + "description": "Id", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "ResolverQueryLogConfigId": { + "description": "ResolverQueryLogConfigId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "ResourceId": { + "description": "ResourceId", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "Status": { + "description": "ResolverQueryLogConfigAssociationStatus", + "type": "string", + "enum": [ + "CREATING", + "ACTIVE", + "ACTION_NEEDED", + "DELETING", + "FAILED", + "OVERRIDDEN" + ] + }, + "Error": { + "description": "ResolverQueryLogConfigAssociationError", + "type": "string", + "enum": [ + "NONE", + "DESTINATION_NOT_FOUND", + "ACCESS_DENIED" + ] + }, + "ErrorMessage": { + "description": "ResolverQueryLogConfigAssociationErrorMessage", + "type": "string" + }, + "CreationTime": { + "description": "Rfc3339TimeString", + "type": "string", + "minLength": 20, + "maxLength": 40 + } + }, + "primaryIdentifier": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/ResolverQueryLogConfigId", + "/properties/ResourceId" + ], + "readOnlyProperties": [ + "/properties/Status", + "/properties/Error", + "/properties/ErrorMessage", + "/properties/CreationTime", + "/properties/Id" + ], + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "resolverquerylogging:AssociateConfig", + "resolverquerylogging:GetConfigAssociation", + "route53resolver:AssociateResolverQueryLogConfig", + "ec2:DescribeVpcs", + "route53resolver:GetResolverQueryLogConfigAssociation" + ] + }, + "read": { + "permissions": [ + "resolverquerylogging:GetConfigAssociation", + "route53resolver:GetResolverQueryLogConfigAssociation" + ] + }, + "delete": { + "permissions": [ + "resolverquerylogging:DisassociateConfig", + "resolverquerylogging:ListConfigAssociation", + "route53resolver:DisassociateResolverQueryLogConfig", + "route53resolver:ListResolverQueryLogConfigAssociations", + "route53resolver:GetResolverQueryLogConfigAssociation" + ] + }, + "list": { + "permissions": [ + "resolverquerylogging:ListConfigAssociations", + "route53resolver:ListResolverQueryLogConfigAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/resolverrule.json b/internal/aws/cfn/schemas/aws/route53resolver/resolverrule.json new file mode 100644 index 00000000..9c162f79 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/resolverrule.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::Route53Resolver::ResolverRule", + "description": "Resource Type definition for AWS::Route53Resolver::ResolverRule", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver.git", + "additionalProperties": false, + "properties": { + "ResolverEndpointId": { + "type": "string", + "description": "The ID of the endpoint that the rule is associated with.", + "minLength": 1, + "maxLength": 64 + }, + "DomainName": { + "type": "string", + "description": "DNS queries for this domain name are forwarded to the IP addresses that are specified in TargetIps", + "minLength": 1, + "maxLength": 256 + }, + "Name": { + "type": "string", + "description": "The name for the Resolver rule", + "minLength": 0, + "maxLength": 64 + }, + "RuleType": { + "type": "string", + "description": "When you want to forward DNS queries for specified domain name to resolvers on your network, specify FORWARD. When you have a forwarding rule to forward DNS queries for a domain to your network and you want Resolver to process queries for a subdomain of that domain, specify SYSTEM.", + "enum": [ + "FORWARD", + "SYSTEM", + "RECURSIVE" + ] + }, + "Tags": { + "type": "array", + "description": "An array of key-value pairs to apply to this resource.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "TargetIps": { + "type": "array", + "description": "An array that contains the IP addresses and ports that an outbound endpoint forwards DNS queries to. Typically, these are the IP addresses of DNS resolvers on your network. Specify IPv4 addresses. IPv6 is not supported.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TargetAddress" + } + }, + "Arn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the resolver rule." + }, + "ResolverRuleId": { + "type": "string", + "description": "The ID of the endpoint that the rule is associated with." + } + }, + "definitions": { + "TargetAddress": { + "type": "object", + "additionalProperties": false, + "properties": { + "Ip": { + "type": "string", + "description": "One IP address that you want to forward DNS queries to. You can specify only IPv4 addresses. " + }, + "Ipv6": { + "type": "string", + "description": "One IPv6 address that you want to forward DNS queries to. You can specify only IPv6 addresses. " + }, + "Port": { + "type": "string", + "description": "The port at Ip that you want to forward DNS queries to. ", + "minLength": 0, + "maxLength": 65535 + }, + "Protocol": { + "type": "string", + "description": "The protocol that you want to use to forward DNS queries. ", + "enum": [ + "Do53", + "DoH" + ] + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "DomainName", + "RuleType" + ], + "primaryIdentifier": [ + "/properties/ResolverRuleId" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/ResolverRuleId" + ], + "createOnlyProperties": [ + "/properties/RuleType" + ], + "conditionalCreateOnlyProperties": [ + "/properties/DomainName" + ], + "propertyTransform": { + "/properties/DomainName": "$join([DomainName, \".\"]) $OR DomainName" + }, + "handlers": { + "create": { + "permissions": [ + "route53resolver:CreateResolverRule", + "route53resolver:GetResolverRule", + "route53resolver:ListTagsForResource", + "route53resolver:TagResource" + ] + }, + "read": { + "permissions": [ + "route53resolver:GetResolverRule", + "route53resolver:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "route53resolver:UpdateResolverRule", + "route53resolver:GetResolverRule", + "route53resolver:ListTagsForResource", + "route53resolver:TagResource", + "route53resolver:UntagResource" + ] + }, + "delete": { + "permissions": [ + "route53resolver:DeleteResolverRule", + "route53resolver:GetResolverRule" + ] + }, + "list": { + "permissions": [ + "route53resolver:ListResolverRules" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/route53resolver/resolverruleassociation.json b/internal/aws/cfn/schemas/aws/route53resolver/resolverruleassociation.json new file mode 100644 index 00000000..7cbf5fc3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/route53resolver/resolverruleassociation.json @@ -0,0 +1,64 @@ +{ + "typeName": "AWS::Route53Resolver::ResolverRuleAssociation", + "description": "In the response to an [AssociateResolverRule](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_AssociateResolverRule.html), [DisassociateResolverRule](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_DisassociateResolverRule.html), or [ListResolverRuleAssociations](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_ListResolverRuleAssociations.html) request, provides information about an association between a resolver rule and a VPC. The association determines which DNS queries that originate in the VPC are forwarded to your network.", + "additionalProperties": false, + "properties": { + "VPCId": { + "description": "The ID of the VPC that you associated the Resolver rule with.", + "type": "string" + }, + "ResolverRuleId": { + "description": "The ID of the Resolver rule that you associated with the VPC that is specified by ``VPCId``.", + "type": "string" + }, + "ResolverRuleAssociationId": { + "description": "", + "type": "string" + }, + "Name": { + "description": "The name of an association between a Resolver rule and a VPC.", + "type": "string" + } + }, + "required": [ + "VPCId", + "ResolverRuleId" + ], + "readOnlyProperties": [ + "/properties/ResolverRuleAssociationId" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/VPCId", + "/properties/ResolverRuleId" + ], + "primaryIdentifier": [ + "/properties/ResolverRuleAssociationId" + ], + "taggable": false, + "handlers": { + "create": { + "permissions": [ + "route53resolver:AssociateResolverRule", + "route53resolver:GetResolverRuleAssociation", + "ec2:DescribeVpcs" + ] + }, + "read": { + "permissions": [ + "route53resolver:GetResolverRuleAssociation" + ] + }, + "delete": { + "permissions": [ + "route53resolver:DisassociateResolverRule", + "route53resolver:GetResolverRuleAssociation" + ] + }, + "list": { + "permissions": [ + "route53resolver:ListResolverRuleAssociations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/rum/appmonitor.json b/internal/aws/cfn/schemas/aws/rum/appmonitor.json new file mode 100644 index 00000000..290501b7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/rum/appmonitor.json @@ -0,0 +1,411 @@ +{ + "typeName": "AWS::RUM::AppMonitor", + "description": "Resource Type definition for AWS::RUM::AppMonitor", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "AppMonitorConfiguration": { + "description": "AppMonitor configuration", + "type": "object", + "additionalProperties": false, + "properties": { + "IdentityPoolId": { + "description": "The ID of the identity pool that is used to authorize the sending of data to RUM.", + "minLength": 1, + "maxLength": 55, + "pattern": "[\\w-]+:[0-9a-f-]+", + "type": "string" + }, + "ExcludedPages": { + "description": "A list of URLs in your website or application to exclude from RUM data collection. You can't include both ExcludedPages and IncludedPages in the same operation.", + "$ref": "#/definitions/Pages" + }, + "IncludedPages": { + "description": "If this app monitor is to collect data from only certain pages in your application, this structure lists those pages. You can't include both ExcludedPages and IncludedPages in the same operation.", + "$ref": "#/definitions/Pages" + }, + "FavoritePages": { + "description": "A list of pages in the RUM console that are to be displayed with a favorite icon.", + "$ref": "#/definitions/FavoritePages" + }, + "SessionSampleRate": { + "description": "Specifies the percentage of user sessions to use for RUM data collection. Choosing a higher percentage gives you more data but also incurs more costs. The number you specify is the percentage of user sessions that will be used. If you omit this parameter, the default of 10 is used.", + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "GuestRoleArn": { + "description": "The ARN of the guest IAM role that is attached to the identity pool that is used to authorize the sending of data to RUM.", + "$ref": "#/definitions/Arn" + }, + "AllowCookies": { + "description": "If you set this to true, the RUM web client sets two cookies, a session cookie and a user cookie. The cookies allow the RUM web client to collect data relating to the number of users an application has and the behavior of the application across a sequence of events. Cookies are stored in the top-level domain of the current page.", + "type": "boolean" + }, + "Telemetries": { + "description": "An array that lists the types of telemetry data that this app monitor is to collect.", + "type": "array", + "items": { + "$ref": "#/definitions/Telemetry" + }, + "insertionOrder": false + }, + "EnableXRay": { + "description": "If you set this to true, RUM enables xray tracing for the user sessions that RUM samples. RUM adds an xray trace header to allowed HTTP requests. It also records an xray segment for allowed HTTP requests. You can see traces and segments from these user sessions in the xray console and the CW ServiceLens console.", + "type": "boolean" + }, + "MetricDestinations": { + "description": "An array of structures which define the destinations and the metrics that you want to send.", + "type": "array", + "minItems": 0, + "maxItems": 20, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MetricDestination" + } + } + } + }, + "TagDef": { + "description": "Assigns one or more tags (key-value pairs) to the app monitor. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. Tags don't have any semantic meaning to AWS and are interpreted strictly as strings of characters.You can associate as many as 50 tags with an app monitor.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Pages": { + "type": "array", + "description": "List of url pages", + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Url" + }, + "insertionOrder": false + }, + "FavoritePages": { + "type": "array", + "description": "List of favorite pages", + "minItems": 0, + "maxItems": 50, + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "Url": { + "description": "Page Url", + "type": "string", + "pattern": "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)", + "minLength": 1, + "maxLength": 1260 + }, + "Arn": { + "description": "Resource ARN", + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:.*" + }, + "Telemetry": { + "type": "string", + "enum": [ + "errors", + "performance", + "http" + ] + }, + "MetricDestination": { + "description": "An structure which defines the destination and the metrics that you want to send.", + "additionalProperties": false, + "type": "object", + "properties": { + "Destination": { + "description": "Defines the destination to send the metrics to. Valid values are CloudWatch and Evidently. If you specify Evidently, you must also specify the ARN of the Evidently experiment that is to be the destination and an IAM role that has permission to write to the experiment.", + "type": "string", + "enum": [ + "CloudWatch", + "Evidently" + ] + }, + "DestinationArn": { + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:.*", + "description": "Use this parameter only if Destination is Evidently. This parameter specifies the ARN of the Evidently experiment that will receive the extended metrics." + }, + "IamRoleArn": { + "type": "string", + "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:.*", + "description": "This parameter is required if Destination is Evidently. If Destination is CloudWatch, do not use this parameter.\n\nThis parameter specifies the ARN of an IAM role that RUM will assume to write to the Evidently experiment that you are sending metrics to. This role must have permission to write to that experiment." + }, + "MetricDefinitions": { + "description": "An array of structures which define the metrics that you want to send.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "minItems": 0, + "maxItems": 2000, + "items": { + "$ref": "#/definitions/MetricDefinition" + } + } + }, + "required": [ + "Destination" + ] + }, + "MetricDefinition": { + "description": "A single metric definition", + "additionalProperties": false, + "type": "object", + "properties": { + "Name": { + "description": "The name for the metric that is defined in this structure. For extended metrics, valid values are the following:\n\nPerformanceNavigationDuration\n\nPerformanceResourceDuration\n\nNavigationSatisfiedTransaction\n\nNavigationToleratedTransaction\n\nNavigationFrustratedTransaction\n\nWebVitalsCumulativeLayoutShift\n\nWebVitalsFirstInputDelay\n\nWebVitalsLargestContentfulPaint\n\nJsErrorCount\n\nHttpErrorCount\n\nSessionCount", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "Namespace": { + "description": "The namespace used by CloudWatch Metrics for the metric that is defined in this structure", + "type": "string", + "pattern": "[a-zA-Z0-9-._/#:]+$", + "minLength": 1, + "maxLength": 237 + }, + "ValueKey": { + "description": "The field within the event object that the metric value is sourced from.\n\nIf you omit this field, a hardcoded value of 1 is pushed as the metric value. This is useful if you just want to count the number of events that the filter catches.\n\nIf this metric is sent to Evidently, this field will be passed to Evidently raw and Evidently will handle data extraction from the event.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 256 + }, + "UnitLabel": { + "description": "The CloudWatch metric unit to use for this metric. If you omit this field, the metric is recorded with no unit.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "DimensionKeys": { + "description": "Use this field only if you are sending the metric to CloudWatch.\n\nThis field is a map of field paths to dimension names. It defines the dimensions to associate with this metric in CloudWatch. For extended metrics, valid values for the entries in this field are the following:\n\n\"metadata.pageId\": \"PageId\"\n\n\"metadata.browserName\": \"BrowserName\"\n\n\"metadata.deviceType\": \"DeviceType\"\n\n\"metadata.osName\": \"OSName\"\n\n\"metadata.countryCode\": \"CountryCode\"\n\n\"event_details.fileType\": \"FileType\"\n\nAll dimensions listed in this field must also be included in EventPattern.", + "type": "object", + "patternProperties": { + "^(?!:).*[^\\s].*": { + "type": "string", + "pattern": ".*[^\\s].*", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false + }, + "EventPattern": { + "description": "The pattern that defines the metric, specified as a JSON object. RUM checks events that happen in a user's session against the pattern, and events that match the pattern are sent to the metric destination.\n\nWhen you define extended metrics, the metric definition is not valid if EventPattern is omitted.\n\nExample event patterns:\n\n'{ \"event_type\": [\"com.amazon.rum.js_error_event\"], \"metadata\": { \"browserName\": [ \"Chrome\", \"Safari\" ], } }'\n\n'{ \"event_type\": [\"com.amazon.rum.performance_navigation_event\"], \"metadata\": { \"browserName\": [ \"Chrome\", \"Firefox\" ] }, \"event_details\": { \"duration\": [{ \"numeric\": [ \"<\", 2000 ] }] } }'\n\n'{ \"event_type\": [\"com.amazon.rum.performance_navigation_event\"], \"metadata\": { \"browserName\": [ \"Chrome\", \"Safari\" ], \"countryCode\": [ \"US\" ] }, \"event_details\": { \"duration\": [{ \"numeric\": [ \">=\", 2000, \"<\", 8000 ] }] } }'\n\nIf the metrics destination' is CloudWatch and the event also matches a value in DimensionKeys, then the metric is published with the specified dimensions.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + } + }, + "required": [ + "Name" + ] + }, + "CustomEventsStatus": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "CustomEvents": { + "description": "AppMonitor custom events configuration", + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "description": "Indicates whether AppMonitor accepts custom events.", + "$ref": "#/definitions/CustomEventsStatus" + } + } + } + }, + "properties": { + "Id": { + "description": "The unique ID of the new app monitor.", + "type": "string", + "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$", + "minLength": 36, + "maxLength": 36 + }, + "Name": { + "description": "A name for the app monitor", + "type": "string", + "pattern": "[\\.\\-_/#A-Za-z0-9]+", + "minLength": 1, + "maxLength": 255 + }, + "Domain": { + "description": "The top-level internet domain name for which your application has administrative authority.", + "type": "string", + "pattern": "^(localhost)|^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))|^(\\*\\.)(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))", + "minLength": 1, + "maxLength": 253 + }, + "CwLogEnabled": { + "description": "Data collected by RUM is kept by RUM for 30 days and then deleted. This parameter specifies whether RUM sends a copy of this telemetry data to CWLlong in your account. This enables you to keep the telemetry data for more than 30 days, but it does incur CWLlong charges. If you omit this parameter, the default is false", + "type": "boolean" + }, + "Tags": { + "$ref": "#/definitions/TagDef" + }, + "AppMonitorConfiguration": { + "$ref": "#/definitions/AppMonitorConfiguration" + }, + "CustomEvents": { + "$ref": "#/definitions/CustomEvents" + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ] + ], + "required": [ + "Name", + "Domain" + ], + "handlers": { + "create": { + "permissions": [ + "rum:CreateAppMonitor", + "dynamodb:GetItem", + "dynamodb:PutItem", + "s3:GetObject", + "s3:PutObject", + "s3:GetObjectAcl", + "s3:DoesObjectExist", + "logs:CreateLogDelivery", + "logs:CreateLogGroup", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "logs:PutRetentionPolicy", + "rum:TagResource", + "cognito-identity:DescribeIdentityPool", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "rum:PutRumMetricsDestination", + "rum:BatchCreateRumMetricDefinitions" + ] + }, + "read": { + "permissions": [ + "rum:GetAppMonitor", + "dynamodb:GetItem", + "s3:GetObject", + "s3:DoesObjectExist", + "s3:GetObjectAcl", + "rum:ListTagsForResource", + "rum:ListRumMetricsDestinations", + "rum:BatchGetRumMetricDefinitions" + ] + }, + "update": { + "permissions": [ + "rum:UpdateAppMonitor", + "dynamodb:GetItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:Query", + "s3:GetObject", + "s3:PutObject", + "s3:GetObjectAcl", + "s3:DoesObjectExist", + "logs:CreateLogDelivery", + "logs:CreateLogGroup", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "logs:PutRetentionPolicy", + "rum:TagResource", + "rum:UntagResource", + "rum:ListTagsForResource", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "rum:PutRumMetricsDestination", + "rum:DeleteRumMetricsDestination", + "rum:ListRumMetricsDestinations", + "rum:BatchCreateRumMetricDefinitions", + "rum:BatchDeleteRumMetricDefinitions", + "rum:BatchGetRumMetricDefinitions", + "rum:UpdateRumMetricDefinition" + ] + }, + "delete": { + "permissions": [ + "rum:DeleteAppMonitor", + "dynamodb:DeleteItem", + "dynamodb:Query", + "logs:DeleteLogDelivery", + "s3:DeleteObject", + "s3:DoesObjectExist", + "rum:UntagResource", + "rum:DeleteRumMetricsDestination", + "rum:BatchDeleteRumMetricDefinitions" + ] + }, + "list": { + "permissions": [ + "rum:ListAppMonitors", + "dynamodb:DescribeTable", + "rum:GetAppMonitor", + "dynamodb:GetItem", + "dynamodb:BatchGetItem", + "dynamodb:Query", + "s3:GetObject", + "s3:DoesObjectExist", + "s3:GetObjectAcl", + "logs:DescribeLogGroups", + "rum:ListTagsForResource" + ] + } + }, + "taggable": true +} diff --git a/internal/aws/cfn/schemas/aws/s3/accesspoint.json b/internal/aws/cfn/schemas/aws/s3/accesspoint.json new file mode 100644 index 00000000..e9e62c32 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3/accesspoint.json @@ -0,0 +1,152 @@ +{ + "typeName": "AWS::S3::AccessPoint", + "description": "The AWS::S3::AccessPoint resource is an Amazon S3 resource type that you can use to access buckets.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "definitions": { + "VpcConfiguration": { + "description": "The Virtual Private Cloud (VPC) configuration for a bucket access point.", + "type": "object", + "properties": { + "VpcId": { + "description": "If this field is specified, this access point will only allow connections from the specified VPC ID.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + } + }, + "PublicAccessBlockConfiguration": { + "type": "object", + "properties": { + "BlockPublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for buckets in this account. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs." + }, + "IgnorePublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set." + }, + "BlockPublicPolicy": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies." + }, + "RestrictPublicBuckets": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked." + } + } + }, + "Arn": { + "description": "the Amazon Resource Name (ARN) of the specified accesspoint.", + "type": "string" + } + }, + "properties": { + "Name": { + "description": "The name you want to assign to this Access Point. If you don't specify a name, AWS CloudFormation generates a unique ID and uses that ID for the access point name.", + "type": "string", + "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$", + "minLength": 3, + "maxLength": 50 + }, + "Alias": { + "description": "The alias of this Access Point. This alias can be used for compatibility purposes with other AWS services and third-party applications.", + "type": "string", + "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$", + "minLength": 3, + "maxLength": 63 + }, + "Bucket": { + "description": "The name of the bucket that you want to associate this Access Point with.", + "type": "string", + "minLength": 3, + "maxLength": 255 + }, + "BucketAccountId": { + "description": "The AWS account ID associated with the S3 bucket associated with this access point.", + "type": "string", + "pattern": "^\\d{12}$", + "maxLength": 64 + }, + "VpcConfiguration": { + "description": "If you include this field, Amazon S3 restricts access to this Access Point to requests from the specified Virtual Private Cloud (VPC).", + "$ref": "#/definitions/VpcConfiguration" + }, + "PublicAccessBlockConfiguration": { + "description": "The PublicAccessBlock configuration that you want to apply to this Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.", + "$ref": "#/definitions/PublicAccessBlockConfiguration" + }, + "Policy": { + "description": "The Access Point Policy you want to apply to this access point.", + "type": "object" + }, + "NetworkOrigin": { + "description": "Indicates whether this Access Point allows access from the public Internet. If VpcConfiguration is specified for this Access Point, then NetworkOrigin is VPC, and the Access Point doesn't allow access from the public Internet. Otherwise, NetworkOrigin is Internet, and the Access Point allows access from the public Internet, subject to the Access Point and bucket access policies.", + "type": "string", + "enum": [ + "Internet", + "VPC" + ] + }, + "Arn": { + "$ref": "#/definitions/Arn", + "description": "The Amazon Resource Name (ARN) of the specified accesspoint.", + "examples": [ + "arn:aws:s3:us-west-2:123456789012:accesspoint/test" + ] + } + }, + "required": [ + "Bucket" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Bucket", + "/properties/BucketAccountId", + "/properties/VpcConfiguration" + ], + "readOnlyProperties": [ + "/properties/Alias", + "/properties/NetworkOrigin", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "s3:CreateAccessPoint", + "s3:PutAccessPointPolicy", + "s3:PutAccessPointPublicAccessBlock" + ] + }, + "read": { + "permissions": [ + "s3:GetAccessPoint", + "s3:GetAccessPointPolicy" + ] + }, + "update": { + "permissions": [ + "s3:PutAccessPointPolicy", + "s3:PutAccessPointPublicAccessBlock", + "s3:DeleteAccessPointPolicy", + "s3:GetAccessPoint", + "s3:GetAccessPointPolicy" + ] + }, + "delete": { + "permissions": [ + "s3:DeleteAccessPointPolicy", + "s3:DeleteAccessPoint" + ] + }, + "list": { + "permissions": [ + "s3:ListAccessPoints" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/s3/bucket.json b/internal/aws/cfn/schemas/aws/s3/bucket.json new file mode 100644 index 00000000..729f55ae --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3/bucket.json @@ -0,0 +1,1774 @@ +{ + "typeName": "AWS::S3::Bucket", + "description": "The ``AWS::S3::Bucket`` resource creates an Amazon S3 bucket in the same AWS Region where you create the AWS CloudFormation stack.\n To control how AWS CloudFormation handles the bucket when the stack is deleted, you can set a deletion policy for your bucket. You can choose to *retain* the bucket or to *delete* the bucket. For more information, see [DeletionPolicy Attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html).\n You can only delete empty buckets. Deletion fails for buckets that have contents.", + "additionalProperties": false, + "properties": { + "AccelerateConfiguration": { + "$ref": "#/definitions/AccelerateConfiguration", + "description": "Configures the transfer acceleration state for an Amazon S3 bucket. For more information, see [Amazon S3 Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html) in the *Amazon S3 User Guide*." + }, + "AccessControl": { + "description": "This is a legacy property, and it is not recommended for most use cases. A majority of modern use cases in Amazon S3 no longer require the use of ACLs, and we recommend that you keep ACLs disabled. For more information, see [Controlling object ownership](https://docs.aws.amazon.com//AmazonS3/latest/userguide/about-object-ownership.html) in the *Amazon S3 User Guide*.\n A canned access control list (ACL) that grants predefined permissions to the bucket. For more information about canned ACLs, see [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) in the *Amazon S3 User Guide*.\n S3 buckets are created with ACLs disabled by default. Therefore, unless you explicitly set the [AWS::S3::OwnershipControls](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ownershipcontrols.html) property to enable ACLs, your resource will fail to deploy with any value other than Private. Use cases requiring ACLs are uncommon.\n The majority of access control configurations can be successfully and more easily achieved with bucket policies. For more information, see [AWS::S3::BucketPolicy](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html). For examples of common policy configurations, including S3 Server Access Logs buckets and more, see [Bucket policy examples](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html) in the *Amazon S3 User Guide*.", + "enum": [ + "AuthenticatedRead", + "AwsExecRead", + "BucketOwnerFullControl", + "BucketOwnerRead", + "LogDeliveryWrite", + "Private", + "PublicRead", + "PublicReadWrite" + ], + "type": "string" + }, + "AnalyticsConfigurations": { + "description": "Specifies the configuration and any analyses for the analytics filter of an Amazon S3 bucket.", + "items": { + "$ref": "#/definitions/AnalyticsConfiguration" + }, + "type": "array", + "uniqueItems": true, + "insertionOrder": true + }, + "BucketEncryption": { + "$ref": "#/definitions/BucketEncryption", + "description": "Specifies default encryption for a bucket using server-side encryption with Amazon S3-managed keys (SSE-S3), AWS KMS-managed keys (SSE-KMS), or dual-layer server-side encryption with KMS-managed keys (DSSE-KMS). For information about the Amazon S3 default encryption feature, see [Amazon S3 Default Encryption for S3 Buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html) in the *Amazon S3 User Guide*." + }, + "BucketName": { + "description": "A name for the bucket. If you don't specify a name, AWS CloudFormation generates a unique ID and uses that ID for the bucket name. The bucket name must contain only lowercase letters, numbers, periods (.), and dashes (-) and must follow [Amazon S3 bucket restrictions and limitations](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html). For more information, see [Rules for naming Amazon S3 buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules) in the *Amazon S3 User Guide*. \n If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you need to replace the resource, specify a new name.", + "maxLength": 63, + "minLength": 3, + "pattern": "^[a-z0-9][a-z0-9//.//-]*[a-z0-9]$", + "type": "string" + }, + "CorsConfiguration": { + "$ref": "#/definitions/CorsConfiguration", + "description": "Describes the cross-origin access configuration for objects in an Amazon S3 bucket. For more information, see [Enabling Cross-Origin Resource Sharing](https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the *Amazon S3 User Guide*." + }, + "IntelligentTieringConfigurations": { + "description": "Defines how Amazon S3 handles Intelligent-Tiering storage.", + "items": { + "$ref": "#/definitions/IntelligentTieringConfiguration" + }, + "type": "array", + "uniqueItems": true, + "insertionOrder": true + }, + "InventoryConfigurations": { + "description": "Specifies the inventory configuration for an Amazon S3 bucket. For more information, see [GET Bucket inventory](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html) in the *Amazon S3 API Reference*.", + "items": { + "$ref": "#/definitions/InventoryConfiguration" + }, + "type": "array", + "uniqueItems": true, + "insertionOrder": true + }, + "LifecycleConfiguration": { + "$ref": "#/definitions/LifecycleConfiguration", + "description": "Specifies the lifecycle configuration for objects in an Amazon S3 bucket. For more information, see [Object Lifecycle Management](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) in the *Amazon S3 User Guide*." + }, + "LoggingConfiguration": { + "$ref": "#/definitions/LoggingConfiguration", + "description": "Settings that define where logs are stored." + }, + "MetricsConfigurations": { + "description": "Specifies a metrics configuration for the CloudWatch request metrics (specified by the metrics configuration ID) from an Amazon S3 bucket. If you're updating an existing metrics configuration, note that this is a full replacement of the existing metrics configuration. If you don't include the elements you want to keep, they are erased. For more information, see [PutBucketMetricsConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTMetricConfiguration.html).", + "items": { + "$ref": "#/definitions/MetricsConfiguration" + }, + "type": "array", + "uniqueItems": true, + "insertionOrder": true + }, + "NotificationConfiguration": { + "$ref": "#/definitions/NotificationConfiguration", + "description": "Configuration that defines how Amazon S3 handles bucket notifications." + }, + "ObjectLockConfiguration": { + "$ref": "#/definitions/ObjectLockConfiguration", + "description": "This operation is not supported by directory buckets.\n Places an Object Lock configuration on the specified bucket. The rule specified in the Object Lock configuration will be applied by default to every new object placed in the specified bucket. For more information, see [Locking Objects](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html). \n + The ``DefaultRetention`` settings require both a mode and a period.\n + The ``DefaultRetention`` period can be either ``Days`` or ``Years`` but you must select one. You cannot specify ``Days`` and ``Years`` at the same time.\n + You can enable Object Lock for new or existing buckets. For more information, see [Configuring Object Lock](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-configure.html)." + }, + "ObjectLockEnabled": { + "description": "Indicates whether this bucket has an Object Lock configuration enabled. Enable ``ObjectLockEnabled`` when you apply ``ObjectLockConfiguration`` to a bucket.", + "type": "boolean" + }, + "OwnershipControls": { + "description": "Configuration that defines how Amazon S3 handles Object Ownership rules.", + "$ref": "#/definitions/OwnershipControls" + }, + "PublicAccessBlockConfiguration": { + "$ref": "#/definitions/PublicAccessBlockConfiguration", + "description": "Configuration that defines how Amazon S3 handles public access." + }, + "ReplicationConfiguration": { + "$ref": "#/definitions/ReplicationConfiguration", + "description": "Configuration for replicating objects in an S3 bucket. To enable replication, you must also enable versioning by using the ``VersioningConfiguration`` property.\n Amazon S3 can store replicated objects in a single destination bucket or multiple destination buckets. The destination bucket or buckets must already exist." + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this S3 bucket.", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array" + }, + "VersioningConfiguration": { + "$ref": "#/definitions/VersioningConfiguration", + "description": "Enables multiple versions of all objects in this bucket. You might enable versioning to prevent objects from being deleted or overwritten by mistake or to archive objects so that you can retrieve previous versions of them." + }, + "WebsiteConfiguration": { + "$ref": "#/definitions/WebsiteConfiguration", + "description": "Information used to configure the bucket as a static website. For more information, see [Hosting Websites on Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html)." + }, + "Arn": { + "$ref": "#/definitions/Arn", + "description": "The Amazon Resource Name (ARN) of the specified bucket.", + "examples": [ + "arn:aws:s3:::mybucket" + ] + }, + "DomainName": { + "description": "The IPv4 DNS name of the specified bucket.", + "examples": [ + "mystack-mybucket-kdwwxmddtr2g.s3.amazonaws.com" + ], + "type": "string" + }, + "DualStackDomainName": { + "description": "The IPv6 DNS name of the specified bucket. For more information about dual-stack endpoints, see [Using Amazon S3 Dual-Stack Endpoints](https://docs.aws.amazon.com/AmazonS3/latest/dev/dual-stack-endpoints.html).", + "examples": [ + "mystack-mybucket-kdwwxmddtr2g.s3.dualstack.us-east-2.amazonaws.com" + ], + "type": "string" + }, + "RegionalDomainName": { + "description": "Returns the regional domain name of the specified bucket.", + "examples": [ + "mystack-mybucket-kdwwxmddtr2g.s3.us-east-2.amazonaws.com" + ], + "type": "string" + }, + "WebsiteURL": { + "description": "The Amazon S3 website endpoint for the specified bucket.", + "examples": [ + "Example (IPv4): http://mystack-mybucket-kdwwxmddtr2g.s3-website-us-east-2.amazonaws.com/", + "Example (IPv6): http://mystack-mybucket-kdwwxmddtr2g.s3.dualstack.us-east-2.amazonaws.com/" + ], + "format": "uri", + "type": "string" + } + }, + "definitions": { + "TagFilter": { + "description": "Specifies tags to use to identify a subset of objects for an Amazon S3 bucket.", + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The tag value." + }, + "Key": { + "type": "string", + "description": "The tag key." + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Destination": { + "description": "Specifies information about where to publish analysis or configuration results for an Amazon S3 bucket.", + "type": "object", + "additionalProperties": false, + "properties": { + "BucketArn": { + "description": "The Amazon Resource Name (ARN) of the bucket to which data is exported.", + "type": "string" + }, + "BucketAccountId": { + "description": "The account ID that owns the destination S3 bucket. If no account ID is provided, the owner is not validated before exporting data.\n Although this value is optional, we strongly recommend that you set it to help prevent problems if the destination bucket ownership changes.", + "type": "string" + }, + "Format": { + "description": "Specifies the file format used when exporting data to Amazon S3.\n *Allowed values*: ``CSV`` | ``ORC`` | ``Parquet``", + "type": "string", + "enum": [ + "CSV", + "ORC", + "Parquet" + ] + }, + "Prefix": { + "description": "The prefix to use when exporting data. The prefix is prepended to all results.", + "type": "string" + } + }, + "required": [ + "BucketArn", + "Format" + ] + }, + "AccelerateConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccelerationStatus": { + "description": "Specifies the transfer acceleration status of the bucket.", + "type": "string", + "enum": [ + "Enabled", + "Suspended" + ] + } + }, + "required": [ + "AccelerationStatus" + ], + "description": "Configures the transfer acceleration state for an Amazon S3 bucket. For more information, see [Amazon S3 Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html) in the *Amazon S3 User Guide*." + }, + "AnalyticsConfiguration": { + "description": "Specifies the configuration and any analyses for the analytics filter of an Amazon S3 bucket.", + "type": "object", + "additionalProperties": false, + "properties": { + "TagFilters": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/TagFilter" + }, + "description": "The tags to use when evaluating an analytics filter.\n The analytics only includes objects that meet the filter's criteria. If no filter is specified, all of the contents of the bucket are included in the analysis." + }, + "StorageClassAnalysis": { + "$ref": "#/definitions/StorageClassAnalysis", + "description": "Contains data related to access patterns to be collected and made available to analyze the tradeoffs between different storage classes." + }, + "Id": { + "description": "The ID that identifies the analytics configuration.", + "type": "string" + }, + "Prefix": { + "description": "The prefix that an object must have to be included in the analytics results.", + "type": "string" + } + }, + "required": [ + "StorageClassAnalysis", + "Id" + ] + }, + "StorageClassAnalysis": { + "description": "Specifies data related to access patterns to be collected and made available to analyze the tradeoffs between different storage classes for an Amazon S3 bucket.", + "type": "object", + "additionalProperties": false, + "properties": { + "DataExport": { + "$ref": "#/definitions/DataExport", + "description": "Specifies how data related to the storage class analysis for an Amazon S3 bucket should be exported." + } + } + }, + "DataExport": { + "description": "Specifies how data related to the storage class analysis for an Amazon S3 bucket should be exported.", + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/Destination", + "description": "The place to store the data for an analysis." + }, + "OutputSchemaVersion": { + "description": "The version of the output schema to use when exporting data. Must be ``V_1``.", + "type": "string", + "const": "V_1" + } + }, + "required": [ + "Destination", + "OutputSchemaVersion" + ] + }, + "BucketEncryption": { + "description": "Specifies default encryption for a bucket using server-side encryption with Amazon S3-managed keys (SSE-S3), AWS KMS-managed keys (SSE-KMS), or dual-layer server-side encryption with KMS-managed keys (DSSE-KMS). For information about the Amazon S3 default encryption feature, see [Amazon S3 Default Encryption for S3 Buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html) in the *Amazon S3 User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "ServerSideEncryptionConfiguration": { + "description": "Specifies the default server-side-encryption configuration.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ServerSideEncryptionRule" + } + } + }, + "required": [ + "ServerSideEncryptionConfiguration" + ] + }, + "ServerSideEncryptionRule": { + "description": "Specifies the default server-side encryption configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "BucketKeyEnabled": { + "description": "Specifies whether Amazon S3 should use an S3 Bucket Key with server-side encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects are not affected. Setting the ``BucketKeyEnabled`` element to ``true`` causes Amazon S3 to use an S3 Bucket Key. By default, S3 Bucket Key is not enabled.\n For more information, see [Amazon S3 Bucket Keys](https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html) in the *Amazon S3 User Guide*.", + "type": "boolean" + }, + "ServerSideEncryptionByDefault": { + "$ref": "#/definitions/ServerSideEncryptionByDefault", + "description": "Specifies the default server-side encryption to apply to new objects in the bucket. If a PUT Object request doesn't specify any server-side encryption, this default encryption will be applied." + } + } + }, + "ServerSideEncryptionByDefault": { + "description": "Describes the default server-side encryption to apply to new objects in the bucket. If a PUT Object request doesn't specify any server-side encryption, this default encryption will be applied. If you don't specify a customer managed key at configuration, Amazon S3 automatically creates an AWS KMS key in your AWS account the first time that you add an object encrypted with SSE-KMS to a bucket. By default, Amazon S3 uses this KMS key for SSE-KMS. For more information, see [PUT Bucket encryption](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html) in the *Amazon S3 API Reference*.", + "type": "object", + "properties": { + "KMSMasterKeyID": { + "description": "AWS Key Management Service (KMS) customer AWS KMS key ID to use for the default encryption. This parameter is allowed if and only if ``SSEAlgorithm`` is set to ``aws:kms`` or ``aws:kms:dsse``.\n You can specify the key ID, key alias, or the Amazon Resource Name (ARN) of the KMS key.\n + Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab`` \n + Key ARN: ``arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`` \n + Key Alias: ``alias/alias-name`` \n \n If you use a key ID, you can run into a LogDestination undeliverable error when creating a VPC flow log. \n If you are using encryption with cross-account or AWS service operations you must use a fully qualified KMS key ARN. For more information, see [Using encryption for cross-account operations](https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy).\n Amazon S3 only supports symmetric encryption KMS keys. For more information, see [Asymmetric keys in KMS](https://docs.aws.amazon.com//kms/latest/developerguide/symmetric-asymmetric.html) in the *Key Management Service Developer Guide*.", + "type": "string" + }, + "SSEAlgorithm": { + "type": "string", + "enum": [ + "aws:kms", + "AES256", + "aws:kms:dsse" + ], + "description": "Server-side encryption algorithm to use for the default encryption." + } + }, + "additionalProperties": false, + "required": [ + "SSEAlgorithm" + ] + }, + "CorsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "CorsRules": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/CorsRule", + "maxLength": 100 + }, + "description": "A set of origins and methods (cross-origin access that you want to allow). You can add up to 100 rules to the configuration." + } + }, + "required": [ + "CorsRules" + ], + "description": "Describes the cross-origin access configuration for objects in an Amazon S3 bucket. For more information, see [Enabling Cross-Origin Resource Sharing](https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the *Amazon S3 User Guide*." + }, + "CorsRule": { + "type": "object", + "description": "Specifies a cross-origin access rule for an Amazon S3 bucket.", + "additionalProperties": false, + "properties": { + "AllowedHeaders": { + "description": "Headers that are specified in the ``Access-Control-Request-Headers`` header. These headers are allowed in a preflight OPTIONS request. In response to any preflight OPTIONS request, Amazon S3 returns any requested headers that are allowed.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "AllowedMethods": { + "description": "An HTTP method that you allow the origin to run.\n *Allowed values*: ``GET`` | ``PUT`` | ``HEAD`` | ``POST`` | ``DELETE``", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string", + "enum": [ + "GET", + "PUT", + "HEAD", + "POST", + "DELETE" + ] + } + }, + "AllowedOrigins": { + "description": "One or more origins you want customers to be able to access the bucket from.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "ExposedHeaders": { + "description": "One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript ``XMLHttpRequest`` object).", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string" + } + }, + "Id": { + "description": "A unique identifier for this rule. The value must be no more than 255 characters.", + "type": "string", + "maxLength": 255 + }, + "MaxAge": { + "description": "The time in seconds that your browser is to cache the preflight response for the specified resource.", + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "AllowedMethods", + "AllowedOrigins" + ] + }, + "IntelligentTieringConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "description": "The ID used to identify the S3 Intelligent-Tiering configuration.", + "type": "string" + }, + "Prefix": { + "description": "An object key name prefix that identifies the subset of objects to which the rule applies.", + "type": "string" + }, + "Status": { + "description": "Specifies the status of the configuration.", + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ] + }, + "TagFilters": { + "description": "A container for a key-value pair.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/TagFilter" + } + }, + "Tierings": { + "description": "Specifies a list of S3 Intelligent-Tiering storage class tiers in the configuration. At least one tier must be defined in the list. At most, you can specify two tiers in the list, one for each available AccessTier: ``ARCHIVE_ACCESS`` and ``DEEP_ARCHIVE_ACCESS``.\n You only need Intelligent Tiering Configuration enabled on a bucket if you want to automatically move objects stored in the Intelligent-Tiering storage class to Archive Access or Deep Archive Access tiers.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Tiering" + } + } + }, + "required": [ + "Id", + "Status", + "Tierings" + ], + "description": "Specifies the S3 Intelligent-Tiering configuration for an Amazon S3 bucket.\n For information about the S3 Intelligent-Tiering storage class, see [Storage class for automatically optimizing frequently and infrequently accessed objects](https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access)." + }, + "Tiering": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccessTier": { + "description": "S3 Intelligent-Tiering access tier. See [Storage class for automatically optimizing frequently and infrequently accessed objects](https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access) for a list of access tiers in the S3 Intelligent-Tiering storage class.", + "type": "string", + "enum": [ + "ARCHIVE_ACCESS", + "DEEP_ARCHIVE_ACCESS" + ] + }, + "Days": { + "description": "The number of consecutive days of no access after which an object will be eligible to be transitioned to the corresponding tier. The minimum number of days specified for Archive Access tier must be at least 90 days and Deep Archive Access tier must be at least 180 days. The maximum can be up to 2 years (730 days).", + "type": "integer" + } + }, + "required": [ + "AccessTier", + "Days" + ], + "description": "The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without additional operational overhead." + }, + "InventoryConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "$ref": "#/definitions/Destination", + "description": "Contains information about where to publish the inventory results." + }, + "Enabled": { + "description": "Specifies whether the inventory is enabled or disabled. If set to ``True``, an inventory list is generated. If set to ``False``, no inventory list is generated.", + "type": "boolean" + }, + "Id": { + "description": "The ID used to identify the inventory configuration.", + "type": "string" + }, + "IncludedObjectVersions": { + "description": "Object versions to include in the inventory list. If set to ``All``, the list includes all the object versions, which adds the version-related fields ``VersionId``, ``IsLatest``, and ``DeleteMarker`` to the list. If set to ``Current``, the list does not contain these version-related fields.", + "type": "string", + "enum": [ + "All", + "Current" + ] + }, + "OptionalFields": { + "description": "Contains the optional fields that are included in the inventory results.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "type": "string", + "enum": [ + "Size", + "LastModifiedDate", + "StorageClass", + "ETag", + "IsMultipartUploaded", + "ReplicationStatus", + "EncryptionStatus", + "ObjectLockRetainUntilDate", + "ObjectLockMode", + "ObjectLockLegalHoldStatus", + "IntelligentTieringAccessTier", + "BucketKeyStatus", + "ChecksumAlgorithm", + "ObjectAccessControlList", + "ObjectOwner" + ] + } + }, + "Prefix": { + "description": "Specifies the inventory filter prefix.", + "type": "string" + }, + "ScheduleFrequency": { + "description": "Specifies the schedule for generating inventory results.", + "type": "string", + "enum": [ + "Daily", + "Weekly" + ] + } + }, + "required": [ + "Destination", + "Enabled", + "Id", + "IncludedObjectVersions", + "ScheduleFrequency" + ], + "description": "Specifies the inventory configuration for an Amazon S3 bucket. For more information, see [GET Bucket inventory](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html) in the *Amazon S3 API Reference*." + }, + "LifecycleConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rules": { + "description": "A lifecycle rule for individual objects in an Amazon S3 bucket.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Rule" + } + } + }, + "required": [ + "Rules" + ], + "description": "Specifies the lifecycle configuration for objects in an Amazon S3 bucket. For more information, see [Object Lifecycle Management](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) in the *Amazon S3 User Guide*." + }, + "Rule": { + "type": "object", + "description": "Specifies lifecycle rules for an Amazon S3 bucket. For more information, see [Put Bucket Lifecycle Configuration](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html) in the *Amazon S3 API Reference*.\n You must specify at least one of the following properties: ``AbortIncompleteMultipartUpload``, ``ExpirationDate``, ``ExpirationInDays``, ``NoncurrentVersionExpirationInDays``, ``NoncurrentVersionTransition``, ``NoncurrentVersionTransitions``, ``Transition``, or ``Transitions``.", + "additionalProperties": false, + "properties": { + "AbortIncompleteMultipartUpload": { + "$ref": "#/definitions/AbortIncompleteMultipartUpload", + "description": "Specifies a lifecycle rule that stops incomplete multipart uploads to an Amazon S3 bucket." + }, + "ExpirationDate": { + "$ref": "#/definitions/iso8601UTC", + "description": "Indicates when objects are deleted from Amazon S3 and Amazon S3 Glacier. The date value must be in ISO 8601 format. The time is always midnight UTC. If you specify an expiration and transition time, you must use the same time unit for both properties (either in days or by date). The expiration time must also be later than the transition time." + }, + "ExpirationInDays": { + "type": "integer", + "description": "Indicates the number of days after creation when objects are deleted from Amazon S3 and Amazon S3 Glacier. If you specify an expiration and transition time, you must use the same time unit for both properties (either in days or by date). The expiration time must also be later than the transition time." + }, + "ExpiredObjectDeleteMarker": { + "type": "boolean", + "description": "Indicates whether Amazon S3 will remove a delete marker without any noncurrent versions. If set to true, the delete marker will be removed if there are no noncurrent versions. This cannot be specified with ``ExpirationInDays``, ``ExpirationDate``, or ``TagFilters``." + }, + "Id": { + "type": "string", + "maxLength": 255, + "description": "Unique identifier for the rule. The value can't be longer than 255 characters." + }, + "NoncurrentVersionExpirationInDays": { + "type": "integer", + "description": "(Deprecated.) For buckets with versioning enabled (or suspended), specifies the time, in days, between when a new version of the object is uploaded to the bucket and when old versions of the object expire. When object versions expire, Amazon S3 permanently deletes them. If you specify a transition and expiration time, the expiration time must be later than the transition time." + }, + "NoncurrentVersionExpiration": { + "$ref": "#/definitions/NoncurrentVersionExpiration", + "description": "Specifies when noncurrent object versions expire. Upon expiration, S3 permanently deletes the noncurrent object versions. You set this lifecycle configuration action on a bucket that has versioning enabled (or suspended) to request that S3 delete noncurrent object versions at a specific period in the object's lifetime." + }, + "NoncurrentVersionTransition": { + "$ref": "#/definitions/NoncurrentVersionTransition", + "description": "(Deprecated.) For buckets with versioning enabled (or suspended), specifies when non-current objects transition to a specified storage class. If you specify a transition and expiration time, the expiration time must be later than the transition time. If you specify this property, don't specify the ``NoncurrentVersionTransitions`` property." + }, + "NoncurrentVersionTransitions": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/NoncurrentVersionTransition" + }, + "description": "For buckets with versioning enabled (or suspended), one or more transition rules that specify when non-current objects transition to a specified storage class. If you specify a transition and expiration time, the expiration time must be later than the transition time. If you specify this property, don't specify the ``NoncurrentVersionTransition`` property." + }, + "Prefix": { + "type": "string", + "description": "Object key prefix that identifies one or more objects to which this rule applies.\n Replacement must be made for object keys containing special characters (such as carriage returns) when using XML requests. For more information, see [XML related object key constraints](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-xml-related-constraints)." + }, + "Status": { + "type": "string", + "enum": [ + "Enabled", + "Disabled" + ], + "description": "If ``Enabled``, the rule is currently being applied. If ``Disabled``, the rule is not currently being applied." + }, + "TagFilters": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/TagFilter" + }, + "description": "Tags to use to identify a subset of objects to which the lifecycle rule applies." + }, + "ObjectSizeGreaterThan": { + "type": "string", + "maxLength": 20, + "pattern": "[0-9]+", + "description": "Specifies the minimum object size in bytes for this rule to apply to. Objects must be larger than this value in bytes. For more information about size based rules, see [Lifecycle configuration using size-based rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html#lc-size-rules) in the *Amazon S3 User Guide*." + }, + "ObjectSizeLessThan": { + "type": "string", + "maxLength": 20, + "pattern": "[0-9]+", + "description": "Specifies the maximum object size in bytes for this rule to apply to. Objects must be smaller than this value in bytes. For more information about sized based rules, see [Lifecycle configuration using size-based rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html#lc-size-rules) in the *Amazon S3 User Guide*." + }, + "Transition": { + "$ref": "#/definitions/Transition", + "description": "(Deprecated.) Specifies when an object transitions to a specified storage class. If you specify an expiration and transition time, you must use the same time unit for both properties (either in days or by date). The expiration time must also be later than the transition time. If you specify this property, don't specify the ``Transitions`` property." + }, + "Transitions": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Transition" + }, + "description": "One or more transition rules that specify when an object transitions to a specified storage class. If you specify an expiration and transition time, you must use the same time unit for both properties (either in days or by date). The expiration time must also be later than the transition time. If you specify this property, don't specify the ``Transition`` property." + } + }, + "required": [ + "Status" + ] + }, + "AbortIncompleteMultipartUpload": { + "description": "Specifies the days since the initiation of an incomplete multipart upload that Amazon S3 will wait before permanently removing all parts of the upload. For more information, see [Stopping Incomplete Multipart Uploads Using a Bucket Lifecycle Policy](https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) in the *Amazon S3 User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "DaysAfterInitiation": { + "description": "Specifies the number of days after which Amazon S3 stops an incomplete multipart upload.", + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "DaysAfterInitiation" + ] + }, + "iso8601UTC": { + "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + }, + "NoncurrentVersionExpiration": { + "type": "object", + "description": "Specifies when noncurrent object versions expire. Upon expiration, S3 permanently deletes the noncurrent object versions. You set this lifecycle configuration action on a bucket that has versioning enabled (or suspended) to request that S3 delete noncurrent object versions at a specific period in the object's lifetime. For more information about setting a lifecycle rule configuration, see [AWS::S3::Bucket Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html).", + "additionalProperties": false, + "properties": { + "NoncurrentDays": { + "description": "Specifies the number of days an object is noncurrent before S3 can perform the associated action. For information about the noncurrent days calculations, see [How Amazon S3 Calculates When an Object Became Noncurrent](https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations) in the *Amazon S3 User Guide*.", + "type": "integer" + }, + "NewerNoncurrentVersions": { + "description": "Specifies how many noncurrent versions S3 will retain. If there are this many more recent noncurrent versions, S3 will take the associated action. For more information about noncurrent versions, see [Lifecycle configuration elements](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html) in the *Amazon S3 User Guide*.", + "type": "integer" + } + }, + "required": [ + "NoncurrentDays" + ] + }, + "NoncurrentVersionTransition": { + "type": "object", + "description": "Container for the transition rule that describes when noncurrent objects transition to the ``STANDARD_IA``, ``ONEZONE_IA``, ``INTELLIGENT_TIERING``, ``GLACIER_IR``, ``GLACIER``, or ``DEEP_ARCHIVE`` storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to the ``STANDARD_IA``, ``ONEZONE_IA``, ``INTELLIGENT_TIERING``, ``GLACIER_IR``, ``GLACIER``, or ``DEEP_ARCHIVE`` storage class at a specific period in the object's lifetime. If you specify this property, don't specify the ``NoncurrentVersionTransitions`` property.", + "additionalProperties": false, + "properties": { + "StorageClass": { + "description": "The class of storage used to store the object.", + "type": "string", + "enum": [ + "DEEP_ARCHIVE", + "GLACIER", + "Glacier", + "GLACIER_IR", + "INTELLIGENT_TIERING", + "ONEZONE_IA", + "STANDARD_IA" + ] + }, + "TransitionInDays": { + "description": "Specifies the number of days an object is noncurrent before Amazon S3 can perform the associated action. For information about the noncurrent days calculations, see [How Amazon S3 Calculates How Long an Object Has Been Noncurrent](https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations) in the *Amazon S3 User Guide*.", + "type": "integer" + }, + "NewerNoncurrentVersions": { + "description": "Specifies how many noncurrent versions S3 will retain. If there are this many more recent noncurrent versions, S3 will take the associated action. For more information about noncurrent versions, see [Lifecycle configuration elements](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html) in the *Amazon S3 User Guide*.", + "type": "integer" + } + }, + "required": [ + "StorageClass", + "TransitionInDays" + ] + }, + "Transition": { + "type": "object", + "properties": { + "StorageClass": { + "type": "string", + "enum": [ + "DEEP_ARCHIVE", + "GLACIER", + "Glacier", + "GLACIER_IR", + "INTELLIGENT_TIERING", + "ONEZONE_IA", + "STANDARD_IA" + ], + "description": "The storage class to which you want the object to transition." + }, + "TransitionDate": { + "$ref": "#/definitions/iso8601UTC", + "description": "Indicates when objects are transitioned to the specified storage class. The date value must be in ISO 8601 format. The time is always midnight UTC." + }, + "TransitionInDays": { + "type": "integer", + "description": "Indicates the number of days after creation when objects are transitioned to the specified storage class. The value must be a positive integer." + } + }, + "additionalProperties": false, + "description": "Specifies when an object transitions to a specified storage class. For more information about Amazon S3 lifecycle configuration rules, see [Transitioning Objects Using Amazon S3 Lifecycle](https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-transition-general-considerations.html) in the *Amazon S3 User Guide*.", + "required": [ + "StorageClass" + ] + }, + "LoggingConfiguration": { + "type": "object", + "properties": { + "DestinationBucketName": { + "type": "string", + "description": "The name of the bucket where Amazon S3 should store server access log files. You can store log files in any bucket that you own. By default, logs are stored in the bucket where the ``LoggingConfiguration`` property is defined." + }, + "LogFilePrefix": { + "type": "string", + "description": "A prefix for all log object keys. If you store log files from multiple Amazon S3 buckets in a single bucket, you can use a prefix to distinguish which log files came from which bucket." + }, + "TargetObjectKeyFormat": { + "$ref": "#/definitions/TargetObjectKeyFormat", + "description": "Amazon S3 key format for log objects. Only one format, either PartitionedPrefix or SimplePrefix, is allowed." + } + }, + "additionalProperties": false, + "description": "Describes where logs are stored and the prefix that Amazon S3 assigns to all log object keys for a bucket. For examples and more information, see [PUT Bucket logging](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html) in the *Amazon S3 API Reference*.\n To successfully complete the ``AWS::S3::Bucket LoggingConfiguration`` request, you must have ``s3:PutObject`` and ``s3:PutObjectAcl`` in your IAM permissions." + }, + "TargetObjectKeyFormat": { + "type": "object", + "description": "Describes the key format for server access log file in the target bucket. You can choose between SimplePrefix and PartitionedPrefix.", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "SimplePrefix": { + "description": "This format defaults the prefix to the given log file prefix for delivering server access log file.", + "type": "object", + "additionalProperties": false + } + }, + "required": [ + "SimplePrefix" + ] + }, + { + "additionalProperties": false, + "properties": { + "PartitionedPrefix": { + "$ref": "#/definitions/PartitionedPrefix" + } + }, + "required": [ + "PartitionedPrefix" + ] + } + ] + }, + "PartitionedPrefix": { + "type": "object", + "description": "Amazon S3 keys for log objects are partitioned in the following format:\n ``[DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]`` \n PartitionedPrefix defaults to EventTime delivery when server access logs are delivered.", + "properties": { + "PartitionDateSource": { + "type": "string", + "description": "Specifies the partition date source for the partitioned prefix. PartitionDateSource can be EventTime or DeliveryTime.", + "enum": [ + "EventTime", + "DeliveryTime" + ] + } + }, + "additionalProperties": false + }, + "MetricsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "AccessPointArn": { + "type": "string", + "description": "The access point that was used while performing operations on the object. The metrics configuration only includes objects that meet the filter's criteria." + }, + "Id": { + "type": "string", + "description": "The ID used to identify the metrics configuration. This can be any value you choose that helps you identify your metrics configuration." + }, + "Prefix": { + "type": "string", + "description": "The prefix that an object must have to be included in the metrics results." + }, + "TagFilters": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/TagFilter" + }, + "description": "Specifies a list of tag filters to use as a metrics configuration filter. The metrics configuration includes only objects that meet the filter's criteria." + } + }, + "required": [ + "Id" + ], + "description": "Specifies a metrics configuration for the CloudWatch request metrics (specified by the metrics configuration ID) from an Amazon S3 bucket. If you're updating an existing metrics configuration, note that this is a full replacement of the existing metrics configuration. If you don't include the elements you want to keep, they are erased. For examples, see [AWS::S3::Bucket](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#aws-properties-s3-bucket--examples). For more information, see [PUT Bucket metrics](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTMetricConfiguration.html) in the *Amazon S3 API Reference*." + }, + "NotificationConfiguration": { + "description": "Describes the notification configuration for an Amazon S3 bucket.\n If you create the target resource and related permissions in the same template, you might have a circular dependency.\n For example, you might use the ``AWS::Lambda::Permission`` resource to grant the bucket permission to invoke an AWS Lambda function. However, AWS CloudFormation can't create the bucket until the bucket has permission to invoke the function (AWS CloudFormation checks whether the bucket can invoke the function). If you're using Refs to pass the bucket name, this leads to a circular dependency.\n To avoid this dependency, you can create all resources without specifying the notification configuration. Then, update the stack with a notification configuration.\n For more information on permissions, see [AWS::Lambda::Permission](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html) and [Granting Permissions to Publish Event Notification Messages to a Destination](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#grant-destinations-permissions-to-s3).", + "type": "object", + "additionalProperties": false, + "properties": { + "EventBridgeConfiguration": { + "$ref": "#/definitions/EventBridgeConfiguration", + "description": "Enables delivery of events to Amazon EventBridge." + }, + "LambdaConfigurations": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/LambdaConfiguration" + }, + "description": "Describes the LAMlong functions to invoke and the events for which to invoke them." + }, + "QueueConfigurations": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/QueueConfiguration" + }, + "description": "The Amazon Simple Queue Service queues to publish messages to and the events for which to publish messages." + }, + "TopicConfigurations": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/TopicConfiguration" + }, + "description": "The topic to which notifications are sent and the events for which notifications are generated." + } + } + }, + "EventBridgeConfiguration": { + "type": "object", + "description": "Amazon S3 can send events to Amazon EventBridge whenever certain events happen in your bucket, see [Using EventBridge](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventBridge.html) in the *Amazon S3 User Guide*.\n Unlike other destinations, delivery of events to EventBridge can be either enabled or disabled for a bucket. If enabled, all events will be sent to EventBridge and you can use EventBridge rules to route events to additional targets. For more information, see [What Is Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) in the *Amazon EventBridge User Guide*", + "additionalProperties": false, + "properties": { + "EventBridgeEnabled": { + "description": "Enables delivery of events to Amazon EventBridge.", + "type": "boolean", + "default": "true" + } + }, + "required": [ + "EventBridgeEnabled" + ] + }, + "LambdaConfiguration": { + "type": "object", + "description": "Describes the LAMlong functions to invoke and the events for which to invoke them.", + "additionalProperties": false, + "properties": { + "Event": { + "description": "The Amazon S3 bucket event for which to invoke the LAMlong function. For more information, see [Supported Event Types](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) in the *Amazon S3 User Guide*.", + "type": "string" + }, + "Filter": { + "description": "The filtering rules that determine which objects invoke the AWS Lambda function. For example, you can create a filter so that only image files with a ``.jpg`` extension invoke the function when they are added to the Amazon S3 bucket.", + "$ref": "#/definitions/NotificationFilter" + }, + "Function": { + "description": "The Amazon Resource Name (ARN) of the LAMlong function that Amazon S3 invokes when the specified event type occurs.", + "type": "string" + } + }, + "required": [ + "Function", + "Event" + ] + }, + "QueueConfiguration": { + "type": "object", + "description": "Specifies the configuration for publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue when Amazon S3 detects specified events.", + "additionalProperties": false, + "properties": { + "Event": { + "description": "The Amazon S3 bucket event about which you want to publish messages to Amazon SQS. For more information, see [Supported Event Types](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) in the *Amazon S3 User Guide*.", + "type": "string" + }, + "Filter": { + "description": "The filtering rules that determine which objects trigger notifications. For example, you can create a filter so that Amazon S3 sends notifications only when image files with a ``.jpg`` extension are added to the bucket. For more information, see [Configuring event notifications using object key name filtering](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/notification-how-to-filtering.html) in the *Amazon S3 User Guide*.", + "$ref": "#/definitions/NotificationFilter" + }, + "Queue": { + "description": "The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3 publishes a message when it detects events of the specified type. FIFO queues are not allowed when enabling an SQS queue as the event notification destination.", + "type": "string" + } + }, + "required": [ + "Event", + "Queue" + ] + }, + "TopicConfiguration": { + "type": "object", + "description": "A container for specifying the configuration for publication of messages to an Amazon Simple Notification Service (Amazon SNS) topic when Amazon S3 detects specified events.", + "additionalProperties": false, + "properties": { + "Event": { + "description": "The Amazon S3 bucket event about which to send notifications. For more information, see [Supported Event Types](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) in the *Amazon S3 User Guide*.", + "type": "string" + }, + "Filter": { + "description": "The filtering rules that determine for which objects to send notifications. For example, you can create a filter so that Amazon S3 sends notifications only when image files with a ``.jpg`` extension are added to the bucket.", + "$ref": "#/definitions/NotificationFilter" + }, + "Topic": { + "description": "The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3 publishes a message when it detects events of the specified type.", + "type": "string" + } + }, + "required": [ + "Event", + "Topic" + ] + }, + "NotificationFilter": { + "type": "object", + "description": "Specifies object key name filtering rules. For information about key name filtering, see [Configuring event notifications using object key name filtering](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-filtering.html) in the *Amazon S3 User Guide*.", + "additionalProperties": false, + "properties": { + "S3Key": { + "$ref": "#/definitions/S3KeyFilter", + "description": "A container for object key name prefix and suffix filtering rules." + } + }, + "required": [ + "S3Key" + ] + }, + "S3KeyFilter": { + "type": "object", + "description": "A container for object key name prefix and suffix filtering rules. For more information about object key name filtering, see [Configuring event notifications using object key name filtering](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-filtering.html) in the *Amazon S3 User Guide*.\n The same type of filter rule cannot be used more than once. For example, you cannot specify two prefix rules.", + "additionalProperties": false, + "properties": { + "Rules": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/FilterRule" + }, + "description": "A list of containers for the key-value pair that defines the criteria for the filter rule." + } + }, + "required": [ + "Rules" + ] + }, + "FilterRule": { + "type": "object", + "description": "Specifies the Amazon S3 object key name to filter on. An object key name is the name assigned to an object in your Amazon S3 bucket. You specify whether to filter on the suffix or prefix of the object key name. A prefix is a specific string of characters at the beginning of an object key name, which you can use to organize objects. For example, you can start the key names of related objects with a prefix, such as ``2023-`` or ``engineering/``. Then, you can use ``FilterRule`` to find objects in a bucket with key names that have the same prefix. A suffix is similar to a prefix, but it is at the end of the object key name instead of at the beginning.", + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "maxLength": 1024, + "description": "The object key name prefix or suffix identifying one or more objects to which the filtering rule applies. The maximum length is 1,024 characters. Overlapping prefixes and suffixes are not supported. For more information, see [Configuring Event Notifications](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) in the *Amazon S3 User Guide*." + }, + "Value": { + "type": "string", + "description": "The value that the filter searches for in object key names." + } + }, + "required": [ + "Value", + "Name" + ] + }, + "ObjectLockConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectLockEnabled": { + "type": "string", + "const": "Enabled", + "description": "Indicates whether this bucket has an Object Lock configuration enabled. Enable ``ObjectLockEnabled`` when you apply ``ObjectLockConfiguration`` to a bucket." + }, + "Rule": { + "$ref": "#/definitions/ObjectLockRule", + "description": "Specifies the Object Lock rule for the specified object. Enable this rule when you apply ``ObjectLockConfiguration`` to a bucket. If Object Lock is turned on, bucket settings require both ``Mode`` and a period of either ``Days`` or ``Years``. You cannot specify ``Days`` and ``Years`` at the same time. For more information, see [ObjectLockRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-objectlockrule.html) and [DefaultRetention](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-defaultretention.html)." + } + }, + "description": "Places an Object Lock configuration on the specified bucket. The rule specified in the Object Lock configuration will be applied by default to every new object placed in the specified bucket. For more information, see [Locking Objects](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html)." + }, + "ObjectLockRule": { + "type": "object", + "description": "Specifies the Object Lock rule for the specified object. Enable the this rule when you apply ``ObjectLockConfiguration`` to a bucket.", + "additionalProperties": false, + "properties": { + "DefaultRetention": { + "$ref": "#/definitions/DefaultRetention", + "description": "The default Object Lock retention mode and period that you want to apply to new objects placed in the specified bucket. If Object Lock is turned on, bucket settings require both ``Mode`` and a period of either ``Days`` or ``Years``. You cannot specify ``Days`` and ``Years`` at the same time. For more information about allowable values for mode and period, see [DefaultRetention](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-defaultretention.html)." + } + } + }, + "DefaultRetention": { + "type": "object", + "description": "The container element for specifying the default Object Lock retention settings for new objects placed in the specified bucket.\n + The ``DefaultRetention`` settings require both a mode and a period.\n + The ``DefaultRetention`` period can be either ``Days`` or ``Years`` but you must select one. You cannot specify ``Days`` and ``Years`` at the same time.", + "additionalProperties": false, + "properties": { + "Years": { + "type": "integer", + "description": "The number of years that you want to specify for the default retention period. If Object Lock is turned on, you must specify ``Mode`` and specify either ``Days`` or ``Years``." + }, + "Days": { + "type": "integer", + "description": "The number of days that you want to specify for the default retention period. If Object Lock is turned on, you must specify ``Mode`` and specify either ``Days`` or ``Years``." + }, + "Mode": { + "type": "string", + "enum": [ + "COMPLIANCE", + "GOVERNANCE" + ], + "description": "The default Object Lock retention mode you want to apply to new objects placed in the specified bucket. If Object Lock is turned on, you must specify ``Mode`` and specify either ``Days`` or ``Years``." + } + } + }, + "OwnershipControls": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rules": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/OwnershipControlsRule" + }, + "description": "Specifies the container element for Object Ownership rules." + } + }, + "required": [ + "Rules" + ], + "description": "Specifies the container element for Object Ownership rules.\n S3 Object Ownership is an Amazon S3 bucket-level setting that you can use to disable access control lists (ACLs) and take ownership of every object in your bucket, simplifying access management for data stored in Amazon S3. For more information, see [Controlling ownership of objects and disabling ACLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) in the *Amazon S3 User Guide*." + }, + "OwnershipControlsRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectOwnership": { + "description": "Specifies an object ownership rule.", + "type": "string", + "enum": [ + "ObjectWriter", + "BucketOwnerPreferred", + "BucketOwnerEnforced" + ] + } + }, + "description": "Specifies an Object Ownership rule.\n S3 Object Ownership is an Amazon S3 bucket-level setting that you can use to disable access control lists (ACLs) and take ownership of every object in your bucket, simplifying access management for data stored in Amazon S3. For more information, see [Controlling ownership of objects and disabling ACLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) in the *Amazon S3 User Guide*." + }, + "PublicAccessBlockConfiguration": { + "description": "The PublicAccessBlock configuration that you want to apply to this Amazon S3 bucket. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see [The Meaning of \"Public\"](https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status) in the *Amazon S3 User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "BlockPublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for this bucket and objects in this bucket. Setting this element to ``TRUE`` causes the following behavior:\n + PUT Bucket ACL and PUT Object ACL calls fail if the specified ACL is public.\n + PUT Object calls fail if the request includes a public ACL.\n + PUT Bucket calls fail if the request includes a public ACL.\n \n Enabling this setting doesn't affect existing policies or ACLs." + }, + "BlockPublicPolicy": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public bucket policies for this bucket. Setting this element to ``TRUE`` causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. \n Enabling this setting doesn't affect existing bucket policies." + }, + "IgnorePublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should ignore public ACLs for this bucket and objects in this bucket. Setting this element to ``TRUE`` causes Amazon S3 to ignore all public ACLs on this bucket and objects in this bucket.\n Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set." + }, + "RestrictPublicBuckets": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to ``TRUE`` restricts access to this bucket to only AWS-service principals and authorized users within this account if the bucket has a public policy.\n Enabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked." + } + } + }, + "ReplicationConfiguration": { + "type": "object", + "description": "A container for replication rules. You can add up to 1,000 rules. The maximum size of a replication configuration is 2 MB. The latest version of the replication configuration XML is V2. For more information about XML V2 replication configurations, see [Replication configuration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-add-config.html) in the *Amazon S3 User Guide*.", + "additionalProperties": false, + "properties": { + "Role": { + "description": "The Amazon Resource Name (ARN) of the IAMlong (IAM) role that Amazon S3 assumes when replicating objects. For more information, see [How to Set Up Replication](https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html) in the *Amazon S3 User Guide*.", + "type": "string" + }, + "Rules": { + "description": "A container for one or more replication rules. A replication configuration must have at least one rule and can contain a maximum of 1,000 rules.", + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/ReplicationRule", + "maxLength": 1000, + "minLength": 1 + } + } + }, + "required": [ + "Role", + "Rules" + ] + }, + "ReplicationRule": { + "type": "object", + "description": "Specifies which Amazon S3 objects to replicate and where to store the replicas.", + "additionalProperties": false, + "properties": { + "DeleteMarkerReplication": { + "$ref": "#/definitions/DeleteMarkerReplication", + "description": "Specifies whether Amazon S3 replicates delete markers. If you specify a ``Filter`` in your replication configuration, you must also include a ``DeleteMarkerReplication`` element. If your ``Filter`` includes a ``Tag`` element, the ``DeleteMarkerReplication`` ``Status`` must be set to Disabled, because Amazon S3 does not support replicating delete markers for tag-based rules. For an example configuration, see [Basic Rule Configuration](https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-config-min-rule-config). \n For more information about delete marker replication, see [Basic Rule Configuration](https://docs.aws.amazon.com/AmazonS3/latest/dev/delete-marker-replication.html). \n If you are using an earlier version of the replication configuration, Amazon S3 handles replication of delete markers differently. For more information, see [Backward Compatibility](https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations)." + }, + "Destination": { + "$ref": "#/definitions/ReplicationDestination", + "description": "A container for information about the replication destination and its configurations including enabling the S3 Replication Time Control (S3 RTC)." + }, + "Filter": { + "$ref": "#/definitions/ReplicationRuleFilter", + "description": "A filter that identifies the subset of objects to which the replication rule applies. A ``Filter`` must specify exactly one ``Prefix``, ``TagFilter``, or an ``And`` child element. The use of the filter field indicates that this is a V2 replication configuration. This field isn't supported in a V1 replication configuration.\n V1 replication configuration only supports filtering by key prefix. To filter using a V1 replication configuration, add the ``Prefix`` directly as a child element of the ``Rule`` element." + }, + "Id": { + "description": "A unique identifier for the rule. The maximum value is 255 characters. If you don't specify a value, AWS CloudFormation generates a random ID. When using a V2 replication configuration this property is capitalized as \"ID\".", + "type": "string", + "maxLength": 255 + }, + "Prefix": { + "description": "An object key name prefix that identifies the object or objects to which the rule applies. The maximum prefix length is 1,024 characters. To include all objects in a bucket, specify an empty string. To filter using a V1 replication configuration, add the ``Prefix`` directly as a child element of the ``Rule`` element.\n Replacement must be made for object keys containing special characters (such as carriage returns) when using XML requests. For more information, see [XML related object key constraints](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-xml-related-constraints).", + "type": "string", + "maxLength": 1024 + }, + "Priority": { + "type": "integer", + "description": "The priority indicates which rule has precedence whenever two or more replication rules conflict. Amazon S3 will attempt to replicate objects according to all replication rules. However, if there are two or more rules with the same destination bucket, then objects will be replicated according to the rule with the highest priority. The higher the number, the higher the priority. \n For more information, see [Replication](https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html) in the *Amazon S3 User Guide*." + }, + "SourceSelectionCriteria": { + "$ref": "#/definitions/SourceSelectionCriteria", + "description": "A container that describes additional filters for identifying the source objects that you want to replicate. You can choose to enable or disable the replication of these objects." + }, + "Status": { + "description": "Specifies whether the rule is enabled.", + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ] + } + }, + "required": [ + "Destination", + "Status" + ] + }, + "DeleteMarkerReplication": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ], + "description": "Indicates whether to replicate delete markers. Disabled by default." + } + }, + "description": "Specifies whether Amazon S3 replicates delete markers. If you specify a ``Filter`` in your replication configuration, you must also include a ``DeleteMarkerReplication`` element. If your ``Filter`` includes a ``Tag`` element, the ``DeleteMarkerReplication`` ``Status`` must be set to Disabled, because Amazon S3 does not support replicating delete markers for tag-based rules. For an example configuration, see [Basic Rule Configuration](https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-config-min-rule-config). \n For more information about delete marker replication, see [Basic Rule Configuration](https://docs.aws.amazon.com/AmazonS3/latest/dev/delete-marker-replication.html). \n If you are using an earlier version of the replication configuration, Amazon S3 handles replication of delete markers differently. For more information, see [Backward Compatibility](https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations)." + }, + "ReplicationDestination": { + "type": "object", + "description": "A container for information about the replication destination and its configurations including enabling the S3 Replication Time Control (S3 RTC).", + "additionalProperties": false, + "properties": { + "AccessControlTranslation": { + "$ref": "#/definitions/AccessControlTranslation", + "description": "Specify this only in a cross-account scenario (where source and destination bucket owners are not the same), and you want to change replica ownership to the AWS-account that owns the destination bucket. If this is not specified in the replication configuration, the replicas are owned by same AWS-account that owns the source object." + }, + "Account": { + "type": "string", + "description": "Destination bucket owner account ID. In a cross-account scenario, if you direct Amazon S3 to change replica ownership to the AWS-account that owns the destination bucket by specifying the ``AccessControlTranslation`` property, this is the account ID of the destination bucket owner. For more information, see [Cross-Region Replication Additional Configuration: Change Replica Owner](https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-change-owner.html) in the *Amazon S3 User Guide*.\n If you specify the ``AccessControlTranslation`` property, the ``Account`` property is required." + }, + "Bucket": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to store the results." + }, + "EncryptionConfiguration": { + "$ref": "#/definitions/EncryptionConfiguration", + "description": "Specifies encryption-related information." + }, + "Metrics": { + "$ref": "#/definitions/Metrics", + "description": "A container specifying replication metrics-related settings enabling replication metrics and events." + }, + "ReplicationTime": { + "$ref": "#/definitions/ReplicationTime", + "description": "A container specifying S3 Replication Time Control (S3 RTC), including whether S3 RTC is enabled and the time when all objects and operations on objects must be replicated. Must be specified together with a ``Metrics`` block." + }, + "StorageClass": { + "description": "The storage class to use when replicating objects, such as S3 Standard or reduced redundancy. By default, Amazon S3 uses the storage class of the source object to create the object replica. \n For valid values, see the ``StorageClass`` element of the [PUT Bucket replication](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html) action in the *Amazon S3 API Reference*.", + "type": "string", + "enum": [ + "DEEP_ARCHIVE", + "GLACIER", + "GLACIER_IR", + "INTELLIGENT_TIERING", + "ONEZONE_IA", + "REDUCED_REDUNDANCY", + "STANDARD", + "STANDARD_IA" + ] + } + }, + "required": [ + "Bucket" + ] + }, + "AccessControlTranslation": { + "type": "object", + "description": "Specify this only in a cross-account scenario (where source and destination bucket owners are not the same), and you want to change replica ownership to the AWS-account that owns the destination bucket. If this is not specified in the replication configuration, the replicas are owned by same AWS-account that owns the source object.", + "additionalProperties": false, + "properties": { + "Owner": { + "type": "string", + "const": "Destination", + "description": "Specifies the replica ownership. For default and valid values, see [PUT bucket replication](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html) in the *Amazon S3 API Reference*." + } + }, + "required": [ + "Owner" + ] + }, + "EncryptionConfiguration": { + "type": "object", + "description": "Specifies encryption-related information for an Amazon S3 bucket that is a destination for replicated objects.", + "additionalProperties": false, + "properties": { + "ReplicaKmsKeyID": { + "description": "Specifies the ID (Key ARN or Alias ARN) of the customer managed AWS KMS key stored in AWS Key Management Service (KMS) for the destination bucket. Amazon S3 uses this key to encrypt replica objects. Amazon S3 only supports symmetric encryption KMS keys. For more information, see [Asymmetric keys in KMS](https://docs.aws.amazon.com//kms/latest/developerguide/symmetric-asymmetric.html) in the *Key Management Service Developer Guide*.", + "type": "string" + } + }, + "required": [ + "ReplicaKmsKeyID" + ] + }, + "Metrics": { + "type": "object", + "additionalProperties": false, + "properties": { + "EventThreshold": { + "$ref": "#/definitions/ReplicationTimeValue", + "description": "A container specifying the time threshold for emitting the ``s3:Replication:OperationMissedThreshold`` event." + }, + "Status": { + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ], + "description": "Specifies whether the replication metrics are enabled." + } + }, + "required": [ + "Status" + ], + "description": "A container specifying replication metrics-related settings enabling replication metrics and events." + }, + "ReplicationTimeValue": { + "type": "object", + "additionalProperties": false, + "properties": { + "Minutes": { + "type": "integer", + "description": "Contains an integer specifying time in minutes. \n Valid value: 15" + } + }, + "required": [ + "Minutes" + ], + "description": "A container specifying the time value for S3 Replication Time Control (S3 RTC) and replication metrics ``EventThreshold``." + }, + "ReplicationTime": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ], + "description": "Specifies whether the replication time is enabled." + }, + "Time": { + "$ref": "#/definitions/ReplicationTimeValue", + "description": "A container specifying the time by which replication should be complete for all objects and operations on objects." + } + }, + "required": [ + "Status", + "Time" + ], + "description": "A container specifying S3 Replication Time Control (S3 RTC) related information, including whether S3 RTC is enabled and the time when all objects and operations on objects must be replicated. Must be specified together with a ``Metrics`` block." + }, + "ReplicationRuleFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "And": { + "$ref": "#/definitions/ReplicationRuleAndOperator", + "description": "A container for specifying rule filters. The filters determine the subset of objects to which the rule applies. This element is required only if you specify more than one filter. For example: \n + If you specify both a ``Prefix`` and a ``TagFilter``, wrap these filters in an ``And`` tag.\n + If you specify a filter based on multiple tags, wrap the ``TagFilter`` elements in an ``And`` tag." + }, + "Prefix": { + "type": "string", + "description": "An object key name prefix that identifies the subset of objects to which the rule applies.\n Replacement must be made for object keys containing special characters (such as carriage returns) when using XML requests. For more information, see [XML related object key constraints](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-xml-related-constraints)." + }, + "TagFilter": { + "$ref": "#/definitions/TagFilter", + "description": "A container for specifying a tag key and value. \n The rule applies only to objects that have the tag in their tag set." + } + }, + "description": "A filter that identifies the subset of objects to which the replication rule applies. A ``Filter`` must specify exactly one ``Prefix``, ``TagFilter``, or an ``And`` child element." + }, + "ReplicationRuleAndOperator": { + "type": "object", + "additionalProperties": false, + "properties": { + "Prefix": { + "type": "string", + "description": "An object key name prefix that identifies the subset of objects to which the rule applies." + }, + "TagFilters": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/TagFilter" + }, + "description": "An array of tags containing key and value pairs." + } + }, + "description": "A container for specifying rule filters. The filters determine the subset of objects to which the rule applies. This element is required only if you specify more than one filter. \n For example:\n + If you specify both a ``Prefix`` and a ``TagFilter``, wrap these filters in an ``And`` tag. \n + If you specify a filter based on multiple tags, wrap the ``TagFilter`` elements in an ``And`` tag" + }, + "SourceSelectionCriteria": { + "description": "A container that describes additional filters for identifying the source objects that you want to replicate. You can choose to enable or disable the replication of these objects.", + "type": "object", + "additionalProperties": false, + "properties": { + "ReplicaModifications": { + "description": "A filter that you can specify for selection for modifications on replicas.", + "$ref": "#/definitions/ReplicaModifications" + }, + "SseKmsEncryptedObjects": { + "description": "A container for filter information for the selection of Amazon S3 objects encrypted with AWS KMS.", + "$ref": "#/definitions/SseKmsEncryptedObjects" + } + } + }, + "ReplicaModifications": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "description": "Specifies whether Amazon S3 replicates modifications on replicas.\n *Allowed values*: ``Enabled`` | ``Disabled``", + "type": "string", + "enum": [ + "Enabled", + "Disabled" + ] + } + }, + "required": [ + "Status" + ], + "description": "A filter that you can specify for selection for modifications on replicas." + }, + "SseKmsEncryptedObjects": { + "type": "object", + "description": "A container for filter information for the selection of S3 objects encrypted with AWS KMS.", + "additionalProperties": false, + "properties": { + "Status": { + "description": "Specifies whether Amazon S3 replicates objects created with server-side encryption using an AWS KMS key stored in AWS Key Management Service.", + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ] + } + }, + "required": [ + "Status" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "description": "Name of the object key." + }, + "Value": { + "type": "string", + "maxLength": 256, + "description": "Value of the tag." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "A container of a key value name pair." + }, + "VersioningConfiguration": { + "description": "Describes the versioning state of an Amazon S3 bucket. For more information, see [PUT Bucket versioning](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html) in the *Amazon S3 API Reference*.", + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "description": "The versioning state of the bucket.", + "type": "string", + "default": "Suspended", + "enum": [ + "Enabled", + "Suspended" + ] + } + }, + "required": [ + "Status" + ] + }, + "WebsiteConfiguration": { + "type": "object", + "description": "Specifies website configuration parameters for an Amazon S3 bucket.", + "additionalProperties": false, + "properties": { + "ErrorDocument": { + "description": "The name of the error document for the website.", + "type": "string" + }, + "IndexDocument": { + "description": "The name of the index document for the website.", + "type": "string" + }, + "RoutingRules": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/RoutingRule" + }, + "description": "Rules that define when a redirect is applied and the redirect behavior." + }, + "RedirectAllRequestsTo": { + "$ref": "#/definitions/RedirectAllRequestsTo", + "description": "The redirect behavior for every request to this bucket's website endpoint.\n If you specify this property, you can't specify any other property." + } + } + }, + "RoutingRule": { + "description": "Specifies the redirect behavior and when a redirect is applied. For more information about routing rules, see [Configuring advanced conditional redirects](https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html#advanced-conditional-redirects) in the *Amazon S3 User Guide*.", + "type": "object", + "additionalProperties": false, + "properties": { + "RedirectRule": { + "description": "Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can specify a different error code to return.", + "$ref": "#/definitions/RedirectRule" + }, + "RoutingRuleCondition": { + "$ref": "#/definitions/RoutingRuleCondition", + "description": "A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the ``/docs`` folder, redirect to the ``/documents`` folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error." + } + }, + "required": [ + "RedirectRule" + ] + }, + "RedirectRule": { + "type": "object", + "description": "Specifies how requests are redirected. In the event of an error, you can specify a different error code to return.", + "additionalProperties": false, + "properties": { + "HostName": { + "description": "The host name to use in the redirect request.", + "type": "string" + }, + "HttpRedirectCode": { + "description": "The HTTP redirect code to use on the response. Not required if one of the siblings is present.", + "type": "string" + }, + "Protocol": { + "description": "Protocol to use when redirecting requests. The default is the protocol that is used in the original request.", + "enum": [ + "http", + "https" + ], + "type": "string" + }, + "ReplaceKeyPrefixWith": { + "description": "The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix ``docs/`` (objects in the ``docs/`` folder) to ``documents/``, you can set a condition block with ``KeyPrefixEquals`` set to ``docs/`` and in the Redirect set ``ReplaceKeyPrefixWith`` to ``/documents``. Not required if one of the siblings is present. Can be present only if ``ReplaceKeyWith`` is not provided.\n Replacement must be made for object keys containing special characters (such as carriage returns) when using XML requests. For more information, see [XML related object key constraints](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-xml-related-constraints).", + "type": "string" + }, + "ReplaceKeyWith": { + "description": "The specific object key to use in the redirect request. For example, redirect request to ``error.html``. Not required if one of the siblings is present. Can be present only if ``ReplaceKeyPrefixWith`` is not provided.\n Replacement must be made for object keys containing special characters (such as carriage returns) when using XML requests. For more information, see [XML related object key constraints](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-xml-related-constraints).", + "type": "string" + } + } + }, + "RoutingRuleCondition": { + "description": "A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the ``/docs`` folder, redirect to the ``/documents`` folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.", + "type": "object", + "additionalProperties": false, + "properties": { + "KeyPrefixEquals": { + "description": "The object key name prefix when the redirect is applied. For example, to redirect requests for ``ExamplePage.html``, the key prefix will be ``ExamplePage.html``. To redirect request for all pages with the prefix ``docs/``, the key prefix will be ``/docs``, which identifies all objects in the docs/ folder.\n Required when the parent element ``Condition`` is specified and sibling ``HttpErrorCodeReturnedEquals`` is not specified. If both conditions are specified, both must be true for the redirect to be applied.", + "type": "string" + }, + "HttpErrorCodeReturnedEquals": { + "description": "The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied.\n Required when parent element ``Condition`` is specified and sibling ``KeyPrefixEquals`` is not specified. If both are specified, then both must be true for the redirect to be applied.", + "type": "string" + } + } + }, + "RedirectAllRequestsTo": { + "description": "Specifies the redirect behavior of all requests to a website endpoint of an Amazon S3 bucket.", + "type": "object", + "additionalProperties": false, + "properties": { + "HostName": { + "description": "Name of the host where requests are redirected.", + "type": "string" + }, + "Protocol": { + "description": "Protocol to use when redirecting requests. The default is the protocol that is used in the original request.", + "type": "string", + "enum": [ + "http", + "https" + ] + } + }, + "required": [ + "HostName" + ] + }, + "Arn": { + "description": "the Amazon Resource Name (ARN) of the specified bucket.", + "type": "string" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/BucketName", + "/properties/ObjectLockEnabled" + ], + "primaryIdentifier": [ + "/properties/BucketName" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/DomainName", + "/properties/DualStackDomainName", + "/properties/RegionalDomainName", + "/properties/WebsiteURL" + ], + "writeOnlyProperties": [ + "/properties/AccessControl", + "/properties/LifecycleConfiguration/Rules/*/NoncurrentVersionExpirationInDays", + "/properties/LifecycleConfiguration/Rules/*/NoncurrentVersionTransition", + "/properties/LifecycleConfiguration/Rules/*/Transition", + "/properties/ReplicationConfiguration/Rules/*/Prefix", + "/properties/LifecycleConfiguration/Rules/*/ExpiredObjectDeleteMarker" + ], + "handlers": { + "create": { + "permissions": [ + "s3:CreateBucket", + "s3:PutBucketTagging", + "s3:PutAnalyticsConfiguration", + "s3:PutEncryptionConfiguration", + "s3:PutBucketCORS", + "s3:PutInventoryConfiguration", + "s3:PutLifecycleConfiguration", + "s3:PutMetricsConfiguration", + "s3:PutBucketNotification", + "s3:PutBucketReplication", + "s3:PutBucketWebsite", + "s3:PutAccelerateConfiguration", + "s3:PutBucketPublicAccessBlock", + "s3:PutReplicationConfiguration", + "s3:PutObjectAcl", + "s3:PutBucketObjectLockConfiguration", + "s3:GetBucketAcl", + "s3:ListBucket", + "iam:PassRole", + "s3:DeleteObject", + "s3:PutBucketLogging", + "s3:PutBucketVersioning", + "s3:PutObjectLockConfiguration", + "s3:PutBucketOwnershipControls", + "s3:PutIntelligentTieringConfiguration" + ] + }, + "read": { + "permissions": [ + "s3:GetAccelerateConfiguration", + "s3:GetLifecycleConfiguration", + "s3:GetBucketPublicAccessBlock", + "s3:GetAnalyticsConfiguration", + "s3:GetBucketCORS", + "s3:GetEncryptionConfiguration", + "s3:GetInventoryConfiguration", + "s3:GetBucketLogging", + "s3:GetMetricsConfiguration", + "s3:GetBucketNotification", + "s3:GetBucketVersioning", + "s3:GetReplicationConfiguration", + "S3:GetBucketWebsite", + "s3:GetBucketPublicAccessBlock", + "s3:GetBucketObjectLockConfiguration", + "s3:GetBucketTagging", + "s3:GetBucketOwnershipControls", + "s3:GetIntelligentTieringConfiguration", + "s3:ListBucket" + ] + }, + "update": { + "permissions": [ + "s3:PutBucketAcl", + "s3:PutBucketTagging", + "s3:PutAnalyticsConfiguration", + "s3:PutEncryptionConfiguration", + "s3:PutBucketCORS", + "s3:PutInventoryConfiguration", + "s3:PutLifecycleConfiguration", + "s3:PutMetricsConfiguration", + "s3:PutBucketNotification", + "s3:PutBucketReplication", + "s3:PutBucketWebsite", + "s3:PutAccelerateConfiguration", + "s3:PutBucketPublicAccessBlock", + "s3:PutReplicationConfiguration", + "s3:PutBucketOwnershipControls", + "s3:PutIntelligentTieringConfiguration", + "s3:DeleteBucketWebsite", + "s3:PutBucketLogging", + "s3:PutBucketVersioning", + "s3:PutObjectLockConfiguration", + "s3:PutBucketObjectLockConfiguration", + "s3:DeleteBucketAnalyticsConfiguration", + "s3:DeleteBucketCors", + "s3:DeleteBucketMetricsConfiguration", + "s3:DeleteBucketEncryption", + "s3:DeleteBucketLifecycle", + "s3:DeleteBucketReplication", + "iam:PassRole", + "s3:ListBucket" + ] + }, + "delete": { + "permissions": [ + "s3:DeleteBucket", + "s3:ListBucket" + ] + }, + "list": { + "permissions": [ + "s3:ListAllMyBuckets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3/bucketpolicy.json b/internal/aws/cfn/schemas/aws/s3/bucketpolicy.json new file mode 100644 index 00000000..a3218f01 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3/bucketpolicy.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::S3::BucketPolicy", + "description": "Applies an Amazon S3 bucket policy to an Amazon S3 bucket. If you are using an identity other than the root user of the AWS-account that owns the bucket, the calling identity must have the ``PutBucketPolicy`` permissions on the specified bucket and belong to the bucket owner's account in order to use this operation.\n If you don't have ``PutBucketPolicy`` permissions, Amazon S3 returns a ``403 Access Denied`` error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a ``405 Method Not Allowed`` error.\n As a security precaution, the root user of the AWS-account that owns a bucket can always use this operation, even if the policy explicitly denies the root user the ability to perform this action. \n For more information, see [Bucket policy examples](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html).\n The following operations are related to ``PutBucketPolicy``:\n + [Create", + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "properties": { + "Bucket": { + "description": "The name of the Amazon S3 bucket to which the policy applies.", + "type": "string" + }, + "PolicyDocument": { + "description": "A policy document containing permissions to add to the specified bucket. In IAM, you must provide policy documents in JSON format. However, in CloudFormation you can provide the policy in JSON or YAML format because CloudFormation converts YAML to JSON before submitting it to IAM. For more information, see the AWS::IAM::Policy [PolicyDocument](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html#cfn-iam-policy-policydocument) resource description in this guide and [Access Policy Language Overview](https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) in the *Amazon S3 User Guide*.", + "type": [ + "object", + "string" + ] + } + }, + "primaryIdentifier": [ + "/properties/Bucket" + ], + "createOnlyProperties": [ + "/properties/Bucket" + ], + "required": [ + "Bucket", + "PolicyDocument" + ], + "handlers": { + "create": { + "permissions": [ + "s3:GetBucketPolicy", + "s3:PutBucketPolicy" + ] + }, + "read": { + "permissions": [ + "s3:GetBucketPolicy" + ] + }, + "update": { + "permissions": [ + "s3:GetBucketPolicy", + "s3:PutBucketPolicy" + ] + }, + "delete": { + "permissions": [ + "s3:GetBucketPolicy", + "s3:DeleteBucketPolicy" + ] + }, + "list": { + "permissions": [ + "s3:GetBucketPolicy", + "s3:ListAllMyBuckets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3/multiregionaccesspoint.json b/internal/aws/cfn/schemas/aws/s3/multiregionaccesspoint.json new file mode 100644 index 00000000..d92858b4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3/multiregionaccesspoint.json @@ -0,0 +1,126 @@ +{ + "typeName": "AWS::S3::MultiRegionAccessPoint", + "description": "AWS::S3::MultiRegionAccessPoint is an Amazon S3 resource type that dynamically routes S3 requests to easily satisfy geographic compliance requirements based on customer-defined routing policies.", + "definitions": { + "PublicAccessBlockConfiguration": { + "type": "object", + "properties": { + "BlockPublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for buckets in this account. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs." + }, + "IgnorePublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set." + }, + "BlockPublicPolicy": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies." + }, + "RestrictPublicBuckets": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked." + } + }, + "additionalProperties": false + }, + "Region": { + "type": "object", + "properties": { + "Bucket": { + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "^[a-z0-9][a-z0-9//.//-]*[a-z0-9]$", + "relationshipRef": { + "typeName": "AWS::S3::Bucket", + "propertyPath": "/properties/BucketName" + } + }, + "BucketAccountId": { + "type": "string", + "minLength": 12, + "maxLength": 12, + "pattern": "^[0-9]{12}$" + } + }, + "required": [ + "Bucket" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name you want to assign to this Multi Region Access Point.", + "type": "string", + "pattern": "^[a-z0-9][-a-z0-9]{1,48}[a-z0-9]$", + "minLength": 3, + "maxLength": 50 + }, + "Alias": { + "description": "The alias is a unique identifier to, and is part of the public DNS name for this Multi Region Access Point", + "type": "string" + }, + "CreatedAt": { + "description": "The timestamp of the when the Multi Region Access Point is created", + "type": "string" + }, + "PublicAccessBlockConfiguration": { + "description": "The PublicAccessBlock configuration that you want to apply to this Multi Region Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.", + "$ref": "#/definitions/PublicAccessBlockConfiguration" + }, + "Regions": { + "description": "The list of buckets that you want to associate this Multi Region Access Point with.", + "type": "array", + "uniqueItems": true, + "minItems": 1, + "items": { + "description": "The name of the bucket that represents of the region belonging to this Multi Region Access Point.", + "$ref": "#/definitions/Region" + } + } + }, + "additionalProperties": false, + "required": [ + "Regions" + ], + "readOnlyProperties": [ + "/properties/Alias", + "/properties/CreatedAt" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/PublicAccessBlockConfiguration", + "/properties/Regions" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "s3:CreateMultiRegionAccessPoint", + "s3:DescribeMultiRegionAccessPointOperation", + "s3:GetMultiRegionAccessPoint" + ] + }, + "read": { + "permissions": [ + "s3:GetMultiRegionAccessPoint" + ] + }, + "delete": { + "permissions": [ + "s3:DeleteMultiRegionAccessPoint", + "s3:DescribeMultiRegionAccessPointOperation", + "s3:GetMultiRegionAccessPoint" + ] + }, + "list": { + "permissions": [ + "s3:ListMultiRegionAccessPoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3/multiregionaccesspointpolicy.json b/internal/aws/cfn/schemas/aws/s3/multiregionaccesspointpolicy.json new file mode 100644 index 00000000..0b680f08 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3/multiregionaccesspointpolicy.json @@ -0,0 +1,79 @@ +{ + "typeName": "AWS::S3::MultiRegionAccessPointPolicy", + "description": "The policy to be attached to a Multi Region Access Point", + "properties": { + "MrapName": { + "description": "The name of the Multi Region Access Point to apply policy", + "type": "string", + "pattern": "^[a-z0-9][-a-z0-9]{1,48}[a-z0-9]$", + "minLength": 3, + "maxLength": 50 + }, + "Policy": { + "description": "Policy document to apply to a Multi Region Access Point", + "type": "object" + }, + "PolicyStatus": { + "description": "The Policy Status associated with this Multi Region Access Point", + "type": "object", + "properties": { + "IsPublic": { + "type": "string", + "description": "Specifies whether the policy is public or not.", + "enum": [ + "true", + "false" + ] + } + }, + "additionalProperties": false, + "required": [ + "IsPublic" + ] + } + }, + "additionalProperties": false, + "required": [ + "Policy", + "MrapName" + ], + "createOnlyProperties": [ + "/properties/MrapName" + ], + "readOnlyProperties": [ + "/properties/PolicyStatus", + "/properties/PolicyStatus/IsPublic" + ], + "primaryIdentifier": [ + "/properties/MrapName" + ], + "handlers": { + "update": { + "permissions": [ + "s3:PutMultiRegionAccessPointPolicy", + "s3:DescribeMultiRegionAccessPointOperation" + ] + }, + "read": { + "permissions": [ + "s3:GetMultiRegionAccessPointPolicy", + "s3:GetMultiRegionAccessPointPolicyStatus" + ] + }, + "list": { + "permissions": [] + }, + "delete": { + "permissions": [ + "s3:GetMultiRegionAccessPointPolicy", + "s3:GetMultiRegionAccessPoint" + ] + }, + "create": { + "permissions": [ + "s3:PutMultiRegionAccessPointPolicy", + "s3:DescribeMultiRegionAccessPointOperation" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3/storagelens.json b/internal/aws/cfn/schemas/aws/s3/storagelens.json new file mode 100644 index 00000000..45dbc596 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3/storagelens.json @@ -0,0 +1,485 @@ +{ + "typeName": "AWS::S3::StorageLens", + "description": "The AWS::S3::StorageLens resource is an Amazon S3 resource type that you can use to create Storage Lens configurations.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3-storagelens", + "definitions": { + "Id": { + "description": "The ID that identifies the Amazon S3 Storage Lens configuration.", + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-zA-Z0-9\\-_.]+$" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the specified resource.", + "type": "string" + }, + "BucketsAndRegions": { + "description": "S3 buckets and Regions to include/exclude in the Amazon S3 Storage Lens configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "Buckets": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Arn" + } + }, + "Regions": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string", + "description": "An AWS Region." + } + } + } + }, + "AwsOrg": { + "description": "The AWS Organizations ARN to use in the Amazon S3 Storage Lens configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "Arn" + ] + }, + "ActivityMetrics": { + "description": "Enables activity metrics.", + "type": "object", + "additionalProperties": false, + "properties": { + "IsEnabled": { + "description": "Specifies whether activity metrics are enabled or disabled.", + "type": "boolean" + } + } + }, + "AdvancedCostOptimizationMetrics": { + "description": "Enables advanced cost optimization metrics.", + "type": "object", + "additionalProperties": false, + "properties": { + "IsEnabled": { + "description": "Specifies whether advanced cost optimization metrics are enabled or disabled.", + "type": "boolean" + } + } + }, + "AdvancedDataProtectionMetrics": { + "description": "Enables advanced data protection metrics.", + "type": "object", + "additionalProperties": false, + "properties": { + "IsEnabled": { + "description": "Specifies whether advanced data protection metrics are enabled or disabled.", + "type": "boolean" + } + } + }, + "DetailedStatusCodesMetrics": { + "description": "Enables detailed status codes metrics.", + "type": "object", + "additionalProperties": false, + "properties": { + "IsEnabled": { + "description": "Specifies whether detailed status codes metrics are enabled or disabled.", + "type": "boolean" + } + } + }, + "SelectionCriteria": { + "description": "Selection criteria for prefix-level metrics.", + "type": "object", + "additionalProperties": false, + "properties": { + "MaxDepth": { + "description": "Max depth of prefixes of S3 key that Amazon S3 Storage Lens will analyze.", + "type": "integer" + }, + "Delimiter": { + "description": "Delimiter to divide S3 key into hierarchy of prefixes.", + "type": "string" + }, + "MinStorageBytesPercentage": { + "description": "The minimum storage bytes threshold for the prefixes to be included in the analysis.", + "type": "number" + } + } + }, + "PrefixLevelStorageMetrics": { + "type": "object", + "additionalProperties": false, + "properties": { + "IsEnabled": { + "description": "Specifies whether prefix-level storage metrics are enabled or disabled.", + "type": "boolean" + }, + "SelectionCriteria": { + "$ref": "#/definitions/SelectionCriteria" + } + } + }, + "PrefixLevel": { + "description": "Prefix-level metrics configurations.", + "type": "object", + "additionalProperties": false, + "properties": { + "StorageMetrics": { + "$ref": "#/definitions/PrefixLevelStorageMetrics" + } + }, + "required": [ + "StorageMetrics" + ] + }, + "BucketLevel": { + "description": "Bucket-level metrics configurations.", + "type": "object", + "additionalProperties": false, + "properties": { + "ActivityMetrics": { + "$ref": "#/definitions/ActivityMetrics" + }, + "AdvancedCostOptimizationMetrics": { + "$ref": "#/definitions/AdvancedCostOptimizationMetrics" + }, + "AdvancedDataProtectionMetrics": { + "$ref": "#/definitions/AdvancedDataProtectionMetrics" + }, + "DetailedStatusCodesMetrics": { + "$ref": "#/definitions/DetailedStatusCodesMetrics" + }, + "PrefixLevel": { + "$ref": "#/definitions/PrefixLevel" + } + } + }, + "StorageLensGroupArn": { + "description": "The ARN for the Amazon S3 Storage Lens Group configuration.", + "type": "string" + }, + "StorageLensGroupSelectionCriteria": { + "description": "Selection criteria for Storage Lens Group level metrics", + "type": "object", + "additionalProperties": false, + "properties": { + "Include": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/StorageLensGroupArn" + } + }, + "Exclude": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/StorageLensGroupArn" + } + } + } + }, + "StorageLensGroupLevel": { + "description": "Specifies the details of Amazon S3 Storage Lens Group configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "StorageLensGroupSelectionCriteria": { + "$ref": "#/definitions/StorageLensGroupSelectionCriteria" + } + } + }, + "AccountLevel": { + "description": "Account-level metrics configurations.", + "type": "object", + "additionalProperties": false, + "properties": { + "ActivityMetrics": { + "$ref": "#/definitions/ActivityMetrics" + }, + "AdvancedCostOptimizationMetrics": { + "$ref": "#/definitions/AdvancedCostOptimizationMetrics" + }, + "AdvancedDataProtectionMetrics": { + "$ref": "#/definitions/AdvancedDataProtectionMetrics" + }, + "DetailedStatusCodesMetrics": { + "$ref": "#/definitions/DetailedStatusCodesMetrics" + }, + "BucketLevel": { + "$ref": "#/definitions/BucketLevel" + }, + "StorageLensGroupLevel": { + "$ref": "#/definitions/StorageLensGroupLevel" + } + }, + "required": [ + "BucketLevel" + ] + }, + "SSEKMS": { + "description": "AWS KMS server-side encryption.", + "type": "object", + "additionalProperties": false, + "properties": { + "KeyId": { + "description": "The ARN of the KMS key to use for encryption.", + "type": "string" + } + }, + "required": [ + "KeyId" + ] + }, + "Encryption": { + "description": "Configures the server-side encryption for Amazon S3 Storage Lens report files with either S3-managed keys (SSE-S3) or KMS-managed keys (SSE-KMS).", + "type": "object", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "SSES3": { + "description": "S3 default server-side encryption.", + "type": "object", + "additionalProperties": false + } + }, + "required": [ + "SSES3" + ] + }, + { + "additionalProperties": false, + "properties": { + "SSEKMS": { + "$ref": "#/definitions/SSEKMS" + } + }, + "required": [ + "SSEKMS" + ] + } + ] + }, + "S3BucketDestination": { + "description": "S3 bucket destination settings for the Amazon S3 Storage Lens metrics export.", + "type": "object", + "additionalProperties": false, + "properties": { + "OutputSchemaVersion": { + "description": "The version of the output schema to use when exporting Amazon S3 Storage Lens metrics.", + "type": "string", + "enum": [ + "V_1" + ] + }, + "Format": { + "description": "Specifies the file format to use when exporting Amazon S3 Storage Lens metrics export.", + "type": "string", + "enum": [ + "CSV", + "Parquet" + ] + }, + "AccountId": { + "description": "The AWS account ID that owns the destination S3 bucket.", + "type": "string" + }, + "Arn": { + "description": "The ARN of the bucket to which Amazon S3 Storage Lens exports will be placed.", + "type": "string" + }, + "Prefix": { + "description": "The prefix to use for Amazon S3 Storage Lens export.", + "type": "string" + }, + "Encryption": { + "$ref": "#/definitions/Encryption" + } + }, + "required": [ + "OutputSchemaVersion", + "Format", + "AccountId", + "Arn" + ] + }, + "CloudWatchMetrics": { + "description": "CloudWatch metrics settings for the Amazon S3 Storage Lens metrics export.", + "type": "object", + "additionalProperties": false, + "properties": { + "IsEnabled": { + "description": "Specifies whether CloudWatch metrics are enabled or disabled.", + "type": "boolean" + } + }, + "required": [ + "IsEnabled" + ] + }, + "DataExport": { + "description": "Specifies how Amazon S3 Storage Lens metrics should be exported.", + "type": "object", + "additionalProperties": false, + "properties": { + "S3BucketDestination": { + "$ref": "#/definitions/S3BucketDestination" + }, + "CloudWatchMetrics": { + "$ref": "#/definitions/CloudWatchMetrics" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127, + "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-\\@\\:]+$" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-\\@\\:]+$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "StorageLensConfiguration": { + "description": "Specifies the details of Amazon S3 Storage Lens configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "$ref": "#/definitions/Id" + }, + "Include": { + "$ref": "#/definitions/BucketsAndRegions" + }, + "Exclude": { + "$ref": "#/definitions/BucketsAndRegions" + }, + "AwsOrg": { + "$ref": "#/definitions/AwsOrg" + }, + "AccountLevel": { + "$ref": "#/definitions/AccountLevel" + }, + "DataExport": { + "$ref": "#/definitions/DataExport" + }, + "IsEnabled": { + "description": "Specifies whether the Amazon S3 Storage Lens configuration is enabled or disabled.", + "type": "boolean" + }, + "StorageLensArn": { + "description": "The ARN for the Amazon S3 Storage Lens configuration.", + "type": "string" + } + }, + "required": [ + "Id", + "AccountLevel", + "IsEnabled" + ] + } + }, + "properties": { + "StorageLensConfiguration": { + "$ref": "#/definitions/StorageLensConfiguration" + }, + "Tags": { + "description": "A set of tags (key-value pairs) for this Amazon S3 Storage Lens configuration.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50 + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "required": [ + "StorageLensConfiguration" + ], + "readOnlyProperties": [ + "/properties/StorageLensConfiguration/StorageLensArn" + ], + "createOnlyProperties": [ + "/properties/StorageLensConfiguration/Id" + ], + "primaryIdentifier": [ + "/properties/StorageLensConfiguration/Id" + ], + "handlers": { + "create": { + "permissions": [ + "s3:PutStorageLensConfiguration", + "s3:PutStorageLensConfigurationTagging", + "s3:GetStorageLensConfiguration", + "s3:GetStorageLensConfigurationTagging", + "organizations:DescribeOrganization", + "organizations:ListAccounts", + "organizations:ListAWSServiceAccessForOrganization", + "organizations:ListDelegatedAdministrators", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "s3:GetStorageLensConfiguration", + "s3:GetStorageLensConfigurationTagging" + ] + }, + "update": { + "permissions": [ + "s3:PutStorageLensConfiguration", + "s3:PutStorageLensConfigurationTagging", + "s3:GetStorageLensConfiguration", + "s3:GetStorageLensConfigurationTagging", + "organizations:DescribeOrganization", + "organizations:ListAccounts", + "organizations:ListAWSServiceAccessForOrganization", + "organizations:ListDelegatedAdministrators", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "s3:DeleteStorageLensConfiguration", + "s3:DeleteStorageLensConfigurationTagging" + ] + }, + "list": { + "permissions": [ + "s3:ListStorageLensConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3objectlambda/accesspoint.json b/internal/aws/cfn/schemas/aws/s3objectlambda/accesspoint.json new file mode 100644 index 00000000..81c2a099 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3objectlambda/accesspoint.json @@ -0,0 +1,243 @@ +{ + "typeName": "AWS::S3ObjectLambda::AccessPoint", + "description": "The AWS::S3ObjectLambda::AccessPoint resource is an Amazon S3ObjectLambda resource type that you can use to add computation to S3 actions", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "PublicAccessBlockConfiguration": { + "type": "object", + "additionalProperties": false, + "description": "The Public Access Block Configuration is used to block policies that would allow public access to this Object lambda Access Point. All public access to Object lambda Access Points are blocked by default, and any policy that would give public access to them will be also blocked. This behavior cannot be changed for Object lambda Access Points.", + "properties": { + "BlockPublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) to this object lambda access point. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs." + }, + "IgnorePublicAcls": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set." + }, + "BlockPublicPolicy": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies." + }, + "RestrictPublicBuckets": { + "type": "boolean", + "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked." + } + } + }, + "ObjectLambdaConfiguration": { + "type": "object", + "additionalProperties": false, + "description": "Configuration to be applied to this Object lambda Access Point. It specifies Supporting Access Point, Transformation Configurations. Customers can also set if they like to enable Cloudwatch metrics for accesses to this Object lambda Access Point. Default setting for Cloudwatch metrics is disable.", + "properties": { + "SupportingAccessPoint": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "AllowedFeatures": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "CloudWatchMetricsEnabled": { + "type": "boolean" + }, + "TransformationConfigurations": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/TransformationConfiguration" + } + } + }, + "required": [ + "SupportingAccessPoint", + "TransformationConfigurations" + ] + }, + "TransformationConfiguration": { + "type": "object", + "additionalProperties": false, + "description": "Configuration to define what content transformation will be applied on which S3 Action.", + "properties": { + "Actions": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Action" + } + }, + "ContentTransformation": { + "type": "object", + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "AwsLambda": { + "$ref": "#/definitions/AwsLambda" + } + }, + "required": [ + "AwsLambda" + ] + } + ] + } + }, + "required": [ + "Actions", + "ContentTransformation" + ] + }, + "AwsLambda": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "FunctionPayload": { + "type": "string" + } + }, + "required": [ + "FunctionArn" + ] + }, + "Action": { + "type": "string" + }, + "Alias": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string", + "description": "The status of the Object Lambda alias.", + "pattern": "^[A-Z]*$" + }, + "Value": { + "type": "string", + "description": "The value of the Object Lambda alias.", + "pattern": "^[a-z0-9\\-]*$" + } + }, + "required": [ + "Value" + ] + }, + "PolicyStatus": { + "type": "object", + "additionalProperties": false, + "properties": { + "IsPublic": { + "type": "boolean", + "description": "Specifies whether the Object lambda Access Point Policy is Public or not. Object lambda Access Points are private by default." + } + } + } + }, + "properties": { + "Name": { + "description": "The name you want to assign to this Object lambda Access Point.", + "type": "string", + "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$", + "minLength": 3, + "maxLength": 45 + }, + "Alias": { + "$ref": "#/definitions/Alias" + }, + "Arn": { + "type": "string", + "pattern": "arn:[^:]+:s3-object-lambda:[^:]*:\\d{12}:accesspoint/.*" + }, + "CreationDate": { + "description": "The date and time when the Object lambda Access Point was created.", + "type": "string" + }, + "PublicAccessBlockConfiguration": { + "description": "The PublicAccessBlock configuration that you want to apply to this Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.", + "$ref": "#/definitions/PublicAccessBlockConfiguration" + }, + "PolicyStatus": { + "$ref": "#/definitions/PolicyStatus" + }, + "ObjectLambdaConfiguration": { + "description": "The Object lambda Access Point Configuration that configures transformations to be applied on the objects on specified S3 Actions", + "$ref": "#/definitions/ObjectLambdaConfiguration" + } + }, + "required": [ + "ObjectLambdaConfiguration" + ], + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Alias", + "/properties/Alias/Value", + "/properties/Alias/Status", + "/properties/PolicyStatus", + "/properties/PolicyStatus/IsPublic", + "/properties/CreationDate", + "/properties/PublicAccessBlockConfiguration" + ], + "deprecatedProperties": [ + "/properties/PolicyStatus", + "/properties/PolicyStatus/IsPublic" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "s3:CreateAccessPointForObjectLambda", + "s3:PutAccessPointConfigurationForObjectLambda", + "s3:GetAccessPointForObjectLambda", + "s3:GetAccessPointPolicyStatusForObjectLambda", + "s3:GetAccessPointConfigurationForObjectLambda" + ] + }, + "read": { + "permissions": [ + "s3:GetAccessPointForObjectLambda", + "s3:GetAccessPointPolicyStatusForObjectLambda", + "s3:GetAccessPointConfigurationForObjectLambda" + ] + }, + "update": { + "permissions": [ + "s3:PutAccessPointConfigurationForObjectLambda", + "s3:GetAccessPointForObjectLambda", + "s3:GetAccessPointPolicyStatusForObjectLambda", + "s3:GetAccessPointConfigurationForObjectLambda" + ] + }, + "delete": { + "permissions": [ + "s3:DeleteAccessPointForObjectLambda" + ] + }, + "list": { + "permissions": [ + "s3:ListAccessPointsForObjectLambda" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3objectlambda/accesspointpolicy.json b/internal/aws/cfn/schemas/aws/s3objectlambda/accesspointpolicy.json new file mode 100644 index 00000000..786e7d26 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3objectlambda/accesspointpolicy.json @@ -0,0 +1,57 @@ +{ + "typeName": "AWS::S3ObjectLambda::AccessPointPolicy", + "description": "AWS::S3ObjectLambda::AccessPointPolicy resource is an Amazon S3ObjectLambda policy type that you can use to control permissions for your S3ObjectLambda", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "additionalProperties": false, + "properties": { + "ObjectLambdaAccessPoint": { + "description": "The name of the Amazon S3 ObjectLambdaAccessPoint to which the policy applies.", + "type": "string", + "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$", + "minLength": 3, + "maxLength": 45 + }, + "PolicyDocument": { + "description": "A policy document containing permissions to add to the specified ObjectLambdaAccessPoint. For more information, see Access Policy Language Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) in the Amazon Simple Storage Service Developer Guide. ", + "type": "object" + } + }, + "required": [ + "ObjectLambdaAccessPoint", + "PolicyDocument" + ], + "createOnlyProperties": [ + "/properties/ObjectLambdaAccessPoint" + ], + "primaryIdentifier": [ + "/properties/ObjectLambdaAccessPoint" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "s3:PutAccessPointPolicyForObjectLambda", + "s3:GetAccessPointPolicyForObjectLambda" + ] + }, + "read": { + "permissions": [ + "s3:GetAccessPointPolicyForObjectLambda" + ] + }, + "update": { + "permissions": [ + "s3:PutAccessPointPolicyForObjectLambda", + "s3:GetAccessPointPolicyForObjectLambda" + ] + }, + "delete": { + "permissions": [ + "s3:DeleteAccessPointPolicyForObjectLambda", + "s3:GetAccessPointPolicyForObjectLambda" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3outposts/accesspoint.json b/internal/aws/cfn/schemas/aws/s3outposts/accesspoint.json new file mode 100644 index 00000000..a92c723d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3outposts/accesspoint.json @@ -0,0 +1,103 @@ +{ + "typeName": "AWS::S3Outposts::AccessPoint", + "description": "Resource Type Definition for AWS::S3Outposts::AccessPoint", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git", + "definitions": { + "VpcConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "VpcId": { + "description": "Virtual Private Cloud (VPC) Id from which AccessPoint will allow requests.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + } + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the specified AccessPoint.", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/accesspoint\\/[^:]+$", + "type": "string" + }, + "Bucket": { + "description": "The Amazon Resource Name (ARN) of the bucket you want to associate this AccessPoint with.", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$", + "type": "string" + }, + "Name": { + "description": "A name for the AccessPoint.", + "maxLength": 50, + "minLength": 3, + "pattern": "^[a-z0-9]([a-z0-9\\\\-]*[a-z0-9])?$", + "type": "string" + }, + "VpcConfiguration": { + "description": "Virtual Private Cloud (VPC) from which requests can be made to the AccessPoint.", + "$ref": "#/definitions/VpcConfiguration" + }, + "Policy": { + "description": "The access point policy associated with this access point.", + "type": "object" + } + }, + "taggable": false, + "additionalProperties": false, + "required": [ + "Bucket", + "Name", + "VpcConfiguration" + ], + "createOnlyProperties": [ + "/properties/Bucket", + "/properties/Name", + "/properties/VpcConfiguration" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "s3-outposts:CreateAccessPoint", + "s3-outposts:GetAccessPoint", + "s3-outposts:PutAccessPointPolicy", + "s3-outposts:GetAccessPointPolicy" + ] + }, + "read": { + "permissions": [ + "s3-outposts:GetAccessPoint", + "s3-outposts:GetAccessPointPolicy" + ] + }, + "update": { + "permissions": [ + "s3-outposts:GetAccessPoint", + "s3-outposts:PutAccessPointPolicy", + "s3-outposts:GetAccessPointPolicy", + "s3-outposts:DeleteAccessPointPolicy" + ] + }, + "delete": { + "permissions": [ + "s3-outposts:DeleteAccessPoint", + "s3-outposts:DeleteAccessPointPolicy" + ] + }, + "list": { + "permissions": [ + "s3-outposts:ListAccessPoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3outposts/bucket.json b/internal/aws/cfn/schemas/aws/s3outposts/bucket.json new file mode 100644 index 00000000..fc20208c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3outposts/bucket.json @@ -0,0 +1,292 @@ +{ + "typeName": "AWS::S3Outposts::Bucket", + "description": "Resource Type Definition for AWS::S3Outposts::Bucket", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^(?!aws:.*)([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "LifecycleConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Rules": { + "description": "A list of lifecycle rules for individual objects in an Amazon S3Outposts bucket.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Rule" + } + } + }, + "required": [ + "Rules" + ] + }, + "Rule": { + "description": "Specifies lifecycle rules for an Amazon S3Outposts bucket. You must specify at least one of the following: AbortIncompleteMultipartUpload, ExpirationDate, ExpirationInDays.", + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string", + "enum": [ + "Enabled", + "Disabled" + ] + }, + "Id": { + "type": "string", + "maxLength": 255, + "description": "Unique identifier for the lifecycle rule. The value can't be longer than 255 characters." + }, + "AbortIncompleteMultipartUpload": { + "description": "Specifies a lifecycle rule that stops incomplete multipart uploads to an Amazon S3Outposts bucket.", + "$ref": "#/definitions/AbortIncompleteMultipartUpload" + }, + "ExpirationDate": { + "description": "Indicates when objects are deleted from Amazon S3Outposts. The date value must be in ISO 8601 format. The time is always midnight UTC.", + "$ref": "#/definitions/iso8601UTC" + }, + "ExpirationInDays": { + "description": "Indicates the number of days after creation when objects are deleted from Amazon S3Outposts.", + "type": "integer", + "minimum": 1 + }, + "Filter": { + "description": "The container for the filter of the lifecycle rule.", + "type": "object", + "additionalProperties": false, + "properties": { + "Prefix": { + "description": "Object key prefix that identifies one or more objects to which this rule applies.", + "$ref": "#/definitions/FilterPrefix" + }, + "Tag": { + "description": "Specifies a tag used to identify a subset of objects for an Amazon S3Outposts bucket.", + "$ref": "#/definitions/FilterTag" + }, + "AndOperator": { + "description": "The container for the AND condition for the lifecycle rule. A combination of Prefix and 1 or more Tags OR a minimum of 2 or more tags.", + "$ref": "#/definitions/FilterAndOperator" + } + }, + "oneOf": [ + { + "required": [ + "Prefix" + ] + }, + { + "required": [ + "Tag" + ] + }, + { + "required": [ + "AndOperator" + ] + } + ] + } + }, + "anyOf": [ + { + "required": [ + "Status", + "AbortIncompleteMultipartUpload" + ] + }, + { + "required": [ + "Status", + "ExpirationDate" + ] + }, + { + "required": [ + "Status", + "ExpirationInDays" + ] + } + ] + }, + "iso8601UTC": { + "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + }, + "AbortIncompleteMultipartUpload": { + "description": "Specifies the days since the initiation of an incomplete multipart upload that Amazon S3Outposts will wait before permanently removing all parts of the upload.", + "type": "object", + "additionalProperties": false, + "properties": { + "DaysAfterInitiation": { + "description": "Specifies the number of days after which Amazon S3Outposts aborts an incomplete multipart upload.", + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "DaysAfterInitiation" + ] + }, + "FilterPrefix": { + "description": "Prefix identifies one or more objects to which the rule applies.", + "type": "string" + }, + "FilterTag": { + "description": "Tag used to identify a subset of objects for an Amazon S3Outposts bucket.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "FilterAndOperator": { + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "Tags" + ], + "properties": { + "Prefix": { + "description": "Prefix identifies one or more objects to which the rule applies.", + "$ref": "#/definitions/FilterPrefix" + }, + "Tags": { + "description": "All of these tags must exist in the object's tag set in order for the rule to apply.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 1, + "items": { + "$ref": "#/definitions/FilterTag" + } + } + } + } + ] + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the specified bucket.", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$", + "type": "string" + }, + "BucketName": { + "description": "A name for the bucket.", + "maxLength": 63, + "minLength": 3, + "pattern": "(?=^.{3,63}$)(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$)", + "type": "string" + }, + "OutpostId": { + "description": "The id of the customer outpost on which the bucket resides.", + "pattern": "^(op-[a-f0-9]{17}|\\d{12}|ec2)$", + "type": "string" + }, + "Tags": { + "description": "An arbitrary set of tags (key-value pairs) for this S3Outposts bucket.", + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array", + "insertionOrder": false, + "uniqueItems": true + }, + "LifecycleConfiguration": { + "description": "Rules that define how Amazon S3Outposts manages objects during their lifetime.", + "$ref": "#/definitions/LifecycleConfiguration" + } + }, + "taggable": true, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/BucketName", + "/properties/OutpostId" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "required": [ + "BucketName", + "OutpostId" + ], + "handlers": { + "create": { + "permissions": [ + "s3-outposts:CreateBucket", + "s3-outposts:PutBucketTagging", + "s3-outposts:PutLifecycleConfiguration" + ] + }, + "read": { + "permissions": [ + "s3-outposts:GetBucket", + "s3-outposts:GetBucketTagging", + "s3-outposts:GetLifecycleConfiguration" + ] + }, + "update": { + "permissions": [ + "s3-outposts:PutBucketTagging", + "s3-outposts:DeleteBucketTagging", + "s3-outposts:PutLifecycleConfiguration" + ] + }, + "delete": { + "permissions": [ + "s3-outposts:DeleteBucket" + ] + }, + "list": { + "permissions": [ + "s3-outposts:ListRegionalBuckets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3outposts/bucketpolicy.json b/internal/aws/cfn/schemas/aws/s3outposts/bucketpolicy.json new file mode 100644 index 00000000..9289d42f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3outposts/bucketpolicy.json @@ -0,0 +1,56 @@ +{ + "typeName": "AWS::S3Outposts::BucketPolicy", + "description": "Resource Type Definition for AWS::S3Outposts::BucketPolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git", + "definitions": {}, + "properties": { + "Bucket": { + "description": "The Amazon Resource Name (ARN) of the specified bucket.", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$", + "type": "string" + }, + "PolicyDocument": { + "description": "A policy document containing permissions to add to the specified bucket.", + "type": "object" + } + }, + "taggable": false, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Bucket" + ], + "required": [ + "Bucket", + "PolicyDocument" + ], + "primaryIdentifier": [ + "/properties/Bucket" + ], + "handlers": { + "create": { + "permissions": [ + "s3-outposts:PutBucketPolicy", + "s3-outposts:GetBucketPolicy" + ] + }, + "read": { + "permissions": [ + "s3-outposts:GetBucketPolicy" + ] + }, + "update": { + "permissions": [ + "s3-outposts:PutBucketPolicy", + "s3-outposts:GetBucketPolicy" + ] + }, + "delete": { + "permissions": [ + "s3-outposts:DeleteBucketPolicy", + "s3-outposts:GetBucketPolicy" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/s3outposts/endpoint.json b/internal/aws/cfn/schemas/aws/s3outposts/endpoint.json new file mode 100644 index 00000000..2596ab94 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/s3outposts/endpoint.json @@ -0,0 +1,170 @@ +{ + "typeName": "AWS::S3Outposts::Endpoint", + "description": "Resource Type Definition for AWS::S3Outposts::Endpoint", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git", + "definitions": { + "iso8601UTC": { + "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)", + "type": "string", + "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$" + }, + "NetworkInterface": { + "description": "The container for the network interface.", + "type": "object", + "additionalProperties": false, + "properties": { + "NetworkInterfaceId": { + "type": "string", + "minLength": 1, + "maxLength": 100 + } + }, + "required": [ + "NetworkInterfaceId" + ] + }, + "FailedReason": { + "type": "object", + "additionalProperties": false, + "properties": { + "ErrorCode": { + "type": "string", + "description": "The failure code, if any, for a create or delete endpoint operation." + }, + "Message": { + "type": "string", + "description": "Additional error details describing the endpoint failure and recommended action." + } + } + } + }, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the endpoint.", + "minLength": 5, + "maxLength": 500, + "type": "string", + "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/endpoint/[a-zA-Z0-9]{19}$" + }, + "CidrBlock": { + "description": "The VPC CIDR committed by this endpoint.", + "minLength": 1, + "maxLength": 20, + "type": "string" + }, + "CreationTime": { + "description": "The time the endpoint was created.", + "$ref": "#/definitions/iso8601UTC" + }, + "Id": { + "description": "The ID of the endpoint.", + "minLength": 5, + "maxLength": 500, + "type": "string", + "pattern": "^[a-zA-Z0-9]{19}$" + }, + "NetworkInterfaces": { + "description": "The network interfaces of the endpoint.", + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/NetworkInterface" + } + }, + "OutpostId": { + "description": "The id of the customer outpost on which the bucket resides.", + "pattern": "^(op-[a-f0-9]{17}|\\d{12}|ec2)$", + "type": "string" + }, + "SecurityGroupId": { + "description": "The ID of the security group to use with the endpoint.", + "minLength": 1, + "maxLength": 100, + "type": "string", + "pattern": "^sg-([0-9a-f]{8}|[0-9a-f]{17})$" + }, + "Status": { + "type": "string", + "enum": [ + "Available", + "Pending", + "Deleting", + "Create_Failed", + "Delete_Failed" + ] + }, + "SubnetId": { + "description": "The ID of the subnet in the selected VPC. The subnet must belong to the Outpost.", + "minLength": 1, + "maxLength": 100, + "type": "string", + "pattern": "^subnet-([0-9a-f]{8}|[0-9a-f]{17})$" + }, + "AccessType": { + "description": "The type of access for the on-premise network connectivity for the Outpost endpoint. To access endpoint from an on-premises network, you must specify the access type and provide the customer owned Ipv4 pool.", + "type": "string", + "enum": [ + "CustomerOwnedIp", + "Private" + ], + "default": "Private" + }, + "CustomerOwnedIpv4Pool": { + "description": "The ID of the customer-owned IPv4 pool for the Endpoint. IP addresses will be allocated from this pool for the endpoint.", + "type": "string", + "pattern": "^ipv4pool-coip-([0-9a-f]{17})$" + }, + "FailedReason": { + "description": "The failure reason, if any, for a create or delete endpoint operation.", + "$ref": "#/definitions/FailedReason" + } + }, + "taggable": false, + "additionalProperties": false, + "required": [ + "OutpostId", + "SecurityGroupId", + "SubnetId" + ], + "createOnlyProperties": [ + "/properties/OutpostId", + "/properties/SecurityGroupId", + "/properties/SubnetId", + "/properties/AccessType", + "/properties/CustomerOwnedIpv4Pool" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CidrBlock", + "/properties/CreationTime", + "/properties/Id", + "/properties/NetworkInterfaces", + "/properties/Status" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "s3-outposts:CreateEndpoint" + ] + }, + "read": { + "permissions": [ + "s3-outposts:ListEndpoints" + ] + }, + "delete": { + "permissions": [ + "s3-outposts:DeleteEndpoint" + ] + }, + "list": { + "permissions": [ + "s3-outposts:ListEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/app.json b/internal/aws/cfn/schemas/aws/sagemaker/app.json new file mode 100644 index 00000000..3db2ffe5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/app.json @@ -0,0 +1,221 @@ +{ + "typeName": "AWS::SageMaker::App", + "description": "Resource Type definition for AWS::SageMaker::App", + "additionalProperties": false, + "properties": { + "AppArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the app.", + "minLength": 1, + "maxLength": 256, + "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:app/.*" + }, + "AppName": { + "type": "string", + "description": "The name of the app.", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}" + }, + "AppType": { + "type": "string", + "description": "The type of app.", + "enum": [ + "JupyterServer", + "KernelGateway", + "RStudioServerPro", + "RSessionGateway", + "Canvas" + ] + }, + "DomainId": { + "type": "string", + "description": "The domain ID.", + "minLength": 1, + "maxLength": 63 + }, + "ResourceSpec": { + "$ref": "#/definitions/ResourceSpec", + "description": "The instance type and the Amazon Resource Name (ARN) of the SageMaker image created on the instance." + }, + "Tags": { + "type": "array", + "description": "A list of tags to apply to the app.", + "uniqueItems": false, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UserProfileName": { + "type": "string", + "description": "The user profile name.", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}" + } + }, + "definitions": { + "ResourceSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceType": { + "type": "string", + "description": "The instance type that the image version runs on.", + "enum": [ + "system", + "ml.t3.micro", + "ml.t3.small", + "ml.t3.medium", + "ml.t3.large", + "ml.t3.xlarge", + "ml.t3.2xlarge", + "ml.m5.large", + "ml.m5.xlarge", + "ml.m5.2xlarge", + "ml.m5.4xlarge", + "ml.m5.8xlarge", + "ml.m5.12xlarge", + "ml.m5.16xlarge", + "ml.m5.24xlarge", + "ml.c5.large", + "ml.c5.xlarge", + "ml.c5.2xlarge", + "ml.c5.4xlarge", + "ml.c5.9xlarge", + "ml.c5.12xlarge", + "ml.c5.18xlarge", + "ml.c5.24xlarge", + "ml.p3.2xlarge", + "ml.p3.8xlarge", + "ml.p3.16xlarge", + "ml.g4dn.xlarge", + "ml.g4dn.2xlarge", + "ml.g4dn.4xlarge", + "ml.g4dn.8xlarge", + "ml.g4dn.12xlarge", + "ml.g4dn.16xlarge", + "ml.r5.large", + "ml.r5.xlarge", + "ml.r5.2xlarge", + "ml.r5.4xlarge", + "ml.r5.8xlarge", + "ml.r5.12xlarge", + "ml.r5.16xlarge", + "ml.r5.24xlarge", + "ml.p3dn.24xlarge", + "ml.m5d.large", + "ml.m5d.xlarge", + "ml.m5d.2xlarge", + "ml.m5d.4xlarge", + "ml.m5d.8xlarge", + "ml.m5d.12xlarge", + "ml.m5d.16xlarge", + "ml.m5d.24xlarge", + "ml.g5.xlarge", + "ml.g5.2xlarge", + "ml.g5.4xlarge", + "ml.g5.8xlarge", + "ml.g5.12xlarge", + "ml.g5.16xlarge", + "ml.g5.24xlarge", + "ml.g5.48xlarge", + "ml.p4d.24xlarge", + "ml.p4de.24xlarge", + "ml.geospatial.interactive", + "ml.trn1.2xlarge", + "ml.trn1.32xlarge", + "ml.trn1n.32xlarge" + ] + }, + "SageMakerImageArn": { + "type": "string", + "description": "The ARN of the SageMaker image that the image version belongs to.", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-z0-9]([-.]?[a-z0-9])*$" + }, + "SageMakerImageVersionArn": { + "type": "string", + "description": "The ARN of the image version created on the instance.", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+$" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "AppName", + "AppType", + "DomainId", + "UserProfileName" + ], + "createOnlyProperties": [ + "/properties/AppName", + "/properties/AppType", + "/properties/DomainId", + "/properties/UserProfileName", + "/properties/Tags", + "/properties/ResourceSpec" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/AppName", + "/properties/AppType", + "/properties/DomainId", + "/properties/UserProfileName" + ], + "readOnlyProperties": [ + "/properties/AppArn" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateApp", + "sagemaker:DescribeApp" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeApp", + "sagemaker:DescribeApp" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteApp", + "sagemaker:DescribeApp" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListApps" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/appimageconfig.json b/internal/aws/cfn/schemas/aws/sagemaker/appimageconfig.json new file mode 100644 index 00000000..2397006e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/appimageconfig.json @@ -0,0 +1,261 @@ +{ + "typeName": "AWS::SageMaker::AppImageConfig", + "description": "Resource Type definition for AWS::SageMaker::AppImageConfig", + "additionalProperties": false, + "properties": { + "AppImageConfigArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the AppImageConfig.", + "minLength": 1, + "maxLength": 256, + "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:app-image-config/.*" + }, + "AppImageConfigName": { + "type": "string", + "description": "The Name of the AppImageConfig.", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}" + }, + "KernelGatewayImageConfig": { + "$ref": "#/definitions/KernelGatewayImageConfig", + "description": "The KernelGatewayImageConfig." + }, + "JupyterLabAppImageConfig": { + "$ref": "#/definitions/JupyterLabAppImageConfig", + "description": "The JupyterLabAppImageConfig." + }, + "Tags": { + "type": "array", + "description": "A list of tags to apply to the AppImageConfig.", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + } + }, + "definitions": { + "KernelGatewayImageConfig": { + "type": "object", + "description": "The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app.", + "additionalProperties": false, + "properties": { + "FileSystemConfig": { + "$ref": "#/definitions/FileSystemConfig", + "description": "The Amazon Elastic File System (EFS) storage configuration for a SageMaker image." + }, + "KernelSpecs": { + "type": "array", + "description": "The specification of the Jupyter kernels in the image.", + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/definitions/KernelSpec" + } + } + }, + "required": [ + "KernelSpecs" + ] + }, + "JupyterLabAppImageConfig": { + "type": "object", + "description": "The configuration for the kernels in a SageMaker image running as a JupyterLab app.", + "additionalProperties": false, + "properties": { + "ContainerConfig": { + "$ref": "#/definitions/ContainerConfig", + "description": "The container configuration for a SageMaker image." + } + } + }, + "ContainerConfig": { + "type": "object", + "description": "The container configuration for a SageMaker image.", + "additionalProperties": false, + "properties": { + "ContainerArguments": { + "type": "array", + "description": "A list of arguments to apply to the container.", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CustomImageContainerArguments" + }, + "minItems": 0, + "maxItems": 50 + }, + "ContainerEntrypoint": { + "type": "array", + "description": "The custom entry point to use on container.", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CustomImageContainerEntrypoint" + }, + "minItems": 0, + "maxItems": 1 + }, + "ContainerEnvironmentVariables": { + "type": "array", + "description": "A list of variables to apply to the custom container.", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CustomImageContainerEnvironmentVariable" + }, + "minItems": 0, + "maxItems": 25 + } + } + }, + "CustomImageContainerArguments": { + "type": "string", + "description": "The container image arguments", + "minLength": 1, + "maxLength": 64, + "pattern": "^(?!\\s*$).+" + }, + "CustomImageContainerEntrypoint": { + "type": "string", + "description": "The container entry point", + "minLength": 1, + "maxLength": 256, + "pattern": "^(?!\\s*$).+" + }, + "CustomImageContainerEnvironmentVariable": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^(?!\\s*$).+" + }, + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^(?!\\s*$).+" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "FileSystemConfig": { + "type": "object", + "description": "The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.", + "additionalProperties": false, + "properties": { + "DefaultGid": { + "type": "integer", + "description": "The default POSIX group ID (GID). If not specified, defaults to 100.", + "minimum": 0, + "maximum": 65535 + }, + "DefaultUid": { + "type": "integer", + "description": "The default POSIX user ID (UID). If not specified, defaults to 1000.", + "minimum": 0, + "maximum": 65535 + }, + "MountPath": { + "type": "string", + "description": "The path within the image to mount the user's EFS home directory. The directory should be empty. If not specified, defaults to /home/sagemaker-user.", + "minLength": 1, + "maxLength": 1024, + "pattern": "^/.*" + } + } + }, + "KernelSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "DisplayName": { + "type": "string", + "description": "The display name of the kernel.", + "minLength": 1, + "maxLength": 1024 + }, + "Name": { + "type": "string", + "description": "The name of the kernel.", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "Name" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "AppImageConfigName" + ], + "createOnlyProperties": [ + "/properties/AppImageConfigName", + "/properties/Tags" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/AppImageConfigArn" + ], + "primaryIdentifier": [ + "/properties/AppImageConfigName" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateAppImageConfig", + "sagemaker:DescribeAppImageConfig" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeAppImageConfig" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateAppImageConfig", + "sagemaker:DescribeAppImageConfig" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteAppImageConfig", + "sagemaker:DescribeAppImageConfig" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListAppImageConfigs" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/coderepository.json b/internal/aws/cfn/schemas/aws/sagemaker/coderepository.json new file mode 100644 index 00000000..1f456f94 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/coderepository.json @@ -0,0 +1,71 @@ +{ + "typeName": "AWS::SageMaker::CodeRepository", + "description": "Resource Type definition for AWS::SageMaker::CodeRepository", + "additionalProperties": false, + "properties": { + "GitConfig": { + "$ref": "#/definitions/GitConfig" + }, + "CodeRepositoryName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "GitConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecretArn": { + "type": "string" + }, + "RepositoryUrl": { + "type": "string" + }, + "Branch": { + "type": "string" + } + }, + "required": [ + "RepositoryUrl" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "GitConfig" + ], + "createOnlyProperties": [ + "/properties/CodeRepositoryName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/dataqualityjobdefinition.json b/internal/aws/cfn/schemas/aws/sagemaker/dataqualityjobdefinition.json new file mode 100644 index 00000000..44100da5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/dataqualityjobdefinition.json @@ -0,0 +1,591 @@ +{ + "typeName": "AWS::SageMaker::DataQualityJobDefinition", + "description": "Resource Type definition for AWS::SageMaker::DataQualityJobDefinition", + "additionalProperties": false, + "properties": { + "JobDefinitionArn": { + "description": "The Amazon Resource Name (ARN) of job definition.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "JobDefinitionName": { + "$ref": "#/definitions/JobDefinitionName" + }, + "DataQualityBaselineConfig": { + "$ref": "#/definitions/DataQualityBaselineConfig" + }, + "DataQualityAppSpecification": { + "$ref": "#/definitions/DataQualityAppSpecification" + }, + "DataQualityJobInput": { + "$ref": "#/definitions/DataQualityJobInput" + }, + "DataQualityJobOutputConfig": { + "$ref": "#/definitions/MonitoringOutputConfig" + }, + "JobResources": { + "$ref": "#/definitions/MonitoringResources" + }, + "NetworkConfig": { + "$ref": "#/definitions/NetworkConfig" + }, + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.", + "type": "string", + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$", + "minLength": 20, + "maxLength": 2048 + }, + "StoppingCondition": { + "$ref": "#/definitions/StoppingCondition" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreationTime": { + "description": "The time at which the job definition was created.", + "type": "string" + } + }, + "definitions": { + "DataQualityBaselineConfig": { + "type": "object", + "additionalProperties": false, + "description": "Baseline configuration used to validate that the data conforms to the specified constraints and statistics.", + "properties": { + "BaseliningJobName": { + "$ref": "#/definitions/ProcessingJobName" + }, + "ConstraintsResource": { + "$ref": "#/definitions/ConstraintsResource" + }, + "StatisticsResource": { + "$ref": "#/definitions/StatisticsResource" + } + } + }, + "ConstraintsResource": { + "type": "object", + "additionalProperties": false, + "description": "The baseline constraints resource for a monitoring job.", + "properties": { + "S3Uri": { + "description": "The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.", + "$ref": "#/definitions/S3Uri" + } + } + }, + "StatisticsResource": { + "type": "object", + "additionalProperties": false, + "description": "The baseline statistics resource for a monitoring job.", + "properties": { + "S3Uri": { + "description": "The Amazon S3 URI for the baseline statistics file in Amazon S3 that the current monitoring job should be validated against.", + "$ref": "#/definitions/S3Uri" + } + } + }, + "S3Uri": { + "type": "string", + "description": "The Amazon S3 URI.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 1024 + }, + "DataQualityAppSpecification": { + "type": "object", + "additionalProperties": false, + "description": "Container image configuration object for the monitoring job.", + "properties": { + "ContainerArguments": { + "type": "array", + "description": "An array of arguments for the container used to run the monitoring job.", + "maxItems": 50, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "ContainerEntrypoint": { + "type": "array", + "description": "Specifies the entrypoint for a container used to run the monitoring job.", + "maxItems": 100, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "ImageUri": { + "type": "string", + "description": "The container image to be run by the monitoring job.", + "pattern": ".*", + "maxLength": 255 + }, + "PostAnalyticsProcessorSourceUri": { + "description": "An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.", + "$ref": "#/definitions/S3Uri" + }, + "RecordPreprocessorSourceUri": { + "description": "An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers", + "$ref": "#/definitions/S3Uri" + }, + "Environment": { + "type": "object", + "additionalProperties": false, + "description": "Sets the environment variables in the Docker container", + "patternProperties": { + "[a-zA-Z_][a-zA-Z0-9_]*": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "[\\S\\s]*": { + "type": "string", + "maxLength": 256 + } + } + } + }, + "required": [ + "ImageUri" + ] + }, + "DataQualityJobInput": { + "type": "object", + "additionalProperties": false, + "description": "The inputs for a monitoring job.", + "properties": { + "EndpointInput": { + "$ref": "#/definitions/EndpointInput" + }, + "BatchTransformInput": { + "$ref": "#/definitions/BatchTransformInput" + } + } + }, + "EndpointInput": { + "type": "object", + "additionalProperties": false, + "description": "The endpoint for a monitoring job.", + "properties": { + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "LocalPath": { + "type": "string", + "description": "Path to the filesystem where the endpoint data is available to the container.", + "pattern": ".*", + "maxLength": 256 + }, + "S3DataDistributionType": { + "type": "string", + "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated", + "enum": [ + "FullyReplicated", + "ShardedByS3Key" + ] + }, + "S3InputMode": { + "type": "string", + "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.", + "enum": [ + "Pipe", + "File" + ] + }, + "ExcludeFeaturesAttribute": { + "type": "string", + "description": "Indexes or names of the features to be excluded from analysis", + "maxLength": 100 + } + }, + "required": [ + "EndpointName", + "LocalPath" + ] + }, + "BatchTransformInput": { + "type": "object", + "additionalProperties": false, + "description": "The batch transform input for a monitoring job.", + "properties": { + "DataCapturedDestinationS3Uri": { + "type": "string", + "description": "A URI that identifies the Amazon S3 storage location where Batch Transform Job captures data.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 512 + }, + "DatasetFormat": { + "$ref": "#/definitions/DatasetFormat" + }, + "LocalPath": { + "type": "string", + "description": "Path to the filesystem where the endpoint data is available to the container.", + "pattern": ".*", + "maxLength": 256 + }, + "S3DataDistributionType": { + "type": "string", + "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated", + "enum": [ + "FullyReplicated", + "ShardedByS3Key" + ] + }, + "S3InputMode": { + "type": "string", + "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.", + "enum": [ + "Pipe", + "File" + ] + }, + "ExcludeFeaturesAttribute": { + "type": "string", + "description": "Indexes or names of the features to be excluded from analysis", + "maxLength": 100 + } + }, + "required": [ + "DataCapturedDestinationS3Uri", + "DatasetFormat", + "LocalPath" + ] + }, + "MonitoringOutputConfig": { + "type": "object", + "additionalProperties": false, + "description": "The output configuration for monitoring jobs.", + "properties": { + "KmsKeyId": { + "type": "string", + "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.", + "pattern": ".*", + "maxLength": 2048 + }, + "MonitoringOutputs": { + "type": "array", + "description": "Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.", + "minLength": 1, + "maxLength": 1, + "items": { + "$ref": "#/definitions/MonitoringOutput" + } + } + }, + "required": [ + "MonitoringOutputs" + ] + }, + "MonitoringOutput": { + "type": "object", + "additionalProperties": false, + "description": "The output object for a monitoring job.", + "properties": { + "S3Output": { + "$ref": "#/definitions/S3Output" + } + }, + "required": [ + "S3Output" + ] + }, + "S3Output": { + "type": "object", + "additionalProperties": false, + "description": "Information about where and how to store the results of a monitoring job.", + "properties": { + "LocalPath": { + "type": "string", + "description": "The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.", + "pattern": ".*", + "maxLength": 256 + }, + "S3UploadMode": { + "type": "string", + "description": "Whether to upload the results of the monitoring job continuously or after the job completes.", + "enum": [ + "Continuous", + "EndOfJob" + ] + }, + "S3Uri": { + "type": "string", + "description": "A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 512 + } + }, + "required": [ + "LocalPath", + "S3Uri" + ] + }, + "MonitoringResources": { + "type": "object", + "additionalProperties": false, + "description": "Identifies the resources to deploy for a monitoring job.", + "properties": { + "ClusterConfig": { + "$ref": "#/definitions/ClusterConfig" + } + }, + "required": [ + "ClusterConfig" + ] + }, + "ClusterConfig": { + "type": "object", + "additionalProperties": false, + "description": "Configuration for the cluster used to run model monitoring jobs.", + "properties": { + "InstanceCount": { + "description": "The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.", + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "InstanceType": { + "description": "The ML compute instance type for the processing job.", + "type": "string" + }, + "VolumeKmsKeyId": { + "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.", + "type": "string", + "minimum": 1, + "maximum": 2048 + }, + "VolumeSizeInGB": { + "description": "The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.", + "type": "integer", + "minimum": 1, + "maximum": 16384 + } + }, + "required": [ + "InstanceCount", + "InstanceType", + "VolumeSizeInGB" + ] + }, + "NetworkConfig": { + "type": "object", + "additionalProperties": false, + "description": "Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.", + "properties": { + "EnableInterContainerTrafficEncryption": { + "description": "Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.", + "type": "boolean" + }, + "EnableNetworkIsolation": { + "description": "Whether to allow inbound and outbound network calls to and from the containers used for the processing job.", + "type": "boolean" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + } + } + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "description": "Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.", + "properties": { + "SecurityGroupIds": { + "description": "The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.", + "type": "array", + "minItems": 1, + "maxItems": 5, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "Subnets": { + "description": "The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.", + "type": "array", + "minItems": 1, + "maxItems": 16, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + } + }, + "required": [ + "SecurityGroupIds", + "Subnets" + ] + }, + "StoppingCondition": { + "type": "object", + "additionalProperties": false, + "description": "Specifies a time limit for how long the monitoring job is allowed to run.", + "properties": { + "MaxRuntimeInSeconds": { + "description": "The maximum runtime allowed in seconds.", + "type": "integer", + "minimum": 1, + "maximum": 86400 + } + }, + "required": [ + "MaxRuntimeInSeconds" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "EndpointName": { + "type": "string", + "description": "The name of the endpoint used to run the monitoring job.", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "maxLength": 63 + }, + "JobDefinitionName": { + "type": "string", + "description": "The name of the job definition.", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "maxLength": 63 + }, + "ProcessingJobName": { + "type": "string", + "description": "The name of a processing job", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "DatasetFormat": { + "description": "The dataset format of the data to monitor", + "type": "object", + "properties": { + "Csv": { + "$ref": "#/definitions/Csv" + }, + "Json": { + "$ref": "#/definitions/Json" + }, + "Parquet": { + "$ref": "#/definitions/Parquet" + } + } + }, + "Csv": { + "description": "The CSV format", + "type": "object", + "properties": { + "Header": { + "description": "A boolean flag indicating if given CSV has header", + "type": "boolean" + } + } + }, + "Json": { + "description": "The Json format", + "type": "object", + "properties": { + "Line": { + "description": "A boolean flag indicating if it is JSON line format", + "type": "boolean" + } + } + }, + "Parquet": { + "description": "A flag indicate if the dataset format is Parquet", + "type": "boolean" + } + }, + "required": [ + "DataQualityAppSpecification", + "DataQualityJobInput", + "DataQualityJobOutputConfig", + "JobResources", + "RoleArn" + ], + "primaryIdentifier": [ + "/properties/JobDefinitionArn" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateDataQualityJobDefinition", + "sagemaker:DescribeDataQualityJobDefinition", + "sagemaker:AddTags", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteDataQualityJobDefinition" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeDataQualityJobDefinition" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListDataQualityJobDefinitions", + "sagemaker:ListTags" + ] + } + }, + "readOnlyProperties": [ + "/properties/CreationTime", + "/properties/JobDefinitionArn" + ], + "createOnlyProperties": [ + "/properties/JobDefinitionName", + "/properties/DataQualityAppSpecification", + "/properties/DataQualityBaselineConfig", + "/properties/DataQualityJobInput", + "/properties/DataQualityJobOutputConfig", + "/properties/JobResources", + "/properties/NetworkConfig", + "/properties/RoleArn", + "/properties/StoppingCondition", + "/properties/Tags", + "/properties/EndpointName" + ], + "writeOnlyProperties": [ + "/properties/EndpointName", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/device.json b/internal/aws/cfn/schemas/aws/sagemaker/device.json new file mode 100644 index 00000000..a92fb5f4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/device.json @@ -0,0 +1,113 @@ +{ + "typeName": "AWS::SageMaker::Device", + "description": "Resource schema for AWS::SageMaker::Device", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker-edge.git", + "definitions": { + "Device": { + "description": "Edge device you want to create", + "type": "object", + "properties": { + "Description": { + "description": "Description of the device", + "type": "string", + "pattern": "[\\S\\s]+", + "minLength": 1, + "maxLength": 40 + }, + "DeviceName": { + "description": "The name of the device", + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "IotThingName": { + "description": "AWS Internet of Things (IoT) object name.", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "maxLength": 128 + } + }, + "required": [ + "DeviceName" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "pattern": "^((?!aws:)[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "DeviceFleetName": { + "description": "The name of the edge device fleet", + "type": "string", + "pattern": "^[a-zA-Z0-9](-*_*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "Device": { + "description": "The Edge Device you want to register against a device fleet", + "$ref": "#/definitions/Device" + }, + "Tags": { + "description": "Associate tags with the resource", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "DeviceFleetName" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Device/DeviceName" + ], + "createOnlyProperties": [ + "/properties/Device/DeviceName" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:RegisterDevices" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeDevice" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateDevices" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeregisterDevices" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/devicefleet.json b/internal/aws/cfn/schemas/aws/sagemaker/devicefleet.json new file mode 100644 index 00000000..623cc07d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/devicefleet.json @@ -0,0 +1,124 @@ +{ + "typeName": "AWS::SageMaker::DeviceFleet", + "description": "Resource schema for AWS::SageMaker::DeviceFleet", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker-edge.git", + "definitions": { + "EdgeOutputConfig": { + "type": "object", + "properties": { + "S3OutputLocation": { + "description": "The Amazon Simple Storage (S3) bucket URI", + "type": "string", + "pattern": "^s3://([^/]+)/?(.*)$", + "maxLength": 1024 + }, + "KmsKeyId": { + "description": "The KMS key id used for encryption on the S3 bucket", + "type": "string", + "pattern": "[a-zA-Z0-9:_-]+", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": [ + "S3OutputLocation" + ], + "additionalProperties": false + }, + "Tag": { + "description": "Key-value pair to associate as a tag for the resource", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "pattern": "^((?!aws:)[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Description": { + "description": "Description for the edge device fleet", + "type": "string", + "pattern": "[\\S\\s]+", + "minLength": 0, + "maxLength": 800 + }, + "DeviceFleetName": { + "description": "The name of the edge device fleet", + "type": "string", + "pattern": "^[a-zA-Z0-9](-*_*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "OutputConfig": { + "description": "S3 bucket and an ecryption key id (if available) to store outputs for the fleet", + "$ref": "#/definitions/EdgeOutputConfig" + }, + "RoleArn": { + "description": "Role associated with the device fleet", + "type": "string", + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$", + "minLength": 20, + "maxLength": 2048 + }, + "Tags": { + "description": "Associate tags with the resource", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "DeviceFleetName", + "OutputConfig", + "RoleArn" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/DeviceFleetName" + ], + "createOnlyProperties": [ + "/properties/DeviceFleetName" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateDeviceFleet", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeDeviceFleet" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateDeviceFleet", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteDeviceFleet" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/domain.json b/internal/aws/cfn/schemas/aws/sagemaker/domain.json new file mode 100644 index 00000000..117ab4e2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/domain.json @@ -0,0 +1,814 @@ +{ + "typeName": "AWS::SageMaker::Domain", + "description": "Resource Type definition for AWS::SageMaker::Domain", + "additionalProperties": false, + "properties": { + "DomainArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the created domain.", + "maxLength": 256, + "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:domain/.*" + }, + "Url": { + "type": "string", + "description": "The URL to the created domain.", + "maxLength": 1024 + }, + "AppNetworkAccessType": { + "type": "string", + "description": "Specifies the VPC used for non-EFS traffic. The default value is PublicInternetOnly.", + "enum": [ + "PublicInternetOnly", + "VpcOnly" + ] + }, + "AuthMode": { + "type": "string", + "description": "The mode of authentication that members use to access the domain.", + "enum": [ + "SSO", + "IAM" + ] + }, + "DefaultUserSettings": { + "$ref": "#/definitions/UserSettings", + "description": "The default user settings." + }, + "DefaultSpaceSettings": { + "$ref": "#/definitions/DefaultSpaceSettings", + "description": "The default space settings." + }, + "DomainName": { + "type": "string", + "description": "A name for the domain.", + "maxLength": 63, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}" + }, + "KmsKeyId": { + "type": "string", + "description": "SageMaker uses AWS KMS to encrypt the EFS volume attached to the domain with an AWS managed customer master key (CMK) by default.", + "maxLength": 2048, + "pattern": ".*" + }, + "SubnetIds": { + "type": "array", + "description": "The VPC subnets that Studio uses for communication.", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 16, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "Tags": { + "type": "array", + "description": "A list of tags to apply to the user profile.", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VpcId": { + "type": "string", + "description": "The ID of the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + }, + "DomainId": { + "type": "string", + "description": "The domain name.", + "maxLength": 63, + "pattern": "^d-(-*[a-z0-9])+" + }, + "HomeEfsFileSystemId": { + "type": "string", + "description": "The ID of the Amazon Elastic File System (EFS) managed by this Domain.", + "maxLength": 32 + }, + "SingleSignOnManagedApplicationInstanceId": { + "type": "string", + "description": "The SSO managed application instance ID.", + "maxLength": 256 + }, + "SingleSignOnApplicationArn": { + "type": "string", + "description": "The ARN of the application managed by SageMaker in IAM Identity Center. This value is only returned for domains created after October 1, 2023.", + "pattern": "^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::[0-9]+:application/[a-zA-Z0-9-_.]+/apl-[a-zA-Z0-9]+$" + }, + "DomainSettings": { + "$ref": "#/definitions/DomainSettings" + }, + "AppSecurityGroupManagement": { + "type": "string", + "description": "The entity that creates and manages the required security groups for inter-app communication in VPCOnly mode. Required when CreateDomain.AppNetworkAccessType is VPCOnly and DomainSettings.RStudioServerProDomainSettings.DomainExecutionRoleArn is provided.", + "enum": [ + "Service", + "Customer" + ] + }, + "SecurityGroupIdForDomainBoundary": { + "type": "string", + "description": "The ID of the security group that authorizes traffic between the RSessionGateway apps and the RStudioServerPro app.", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "definitions": { + "UserSettings": { + "type": "object", + "description": "A collection of settings that apply to users of Amazon SageMaker Studio. These settings are specified when the CreateUserProfile API is called, and as DefaultUserSettings when the CreateDomain API is called.", + "additionalProperties": false, + "properties": { + "ExecutionRole": { + "type": "string", + "description": "The execution role for the user.", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "JupyterServerAppSettings": { + "$ref": "#/definitions/JupyterServerAppSettings", + "description": "The Jupyter server's app settings." + }, + "KernelGatewayAppSettings": { + "$ref": "#/definitions/KernelGatewayAppSettings", + "description": "The kernel gateway app settings." + }, + "RStudioServerProAppSettings": { + "$ref": "#/definitions/RStudioServerProAppSettings" + }, + "RSessionAppSettings": { + "$ref": "#/definitions/RSessionAppSettings" + }, + "JupyterLabAppSettings": { + "$ref": "#/definitions/JupyterLabAppSettings" + }, + "SpaceStorageSettings": { + "$ref": "#/definitions/DefaultSpaceStorageSettings" + }, + "CodeEditorAppSettings": { + "$ref": "#/definitions/CodeEditorAppSettings" + }, + "DefaultLandingUri": { + "type": "string", + "description": "Defines which Amazon SageMaker application users are directed to by default.", + "maxLength": 1023 + }, + "StudioWebPortal": { + "type": "string", + "description": "Indicates whether the Studio experience is available to users. If not, users cannot access Studio.", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "CustomPosixUserConfig": { + "$ref": "#/definitions/CustomPosixUserConfig" + }, + "CustomFileSystemConfigs": { + "type": "array", + "uniqueItems": true, + "minItems": 0, + "maxItems": 2, + "items": { + "$ref": "#/definitions/CustomFileSystemConfig" + } + }, + "SecurityGroups": { + "type": "array", + "description": "The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 0, + "maxItems": 5, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "SharingSettings": { + "$ref": "#/definitions/SharingSettings", + "description": "The sharing settings." + } + }, + "required": [ + "ExecutionRole" + ] + }, + "DefaultSpaceSettings": { + "type": "object", + "description": "A collection of settings that apply to spaces of Amazon SageMaker Studio. These settings are specified when the Create/Update Domain API is called.", + "additionalProperties": false, + "properties": { + "ExecutionRole": { + "type": "string", + "description": "The execution role for the space.", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "JupyterServerAppSettings": { + "$ref": "#/definitions/JupyterServerAppSettings", + "description": "The Jupyter server's app settings." + }, + "KernelGatewayAppSettings": { + "$ref": "#/definitions/KernelGatewayAppSettings", + "description": "The kernel gateway app settings." + }, + "SecurityGroups": { + "type": "array", + "description": "The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 0, + "maxItems": 5, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + } + }, + "required": [ + "ExecutionRole" + ] + }, + "JupyterServerAppSettings": { + "type": "object", + "description": "The JupyterServer app settings.", + "additionalProperties": false, + "properties": { + "DefaultResourceSpec": { + "$ref": "#/definitions/ResourceSpec" + } + } + }, + "ResourceSpec": { + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceType": { + "type": "string", + "description": "The instance type that the image version runs on.", + "enum": [ + "system", + "ml.t3.micro", + "ml.t3.small", + "ml.t3.medium", + "ml.t3.large", + "ml.t3.xlarge", + "ml.t3.2xlarge", + "ml.m5.large", + "ml.m5.xlarge", + "ml.m5.2xlarge", + "ml.m5.4xlarge", + "ml.m5.8xlarge", + "ml.m5.12xlarge", + "ml.m5.16xlarge", + "ml.m5.24xlarge", + "ml.c5.large", + "ml.c5.xlarge", + "ml.c5.2xlarge", + "ml.c5.4xlarge", + "ml.c5.9xlarge", + "ml.c5.12xlarge", + "ml.c5.18xlarge", + "ml.c5.24xlarge", + "ml.p3.2xlarge", + "ml.p3.8xlarge", + "ml.p3.16xlarge", + "ml.g4dn.xlarge", + "ml.g4dn.2xlarge", + "ml.g4dn.4xlarge", + "ml.g4dn.8xlarge", + "ml.g4dn.12xlarge", + "ml.g4dn.16xlarge", + "ml.r5.large", + "ml.r5.xlarge", + "ml.r5.2xlarge", + "ml.r5.4xlarge", + "ml.r5.8xlarge", + "ml.r5.12xlarge", + "ml.r5.16xlarge", + "ml.r5.24xlarge", + "ml.p3dn.24xlarge", + "ml.m5d.large", + "ml.m5d.xlarge", + "ml.m5d.2xlarge", + "ml.m5d.4xlarge", + "ml.m5d.8xlarge", + "ml.m5d.12xlarge", + "ml.m5d.16xlarge", + "ml.m5d.24xlarge", + "ml.g5.xlarge", + "ml.g5.2xlarge", + "ml.g5.4xlarge", + "ml.g5.8xlarge", + "ml.g5.12xlarge", + "ml.g5.16xlarge", + "ml.g5.24xlarge", + "ml.g5.48xlarge", + "ml.p4d.24xlarge", + "ml.p4de.24xlarge", + "ml.geospatial.interactive", + "ml.trn1.2xlarge", + "ml.trn1.32xlarge", + "ml.trn1n.32xlarge" + ] + }, + "SageMakerImageArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the SageMaker image that the image version belongs to.", + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-z0-9]([-.]?[a-z0-9])*$" + }, + "SageMakerImageVersionArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the image version created on the instance.", + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+$" + }, + "LifecycleConfigArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the Lifecycle Configuration to attach to the Resource.", + "maxLength": 256, + "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:studio-lifecycle-config/.*" + } + } + }, + "KernelGatewayAppSettings": { + "type": "object", + "description": "The kernel gateway app settings.", + "additionalProperties": false, + "properties": { + "CustomImages": { + "type": "array", + "description": "A list of custom SageMaker images that are configured to run as a KernelGateway app.", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 0, + "maxItems": 30, + "items": { + "$ref": "#/definitions/CustomImage" + } + }, + "DefaultResourceSpec": { + "$ref": "#/definitions/ResourceSpec", + "description": "The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app." + } + } + }, + "JupyterLabAppSettings": { + "type": "object", + "description": "The JupyterLab app settings.", + "additionalProperties": false, + "properties": { + "DefaultResourceSpec": { + "$ref": "#/definitions/ResourceSpec", + "description": "The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the JupyterLab app." + }, + "LifecycleConfigArns": { + "type": "array", + "description": "A list of LifecycleConfigArns available for use with JupyterLab apps.", + "uniqueItems": false, + "minItems": 0, + "maxItems": 30, + "items": { + "$ref": "#/definitions/StudioLifecycleConfigArn" + } + }, + "CodeRepositories": { + "type": "array", + "description": "A list of CodeRepositories available for use with JupyterLab apps.", + "uniqueItems": false, + "minItems": 0, + "maxItems": 30, + "items": { + "$ref": "#/definitions/CodeRepository" + } + }, + "CustomImages": { + "type": "array", + "description": "A list of custom images for use for JupyterLab apps.", + "uniqueItems": false, + "minItems": 0, + "maxItems": 30, + "items": { + "$ref": "#/definitions/CustomImage" + } + } + } + }, + "CodeRepository": { + "type": "object", + "additionalProperties": false, + "properties": { + "RepositoryUrl": { + "type": "string", + "description": "A CodeRepository (valid URL) to be used within Jupyter's Git extension.", + "maxLength": 256, + "pattern": "^https://([.\\-_a-zA-Z0-9]+/?){3,1016}$" + } + }, + "required": [ + "RepositoryUrl" + ] + }, + "DefaultSpaceStorageSettings": { + "type": "object", + "description": "Default storage settings for a space.", + "additionalProperties": false, + "properties": { + "DefaultEbsStorageSettings": { + "$ref": "#/definitions/DefaultEbsStorageSettings" + } + } + }, + "DefaultEbsStorageSettings": { + "type": "object", + "description": "Properties related to the Amazon Elastic Block Store volume. Must be provided if storage type is Amazon EBS and must not be provided if storage type is not Amazon EBS", + "additionalProperties": false, + "properties": { + "DefaultEbsVolumeSizeInGb": { + "description": "Default size of the Amazon EBS volume in Gb", + "$ref": "#/definitions/SpaceEbsVolumeSizeInGb" + }, + "MaximumEbsVolumeSizeInGb": { + "description": "Maximum size of the Amazon EBS volume in Gb. Must be greater than or equal to the DefaultEbsVolumeSizeInGb.", + "$ref": "#/definitions/SpaceEbsVolumeSizeInGb" + } + }, + "required": [ + "DefaultEbsVolumeSizeInGb", + "MaximumEbsVolumeSizeInGb" + ] + }, + "SpaceEbsVolumeSizeInGb": { + "type": "integer", + "minimum": 5, + "maximum": 16384 + }, + "CodeEditorAppSettings": { + "type": "object", + "description": "The CodeEditor app settings.", + "additionalProperties": false, + "properties": { + "DefaultResourceSpec": { + "$ref": "#/definitions/ResourceSpec", + "description": "The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the CodeEditor app." + }, + "LifecycleConfigArns": { + "type": "array", + "description": "A list of LifecycleConfigArns available for use with CodeEditor apps.", + "uniqueItems": false, + "minItems": 0, + "maxItems": 30, + "items": { + "$ref": "#/definitions/StudioLifecycleConfigArn" + } + } + } + }, + "StudioLifecycleConfigArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the Lifecycle Configuration to attach to the Resource.", + "maxLength": 256, + "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:studio-lifecycle-config/.*" + }, + "CustomPosixUserConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "integer", + "minimum": 10000, + "maximum": 4000000 + }, + "Gid": { + "type": "integer", + "minimum": 1001, + "maximum": 4000000 + } + }, + "required": [ + "Uid", + "Gid" + ] + }, + "CustomFileSystemConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "EFSFileSystemConfig": { + "$ref": "#/definitions/EFSFileSystemConfig" + } + } + }, + "EFSFileSystemConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "FileSystemPath": { + "type": "string", + "pattern": "^\\/\\S*$", + "minLength": 1, + "maxLength": 256 + }, + "FileSystemId": { + "type": "string", + "minLength": 11, + "maxLength": 21, + "pattern": "^(fs-[0-9a-f]{8,})$" + } + }, + "required": [ + "FileSystemId" + ] + }, + "CustomImage": { + "type": "object", + "description": "A custom SageMaker image.", + "additionalProperties": false, + "properties": { + "AppImageConfigName": { + "type": "string", + "description": "The Name of the AppImageConfig.", + "maxLength": 63, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}" + }, + "ImageName": { + "type": "string", + "description": "The name of the CustomImage. Must be unique to your account.", + "maxLength": 63, + "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$" + }, + "ImageVersionNumber": { + "type": "integer", + "description": "The version number of the CustomImage.", + "minimum": 0 + } + }, + "required": [ + "AppImageConfigName", + "ImageName" + ] + }, + "SharingSettings": { + "type": "object", + "description": "Specifies options when sharing an Amazon SageMaker Studio notebook. These settings are specified as part of DefaultUserSettings when the CreateDomain API is called, and as part of UserSettings when the CreateUserProfile API is called.", + "additionalProperties": false, + "properties": { + "NotebookOutputOption": { + "type": "string", + "description": "Whether to include the notebook cell output when sharing the notebook. The default is Disabled.", + "enum": [ + "Allowed", + "Disabled" + ] + }, + "S3KmsKeyId": { + "type": "string", + "description": "When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.", + "maxLength": 2048, + "pattern": ".*" + }, + "S3OutputPath": { + "type": "string", + "description": "When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.", + "maxLength": 1024, + "pattern": "^(https|s3)://([^/]+)/?(.*)$" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "DomainSettings": { + "type": "object", + "description": "A collection of Domain settings.", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "description": "The security groups for the Amazon Virtual Private Cloud that the Domain uses for communication between Domain-level apps and user apps.", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 3, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "RStudioServerProDomainSettings": { + "$ref": "#/definitions/RStudioServerProDomainSettings" + }, + "DockerSettings": { + "$ref": "#/definitions/DockerSettings" + } + } + }, + "DockerSettings": { + "type": "object", + "description": "A collection of settings that are required to start docker-proxy server.", + "additionalProperties": false, + "properties": { + "EnableDockerAccess": { + "type": "string", + "description": "The flag to enable/disable docker-proxy server", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "VpcOnlyTrustedAccounts": { + "type": "array", + "description": "A list of account id's that would be used to pull images from in VpcOnly mode", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 0, + "maxItems": 10, + "items": { + "type": "string", + "maxLength": 12, + "pattern": "^[0-9]$" + } + } + } + }, + "RStudioServerProDomainSettings": { + "type": "object", + "description": "A collection of settings that update the current configuration for the RStudioServerPro Domain-level app.", + "additionalProperties": false, + "properties": { + "DomainExecutionRoleArn": { + "type": "string", + "description": "The ARN of the execution role for the RStudioServerPro Domain-level app.", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "RStudioConnectUrl": { + "type": "string", + "description": "A URL pointing to an RStudio Connect server.", + "pattern": "^(https:|http:|www\\.)\\S*" + }, + "RStudioPackageManagerUrl": { + "type": "string", + "description": "A URL pointing to an RStudio Package Manager server.", + "pattern": "^(https:|http:|www\\.)\\S*" + }, + "DefaultResourceSpec": { + "$ref": "#/definitions/ResourceSpec" + } + }, + "required": [ + "DomainExecutionRoleArn" + ] + }, + "RSessionAppSettings": { + "type": "object", + "description": "A collection of settings that apply to an RSessionGateway app.", + "additionalProperties": false, + "properties": { + "CustomImages": { + "type": "array", + "description": "A list of custom SageMaker images that are configured to run as a KernelGateway app.", + "insertionOrder": false, + "uniqueItems": false, + "minItems": 0, + "maxItems": 30, + "items": { + "$ref": "#/definitions/CustomImage" + } + }, + "DefaultResourceSpec": { + "$ref": "#/definitions/ResourceSpec" + } + } + }, + "RStudioServerProAppSettings": { + "type": "object", + "description": "A collection of settings that configure user interaction with the RStudioServerPro app.", + "additionalProperties": false, + "properties": { + "AccessStatus": { + "type": "string", + "description": "Indicates whether the current user has access to the RStudioServerPro app.", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "UserGroup": { + "type": "string", + "description": "The level of permissions that the user has within the RStudioServerPro app. This value defaults to User. The Admin value allows the user access to the RStudio Administrative Dashboard.", + "enum": [ + "R_STUDIO_ADMIN", + "R_STUDIO_USER" + ] + } + } + } + }, + "required": [ + "AuthMode", + "DefaultUserSettings", + "DomainName", + "SubnetIds", + "VpcId" + ], + "createOnlyProperties": [ + "/properties/AuthMode", + "/properties/DomainName", + "/properties/DomainSettings/RStudioServerProDomainSettings/DefaultResourceSpec", + "/properties/KmsKeyId", + "/properties/VpcId", + "/properties/Tags" + ], + "writeOnlyProperties": [ + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/DomainId" + ], + "readOnlyProperties": [ + "/properties/DomainArn", + "/properties/Url", + "/properties/DomainId", + "/properties/HomeEfsFileSystemId", + "/properties/SecurityGroupIdForDomainBoundary", + "/properties/SingleSignOnManagedApplicationInstanceId", + "/properties/SingleSignOnApplicationArn" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateApp", + "sagemaker:CreateDomain", + "sagemaker:DescribeDomain", + "sagemaker:DescribeImage", + "sagemaker:DescribeImageVersion", + "iam:CreateServiceLinkedRole", + "iam:PassRole", + "efs:CreateFileSystem", + "kms:CreateGrant", + "kms:Decrypt", + "kms:DescribeKey", + "kms:GenerateDataKeyWithoutPlainText" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeDomain" + ] + }, + "update": { + "permissions": [ + "sagemaker:CreateApp", + "sagemaker:UpdateDomain", + "sagemaker:DescribeDomain", + "sagemaker:DescribeImage", + "sagemaker:DescribeImageVersion", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteApp", + "sagemaker:DeleteDomain", + "sagemaker:DescribeDomain" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListDomains" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/endpoint.json b/internal/aws/cfn/schemas/aws/sagemaker/endpoint.json new file mode 100644 index 00000000..6a62abdc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/endpoint.json @@ -0,0 +1,198 @@ +{ + "typeName": "AWS::SageMaker::Endpoint", + "description": "Resource Type definition for AWS::SageMaker::Endpoint", + "additionalProperties": false, + "properties": { + "RetainAllVariantProperties": { + "type": "boolean" + }, + "EndpointName": { + "type": "string" + }, + "ExcludeRetainedVariantProperties": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/VariantProperty" + } + }, + "EndpointConfigName": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "DeploymentConfig": { + "$ref": "#/definitions/DeploymentConfig" + }, + "RetainDeploymentConfig": { + "type": "boolean" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "CapacitySize": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "integer" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type", + "Value" + ] + }, + "RollingUpdatePolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaximumExecutionTimeoutInSeconds": { + "type": "integer" + }, + "MaximumBatchSize": { + "$ref": "#/definitions/CapacitySize" + }, + "WaitIntervalInSeconds": { + "type": "integer" + }, + "RollbackMaximumBatchSize": { + "$ref": "#/definitions/CapacitySize" + } + }, + "required": [ + "MaximumBatchSize", + "WaitIntervalInSeconds" + ] + }, + "Alarm": { + "type": "object", + "additionalProperties": false, + "properties": { + "AlarmName": { + "type": "string" + } + }, + "required": [ + "AlarmName" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "AutoRollbackConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Alarms": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Alarm" + } + } + }, + "required": [ + "Alarms" + ] + }, + "DeploymentConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AutoRollbackConfiguration": { + "$ref": "#/definitions/AutoRollbackConfig" + }, + "RollingUpdatePolicy": { + "$ref": "#/definitions/RollingUpdatePolicy" + }, + "BlueGreenUpdatePolicy": { + "$ref": "#/definitions/BlueGreenUpdatePolicy" + } + } + }, + "BlueGreenUpdatePolicy": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaximumExecutionTimeoutInSeconds": { + "type": "integer" + }, + "TerminationWaitInSeconds": { + "type": "integer" + }, + "TrafficRoutingConfiguration": { + "$ref": "#/definitions/TrafficRoutingConfig" + } + }, + "required": [ + "TrafficRoutingConfiguration" + ] + }, + "TrafficRoutingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "LinearStepSize": { + "$ref": "#/definitions/CapacitySize" + }, + "CanarySize": { + "$ref": "#/definitions/CapacitySize" + }, + "WaitIntervalInSeconds": { + "type": "integer" + } + }, + "required": [ + "Type" + ] + }, + "VariantProperty": { + "type": "object", + "additionalProperties": false, + "properties": { + "VariantPropertyType": { + "type": "string" + } + } + } + }, + "required": [ + "EndpointConfigName" + ], + "createOnlyProperties": [ + "/properties/EndpointName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/endpointconfig.json b/internal/aws/cfn/schemas/aws/sagemaker/endpointconfig.json new file mode 100644 index 00000000..5c5c4dda --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/endpointconfig.json @@ -0,0 +1,476 @@ +{ + "typeName": "AWS::SageMaker::EndpointConfig", + "description": "Resource Type definition for AWS::SageMaker::EndpointConfig", + "additionalProperties": false, + "properties": { + "ShadowProductionVariants": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ProductionVariant" + } + }, + "DataCaptureConfig": { + "$ref": "#/definitions/DataCaptureConfig" + }, + "ExecutionRoleArn": { + "type": "string" + }, + "EnableNetworkIsolation": { + "type": "boolean" + }, + "ProductionVariants": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ProductionVariant" + } + }, + "KmsKeyId": { + "type": "string" + }, + "AsyncInferenceConfig": { + "$ref": "#/definitions/AsyncInferenceConfig" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + }, + "EndpointConfigName": { + "type": "string" + }, + "ExplainerConfig": { + "$ref": "#/definitions/ExplainerConfig" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "ManagedInstanceScaling": { + "type": "object", + "additionalProperties": false, + "properties": { + "Status": { + "type": "string" + }, + "MaxInstanceCount": { + "type": "integer" + }, + "MinInstanceCount": { + "type": "integer" + } + } + }, + "AsyncInferenceNotificationConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "IncludeInferenceResponseIn": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SuccessTopic": { + "type": "string" + }, + "ErrorTopic": { + "type": "string" + } + } + }, + "ClarifyHeader": { + "type": "object", + "additionalProperties": false + }, + "ProductionVariant": { + "type": "object", + "additionalProperties": false, + "properties": { + "ManagedInstanceScaling": { + "$ref": "#/definitions/ManagedInstanceScaling" + }, + "ModelName": { + "type": "string" + }, + "VolumeSizeInGB": { + "type": "integer" + }, + "EnableSSMAccess": { + "type": "boolean" + }, + "VariantName": { + "type": "string" + }, + "InitialInstanceCount": { + "type": "integer" + }, + "RoutingConfig": { + "$ref": "#/definitions/RoutingConfig" + }, + "AcceleratorType": { + "type": "string" + }, + "InitialVariantWeight": { + "type": "number" + }, + "ModelDataDownloadTimeoutInSeconds": { + "type": "integer" + }, + "ContainerStartupHealthCheckTimeoutInSeconds": { + "type": "integer" + }, + "ServerlessConfig": { + "$ref": "#/definitions/ServerlessConfig" + }, + "InstanceType": { + "type": "string" + } + }, + "required": [ + "VariantName" + ] + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Subnets": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "Subnets", + "SecurityGroupIds" + ] + }, + "ClarifyInferenceConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContentTemplate": { + "type": "string" + }, + "LabelHeaders": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ClarifyHeader" + } + }, + "MaxPayloadInMB": { + "type": "integer" + }, + "ProbabilityIndex": { + "type": "integer" + }, + "LabelAttribute": { + "type": "string" + }, + "FeatureTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ClarifyFeatureType" + } + }, + "FeatureHeaders": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ClarifyHeader" + } + }, + "LabelIndex": { + "type": "integer" + }, + "ProbabilityAttribute": { + "type": "string" + }, + "FeaturesAttribute": { + "type": "string" + }, + "MaxRecordCount": { + "type": "integer" + } + } + }, + "ExplainerConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClarifyExplainerConfig": { + "$ref": "#/definitions/ClarifyExplainerConfig" + } + } + }, + "ClarifyFeatureType": { + "type": "object", + "additionalProperties": false + }, + "CaptureContentTypeHeader": { + "type": "object", + "additionalProperties": false, + "properties": { + "CsvContentTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "JsonContentTypes": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "RoutingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "RoutingStrategy": { + "type": "string" + } + } + }, + "ClarifyTextConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Language": { + "type": "string" + }, + "Granularity": { + "type": "string" + } + }, + "required": [ + "Language", + "Granularity" + ] + }, + "DataCaptureConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "CaptureOptions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/CaptureOption" + } + }, + "KmsKeyId": { + "type": "string" + }, + "DestinationS3Uri": { + "type": "string" + }, + "InitialSamplingPercentage": { + "type": "integer" + }, + "CaptureContentTypeHeader": { + "$ref": "#/definitions/CaptureContentTypeHeader" + }, + "EnableCapture": { + "type": "boolean" + } + }, + "required": [ + "CaptureOptions", + "DestinationS3Uri", + "InitialSamplingPercentage" + ] + }, + "AsyncInferenceConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ClientConfig": { + "$ref": "#/definitions/AsyncInferenceClientConfig" + }, + "OutputConfig": { + "$ref": "#/definitions/AsyncInferenceOutputConfig" + } + }, + "required": [ + "OutputConfig" + ] + }, + "AsyncInferenceClientConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxConcurrentInvocationsPerInstance": { + "type": "integer" + } + } + }, + "ClarifyShapBaselineConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "MimeType": { + "type": "string" + }, + "ShapBaseline": { + "type": "string" + }, + "ShapBaselineUri": { + "type": "string" + } + } + }, + "ServerlessConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaxConcurrency": { + "type": "integer" + }, + "MemorySizeInMB": { + "type": "integer" + }, + "ProvisionedConcurrency": { + "type": "integer" + } + }, + "required": [ + "MaxConcurrency", + "MemorySizeInMB" + ] + }, + "ClarifyShapConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TextConfig": { + "$ref": "#/definitions/ClarifyTextConfig" + }, + "UseLogit": { + "type": "boolean" + }, + "Seed": { + "type": "integer" + }, + "ShapBaselineConfig": { + "$ref": "#/definitions/ClarifyShapBaselineConfig" + }, + "NumberOfSamples": { + "type": "integer" + } + }, + "required": [ + "ShapBaselineConfig" + ] + }, + "ClarifyExplainerConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "EnableExplanations": { + "type": "string" + }, + "ShapConfig": { + "$ref": "#/definitions/ClarifyShapConfig" + }, + "InferenceConfig": { + "$ref": "#/definitions/ClarifyInferenceConfig" + } + }, + "required": [ + "ShapConfig" + ] + }, + "CaptureOption": { + "type": "object", + "additionalProperties": false, + "properties": { + "CaptureMode": { + "type": "string" + } + }, + "required": [ + "CaptureMode" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "AsyncInferenceOutputConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "NotificationConfig": { + "$ref": "#/definitions/AsyncInferenceNotificationConfig" + }, + "KmsKeyId": { + "type": "string" + }, + "S3OutputPath": { + "type": "string" + }, + "S3FailurePath": { + "type": "string" + } + } + } + }, + "required": [ + "ProductionVariants" + ], + "createOnlyProperties": [ + "/properties/KmsKeyId", + "/properties/AsyncInferenceConfig", + "/properties/ExecutionRoleArn", + "/properties/ShadowProductionVariants", + "/properties/EnableNetworkIsolation", + "/properties/ProductionVariants", + "/properties/DataCaptureConfig", + "/properties/ExplainerConfig", + "/properties/EndpointConfigName", + "/properties/VpcConfig" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/featuregroup.json b/internal/aws/cfn/schemas/aws/sagemaker/featuregroup.json new file mode 100644 index 00000000..b39ac209 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/featuregroup.json @@ -0,0 +1,359 @@ +{ + "typeName": "AWS::SageMaker::FeatureGroup", + "description": "Resource Type definition for AWS::SageMaker::FeatureGroup", + "additionalProperties": false, + "properties": { + "FeatureGroupName": { + "type": "string", + "description": "The Name of the FeatureGroup.", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}" + }, + "RecordIdentifierFeatureName": { + "type": "string", + "description": "The Record Identifier Feature Name.", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}" + }, + "EventTimeFeatureName": { + "type": "string", + "description": "The Event Time Feature Name.", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}" + }, + "FeatureDefinitions": { + "type": "array", + "description": "An Array of Feature Definition", + "uniqueItems": false, + "insertionOrder": false, + "minItems": 1, + "maxItems": 2500, + "items": { + "$ref": "#/definitions/FeatureDefinition" + } + }, + "OnlineStoreConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityConfig": { + "$ref": "#/definitions/OnlineStoreSecurityConfig" + }, + "EnableOnlineStore": { + "type": "boolean" + }, + "StorageType": { + "$ref": "#/definitions/StorageType" + }, + "TtlDuration": { + "$ref": "#/definitions/TtlDuration" + } + } + }, + "OfflineStoreConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3StorageConfig": { + "$ref": "#/definitions/S3StorageConfig" + }, + "DisableGlueTableCreation": { + "type": "boolean" + }, + "DataCatalogConfig": { + "$ref": "#/definitions/DataCatalogConfig" + }, + "TableFormat": { + "$ref": "#/definitions/TableFormat" + } + }, + "required": [ + "S3StorageConfig" + ] + }, + "ThroughputConfig": { + "$ref": "#/definitions/ThroughputConfig" + }, + "RoleArn": { + "type": "string", + "description": "Role Arn", + "minLength": 20, + "maxLength": 2048, + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" + }, + "Description": { + "type": "string", + "description": "Description about the FeatureGroup.", + "maxLength": 128 + }, + "CreationTime": { + "description": "A timestamp of FeatureGroup creation time.", + "type": "string" + }, + "FeatureGroupStatus": { + "description": "The status of the feature group.", + "type": "string" + }, + "Tags": { + "type": "array", + "description": "An array of key-value pair to apply to this resource.", + "uniqueItems": false, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "FeatureDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "FeatureName": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}" + }, + "FeatureType": { + "type": "string", + "enum": [ + "Integral", + "Fractional", + "String" + ] + } + }, + "required": [ + "FeatureName", + "FeatureType" + ] + }, + "KmsKeyId": { + "type": "string", + "maxLength": 2048 + }, + "StorageType": { + "type": "string", + "enum": [ + "Standard", + "InMemory" + ] + }, + "TtlDuration": { + "type": "object", + "description": "TTL configuration of the feature group", + "additionalProperties": false, + "properties": { + "Unit": { + "$ref": "#/definitions/Unit" + }, + "Value": { + "$ref": "#/definitions/Value" + } + } + }, + "Unit": { + "type": "string", + "description": "Unit of ttl configuration", + "enum": [ + "Seconds", + "Minutes", + "Hours", + "Days", + "Weeks" + ] + }, + "Value": { + "type": "integer", + "description": "Value of ttl configuration" + }, + "OnlineStoreSecurityConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + } + } + }, + "S3StorageConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Uri": { + "type": "string", + "maxLength": 1024, + "pattern": "^(https|s3)://([^/]+)/?(.*)$" + }, + "KmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + } + }, + "required": [ + "S3Uri" + ] + }, + "DataCatalogConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TableName": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\t]*" + }, + "Catalog": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\t]*" + }, + "Database": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\t]*" + } + }, + "required": [ + "TableName", + "Catalog", + "Database" + ] + }, + "TableFormat": { + "type": "string", + "description": "Format for the offline store feature group. Iceberg is the optimal format for feature groups shared between offline and online stores.", + "enum": [ + "Iceberg", + "Glue" + ] + }, + "ThroughputMode": { + "type": "string", + "description": "Throughput mode configuration of the feature group", + "enum": [ + "OnDemand", + "Provisioned" + ] + }, + "ThroughputConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ThroughputMode": { + "$ref": "#/definitions/ThroughputMode" + }, + "ProvisionedReadCapacityUnits": { + "type": "integer", + "description": "For provisioned feature groups with online store enabled, this indicates the read throughput you are billed for and can consume without throttling." + }, + "ProvisionedWriteCapacityUnits": { + "type": "integer", + "description": "For provisioned feature groups, this indicates the write throughput you are billed for and can consume without throttling." + } + }, + "required": [ + "ThroughputMode" + ] + }, + "Tag": { + "type": "object", + "description": "A key-value pair to associate with a resource.", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "FeatureGroupName", + "RecordIdentifierFeatureName", + "EventTimeFeatureName", + "FeatureDefinitions" + ], + "createOnlyProperties": [ + "/properties/FeatureGroupName", + "/properties/RecordIdentifierFeatureName", + "/properties/EventTimeFeatureName", + "/properties/OnlineStoreConfig/SecurityConfig", + "/properties/OnlineStoreConfig/EnableOnlineStore", + "/properties/OnlineStoreConfig/StorageType", + "/properties/OfflineStoreConfig", + "/properties/RoleArn", + "/properties/Description", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/FeatureGroupName" + ], + "readOnlyProperties": [ + "/properties/CreationTime", + "/properties/FeatureGroupStatus" + ], + "handlers": { + "create": { + "permissions": [ + "iam:PassRole", + "kms:CreateGrant", + "kms:DescribeKey", + "glue:CreateTable", + "glue:GetTable", + "glue:CreateDatabase", + "glue:GetDatabase", + "sagemaker:CreateFeatureGroup", + "sagemaker:DescribeFeatureGroup", + "sagemaker:AddTags", + "sagemaker:ListTags" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateFeatureGroup", + "sagemaker:DescribeFeatureGroup", + "sagemaker:AddTags", + "sagemaker:ListTags", + "sagemaker:DeleteTags" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeFeatureGroup", + "sagemaker:ListTags" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteFeatureGroup", + "sagemaker:DescribeFeatureGroup" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListFeatureGroups" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/image.json b/internal/aws/cfn/schemas/aws/sagemaker/image.json new file mode 100644 index 00000000..a21f60c9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/image.json @@ -0,0 +1,152 @@ +{ + "typeName": "AWS::SageMaker::Image", + "description": "Resource Type definition for AWS::SageMaker::Image", + "additionalProperties": false, + "properties": { + "ImageName": { + "$ref": "#/definitions/ImageName" + }, + "ImageArn": { + "$ref": "#/definitions/ImageArn" + }, + "ImageRoleArn": { + "$ref": "#/definitions/ImageRoleArn" + }, + "ImageDisplayName": { + "$ref": "#/definitions/ImageDisplayName" + }, + "ImageDescription": { + "$ref": "#/definitions/ImageDescription" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "ImageName": { + "type": "string", + "description": "The name of the image.", + "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "ImageArn": { + "description": "The Amazon Resource Name (ARN) of the image.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:image\\/[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*$" + }, + "ImageRoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM role that enables Amazon SageMaker to perform tasks on behalf of the customer.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*$" + }, + "ImageDisplayName": { + "type": "string", + "description": "The display name of the image.", + "pattern": "^[A-Za-z0-9 -_]+$", + "minLength": 1, + "maxLength": 128 + }, + "ImageDescription": { + "type": "string", + "description": "A description of the image.", + "pattern": ".+", + "minLength": 1, + "maxLength": 512 + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "required": [ + "ImageName", + "ImageRoleArn" + ], + "primaryIdentifier": [ + "/properties/ImageArn" + ], + "additionalIdentifiers": [ + [ + "/properties/ImageName" + ] + ], + "readOnlyProperties": [ + "/properties/ImageArn" + ], + "createOnlyProperties": [ + "/properties/ImageName" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateImage", + "sagemaker:DescribeImage", + "iam:PassRole", + "sagemaker:AddTags", + "sagemaker:ListTags" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeImage", + "sagemaker:ListTags" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateImage", + "sagemaker:DescribeImage", + "sagemaker:ListTags", + "sagemaker:AddTags", + "sagemaker:DeleteTags", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteImage", + "sagemaker:DescribeImage" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListImages" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/imageversion.json b/internal/aws/cfn/schemas/aws/sagemaker/imageversion.json new file mode 100644 index 00000000..fc61b1a4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/imageversion.json @@ -0,0 +1,229 @@ +{ + "typeName": "AWS::SageMaker::ImageVersion", + "description": "Resource Type definition for AWS::SageMaker::ImageVersion", + "additionalProperties": false, + "properties": { + "ImageName": { + "$ref": "#/definitions/ImageName" + }, + "ImageArn": { + "$ref": "#/definitions/ImageArn" + }, + "ImageVersionArn": { + "$ref": "#/definitions/ImageVersionArn" + }, + "BaseImage": { + "$ref": "#/definitions/BaseImage" + }, + "ContainerImage": { + "$ref": "#/definitions/ContainerImage" + }, + "Version": { + "$ref": "#/definitions/Version" + }, + "Alias": { + "$ref": "#/definitions/Alias" + }, + "Aliases": { + "$ref": "#/definitions/Aliases" + }, + "VendorGuidance": { + "$ref": "#/definitions/VendorGuidance" + }, + "JobType": { + "$ref": "#/definitions/JobType" + }, + "MLFramework": { + "$ref": "#/definitions/MLFramework" + }, + "ProgrammingLang": { + "$ref": "#/definitions/ProgrammingLang" + }, + "Processor": { + "$ref": "#/definitions/Processor" + }, + "Horovod": { + "$ref": "#/definitions/Horovod" + }, + "ReleaseNotes": { + "$ref": "#/definitions/ReleaseNotes" + } + }, + "definitions": { + "ImageName": { + "type": "string", + "description": "The name of the image this version belongs to.", + "pattern": "^[A-Za-z0-9]([-.]?[A-Za-z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "ImageArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the parent image.", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:image\\/[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*$" + }, + "ImageVersionArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the image version.", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws(-[\\w]+)*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:image-version\\/[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*\\/[0-9]+$" + }, + "BaseImage": { + "type": "string", + "description": "The registry path of the container image on which this image version is based.", + "minLength": 1, + "maxLength": 255, + "pattern": ".+" + }, + "ContainerImage": { + "type": "string", + "description": "The registry path of the container image that contains this image version.", + "minLength": 1, + "maxLength": 255, + "pattern": ".+" + }, + "Alias": { + "type": "string", + "description": "The alias of the image version.", + "minLength": 1, + "maxLength": 128, + "pattern": "(?!^[.-])^([a-zA-Z0-9-_.]+)$" + }, + "Aliases": { + "type": "array", + "description": "List of aliases for the image version.", + "items": { + "$ref": "#/definitions/Alias" + } + }, + "Version": { + "type": "integer", + "description": "The version number of the image version.", + "minimum": 1 + }, + "VendorGuidance": { + "type": "string", + "description": "The availability of the image version specified by the maintainer.", + "enum": [ + "NOT_PROVIDED", + "STABLE", + "TO_BE_ARCHIVED", + "ARCHIVED" + ] + }, + "JobType": { + "type": "string", + "description": "Indicates SageMaker job type compatibility.", + "enum": [ + "TRAINING", + "INFERENCE", + "NOTEBOOK_KERNEL" + ] + }, + "MLFramework": { + "type": "string", + "description": "The machine learning framework vended in the image version.", + "pattern": "^[a-zA-Z]+ ?\\d+\\.\\d+(\\.\\d+)?$", + "minLength": 1, + "maxLength": 128 + }, + "ProgrammingLang": { + "type": "string", + "description": "The supported programming language and its version.", + "pattern": "^[a-zA-Z]+ ?\\d+\\.\\d+(\\.\\d+)?$", + "minLength": 1, + "maxLength": 128 + }, + "Processor": { + "type": "string", + "description": "Indicates CPU or GPU compatibility.", + "enum": [ + "CPU", + "GPU" + ] + }, + "Horovod": { + "type": "boolean", + "description": "Indicates Horovod compatibility." + }, + "ReleaseNotes": { + "type": "string", + "description": "The maintainer description of the image version.", + "pattern": ".*", + "minLength": 1, + "maxLength": 255 + } + }, + "required": [ + "ImageName", + "BaseImage" + ], + "primaryIdentifier": [ + "/properties/ImageVersionArn" + ], + "readOnlyProperties": [ + "/properties/ImageVersionArn", + "/properties/ImageArn", + "/properties/Version", + "/properties/ContainerImage" + ], + "createOnlyProperties": [ + "/properties/ImageName", + "/properties/BaseImage" + ], + "writeOnlyProperties": [ + "/properties/Aliases", + "/properties/Alias" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateImageVersion", + "sagemaker:DescribeImageVersion" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeImageVersion" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateImageVersion", + "sagemaker:DescribeImageVersion", + "sagemaker:ListAliases" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteImageVersion", + "sagemaker:DescribeImageVersion" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListImageVersions" + ], + "handlerSchema": { + "properties": { + "ImageName": { + "$ref": "resource-schema.json#/properties/ImageName" + } + }, + "required": [ + "ImageName" + ] + } + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker" +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/inferenceexperiment.json b/internal/aws/cfn/schemas/aws/sagemaker/inferenceexperiment.json new file mode 100644 index 00000000..53a36fa6 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/inferenceexperiment.json @@ -0,0 +1,440 @@ +{ + "typeName": "AWS::SageMaker::InferenceExperiment", + "description": "Resource Type definition for AWS::SageMaker::InferenceExperiment", + "additionalProperties": false, + "properties": { + "Arn": { + "description": "The Amazon Resource Name (ARN) of the inference experiment.", + "type": "string", + "pattern": "^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:inference-experiment/[a-zA-Z_0-9+=,.@\\-_/]+$", + "minLength": 20, + "maxLength": 256 + }, + "Name": { + "description": "The name for the inference experiment.", + "type": "string", + "minLength": 1, + "maxLength": 120 + }, + "Type": { + "description": "The type of the inference experiment that you want to run.", + "type": "string", + "enum": [ + "ShadowMode" + ] + }, + "Description": { + "description": "The description of the inference experiment.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 1024 + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to access model artifacts and container images, and manage Amazon SageMaker Inference endpoints for model deployment.", + "type": "string", + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$", + "minLength": 20, + "maxLength": 2048 + }, + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "EndpointMetadata": { + "$ref": "#/definitions/EndpointMetadata" + }, + "Schedule": { + "$ref": "#/definitions/InferenceExperimentSchedule" + }, + "KmsKey": { + "type": "string", + "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance that hosts the endpoint.", + "pattern": ".*", + "maxLength": 2048 + }, + "DataStorageConfig": { + "$ref": "#/definitions/DataStorageConfig" + }, + "ModelVariants": { + "type": "array", + "description": "An array of ModelVariantConfig objects. Each ModelVariantConfig object in the array describes the infrastructure configuration for the corresponding variant.", + "maxItems": 2, + "items": { + "$ref": "#/definitions/ModelVariantConfig" + } + }, + "ShadowModeConfig": { + "$ref": "#/definitions/ShadowModeConfig" + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreationTime": { + "description": "The timestamp at which you created the inference experiment.", + "type": "string" + }, + "LastModifiedTime": { + "description": "The timestamp at which you last modified the inference experiment.", + "type": "string" + }, + "Status": { + "description": "The status of the inference experiment.", + "type": "string", + "enum": [ + "Creating", + "Created", + "Updating", + "Starting", + "Stopping", + "Running", + "Completed", + "Cancelled" + ] + }, + "StatusReason": { + "description": "The error message or client-specified reason from the StopInferenceExperiment API, that explains the status of the inference experiment.", + "type": "string", + "pattern": ".*", + "minLength": 1, + "maxLength": 1024 + }, + "DesiredState": { + "description": "The desired state of the experiment after starting or stopping operation.", + "type": "string", + "enum": [ + "Running", + "Completed", + "Cancelled" + ] + } + }, + "definitions": { + "EndpointName": { + "description": "The name of the endpoint used to run the inference experiment.", + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "maxLength": 63 + }, + "EndpointMetadata": { + "description": "The metadata of the endpoint on which the inference experiment ran.", + "type": "object", + "additionalProperties": false, + "properties": { + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "EndpointConfigName": { + "description": "The name of the endpoint configuration.", + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "maxLength": 63 + }, + "EndpointStatus": { + "description": "The status of the endpoint. For possible values of the status of an endpoint.", + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "enum": [ + "Creating", + "Updating", + "SystemUpdating", + "RollingBack", + "InService", + "OutOfService", + "Deleting", + "Failed" + ] + } + }, + "required": [ + "EndpointName" + ] + }, + "CaptureContentTypeHeader": { + "description": "Configuration specifying how to treat different headers. If no headers are specified SageMaker will by default base64 encode when capturing the data.", + "type": "object", + "additionalProperties": false, + "properties": { + "CsvContentTypes": { + "description": "The list of all content type headers that SageMaker will treat as CSV and capture accordingly.", + "type": "array", + "minItems": 1, + "maxItems": 10, + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*/[a-zA-Z0-9](-*[a-zA-Z0-9.])*", + "minLength": 1, + "maxLength": 256 + } + }, + "JsonContentTypes": { + "description": "The list of all content type headers that SageMaker will treat as JSON and capture accordingly.", + "type": "array", + "minItems": 1, + "maxItems": 10, + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*/[a-zA-Z0-9](-*[a-zA-Z0-9.])*", + "minLength": 1, + "maxLength": 256 + } + } + } + }, + "DataStorageConfig": { + "description": "The Amazon S3 location and configuration for storing inference request and response data.", + "type": "object", + "additionalProperties": false, + "properties": { + "Destination": { + "description": "The Amazon S3 bucket where the inference request and response data is stored.", + "type": "string", + "pattern": "^(https|s3)://([^/])/?(.*)$", + "maxLength": 512 + }, + "KmsKey": { + "description": "The AWS Key Management Service key that Amazon SageMaker uses to encrypt captured data at rest using Amazon S3 server-side encryption.", + "type": "string", + "pattern": ".*", + "maxLength": 2048 + }, + "ContentType": { + "$ref": "#/definitions/CaptureContentTypeHeader" + } + }, + "required": [ + "Destination" + ] + }, + "InferenceExperimentSchedule": { + "description": "The duration for which you want the inference experiment to run.", + "type": "object", + "additionalProperties": false, + "properties": { + "StartTime": { + "description": "The timestamp at which the inference experiment started or will start.", + "type": "string" + }, + "EndTime": { + "description": "The timestamp at which the inference experiment ended or will end.", + "type": "string" + } + } + }, + "RealTimeInferenceConfig": { + "description": "The infrastructure configuration for deploying the model to a real-time inference endpoint.", + "type": "object", + "additionalProperties": false, + "properties": { + "InstanceType": { + "description": "The instance type the model is deployed to.", + "type": "string" + }, + "InstanceCount": { + "description": "The number of instances of the type specified by InstanceType.", + "type": "integer" + } + }, + "required": [ + "InstanceType", + "InstanceCount" + ] + }, + "ModelInfrastructureConfig": { + "description": "The configuration for the infrastructure that the model will be deployed to.", + "type": "object", + "additionalProperties": false, + "properties": { + "InfrastructureType": { + "description": "The type of the inference experiment that you want to run.", + "type": "string", + "enum": [ + "RealTimeInference" + ] + }, + "RealTimeInferenceConfig": { + "$ref": "#/definitions/RealTimeInferenceConfig" + } + }, + "required": [ + "InfrastructureType", + "RealTimeInferenceConfig" + ] + }, + "ModelVariantConfig": { + "description": "Contains information about the deployment options of a model.", + "type": "object", + "additionalProperties": false, + "properties": { + "ModelName": { + "description": "The name of the Amazon SageMaker Model entity.", + "type": "string", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "maxLength": 63 + }, + "VariantName": { + "description": "The name of the variant.", + "type": "string", + "pattern": "^[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?", + "maxLength": 63 + }, + "InfrastructureConfig": { + "$ref": "#/definitions/ModelInfrastructureConfig" + } + }, + "required": [ + "ModelName", + "VariantName", + "InfrastructureConfig" + ] + }, + "ShadowModelVariantConfig": { + "description": "The name and sampling percentage of a shadow variant.", + "type": "object", + "additionalProperties": false, + "properties": { + "ShadowModelVariantName": { + "description": "The name of the shadow variant.", + "type": "string", + "pattern": "^[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?", + "maxLength": 63 + }, + "SamplingPercentage": { + "description": "The percentage of inference requests that Amazon SageMaker replicates from the production variant to the shadow variant.", + "type": "integer", + "maximum": 100 + } + }, + "required": [ + "ShadowModelVariantName", + "SamplingPercentage" + ] + }, + "ShadowModeConfig": { + "description": "The configuration of ShadowMode inference experiment type. Use this field to specify a production variant which takes all the inference requests, and a shadow variant to which Amazon SageMaker replicates a percentage of the inference requests. For the shadow variant also specify the percentage of requests that Amazon SageMaker replicates.", + "type": "object", + "additionalProperties": false, + "properties": { + "SourceModelVariantName": { + "description": "The name of the production variant, which takes all the inference requests.", + "type": "string", + "pattern": "^[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?", + "maxLength": 63 + }, + "ShadowModelVariants": { + "description": "List of shadow variant configurations.", + "type": "array", + "minItems": 1, + "maxItems": 1, + "items": { + "$ref": "#/definitions/ShadowModelVariantConfig" + } + } + }, + "required": [ + "SourceModelVariantName", + "ShadowModelVariants" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "required": [ + "Name", + "Type", + "RoleArn", + "EndpointName", + "ModelVariants" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateInferenceExperiment", + "sagemaker:DescribeInferenceExperiment", + "sagemaker:AddTags", + "sagemaker:ListTags", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteInferenceExperiment", + "sagemaker:DescribeInferenceExperiment", + "sagemaker:StopInferenceExperiment", + "sagemaker:ListTags" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListInferenceExperiments" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeInferenceExperiment", + "sagemaker:ListTags" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateInferenceExperiment", + "sagemaker:StartInferenceExperiment", + "sagemaker:StopInferenceExperiment", + "sagemaker:DescribeInferenceExperiment", + "sagemaker:AddTags", + "sagemaker:DeleteTags", + "sagemaker:ListTags" + ] + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreationTime", + "/properties/LastModifiedTime", + "/properties/EndpointMetadata", + "/properties/Status" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type", + "/properties/RoleArn", + "/properties/EndpointName", + "/properties/KmsKey" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/model.json b/internal/aws/cfn/schemas/aws/sagemaker/model.json new file mode 100644 index 00000000..4fd3bbe0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/model.json @@ -0,0 +1,230 @@ +{ + "typeName": "AWS::SageMaker::Model", + "description": "Resource Type definition for AWS::SageMaker::Model", + "additionalProperties": false, + "properties": { + "ExecutionRoleArn": { + "type": "string" + }, + "EnableNetworkIsolation": { + "type": "boolean" + }, + "PrimaryContainer": { + "$ref": "#/definitions/ContainerDefinition" + }, + "ModelName": { + "type": "string" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + }, + "Containers": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ContainerDefinition" + } + }, + "InferenceExecutionConfig": { + "$ref": "#/definitions/InferenceExecutionConfig" + }, + "Id": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "ImageConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "RepositoryAuthConfig": { + "$ref": "#/definitions/RepositoryAuthConfig" + }, + "RepositoryAccessMode": { + "type": "string" + } + }, + "required": [ + "RepositoryAccessMode" + ] + }, + "ModelAccessConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "AcceptEula": { + "type": "boolean" + } + }, + "required": [ + "AcceptEula" + ] + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Subnets": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "Subnets", + "SecurityGroupIds" + ] + }, + "RepositoryAuthConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "RepositoryCredentialsProviderArn": { + "type": "string" + } + }, + "required": [ + "RepositoryCredentialsProviderArn" + ] + }, + "S3DataSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "ModelAccessConfig": { + "$ref": "#/definitions/ModelAccessConfig" + }, + "S3DataType": { + "type": "string" + }, + "CompressionType": { + "type": "string" + }, + "S3Uri": { + "type": "string" + } + }, + "required": [ + "S3Uri", + "S3DataType", + "CompressionType" + ] + }, + "ContainerDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "ImageConfig": { + "$ref": "#/definitions/ImageConfig" + }, + "InferenceSpecificationName": { + "type": "string" + }, + "ContainerHostname": { + "type": "string" + }, + "ModelPackageName": { + "type": "string" + }, + "Mode": { + "type": "string" + }, + "Environment": { + "type": "object" + }, + "ModelDataUrl": { + "type": "string" + }, + "Image": { + "type": "string" + }, + "ModelDataSource": { + "$ref": "#/definitions/ModelDataSource" + }, + "MultiModelConfig": { + "$ref": "#/definitions/MultiModelConfig" + } + } + }, + "InferenceExecutionConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Mode": { + "type": "string" + } + }, + "required": [ + "Mode" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ModelDataSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3DataSource": { + "$ref": "#/definitions/S3DataSource" + } + }, + "required": [ + "S3DataSource" + ] + }, + "MultiModelConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "ModelCacheSetting": { + "type": "string" + } + } + } + }, + "createOnlyProperties": [ + "/properties/ExecutionRoleArn", + "/properties/EnableNetworkIsolation", + "/properties/InferenceExecutionConfig", + "/properties/PrimaryContainer", + "/properties/ModelName", + "/properties/VpcConfig", + "/properties/Containers" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/modelbiasjobdefinition.json b/internal/aws/cfn/schemas/aws/sagemaker/modelbiasjobdefinition.json new file mode 100644 index 00000000..713d9bc4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/modelbiasjobdefinition.json @@ -0,0 +1,627 @@ +{ + "typeName": "AWS::SageMaker::ModelBiasJobDefinition", + "description": "Resource Type definition for AWS::SageMaker::ModelBiasJobDefinition", + "additionalProperties": false, + "properties": { + "JobDefinitionArn": { + "description": "The Amazon Resource Name (ARN) of job definition.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "JobDefinitionName": { + "$ref": "#/definitions/JobDefinitionName" + }, + "ModelBiasBaselineConfig": { + "$ref": "#/definitions/ModelBiasBaselineConfig" + }, + "ModelBiasAppSpecification": { + "$ref": "#/definitions/ModelBiasAppSpecification" + }, + "ModelBiasJobInput": { + "$ref": "#/definitions/ModelBiasJobInput" + }, + "ModelBiasJobOutputConfig": { + "$ref": "#/definitions/MonitoringOutputConfig" + }, + "JobResources": { + "$ref": "#/definitions/MonitoringResources" + }, + "NetworkConfig": { + "$ref": "#/definitions/NetworkConfig" + }, + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.", + "type": "string", + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$", + "minLength": 20, + "maxLength": 2048 + }, + "StoppingCondition": { + "$ref": "#/definitions/StoppingCondition" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreationTime": { + "description": "The time at which the job definition was created.", + "type": "string" + } + }, + "definitions": { + "ModelBiasBaselineConfig": { + "type": "object", + "additionalProperties": false, + "description": "Baseline configuration used to validate that the data conforms to the specified constraints and statistics.", + "properties": { + "BaseliningJobName": { + "$ref": "#/definitions/ProcessingJobName" + }, + "ConstraintsResource": { + "$ref": "#/definitions/ConstraintsResource" + } + } + }, + "ConstraintsResource": { + "type": "object", + "additionalProperties": false, + "description": "The baseline constraints resource for a monitoring job.", + "properties": { + "S3Uri": { + "description": "The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.", + "$ref": "#/definitions/S3Uri" + } + } + }, + "S3Uri": { + "type": "string", + "description": "The Amazon S3 URI.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 1024 + }, + "ModelBiasAppSpecification": { + "type": "object", + "additionalProperties": false, + "description": "Container image configuration object for the monitoring job.", + "properties": { + "ImageUri": { + "type": "string", + "description": "The container image to be run by the monitoring job.", + "pattern": ".*", + "maxLength": 255 + }, + "ConfigUri": { + "description": "The S3 URI to an analysis configuration file", + "$ref": "#/definitions/S3Uri" + }, + "Environment": { + "type": "object", + "additionalProperties": false, + "description": "Sets the environment variables in the Docker container", + "patternProperties": { + "[a-zA-Z_][a-zA-Z0-9_]*": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "[\\S\\s]*": { + "type": "string", + "maxLength": 256 + } + } + } + }, + "required": [ + "ImageUri", + "ConfigUri" + ] + }, + "ModelBiasJobInput": { + "type": "object", + "additionalProperties": false, + "description": "The inputs for a monitoring job.", + "properties": { + "EndpointInput": { + "$ref": "#/definitions/EndpointInput" + }, + "BatchTransformInput": { + "$ref": "#/definitions/BatchTransformInput" + }, + "GroundTruthS3Input": { + "$ref": "#/definitions/MonitoringGroundTruthS3Input" + } + }, + "required": [ + "GroundTruthS3Input" + ] + }, + "EndpointInput": { + "type": "object", + "additionalProperties": false, + "description": "The endpoint for a monitoring job.", + "properties": { + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "LocalPath": { + "type": "string", + "description": "Path to the filesystem where the endpoint data is available to the container.", + "pattern": ".*", + "maxLength": 256 + }, + "S3DataDistributionType": { + "type": "string", + "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated", + "enum": [ + "FullyReplicated", + "ShardedByS3Key" + ] + }, + "S3InputMode": { + "type": "string", + "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.", + "enum": [ + "Pipe", + "File" + ] + }, + "StartTimeOffset": { + "description": "Monitoring start time offset, e.g. -PT1H", + "$ref": "#/definitions/MonitoringTimeOffsetString" + }, + "EndTimeOffset": { + "description": "Monitoring end time offset, e.g. PT0H", + "$ref": "#/definitions/MonitoringTimeOffsetString" + }, + "FeaturesAttribute": { + "type": "string", + "description": "JSONpath to locate features in JSONlines dataset", + "maxLength": 256 + }, + "InferenceAttribute": { + "type": "string", + "description": "Index or JSONpath to locate predicted label(s)", + "maxLength": 256 + }, + "ProbabilityAttribute": { + "type": "string", + "description": "Index or JSONpath to locate probabilities", + "maxLength": 256 + }, + "ProbabilityThresholdAttribute": { + "type": "number", + "format": "double" + } + }, + "required": [ + "EndpointName", + "LocalPath" + ] + }, + "BatchTransformInput": { + "type": "object", + "additionalProperties": false, + "description": "The batch transform input for a monitoring job.", + "properties": { + "DataCapturedDestinationS3Uri": { + "type": "string", + "description": "A URI that identifies the Amazon S3 storage location where Batch Transform Job captures data.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 512 + }, + "DatasetFormat": { + "$ref": "#/definitions/DatasetFormat" + }, + "LocalPath": { + "type": "string", + "description": "Path to the filesystem where the endpoint data is available to the container.", + "pattern": ".*", + "maxLength": 256 + }, + "S3DataDistributionType": { + "type": "string", + "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated", + "enum": [ + "FullyReplicated", + "ShardedByS3Key" + ] + }, + "S3InputMode": { + "type": "string", + "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.", + "enum": [ + "Pipe", + "File" + ] + }, + "StartTimeOffset": { + "description": "Monitoring start time offset, e.g. -PT1H", + "$ref": "#/definitions/MonitoringTimeOffsetString" + }, + "EndTimeOffset": { + "description": "Monitoring end time offset, e.g. PT0H", + "$ref": "#/definitions/MonitoringTimeOffsetString" + }, + "FeaturesAttribute": { + "type": "string", + "description": "JSONpath to locate features in JSONlines dataset", + "maxLength": 256 + }, + "InferenceAttribute": { + "type": "string", + "description": "Index or JSONpath to locate predicted label(s)", + "maxLength": 256 + }, + "ProbabilityAttribute": { + "type": "string", + "description": "Index or JSONpath to locate probabilities", + "maxLength": 256 + }, + "ProbabilityThresholdAttribute": { + "type": "number", + "format": "double" + } + }, + "required": [ + "DataCapturedDestinationS3Uri", + "DatasetFormat", + "LocalPath" + ] + }, + "MonitoringOutputConfig": { + "type": "object", + "additionalProperties": false, + "description": "The output configuration for monitoring jobs.", + "properties": { + "KmsKeyId": { + "type": "string", + "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.", + "pattern": ".*", + "maxLength": 2048 + }, + "MonitoringOutputs": { + "type": "array", + "description": "Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.", + "minLength": 1, + "maxLength": 1, + "items": { + "$ref": "#/definitions/MonitoringOutput" + } + } + }, + "required": [ + "MonitoringOutputs" + ] + }, + "MonitoringOutput": { + "type": "object", + "additionalProperties": false, + "description": "The output object for a monitoring job.", + "properties": { + "S3Output": { + "$ref": "#/definitions/S3Output" + } + }, + "required": [ + "S3Output" + ] + }, + "S3Output": { + "type": "object", + "additionalProperties": false, + "description": "Information about where and how to store the results of a monitoring job.", + "properties": { + "LocalPath": { + "type": "string", + "description": "The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.", + "pattern": ".*", + "maxLength": 256 + }, + "S3UploadMode": { + "type": "string", + "description": "Whether to upload the results of the monitoring job continuously or after the job completes.", + "enum": [ + "Continuous", + "EndOfJob" + ] + }, + "S3Uri": { + "type": "string", + "description": "A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 512 + } + }, + "required": [ + "LocalPath", + "S3Uri" + ] + }, + "MonitoringResources": { + "type": "object", + "additionalProperties": false, + "description": "Identifies the resources to deploy for a monitoring job.", + "properties": { + "ClusterConfig": { + "$ref": "#/definitions/ClusterConfig" + } + }, + "required": [ + "ClusterConfig" + ] + }, + "ClusterConfig": { + "type": "object", + "additionalProperties": false, + "description": "Configuration for the cluster used to run model monitoring jobs.", + "properties": { + "InstanceCount": { + "description": "The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.", + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "InstanceType": { + "description": "The ML compute instance type for the processing job.", + "type": "string" + }, + "VolumeKmsKeyId": { + "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.", + "type": "string", + "minimum": 1, + "maximum": 2048 + }, + "VolumeSizeInGB": { + "description": "The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.", + "type": "integer", + "minimum": 1, + "maximum": 16384 + } + }, + "required": [ + "InstanceCount", + "InstanceType", + "VolumeSizeInGB" + ] + }, + "NetworkConfig": { + "type": "object", + "additionalProperties": false, + "description": "Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.", + "properties": { + "EnableInterContainerTrafficEncryption": { + "description": "Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.", + "type": "boolean" + }, + "EnableNetworkIsolation": { + "description": "Whether to allow inbound and outbound network calls to and from the containers used for the processing job.", + "type": "boolean" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + } + } + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "description": "Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.", + "properties": { + "SecurityGroupIds": { + "description": "The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.", + "type": "array", + "minItems": 1, + "maxItems": 5, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "Subnets": { + "description": "The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.", + "type": "array", + "minItems": 1, + "maxItems": 16, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + } + }, + "required": [ + "SecurityGroupIds", + "Subnets" + ] + }, + "StoppingCondition": { + "type": "object", + "additionalProperties": false, + "description": "Specifies a time limit for how long the monitoring job is allowed to run.", + "properties": { + "MaxRuntimeInSeconds": { + "description": "The maximum runtime allowed in seconds.", + "type": "integer", + "minimum": 1, + "maximum": 86400 + } + }, + "required": [ + "MaxRuntimeInSeconds" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "EndpointName": { + "type": "string", + "description": "The name of the endpoint used to run the monitoring job.", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "maxLength": 63 + }, + "JobDefinitionName": { + "type": "string", + "description": "The name of the job definition.", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "maxLength": 63 + }, + "ProcessingJobName": { + "type": "string", + "description": "The name of a processing job", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "MonitoringTimeOffsetString": { + "type": "string", + "description": "The time offsets in ISO duration format", + "pattern": "^.?P.*", + "minLength": 1, + "maxLength": 15 + }, + "MonitoringGroundTruthS3Input": { + "type": "object", + "additionalProperties": false, + "description": "Ground truth input provided in S3 ", + "properties": { + "S3Uri": { + "type": "string", + "description": "A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 512 + } + }, + "required": [ + "S3Uri" + ] + }, + "DatasetFormat": { + "description": "The dataset format of the data to monitor", + "type": "object", + "properties": { + "Csv": { + "$ref": "#/definitions/Csv" + }, + "Json": { + "$ref": "#/definitions/Json" + }, + "Parquet": { + "$ref": "#/definitions/Parquet" + } + } + }, + "Csv": { + "description": "The CSV format", + "type": "object", + "properties": { + "Header": { + "description": "A boolean flag indicating if given CSV has header", + "type": "boolean" + } + } + }, + "Json": { + "description": "The Json format", + "type": "object", + "properties": { + "Line": { + "description": "A boolean flag indicating if it is JSON line format", + "type": "boolean" + } + } + }, + "Parquet": { + "description": "A flag indicate if the dataset format is Parquet", + "type": "boolean" + } + }, + "required": [ + "ModelBiasAppSpecification", + "ModelBiasJobInput", + "ModelBiasJobOutputConfig", + "JobResources", + "RoleArn" + ], + "primaryIdentifier": [ + "/properties/JobDefinitionArn" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateModelBiasJobDefinition", + "sagemaker:DescribeModelBiasJobDefinition", + "iam:PassRole", + "sagemaker:AddTags" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteModelBiasJobDefinition" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeModelBiasJobDefinition" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListModelBiasJobDefinitions", + "sagemaker:ListTags" + ] + } + }, + "readOnlyProperties": [ + "/properties/CreationTime", + "/properties/JobDefinitionArn" + ], + "createOnlyProperties": [ + "/properties/JobDefinitionName", + "/properties/ModelBiasAppSpecification", + "/properties/ModelBiasBaselineConfig", + "/properties/ModelBiasJobInput", + "/properties/ModelBiasJobOutputConfig", + "/properties/JobResources", + "/properties/NetworkConfig", + "/properties/RoleArn", + "/properties/StoppingCondition", + "/properties/Tags", + "/properties/EndpointName" + ], + "writeOnlyProperties": [ + "/properties/EndpointName", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/modelcard.json b/internal/aws/cfn/schemas/aws/sagemaker/modelcard.json new file mode 100644 index 00000000..acf7ab0f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/modelcard.json @@ -0,0 +1,1028 @@ +{ + "typeName": "AWS::SageMaker::ModelCard", + "description": "Resource Type definition for AWS::SageMaker::ModelCard.", + "additionalProperties": false, + "properties": { + "ModelCardArn": { + "description": "The Amazon Resource Name (ARN) of the successfully created model card.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-card/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$" + }, + "ModelCardVersion": { + "description": "A version of the model card.", + "type": "integer", + "minimum": 1 + }, + "ModelCardName": { + "description": "The unique name of the model card.", + "type": "string", + "maxLength": 63, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$" + }, + "SecurityConfig": { + "$ref": "#/definitions/SecurityConfig" + }, + "ModelCardStatus": { + "description": "The approval status of the model card within your organization. Different organizations might have different criteria for model card review and approval.", + "type": "string", + "enum": [ + "Draft", + "PendingReview", + "Approved", + "Archived" + ] + }, + "Content": { + "$ref": "#/definitions/Content" + }, + "CreationTime": { + "description": "The date and time the model card was created.", + "type": "string" + }, + "CreatedBy": { + "description": "Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.", + "$ref": "#/definitions/UserContext" + }, + "LastModifiedTime": { + "description": "The date and time the model card was last modified.", + "type": "string" + }, + "LastModifiedBy": { + "description": "Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.", + "$ref": "#/definitions/UserContext" + }, + "ModelCardProcessingStatus": { + "description": "The processing status of model card deletion. The ModelCardProcessingStatus updates throughout the different deletion steps.", + "type": "string", + "default": "UnsetValue", + "enum": [ + "UnsetValue", + "DeleteInProgress", + "DeletePending", + "ContentDeleted", + "ExportJobsDeleted", + "DeleteCompleted", + "DeleteFailed" + ] + }, + "Tags": { + "type": "array", + "minItems": 1, + "maxItems": 50, + "description": "Key-value pairs used to manage metadata for model cards.", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "SecurityConfig": { + "type": "object", + "description": "An optional Key Management Service key to encrypt, decrypt, and re-encrypt model card content for regulated workloads with highly sensitive data.\n\n", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "type": "string", + "description": "A Key Management Service key ID to use for encrypting a model card.", + "maxLength": 2048, + "pattern": ".*" + } + } + }, + "UserContext": { + "description": "Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.", + "type": "object", + "additionalProperties": false, + "properties": { + "UserProfileArn": { + "description": "The Amazon Resource Name (ARN) of the user's profile.", + "type": "string", + "default": "UnsetValue" + }, + "UserProfileName": { + "description": "The name of the user's profile.", + "type": "string", + "default": "UnsetValue" + }, + "DomainId": { + "description": "The domain associated with the user.", + "type": "string", + "default": "UnsetValue" + } + } + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The tag key. Tag keys must be unique per resource.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The tag value.", + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + }, + "Content": { + "type": "object", + "description": "The content of the model card.", + "additionalProperties": false, + "properties": { + "ModelOverview": { + "$ref": "#/definitions/ModelOverview" + }, + "ModelPackageDetails": { + "$ref": "#/definitions/ModelPackageDetails" + }, + "IntendedUses": { + "$ref": "#/definitions/IntendedUses" + }, + "BusinessDetails": { + "$ref": "#/definitions/BusinessDetails" + }, + "TrainingDetails": { + "$ref": "#/definitions/TrainingDetails" + }, + "EvaluationDetails": { + "$ref": "#/definitions/EvaluationDetails" + }, + "AdditionalInformation": { + "$ref": "#/definitions/AdditionalInformation" + } + } + }, + "ModelOverview": { + "type": "object", + "description": "Overview about the model.", + "additionalProperties": false, + "properties": { + "ModelDescription": { + "description": "description of model.", + "type": "string", + "maxLength": 1024 + }, + "ModelOwner": { + "description": "Owner of model.", + "type": "string", + "maxLength": 1024 + }, + "ModelCreator": { + "description": "Creator of model.", + "type": "string", + "maxLength": 1024 + }, + "ProblemType": { + "description": "Problem being solved with the model.", + "type": "string", + "maxLength": 1024 + }, + "AlgorithmType": { + "description": "Algorithm used to solve the problem.", + "type": "string", + "maxLength": 1024 + }, + "ModelId": { + "description": "SageMaker Model Arn or Non SageMaker Model id.", + "type": "string", + "maxLength": 1024 + }, + "ModelArtifact": { + "description": "Location of the model artifact.", + "type": "array", + "insertionOrder": true, + "maxItems": 15, + "items": { + "type": "string", + "maxLength": 1024 + } + }, + "ModelName": { + "description": "Name of the model.", + "type": "string", + "maxLength": 1024 + }, + "ModelVersion": { + "description": "Version of the model.", + "type": "number", + "minimum": 1 + }, + "InferenceEnvironment": { + "description": "Overview about the inference.", + "type": "object", + "additionalProperties": false, + "properties": { + "ContainerImage": { + "description": "SageMaker inference image uri.", + "type": "array", + "insertionOrder": true, + "maxItems": 15, + "items": { + "type": "string", + "maxLength": 1024 + } + } + } + } + } + }, + "ModelPackageDetails": { + "description": "Metadata information related to model package version", + "type": "object", + "additionalProperties": false, + "properties": { + "ModelPackageDescription": { + "description": "A brief summary of the model package", + "type": "string", + "maxLength": 1024 + }, + "ModelPackageArn": { + "description": "The Amazon Resource Name (ARN) of the model package", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "CreatedBy": { + "description": "Information about the user who created model package.", + "$ref": "#/definitions/ModelPackageCreator" + }, + "ModelPackageStatus": { + "description": "Current status of model package", + "type": "string", + "enum": [ + "Pending", + "InProgress", + "Completed", + "Failed", + "Deleting" + ] + }, + "ModelApprovalStatus": { + "description": "Current approval status of model package", + "type": "string", + "enum": [ + "Approved", + "Rejected", + "PendingManualApproval" + ] + }, + "ApprovalDescription": { + "description": "A description provided for the model approval", + "type": "string", + "maxLength": 1024 + }, + "ModelPackageGroupName": { + "description": "If the model is a versioned model, the name of the model group that the versioned model belongs to.", + "type": "string", + "minLength": 1, + "maxLength": 63 + }, + "ModelPackageName": { + "description": "Name of the model package", + "type": "string", + "minLength": 1, + "maxLength": 63 + }, + "ModelPackageVersion": { + "description": "Version of the model package", + "type": "number", + "minimum": 1.0 + }, + "Domain": { + "description": "The machine learning domain of the model package you specified. Common machine learning domains include computer vision and natural language processing.", + "type": "string" + }, + "Task": { + "description": "The machine learning task you specified that your model package accomplishes. Common machine learning tasks include object detection and image classification.", + "type": "string" + }, + "SourceAlgorithms": { + "description": "A list of algorithms that were used to create a model package.", + "$ref": "#/definitions/SourceAlgorithms" + }, + "InferenceSpecification": { + "description": "Details about inference jobs that can be run with models based on this model package.", + "$ref": "#/definitions/InferenceSpecification" + } + } + }, + "IntendedUses": { + "description": "Intended usage of model.", + "type": "object", + "additionalProperties": false, + "properties": { + "PurposeOfModel": { + "description": "Why the model was developed?", + "type": "string", + "maxLength": 2048 + }, + "IntendedUses": { + "description": "intended use cases.", + "type": "string", + "maxLength": 2048 + }, + "FactorsAffectingModelEfficiency": { + "type": "string", + "maxLength": 2048 + }, + "RiskRating": { + "$ref": "#/definitions/RiskRating" + }, + "ExplanationsForRiskRating": { + "type": "string", + "maxLength": 2048 + } + } + }, + "BusinessDetails": { + "description": "Business details.", + "type": "object", + "additionalProperties": false, + "properties": { + "BusinessProblem": { + "type": "string", + "description": "What business problem does the model solve?", + "maxLength": 2048 + }, + "BusinessStakeholders": { + "type": "string", + "description": "Business stakeholders.", + "maxLength": 2048 + }, + "LineOfBusiness": { + "type": "string", + "description": "Line of business.", + "maxLength": 2048 + } + } + }, + "TrainingDetails": { + "description": "Overview about the training.", + "type": "object", + "additionalProperties": false, + "properties": { + "ObjectiveFunction": { + "$ref": "#/definitions/ObjectiveFunction" + }, + "TrainingObservations": { + "type": "string", + "maxLength": 1024 + }, + "TrainingJobDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "TrainingArn": { + "description": "SageMaker Training job arn.", + "type": "string", + "maxLength": 1024 + }, + "TrainingDatasets": { + "description": "Location of the model datasets.", + "type": "array", + "insertionOrder": true, + "maxItems": 15, + "items": { + "type": "string", + "maxLength": 1024 + } + }, + "TrainingEnvironment": { + "type": "object", + "additionalProperties": false, + "properties": { + "ContainerImage": { + "description": "SageMaker training image uri.", + "type": "array", + "insertionOrder": true, + "maxItems": 15, + "items": { + "type": "string", + "maxLength": 1024 + } + } + } + }, + "TrainingMetrics": { + "type": "array", + "insertionOrder": true, + "items": { + "maxItems": 50, + "$ref": "#/definitions/TrainingMetric" + } + }, + "UserProvidedTrainingMetrics": { + "type": "array", + "insertionOrder": true, + "items": { + "maxItems": 50, + "$ref": "#/definitions/TrainingMetric" + } + }, + "HyperParameters": { + "type": "array", + "insertionOrder": true, + "items": { + "maxItems": 100, + "$ref": "#/definitions/TrainingHyperParameter" + } + }, + "UserProvidedHyperParameters": { + "type": "array", + "insertionOrder": true, + "items": { + "maxItems": 100, + "$ref": "#/definitions/TrainingHyperParameter" + } + } + } + } + } + }, + "EvaluationDetails": { + "type": "array", + "default": [], + "insertionOrder": true, + "items": { + "$ref": "#/definitions/EvaluationDetail" + } + }, + "EvaluationDetail": { + "description": "item of evaluation details", + "type": "object", + "required": [ + "Name" + ], + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,63}" + }, + "EvaluationObservation": { + "type": "string", + "maxLength": 2096 + }, + "EvaluationJobArn": { + "type": "string", + "maxLength": 256 + }, + "Datasets": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string", + "maxLength": 1024 + }, + "maxItems": 10 + }, + "Metadata": { + "description": "additional attributes associated with the evaluation results.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z_][a-zA-Z0-9_]*": { + "type": "string", + "maxLength": 1024 + } + } + }, + "MetricGroups": { + "type": "array", + "insertionOrder": true, + "default": [], + "items": { + "$ref": "#/definitions/MetricGroup" + } + } + } + }, + "MetricGroup": { + "type": "object", + "description": "item in metric groups", + "additionalProperties": false, + "required": [ + "Name", + "MetricData" + ], + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,63}" + }, + "MetricData": { + "type": "array", + "insertionOrder": true, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/SimpleMetric" + }, + { + "$ref": "#/definitions/LinearGraphMetric" + }, + { + "$ref": "#/definitions/BarChartMetric" + }, + { + "$ref": "#/definitions/MatrixMetric" + } + ] + } + } + } + }, + "AdditionalInformation": { + "type": "object", + "additionalProperties": false, + "properties": { + "EthicalConsiderations": { + "description": "Any ethical considerations that the author wants to provide.", + "type": "string", + "maxLength": 2048 + }, + "CaveatsAndRecommendations": { + "description": "Caveats and recommendations for people who might use this model in their applications.", + "type": "string", + "maxLength": 2048 + }, + "CustomDetails": { + "type": "object", + "description": "customer details.", + "additionalProperties": false, + "patternProperties": { + "[a-zA-Z_][a-zA-Z0-9_]*": { + "type": "string", + "maxLength": 1024 + } + } + } + } + }, + "ModelPackageCreator": { + "type": "object", + "additionalProperties": false, + "properties": { + "UserProfileName": { + "description": "The name of the user's profile in Studio", + "type": "string", + "maxLength": 63 + } + } + }, + "SourceAlgorithms": { + "type": "array", + "minItems": 1, + "maxItems": 1, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/SourceAlgorithm" + } + }, + "SourceAlgorithm": { + "type": "object", + "additionalProperties": false, + "required": [ + "AlgorithmName" + ], + "properties": { + "AlgorithmName": { + "description": "The name of an algorithm that was used to create the model package. The algorithm must be either an algorithm resource in your SageMaker account or an algorithm in AWS Marketplace that you are subscribed to.", + "type": "string", + "maxLength": 170 + }, + "ModelDataUrl": { + "description": "The Amazon S3 path where the model artifacts, which result from model training, are stored.", + "type": "string", + "maxLength": 1024 + } + } + }, + "InferenceSpecification": { + "type": "object", + "additionalProperties": false, + "required": [ + "Containers" + ], + "properties": { + "Containers": { + "description": "Contains inference related information which were used to create model package.", + "type": "array", + "insertionOrder": true, + "minItems": 1, + "maxItems": 15, + "items": { + "$ref": "#/definitions/Container" + } + } + } + }, + "Container": { + "type": "object", + "additionalProperties": false, + "required": [ + "Image" + ], + "properties": { + "ModelDataUrl": { + "description": "The Amazon S3 path where the model artifacts, which result from model training, are stored.", + "type": "string", + "maxLength": 1024 + }, + "Image": { + "description": "Inference environment path. The Amazon EC2 Container Registry (Amazon ECR) path where inference code is stored.", + "type": "string", + "maxLength": 255 + }, + "NearestModelName": { + "description": "The name of a pre-trained machine learning benchmarked by Amazon SageMaker Inference Recommender model that matches your model.", + "type": "string" + } + } + }, + "RiskRating": { + "description": "Risk rating of model.", + "type": "string", + "enum": [ + "High", + "Medium", + "Low", + "Unknown" + ] + }, + "ObjectiveFunction": { + "description": "the objective function the model will optimize for.", + "type": "object", + "additionalProperties": false, + "properties": { + "Function": { + "description": "objective function that training job is optimized for.", + "type": "object", + "additionalProperties": false, + "properties": { + "Function": { + "type": "string", + "enum": [ + "Maximize", + "Minimize" + ] + }, + "Facet": { + "type": "string", + "maxLength": 63 + }, + "Condition": { + "type": "string", + "maxLength": 63 + } + } + }, + "Notes": { + "type": "string", + "maxLength": 1024 + } + } + }, + "TrainingMetric": { + "description": "training metric data.", + "type": "object", + "required": [ + "Name", + "Value" + ], + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,255}" + }, + "Notes": { + "type": "string", + "maxLength": 1024 + }, + "Value": { + "type": "number" + } + } + }, + "TrainingHyperParameter": { + "description": "training hyper parameter", + "type": "object", + "required": [ + "Name", + "Value" + ], + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,255}" + }, + "Value": { + "type": "string", + "pattern": ".{1,255}" + } + } + }, + "LinearGraphMetric": { + "description": "Linear graph metric.", + "type": "object", + "required": [ + "Name", + "Type", + "Value" + ], + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,255}" + }, + "Notes": { + "type": "string", + "maxLength": 1024 + }, + "Type": { + "type": "string", + "enum": [ + "linear_graph" + ] + }, + "Value": { + "anyOf": [ + { + "type": "array", + "insertionOrder": true, + "items": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "minItems": 1 + } + ] + }, + "XAxisName": { + "$ref": "#/definitions/AxisNameString" + }, + "YAxisName": { + "$ref": "#/definitions/AxisNameString" + } + } + }, + "BarChartMetric": { + "type": "object", + "required": [ + "Name", + "Type", + "Value" + ], + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,255}" + }, + "Notes": { + "type": "string", + "maxLength": 1024 + }, + "Type": { + "type": "string", + "enum": [ + "bar_chart" + ] + }, + "Value": { + "anyOf": [ + { + "type": "array", + "insertionOrder": true, + "items": { + "type": "number" + }, + "minItems": 1 + } + ] + }, + "XAxisName": { + "$ref": "#/definitions/AxisNameArray" + }, + "YAxisName": { + "$ref": "#/definitions/AxisNameString" + } + } + }, + "MatrixMetric": { + "type": "object", + "required": [ + "Name", + "Type", + "Value" + ], + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,255}" + }, + "Notes": { + "type": "string", + "maxLength": 1024 + }, + "Type": { + "type": "string", + "enum": [ + "matrix" + ] + }, + "Value": { + "anyOf": [ + { + "type": "array", + "insertionOrder": true, + "items": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "number" + }, + "minItems": 1, + "maxItems": 20 + }, + "minItems": 1, + "maxItems": 20 + } + ] + }, + "XAxisName": { + "$ref": "#/definitions/AxisNameArray" + }, + "YAxisName": { + "$ref": "#/definitions/AxisNameArray" + } + } + }, + "SimpleMetric": { + "description": "metric data", + "type": "object", + "required": [ + "Name", + "Type", + "Value" + ], + "additionalProperties": false, + "properties": { + "Name": { + "type": "string", + "pattern": ".{1,255}" + }, + "Notes": { + "type": "string", + "maxLength": 1024 + }, + "Type": { + "type": "string", + "enum": [ + "number", + "string", + "boolean" + ] + }, + "Value": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string", + "maxLength": 63 + }, + { + "type": "boolean" + } + ] + }, + "XAxisName": { + "$ref": "#/definitions/AxisNameString" + }, + "YAxisName": { + "$ref": "#/definitions/AxisNameString" + } + } + }, + "AxisNameString": { + "type": "string", + "maxLength": 63 + }, + "AxisNameArray": { + "type": "array", + "insertionOrder": true, + "items": { + "type": "string", + "maxLength": 63 + } + } + }, + "required": [ + "ModelCardName", + "Content", + "ModelCardStatus" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "readOnlyProperties": [ + "/properties/ModelCardArn", + "/properties/ModelCardVersion", + "/properties/CreatedBy/DomainId", + "/properties/CreatedBy/UserProfileArn", + "/properties/CreatedBy/UserProfileName", + "/properties/LastModifiedBy/DomainId", + "/properties/LastModifiedBy/UserProfileArn", + "/properties/LastModifiedBy/UserProfileName", + "/properties/CreationTime", + "/properties/LastModifiedTime", + "/properties/ModelCardProcessingStatus" + ], + "primaryIdentifier": [ + "/properties/ModelCardName" + ], + "createOnlyProperties": [ + "/properties/ModelCardName", + "/properties/SecurityConfig" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateModelCard", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:CreateGrant", + "sagemaker:DescribeModelPackageGroup", + "sagemaker:DescribeModelPackage", + "sagemaker:AddTags" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeModelCard", + "sagemaker:DescribeModelPackageGroup", + "sagemaker:DescribeModelPackage", + "kms:Decrypt", + "sagemaker:ListTags" + ] + }, + "update": { + "permissions": [ + "sagemaker:UpdateModelCard", + "sagemaker:DescribeModelCard", + "kms:GenerateDataKey", + "kms:Decrypt", + "sagemaker:DescribeModelPackageGroup", + "sagemaker:DescribeModelPackage", + "sagemaker:ListTags", + "sagemaker:AddTags", + "sagemaker:DeleteTags" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DescribeModelCard", + "sagemaker:DeleteModelCard", + "sagemaker:DescribeModelPackageGroup", + "sagemaker:DescribeModelPackage", + "kms:RetireGrant", + "kms:Decrypt", + "sagemaker:ListTags", + "sagemaker:DeleteTags" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListModelCards", + "sagemaker:ListModelCardVersions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/modelexplainabilityjobdefinition.json b/internal/aws/cfn/schemas/aws/sagemaker/modelexplainabilityjobdefinition.json new file mode 100644 index 00000000..16d5d801 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/modelexplainabilityjobdefinition.json @@ -0,0 +1,581 @@ +{ + "typeName": "AWS::SageMaker::ModelExplainabilityJobDefinition", + "description": "Resource Type definition for AWS::SageMaker::ModelExplainabilityJobDefinition", + "additionalProperties": false, + "properties": { + "JobDefinitionArn": { + "description": "The Amazon Resource Name (ARN) of job definition.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "JobDefinitionName": { + "$ref": "#/definitions/JobDefinitionName" + }, + "ModelExplainabilityBaselineConfig": { + "$ref": "#/definitions/ModelExplainabilityBaselineConfig" + }, + "ModelExplainabilityAppSpecification": { + "$ref": "#/definitions/ModelExplainabilityAppSpecification" + }, + "ModelExplainabilityJobInput": { + "$ref": "#/definitions/ModelExplainabilityJobInput" + }, + "ModelExplainabilityJobOutputConfig": { + "$ref": "#/definitions/MonitoringOutputConfig" + }, + "JobResources": { + "$ref": "#/definitions/MonitoringResources" + }, + "NetworkConfig": { + "$ref": "#/definitions/NetworkConfig" + }, + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "RoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.", + "type": "string", + "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$", + "minLength": 20, + "maxLength": 2048 + }, + "StoppingCondition": { + "$ref": "#/definitions/StoppingCondition" + }, + "Tags": { + "type": "array", + "maxItems": 50, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CreationTime": { + "description": "The time at which the job definition was created.", + "type": "string" + } + }, + "definitions": { + "ModelExplainabilityBaselineConfig": { + "type": "object", + "additionalProperties": false, + "description": "Baseline configuration used to validate that the data conforms to the specified constraints and statistics.", + "properties": { + "BaseliningJobName": { + "$ref": "#/definitions/ProcessingJobName" + }, + "ConstraintsResource": { + "$ref": "#/definitions/ConstraintsResource" + } + } + }, + "ConstraintsResource": { + "type": "object", + "additionalProperties": false, + "description": "The baseline constraints resource for a monitoring job.", + "properties": { + "S3Uri": { + "description": "The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.", + "$ref": "#/definitions/S3Uri" + } + } + }, + "S3Uri": { + "type": "string", + "description": "The Amazon S3 URI.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 1024 + }, + "ModelExplainabilityAppSpecification": { + "type": "object", + "additionalProperties": false, + "description": "Container image configuration object for the monitoring job.", + "properties": { + "ImageUri": { + "type": "string", + "description": "The container image to be run by the monitoring job.", + "pattern": ".*", + "maxLength": 255 + }, + "ConfigUri": { + "description": "The S3 URI to an analysis configuration file", + "$ref": "#/definitions/S3Uri" + }, + "Environment": { + "type": "object", + "additionalProperties": false, + "description": "Sets the environment variables in the Docker container", + "patternProperties": { + "[a-zA-Z_][a-zA-Z0-9_]*": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "[\\S\\s]*": { + "type": "string", + "maxLength": 256 + } + } + } + }, + "required": [ + "ImageUri", + "ConfigUri" + ] + }, + "ModelExplainabilityJobInput": { + "type": "object", + "additionalProperties": false, + "description": "The inputs for a monitoring job.", + "properties": { + "EndpointInput": { + "$ref": "#/definitions/EndpointInput" + }, + "BatchTransformInput": { + "$ref": "#/definitions/BatchTransformInput" + } + } + }, + "EndpointInput": { + "type": "object", + "additionalProperties": false, + "description": "The endpoint for a monitoring job.", + "properties": { + "EndpointName": { + "$ref": "#/definitions/EndpointName" + }, + "LocalPath": { + "type": "string", + "description": "Path to the filesystem where the endpoint data is available to the container.", + "pattern": ".*", + "maxLength": 256 + }, + "S3DataDistributionType": { + "type": "string", + "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated", + "enum": [ + "FullyReplicated", + "ShardedByS3Key" + ] + }, + "S3InputMode": { + "type": "string", + "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.", + "enum": [ + "Pipe", + "File" + ] + }, + "FeaturesAttribute": { + "type": "string", + "description": "JSONpath to locate features in JSONlines dataset", + "maxLength": 256 + }, + "InferenceAttribute": { + "type": "string", + "description": "Index or JSONpath to locate predicted label(s)", + "maxLength": 256 + }, + "ProbabilityAttribute": { + "type": "string", + "description": "Index or JSONpath to locate probabilities", + "maxLength": 256 + } + }, + "required": [ + "EndpointName", + "LocalPath" + ] + }, + "BatchTransformInput": { + "type": "object", + "additionalProperties": false, + "description": "The batch transform input for a monitoring job.", + "properties": { + "DataCapturedDestinationS3Uri": { + "type": "string", + "description": "A URI that identifies the Amazon S3 storage location where Batch Transform Job captures data.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 512 + }, + "DatasetFormat": { + "$ref": "#/definitions/DatasetFormat" + }, + "LocalPath": { + "type": "string", + "description": "Path to the filesystem where the endpoint data is available to the container.", + "pattern": ".*", + "maxLength": 256 + }, + "S3DataDistributionType": { + "type": "string", + "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated", + "enum": [ + "FullyReplicated", + "ShardedByS3Key" + ] + }, + "S3InputMode": { + "type": "string", + "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.", + "enum": [ + "Pipe", + "File" + ] + }, + "FeaturesAttribute": { + "type": "string", + "description": "JSONpath to locate features in JSONlines dataset", + "maxLength": 256 + }, + "InferenceAttribute": { + "type": "string", + "description": "Index or JSONpath to locate predicted label(s)", + "maxLength": 256 + }, + "ProbabilityAttribute": { + "type": "string", + "description": "Index or JSONpath to locate probabilities", + "maxLength": 256 + } + }, + "required": [ + "DataCapturedDestinationS3Uri", + "DatasetFormat", + "LocalPath" + ] + }, + "MonitoringOutputConfig": { + "type": "object", + "additionalProperties": false, + "description": "The output configuration for monitoring jobs.", + "properties": { + "KmsKeyId": { + "type": "string", + "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.", + "pattern": ".*", + "maxLength": 2048 + }, + "MonitoringOutputs": { + "type": "array", + "description": "Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.", + "minLength": 1, + "maxLength": 1, + "items": { + "$ref": "#/definitions/MonitoringOutput" + } + } + }, + "required": [ + "MonitoringOutputs" + ] + }, + "MonitoringOutput": { + "type": "object", + "additionalProperties": false, + "description": "The output object for a monitoring job.", + "properties": { + "S3Output": { + "$ref": "#/definitions/S3Output" + } + }, + "required": [ + "S3Output" + ] + }, + "S3Output": { + "type": "object", + "additionalProperties": false, + "description": "Information about where and how to store the results of a monitoring job.", + "properties": { + "LocalPath": { + "type": "string", + "description": "The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.", + "pattern": ".*", + "maxLength": 256 + }, + "S3UploadMode": { + "type": "string", + "description": "Whether to upload the results of the monitoring job continuously or after the job completes.", + "enum": [ + "Continuous", + "EndOfJob" + ] + }, + "S3Uri": { + "type": "string", + "description": "A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 512 + } + }, + "required": [ + "LocalPath", + "S3Uri" + ] + }, + "MonitoringResources": { + "type": "object", + "additionalProperties": false, + "description": "Identifies the resources to deploy for a monitoring job.", + "properties": { + "ClusterConfig": { + "$ref": "#/definitions/ClusterConfig" + } + }, + "required": [ + "ClusterConfig" + ] + }, + "ClusterConfig": { + "type": "object", + "additionalProperties": false, + "description": "Configuration for the cluster used to run model monitoring jobs.", + "properties": { + "InstanceCount": { + "description": "The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.", + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "InstanceType": { + "description": "The ML compute instance type for the processing job.", + "type": "string" + }, + "VolumeKmsKeyId": { + "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.", + "type": "string", + "minimum": 1, + "maximum": 2048 + }, + "VolumeSizeInGB": { + "description": "The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.", + "type": "integer", + "minimum": 1, + "maximum": 16384 + } + }, + "required": [ + "InstanceCount", + "InstanceType", + "VolumeSizeInGB" + ] + }, + "NetworkConfig": { + "type": "object", + "additionalProperties": false, + "description": "Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.", + "properties": { + "EnableInterContainerTrafficEncryption": { + "description": "Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.", + "type": "boolean" + }, + "EnableNetworkIsolation": { + "description": "Whether to allow inbound and outbound network calls to and from the containers used for the processing job.", + "type": "boolean" + }, + "VpcConfig": { + "$ref": "#/definitions/VpcConfig" + } + } + }, + "VpcConfig": { + "type": "object", + "additionalProperties": false, + "description": "Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.", + "properties": { + "SecurityGroupIds": { + "description": "The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.", + "type": "array", + "minItems": 1, + "maxItems": 5, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + }, + "Subnets": { + "description": "The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.", + "type": "array", + "minItems": 1, + "maxItems": 16, + "items": { + "type": "string", + "maxLength": 32, + "pattern": "[-0-9a-zA-Z]+" + } + } + }, + "required": [ + "SecurityGroupIds", + "Subnets" + ] + }, + "StoppingCondition": { + "type": "object", + "additionalProperties": false, + "description": "Specifies a time limit for how long the monitoring job is allowed to run.", + "properties": { + "MaxRuntimeInSeconds": { + "description": "The maximum runtime allowed in seconds.", + "type": "integer", + "minimum": 1, + "maximum": 86400 + } + }, + "required": [ + "MaxRuntimeInSeconds" + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "maxLength": 256, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ] + }, + "EndpointName": { + "type": "string", + "description": "The name of the endpoint used to run the monitoring job.", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*", + "maxLength": 63 + }, + "JobDefinitionName": { + "type": "string", + "description": "The name of the job definition.", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "maxLength": 63 + }, + "ProcessingJobName": { + "type": "string", + "description": "The name of a processing job", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$", + "minLength": 1, + "maxLength": 63 + }, + "MonitoringTimeOffsetString": { + "type": "string", + "description": "The time offsets in ISO duration format", + "pattern": "^.?P.*", + "minLength": 1, + "maxLength": 15 + }, + "DatasetFormat": { + "description": "The dataset format of the data to monitor", + "type": "object", + "properties": { + "Csv": { + "$ref": "#/definitions/Csv" + }, + "Json": { + "$ref": "#/definitions/Json" + }, + "Parquet": { + "$ref": "#/definitions/Parquet" + } + } + }, + "Csv": { + "description": "The CSV format", + "type": "object", + "properties": { + "Header": { + "description": "A boolean flag indicating if given CSV has header", + "type": "boolean" + } + } + }, + "Json": { + "description": "The Json format", + "type": "object", + "properties": { + "Line": { + "description": "A boolean flag indicating if it is JSON line format", + "type": "boolean" + } + } + }, + "Parquet": { + "description": "A flag indicating if the dataset format is Parquet", + "type": "boolean" + } + }, + "required": [ + "ModelExplainabilityAppSpecification", + "ModelExplainabilityJobInput", + "ModelExplainabilityJobOutputConfig", + "JobResources", + "RoleArn" + ], + "primaryIdentifier": [ + "/properties/JobDefinitionArn" + ], + "handlers": { + "create": { + "permissions": [ + "sagemaker:CreateModelExplainabilityJobDefinition", + "sagemaker:DescribeModelExplainabilityJobDefinition", + "iam:PassRole", + "sagemaker:AddTags" + ] + }, + "delete": { + "permissions": [ + "sagemaker:DeleteModelExplainabilityJobDefinition" + ] + }, + "read": { + "permissions": [ + "sagemaker:DescribeModelExplainabilityJobDefinition" + ] + }, + "list": { + "permissions": [ + "sagemaker:ListModelExplainabilityJobDefinitions", + "sagemaker:ListTags" + ] + } + }, + "readOnlyProperties": [ + "/properties/CreationTime", + "/properties/JobDefinitionArn" + ], + "createOnlyProperties": [ + "/properties/JobDefinitionName", + "/properties/ModelExplainabilityAppSpecification", + "/properties/ModelExplainabilityBaselineConfig", + "/properties/ModelExplainabilityJobInput", + "/properties/ModelExplainabilityJobOutputConfig", + "/properties/JobResources", + "/properties/NetworkConfig", + "/properties/RoleArn", + "/properties/StoppingCondition", + "/properties/Tags", + "/properties/EndpointName" + ], + "writeOnlyProperties": [ + "/properties/EndpointName", + "/properties/Tags", + "/properties/Tags/*/Key", + "/properties/Tags/*/Value" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sagemaker/modelpackage.json b/internal/aws/cfn/schemas/aws/sagemaker/modelpackage.json new file mode 100644 index 00000000..c018b1b4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sagemaker/modelpackage.json @@ -0,0 +1,1111 @@ +{ + "typeName": "AWS::SageMaker::ModelPackage", + "description": "Resource Type definition for AWS::SageMaker::ModelPackage", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "maxLength": 256, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "AdditionalInferenceSpecifications": { + "type": "array", + "minItems": 1, + "maxItems": 15, + "description": "An array of additional Inference Specification objects.", + "items": { + "$ref": "#/definitions/AdditionalInferenceSpecificationDefinition" + }, + "insertionOrder": true + }, + "AdditionalInferenceSpecificationDefinition": { + "description": "Additional Inference Specification specifies details about inference jobs that can be run with models based on this model package.AdditionalInferenceSpecifications can be added to existing model packages using AdditionalInferenceSpecificationsToAdd.", + "type": "object", + "additionalProperties": false, + "properties": { + "Containers": { + "description": "The Amazon ECR registry path of the Docker image that contains the inference code.", + "type": "array", + "items": { + "$ref": "#/definitions/ModelPackageContainerDefinition" + }, + "minItems": 1, + "maxItems": 15, + "insertionOrder": true + }, + "Description": { + "description": "A description of the additional Inference specification.", + "type": "string", + "maxLength": 1024, + "pattern": ".*" + }, + "Name": { + "description": "A unique name to identify the additional inference specification. The name must be unique within the list of your additional inference specifications for a particular model package.", + "type": "string", + "minLength": 1, + "maxLength": 63, + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$" + }, + "SupportedContentTypes": { + "description": "The supported MIME types for the input data.", + "type": "array", + "items": { + "$ref": "#/definitions/ContentType" + }, + "insertionOrder": true + }, + "SupportedRealtimeInferenceInstanceTypes": { + "description": "A list of the instance types that are used to generate inferences in real-time", + "type": "array", + "items": { + "$ref": "#/definitions/InferenceInstanceType" + }, + "insertionOrder": true + }, + "SupportedResponseMIMETypes": { + "description": "The supported MIME types for the output data.", + "type": "array", + "items": { + "$ref": "#/definitions/ResponseMIMEType" + }, + "insertionOrder": true + }, + "SupportedTransformInstanceTypes": { + "description": "A list of the instance types on which a transformation job can be run or on which an endpoint can be deployed.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TransformInstanceType" + }, + "insertionOrder": true + } + }, + "required": [ + "Containers", + "Name" + ] + }, + "TransformInstanceType": { + "description": "Instance types on which a transformation job can be run or on which an endpoint can be deployed.", + "type": "string" + }, + "InferenceInstanceType": { + "description": "Instance type that is used to generate inferences in real-time", + "type": "string" + }, + "ContentType": { + "description": "The supported MIME type for the input data.", + "type": "string", + "maxLength": 256, + "pattern": ".*" + }, + "ResponseMIMEType": { + "description": "The supported MIME types for the output data.", + "type": "string", + "maxLength": 1024, + "pattern": "^[-\\w]+\\/.+$" + }, + "CertifyForMarketplace": { + "description": "Whether to certify the model package for listing on AWS Marketplace.", + "type": "boolean" + }, + "ClientToken": { + "description": "A unique token that guarantees that the call to this API is idempotent.", + "type": "string", + "minLength": 1, + "maxLength": 36, + "pattern": "^[a-zA-Z0-9-]+$" + }, + "CustomerMetadataProperties": { + "type": "object", + "description": "The metadata properties associated with the model package versions.", + "maxProperties": 50, + "minProperties": 1, + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)${1,128}": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "^([\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)${1,256}": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "Domain": { + "description": "The machine learning domain of the model package you specified.", + "type": "string" + }, + "DriftCheckBaselines": { + "description": "Represents the drift check baselines that can be used when the model monitor is set using the model package.", + "type": "object", + "additionalProperties": false, + "properties": { + "Bias": { + "$ref": "#/definitions/DriftCheckBias" + }, + "Explainability": { + "$ref": "#/definitions/DriftCheckExplainability" + }, + "ModelDataQuality": { + "$ref": "#/definitions/DriftCheckModelDataQuality" + }, + "ModelQuality": { + "$ref": "#/definitions/DriftCheckModelQuality" + } + } + }, + "DriftCheckBias": { + "description": "Represents the drift check bias baselines that can be used when the model monitor is set using the model package.", + "type": "object", + "additionalProperties": false, + "properties": { + "PostTrainingConstraints": { + "$ref": "#/definitions/MetricsSource" + }, + "PreTrainingConstraints": { + "$ref": "#/definitions/MetricsSource" + }, + "ConfigFile": { + "$ref": "#/definitions/FileSource" + } + } + }, + "DriftCheckExplainability": { + "description": "Contains explainability metrics for a model.", + "type": "object", + "additionalProperties": false, + "properties": { + "Constraints": { + "$ref": "#/definitions/MetricsSource" + }, + "ConfigFile": { + "$ref": "#/definitions/FileSource" + } + } + }, + "DriftCheckModelDataQuality": { + "description": "Represents the drift check data quality baselines that can be used when the model monitor is set using the model package.", + "type": "object", + "additionalProperties": false, + "properties": { + "Constraints": { + "$ref": "#/definitions/MetricsSource" + }, + "Statistics": { + "$ref": "#/definitions/MetricsSource" + } + } + }, + "DriftCheckModelQuality": { + "description": "Represents the drift check model quality baselines that can be used when the model monitor is set using the model package.", + "type": "object", + "additionalProperties": false, + "properties": { + "Constraints": { + "$ref": "#/definitions/MetricsSource" + }, + "Statistics": { + "$ref": "#/definitions/MetricsSource" + } + } + }, + "MetricsSource": { + "description": "Represents a Metric Source Object.", + "type": "object", + "additionalProperties": false, + "properties": { + "ContentDigest": { + "description": "The digest of the metric source.", + "type": "string", + "maxLength": 72, + "pattern": "^[Ss][Hh][Aa]256:[0-9a-fA-F]{64}$" + }, + "ContentType": { + "description": "The type of content stored in the metric source.", + "type": "string", + "maxLength": 256, + "pattern": ".*" + }, + "S3Uri": { + "description": "The Amazon S3 URI for the metric source.", + "type": "string", + "maxLength": 1024, + "pattern": "^(https|s3)://([^/]+)/?(.*)$" + } + }, + "required": [ + "ContentType", + "S3Uri" + ] + }, + "FileSource": { + "description": "Represents a File Source Object.", + "type": "object", + "additionalProperties": false, + "properties": { + "ContentDigest": { + "description": "The digest of the file source.", + "type": "string", + "maxLength": 72, + "pattern": "^[Ss][Hh][Aa]256:[0-9a-fA-F]{64}$" + }, + "ContentType": { + "description": "The type of content stored in the file source.", + "type": "string", + "maxLength": 256, + "pattern": ".*" + }, + "S3Uri": { + "description": "The Amazon S3 URI for the file source.", + "type": "string", + "maxLength": 1024, + "pattern": "^(https|s3)://([^/]+)/?(.*)$" + } + }, + "required": [ + "S3Uri" + ] + }, + "InferenceSpecification": { + "description": "Details about inference jobs that can be run with models based on this model package.", + "type": "object", + "additionalProperties": false, + "properties": { + "Containers": { + "description": "The Amazon ECR registry path of the Docker image that contains the inference code.", + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ModelPackageContainerDefinition" + }, + "minItems": 1, + "maxItems": 15, + "insertionOrder": true + }, + "SupportedContentTypes": { + "description": "The supported MIME types for the input data.", + "type": "array", + "items": { + "$ref": "#/definitions/ContentType" + }, + "insertionOrder": true + }, + "SupportedRealtimeInferenceInstanceTypes": { + "description": "A list of the instance types that are used to generate inferences in real-time", + "type": "array", + "items": { + "$ref": "#/definitions/InferenceInstanceType" + }, + "insertionOrder": true + }, + "SupportedResponseMIMETypes": { + "description": "The supported MIME types for the output data.", + "type": "array", + "items": { + "$ref": "#/definitions/ResponseMIMEType" + }, + "insertionOrder": true + }, + "SupportedTransformInstanceTypes": { + "description": "A list of the instance types on which a transformation job can be run or on which an endpoint can be deployed.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TransformInstanceType" + }, + "insertionOrder": true + } + }, + "required": [ + "Containers", + "SupportedContentTypes", + "SupportedResponseMIMETypes" + ] + }, + "Environment": { + "type": "object", + "description": "Sets the environment variables in the Docker container", + "maxProperties": 16, + "patternProperties": { + "[a-zA-Z_][a-zA-Z0-9_]*": { + "type": "string", + "maxLength": 1024 + }, + "[\\S\\s]*": { + "type": "string", + "maxLength": 1024 + } + }, + "additionalProperties": false + }, + "ModelPackageContainerDefinition": { + "type": "object", + "additionalProperties": false, + "description": "Describes the Docker container for the model package.", + "properties": { + "ContainerHostname": { + "type": "string", + "description": "The DNS host name for the Docker container.", + "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}", + "maxLength": 63 + }, + "Environment": { + "$ref": "#/definitions/Environment" + }, + "ModelInput": { + "type": "object", + "additionalProperties": false, + "properties": { + "DataInputConfig": { + "type": "string", + "description": "The input configuration object for the model.", + "pattern": "[\\S\\s]+", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "DataInputConfig" + ] + }, + "Image": { + "type": "string", + "description": "The Amazon EC2 Container Registry (Amazon ECR) path where inference code is stored.", + "pattern": "[\\S]{1,255}", + "minLength": 1, + "maxLength": 255 + }, + "ImageDigest": { + "type": "string", + "description": "An MD5 hash of the training algorithm that identifies the Docker image used for training.", + "pattern": "^[Ss][Hh][Aa]256:[0-9a-fA-F]{64}$", + "maxLength": 72 + }, + "ModelDataUrl": { + "type": "string", + "description": "A structure with Model Input details.", + "pattern": "^(https|s3)://([^/]+)/?(.*)$", + "maxLength": 1024 + }, + "Framework": { + "type": "string", + "description": "The machine learning framework of the model package container image." + }, + "FrameworkVersion": { + "type": "string", + "description": "The framework version of the Model Package Container Image.", + "pattern": "[0-9]\\.[A-Za-z0-9.]+", + "minLength": 3, + "maxLength": 10 + }, + "NearestModelName": { + "type": "string", + "description": "The name of a pre-trained machine learning benchmarked by Amazon SageMaker Inference Recommender model that matches your model." + } + }, + "required": [ + "Image" + ] + }, + "MetadataProperties": { + "description": "Metadata properties of the tracking entity, trial, or trial component.", + "type": "object", + "properties": { + "CommitId": { + "type": "string", + "description": "The commit ID.", + "pattern": ".*", + "maxLength": 1024 + }, + "GeneratedBy": { + "type": "string", + "description": "The entity this entity was generated by.", + "pattern": ".*", + "maxLength": 1024 + }, + "ProjectId": { + "type": "string", + "description": "The project ID metadata.", + "pattern": ".*", + "maxLength": 1024 + }, + "Repository": { + "type": "string", + "description": "The repository metadata.", + "pattern": ".*", + "maxLength": 1024 + } + }, + "additionalProperties": false + }, + "ModelApprovalStatus": { + "type": "string", + "description": "The approval status of the model package.", + "enum": [ + "Approved", + "Rejected", + "PendingManualApproval" + ] + }, + "SkipModelValidation": { + "type": "string", + "description": "Indicates if you want to skip model validation.", + "enum": [ + "None", + "All" + ] + }, + "ModelMetrics": { + "description": "A structure that contains model metrics reports.", + "type": "object", + "additionalProperties": false, + "properties": { + "Bias": { + "$ref": "#/definitions/Bias" + }, + "Explainability": { + "$ref": "#/definitions/Explainability" + }, + "ModelDataQuality": { + "$ref": "#/definitions/ModelDataQuality" + }, + "ModelQuality": { + "$ref": "#/definitions/ModelQuality" + } + } + }, + "Bias": { + "description": "Contains bias metrics for a model.", + "type": "object", + "additionalProperties": false, + "properties": { + "Report": { + "$ref": "#/definitions/MetricsSource" + }, + "PreTrainingReport": { + "$ref": "#/definitions/MetricsSource" + }, + "PostTrainingReport": { + "$ref": "#/definitions/MetricsSource" + } + } + }, + "Explainability": { + "description": "Contains explainability metrics for a model.", + "type": "object", + "additionalProperties": false, + "properties": { + "Report": { + "$ref": "#/definitions/MetricsSource" + } + } + }, + "ModelDataQuality": { + "description": "Metrics that measure the quality of the input data for a model.", + "type": "object", + "additionalProperties": false, + "properties": { + "Constraints": { + "$ref": "#/definitions/MetricsSource" + }, + "Statistics": { + "$ref": "#/definitions/MetricsSource" + } + } + }, + "ModelQuality": { + "description": "Metrics that measure the quality of a model.", + "type": "object", + "additionalProperties": false, + "properties": { + "Constraints": { + "$ref": "#/definitions/MetricsSource" + }, + "Statistics": { + "$ref": "#/definitions/MetricsSource" + } + } + }, + "ModelPackageDescription": { + "type": "string", + "description": "The description of the model package.", + "pattern": "[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*", + "maxLength": 1024 + }, + "ModelPackageGroupName": { + "type": "string", + "description": "The name of the model package group.", + "pattern": "(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:[a-z\\-]*\\/)?([a-zA-Z0-9]([a-zA-Z0-9-]){0,62})(? ? @ [ \\ ] ^ _ ` { | } ~``. If you don't include this switch, the password can contain punctuation." + }, + "ExcludeLowercase": { + "type": "boolean", + "description": "Specifies whether to exclude lowercase letters from the password. If you don't include this switch, the password can contain lowercase letters." + }, + "SecretStringTemplate": { + "type": "string", + "description": "A template that the generated string must match. When you make a change to this property, a new secret version is created." + }, + "ExcludeNumbers": { + "type": "boolean", + "description": "Specifies whether to exclude numbers from the password. If you don't include this switch, the password can contain numbers." + } + }, + "description": "Generates a random password. We recommend that you specify the maximum length and include every character type that the system you are generating a password for can support.\n *Required permissions:* ``secretsmanager:GetRandomPassword``. For more information, see [IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecretsmanager.html#awssecretsmanager-actions-as-permissions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html)." + }, + "ReplicaRegion": { + "type": "object", + "description": "Specifies a ``Region`` and the ``KmsKeyId`` for a replica secret.", + "additionalProperties": false, + "properties": { + "KmsKeyId": { + "type": "string", + "description": "The ARN, key ID, or alias of the KMS key to encrypt the secret. If you don't include this field, Secrets Manager uses ``aws/secretsmanager``." + }, + "Region": { + "type": "string", + "description": "A string that represents a ``Region``, for example \"us-east-1\"." + } + }, + "required": [ + "Region" + ] + }, + "Tag": { + "type": "object", + "description": "A structure that contains information about a tag.", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string", + "description": "The string value associated with the key of the tag." + }, + "Key": { + "type": "string", + "description": "The key identifier, or name, of the tag." + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/SecretString", + "/properties/GenerateSecretString" + ], + "handlers": { + "create": { + "permissions": [ + "secretsmanager:DescribeSecret", + "secretsmanager:GetRandomPassword", + "secretsmanager:CreateSecret", + "secretsmanager:TagResource" + ] + }, + "delete": { + "permissions": [ + "secretsmanager:DeleteSecret", + "secretsmanager:DescribeSecret", + "secretsmanager:RemoveRegionsFromReplication" + ] + }, + "list": { + "permissions": [ + "secretsmanager:ListSecrets" + ] + }, + "read": { + "permissions": [ + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue" + ] + }, + "update": { + "permissions": [ + "secretsmanager:UpdateSecret", + "secretsmanager:TagResource", + "secretsmanager:UntagResource", + "secretsmanager:GetRandomPassword", + "secretsmanager:GetSecretValue", + "secretsmanager:ReplicateSecretToRegions", + "secretsmanager:RemoveRegionsFromReplication" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/secretsmanager/secrettargetattachment.json b/internal/aws/cfn/schemas/aws/secretsmanager/secrettargetattachment.json new file mode 100644 index 00000000..38e1b18f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/secretsmanager/secrettargetattachment.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::SecretsManager::SecretTargetAttachment", + "description": "Resource Type definition for AWS::SecretsManager::SecretTargetAttachment", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SecretId": { + "type": "string" + }, + "TargetType": { + "type": "string" + }, + "TargetId": { + "type": "string" + } + }, + "required": [ + "TargetType", + "TargetId", + "SecretId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/securityhub/automationrule.json b/internal/aws/cfn/schemas/aws/securityhub/automationrule.json new file mode 100644 index 00000000..2c219b5e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/securityhub/automationrule.json @@ -0,0 +1,829 @@ +{ + "typeName": "AWS::SecurityHub::AutomationRule", + "description": "The ``AWS::SecurityHub::AutomationRule`` resource specifies an automation rule based on input parameters. For more information, see [Automation rules](https://docs.aws.amazon.com/securityhub/latest/userguide/automation-rules.html) in the *User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-securityhub", + "definitions": { + "Tags": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-zA-Z0-9]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + } + }, + "NonEmptyString": { + "type": "string", + "minLength": 1 + }, + "DateFilter": { + "description": "", + "properties": { + "DateRange": { + "$ref": "#/definitions/DateRange", + "description": "" + }, + "End": { + "$ref": "#/definitions/ISO8601DateString", + "description": "" + }, + "Start": { + "$ref": "#/definitions/ISO8601DateString", + "description": "" + } + }, + "type": "object", + "oneOf": [ + { + "required": [ + "DateRange" + ] + }, + { + "allOf": [ + { + "required": [ + "Start" + ] + }, + { + "required": [ + "End" + ] + } + ] + } + ], + "additionalProperties": false + }, + "DateRange": { + "description": "", + "properties": { + "Unit": { + "description": "", + "enum": [ + "DAYS" + ], + "type": "string" + }, + "Value": { + "description": "", + "type": "number" + } + }, + "required": [ + "Unit", + "Value" + ], + "type": "object", + "additionalProperties": false + }, + "BooleanFilter": { + "description": "", + "properties": { + "Value": { + "description": "The value of the boolean.", + "type": "boolean" + } + }, + "required": [ + "Value" + ], + "type": "object", + "additionalProperties": false + }, + "MapFilter": { + "description": "", + "properties": { + "Comparison": { + "description": "", + "enum": [ + "EQUALS", + "NOT_EQUALS", + "CONTAINS", + "NOT_CONTAINS" + ], + "type": "string" + }, + "Key": { + "description": "", + "type": "string" + }, + "Value": { + "description": "", + "type": "string" + } + }, + "required": [ + "Comparison", + "Key", + "Value" + ], + "type": "object", + "additionalProperties": false + }, + "NumberFilter": { + "description": "", + "properties": { + "Eq": { + "description": "", + "type": "number" + }, + "Gte": { + "description": "", + "type": "number" + }, + "Lte": { + "description": "", + "type": "number" + } + }, + "oneOf": [ + { + "required": [ + "Eq" + ] + }, + { + "anyOf": [ + { + "required": [ + "Gte" + ] + }, + { + "required": [ + "Lte" + ] + } + ] + } + ], + "type": "object", + "additionalProperties": false + }, + "StringFilter": { + "description": "", + "properties": { + "Comparison": { + "$ref": "#/definitions/StringFilterComparison", + "description": "" + }, + "Value": { + "description": "", + "type": "string" + } + }, + "required": [ + "Comparison", + "Value" + ], + "type": "object", + "additionalProperties": false + }, + "StringFilterComparison": { + "description": "The condition to apply to a string value when filtering Security Hub findings.", + "enum": [ + "EQUALS", + "PREFIX", + "NOT_EQUALS", + "PREFIX_NOT_EQUALS", + "CONTAINS", + "NOT_CONTAINS" + ], + "type": "string" + }, + "ISO8601DateString": { + "description": "The date and time, in UTC and ISO 8601 format.", + "type": "string", + "pattern": "^(\\d\\d\\d\\d)-([0][1-9]|[1][0-2])-([0][1-9]|[1-2](\\d)|[3][0-1])[T](?:([0-1](\\d)|[2][0-3]):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?([Z]|[+-](\\d\\d)(:?(\\d\\d))?)$" + }, + "arn": { + "description": "The Amazon Resource Name (ARN) of the automation rule.", + "type": "string", + "minLength": 12, + "maxLength": 2048, + "pattern": "^arn:(aws|aws-cn|aws-us-gov|aws-iso-?[a-z]{0,2}):[A-Za-z0-9]{1,63}:[a-z]+-([a-z]{1,10}-)?[a-z]+-[0-9]+:([0-9]{12})?:.+$" + }, + "arnOrId": { + "description": "The Amazon Resource Name (ARN) or Id of the automation rule.", + "anyOf": [ + { + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + { + "$ref": "#/definitions/arn" + } + ] + }, + "timestamp": { + "type": "string", + "format": "date-time", + "pattern": "(\\d\\d\\d\\d)-[0-1](\\d)-[0-3](\\d)[Tt](?:[0-2](\\d):[0-5](\\d):[0-5](\\d)|23:59:60)(?:\\.(\\d)+)?(?:[Zz]|[+-](\\d\\d)(?::?(\\d\\d))?)$" + }, + "int100": { + "description": "Integer from 0 to 100.", + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "map": { + "description": "An object of user-defined name and value string pair added to a finding.", + "type": "object", + "minProperties": 1, + "maxProperties": 50, + "patternProperties": { + "^[-_+=.:/@\\w\\s]{1,128}$": { + "description": "The value for the key in the map", + "type": "string", + "minLength": 0, + "maxLength": 1024 + } + }, + "additionalProperties": false + }, + "RelatedFinding": { + "description": "Provides details about a list of findings that the current finding relates to.", + "type": "object", + "properties": { + "ProductArn": { + "$ref": "#/definitions/arn", + "description": "The Amazon Resource Name (ARN) for the product that generated a related finding." + }, + "Id": { + "$ref": "#/definitions/arnOrId", + "description": "" + } + }, + "additionalProperties": false, + "required": [ + "ProductArn", + "Id" + ] + }, + "NoteUpdate": { + "description": "", + "type": "object", + "properties": { + "Text": { + "description": "", + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "UpdatedBy": { + "$ref": "#/definitions/arnOrId", + "description": "" + } + }, + "additionalProperties": false, + "required": [ + "Text", + "UpdatedBy" + ] + }, + "WorkflowUpdate": { + "description": "", + "type": "object", + "properties": { + "Status": { + "description": "", + "type": "string", + "enum": [ + "NEW", + "NOTIFIED", + "RESOLVED", + "SUPPRESSED" + ] + } + }, + "required": [ + "Status" + ], + "additionalProperties": false + }, + "SeverityUpdate": { + "description": "", + "type": "object", + "properties": { + "Product": { + "description": "", + "type": "number" + }, + "Label": { + "description": "", + "type": "string", + "enum": [ + "INFORMATIONAL", + "LOW", + "MEDIUM", + "HIGH", + "CRITICAL" + ] + }, + "Normalized": { + "$ref": "#/definitions/int100", + "description": "" + } + }, + "additionalProperties": false + }, + "AutomationRulesFindingFieldsUpdate": { + "description": "The rule action will update the ``Note`` field of a finding.", + "type": "object", + "properties": { + "Types": { + "description": "", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^([^/]+)(/[^/]+){0,2}$" + } + }, + "Severity": { + "type": "object", + "description": "The rule action will update the ``Severity`` field of a finding.", + "$ref": "#/definitions/SeverityUpdate" + }, + "Confidence": { + "$ref": "#/definitions/int100", + "description": "" + }, + "Criticality": { + "$ref": "#/definitions/int100", + "description": "" + }, + "UserDefinedFields": { + "$ref": "#/definitions/map", + "description": "" + }, + "VerificationState": { + "description": "", + "type": "string", + "enum": [ + "UNKNOWN", + "TRUE_POSITIVE", + "FALSE_POSITIVE", + "BENIGN_POSITIVE" + ] + }, + "RelatedFindings": { + "description": "The rule action will update the ``RelatedFindings`` field of a finding.", + "type": "array", + "minItems": 1, + "maxItems": 10, + "items": { + "$ref": "#/definitions/RelatedFinding" + } + }, + "Note": { + "type": "object", + "description": "The rule action will update the ``Note`` field of a finding.", + "$ref": "#/definitions/NoteUpdate" + }, + "Workflow": { + "type": "object", + "description": "The rule action will update the ``Workflow`` field of a finding.", + "$ref": "#/definitions/WorkflowUpdate" + } + } + }, + "AutomationRulesAction": { + "description": "", + "type": "object", + "properties": { + "Type": { + "description": "", + "type": "string", + "enum": [ + "FINDING_FIELDS_UPDATE" + ] + }, + "FindingFieldsUpdate": { + "$ref": "#/definitions/AutomationRulesFindingFieldsUpdate", + "description": "" + } + }, + "required": [ + "Type", + "FindingFieldsUpdate" + ] + }, + "AutomationRulesFindingFilters": { + "description": "", + "type": "object", + "additionalProperties": false, + "properties": { + "ProductArn": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "AwsAccountId": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 100 + }, + "Id": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "GeneratorId": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 100 + }, + "Type": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "FirstObservedAt": { + "description": "", + "items": { + "$ref": "#/definitions/DateFilter" + }, + "type": "array", + "maxItems": 20 + }, + "LastObservedAt": { + "description": "", + "items": { + "$ref": "#/definitions/DateFilter" + }, + "type": "array", + "maxItems": 20 + }, + "CreatedAt": { + "description": "", + "items": { + "$ref": "#/definitions/DateFilter" + }, + "type": "array", + "maxItems": 20 + }, + "UpdatedAt": { + "description": "", + "items": { + "$ref": "#/definitions/DateFilter" + }, + "type": "array", + "maxItems": 20 + }, + "Confidence": { + "description": "", + "items": { + "$ref": "#/definitions/NumberFilter" + }, + "type": "array", + "maxItems": 20 + }, + "Criticality": { + "description": "", + "items": { + "$ref": "#/definitions/NumberFilter" + }, + "type": "array", + "maxItems": 20 + }, + "Title": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 100 + }, + "Description": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "SourceUrl": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ProductName": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "CompanyName": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "SeverityLabel": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ResourceType": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ResourceId": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 100 + }, + "ResourcePartition": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ResourceRegion": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ResourceTags": { + "description": "", + "items": { + "$ref": "#/definitions/MapFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ResourceDetailsOther": { + "description": "", + "items": { + "$ref": "#/definitions/MapFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ComplianceStatus": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ComplianceSecurityControlId": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "ComplianceAssociatedStandardsId": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "VerificationState": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "WorkflowStatus": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "RecordState": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "RelatedFindingsProductArn": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "RelatedFindingsId": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "NoteText": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "NoteUpdatedAt": { + "description": "", + "items": { + "$ref": "#/definitions/DateFilter" + }, + "type": "array", + "maxItems": 20 + }, + "NoteUpdatedBy": { + "description": "", + "items": { + "$ref": "#/definitions/StringFilter" + }, + "type": "array", + "maxItems": 20 + }, + "UserDefinedFields": { + "description": "", + "items": { + "$ref": "#/definitions/MapFilter" + }, + "type": "array", + "maxItems": 20 + } + } + } + }, + "properties": { + "RuleArn": { + "description": "", + "type": "string", + "pattern": "arn:aws\\S*:securityhub:\\S*" + }, + "RuleStatus": { + "description": "Whether the rule is active after it is created. If this parameter is equal to ``ENABLED``, ASH applies the rule to findings and finding updates after the rule is created.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "RuleOrder": { + "description": "", + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + "Description": { + "description": "", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "RuleName": { + "description": "", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "CreatedAt": { + "description": "", + "$ref": "#/definitions/ISO8601DateString" + }, + "UpdatedAt": { + "description": "", + "$ref": "#/definitions/ISO8601DateString" + }, + "CreatedBy": { + "description": "", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "IsTerminal": { + "description": "", + "type": "boolean" + }, + "Actions": { + "type": "array", + "description": "", + "items": { + "$ref": "#/definitions/AutomationRulesAction" + }, + "minItems": 1, + "maxItems": 1 + }, + "Criteria": { + "description": "A set of [Security Finding Format (ASFF)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format.html) finding field attributes and corresponding expected values that ASH uses to filter findings. If a rule is enabled and a finding matches the criteria specified in this parameter, ASH applies the rule action to the finding.", + "$ref": "#/definitions/AutomationRulesFindingFilters" + }, + "Tags": { + "description": "", + "$ref": "#/definitions/Tags" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/RuleArn" + ], + "readOnlyProperties": [ + "/properties/RuleArn", + "/properties/CreatedAt", + "/properties/UpdatedAt", + "/properties/CreatedBy" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "securityhub:CreateAutomationRule", + "securityhub:TagResource", + "securityhub:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "securityhub:ListAutomationRules", + "securityhub:BatchGetAutomationRules", + "securityhub:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "securityhub:BatchUpdateAutomationRules", + "securityhub:TagResource", + "securityhub:UntagResource", + "securityhub:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "securityhub:BatchDeleteAutomationRules", + "securityhub:BatchGetAutomationRules" + ] + }, + "list": { + "permissions": [ + "securityhub:ListAutomationRules", + "securityhub:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/securityhub/hub.json b/internal/aws/cfn/schemas/aws/securityhub/hub.json new file mode 100644 index 00000000..f8af182c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/securityhub/hub.json @@ -0,0 +1,101 @@ +{ + "typeName": "AWS::SecurityHub::Hub", + "description": "The AWS::SecurityHub::Hub resource represents the implementation of the AWS Security Hub service in your account. One hub resource is created for each Region in which you enable Security Hub.\n\n", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-securityhub", + "definitions": { + "Tags": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-zA-Z0-9-_]{1,128}$": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + } + } + }, + "properties": { + "ARN": { + "description": "An ARN is automatically created for the customer.", + "type": "string", + "pattern": "^arn:.*" + }, + "EnableDefaultStandards": { + "description": "Whether to enable the security standards that Security Hub has designated as automatically enabled.", + "type": "boolean" + }, + "ControlFindingGenerator": { + "description": "This field, used when enabling Security Hub, specifies whether the calling account has consolidated control findings turned on. If the value for this field is set to SECURITY_CONTROL, Security Hub generates a single finding for a control check even when the check applies to multiple enabled standards. If the value for this field is set to STANDARD_CONTROL, Security Hub generates separate findings for a control check when the check applies to multiple enabled standards.", + "type": "string", + "pattern": "^(SECURITY_CONTROL|STANDARD_CONTROL)$" + }, + "AutoEnableControls": { + "description": "Whether to automatically enable new controls when they are added to standards that are enabled", + "type": "boolean" + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "SubscribedAt": { + "description": "The date and time when Security Hub was enabled in the account.", + "type": "string" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/ARN" + ], + "readOnlyProperties": [ + "/properties/ARN", + "/properties/SubscribedAt" + ], + "writeOnlyProperties": [ + "/properties/EnableDefaultStandards" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "securityhub:EnableSecurityHub", + "securityhub:UpdateSecurityHubConfiguration", + "securityhub:TagResource", + "securityhub:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "securityhub:DescribeHub", + "securityhub:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "securityhub:DescribeHub", + "securityhub:UpdateSecurityHubConfiguration", + "securityhub:TagResource", + "securityhub:UntagResource", + "securityhub:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "securityhub:DisableSecurityHub" + ] + }, + "list": { + "permissions": [ + "securityhub:DescribeHub", + "securityhub:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/securityhub/standard.json b/internal/aws/cfn/schemas/aws/securityhub/standard.json new file mode 100644 index 00000000..ebfa7835 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/securityhub/standard.json @@ -0,0 +1,106 @@ +{ + "typeName": "AWS::SecurityHub::Standard", + "description": "The ``AWS::SecurityHub::Standard`` resource specifies the enablement of a security standard. The standard is identified by the ``StandardsArn`` property. To view a list of ASH standards and their Amazon Resource Names (ARNs), use the [DescribeStandards](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_DescribeStandards.html) API operation.\n You must create a separate ``AWS::SecurityHub::Standard`` resource for each standard that you want to enable.\n For more information about ASH standards, see [standards reference](https://docs.aws.amazon.com/securityhub/latest/userguide/standards-reference.html) in the *User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-securityhub", + "definitions": { + "StandardsControl": { + "description": "Provides details about an individual security control. For a list of ASH controls, see [controls reference](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-controls-reference.html) in the *User Guide*.", + "type": "object", + "properties": { + "StandardsControlArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the control.", + "pattern": "arn:aws\\S*:securityhub:\\S*" + }, + "Reason": { + "type": "string", + "description": "A user-defined reason for changing a control's enablement status in a specified standard. If you are disabling a control, then this property is required." + } + }, + "required": [ + "StandardsControlArn" + ], + "additionalProperties": false + } + }, + "properties": { + "StandardsSubscriptionArn": { + "description": "", + "type": "string", + "pattern": "arn:aws\\S*:securityhub:\\S*" + }, + "StandardsArn": { + "description": "The ARN of the standard that you want to enable. To view a list of available ASH standards and their ARNs, use the [DescribeStandards](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_DescribeStandards.html) API operation.", + "type": "string", + "pattern": "arn:aws\\S*:securityhub:\\S" + }, + "DisabledStandardsControls": { + "description": "Specifies which controls are to be disabled in a standard. \n *Maximum*: ``100``", + "type": "array", + "minItems": 0, + "maxItems": 100, + "items": { + "$ref": "#/definitions/StandardsControl" + }, + "insertionOrder": true, + "uniqueItems": true + } + }, + "additionalProperties": false, + "required": [ + "StandardsArn" + ], + "createOnlyProperties": [ + "/properties/StandardsArn" + ], + "readOnlyProperties": [ + "/properties/StandardsSubscriptionArn" + ], + "primaryIdentifier": [ + "/properties/StandardsSubscriptionArn" + ], + "additionalIdentifiers": [ + [ + "/properties/StandardsArn" + ] + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "securityhub:GetEnabledStandards", + "securityhub:BatchEnableStandards", + "securityhub:UpdateStandardsControl" + ] + }, + "read": { + "permissions": [ + "securityhub:GetEnabledStandards", + "securityhub:DescribeStandardsControls" + ] + }, + "update": { + "permissions": [ + "securityhub:GetEnabledStandards", + "securityhub:UpdateStandardsControl" + ] + }, + "delete": { + "permissions": [ + "securityhub:GetEnabledStandards", + "securityhub:BatchDisableStandards" + ] + }, + "list": { + "permissions": [ + "securityhub:GetEnabledStandards" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/acceptedportfolioshare.json b/internal/aws/cfn/schemas/aws/servicecatalog/acceptedportfolioshare.json new file mode 100644 index 00000000..6bff8778 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/acceptedportfolioshare.json @@ -0,0 +1,29 @@ +{ + "typeName": "AWS::ServiceCatalog::AcceptedPortfolioShare", + "description": "Resource Type definition for AWS::ServiceCatalog::AcceptedPortfolioShare", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + } + }, + "required": [ + "PortfolioId" + ], + "createOnlyProperties": [ + "/properties/PortfolioId", + "/properties/AcceptLanguage" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/cloudformationproduct.json b/internal/aws/cfn/schemas/aws/servicecatalog/cloudformationproduct.json new file mode 100644 index 00000000..63c3e1ec --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/cloudformationproduct.json @@ -0,0 +1,170 @@ +{ + "typeName": "AWS::ServiceCatalog::CloudFormationProduct", + "description": "Resource Type definition for AWS::ServiceCatalog::CloudFormationProduct", + "additionalProperties": false, + "properties": { + "Owner": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ProductName": { + "type": "string" + }, + "SupportEmail": { + "type": "string" + }, + "ProductType": { + "type": "string" + }, + "ProvisioningArtifactNames": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "ReplaceProvisioningArtifacts": { + "type": "boolean" + }, + "SupportDescription": { + "type": "string" + }, + "Distributor": { + "type": "string" + }, + "ProvisioningArtifactIds": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "SupportUrl": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "SourceConnection": { + "$ref": "#/definitions/SourceConnection" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ProvisioningArtifactParameters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ProvisioningArtifactProperties" + } + } + }, + "definitions": { + "CodeStarParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "ArtifactPath": { + "type": "string" + }, + "ConnectionArn": { + "type": "string" + }, + "Repository": { + "type": "string" + }, + "Branch": { + "type": "string" + } + }, + "required": [ + "ArtifactPath", + "Repository", + "Branch", + "ConnectionArn" + ] + }, + "ConnectionParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "CodeStar": { + "$ref": "#/definitions/CodeStarParameters" + } + } + }, + "ProvisioningArtifactProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Info": { + "type": "object" + }, + "DisableTemplateValidation": { + "type": "boolean" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "Info" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "SourceConnection": { + "type": "object", + "additionalProperties": false, + "properties": { + "ConnectionParameters": { + "$ref": "#/definitions/ConnectionParameters" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type", + "ConnectionParameters" + ] + } + }, + "required": [ + "Owner", + "Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/ProvisioningArtifactIds", + "/properties/Id", + "/properties/ProvisioningArtifactNames", + "/properties/ProductName" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/cloudformationprovisionedproduct.json b/internal/aws/cfn/schemas/aws/servicecatalog/cloudformationprovisionedproduct.json new file mode 100644 index 00000000..428a1917 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/cloudformationprovisionedproduct.json @@ -0,0 +1,230 @@ +{ + "typeName": "AWS::ServiceCatalog::CloudFormationProvisionedProduct", + "description": "Resource Schema for AWS::ServiceCatalog::CloudFormationProvisionedProduct", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-cloudformationprovisionedproduct.html", + "definitions": { + "ProvisioningPreferences": { + "type": "object", + "properties": { + "StackSetAccounts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^[0-9]{12}$" + } + }, + "StackSetFailureToleranceCount": { + "type": "integer", + "minimum": 0 + }, + "StackSetFailureTolerancePercentage": { + "type": "integer", + "minimum": 0, + "maximum": 100 + }, + "StackSetMaxConcurrencyCount": { + "type": "integer", + "minimum": 1 + }, + "StackSetMaxConcurrencyPercentage": { + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "StackSetOperationType": { + "type": "string", + "enum": [ + "CREATE", + "UPDATE", + "DELETE" + ] + }, + "StackSetRegions": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^[a-z]{2}-([a-z]+-)+[1-9]" + } + } + }, + "additionalProperties": false + }, + "ProvisioningParameter": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "Value": { + "type": "string", + "maxLength": 4096 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "OutputType": { + "type": "string" + } + }, + "properties": { + "AcceptLanguage": { + "type": "string", + "enum": [ + "en", + "jp", + "zh" + ] + }, + "NotificationArns": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + }, + "maxItems": 5 + }, + "PathId": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "PathName": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "ProductId": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "ProductName": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "ProvisionedProductName": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "ProvisioningArtifactId": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "ProvisioningArtifactName": { + "type": "string" + }, + "ProvisioningParameters": { + "type": "array", + "items": { + "$ref": "#/definitions/ProvisioningParameter" + } + }, + "ProvisioningPreferences": { + "$ref": "#/definitions/ProvisioningPreferences" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ProvisionedProductId": { + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "RecordId": { + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "CloudformationStackArn": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "Outputs": { + "description": "List of key-value pair outputs.", + "type": "object", + "patternProperties": { + "^[A-Za-z0-9]{1,64}$": { + "$ref": "#/definitions/OutputType" + } + }, + "additionalProperties": false, + "maxProperties": 100 + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/RecordId", + "/properties/CloudformationStackArn", + "/properties/Outputs", + "/properties/ProvisionedProductId" + ], + "createOnlyProperties": [ + "/properties/NotificationArns", + "/properties/ProvisionedProductName" + ], + "primaryIdentifier": [ + "/properties/ProvisionedProductId" + ], + "handlers": { + "create": { + "permissions": [ + "*" + ], + "timeoutInMinutes": 720 + }, + "read": { + "permissions": [ + "*" + ] + }, + "update": { + "permissions": [ + "*" + ], + "timeoutInMinutes": 720 + }, + "delete": { + "permissions": [ + "*" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/launchnotificationconstraint.json b/internal/aws/cfn/schemas/aws/servicecatalog/launchnotificationconstraint.json new file mode 100644 index 00000000..9e7a2710 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/launchnotificationconstraint.json @@ -0,0 +1,44 @@ +{ + "typeName": "AWS::ServiceCatalog::LaunchNotificationConstraint", + "description": "Resource Type definition for AWS::ServiceCatalog::LaunchNotificationConstraint", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "NotificationArns": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "ProductId": { + "type": "string" + } + }, + "required": [ + "NotificationArns", + "PortfolioId", + "ProductId" + ], + "createOnlyProperties": [ + "/properties/PortfolioId", + "/properties/ProductId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/launchroleconstraint.json b/internal/aws/cfn/schemas/aws/servicecatalog/launchroleconstraint.json new file mode 100644 index 00000000..6f6a57e9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/launchroleconstraint.json @@ -0,0 +1,42 @@ +{ + "typeName": "AWS::ServiceCatalog::LaunchRoleConstraint", + "description": "Resource Type definition for AWS::ServiceCatalog::LaunchRoleConstraint", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "LocalRoleName": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "ProductId": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "RoleArn": { + "type": "string" + } + }, + "required": [ + "PortfolioId", + "ProductId" + ], + "createOnlyProperties": [ + "/properties/PortfolioId", + "/properties/ProductId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/launchtemplateconstraint.json b/internal/aws/cfn/schemas/aws/servicecatalog/launchtemplateconstraint.json new file mode 100644 index 00000000..8c64516b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/launchtemplateconstraint.json @@ -0,0 +1,40 @@ +{ + "typeName": "AWS::ServiceCatalog::LaunchTemplateConstraint", + "description": "Resource Type definition for AWS::ServiceCatalog::LaunchTemplateConstraint", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "ProductId": { + "type": "string" + }, + "Rules": { + "type": "string" + } + }, + "required": [ + "PortfolioId", + "ProductId", + "Rules" + ], + "createOnlyProperties": [ + "/properties/PortfolioId", + "/properties/ProductId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/portfolio.json b/internal/aws/cfn/schemas/aws/servicecatalog/portfolio.json new file mode 100644 index 00000000..51e2fe31 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/portfolio.json @@ -0,0 +1,61 @@ +{ + "typeName": "AWS::ServiceCatalog::Portfolio", + "description": "Resource Type definition for AWS::ServiceCatalog::Portfolio", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "PortfolioName": { + "type": "string" + }, + "ProviderName": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "DisplayName": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "DisplayName", + "ProviderName" + ], + "readOnlyProperties": [ + "/properties/PortfolioName", + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/portfolioprincipalassociation.json b/internal/aws/cfn/schemas/aws/servicecatalog/portfolioprincipalassociation.json new file mode 100644 index 00000000..79be196f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/portfolioprincipalassociation.json @@ -0,0 +1,39 @@ +{ + "typeName": "AWS::ServiceCatalog::PortfolioPrincipalAssociation", + "description": "Resource Type definition for AWS::ServiceCatalog::PortfolioPrincipalAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "PrincipalARN": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "PrincipalType": { + "type": "string" + } + }, + "required": [ + "PortfolioId", + "PrincipalType", + "PrincipalARN" + ], + "createOnlyProperties": [ + "/properties/PortfolioId", + "/properties/AcceptLanguage", + "/properties/PrincipalARN", + "/properties/PrincipalType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/portfolioproductassociation.json b/internal/aws/cfn/schemas/aws/servicecatalog/portfolioproductassociation.json new file mode 100644 index 00000000..f1f9798a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/portfolioproductassociation.json @@ -0,0 +1,38 @@ +{ + "typeName": "AWS::ServiceCatalog::PortfolioProductAssociation", + "description": "Resource Type definition for AWS::ServiceCatalog::PortfolioProductAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SourcePortfolioId": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "ProductId": { + "type": "string" + } + }, + "required": [ + "PortfolioId", + "ProductId" + ], + "createOnlyProperties": [ + "/properties/SourcePortfolioId", + "/properties/PortfolioId", + "/properties/AcceptLanguage", + "/properties/ProductId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/portfolioshare.json b/internal/aws/cfn/schemas/aws/servicecatalog/portfolioshare.json new file mode 100644 index 00000000..7a009dbd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/portfolioshare.json @@ -0,0 +1,37 @@ +{ + "typeName": "AWS::ServiceCatalog::PortfolioShare", + "description": "Resource Type definition for AWS::ServiceCatalog::PortfolioShare", + "additionalProperties": false, + "properties": { + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "AccountId": { + "type": "string" + }, + "ShareTagOptions": { + "type": "boolean" + }, + "Id": { + "type": "string" + } + }, + "required": [ + "AccountId", + "PortfolioId" + ], + "createOnlyProperties": [ + "/properties/AcceptLanguage", + "/properties/AccountId", + "/properties/PortfolioId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/resourceupdateconstraint.json b/internal/aws/cfn/schemas/aws/servicecatalog/resourceupdateconstraint.json new file mode 100644 index 00000000..5ee32d49 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/resourceupdateconstraint.json @@ -0,0 +1,40 @@ +{ + "typeName": "AWS::ServiceCatalog::ResourceUpdateConstraint", + "description": "Resource Type definition for AWS::ServiceCatalog::ResourceUpdateConstraint", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "TagUpdateOnProvisionedProduct": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "ProductId": { + "type": "string" + } + }, + "required": [ + "TagUpdateOnProvisionedProduct", + "PortfolioId", + "ProductId" + ], + "createOnlyProperties": [ + "/properties/PortfolioId", + "/properties/ProductId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/serviceaction.json b/internal/aws/cfn/schemas/aws/servicecatalog/serviceaction.json new file mode 100644 index 00000000..35238cd3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/serviceaction.json @@ -0,0 +1,108 @@ +{ + "typeName": "AWS::ServiceCatalog::ServiceAction", + "description": "Resource Schema for AWS::ServiceCatalog::ServiceAction", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "DefinitionParameter": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 1000 + }, + "Value": { + "type": "string", + "maxLength": 4096 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "AcceptLanguage": { + "type": "string", + "enum": [ + "en", + "jp", + "zh" + ] + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "DefinitionType": { + "type": "string", + "enum": [ + "SSM_AUTOMATION" + ] + }, + "Definition": { + "type": "array", + "items": { + "$ref": "#/definitions/DefinitionParameter" + } + }, + "Description": { + "type": "string", + "maxLength": 1024 + }, + "Id": { + "type": "string", + "minLength": 1, + "maxLength": 100 + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Id" + ], + "writeOnlyProperties": [ + "/properties/AcceptLanguage" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "required": [ + "Name", + "DefinitionType", + "Definition" + ], + "handlers": { + "create": { + "permissions": [ + "servicecatalog:CreateServiceAction", + "ssm:DescribeDocument", + "iam:GetRole" + ] + }, + "read": { + "permissions": [ + "servicecatalog:DescribeServiceAction" + ] + }, + "update": { + "permissions": [ + "servicecatalog:UpdateServiceAction", + "iam:GetRole", + "ssm:DescribeDocument" + ] + }, + "delete": { + "permissions": [ + "servicecatalog:DeleteServiceAction" + ] + }, + "list": { + "permissions": [ + "servicecatalog:ListServiceActions" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/serviceactionassociation.json b/internal/aws/cfn/schemas/aws/servicecatalog/serviceactionassociation.json new file mode 100644 index 00000000..b3804324 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/serviceactionassociation.json @@ -0,0 +1,79 @@ +{ + "typeName": "AWS::ServiceCatalog::ServiceActionAssociation", + "description": "Resource Schema for AWS::ServiceCatalog::ServiceActionAssociation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog", + "properties": { + "ProductId": { + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{1,99}\\Z", + "minLength": 1, + "maxLength": 100 + }, + "ProvisioningArtifactId": { + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{1,99}\\Z", + "minLength": 1, + "maxLength": 100 + }, + "ServiceActionId": { + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{1,99}\\Z", + "minLength": 1, + "maxLength": 100 + } + }, + "additionalProperties": false, + "required": [ + "ProductId", + "ProvisioningArtifactId", + "ServiceActionId" + ], + "createOnlyProperties": [ + "/properties/ProductId", + "/properties/ProvisioningArtifactId", + "/properties/ServiceActionId" + ], + "primaryIdentifier": [ + "/properties/ProductId", + "/properties/ProvisioningArtifactId", + "/properties/ServiceActionId" + ], + "handlers": { + "create": { + "permissions": [ + "servicecatalog:AssociateServiceActionWithProvisioningArtifact", + "servicecatalog:ListServiceActionsForProvisioningArtifact" + ] + }, + "read": { + "permissions": [ + "servicecatalog:ListServiceActionsForProvisioningArtifact" + ] + }, + "delete": { + "permissions": [ + "servicecatalog:DisassociateServiceActionFromProvisioningArtifact", + "servicecatalog:ListServiceActionsForProvisioningArtifact" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ProductId": { + "$ref": "resource-schema.json#/properties/ProductId" + }, + "ProvisioningArtifactId": { + "$ref": "resource-schema.json#/properties/ProvisioningArtifactId" + } + }, + "required": [ + "ProductId", + "ProvisioningArtifactId" + ] + }, + "permissions": [ + "servicecatalog:ListServiceActionsForProvisioningArtifact" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/stacksetconstraint.json b/internal/aws/cfn/schemas/aws/servicecatalog/stacksetconstraint.json new file mode 100644 index 00000000..0fe203f5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/stacksetconstraint.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::ServiceCatalog::StackSetConstraint", + "description": "Resource Type definition for AWS::ServiceCatalog::StackSetConstraint", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "StackInstanceControl": { + "type": "string" + }, + "AcceptLanguage": { + "type": "string" + }, + "PortfolioId": { + "type": "string" + }, + "ProductId": { + "type": "string" + }, + "RegionList": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "AdminRole": { + "type": "string" + }, + "AccountList": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "ExecutionRole": { + "type": "string" + } + }, + "required": [ + "Description", + "StackInstanceControl", + "PortfolioId", + "ProductId", + "RegionList", + "AdminRole", + "AccountList", + "ExecutionRole" + ], + "createOnlyProperties": [ + "/properties/PortfolioId", + "/properties/ProductId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/tagoption.json b/internal/aws/cfn/schemas/aws/servicecatalog/tagoption.json new file mode 100644 index 00000000..0e4905f2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/tagoption.json @@ -0,0 +1,33 @@ +{ + "typeName": "AWS::ServiceCatalog::TagOption", + "description": "Resource Type definition for AWS::ServiceCatalog::TagOption", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Active": { + "type": "boolean" + }, + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ], + "createOnlyProperties": [ + "/properties/Value", + "/properties/Key" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalog/tagoptionassociation.json b/internal/aws/cfn/schemas/aws/servicecatalog/tagoptionassociation.json new file mode 100644 index 00000000..ad2fb074 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalog/tagoptionassociation.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::ServiceCatalog::TagOptionAssociation", + "description": "Resource Type definition for AWS::ServiceCatalog::TagOptionAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "TagOptionId": { + "type": "string" + }, + "ResourceId": { + "type": "string" + } + }, + "required": [ + "TagOptionId", + "ResourceId" + ], + "createOnlyProperties": [ + "/properties/TagOptionId", + "/properties/ResourceId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalogappregistry/application.json b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/application.json new file mode 100644 index 00000000..d2d7b451 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/application.json @@ -0,0 +1,122 @@ +{ + "typeName": "AWS::ServiceCatalogAppRegistry::Application", + "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::Application", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry.git", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-application.html", + "definitions": { + "Tags": { + "type": "object", + "patternProperties": { + "^[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256 + } + }, + "maxProperties": 50, + "additionalProperties": false + } + }, + "properties": { + "Id": { + "type": "string", + "pattern": "[a-z0-9]{26}" + }, + "Arn": { + "type": "string", + "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/applications/[a-z0-9]+" + }, + "Name": { + "type": "string", + "description": "The name of the application. ", + "minLength": 1, + "maxLength": 256, + "pattern": "\\w+" + }, + "Description": { + "type": "string", + "description": "The description of the application. ", + "maxLength": 1024 + }, + "Tags": { + "$ref": "#/definitions/Tags" + }, + "ApplicationTagKey": { + "type": "string", + "description": "The key of the AWS application tag, which is awsApplication. Applications created before 11/13/2023 or applications without the AWS application tag resource group return no value.", + "maxLength": 128, + "pattern": "\\w+" + }, + "ApplicationTagValue": { + "type": "string", + "description": "The value of the AWS application tag, which is the identifier of an associated resource. Applications created before 11/13/2023 or applications without the AWS application tag resource group return no value. ", + "maxLength": 256, + "pattern": "\\[a-zA-Z0-9_-:/]+" + }, + "ApplicationName": { + "type": "string", + "description": "The name of the application. ", + "minLength": 1, + "maxLength": 256, + "pattern": "\\w+" + } + }, + "additionalProperties": false, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn", + "/properties/ApplicationName", + "/properties/ApplicationTagKey", + "/properties/ApplicationTagValue" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ] + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "servicecatalog:CreateApplication", + "servicecatalog:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "servicecatalog:GetApplication" + ] + }, + "update": { + "permissions": [ + "servicecatalog:GetApplication", + "servicecatalog:ListTagsForResource", + "servicecatalog:TagResource", + "servicecatalog:UntagResource", + "servicecatalog:UpdateApplication", + "iam:CreateServiceLinkedRole" + ] + }, + "delete": { + "permissions": [ + "servicecatalog:DeleteApplication" + ] + }, + "list": { + "permissions": [ + "servicecatalog:ListApplications" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroup.json b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroup.json new file mode 100644 index 00000000..945ec26b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroup.json @@ -0,0 +1,102 @@ +{ + "typeName": "AWS::ServiceCatalogAppRegistry::AttributeGroup", + "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::AttributeGroup.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry.git", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-attributegroup.html", + "definitions": { + "Tags": { + "type": "object", + "patternProperties": { + "^[a-zA-Z+-=._:/]+$": { + "type": "string", + "maxLength": 256 + } + }, + "maxProperties": 50, + "additionalProperties": false + } + }, + "properties": { + "Id": { + "type": "string", + "pattern": "[a-z0-9]{12}" + }, + "Arn": { + "type": "string", + "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/attribute-groups/[a-z0-9]+" + }, + "Name": { + "type": "string", + "description": "The name of the attribute group. ", + "minLength": 1, + "maxLength": 256, + "pattern": "\\w+" + }, + "Description": { + "type": "string", + "description": "The description of the attribute group. ", + "maxLength": 1024 + }, + "Attributes": { + "type": "object" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "Attributes" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "additionalIdentifiers": [ + [ + "/properties/Name" + ] + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "servicecatalog:CreateAttributeGroup", + "servicecatalog:TagResource" + ] + }, + "read": { + "permissions": [ + "servicecatalog:GetAttributeGroup" + ] + }, + "update": { + "permissions": [ + "servicecatalog:GetAttributeGroup", + "servicecatalog:UpdateAttributeGroup", + "servicecatalog:ListTagsForResource", + "servicecatalog:TagResource", + "servicecatalog:UntagResource" + ] + }, + "delete": { + "permissions": [ + "servicecatalog:DeleteAttributeGroup" + ] + }, + "list": { + "permissions": [ + "servicecatalog:ListAttributeGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroupassociation.json b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroupassociation.json new file mode 100644 index 00000000..c53dd1fa --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/attributegroupassociation.json @@ -0,0 +1,85 @@ +{ + "typeName": "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation", + "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-attributegroupassociation.html", + "properties": { + "Application": { + "type": "string", + "description": "The name or the Id of the Application.", + "minLength": 1, + "maxLength": 256, + "pattern": "\\w+|[a-z0-9]{12}" + }, + "AttributeGroup": { + "type": "string", + "description": "The name or the Id of the AttributeGroup.", + "minLength": 1, + "maxLength": 256, + "pattern": "\\w+|[a-z0-9]{12}" + }, + "ApplicationArn": { + "type": "string", + "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/applications/[a-z0-9]+" + }, + "AttributeGroupArn": { + "type": "string", + "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/attribute-groups/[a-z0-9]+" + } + }, + "additionalProperties": false, + "required": [ + "Application", + "AttributeGroup" + ], + "readOnlyProperties": [ + "/properties/ApplicationArn", + "/properties/AttributeGroupArn" + ], + "createOnlyProperties": [ + "/properties/Application", + "/properties/AttributeGroup" + ], + "primaryIdentifier": [ + "/properties/ApplicationArn", + "/properties/AttributeGroupArn" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "servicecatalog:AssociateAttributeGroup" + ] + }, + "read": { + "permissions": [ + "servicecatalog:ListAttributeGroupsForApplication" + ] + }, + "delete": { + "permissions": [ + "servicecatalog:DisassociateAttributeGroup" + ] + }, + "list": { + "permissions": [ + "servicecatalog:ListAttributeGroupsForApplication" + ], + "handlerSchema": { + "properties": { + "ApplicationArn": { + "$ref": "resource-schema.json#/properties/ApplicationArn" + } + }, + "required": [ + "ApplicationArn" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicecatalogappregistry/resourceassociation.json b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/resourceassociation.json new file mode 100644 index 00000000..b3f9c6c9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicecatalogappregistry/resourceassociation.json @@ -0,0 +1,94 @@ +{ + "typeName": "AWS::ServiceCatalogAppRegistry::ResourceAssociation", + "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::ResourceAssociation", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-resourceassociation.html", + "properties": { + "Application": { + "type": "string", + "description": "The name or the Id of the Application.", + "minLength": 1, + "maxLength": 256, + "pattern": "\\w+|[a-z0-9]{12}" + }, + "Resource": { + "type": "string", + "description": "The name or the Id of the Resource.", + "pattern": "\\w+|arn:aws[-a-z]*:cloudformation:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:stack/[a-zA-Z][-A-Za-z0-9]{0,127}/[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}" + }, + "ResourceType": { + "type": "string", + "description": "The type of the CFN Resource for now it's enum CFN_STACK.", + "enum": [ + "CFN_STACK" + ] + }, + "ApplicationArn": { + "type": "string", + "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/applications/[a-z0-9]+" + }, + "ResourceArn": { + "type": "string", + "pattern": "arn:aws[-a-z]*:cloudformation:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:stack/[a-zA-Z][-A-Za-z0-9]{0,127}/[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}" + } + }, + "additionalProperties": false, + "required": [ + "Application", + "Resource", + "ResourceType" + ], + "readOnlyProperties": [ + "/properties/ApplicationArn", + "/properties/ResourceArn" + ], + "createOnlyProperties": [ + "/properties/Application", + "/properties/Resource", + "/properties/ResourceType" + ], + "primaryIdentifier": [ + "/properties/ApplicationArn", + "/properties/ResourceArn", + "/properties/ResourceType" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "servicecatalog:AssociateResource", + "cloudformation:DescribeStacks" + ] + }, + "read": { + "permissions": [ + "servicecatalog:ListAssociatedResources" + ] + }, + "delete": { + "permissions": [ + "servicecatalog:DisassociateResource" + ] + }, + "list": { + "permissions": [ + "servicecatalog:ListAssociatedResources" + ], + "handlerSchema": { + "properties": { + "ApplicationArn": { + "$ref": "resource-schema.json#/properties/ApplicationArn" + } + }, + "required": [ + "ApplicationArn" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/servicediscovery/httpnamespace.json b/internal/aws/cfn/schemas/aws/servicediscovery/httpnamespace.json new file mode 100644 index 00000000..0cbd5674 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicediscovery/httpnamespace.json @@ -0,0 +1,57 @@ +{ + "typeName": "AWS::ServiceDiscovery::HttpNamespace", + "description": "Resource Type definition for AWS::ServiceDiscovery::HttpNamespace", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicediscovery/instance.json b/internal/aws/cfn/schemas/aws/servicediscovery/instance.json new file mode 100644 index 00000000..06d3ee84 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicediscovery/instance.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::ServiceDiscovery::Instance", + "description": "Resource Type definition for AWS::ServiceDiscovery::Instance", + "additionalProperties": false, + "properties": { + "InstanceAttributes": { + "type": "object" + }, + "InstanceId": { + "type": "string" + }, + "ServiceId": { + "type": "string" + } + }, + "required": [ + "InstanceAttributes", + "ServiceId" + ], + "createOnlyProperties": [ + "/properties/InstanceId", + "/properties/ServiceId" + ], + "primaryIdentifier": [ + "/properties/InstanceId" + ], + "readOnlyProperties": [ + "/properties/InstanceId" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicediscovery/privatednsnamespace.json b/internal/aws/cfn/schemas/aws/servicediscovery/privatednsnamespace.json new file mode 100644 index 00000000..2cc7d0de --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicediscovery/privatednsnamespace.json @@ -0,0 +1,96 @@ +{ + "typeName": "AWS::ServiceDiscovery::PrivateDnsNamespace", + "description": "Resource Type definition for AWS::ServiceDiscovery::PrivateDnsNamespace", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + }, + "Vpc": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Properties": { + "$ref": "#/definitions/Properties" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "PrivateDnsPropertiesMutable": { + "type": "object", + "additionalProperties": false, + "properties": { + "SOA": { + "$ref": "#/definitions/SOA" + } + } + }, + "SOA": { + "type": "object", + "additionalProperties": false, + "properties": { + "TTL": { + "type": "number" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Properties": { + "type": "object", + "additionalProperties": false, + "properties": { + "DnsProperties": { + "$ref": "#/definitions/PrivateDnsPropertiesMutable" + } + } + } + }, + "required": [ + "Vpc", + "Name" + ], + "createOnlyProperties": [ + "/properties/Vpc", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/HostedZoneId", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicediscovery/publicdnsnamespace.json b/internal/aws/cfn/schemas/aws/servicediscovery/publicdnsnamespace.json new file mode 100644 index 00000000..2ce0e99f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicediscovery/publicdnsnamespace.json @@ -0,0 +1,91 @@ +{ + "typeName": "AWS::ServiceDiscovery::PublicDnsNamespace", + "description": "Resource Type definition for AWS::ServiceDiscovery::PublicDnsNamespace", + "additionalProperties": false, + "properties": { + "Description": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Properties": { + "$ref": "#/definitions/Properties" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "SOA": { + "type": "object", + "additionalProperties": false, + "properties": { + "TTL": { + "type": "number" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Properties": { + "type": "object", + "additionalProperties": false, + "properties": { + "DnsProperties": { + "$ref": "#/definitions/PublicDnsPropertiesMutable" + } + } + }, + "PublicDnsPropertiesMutable": { + "type": "object", + "additionalProperties": false, + "properties": { + "SOA": { + "$ref": "#/definitions/SOA" + } + } + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/HostedZoneId", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/servicediscovery/service.json b/internal/aws/cfn/schemas/aws/servicediscovery/service.json new file mode 100644 index 00000000..d964a8ac --- /dev/null +++ b/internal/aws/cfn/schemas/aws/servicediscovery/service.json @@ -0,0 +1,137 @@ +{ + "typeName": "AWS::ServiceDiscovery::Service", + "description": "Resource Type definition for AWS::ServiceDiscovery::Service", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "HealthCheckCustomConfig": { + "$ref": "#/definitions/HealthCheckCustomConfig" + }, + "DnsConfig": { + "$ref": "#/definitions/DnsConfig" + }, + "Id": { + "type": "string" + }, + "NamespaceId": { + "type": "string" + }, + "HealthCheckConfig": { + "$ref": "#/definitions/HealthCheckConfig" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "HealthCheckCustomConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "FailureThreshold": { + "type": "number" + } + } + }, + "DnsConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "DnsRecords": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/DnsRecord" + } + }, + "RoutingPolicy": { + "type": "string" + }, + "NamespaceId": { + "type": "string" + } + }, + "required": [ + "DnsRecords" + ] + }, + "HealthCheckConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "ResourcePath": { + "type": "string" + }, + "FailureThreshold": { + "type": "number" + } + }, + "required": [ + "Type" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "DnsRecord": { + "type": "object", + "additionalProperties": false, + "properties": { + "TTL": { + "type": "number" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type", + "TTL" + ] + } + }, + "createOnlyProperties": [ + "/properties/HealthCheckCustomConfig", + "/properties/Name", + "/properties/Type", + "/properties/NamespaceId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ses/configurationset.json b/internal/aws/cfn/schemas/aws/ses/configurationset.json new file mode 100644 index 00000000..8988b84f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/configurationset.json @@ -0,0 +1,184 @@ +{ + "typeName": "AWS::SES::ConfigurationSet", + "description": "Resource schema for AWS::SES::ConfigurationSet.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git", + "definitions": { + "TrackingOptions": { + "description": "An object that defines the open and click tracking options for emails that you send using the configuration set.", + "type": "object", + "additionalProperties": false, + "properties": { + "CustomRedirectDomain": { + "type": "string", + "description": "The domain to use for tracking open and click events." + } + } + }, + "DeliveryOptions": { + "description": "An object that defines the dedicated IP pool that is used to send emails that you send using the configuration set.", + "type": "object", + "additionalProperties": false, + "properties": { + "TlsPolicy": { + "type": "string", + "description": "Specifies whether messages that use the configuration set are required to use Transport Layer Security (TLS). If the value is Require , messages are only delivered if a TLS connection can be established. If the value is Optional , messages can be delivered in plain text if a TLS connection can't be established.", + "pattern": "REQUIRE|OPTIONAL" + }, + "SendingPoolName": { + "type": "string", + "description": "The name of the dedicated IP pool to associate with the configuration set." + } + } + }, + "ReputationOptions": { + "description": "An object that defines whether or not Amazon SES collects reputation metrics for the emails that you send that use the configuration set.", + "type": "object", + "additionalProperties": false, + "properties": { + "ReputationMetricsEnabled": { + "type": "boolean", + "description": "If true , tracking of reputation metrics is enabled for the configuration set. If false , tracking of reputation metrics is disabled for the configuration set.", + "pattern": "true|false" + } + } + }, + "SendingOptions": { + "description": "An object that defines whether or not Amazon SES can send email that you send using the configuration set.", + "type": "object", + "additionalProperties": false, + "properties": { + "SendingEnabled": { + "type": "boolean", + "pattern": "true|false" + } + } + }, + "SuppressionOptions": { + "description": "An object that contains information about the suppression list preferences for your account.", + "type": "object", + "additionalProperties": false, + "properties": { + "SuppressedReasons": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "A list that contains the reasons that email addresses are automatically added to the suppression list for your account.", + "items": { + "type": "string", + "description": "The reason that the address was added to the suppression list for your account", + "pattern": "BOUNCE|COMPLAINT" + } + } + } + }, + "DashboardOptions": { + "type": "object", + "description": "Preferences regarding the Dashboard feature.", + "additionalProperties": false, + "properties": { + "EngagementMetrics": { + "type": "string", + "description": "Whether emails sent with this configuration set have engagement tracking enabled.", + "pattern": "ENABLED|DISABLED" + } + }, + "required": [ + "EngagementMetrics" + ] + }, + "GuardianOptions": { + "type": "object", + "description": "Preferences regarding the Guardian feature.", + "additionalProperties": false, + "properties": { + "OptimizedSharedDelivery": { + "type": "string", + "description": "Whether emails sent with this configuration set have optimized delivery algorithm enabled.", + "pattern": "ENABLED|DISABLED" + } + }, + "required": [ + "OptimizedSharedDelivery" + ] + }, + "VdmOptions": { + "description": "An object that contains Virtual Deliverability Manager (VDM) settings for this configuration set.", + "type": "object", + "additionalProperties": false, + "properties": { + "DashboardOptions": { + "$ref": "#/definitions/DashboardOptions" + }, + "GuardianOptions": { + "$ref": "#/definitions/GuardianOptions" + } + } + } + }, + "properties": { + "Name": { + "description": "The name of the configuration set.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]{1,64}$" + }, + "TrackingOptions": { + "$ref": "#/definitions/TrackingOptions" + }, + "DeliveryOptions": { + "$ref": "#/definitions/DeliveryOptions" + }, + "ReputationOptions": { + "$ref": "#/definitions/ReputationOptions" + }, + "SendingOptions": { + "$ref": "#/definitions/SendingOptions" + }, + "SuppressionOptions": { + "$ref": "#/definitions/SuppressionOptions" + }, + "VdmOptions": { + "$ref": "#/definitions/VdmOptions" + } + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "taggable": false, + "additionalProperties": false, + "handlers": { + "create": { + "permissions": [ + "ses:CreateConfigurationSet" + ] + }, + "read": { + "permissions": [ + "ses:GetConfigurationSet", + "ses:DescribeConfigurationSet" + ] + }, + "update": { + "permissions": [ + "ses:PutConfigurationSetTrackingOptions", + "ses:PutConfigurationSetDeliveryOptions", + "ses:PutConfigurationSetReputationOptions", + "ses:PutConfigurationSetSendingOptions", + "ses:PutConfigurationSetSuppressionOptions", + "ses:PutConfigurationSetVdmOptions" + ] + }, + "delete": { + "permissions": [ + "ses:DeleteConfigurationSet" + ] + }, + "list": { + "permissions": [ + "ses:ListConfigurationSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ses/configurationseteventdestination.json b/internal/aws/cfn/schemas/aws/ses/configurationseteventdestination.json new file mode 100644 index 00000000..c27ec0a9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/configurationseteventdestination.json @@ -0,0 +1,181 @@ +{ + "typeName": "AWS::SES::ConfigurationSetEventDestination", + "description": "Resource Type definition for AWS::SES::ConfigurationSetEventDestination", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git", + "definitions": { + "EventDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "The name of the event destination set.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]{0,64}$" + }, + "Enabled": { + "description": "Sets whether Amazon SES publishes events to this destination when you send an email with the associated configuration set. Set to true to enable publishing to this destination; set to false to prevent publishing to this destination. The default value is false. ", + "type": "boolean" + }, + "MatchingEventTypes": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "The type of email sending events, send, reject, bounce, complaint, delivery, open, click, renderingFailure, deliveryDelay, and subscription.", + "items": { + "type": "string" + } + }, + "CloudWatchDestination": { + "description": "An object that contains the names, default values, and sources of the dimensions associated with an Amazon CloudWatch event destination.", + "$ref": "#/definitions/CloudWatchDestination" + }, + "KinesisFirehoseDestination": { + "description": "An object that contains the delivery stream ARN and the IAM role ARN associated with an Amazon Kinesis Firehose event destination.", + "$ref": "#/definitions/KinesisFirehoseDestination" + }, + "SnsDestination": { + "description": "An object that contains SNS topic ARN associated event destination.", + "$ref": "#/definitions/SnsDestination" + } + }, + "required": [ + "MatchingEventTypes" + ] + }, + "SnsDestination": { + "type": "object", + "additionalProperties": false, + "description": "An object that contains SNS topic ARN associated event destination.", + "properties": { + "TopicARN": { + "type": "string", + "minLength": 36, + "maxLength": 1024, + "pattern": "^arn:aws[a-z0-9-]*:sns:[a-z0-9-]+:\\d{12}:[^:]+$" + } + }, + "required": [ + "TopicARN" + ] + }, + "KinesisFirehoseDestination": { + "type": "object", + "additionalProperties": false, + "description": "An object that contains the delivery stream ARN and the IAM role ARN associated with an Amazon Kinesis Firehose event destination.", + "properties": { + "IAMRoleARN": { + "description": "The ARN of the IAM role under which Amazon SES publishes email sending events to the Amazon Kinesis Firehose stream.", + "type": "string" + }, + "DeliveryStreamARN": { + "description": "The ARN of the Amazon Kinesis Firehose stream that email sending events should be published to.", + "type": "string" + } + }, + "required": [ + "IAMRoleARN", + "DeliveryStreamARN" + ] + }, + "CloudWatchDestination": { + "type": "object", + "additionalProperties": false, + "description": "An object that contains the names, default values, and sources of the dimensions associated with an Amazon CloudWatch event destination.", + "properties": { + "DimensionConfigurations": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "description": "A list of dimensions upon which to categorize your emails when you publish email sending events to Amazon CloudWatch.", + "items": { + "$ref": "#/definitions/DimensionConfiguration" + } + } + } + }, + "DimensionConfiguration": { + "type": "object", + "additionalProperties": false, + "description": "A list of dimensions upon which to categorize your emails when you publish email sending events to Amazon CloudWatch.", + "properties": { + "DimensionValueSource": { + "description": "The place where Amazon SES finds the value of a dimension to publish to Amazon CloudWatch. To use the message tags that you specify using an X-SES-MESSAGE-TAGS header or a parameter to the SendEmail/SendRawEmail API, specify messageTag. To use your own email headers, specify emailHeader. To put a custom tag on any link included in your email, specify linkTag.", + "type": "string" + }, + "DefaultDimensionValue": { + "description": "The default value of the dimension that is published to Amazon CloudWatch if you do not provide the value of the dimension when you send an email.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]{1,256}$", + "maxLength": 256, + "minLength": 1 + }, + "DimensionName": { + "description": "The name of an Amazon CloudWatch dimension associated with an email sending metric.", + "type": "string", + "pattern": "^[a-zA-Z0-9_:-]{1,256}$", + "maxLength": 256, + "minLength": 1 + } + }, + "required": [ + "DimensionValueSource", + "DefaultDimensionValue", + "DimensionName" + ] + } + }, + "properties": { + "Id": { + "type": "string" + }, + "ConfigurationSetName": { + "description": "The name of the configuration set that contains the event destination.", + "type": "string" + }, + "EventDestination": { + "description": "The event destination object.", + "$ref": "#/definitions/EventDestination" + } + }, + "additionalProperties": false, + "taggable": false, + "required": [ + "ConfigurationSetName", + "EventDestination" + ], + "createOnlyProperties": [ + "/properties/ConfigurationSetName" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "ses:CreateConfigurationSetEventDestination", + "ses:GetConfigurationSetEventDestinations", + "ses:DescribeConfigurationSet" + ] + }, + "update": { + "permissions": [ + "ses:UpdateConfigurationSetEventDestination", + "ses:GetConfigurationSetEventDestinations" + ] + }, + "delete": { + "permissions": [ + "ses:DeleteConfigurationSetEventDestination" + ] + }, + "read": { + "permissions": [ + "ses:GetConfigurationSetEventDestinations", + "ses:DescribeConfigurationSet" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ses/contactlist.json b/internal/aws/cfn/schemas/aws/ses/contactlist.json new file mode 100644 index 00000000..0088e81b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/contactlist.json @@ -0,0 +1,126 @@ +{ + "typeName": "AWS::SES::ContactList", + "description": "Resource schema for AWS::SES::ContactList.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Topic": { + "type": "object", + "properties": { + "TopicName": { + "description": "The name of the topic.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]{1,64}$" + }, + "DisplayName": { + "description": "The display name of the topic.", + "type": "string", + "minLength": 0, + "maxLength": 128 + }, + "Description": { + "description": "The description of the topic.", + "type": "string", + "minLength": 0, + "maxLength": 500 + }, + "DefaultSubscriptionStatus": { + "type": "string" + } + }, + "required": [ + "TopicName", + "DisplayName", + "DefaultSubscriptionStatus" + ], + "additionalProperties": false + } + }, + "properties": { + "ContactListName": { + "description": "The name of the contact list.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]{1,64}$" + }, + "Description": { + "description": "The description of the contact list.", + "type": "string", + "maxLength": 500 + }, + "Topics": { + "description": "The topics associated with the contact list.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Topic" + }, + "minItems": 0, + "maxItems": 20 + }, + "Tags": { + "description": "The tags (keys and values) associated with the contact list.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 50 + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/ContactListName" + ], + "primaryIdentifier": [ + "/properties/ContactListName" + ], + "handlers": { + "create": { + "permissions": [ + "ses:CreateContactList" + ] + }, + "read": { + "permissions": [ + "ses:GetContactList" + ] + }, + "update": { + "permissions": [ + "ses:UpdateContactList", + "ses:UntagResource", + "ses:TagResource" + ] + }, + "delete": { + "permissions": [ + "ses:DeleteContactList" + ] + }, + "list": { + "permissions": [ + "ses:ListContactLists" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ses/dedicatedippool.json b/internal/aws/cfn/schemas/aws/ses/dedicatedippool.json new file mode 100644 index 00000000..48b340a4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/dedicatedippool.json @@ -0,0 +1,58 @@ +{ + "typeName": "AWS::SES::DedicatedIpPool", + "description": "Resource Type definition for AWS::SES::DedicatedIpPool", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git", + "properties": { + "PoolName": { + "type": "string", + "description": "The name of the dedicated IP pool.", + "pattern": "^[a-z0-9_-]{0,64}$" + }, + "ScalingMode": { + "type": "string", + "description": "Specifies whether the dedicated IP pool is managed or not. The default value is STANDARD.", + "pattern": "^(STANDARD|MANAGED)$" + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/PoolName" + ], + "conditionalCreateOnlyProperties": [ + "/properties/ScalingMode" + ], + "primaryIdentifier": [ + "/properties/PoolName" + ], + "handlers": { + "create": { + "permissions": [ + "ses:CreateDedicatedIpPool", + "ses:GetDedicatedIpPool", + "ses:GetDedicatedIps" + ] + }, + "read": { + "permissions": [ + "ses:GetDedicatedIpPool", + "ses:GetDedicatedIps" + ] + }, + "update": { + "permissions": [ + "ses:PutDedicatedIpPoolScalingAttributes", + "ses:GetDedicatedIpPool" + ] + }, + "delete": { + "permissions": [ + "ses:DeleteDedicatedIpPool" + ] + }, + "list": { + "permissions": [ + "ses:ListDedicatedIpPools" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ses/emailidentity.json b/internal/aws/cfn/schemas/aws/ses/emailidentity.json new file mode 100644 index 00000000..8d952ff0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/emailidentity.json @@ -0,0 +1,173 @@ +{ + "typeName": "AWS::SES::EmailIdentity", + "description": "Resource Type definition for AWS::SES::EmailIdentity", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git", + "additionalProperties": false, + "properties": { + "EmailIdentity": { + "type": "string", + "description": "The email address or domain to verify." + }, + "ConfigurationSetAttributes": { + "$ref": "#/definitions/ConfigurationSetAttributes" + }, + "DkimSigningAttributes": { + "$ref": "#/definitions/DkimSigningAttributes" + }, + "DkimAttributes": { + "$ref": "#/definitions/DkimAttributes" + }, + "MailFromAttributes": { + "$ref": "#/definitions/MailFromAttributes" + }, + "FeedbackAttributes": { + "$ref": "#/definitions/FeedbackAttributes" + }, + "DkimDNSTokenName1": { + "type": "string" + }, + "DkimDNSTokenName2": { + "type": "string" + }, + "DkimDNSTokenName3": { + "type": "string" + }, + "DkimDNSTokenValue1": { + "type": "string" + }, + "DkimDNSTokenValue2": { + "type": "string" + }, + "DkimDNSTokenValue3": { + "type": "string" + } + }, + "definitions": { + "DkimSigningAttributes": { + "type": "object", + "additionalProperties": false, + "description": "If your request includes this object, Amazon SES configures the identity to use Bring Your Own DKIM (BYODKIM) for DKIM authentication purposes, or, configures the key length to be used for Easy DKIM.", + "properties": { + "DomainSigningSelector": { + "type": "string", + "description": "[Bring Your Own DKIM] A string that's used to identify a public key in the DNS configuration for a domain." + }, + "DomainSigningPrivateKey": { + "type": "string", + "description": "[Bring Your Own DKIM] A private key that's used to generate a DKIM signature. The private key must use 1024 or 2048-bit RSA encryption, and must be encoded using base64 encoding." + }, + "NextSigningKeyLength": { + "type": "string", + "description": "[Easy DKIM] The key length of the future DKIM key pair to be generated. This can be changed at most once per day.", + "pattern": "RSA_1024_BIT|RSA_2048_BIT" + } + } + }, + "ConfigurationSetAttributes": { + "type": "object", + "additionalProperties": false, + "description": "Used to associate a configuration set with an email identity.", + "properties": { + "ConfigurationSetName": { + "type": "string", + "description": "The configuration set to use by default when sending from this identity. Note that any configuration set defined in the email sending request takes precedence." + } + } + }, + "DkimAttributes": { + "type": "object", + "additionalProperties": false, + "description": "Used to enable or disable DKIM authentication for an email identity.", + "properties": { + "SigningEnabled": { + "type": "boolean", + "description": "Sets the DKIM signing configuration for the identity. When you set this value true, then the messages that are sent from the identity are signed using DKIM. If you set this value to false, your messages are sent without DKIM signing." + } + } + }, + "MailFromAttributes": { + "type": "object", + "additionalProperties": false, + "description": "Used to enable or disable the custom Mail-From domain configuration for an email identity.", + "properties": { + "MailFromDomain": { + "type": "string", + "description": "The custom MAIL FROM domain that you want the verified identity to use" + }, + "BehaviorOnMxFailure": { + "type": "string", + "description": "The action to take if the required MX record isn't found when you send an email. When you set this value to UseDefaultValue , the mail is sent using amazonses.com as the MAIL FROM domain. When you set this value to RejectMessage , the Amazon SES API v2 returns a MailFromDomainNotVerified error, and doesn't attempt to deliver the email.", + "pattern": "USE_DEFAULT_VALUE|REJECT_MESSAGE" + } + } + }, + "FeedbackAttributes": { + "type": "object", + "additionalProperties": false, + "description": "Used to enable or disable feedback forwarding for an identity.", + "properties": { + "EmailForwardingEnabled": { + "type": "boolean", + "description": "If the value is true, you receive email notifications when bounce or complaint events occur" + } + } + } + }, + "required": [ + "EmailIdentity" + ], + "readOnlyProperties": [ + "/properties/DkimDNSTokenName1", + "/properties/DkimDNSTokenName2", + "/properties/DkimDNSTokenName3", + "/properties/DkimDNSTokenValue1", + "/properties/DkimDNSTokenValue2", + "/properties/DkimDNSTokenValue3" + ], + "createOnlyProperties": [ + "/properties/EmailIdentity" + ], + "primaryIdentifier": [ + "/properties/EmailIdentity" + ], + "writeOnlyProperties": [ + "/properties/DkimSigningAttributes/DomainSigningSelector", + "/properties/DkimSigningAttributes/DomainSigningPrivateKey" + ], + "handlers": { + "create": { + "permissions": [ + "ses:CreateEmailIdentity", + "ses:PutEmailIdentityMailFromAttributes", + "ses:PutEmailIdentityFeedbackAttributes", + "ses:PutEmailIdentityDkimAttributes", + "ses:GetEmailIdentity" + ] + }, + "read": { + "permissions": [ + "ses:GetEmailIdentity" + ] + }, + "update": { + "permissions": [ + "ses:PutEmailIdentityMailFromAttributes", + "ses:PutEmailIdentityFeedbackAttributes", + "ses:PutEmailIdentityConfigurationSetAttributes", + "ses:PutEmailIdentityDkimSigningAttributes", + "ses:PutEmailIdentityDkimAttributes", + "ses:GetEmailIdentity" + ] + }, + "delete": { + "permissions": [ + "ses:DeleteEmailIdentity" + ] + }, + "list": { + "permissions": [ + "ses:ListEmailIdentities" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ses/receiptfilter.json b/internal/aws/cfn/schemas/aws/ses/receiptfilter.json new file mode 100644 index 00000000..19ed592e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/receiptfilter.json @@ -0,0 +1,58 @@ +{ + "typeName": "AWS::SES::ReceiptFilter", + "description": "Resource Type definition for AWS::SES::ReceiptFilter", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Filter": { + "$ref": "#/definitions/Filter" + } + }, + "definitions": { + "Filter": { + "type": "object", + "additionalProperties": false, + "properties": { + "IpFilter": { + "$ref": "#/definitions/IpFilter" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "IpFilter" + ] + }, + "IpFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "Policy": { + "type": "string" + }, + "Cidr": { + "type": "string" + } + }, + "required": [ + "Policy", + "Cidr" + ] + } + }, + "required": [ + "Filter" + ], + "createOnlyProperties": [ + "/properties/Filter" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ses/receiptrule.json b/internal/aws/cfn/schemas/aws/ses/receiptrule.json new file mode 100644 index 00000000..63e91256 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/receiptrule.json @@ -0,0 +1,216 @@ +{ + "typeName": "AWS::SES::ReceiptRule", + "description": "Resource Type definition for AWS::SES::ReceiptRule", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "After": { + "type": "string" + }, + "Rule": { + "$ref": "#/definitions/Rule" + }, + "RuleSetName": { + "type": "string" + } + }, + "definitions": { + "Rule": { + "type": "object", + "additionalProperties": false, + "properties": { + "ScanEnabled": { + "type": "boolean" + }, + "Recipients": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Actions": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Action" + } + }, + "Enabled": { + "type": "boolean" + }, + "Name": { + "type": "string" + }, + "TlsPolicy": { + "type": "string" + } + } + }, + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "BounceAction": { + "$ref": "#/definitions/BounceAction" + }, + "S3Action": { + "$ref": "#/definitions/S3Action" + }, + "StopAction": { + "$ref": "#/definitions/StopAction" + }, + "SNSAction": { + "$ref": "#/definitions/SNSAction" + }, + "WorkmailAction": { + "$ref": "#/definitions/WorkmailAction" + }, + "AddHeaderAction": { + "$ref": "#/definitions/AddHeaderAction" + }, + "LambdaAction": { + "$ref": "#/definitions/LambdaAction" + } + } + }, + "SNSAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "TopicArn": { + "type": "string" + }, + "Encoding": { + "type": "string" + } + } + }, + "WorkmailAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "TopicArn": { + "type": "string" + }, + "OrganizationArn": { + "type": "string" + } + }, + "required": [ + "OrganizationArn" + ] + }, + "StopAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Scope": { + "type": "string" + }, + "TopicArn": { + "type": "string" + } + }, + "required": [ + "Scope" + ] + }, + "AddHeaderAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "HeaderValue": { + "type": "string" + }, + "HeaderName": { + "type": "string" + } + }, + "required": [ + "HeaderName", + "HeaderValue" + ] + }, + "BounceAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Sender": { + "type": "string" + }, + "SmtpReplyCode": { + "type": "string" + }, + "Message": { + "type": "string" + }, + "TopicArn": { + "type": "string" + }, + "StatusCode": { + "type": "string" + } + }, + "required": [ + "Sender", + "SmtpReplyCode", + "Message" + ] + }, + "LambdaAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "FunctionArn": { + "type": "string" + }, + "TopicArn": { + "type": "string" + }, + "InvocationType": { + "type": "string" + } + }, + "required": [ + "FunctionArn" + ] + }, + "S3Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "BucketName": { + "type": "string" + }, + "KmsKeyArn": { + "type": "string" + }, + "TopicArn": { + "type": "string" + }, + "ObjectKeyPrefix": { + "type": "string" + } + }, + "required": [ + "BucketName" + ] + } + }, + "required": [ + "RuleSetName", + "Rule" + ], + "createOnlyProperties": [ + "/properties/RuleSetName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ses/receiptruleset.json b/internal/aws/cfn/schemas/aws/ses/receiptruleset.json new file mode 100644 index 00000000..f5bb1b10 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/receiptruleset.json @@ -0,0 +1,22 @@ +{ + "typeName": "AWS::SES::ReceiptRuleSet", + "description": "Resource Type definition for AWS::SES::ReceiptRuleSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "RuleSetName": { + "type": "string" + } + }, + "createOnlyProperties": [ + "/properties/RuleSetName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ses/template.json b/internal/aws/cfn/schemas/aws/ses/template.json new file mode 100644 index 00000000..19cd294d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/template.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::SES::Template", + "description": "Resource Type definition for AWS::SES::Template", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git", + "definitions": { + "Template": { + "type": "object", + "additionalProperties": false, + "description": "The content of the email, composed of a subject line, an HTML part, and a text-only part", + "properties": { + "TemplateName": { + "description": "The name of the template.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]{1,64}$", + "maxLength": 64, + "minLength": 1 + }, + "SubjectPart": { + "description": "The subject line of the email.", + "type": "string" + }, + "TextPart": { + "description": "The email body that is visible to recipients whose email clients do not display HTML content.", + "type": "string" + }, + "HtmlPart": { + "description": "The HTML body of the email.", + "type": "string" + } + }, + "required": [ + "SubjectPart" + ] + } + }, + "properties": { + "Id": { + "type": "string" + }, + "Template": { + "$ref": "#/definitions/Template" + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Id" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/Template/TemplateName" + ], + "handlers": { + "create": { + "permissions": [ + "ses:CreateEmailTemplate", + "ses:GetEmailTemplate", + "ses:CreateTemplate", + "ses:GetTemplate" + ] + }, + "read": { + "permissions": [ + "ses:GetEmailTemplate", + "ses:GetTemplate" + ] + }, + "delete": { + "permissions": [ + "ses:DeleteEmailTemplate", + "ses:DeleteTemplate" + ] + }, + "update": { + "permissions": [ + "ses:GetEmailTemplate", + "ses:UpdateEmailTemplate", + "ses:GetTemplate", + "ses:UpdateTemplate" + ] + }, + "list": { + "permissions": [ + "ses:ListEmailTemplates", + "ses:ListTemplates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ses/vdmattributes.json b/internal/aws/cfn/schemas/aws/ses/vdmattributes.json new file mode 100644 index 00000000..3a8b716b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ses/vdmattributes.json @@ -0,0 +1,81 @@ +{ + "typeName": "AWS::SES::VdmAttributes", + "description": "Resource Type definition for AWS::SES::VdmAttributes", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git", + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/VdmAttributesResourceId" + ], + "properties": { + "VdmAttributesResourceId": { + "type": "string", + "description": "Unique identifier for this resource" + }, + "DashboardAttributes": { + "$ref": "#/definitions/DashboardAttributes" + }, + "GuardianAttributes": { + "$ref": "#/definitions/GuardianAttributes" + } + }, + "definitions": { + "DashboardAttributes": { + "type": "object", + "additionalProperties": false, + "description": "Preferences regarding the Dashboard feature.", + "properties": { + "EngagementMetrics": { + "type": "string", + "description": "Whether emails sent from this account have engagement tracking enabled.", + "pattern": "ENABLED|DISABLED" + } + } + }, + "GuardianAttributes": { + "type": "object", + "additionalProperties": false, + "description": "Preferences regarding the Guardian feature.", + "properties": { + "OptimizedSharedDelivery": { + "type": "string", + "description": "Whether emails sent from this account have optimized delivery algorithm enabled.", + "pattern": "ENABLED|DISABLED" + } + } + } + }, + "readOnlyProperties": [ + "/properties/VdmAttributesResourceId" + ], + "handlers": { + "create": { + "permissions": [ + "ses:PutAccountVdmAttributes", + "ses:GetAccount" + ] + }, + "read": { + "permissions": [ + "ses:GetAccount" + ] + }, + "update": { + "permissions": [ + "ses:PutAccountVdmAttributes", + "ses:GetAccount" + ] + }, + "delete": { + "permissions": [ + "ses:PutAccountVdmAttributes", + "ses:GetAccount" + ] + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/shield/drtaccess.json b/internal/aws/cfn/schemas/aws/shield/drtaccess.json new file mode 100644 index 00000000..f424cbb2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/shield/drtaccess.json @@ -0,0 +1,90 @@ +{ + "typeName": "AWS::Shield::DRTAccess", + "description": "Config the role and list of Amazon S3 log buckets used by the Shield Response Team (SRT) to access your AWS account while assisting with attack mitigation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-shield.git", + "primaryIdentifier": [ + "/properties/AccountId" + ], + "readOnlyProperties": [ + "/properties/AccountId" + ], + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "required": [ + "RoleArn" + ], + "properties": { + "AccountId": { + "type": "string" + }, + "LogBucketList": { + "description": "Authorizes the Shield Response Team (SRT) to access the specified Amazon S3 bucket containing log data such as Application Load Balancer access logs, CloudFront logs, or logs from third party sources. You can associate up to 10 Amazon S3 buckets with your subscription.", + "type": "array", + "insertionOrder": false, + "minItems": 0, + "maxItems": 10, + "items": { + "type": "string", + "minLength": 3, + "maxLength": 63 + } + }, + "RoleArn": { + "description": "Authorizes the Shield Response Team (SRT) using the specified role, to access your AWS account to assist with DDoS attack mitigation during potential attacks. This enables the SRT to inspect your AWS WAF configuration and create or update AWS WAF rules and web ACLs.", + "type": "string", + "maxLength": 2048 + } + }, + "handlers": { + "create": { + "permissions": [ + "shield:DescribeDRTAccess", + "shield:AssociateDRTLogBucket", + "shield:AssociateDRTRole", + "iam:PassRole", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy" + ] + }, + "delete": { + "permissions": [ + "shield:DescribeDRTAccess", + "shield:DisassociateDRTLogBucket", + "shield:DisassociateDRTRole", + "iam:PassRole", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "s3:DeleteBucketPolicy" + ] + }, + "read": { + "permissions": [ + "shield:DescribeDRTAccess" + ] + }, + "update": { + "permissions": [ + "shield:DescribeDRTAccess", + "shield:AssociateDRTLogBucket", + "shield:AssociateDRTRole", + "shield:DisassociateDRTLogBucket", + "shield:DisassociateDRTRole", + "iam:PassRole", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "s3:DeleteBucketPolicy" + ] + }, + "list": { + "permissions": [] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/shield/proactiveengagement.json b/internal/aws/cfn/schemas/aws/shield/proactiveengagement.json new file mode 100644 index 00000000..9bc0e5c4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/shield/proactiveengagement.json @@ -0,0 +1,115 @@ +{ + "typeName": "AWS::Shield::ProactiveEngagement", + "description": "Authorizes the Shield Response Team (SRT) to use email and phone to notify contacts about escalations to the SRT and to initiate proactive customer support.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-shield.git", + "primaryIdentifier": [ + "/properties/AccountId" + ], + "readOnlyProperties": [ + "/properties/AccountId" + ], + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "required": [ + "ProactiveEngagementStatus", + "EmergencyContactList" + ], + "properties": { + "AccountId": { + "type": "string" + }, + "ProactiveEngagementStatus": { + "description": "If `ENABLED`, the Shield Response Team (SRT) will use email and phone to notify contacts about escalations to the SRT and to initiate proactive customer support.\nIf `DISABLED`, the SRT will not proactively notify contacts about escalations or to initiate proactive customer support.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "EmergencyContactList": { + "description": "A list of email addresses and phone numbers that the Shield Response Team (SRT) can use to contact you for escalations to the SRT and to initiate proactive customer support.\nTo enable proactive engagement, the contact list must include at least one phone number.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "maxItems": 10, + "items": { + "$ref": "#/definitions/EmergencyContact" + } + } + }, + "definitions": { + "EmergencyContact": { + "description": "An emergency contact is used by Shield Response Team (SRT) to contact you for escalations to the SRT and to initiate proactive customer support. An emergency contact requires an email address.", + "type": "object", + "additionalProperties": false, + "required": [ + "EmailAddress" + ], + "properties": { + "ContactNotes": { + "description": "Additional notes regarding the contact.", + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "^[\\w\\s\\.\\-,:/()+@]*$" + }, + "EmailAddress": { + "description": "The email address for the contact.", + "type": "string", + "minLength": 1, + "maxLength": 150, + "pattern": "^\\S+@\\S+\\.\\S+$" + }, + "PhoneNumber": { + "description": "The phone number for the contact", + "type": "string", + "minLength": 1, + "maxLength": 16, + "pattern": "^\\+[1-9]\\d{1,14}$" + } + } + } + }, + "handlers": { + "create": { + "permissions": [ + "shield:DescribeSubscription", + "shield:DescribeEmergencyContactSettings", + "shield:AssociateProactiveEngagementDetails", + "shield:UpdateEmergencyContactSettings", + "shield:EnableProactiveEngagement" + ] + }, + "delete": { + "permissions": [ + "shield:DescribeSubscription", + "shield:DescribeEmergencyContactSettings", + "shield:UpdateEmergencyContactSettings", + "shield:DisableProactiveEngagement" + ] + }, + "read": { + "permissions": [ + "shield:DescribeSubscription", + "shield:DescribeEmergencyContactSettings" + ] + }, + "update": { + "permissions": [ + "shield:DescribeSubscription", + "shield:DescribeEmergencyContactSettings", + "shield:UpdateEmergencyContactSettings", + "shield:EnableProactiveEngagement", + "shield:DisableProactiveEngagement" + ] + }, + "list": { + "permissions": [ + "shield:DescribeSubscription", + "shield:DescribeEmergencyContactSettings" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/shield/protection.json b/internal/aws/cfn/schemas/aws/shield/protection.json new file mode 100644 index 00000000..0c61e880 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/shield/protection.json @@ -0,0 +1,200 @@ +{ + "typeName": "AWS::Shield::Protection", + "description": "Enables AWS Shield Advanced for a specific AWS resource. The resource can be an Amazon CloudFront distribution, Amazon Route 53 hosted zone, AWS Global Accelerator standard accelerator, Elastic IP Address, Application Load Balancer, or a Classic Load Balancer. You can protect Amazon EC2 instances and Network Load Balancers by association with protected Amazon EC2 Elastic IP addresses.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-shield.git", + "primaryIdentifier": [ + "/properties/ProtectionArn" + ], + "readOnlyProperties": [ + "/properties/ProtectionId", + "/properties/ProtectionArn" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/ResourceArn" + ], + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "Name", + "ResourceArn" + ], + "properties": { + "ProtectionId": { + "description": "The unique identifier (ID) of the protection.", + "type": "string" + }, + "ProtectionArn": { + "description": "The ARN (Amazon Resource Name) of the protection.", + "type": "string" + }, + "Name": { + "description": "Friendly name for the Protection.", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "[ a-zA-Z0-9_\\.\\-]*" + }, + "ResourceArn": { + "description": "The ARN (Amazon Resource Name) of the resource to be protected.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "HealthCheckArns": { + "description": "The Amazon Resource Names (ARNs) of the health check to associate with the protection.", + "type": "array", + "insertionOrder": false, + "maxItems": 1, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "ApplicationLayerAutomaticResponseConfiguration": { + "$ref": "#/definitions/ApplicationLayerAutomaticResponseConfiguration" + }, + "Tags": { + "description": "One or more tag key-value pairs for the Protection object.", + "type": "array", + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A tag associated with an AWS resource. Tags are key:value pairs that you can use to categorize and manage your resources, for purposes like billing or other management. Typically, the tag key represents a category, such as \"environment\", and the tag value represents a specific value within that category, such as \"test,\" \"development,\" or \"production\". Or you might set the tag key to \"customer\" and the value to the customer name or ID. You can specify one or more tags to add to each AWS resource, up to 50 tags for a resource.", + "type": "object", + "additionalProperties": false, + "required": [ + "Key", + "Value" + ], + "properties": { + "Key": { + "description": "Part of the key:value pair that defines a tag. You can use a tag key to describe a category of information, such as \"customer.\" Tag keys are case-sensitive.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "Part of the key:value pair that defines a tag. You can use a tag value to describe a specific value within a category, such as \"companyA\" or \"companyB.\" Tag values are case-sensitive.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + } + }, + "ApplicationLayerAutomaticResponseConfiguration": { + "description": "The automatic application layer DDoS mitigation settings for a Protection. This configuration determines whether Shield Advanced automatically manages rules in the web ACL in order to respond to application layer events that Shield Advanced determines to be DDoS attacks.", + "type": "object", + "additionalProperties": false, + "required": [ + "Action", + "Status" + ], + "properties": { + "Action": { + "type": "object", + "description": "Specifies the action setting that Shield Advanced should use in the AWS WAF rules that it creates on behalf of the protected resource in response to DDoS attacks. You specify this as part of the configuration for the automatic application layer DDoS mitigation feature, when you enable or update automatic mitigation. Shield Advanced creates the AWS WAF rules in a Shield Advanced-managed rule group, inside the web ACL that you have associated with the resource.", + "oneOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "Count": { + "description": "Specifies that Shield Advanced should configure its AWS WAF rules with the AWS WAF `Count` action.\nYou must specify exactly one action, either `Block` or `Count`.", + "type": "object", + "additionalProperties": false + } + } + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "Block": { + "description": "Specifies that Shield Advanced should configure its AWS WAF rules with the AWS WAF `Block` action.\nYou must specify exactly one action, either `Block` or `Count`.", + "type": "object", + "additionalProperties": false + } + } + } + ] + }, + "Status": { + "description": "Indicates whether automatic application layer DDoS mitigation is enabled for the protection.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + } + } + } + }, + "handlers": { + "create": { + "permissions": [ + "shield:CreateProtection", + "shield:DeleteProtection", + "shield:DescribeProtection", + "shield:ListProtections", + "shield:EnableApplicationLayerAutomaticResponse", + "shield:AssociateHealthCheck", + "shield:TagResource", + "ec2:DescribeAddresses", + "elasticloadbalancing:DescribeLoadBalancers", + "route53:GetHealthCheck", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "wafv2:GetWebACLForResource", + "wafv2:GetWebACL" + ] + }, + "delete": { + "permissions": [ + "shield:DeleteProtection", + "shield:UntagResource" + ] + }, + "read": { + "permissions": [ + "shield:DescribeProtection", + "shield:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "shield:DescribeProtection", + "shield:AssociateHealthCheck", + "shield:DisassociateHealthCheck", + "shield:EnableApplicationLayerAutomaticResponse", + "shield:UpdateApplicationLayerAutomaticResponse", + "shield:DisableApplicationLayerAutomaticResponse", + "shield:ListTagsForResource", + "shield:TagResource", + "shield:UntagResource", + "route53:GetHealthCheck", + "iam:GetRole", + "iam:CreateServiceLinkedRole", + "wafv2:GetWebACLForResource", + "wafv2:GetWebACL" + ] + }, + "list": { + "permissions": [ + "shield:ListProtections" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/shield/protectiongroup.json b/internal/aws/cfn/schemas/aws/shield/protectiongroup.json new file mode 100644 index 00000000..0d775521 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/shield/protectiongroup.json @@ -0,0 +1,147 @@ +{ + "typeName": "AWS::Shield::ProtectionGroup", + "description": "A grouping of protected resources so they can be handled as a collective. This resource grouping improves the accuracy of detection and reduces false positives.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-shield.git", + "primaryIdentifier": [ + "/properties/ProtectionGroupArn" + ], + "readOnlyProperties": [ + "/properties/ProtectionGroupArn" + ], + "createOnlyProperties": [ + "/properties/ProtectionGroupId" + ], + "replacementStrategy": "delete_then_create", + "tagging": { + "taggable": true, + "tagProperty": "/properties/Tags", + "cloudFormationSystemTags": false + }, + "additionalProperties": false, + "required": [ + "Aggregation", + "Pattern", + "ProtectionGroupId" + ], + "properties": { + "ProtectionGroupId": { + "description": "The name of the protection group. You use this to identify the protection group in lists and to manage the protection group, for example to update, delete, or describe it.", + "type": "string", + "pattern": "[a-zA-Z0-9\\-]*", + "minLength": 1, + "maxLength": 36 + }, + "ProtectionGroupArn": { + "description": "The ARN (Amazon Resource Name) of the protection group.", + "type": "string" + }, + "Aggregation": { + "description": "Defines how AWS Shield combines resource data for the group in order to detect, mitigate, and report events.\n* Sum - Use the total traffic across the group. This is a good choice for most cases. Examples include Elastic IP addresses for EC2 instances that scale manually or automatically.\n* Mean - Use the average of the traffic across the group. This is a good choice for resources that share traffic uniformly. Examples include accelerators and load balancers.\n* Max - Use the highest traffic from each resource. This is useful for resources that don't share traffic and for resources that share that traffic in a non-uniform way. Examples include Amazon CloudFront and origin resources for CloudFront distributions.", + "type": "string", + "enum": [ + "SUM", + "MEAN", + "MAX" + ] + }, + "Pattern": { + "description": "The criteria to use to choose the protected resources for inclusion in the group. You can include all resources that have protections, provide a list of resource Amazon Resource Names (ARNs), or include all resources of a specified resource type.", + "type": "string", + "enum": [ + "ALL", + "ARBITRARY", + "BY_RESOURCE_TYPE" + ] + }, + "Members": { + "description": "The Amazon Resource Names (ARNs) of the resources to include in the protection group. You must set this when you set `Pattern` to `ARBITRARY` and you must not set it for any other `Pattern` setting.", + "type": "array", + "insertionOrder": false, + "maxItems": 10000, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "ResourceType": { + "description": "The resource type to include in the protection group. All protected resources of this type are included in the protection group. Newly protected resources of this type are automatically added to the group. You must set this when you set `Pattern` to `BY_RESOURCE_TYPE` and you must not set it for any other `Pattern` setting.", + "type": "string", + "enum": [ + "CLOUDFRONT_DISTRIBUTION", + "ROUTE_53_HOSTED_ZONE", + "ELASTIC_IP_ALLOCATION", + "CLASSIC_LOAD_BALANCER", + "APPLICATION_LOAD_BALANCER", + "GLOBAL_ACCELERATOR" + ] + }, + "Tags": { + "description": "One or more tag key-value pairs for the Protection object.", + "type": "array", + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "Tag": { + "description": "A tag associated with an AWS resource. Tags are key:value pairs that you can use to categorize and manage your resources, for purposes like billing or other management. Typically, the tag key represents a category, such as \"environment\", and the tag value represents a specific value within that category, such as \"test,\" \"development,\" or \"production\". Or you might set the tag key to \"customer\" and the value to the customer name or ID. You can specify one or more tags to add to each AWS resource, up to 50 tags for a resource.", + "type": "object", + "additionalProperties": false, + "required": [ + "Key", + "Value" + ], + "properties": { + "Key": { + "description": "Part of the key:value pair that defines a tag. You can use a tag key to describe a category of information, such as \"customer.\" Tag keys are case-sensitive.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "Part of the key:value pair that defines a tag. You can use a tag value to describe a specific value within a category, such as \"companyA\" or \"companyB.\" Tag values are case-sensitive.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + } + } + }, + "handlers": { + "create": { + "permissions": [ + "shield:CreateProtectionGroup", + "shield:TagResource" + ] + }, + "delete": { + "permissions": [ + "shield:DeleteProtectionGroup", + "shield:UntagResource" + ] + }, + "read": { + "permissions": [ + "shield:DescribeProtectionGroup", + "shield:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "shield:UpdateProtectionGroup", + "shield:ListTagsForResource", + "shield:TagResource", + "shield:UntagResource" + ] + }, + "list": { + "permissions": [ + "shield:ListProtectionGroups" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/signer/profilepermission.json b/internal/aws/cfn/schemas/aws/signer/profilepermission.json new file mode 100644 index 00000000..9088e981 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/signer/profilepermission.json @@ -0,0 +1,66 @@ +{ + "typeName": "AWS::Signer::ProfilePermission", + "description": "An example resource schema demonstrating some basic constructs and validation rules.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "ProfileName": { + "type": "string" + }, + "ProfileVersion": { + "type": "string", + "pattern": "^[0-9a-zA-Z]{10}$" + }, + "Action": { + "type": "string" + }, + "Principal": { + "type": "string" + }, + "StatementId": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "ProfileName", + "Action", + "Principal", + "StatementId" + ], + "createOnlyProperties": [ + "/properties/ProfileName", + "/properties/Action", + "/properties/Principal", + "/properties/StatementId", + "/properties/ProfileVersion" + ], + "primaryIdentifier": [ + "/properties/StatementId", + "/properties/ProfileName" + ], + "handlers": { + "create": { + "permissions": [ + "signer:AddProfilePermission", + "signer:ListProfilePermissions" + ] + }, + "read": { + "permissions": [ + "signer:ListProfilePermissions" + ] + }, + "delete": { + "permissions": [ + "signer:RemoveProfilePermission", + "signer:ListProfilePermissions" + ] + }, + "list": { + "permissions": [ + "signer:ListProfilePermissions", + "signer:GetSigningProfile" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/signer/signingprofile.json b/internal/aws/cfn/schemas/aws/signer/signingprofile.json new file mode 100644 index 00000000..b713bf2e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/signer/signingprofile.json @@ -0,0 +1,145 @@ +{ + "typeName": "AWS::Signer::SigningProfile", + "description": "A signing profile is a signing template that can be used to carry out a pre-defined signing job.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "PlatformId": { + "type": "string", + "enum": [ + "AWSLambda-SHA384-ECDSA", + "Notation-OCI-SHA384-ECDSA" + ] + }, + "Arn": { + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$" + }, + "ProfileVersion": { + "type": "string", + "pattern": "^[0-9a-zA-Z]{10}$" + }, + "SignatureValidityPeriod": { + "type": "object", + "properties": { + "Value": { + "type": "integer" + }, + "Type": { + "type": "string", + "enum": [ + "DAYS", + "MONTHS", + "YEARS" + ] + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 127, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$" + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "additionalProperties": false + } + }, + "properties": { + "ProfileName": { + "description": "A name for the signing profile. AWS CloudFormation generates a unique physical ID and uses that ID for the signing profile name. ", + "type": "string" + }, + "ProfileVersion": { + "description": "A version for the signing profile. AWS Signer generates a unique version for each profile of the same profile name.", + "$ref": "#/definitions/ProfileVersion" + }, + "Arn": { + "description": "The Amazon Resource Name (ARN) of the specified signing profile.", + "$ref": "#/definitions/Arn" + }, + "ProfileVersionArn": { + "description": "The Amazon Resource Name (ARN) of the specified signing profile version.", + "$ref": "#/definitions/Arn" + }, + "SignatureValidityPeriod": { + "description": "Signature validity period of the profile.", + "$ref": "#/definitions/SignatureValidityPeriod" + }, + "PlatformId": { + "description": "The ID of the target signing platform.", + "$ref": "#/definitions/PlatformId" + }, + "Tags": { + "type": "array", + "description": "A list of tags associated with the signing profile.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "PlatformId" + ], + "createOnlyProperties": [ + "/properties/PlatformId", + "/properties/SignatureValidityPeriod" + ], + "readOnlyProperties": [ + "/properties/ProfileName", + "/properties/ProfileVersion", + "/properties/Arn", + "/properties/ProfileVersionArn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/ProfileName" + ], + [ + "/properties/ProfileVersionArn" + ] + ], + "handlers": { + "create": { + "permissions": [ + "signer:PutSigningProfile", + "signer:TagResource" + ] + }, + "read": { + "permissions": [ + "signer:GetSigningProfile" + ] + }, + "delete": { + "permissions": [ + "signer:CancelSigningProfile", + "signer:GetSigningProfile" + ] + }, + "list": { + "permissions": [ + "signer:ListSigningProfiles" + ] + }, + "update": { + "permissions": [ + "signer:TagResource", + "signer:UntagResource", + "signer:GetSigningProfile" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/simspaceweaver/simulation.json b/internal/aws/cfn/schemas/aws/simspaceweaver/simulation.json new file mode 100644 index 00000000..1bb06f81 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/simspaceweaver/simulation.json @@ -0,0 +1,133 @@ +{ + "typeName": "AWS::SimSpaceWeaver::Simulation", + "description": "AWS::SimSpaceWeaver::Simulation resource creates an AWS Simulation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "S3Location": { + "type": "object", + "properties": { + "BucketName": { + "description": "The Schema S3 bucket name.", + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "[a-zA-Z0-9_\\-]{3,63}$" + }, + "ObjectKey": { + "description": "This is the schema S3 object key, which includes the full path of \"folders\" from the bucket root to the schema.", + "type": "string", + "minLength": 3, + "maxLength": 255 + } + }, + "required": [ + "BucketName", + "ObjectKey" + ], + "additionalProperties": false + } + }, + "properties": { + "Name": { + "description": "The name of the simulation.", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "[a-zA-Z0-9_\\-]{1,2048}$" + }, + "RoleArn": { + "description": "Role ARN.", + "type": "string" + }, + "SchemaS3Location": { + "$ref": "#/definitions/S3Location" + }, + "DescribePayload": { + "description": "Json object with all simulation details", + "type": "string" + }, + "MaximumDuration": { + "description": "The maximum running time of the simulation.", + "type": "string", + "minLength": 2, + "maxLength": 6 + }, + "SnapshotS3Location": { + "$ref": "#/definitions/S3Location" + } + }, + "required": [ + "Name", + "RoleArn" + ], + "oneOf": [ + { + "required": [ + "SchemaS3Location" + ] + }, + { + "required": [ + "SnapshotS3Location" + ] + } + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/DescribePayload" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/RoleArn", + "/properties/SchemaS3Location", + "/properties/SnapshotS3Location", + "/properties/MaximumDuration" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "propertyTransform": { + "properties/MaximumDuration": "$uppercase(MaximumDuration)" + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "simspaceweaver:StartSimulation", + "simspaceweaver:DescribeSimulation", + "iam:GetRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "simspaceweaver:DescribeSimulation" + ] + }, + "update": { + "permissions": [ + "simspaceweaver:StartSimulation", + "simspaceweaver:StopSimulation", + "simspaceweaver:DeleteSimulation", + "simspaceweaver:DescribeSimulation" + ] + }, + "delete": { + "permissions": [ + "simspaceweaver:StopSimulation", + "simspaceweaver:DeleteSimulation", + "simspaceweaver:DescribeSimulation" + ] + }, + "list": { + "permissions": [ + "simspaceweaver:ListSimulations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sns/subscription.json b/internal/aws/cfn/schemas/aws/sns/subscription.json new file mode 100644 index 00000000..e4c5a9e8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sns/subscription.json @@ -0,0 +1,58 @@ +{ + "typeName": "AWS::SNS::Subscription", + "description": "Resource Type definition for AWS::SNS::Subscription", + "additionalProperties": false, + "properties": { + "ReplayPolicy": { + "type": "object" + }, + "RawMessageDelivery": { + "type": "boolean" + }, + "Endpoint": { + "type": "string" + }, + "FilterPolicy": { + "type": "object" + }, + "TopicArn": { + "type": "string" + }, + "RedrivePolicy": { + "type": "object" + }, + "DeliveryPolicy": { + "type": "object" + }, + "Region": { + "type": "string" + }, + "SubscriptionRoleArn": { + "type": "string" + }, + "FilterPolicyScope": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "Protocol": { + "type": "string" + } + }, + "required": [ + "TopicArn", + "Protocol" + ], + "createOnlyProperties": [ + "/properties/Endpoint", + "/properties/Protocol", + "/properties/TopicArn" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sns/topic.json b/internal/aws/cfn/schemas/aws/sns/topic.json new file mode 100644 index 00000000..35ed372e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sns/topic.json @@ -0,0 +1,213 @@ +{ + "typeName": "AWS::SNS::Topic", + "description": "The ``AWS::SNS::Topic`` resource creates a topic to which notifications can be published.\n One account can create a maximum of 100,000 standard topics and 1,000 FIFO topics. For more information, see [endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/sns.html) in the *General Reference*.\n The structure of ``AUTHPARAMS`` depends on the .signature of the API request. For more information, see [Examples of the complete Signature Version 4 signing process](https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html) in the *General Reference*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "additionalProperties": false, + "properties": { + "DisplayName": { + "description": "The display name to use for an SNS topic with SMS subscriptions. The display name must be maximum 100 characters long, including hyphens (-), underscores (_), spaces, and tabs.", + "type": "string" + }, + "KmsMasterKeyId": { + "description": "The ID of an AWS managed customer master key (CMK) for SNS or a custom CMK. For more information, see [Key terms](https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms). For more examples, see ``KeyId`` in the *API Reference*.\n This property applies only to [server-side-encryption](https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html).", + "type": "string" + }, + "DataProtectionPolicy": { + "description": "The body of the policy document you want to use for this topic.\n You can only add one policy per topic.\n The policy must be in JSON string format.\n Length Constraints: Maximum length of 30,720.", + "type": "object" + }, + "Subscription": { + "description": "The SNS subscriptions (endpoints) for this topic.\n If you specify the ``Subscription`` property in the ``AWS::SNS::Topic`` resource and it creates an associated subscription resource, the associated subscription is not deleted when the ``AWS::SNS::Topic`` resource is deleted.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Subscription" + } + }, + "FifoTopic": { + "description": "Set to true to create a FIFO topic.", + "type": "boolean" + }, + "ContentBasedDeduplication": { + "description": "Enables content-based deduplication for FIFO topics.\n + By default, ``ContentBasedDeduplication`` is set to ``false``. If you create a FIFO topic and this attribute is ``false``, you must specify a value for the ``MessageDeduplicationId`` parameter for the [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) action. \n + When you set ``ContentBasedDeduplication`` to ``true``, SNS uses a SHA-256 hash to generate the ``MessageDeduplicationId`` using the body of the message (but not the attributes of the message).\n (Optional) To override the generated value, you can specify a value for the the ``MessageDeduplicationId`` parameter for the ``Publish`` action.", + "type": "boolean" + }, + "ArchivePolicy": { + "description": "The archive policy determines the number of days SNS retains messages. You can set a retention period from 1 to 365 days.", + "type": "object" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "description": "The list of tags to add to a new topic.\n To be able to tag a topic on creation, you must have the ``sns:CreateTopic`` and ``sns:TagResource`` permissions." + }, + "TopicName": { + "description": "The name of the topic you want to create. Topic names must include only uppercase and lowercase ASCII letters, numbers, underscores, and hyphens, and must be between 1 and 256 characters long. FIFO topic names must end with ``.fifo``.\n If you don't specify a name, CFN generates a unique physical ID and uses that ID for the topic name. For more information, see [Name type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html).\n If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.", + "type": "string" + }, + "TopicArn": { + "type": "string", + "description": "" + }, + "SignatureVersion": { + "description": "The signature version corresponds to the hashing algorithm used while creating the signature of the notifications, subscription confirmations, or unsubscribe confirmation messages sent by Amazon SNS. By default, ``SignatureVersion`` is set to ``1``.", + "type": "string" + }, + "TracingConfig": { + "description": "Tracing mode of an SNS topic. By default ``TracingConfig`` is set to ``PassThrough``, and the topic passes through the tracing header it receives from an SNS publisher to its subscriptions. If set to ``Active``, SNS will vend X-Ray segment data to topic owner account if the sampled flag in the tracing header is true.", + "type": "string" + }, + "DeliveryStatusLogging": { + "description": "", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LoggingConfig" + } + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "description": "The required key portion of the tag." + }, + "Value": { + "type": "string", + "description": "The optional value portion of the tag." + } + }, + "required": [ + "Value", + "Key" + ], + "description": "The list of tags to be added to the specified topic." + }, + "Subscription": { + "type": "object", + "additionalProperties": false, + "properties": { + "Endpoint": { + "type": "string", + "description": "The endpoint that receives notifications from the SNS topic. The endpoint value depends on the protocol that you specify. For more information, see the ``Endpoint`` parameter of the ``Subscribe`` action in the *API Reference*." + }, + "Protocol": { + "type": "string", + "description": "The subscription's protocol. For more information, see the ``Protocol`` parameter of the ``Subscribe`` action in the *API Reference*." + } + }, + "required": [ + "Endpoint", + "Protocol" + ], + "description": "``Subscription`` is an embedded property that describes the subscription endpoints of an SNS topic.\n For full control over subscription behavior (for example, delivery policy, filtering, raw message delivery, and cross-region subscriptions), use the [AWS::SNS::Subscription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html) resource." + }, + "LoggingConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Protocol": { + "type": "string", + "description": "", + "enum": [ + "http/s", + "sqs", + "lambda", + "firehose", + "application" + ] + }, + "SuccessFeedbackRoleArn": { + "type": "string", + "description": "" + }, + "SuccessFeedbackSampleRate": { + "type": "string", + "description": "" + }, + "FailureFeedbackRoleArn": { + "type": "string", + "description": "" + } + }, + "required": [ + "Protocol" + ], + "description": "" + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/TopicName", + "/properties/FifoTopic" + ], + "primaryIdentifier": [ + "/properties/TopicArn" + ], + "readOnlyProperties": [ + "/properties/TopicArn" + ], + "handlers": { + "create": { + "permissions": [ + "sns:CreateTopic", + "sns:TagResource", + "sns:Subscribe", + "sns:GetTopicAttributes", + "sns:PutDataProtectionPolicy", + "iam:GetRole", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "sns:GetTopicAttributes", + "sns:ListTagsForResource", + "sns:ListSubscriptionsByTopic", + "sns:GetDataProtectionPolicy" + ] + }, + "update": { + "permissions": [ + "sns:SetTopicAttributes", + "sns:TagResource", + "sns:UntagResource", + "sns:Subscribe", + "sns:Unsubscribe", + "sns:GetTopicAttributes", + "sns:ListTagsForResource", + "sns:ListSubscriptionsByTopic", + "sns:GetDataProtectionPolicy", + "sns:PutDataProtectionPolicy", + "iam:GetRole", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "sns:GetTopicAttributes", + "sns:DeleteTopic" + ] + }, + "list": { + "permissions": [ + "sns:ListTopics" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sns/topicinlinepolicy.json b/internal/aws/cfn/schemas/aws/sns/topicinlinepolicy.json new file mode 100644 index 00000000..629f0e41 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sns/topicinlinepolicy.json @@ -0,0 +1,57 @@ +{ + "typeName": "AWS::SNS::TopicInlinePolicy", + "description": "Schema for AWS::SNS::TopicInlinePolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns.git", + "additionalProperties": false, + "properties": { + "PolicyDocument": { + "description": "A policy document that contains permissions to add to the specified SNS topics.", + "type": "object" + }, + "TopicArn": { + "description": "The Amazon Resource Name (ARN) of the topic to which you want to add the policy.", + "type": "string" + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "PolicyDocument", + "TopicArn" + ], + "primaryIdentifier": [ + "/properties/TopicArn" + ], + "createOnlyProperties": [ + "/properties/TopicArn" + ], + "handlers": { + "create": { + "permissions": [ + "sns:SetTopicAttributes", + "sns:GetTopicAttributes" + ] + }, + "read": { + "permissions": [ + "sns:GetTopicAttributes" + ] + }, + "delete": { + "permissions": [ + "sns:SetTopicAttributes", + "sns:GetTopicAttributes" + ] + }, + "update": { + "permissions": [ + "sns:SetTopicAttributes", + "sns:GetTopicAttributes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sns/topicpolicy.json b/internal/aws/cfn/schemas/aws/sns/topicpolicy.json new file mode 100644 index 00000000..16ba3ead --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sns/topicpolicy.json @@ -0,0 +1,61 @@ +{ + "typeName": "AWS::SNS::TopicPolicy", + "description": "The ``AWS::SNS::TopicPolicy`` resource associates SNS topics with a policy. For an example snippet, see [Declaring an policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-iam.html#scenario-sns-policy) in the *User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns.git", + "additionalProperties": false, + "properties": { + "Id": { + "description": "", + "type": "string" + }, + "PolicyDocument": { + "description": "A policy document that contains permissions to add to the specified SNS topics.", + "type": [ + "object", + "string" + ] + }, + "Topics": { + "description": "The Amazon Resource Names (ARN) of the topics to which you want to add the policy. You can use the ``Ref`` function to specify an ``AWS::SNS::Topic`` resource.", + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "PolicyDocument", + "Topics" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "handlers": { + "create": { + "permissions": [ + "sns:SetTopicAttributes" + ] + }, + "update": { + "permissions": [ + "sns:SetTopicAttributes" + ] + }, + "delete": { + "permissions": [ + "sns:SetTopicAttributes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sqs/queue.json b/internal/aws/cfn/schemas/aws/sqs/queue.json new file mode 100644 index 00000000..4b2130e0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sqs/queue.json @@ -0,0 +1,167 @@ +{ + "typeName": "AWS::SQS::Queue", + "description": "The ``AWS::SQS::Queue`` resource creates an SQS standard or FIFO queue.\n Keep the following caveats in mind:\n + If you don't specify the ``FifoQueue`` property, SQS creates a standard queue.\n You can't change the queue type after you create it and you can't convert an existing standard queue into a FIFO queue. You must either create a new FIFO queue for your application or delete your existing standard queue and recreate it as a FIFO queue. For more information, see [Moving from a standard queue to a FIFO queue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-moving.html) in the *Developer Guide*. \n + If you don't provide a value for a property, the queue is created with the default value for the property.\n + If you delete a queue, you must wait at least 60 seconds before creating a queue with the same name.\n + To successfully create a new queue, you must provide a queue name that adheres to the [limits related to queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/limits-queues.html) and is unique within the scope of your queues.\n \n For more information about creating FIFO (first-in-first-out) queues, see [Creating an queue ()](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/screate-queue-cloudformation.html) in the *Developer Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ], + "description": "" + } + }, + "properties": { + "QueueUrl": { + "type": "string", + "description": "" + }, + "Arn": { + "type": "string", + "description": "" + }, + "ContentBasedDeduplication": { + "type": "boolean", + "description": "For first-in-first-out (FIFO) queues, specifies whether to enable content-based deduplication. During the deduplication interval, SQS treats messages that are sent with identical content as duplicates and delivers only one copy of the message. For more information, see the ``ContentBasedDeduplication`` attribute for the ``CreateQueue`` action in the *API Reference*." + }, + "DeduplicationScope": { + "description": "For high throughput for FIFO queues, specifies whether message deduplication occurs at the message group or queue level. Valid values are ``messageGroup`` and ``queue``.\n To enable high throughput for a FIFO queue, set this attribute to ``messageGroup`` *and* set the ``FifoThroughputLimit`` attribute to ``perMessageGroupId``. If you set these attributes to anything other than these values, normal throughput is in effect and deduplication occurs as specified. For more information, see [High throughput for FIFO queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html) and [Quotas related to messages](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html) in the *Developer Guide*.", + "type": "string" + }, + "DelaySeconds": { + "type": "integer", + "description": "The time in seconds for which the delivery of all messages in the queue is delayed. You can specify an integer value of ``0`` to ``900`` (15 minutes). The default value is ``0``." + }, + "FifoQueue": { + "type": "boolean", + "description": "If set to true, creates a FIFO queue. If you don't specify this property, SQS creates a standard queue. For more information, see [FIFO queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html) in the *Developer Guide*." + }, + "FifoThroughputLimit": { + "description": "For high throughput for FIFO queues, specifies whether the FIFO queue throughput quota applies to the entire queue or per message group. Valid values are ``perQueue`` and ``perMessageGroupId``.\n To enable high throughput for a FIFO queue, set this attribute to ``perMessageGroupId`` *and* set the ``DeduplicationScope`` attribute to ``messageGroup``. If you set these attributes to anything other than these values, normal throughput is in effect and deduplication occurs as specified. For more information, see [High throughput for FIFO queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html) and [Quotas related to messages](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html) in the *Developer Guide*.", + "type": "string" + }, + "KmsDataKeyReusePeriodSeconds": { + "type": "integer", + "description": "The length of time in seconds for which SQS can reuse a data key to encrypt or decrypt messages before calling KMS again. The value must be an integer between 60 (1 minute) and 86,400 (24 hours). The default is 300 (5 minutes).\n A shorter time period provides better security, but results in more calls to KMS, which might incur charges after Free Tier. For more information, see [Encryption at rest](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work) in the *Developer Guide*." + }, + "KmsMasterKeyId": { + "type": "string", + "description": "The ID of an AWS Key Management Service (KMS) for SQS, or a custom KMS. To use the AWS managed KMS for SQS, specify a (default) alias ARN, alias name (e.g. ``alias/aws/sqs``), key ARN, or key ID. For more information, see the following:\n + [Encryption at rest](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html) in the *Developer Guide* \n + [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html) in the *API Reference* \n + [Request Parameters](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters) in the *Key Management Service API Reference* \n + The Key Management Service (KMS) section of the [Best Practices](https://docs.aws.amazon.com/https://d0.awsstatic.com/whitepapers/aws-kms-best-practices.pdf) whitepaper" + }, + "SqsManagedSseEnabled": { + "type": "boolean", + "description": "Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, [SSE-KMS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html) or [SSE-SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html)). When ``SqsManagedSseEnabled`` is not defined, ``SSE-SQS`` encryption is enabled by default." + }, + "MaximumMessageSize": { + "type": "integer", + "description": "The limit of how many bytes that a message can contain before SQS rejects it. You can specify an integer value from ``1,024`` bytes (1 KiB) to ``262,144`` bytes (256 KiB). The default value is ``262,144`` (256 KiB)." + }, + "MessageRetentionPeriod": { + "type": "integer", + "description": "The number of seconds that SQS retains a message. You can specify an integer value from ``60`` seconds (1 minute) to ``1,209,600`` seconds (14 days). The default value is ``345,600`` seconds (4 days)." + }, + "QueueName": { + "type": "string", + "description": "A name for the queue. To create a FIFO queue, the name of your FIFO queue must end with the ``.fifo`` suffix. For more information, see [FIFO queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html) in the *Developer Guide*.\n If you don't specify a name, CFN generates a unique physical ID and uses that ID for the queue name. For more information, see [Name type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) in the *User Guide*. \n If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name." + }, + "ReceiveMessageWaitTimeSeconds": { + "type": "integer", + "description": "Specifies the duration, in seconds, that the ReceiveMessage action call waits until a message is in the queue in order to include it in the response, rather than returning an empty response if a message isn't yet available. You can specify an integer from 1 to 20. Short polling is used as the default or when you specify 0 for this property. For more information, see [Consuming messages using long polling](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-long-polling) in the *Developer Guide*." + }, + "RedriveAllowPolicy": { + "type": [ + "object", + "string" + ], + "description": "The string that includes the parameters for the permissions for the dead-letter queue redrive permission and which source queues can specify dead-letter queues as a JSON object. The parameters are as follows:\n + ``redrivePermission``: The permission type that defines which source queues can specify the current queue as the dead-letter queue. Valid values are:\n + ``allowAll``: (Default) Any source queues in this AWS account in the same Region can specify this queue as the dead-letter queue.\n + ``denyAll``: No source queues can specify this queue as the dead-letter queue.\n + ``byQueue``: Only queues specified by the ``sourceQueueArns`` parameter can specify this queue as the dead-letter queue.\n \n + ``sourceQueueArns``: The Amazon Resource Names (ARN)s of the source queues that can specify this queue as the dead-letter queue and redrive messages. You can specify this parameter only when the ``redrivePermission`` parameter is set to ``byQueue``. You can specify up to 10 source queue ARNs. To allow more than 10 source queues to specify dead-letter queues, set the ``redrivePermission`` parameter to ``allowAll``." + }, + "RedrivePolicy": { + "type": [ + "object", + "string" + ], + "description": "The string that includes the parameters for the dead-letter queue functionality of the source queue as a JSON object. The parameters are as follows:\n + ``deadLetterTargetArn``: The Amazon Resource Name (ARN) of the dead-letter queue to which SQS moves messages after the value of ``maxReceiveCount`` is exceeded.\n + ``maxReceiveCount``: The number of times a message is delivered to the source queue before being moved to the dead-letter queue. When the ``ReceiveCount`` for a message exceeds the ``maxReceiveCount`` for a queue, SQS moves the message to the dead-letter-queue.\n \n The dead-letter queue of a FIFO queue must also be a FIFO queue. Similarly, the dead-letter queue of a standard queue must also be a standard queue.\n *JSON* \n ``{ \"deadLetterTargetArn\" : String, \"maxReceiveCount\" : Integer }`` \n *YAML* \n ``deadLetterTargetArn : String`` \n ``maxReceiveCount : Integer``" + }, + "Tags": { + "type": "array", + "description": "The tags that you attach to this queue. For more information, see [Resource tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) in the *User Guide*.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VisibilityTimeout": { + "type": "integer", + "description": "The length of time during which a message will be unavailable after a message is delivered from the queue. This blocks other components from receiving the same message and gives the initial component time to process and delete the message from the queue.\n Values must be from 0 to 43,200 seconds (12 hours). If you don't specify a value, AWS CloudFormation uses the default value of 30 seconds.\n For more information about SQS queue visibility timeouts, see [Visibility timeout](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) in the *Developer Guide*." + } + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/QueueUrl", + "/properties/Arn" + ], + "primaryIdentifier": [ + "/properties/QueueUrl" + ], + "createOnlyProperties": [ + "/properties/FifoQueue", + "/properties/QueueName" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "sqs:CreateQueue", + "sqs:GetQueueUrl", + "sqs:GetQueueAttributes", + "sqs:ListQueueTags", + "sqs:TagQueue" + ] + }, + "read": { + "permissions": [ + "sqs:GetQueueAttributes", + "sqs:ListQueueTags" + ] + }, + "update": { + "permissions": [ + "sqs:SetQueueAttributes", + "sqs:GetQueueAttributes", + "sqs:ListQueueTags", + "sqs:TagQueue", + "sqs:UntagQueue" + ] + }, + "delete": { + "permissions": [ + "sqs:DeleteQueue", + "sqs:GetQueueAttributes" + ] + }, + "list": { + "permissions": [ + "sqs:ListQueues" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sqs/queueinlinepolicy.json b/internal/aws/cfn/schemas/aws/sqs/queueinlinepolicy.json new file mode 100644 index 00000000..6093c094 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sqs/queueinlinepolicy.json @@ -0,0 +1,60 @@ +{ + "typeName": "AWS::SQS::QueueInlinePolicy", + "description": "Schema for SQS QueueInlinePolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "properties": { + "PolicyDocument": { + "description": "A policy document that contains permissions to add to the specified SQS queue", + "type": "object" + }, + "Queue": { + "description": "The URL of the SQS queue.", + "type": "string" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "required": [ + "PolicyDocument", + "Queue" + ], + "primaryIdentifier": [ + "/properties/Queue" + ], + "createOnlyProperties": [ + "/properties/Queue" + ], + "handlers": { + "create": { + "permissions": [ + "sqs:SetQueueAttributes", + "sqs:GetQueueAttributes", + "sqs:GetQueueUrl" + ] + }, + "read": { + "permissions": [ + "sqs:GetQueueAttributes", + "sqs:GetQueueUrl" + ] + }, + "delete": { + "permissions": [ + "sqs:SetQueueAttributes", + "sqs:GetQueueAttributes" + ] + }, + "update": { + "permissions": [ + "sqs:SetQueueAttributes", + "sqs:GetQueueAttributes", + "sqs:GetQueueUrl" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sqs/queuepolicy.json b/internal/aws/cfn/schemas/aws/sqs/queuepolicy.json new file mode 100644 index 00000000..a2bf783d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sqs/queuepolicy.json @@ -0,0 +1,61 @@ +{ + "typeName": "AWS::SQS::QueuePolicy", + "description": "The ``AWS::SQS::QueuePolicy`` type applies a policy to SQS queues. For an example snippet, see [Declaring an policy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-iam.html#scenario-sqs-policy) in the *User Guide*.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string", + "description": "" + }, + "PolicyDocument": { + "type": [ + "object", + "string" + ], + "description": "A policy document that contains the permissions for the specified SQS queues. For more information about SQS policies, see [Using custom policies with the access policy language](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-creating-custom-policies.html) in the *Developer Guide*." + }, + "Queues": { + "type": "array", + "description": "The URLs of the queues to which you want to add the policy. You can use the ``Ref`` function to specify an ``AWS::SQS::Queue`` resource.", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "required": [ + "PolicyDocument", + "Queues" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "sqs:SetQueueAttributes" + ] + }, + "update": { + "permissions": [ + "sqs:SetQueueAttributes" + ] + }, + "delete": { + "permissions": [ + "sqs:SetQueueAttributes" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssm/association.json b/internal/aws/cfn/schemas/aws/ssm/association.json new file mode 100644 index 00000000..80fa4884 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/association.json @@ -0,0 +1,269 @@ +{ + "typeName": "AWS::SSM::Association", + "description": "The AWS::SSM::Association resource associates an SSM document in AWS Systems Manager with EC2 instances that contain a configuration agent to process the document.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "definitions": { + "Target": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]{1,128}$|resource-groups:Name" + }, + "Values": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "maxItems": 50 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Values" + ] + }, + "ParameterValues": { + "type": "array", + "items": { + "type": "string" + } + }, + "S3Region": { + "type": "string", + "minLength": 3, + "maxLength": 20 + }, + "S3BucketName": { + "type": "string", + "minLength": 3, + "maxLength": 63 + }, + "S3KeyPrefix": { + "type": "string", + "maxLength": 1024 + }, + "S3OutputLocation": { + "type": "object", + "properties": { + "OutputS3Region": { + "$ref": "#/definitions/S3Region" + }, + "OutputS3BucketName": { + "$ref": "#/definitions/S3BucketName" + }, + "OutputS3KeyPrefix": { + "$ref": "#/definitions/S3KeyPrefix" + } + }, + "additionalProperties": false + }, + "InstanceAssociationOutputLocation": { + "type": "object", + "properties": { + "S3Location": { + "$ref": "#/definitions/S3OutputLocation" + } + }, + "additionalProperties": false + } + }, + "properties": { + "AssociationId": { + "description": "Unique identifier of the association.", + "type": "string", + "pattern": "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}", + "examples": [ + "88df7b09-95e8-48c4-a3cb-08c2c20d5110", + "203dd0ec-0055-4bf0-a872-707f72ef06aa" + ] + }, + "AssociationName": { + "description": "The name of the association.", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.]{3,128}$" + }, + "DocumentVersion": { + "description": "The version of the SSM document to associate with the target.", + "type": "string", + "pattern": "([$]LATEST|[$]DEFAULT|^[1-9][0-9]*$)" + }, + "InstanceId": { + "description": "The ID of the instance that the SSM document is associated with.", + "type": "string", + "pattern": "(^i-(\\w{8}|\\w{17})$)|(^mi-\\w{17}$)", + "examples": [ + "i-0e60836d21cf313c4", + "mi-0532c22e49636ee13" + ] + }, + "Name": { + "description": "The name of the SSM document.", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.:/]{3,200}$", + "examples": [ + "AWS-GatherSoftwareInventory", + "MyCustomSSMDocument" + ] + }, + "Parameters": { + "description": "Parameter values that the SSM document uses at runtime.", + "type": "object", + "patternProperties": { + ".*{1,255}": { + "$ref": "#/definitions/ParameterValues" + } + }, + "additionalProperties": false + }, + "ScheduleExpression": { + "description": "A Cron or Rate expression that specifies when the association is applied to the target.", + "type": "string", + "minLength": 1, + "maxLength": 256, + "examples": [ + "cron(0 0 */1 * * ? *)", + "cron(0 16 ? * TUE *)", + "rate(30 minutes)", + "rate(7 days)" + ] + }, + "Targets": { + "description": "The targets that the SSM document sends commands to.", + "type": "array", + "items": { + "$ref": "#/definitions/Target" + }, + "minItems": 0, + "maxItems": 5 + }, + "OutputLocation": { + "$ref": "#/definitions/InstanceAssociationOutputLocation" + }, + "AutomationTargetParameterName": { + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "MaxErrors": { + "type": "string", + "pattern": "^([1-9][0-9]{0,6}|[0]|[1-9][0-9]%|[0-9]%|100%)$", + "examples": [ + "1%", + "10%", + "50%", + "1" + ] + }, + "MaxConcurrency": { + "type": "string", + "pattern": "^([1-9][0-9]{0,6}|[1-9][0-9]%|[1-9]%|100%)$", + "examples": [ + "1%", + "10%", + "50%", + "1" + ] + }, + "ComplianceSeverity": { + "type": "string", + "enum": [ + "CRITICAL", + "HIGH", + "MEDIUM", + "LOW", + "UNSPECIFIED" + ] + }, + "SyncCompliance": { + "type": "string", + "enum": [ + "AUTO", + "MANUAL" + ] + }, + "WaitForSuccessTimeoutSeconds": { + "type": "integer", + "minimum": 15, + "maximum": 172800 + }, + "ApplyOnlyAtCronInterval": { + "type": "boolean" + }, + "CalendarNames": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "calendar1", + "calendar2" + ], + [ + "calendar3" + ] + ] + }, + "ScheduleOffset": { + "type": "integer", + "minimum": 1, + "maximum": 6 + } + }, + "required": [ + "Name" + ], + "readOnlyProperties": [ + "/properties/AssociationId" + ], + "writeOnlyProperties": [ + "/properties/WaitForSuccessTimeoutSeconds" + ], + "primaryIdentifier": [ + "/properties/AssociationId" + ], + "tagging": { + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "ec2:DescribeInstanceStatus", + "iam:PassRole", + "iam:CreateServiceLinkedRole", + "ssm:CreateAssociation", + "ssm:DescribeAssociation", + "ssm:GetCalendarState" + ] + }, + "delete": { + "permissions": [ + "ssm:DeleteAssociation" + ] + }, + "update": { + "permissions": [ + "iam:PassRole", + "ssm:UpdateAssociation", + "ssm:GetCalendarState" + ] + }, + "read": { + "permissions": [ + "ssm:DescribeAssociation", + "resource-groups:GetGroupQuery", + "resource-groups:ListGroups", + "resource-groups:ListGroupResources" + ] + }, + "list": { + "permissions": [ + "ssm:ListAssociations" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/ssm/document.json b/internal/aws/cfn/schemas/aws/ssm/document.json new file mode 100644 index 00000000..3421176b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/document.json @@ -0,0 +1,236 @@ +{ + "typeName": "AWS::SSM::Document", + "description": "The AWS::SSM::Document resource is an SSM document in AWS Systems Manager that defines the actions that Systems Manager performs, which can be used to set up and run commands on your instances.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "definitions": { + "AttachmentsSource": { + "type": "object", + "properties": { + "Key": { + "description": "The key of a key-value pair that identifies the location of an attachment to a document.", + "type": "string", + "enum": [ + "SourceUrl", + "S3FileUrl", + "AttachmentReference" + ] + }, + "Values": { + "description": "The value of a key-value pair that identifies the location of an attachment to a document. The format for Value depends on the type of key you specify.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 100000 + }, + "minItems": 1, + "maxItems": 1, + "insertionOrder": false + }, + "Name": { + "description": "The name of the document attachment file.", + "type": "string", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 128 + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "description": "The name of the tag.", + "type": "string", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value of the tag.", + "type": "string", + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "DocumentRequires": { + "type": "object", + "properties": { + "Name": { + "description": "The name of the required SSM document. The name can be an Amazon Resource Name (ARN).", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.:/]{3,200}$", + "maxLength": 200 + }, + "Version": { + "description": "The document version required by the current document.", + "type": "string", + "pattern": "([$]LATEST|[$]DEFAULT|^[1-9][0-9]*$)", + "maxLength": 8 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Content": { + "description": "The content for the Systems Manager document in JSON, YAML or String format.", + "type": [ + "object", + "string" + ] + }, + "Attachments": { + "description": "A list of key and value pairs that describe attachments to a version of a document.", + "type": "array", + "items": { + "$ref": "#/definitions/AttachmentsSource" + }, + "minItems": 0, + "maxItems": 20, + "insertionOrder": false + }, + "Name": { + "description": "A name for the Systems Manager document.", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.]{3,128}$" + }, + "VersionName": { + "description": "An optional field specifying the version of the artifact you are creating with the document. This value is unique across all versions of a document, and cannot be changed.", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.]{1,128}$" + }, + "DocumentType": { + "description": "The type of document to create.", + "type": "string", + "enum": [ + "ApplicationConfiguration", + "ApplicationConfigurationSchema", + "Automation", + "Automation.ChangeTemplate", + "ChangeCalendar", + "CloudFormation", + "Command", + "DeploymentStrategy", + "Package", + "Policy", + "ProblemAnalysis", + "ProblemAnalysisTemplate", + "Session" + ] + }, + "DocumentFormat": { + "description": "Specify the document format for the request. The document format can be either JSON or YAML. JSON is the default format.", + "type": "string", + "enum": [ + "YAML", + "JSON", + "TEXT" + ], + "default": "JSON" + }, + "TargetType": { + "description": "Specify a target type to define the kinds of resources the document can run on.", + "type": "string", + "pattern": "^\\/[\\w\\.\\-\\:\\/]*$" + }, + "Tags": { + "description": "Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 1000, + "insertionOrder": false + }, + "Requires": { + "description": "A list of SSM documents required by a document. For example, an ApplicationConfiguration document requires an ApplicationConfigurationSchema document.", + "type": "array", + "items": { + "$ref": "#/definitions/DocumentRequires" + }, + "minItems": 1, + "insertionOrder": false + }, + "UpdateMethod": { + "description": "Update method - when set to 'Replace', the update will replace the existing document; when set to 'NewVersion', the update will create a new version.", + "type": "string", + "enum": [ + "Replace", + "NewVersion" + ], + "default": "Replace" + } + }, + "additionalProperties": false, + "required": [ + "Content" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/DocumentType" + ], + "conditionalCreateOnlyProperties": [ + "/properties/Content", + "/properties/Attachments", + "/properties/VersionName", + "/properties/DocumentFormat", + "/properties/TargetType", + "/properties/Requires" + ], + "writeOnlyProperties": [ + "/properties/UpdateMethod", + "/properties/Attachments" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "tagging": { + "taggable": true + }, + "handlers": { + "create": { + "permissions": [ + "ssm:CreateDocument", + "ssm:GetDocument", + "ssm:AddTagsToResource", + "ssm:ListTagsForResource", + "s3:GetObject", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "ssm:GetDocument", + "ssm:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ssm:UpdateDocument", + "s3:GetObject", + "ssm:AddTagsToResource", + "ssm:RemoveTagsFromResource", + "ssm:ListTagsForResource", + "iam:PassRole", + "ssm:UpdateDocumentDefaultVersion", + "ssm:DescribeDocument" + ] + }, + "delete": { + "permissions": [ + "ssm:DeleteDocument", + "ssm:GetDocument" + ] + }, + "list": { + "permissions": [ + "ssm:ListDocuments" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssm/maintenancewindow.json b/internal/aws/cfn/schemas/aws/ssm/maintenancewindow.json new file mode 100644 index 00000000..f4cd1289 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/maintenancewindow.json @@ -0,0 +1,78 @@ +{ + "typeName": "AWS::SSM::MaintenanceWindow", + "description": "Resource Type definition for AWS::SSM::MaintenanceWindow", + "additionalProperties": false, + "properties": { + "StartDate": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "AllowUnassociatedTargets": { + "type": "boolean" + }, + "Cutoff": { + "type": "integer" + }, + "Schedule": { + "type": "string" + }, + "Duration": { + "type": "integer" + }, + "ScheduleOffset": { + "type": "integer" + }, + "Id": { + "type": "string" + }, + "EndDate": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Name": { + "type": "string" + }, + "ScheduleTimezone": { + "type": "string" + } + }, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "AllowUnassociatedTargets", + "Cutoff", + "Schedule", + "Duration", + "Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ssm/maintenancewindowtarget.json b/internal/aws/cfn/schemas/aws/ssm/maintenancewindowtarget.json new file mode 100644 index 00000000..524e83e7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/maintenancewindowtarget.json @@ -0,0 +1,68 @@ +{ + "typeName": "AWS::SSM::MaintenanceWindowTarget", + "description": "Resource Type definition for AWS::SSM::MaintenanceWindowTarget", + "additionalProperties": false, + "properties": { + "OwnerInformation": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "WindowId": { + "type": "string" + }, + "ResourceType": { + "type": "string" + }, + "Targets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Targets" + } + }, + "Id": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Targets": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Values", + "Key" + ] + } + }, + "required": [ + "WindowId", + "ResourceType", + "Targets" + ], + "createOnlyProperties": [ + "/properties/WindowId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ssm/maintenancewindowtask.json b/internal/aws/cfn/schemas/aws/ssm/maintenancewindowtask.json new file mode 100644 index 00000000..344e3e5b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/maintenancewindowtask.json @@ -0,0 +1,243 @@ +{ + "typeName": "AWS::SSM::MaintenanceWindowTask", + "description": "Resource Type definition for AWS::SSM::MaintenanceWindowTask", + "additionalProperties": false, + "properties": { + "MaxErrors": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "ServiceRoleArn": { + "type": "string" + }, + "Priority": { + "type": "integer" + }, + "MaxConcurrency": { + "type": "string" + }, + "Targets": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Target" + } + }, + "Name": { + "type": "string" + }, + "TaskArn": { + "type": "string" + }, + "TaskInvocationParameters": { + "$ref": "#/definitions/TaskInvocationParameters" + }, + "WindowId": { + "type": "string" + }, + "TaskParameters": { + "type": "object" + }, + "TaskType": { + "type": "string" + }, + "CutoffBehavior": { + "type": "string" + }, + "Id": { + "type": "string" + }, + "LoggingInfo": { + "$ref": "#/definitions/LoggingInfo" + } + }, + "definitions": { + "TaskInvocationParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "MaintenanceWindowStepFunctionsParameters": { + "$ref": "#/definitions/MaintenanceWindowStepFunctionsParameters" + }, + "MaintenanceWindowRunCommandParameters": { + "$ref": "#/definitions/MaintenanceWindowRunCommandParameters" + }, + "MaintenanceWindowLambdaParameters": { + "$ref": "#/definitions/MaintenanceWindowLambdaParameters" + }, + "MaintenanceWindowAutomationParameters": { + "$ref": "#/definitions/MaintenanceWindowAutomationParameters" + } + } + }, + "Target": { + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Values", + "Key" + ] + }, + "CloudWatchOutputConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchOutputEnabled": { + "type": "boolean" + }, + "CloudWatchLogGroupName": { + "type": "string" + } + } + }, + "MaintenanceWindowRunCommandParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimeoutSeconds": { + "type": "integer" + }, + "Comment": { + "type": "string" + }, + "OutputS3KeyPrefix": { + "type": "string" + }, + "Parameters": { + "type": "object" + }, + "CloudWatchOutputConfig": { + "$ref": "#/definitions/CloudWatchOutputConfig" + }, + "DocumentHashType": { + "type": "string" + }, + "ServiceRoleArn": { + "type": "string" + }, + "NotificationConfig": { + "$ref": "#/definitions/NotificationConfig" + }, + "DocumentVersion": { + "type": "string" + }, + "OutputS3BucketName": { + "type": "string" + }, + "DocumentHash": { + "type": "string" + } + } + }, + "MaintenanceWindowAutomationParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "Parameters": { + "type": "object" + }, + "DocumentVersion": { + "type": "string" + } + } + }, + "NotificationConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "NotificationEvents": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "NotificationArn": { + "type": "string" + }, + "NotificationType": { + "type": "string" + } + }, + "required": [ + "NotificationArn" + ] + }, + "MaintenanceWindowStepFunctionsParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "Input": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "LoggingInfo": { + "type": "object", + "additionalProperties": false, + "properties": { + "Region": { + "type": "string" + }, + "S3Prefix": { + "type": "string" + }, + "S3Bucket": { + "type": "string" + } + }, + "required": [ + "S3Bucket", + "Region" + ] + }, + "MaintenanceWindowLambdaParameters": { + "type": "object", + "additionalProperties": false, + "properties": { + "Qualifier": { + "type": "string" + }, + "Payload": { + "type": "string" + }, + "ClientContext": { + "type": "string" + } + } + } + }, + "required": [ + "WindowId", + "Priority", + "TaskType", + "TaskArn" + ], + "createOnlyProperties": [ + "/properties/WindowId", + "/properties/TaskType" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/ssm/parameter.json b/internal/aws/cfn/schemas/aws/ssm/parameter.json new file mode 100644 index 00000000..c92b41c5 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/parameter.json @@ -0,0 +1,120 @@ +{ + "typeName": "AWS::SSM::Parameter", + "description": "The ``AWS::SSM::Parameter`` resource creates an SSM parameter in SYSlong Parameter Store.\n To create an SSM parameter, you must have the IAMlong (IAM) permissions ``ssm:PutParameter`` and ``ssm:AddTagsToResource``. On stack creation, CFNlong adds the following three tags to the parameter: ``aws:cloudformation:stack-name``, ``aws:cloudformation:logical-id``, and ``aws:cloudformation:stack-id``, in addition to any custom tags you specify.\n To add, update, or remove tags during stack update, you must have IAM permissions for both ``ssm:AddTagsToResource`` and ``ssm:RemoveTagsFromResource``. For more information, see [Managing Access Using Policies](https://docs.aws.amazon.com/systems-manager/latest/userguide/security-iam.html#security_iam_access-manage) in the *User Guide*.\n For information about valid values for parameters, see [About requirements and constraints for parameter names](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-su-create.html#sysman-parameter-name-constraints) in the *User Guide* and [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) in the *API Reference*.", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string", + "description": "The type of parameter.", + "enum": [ + "String", + "StringList" + ] + }, + "Value": { + "type": "string", + "description": "The parameter value.\n If type is ``StringList``, the system returns a comma-separated string with no spaces between commas in the ``Value`` field." + }, + "Description": { + "type": "string", + "description": "Information about the parameter." + }, + "Policies": { + "type": "string", + "description": "Information about the policies assigned to a parameter.\n [Assigning parameter policies](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html) in the *User Guide*." + }, + "AllowedPattern": { + "type": "string", + "description": "A regular expression used to validate the parameter value. For example, for ``String`` types with values restricted to numbers, you can specify the following: ``AllowedPattern=^\\d+$``" + }, + "Tier": { + "type": "string", + "description": "The parameter tier.", + "enum": [ + "Standard", + "Advanced", + "Intelligent-Tiering" + ] + }, + "Tags": { + "type": "object", + "description": "Optional metadata that you assign to a resource in the form of an arbitrary set of tags (key-value pairs). Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag a SYS parameter to identify the type of resource to which it applies, the environment, or the type of configuration data referenced by the parameter.", + "patternProperties": { + "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$": { + "type": "string" + } + }, + "additionalProperties": false + }, + "DataType": { + "type": "string", + "description": "The data type of the parameter, such as ``text`` or ``aws:ec2:image``. The default is ``text``.", + "enum": [ + "text", + "aws:ec2:image" + ] + }, + "Name": { + "type": "string", + "description": "The name of the parameter.\n The maximum length constraint listed below includes capacity for additional system attributes that aren't part of the name. The maximum length for a parameter name, including the full length of the parameter Amazon Resource Name (ARN), is 1011 characters. For example, the length of the following parameter name is 65 characters, not 20 characters: ``arn:aws:ssm:us-east-2:111222333444:parameter/ExampleParameterName``" + } + }, + "required": [ + "Value", + "Type" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/Tags", + "/properties/Description", + "/properties/Tier", + "/properties/AllowedPattern", + "/properties/Policies" + ], + "handlers": { + "create": { + "permissions": [ + "ssm:PutParameter", + "ssm:AddTagsToResource", + "ssm:GetParameters" + ], + "timeoutInMinutes": 5 + }, + "read": { + "permissions": [ + "ssm:GetParameters" + ] + }, + "update": { + "permissions": [ + "ssm:PutParameter", + "ssm:AddTagsToResource", + "ssm:RemoveTagsFromResource", + "ssm:GetParameters" + ], + "timeoutInMinutes": 5 + }, + "delete": { + "permissions": [ + "ssm:DeleteParameter" + ] + }, + "list": { + "permissions": [ + "ssm:DescribeParameters" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssm/patchbaseline.json b/internal/aws/cfn/schemas/aws/ssm/patchbaseline.json new file mode 100644 index 00000000..e1c070ba --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/patchbaseline.json @@ -0,0 +1,370 @@ +{ + "typeName": "AWS::SSM::PatchBaseline", + "description": "Resource Type definition for AWS::SSM::PatchBaseline", + "additionalProperties": false, + "properties": { + "Id": { + "description": "The ID of the patch baseline.", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-:/]{20,128}$", + "minLength": 20, + "maxLength": 128 + }, + "DefaultBaseline": { + "description": "Set the baseline as default baseline. Only registering to default patch baseline is allowed.", + "type": "boolean", + "default": false + }, + "OperatingSystem": { + "description": "Defines the operating system the patch baseline applies to. The Default value is WINDOWS.", + "type": "string", + "default": "WINDOWS", + "enum": [ + "WINDOWS", + "AMAZON_LINUX", + "AMAZON_LINUX_2", + "AMAZON_LINUX_2022", + "AMAZON_LINUX_2023", + "UBUNTU", + "REDHAT_ENTERPRISE_LINUX", + "SUSE", + "CENTOS", + "ORACLE_LINUX", + "DEBIAN", + "MACOS", + "RASPBIAN", + "ROCKY_LINUX", + "ALMA_LINUX" + ] + }, + "Description": { + "description": "The description of the patch baseline.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ApprovalRules": { + "$ref": "#/definitions/RuleGroup" + }, + "Sources": { + "description": "Information about the patches to use to update the instances, including target operating systems and source repository. Applies to Linux instances only.", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/PatchSource" + }, + "minItems": 0, + "maxItems": 20 + }, + "Name": { + "description": "The name of the patch baseline.", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.]{3,128}$", + "minLength": 3, + "maxLength": 128 + }, + "RejectedPatches": { + "description": "A list of explicitly rejected patches for the baseline.", + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 0, + "maxItems": 50, + "insertionOrder": false + }, + "ApprovedPatches": { + "description": "A list of explicitly approved patches for the baseline.", + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 0, + "maxItems": 50, + "insertionOrder": false + }, + "RejectedPatchesAction": { + "description": "The action for Patch Manager to take on patches included in the RejectedPackages list.", + "type": "string", + "default": "ALLOW_AS_DEPENDENCY", + "enum": [ + "ALLOW_AS_DEPENDENCY", + "BLOCK" + ] + }, + "PatchGroups": { + "description": "PatchGroups is used to associate instances with a specific patch baseline", + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "ApprovedPatchesComplianceLevel": { + "description": "Defines the compliance level for approved patches. This means that if an approved patch is reported as missing, this is the severity of the compliance violation. The default value is UNSPECIFIED.", + "type": "string", + "default": "UNSPECIFIED", + "enum": [ + "CRITICAL", + "HIGH", + "MEDIUM", + "LOW", + "INFORMATIONAL", + "UNSPECIFIED" + ] + }, + "ApprovedPatchesEnableNonSecurity": { + "description": "Indicates whether the list of approved patches includes non-security updates that should be applied to the instances. The default value is 'false'. Applies to Linux instances only.", + "type": "boolean", + "default": false + }, + "GlobalFilters": { + "description": "A set of global filters used to include patches in the baseline.", + "$ref": "#/definitions/PatchFilterGroup" + }, + "Tags": { + "description": "Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways.", + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0, + "maxItems": 1000 + } + }, + "definitions": { + "PatchFilterGroup": { + "description": "The patch filter group that defines the criteria for the rule.", + "type": "object", + "additionalProperties": false, + "properties": { + "PatchFilters": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/PatchFilter" + }, + "minItems": 0, + "maxItems": 5 + } + } + }, + "PatchSource": { + "description": "Information about the patches to use to update the instances, including target operating systems and source repository. Applies to Linux instances only.", + "type": "object", + "additionalProperties": false, + "properties": { + "Products": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "minItems": 0, + "maxItems": 20 + }, + "Configuration": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Name": { + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.]{3,50}$" + } + } + }, + "Tag": { + "description": "Metadata that you assign to your AWS resources.", + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "RuleGroup": { + "description": "A set of rules defining the approval rules for a patch baseline.", + "type": "object", + "additionalProperties": false, + "properties": { + "PatchRules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Rule" + }, + "minItems": 0, + "maxItems": 10 + } + }, + "insertionOrder": false + }, + "Rule": { + "description": "Defines an approval rule for a patch baseline.", + "type": "object", + "additionalProperties": false, + "properties": { + "ApproveUntilDate": { + "type": "string", + "minLength": 0, + "maxLength": 10 + }, + "EnableNonSecurity": { + "type": "boolean", + "default": false + }, + "PatchFilterGroup": { + "$ref": "#/definitions/PatchFilterGroup" + }, + "ApproveAfterDays": { + "type": "integer", + "minimum": 0, + "maximum": 360 + }, + "ComplianceLevel": { + "type": "string", + "enum": [ + "CRITICAL", + "HIGH", + "INFORMATIONAL", + "LOW", + "MEDIUM", + "UNSPECIFIED" + ] + } + }, + "insertionOrder": false + }, + "PatchFilter": { + "description": "Defines which patches should be included in a patch baseline.", + "type": "object", + "additionalProperties": false, + "properties": { + "Values": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "minItems": 0, + "maxItems": 20 + }, + "Key": { + "type": "string", + "enum": [ + "ADVISORY_ID", + "ARCH", + "BUGZILLA_ID", + "CLASSIFICATION", + "CVE_ID", + "EPOCH", + "MSRC_SEVERITY", + "NAME", + "PATCH_ID", + "PATCH_SET", + "PRIORITY", + "PRODUCT", + "PRODUCT_FAMILY", + "RELEASE", + "REPOSITORY", + "SECTION", + "SECURITY", + "SEVERITY", + "VERSION" + ] + } + } + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/OperatingSystem" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "ssm:CreatePatchBaseline", + "ssm:RegisterPatchBaselineForPatchGroup", + "ssm:AddTagsToResource", + "ssm:RemoveTagsFromResource", + "ssm:ListTagsForResource", + "ssm:GetDefaultPatchBaseline", + "ssm:RegisterDefaultPatchBaseline" + ] + }, + "delete": { + "permissions": [ + "ssm:DeletePatchBaseline", + "ssm:GetPatchBaseline", + "ssm:DeregisterPatchBaselineForPatchGroup" + ] + }, + "list": { + "permissions": [ + "ssm:DescribePatchBaselines", + "ssm:GetDefaultPatchBaseline", + "ssm:GetPatchBaseline", + "ssm:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "ssm:GetDefaultPatchBaseline", + "ssm:GetPatchBaseline", + "ssm:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ssm:UpdatePatchBaseline", + "ssm:DeregisterPatchBaselineForPatchGroup", + "ssm:AddTagsToResource", + "ssm:RemoveTagsFromResource", + "ssm:ListTagsForResource", + "ssm:GetDefaultPatchBaseline", + "ssm:RegisterDefaultPatchBaseline" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssm/resourcedatasync.json b/internal/aws/cfn/schemas/aws/ssm/resourcedatasync.json new file mode 100644 index 00000000..503701c9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/resourcedatasync.json @@ -0,0 +1,184 @@ +{ + "typeName": "AWS::SSM::ResourceDataSync", + "description": "Resource Type definition for AWS::SSM::ResourceDataSync", + "additionalProperties": false, + "properties": { + "S3Destination": { + "$ref": "#/definitions/S3Destination" + }, + "KMSKeyArn": { + "type": "string", + "minLength": 0, + "maxLength": 512 + }, + "SyncSource": { + "$ref": "#/definitions/SyncSource" + }, + "BucketName": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "BucketRegion": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "SyncFormat": { + "type": "string", + "minLength": 0, + "maxLength": 1024 + }, + "SyncName": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "SyncType": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "BucketPrefix": { + "type": "string", + "minLength": 0, + "maxLength": 64 + } + }, + "definitions": { + "S3Destination": { + "type": "object", + "additionalProperties": false, + "properties": { + "KMSKeyArn": { + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "BucketPrefix": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "BucketName": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "BucketRegion": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "SyncFormat": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": [ + "BucketName", + "BucketRegion", + "SyncFormat" + ] + }, + "SyncSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "IncludeFutureRegions": { + "type": "boolean" + }, + "SourceRegions": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SourceType": { + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "AwsOrganizationsSource": { + "$ref": "#/definitions/AwsOrganizationsSource" + } + }, + "required": [ + "SourceType", + "SourceRegions" + ] + }, + "AwsOrganizationsSource": { + "type": "object", + "additionalProperties": false, + "properties": { + "OrganizationalUnits": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "OrganizationSourceType": { + "type": "string", + "minLength": 1, + "maxLength": 64 + } + }, + "required": [ + "OrganizationSourceType" + ] + } + }, + "required": [ + "SyncName" + ], + "createOnlyProperties": [ + "/properties/KMSKeyArn", + "/properties/SyncFormat", + "/properties/BucketPrefix", + "/properties/SyncName", + "/properties/BucketRegion", + "/properties/BucketName", + "/properties/S3Destination", + "/properties/SyncType" + ], + "primaryIdentifier": [ + "/properties/SyncName" + ], + "readOnlyProperties": [ + "/properties/SyncName" + ], + "handlers": { + "create": { + "permissions": [ + "ssm:CreateResourceDataSync", + "ssm:ListResourceDataSync" + ] + }, + "delete": { + "permissions": [ + "ssm:ListResourceDataSync", + "ssm:DeleteResourceDataSync" + ] + }, + "update": { + "permissions": [ + "ssm:ListResourceDataSync", + "ssm:UpdateResourceDataSync" + ] + }, + "list": { + "permissions": [ + "ssm:ListResourceDataSync" + ] + }, + "read": { + "permissions": [ + "ssm:ListResourceDataSync" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssm/resourcepolicy.json b/internal/aws/cfn/schemas/aws/ssm/resourcepolicy.json new file mode 100644 index 00000000..04763afd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssm/resourcepolicy.json @@ -0,0 +1,72 @@ +{ + "typeName": "AWS::SSM::ResourcePolicy", + "description": "Resource Type definition for AWS::SSM::ResourcePolicy", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "ResourceArn": { + "type": "string", + "description": "Arn of OpsItemGroup etc." + }, + "Policy": { + "type": [ + "object", + "string" + ], + "description": "Actual policy statement." + }, + "PolicyId": { + "type": "string", + "description": "An unique identifier within the policies of a resource. " + }, + "PolicyHash": { + "type": "string", + "description": "A snapshot identifier for the policy over time." + } + }, + "additionalProperties": false, + "required": [ + "ResourceArn", + "Policy" + ], + "tagging": { + "taggable": false + }, + "createOnlyProperties": [ + "/properties/ResourceArn" + ], + "readOnlyProperties": [ + "/properties/PolicyId", + "/properties/PolicyHash" + ], + "primaryIdentifier": [ + "/properties/PolicyId", + "/properties/ResourceArn" + ], + "handlers": { + "create": { + "permissions": [ + "ssm:PutResourcePolicy" + ] + }, + "read": { + "permissions": [ + "ssm:GetResourcePolicies" + ] + }, + "update": { + "permissions": [ + "ssm:PutResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "ssm:DeleteResourcePolicy" + ] + }, + "list": { + "permissions": [ + "ssm:GetResourcePolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssmcontacts/contact.json b/internal/aws/cfn/schemas/aws/ssmcontacts/contact.json new file mode 100644 index 00000000..ff707804 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssmcontacts/contact.json @@ -0,0 +1,196 @@ +{ + "typeName": "AWS::SSMContacts::Contact", + "description": "Resource Type definition for AWS::SSMContacts::Contact", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "ContactTargetInfo": { + "type": "object", + "description": "The contact that SSM Incident Manager is engaging during an incident.", + "properties": { + "ContactId": { + "description": "The Amazon Resource Name (ARN) of the contact.", + "type": "string" + }, + "IsEssential": { + "type": "boolean", + "description": "A Boolean value determining if the contact's acknowledgement stops the progress of stages in the plan." + } + }, + "required": [ + "ContactId", + "IsEssential" + ], + "additionalProperties": false + }, + "ChannelTargetInfo": { + "type": "object", + "description": "Information about the contact channel that SSM Incident Manager uses to engage the contact.", + "properties": { + "ChannelId": { + "description": "The Amazon Resource Name (ARN) of the contact channel.", + "type": "string" + }, + "RetryIntervalInMinutes": { + "type": "integer", + "description": "The number of minutes to wait to retry sending engagement in the case the engagement initially fails." + } + }, + "required": [ + "ChannelId", + "RetryIntervalInMinutes" + ], + "additionalProperties": false + }, + "Stage": { + "description": "A set amount of time that an escalation plan or engagement plan engages the specified contacts or contact methods.", + "type": "object", + "properties": { + "DurationInMinutes": { + "description": "The time to wait until beginning the next stage.", + "type": "integer" + }, + "Targets": { + "type": "array", + "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.", + "items": { + "$ref": "#/definitions/Targets" + } + }, + "RotationIds": { + "type": "array", + "description": "List of Rotation Ids to associate with Contact", + "insertionOrder": false, + "items": { + "type": "string" + } + } + }, + "oneOf": [ + { + "required": [ + "DurationInMinutes" + ] + }, + { + "required": [ + "RotationIds" + ] + } + ], + "additionalProperties": false + }, + "Targets": { + "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.", + "type": "object", + "properties": { + "ContactTargetInfo": { + "$ref": "#/definitions/ContactTargetInfo" + }, + "ChannelTargetInfo": { + "$ref": "#/definitions/ChannelTargetInfo" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "ChannelTargetInfo" + ] + }, + { + "required": [ + "ContactTargetInfo" + ] + } + ] + } + }, + "properties": { + "Alias": { + "description": "Alias of the contact. String value with 20 to 256 characters. Only alphabetical, numeric characters, dash, or underscore allowed.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[a-z0-9_\\-\\.]*$" + }, + "DisplayName": { + "description": "Name of the contact. String value with 3 to 256 characters. Only alphabetical, space, numeric characters, dash, or underscore allowed.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "^[a-zA-Z0-9_\\-\\s]*$" + }, + "Type": { + "description": "Contact type, which specify type of contact. Currently supported values: ?PERSONAL?, ?SHARED?, ?OTHER?.", + "type": "string", + "enum": [ + "PERSONAL", + "ESCALATION", + "ONCALL_SCHEDULE" + ] + }, + "Plan": { + "description": "The stages that an escalation plan or engagement plan engages contacts and contact methods in.", + "type": "array", + "items": { + "$ref": "#/definitions/Stage" + } + }, + "Arn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the contact." + } + }, + "additionalProperties": false, + "required": [ + "Alias", + "DisplayName", + "Type" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/Plan" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Alias", + "/properties/Type" + ], + "handlers": { + "create": { + "permissions": [ + "ssm-contacts:CreateContact", + "ssm-contacts:GetContact", + "ssm-contacts:AssociateContact" + ] + }, + "read": { + "permissions": [ + "ssm-contacts:GetContact" + ] + }, + "update": { + "permissions": [ + "ssm-contacts:UpdateContact", + "ssm-contacts:GetContact", + "ssm-contacts:AssociateContact" + ] + }, + "delete": { + "permissions": [ + "ssm-contacts:DeleteContact", + "ssm-contacts:GetContact", + "ssm-contacts:AssociateContact" + ] + }, + "list": { + "permissions": [ + "ssm-contacts:ListContacts" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssmcontacts/contactchannel.json b/internal/aws/cfn/schemas/aws/ssmcontacts/contactchannel.json new file mode 100644 index 00000000..6089fcca --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssmcontacts/contactchannel.json @@ -0,0 +1,96 @@ +{ + "typeName": "AWS::SSMContacts::ContactChannel", + "description": "Resource Type definition for AWS::SSMContacts::ContactChannel", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "ContactId": { + "description": "ARN of the contact resource", + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "arn:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]*:[0-9]+:([\\w+=\\/,.@:-]+)*" + }, + "ChannelName": { + "description": "The device name. String of 6 to 50 alphabetical, numeric, dash, and underscore characters.", + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[a-zA-Z 0-9_\\-+'&\\uD83C-\\uDBFF\\uDC00-\\uDFFF\\u2000-\\u3300]+" + }, + "ChannelType": { + "description": "Device type, which specify notification channel. Currently supported values: ?SMS?, ?VOICE?, ?EMAIL?, ?CHATBOT.", + "type": "string", + "enum": [ + "SMS", + "VOICE", + "EMAIL" + ] + }, + "DeferActivation": { + "type": "boolean", + "description": "If you want to activate the channel at a later time, you can choose to defer activation. SSM Incident Manager can't engage your contact channel until it has been activated." + }, + "ChannelAddress": { + "description": "The details that SSM Incident Manager uses when trying to engage the contact channel.", + "type": "string" + }, + "Arn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the engagement to a contact channel." + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "ContactId", + "ChannelName", + "ChannelType", + "ChannelAddress" + ] + } + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ContactId", + "/properties/ChannelType" + ], + "writeOnlyProperties": [ + "/properties/DeferActivation" + ], + "handlers": { + "create": { + "permissions": [ + "ssm-contacts:CreateContactChannel", + "ssm-contacts:GetContactChannel" + ] + }, + "read": { + "permissions": [ + "ssm-contacts:GetContactChannel" + ] + }, + "update": { + "permissions": [ + "ssm-contacts:UpdateContactChannel", + "ssm-contacts:GetContactChannel" + ] + }, + "delete": { + "permissions": [ + "ssm-contacts:DeleteContactChannel", + "ssm-contacts:GetContactChannel" + ] + }, + "list": { + "permissions": [ + "ssm-contacts:ListContactChannels" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssmcontacts/plan.json b/internal/aws/cfn/schemas/aws/ssmcontacts/plan.json new file mode 100644 index 00000000..3e5c968c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssmcontacts/plan.json @@ -0,0 +1,180 @@ +{ + "typeName": "AWS::SSMContacts::Plan", + "description": "Engagement Plan for a SSM Incident Manager Contact.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "ContactTargetInfo": { + "type": "object", + "description": "The contact that SSM Incident Manager is engaging during an incident.", + "properties": { + "ContactId": { + "description": "The Amazon Resource Name (ARN) of the contact.", + "type": "string" + }, + "IsEssential": { + "type": "boolean", + "description": "A Boolean value determining if the contact's acknowledgement stops the progress of stages in the plan." + } + }, + "required": [ + "ContactId", + "IsEssential" + ], + "additionalProperties": false + }, + "ChannelTargetInfo": { + "type": "object", + "description": "Information about the contact channel that SSM Incident Manager uses to engage the contact.", + "properties": { + "ChannelId": { + "description": "The Amazon Resource Name (ARN) of the contact channel.", + "type": "string" + }, + "RetryIntervalInMinutes": { + "type": "integer", + "description": "The number of minutes to wait to retry sending engagement in the case the engagement initially fails." + } + }, + "required": [ + "ChannelId", + "RetryIntervalInMinutes" + ], + "additionalProperties": false + }, + "Stage": { + "description": "A set amount of time that an escalation plan or engagement plan engages the specified contacts or contact methods.", + "type": "object", + "properties": { + "DurationInMinutes": { + "description": "The time to wait until beginning the next stage.", + "type": "integer" + }, + "Targets": { + "type": "array", + "insertionOrder": false, + "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.", + "items": { + "$ref": "#/definitions/Targets" + } + } + }, + "required": [ + "DurationInMinutes" + ], + "additionalProperties": false + }, + "Targets": { + "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.", + "type": "object", + "properties": { + "ContactTargetInfo": { + "$ref": "#/definitions/ContactTargetInfo" + }, + "ChannelTargetInfo": { + "$ref": "#/definitions/ChannelTargetInfo" + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "ChannelTargetInfo" + ] + }, + { + "required": [ + "ContactTargetInfo" + ] + } + ] + } + }, + "properties": { + "ContactId": { + "description": "Contact ID for the AWS SSM Incident Manager Contact to associate the plan.", + "type": "string", + "pattern": "arn:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]*:[0-9]+:([\\w+=\\/,.@:-]+)*" + }, + "Stages": { + "description": "The stages that an escalation plan or engagement plan engages contacts and contact methods in.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Stage" + } + }, + "RotationIds": { + "description": "Rotation Ids to associate with Oncall Contact for engagement.", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "Arn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the contact." + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "ContactId", + "Stages" + ] + }, + { + "required": [ + "ContactId", + "RotationIds" + ] + } + ], + "createOnlyProperties": [ + "/properties/ContactId" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "writeOnlyProperties": [ + "/properties/RotationIds" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "ssm-contacts:UpdateContact", + "ssm-contacts:GetContact", + "ssm-contacts:AssociateContact" + ] + }, + "read": { + "permissions": [ + "ssm-contacts:GetContact" + ] + }, + "update": { + "permissions": [ + "ssm-contacts:UpdateContact", + "ssm-contacts:GetContact", + "ssm-contacts:AssociateContact" + ] + }, + "delete": { + "permissions": [ + "ssm-contacts:UpdateContact", + "ssm-contacts:GetContact", + "ssm-contacts:AssociateContact" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssmcontacts/rotation.json b/internal/aws/cfn/schemas/aws/ssmcontacts/rotation.json new file mode 100644 index 00000000..72b8bf37 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssmcontacts/rotation.json @@ -0,0 +1,312 @@ +{ + "typeName": "AWS::SSMContacts::Rotation", + "description": "Resource Type definition for AWS::SSMContacts::Rotation.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "HandOffTime": { + "type": "string", + "pattern": "^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$", + "description": "Details about when an on-call rotation shift begins or ends. Time of the day in format HH:MM" + }, + "CoverageTime": { + "type": "object", + "description": "StartTime and EndTime for the Shift", + "properties": { + "StartTime": { + "$ref": "#/definitions/HandOffTime" + }, + "EndTime": { + "$ref": "#/definitions/HandOffTime" + } + }, + "required": [ + "StartTime", + "EndTime" + ], + "additionalProperties": false + }, + "ShiftCoverage": { + "type": "object", + "description": "Information about the days of the week included in on-call rotation coverage.", + "properties": { + "DayOfWeek": { + "$ref": "#/definitions/DayOfWeek" + }, + "CoverageTimes": { + "description": "Information about when an on-call shift begins and ends.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CoverageTime" + } + } + }, + "required": [ + "DayOfWeek", + "CoverageTimes" + ], + "additionalProperties": false + }, + "DayOfWeek": { + "description": "The day of the week when weekly recurring on-call shift rotations begin. ", + "type": "string", + "enum": [ + "MON", + "TUE", + "WED", + "THU", + "FRI", + "SAT", + "SUN" + ] + }, + "MonthlySetting": { + "type": "object", + "description": "DayOfWeek for Month and HandOff Time for Monthly Recurring Rotation.", + "properties": { + "DayOfMonth": { + "description": "The day of the month when monthly recurring on-call rotations begin.", + "type": "integer", + "minimum": 1, + "maximum": 31 + }, + "HandOffTime": { + "$ref": "#/definitions/HandOffTime" + } + }, + "required": [ + "DayOfMonth", + "HandOffTime" + ], + "additionalProperties": false + }, + "WeeklySetting": { + "type": "object", + "description": "DayOfWeek for Rotation and HandOff Time for Weekly Recurring Rotation.", + "properties": { + "DayOfWeek": { + "$ref": "#/definitions/DayOfWeek" + }, + "HandOffTime": { + "$ref": "#/definitions/HandOffTime" + } + }, + "required": [ + "DayOfWeek", + "HandOffTime" + ], + "additionalProperties": false + }, + "DailySetting": { + "type": "object", + "description": "Handoff time for Daily Recurring Rotation.", + "properties": { + "HandOffTime": { + "$ref": "#/definitions/HandOffTime" + } + }, + "required": [ + "HandOffTime" + ], + "additionalProperties": false + }, + "RecurrenceSettings": { + "description": "Information about when an on-call rotation is in effect and how long the rotation period lasts.", + "type": "object", + "properties": { + "MonthlySettings": { + "description": "Information about on-call rotations that recur monthly.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/MonthlySetting" + } + }, + "WeeklySettings": { + "description": "Information about on-call rotations that recur weekly.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/WeeklySetting" + } + }, + "DailySettings": { + "description": "Information about on-call rotations that recur daily.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/HandOffTime" + } + }, + "NumberOfOnCalls": { + "type": "integer", + "description": "Number of Oncalls per shift.", + "minimum": 1 + }, + "RecurrenceMultiplier": { + "type": "integer", + "description": "The number of days, weeks, or months a single rotation lasts.", + "minimum": 1, + "maximum": 100 + }, + "ShiftCoverages": { + "type": "array", + "insertionOrder": false, + "description": "Information about the days of the week included in on-call rotation coverage.", + "items": { + "$ref": "#/definitions/ShiftCoverage" + } + } + }, + "additionalProperties": false, + "oneOf": [ + { + "required": [ + "NumberOfOnCalls", + "RecurrenceMultiplier", + "WeeklySettings" + ] + }, + { + "required": [ + "NumberOfOnCalls", + "RecurrenceMultiplier", + "MonthlySettings" + ] + }, + { + "required": [ + "NumberOfOnCalls", + "RecurrenceMultiplier", + "DailySettings" + ] + } + ] + } + }, + "properties": { + "Name": { + "description": "Name of the Rotation", + "type": "string", + "pattern": "^[a-zA-Z0-9_]*$" + }, + "ContactIds": { + "description": "Members of the rotation", + "type": "array", + "insertionOrder": false, + "items": { + "type": "string" + } + }, + "StartTime": { + "description": "Start time of the first shift of Oncall Schedule", + "type": "string", + "pattern": "^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})$" + }, + "TimeZoneId": { + "description": "TimeZone Identifier for the Oncall Schedule", + "type": "string" + }, + "Recurrence": { + "$ref": "#/definitions/RecurrenceSettings" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) of the rotation." + } + }, + "additionalProperties": false, + "required": [ + "Name", + "ContactIds", + "StartTime", + "TimeZoneId", + "Recurrence" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ssm-contacts:CreateRotation", + "ssm-contacts:GetRotation", + "ssm-contacts:TagResource", + "ssm-contacts:ListTagsForResource", + "ssm-contacts:UntagResource" + ] + }, + "read": { + "permissions": [ + "ssm-contacts:GetRotation", + "ssm-contacts:TagResource", + "ssm-contacts:ListTagsForResource", + "ssm-contacts:UntagResource" + ] + }, + "update": { + "permissions": [ + "ssm-contacts:UpdateRotation", + "ssm-contacts:GetRotation", + "ssm-contacts:TagResource", + "ssm-contacts:ListTagsForResource", + "ssm-contacts:UntagResource" + ] + }, + "delete": { + "permissions": [ + "ssm-contacts:DeleteRotation", + "ssm-contacts:GetRotation", + "ssm-contacts:ListTagsForResource", + "ssm-contacts:UntagResource" + ] + }, + "list": { + "permissions": [ + "ssm-contacts:ListRotations", + "ssm-contacts:GetRotation", + "ssm-contacts:ListTagsForResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssmincidents/replicationset.json b/internal/aws/cfn/schemas/aws/ssmincidents/replicationset.json new file mode 100644 index 00000000..f2f1acc9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssmincidents/replicationset.json @@ -0,0 +1,158 @@ +{ + "typeName": "AWS::SSMIncidents::ReplicationSet", + "description": "Resource type definition for AWS::SSMIncidents::ReplicationSet", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm-incidents.git", + "definitions": { + "Arn": { + "description": "The ARN of the ReplicationSet.", + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov|iso(-b)?))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$", + "maxLength": 1000 + }, + "RegionName": { + "description": "The AWS region name.", + "type": "string", + "maxLength": 20 + }, + "ReplicationRegion": { + "description": "The ReplicationSet regional configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "RegionName": { + "$ref": "#/definitions/RegionName" + }, + "RegionConfiguration": { + "$ref": "#/definitions/RegionConfiguration" + } + } + }, + "RegionConfiguration": { + "description": "The ReplicationSet regional configuration.", + "type": "object", + "additionalProperties": false, + "properties": { + "SseKmsKeyId": { + "$ref": "#/definitions/Arn" + } + }, + "required": [ + "SseKmsKeyId" + ] + }, + "DeletionProtected": { + "description": "Configures the ReplicationSet deletion protection.", + "type": "boolean" + }, + "RegionList": { + "type": "array", + "minItems": 1, + "maxItems": 3, + "items": { + "$ref": "#/definitions/ReplicationRegion" + }, + "insertionOrder": false, + "uniqueItems": true + }, + "Tag": { + "description": "A key-value pair to tag a resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Arn": { + "description": "The ARN of the ReplicationSet.", + "$ref": "#/definitions/Arn", + "additionalProperties": false + }, + "Regions": { + "description": "The ReplicationSet configuration.", + "$ref": "#/definitions/RegionList" + }, + "DeletionProtected": { + "$ref": "#/definitions/DeletionProtected", + "default": false + }, + "Tags": { + "description": "The tags to apply to the replication set.", + "type": "array", + "default": [], + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Arn" + ], + "required": [ + "Regions" + ], + "taggable": true, + "readOnlyProperties": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "ssm-incidents:CreateReplicationSet", + "ssm-incidents:ListReplicationSets", + "ssm-incidents:UpdateDeletionProtection", + "ssm-incidents:GetReplicationSet", + "ssm-incidents:TagResource", + "ssm-incidents:ListTagsForResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "ssm-incidents:ListReplicationSets", + "ssm-incidents:GetReplicationSet", + "ssm-incidents:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ssm-incidents:UpdateReplicationSet", + "ssm-incidents:UpdateDeletionProtection", + "ssm-incidents:GetReplicationSet", + "ssm-incidents:TagResource", + "ssm-incidents:UntagResource", + "ssm-incidents:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "ssm-incidents:DeleteReplicationSet", + "ssm-incidents:GetReplicationSet" + ] + }, + "list": { + "permissions": [ + "ssm-incidents:ListReplicationSets" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/ssmincidents/responseplan.json b/internal/aws/cfn/schemas/aws/ssmincidents/responseplan.json new file mode 100644 index 00000000..379adf32 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/ssmincidents/responseplan.json @@ -0,0 +1,449 @@ +{ + "typeName": "AWS::SSMIncidents::ResponsePlan", + "description": "Resource type definition for AWS::SSMIncidents::ResponsePlan", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm-incidents.git", + "definitions": { + "SSMContact": { + "description": "The ARN of the contact.", + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:ssm-contacts:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$", + "maxLength": 1000 + }, + "SnsArn": { + "description": "The ARN of the Chatbot SNS topic.", + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:sns:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$", + "maxLength": 1000 + }, + "NotificationTargetItem": { + "description": "A notification target.", + "type": "object", + "additionalProperties": false, + "properties": { + "SnsTopicArn": { + "$ref": "#/definitions/SnsArn" + } + } + }, + "Action": { + "description": "The automation configuration to launch.", + "additionalProperties": false, + "type": "object", + "properties": { + "SsmAutomation": { + "$ref": "#/definitions/SsmAutomation" + } + } + }, + "SsmAutomation": { + "description": "The configuration to use when starting the SSM automation document.", + "type": "object", + "additionalProperties": false, + "required": [ + "RoleArn", + "DocumentName" + ], + "properties": { + "RoleArn": { + "description": "The role ARN to use when starting the SSM automation document.", + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$", + "maxLength": 1000 + }, + "DocumentName": { + "description": "The document name to use when starting the SSM automation document.", + "type": "string", + "maxLength": 128 + }, + "DocumentVersion": { + "description": "The version of the document to use when starting the SSM automation document.", + "type": "string", + "maxLength": 128 + }, + "TargetAccount": { + "description": "The account type to use when starting the SSM automation document.", + "type": "string", + "enum": [ + "IMPACTED_ACCOUNT", + "RESPONSE_PLAN_OWNER_ACCOUNT" + ] + }, + "Parameters": { + "description": "The parameters to set when starting the SSM automation document.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SsmParameter" + }, + "minItems": 1, + "maxItems": 200, + "default": [] + }, + "DynamicParameters": { + "description": "The parameters with dynamic values to set when starting the SSM automation document.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DynamicSsmParameter" + }, + "maxItems": 200, + "default": [] + } + } + }, + "SsmParameter": { + "description": "A parameter to set when starting the SSM automation document.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "Values": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "maxItems": 10, + "items": { + "$ref": "#/definitions/SsmParameterValue" + } + } + }, + "required": [ + "Values", + "Key" + ], + "additionalProperties": false + }, + "SsmParameterValue": { + "description": "A value of the parameter to set when starting the SSM automation document.", + "type": "string", + "maxLength": 10000 + }, + "DynamicSsmParameter": { + "description": "A parameter with a dynamic value to set when starting the SSM automation document.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 50 + }, + "Value": { + "$ref": "#/definitions/DynamicSsmParameterValue" + } + }, + "required": [ + "Value", + "Key" + ], + "additionalProperties": false + }, + "DynamicSsmParameterValue": { + "description": "Value of the dynamic parameter to set when starting the SSM automation document.", + "additionalProperties": false, + "type": "object", + "properties": { + "Variable": { + "$ref": "#/definitions/VariableType" + } + } + }, + "VariableType": { + "description": "The variable types used as dynamic parameter value when starting the SSM automation document.", + "type": "string", + "enum": [ + "INCIDENT_RECORD_ARN", + "INVOLVED_RESOURCES" + ] + }, + "Integration": { + "type": "object", + "additionalProperties": false, + "properties": { + "PagerDutyConfiguration": { + "$ref": "#/definitions/PagerDutyConfiguration" + } + }, + "oneOf": [ + { + "required": [ + "PagerDutyConfiguration" + ] + } + ] + }, + "PagerDutyConfiguration": { + "description": "The pagerDuty configuration to use when starting the incident.", + "type": "object", + "additionalProperties": false, + "required": [ + "Name", + "SecretId", + "PagerDutyIncidentConfiguration" + ], + "properties": { + "Name": { + "description": "The name of the pagerDuty configuration.", + "type": "string", + "minLength": 1, + "maxLength": 200 + }, + "SecretId": { + "description": "The AWS secrets manager secretId storing the pagerDuty token.", + "type": "string", + "minLength": 1, + "maxLength": 512 + }, + "PagerDutyIncidentConfiguration": { + "$ref": "#/definitions/PagerDutyIncidentConfiguration" + } + } + }, + "PagerDutyIncidentConfiguration": { + "description": "The pagerDuty incident configuration.", + "additionalProperties": false, + "type": "object", + "properties": { + "ServiceId": { + "description": "The pagerDuty serviceId.", + "type": "string", + "minLength": 1, + "maxLength": 200 + } + }, + "required": [ + "ServiceId" + ] + }, + "Tag": { + "description": "A key-value pair to tag a resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "IncidentTemplate": { + "description": "The incident template configuration.", + "additionalProperties": false, + "type": "object", + "required": [ + "Title", + "Impact" + ], + "properties": { + "DedupeString": { + "description": "The deduplication string.", + "type": "string", + "maxLength": 1000, + "minLength": 1 + }, + "Impact": { + "description": "The impact value.", + "type": "integer", + "minimum": 1, + "maximum": 5 + }, + "NotificationTargets": { + "description": "The list of notification targets.", + "type": "array", + "default": [], + "maxItems": 10, + "items": { + "$ref": "#/definitions/NotificationTargetItem" + }, + "insertionOrder": false + }, + "Summary": { + "description": "The summary string.", + "type": "string", + "maxLength": 4000, + "minLength": 1 + }, + "Title": { + "description": "The title string.", + "type": "string", + "maxLength": 200 + }, + "IncidentTags": { + "description": "Tags that get applied to incidents created by the StartIncident API action.", + "type": "array", + "uniqueItems": true, + "insertionOrder": false, + "default": [], + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + } + }, + "ChatbotSns": { + "type": "array", + "uniqueItems": true, + "insertionOrder": true, + "default": [], + "items": { + "$ref": "#/definitions/SnsArn" + } + }, + "ChatChannel": { + "description": "The chat channel configuration.", + "additionalProperties": false, + "type": "object", + "properties": { + "ChatbotSns": { + "$ref": "#/definitions/ChatbotSns" + } + } + } + }, + "properties": { + "Arn": { + "description": "The ARN of the response plan.", + "type": "string", + "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$", + "maxLength": 1000 + }, + "Name": { + "description": "The name of the response plan.", + "type": "string", + "pattern": "^[a-zA-Z0-9_-]*$", + "maxLength": 200, + "minLength": 1 + }, + "DisplayName": { + "description": "The display name of the response plan.", + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + "ChatChannel": { + "$ref": "#/definitions/ChatChannel" + }, + "Engagements": { + "description": "The list of engagements to use.", + "type": "array", + "default": [], + "maxItems": 5, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SSMContact" + } + }, + "Actions": { + "description": "The list of actions.", + "type": "array", + "default": [], + "uniqueItems": true, + "insertionOrder": true, + "maxItems": 1, + "items": { + "$ref": "#/definitions/Action" + } + }, + "Integrations": { + "description": "The list of integrations.", + "type": "array", + "default": [], + "uniqueItems": true, + "insertionOrder": true, + "maxItems": 1, + "items": { + "$ref": "#/definitions/Integration" + } + }, + "Tags": { + "description": "The tags to apply to the response plan.", + "type": "array", + "default": [], + "uniqueItems": true, + "insertionOrder": false, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "IncidentTemplate": { + "$ref": "#/definitions/IncidentTemplate" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "required": [ + "Name", + "IncidentTemplate" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "ssm-incidents:CreateResponsePlan", + "ssm-incidents:GetResponsePlan", + "ssm-incidents:TagResource", + "ssm-incidents:ListTagsForResource", + "iam:PassRole", + "secretsmanager:GetSecretValue", + "kms:Decrypt", + "kms:GenerateDataKey*" + ] + }, + "read": { + "permissions": [ + "ssm-incidents:GetResponsePlan", + "ssm-incidents:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ssm-incidents:UpdateResponsePlan", + "ssm-incidents:GetResponsePlan", + "ssm-incidents:TagResource", + "ssm-incidents:UntagResource", + "ssm-incidents:ListTagsForResource", + "iam:PassRole", + "secretsmanager:GetSecretValue", + "kms:Decrypt", + "kms:GenerateDataKey*" + ] + }, + "delete": { + "permissions": [ + "ssm-incidents:DeleteResponsePlan", + "ssm-incidents:GetResponsePlan" + ] + }, + "list": { + "permissions": [ + "ssm-incidents:ListResponsePlans" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sso/assignment.json b/internal/aws/cfn/schemas/aws/sso/assignment.json new file mode 100644 index 00000000..56ef4ca2 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sso/assignment.json @@ -0,0 +1,115 @@ +{ + "typeName": "AWS::SSO::Assignment", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false + }, + "description": "Resource Type definition for SSO assignmet", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-assignment", + "properties": { + "InstanceArn": { + "description": "The sso instance that the permission set is owned.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}", + "minLength": 10, + "maxLength": 1224 + }, + "TargetId": { + "description": "The account id to be provisioned.", + "type": "string", + "pattern": "\\d{12}" + }, + "TargetType": { + "description": "The type of resource to be provsioned to, only aws account now", + "type": "string", + "enum": [ + "AWS_ACCOUNT" + ] + }, + "PermissionSetArn": { + "description": "The permission set that the assignemt will be assigned", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16}", + "minLength": 10, + "maxLength": 1224 + }, + "PrincipalType": { + "description": "The assignee's type, user/group", + "type": "string", + "enum": [ + "USER", + "GROUP" + ] + }, + "PrincipalId": { + "description": "The assignee's identifier, user id/group id", + "type": "string", + "pattern": "^([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$", + "minLength": 1, + "maxLength": 47 + } + }, + "additionalProperties": false, + "required": [ + "InstanceArn", + "TargetId", + "TargetType", + "PermissionSetArn", + "PrincipalType", + "PrincipalId" + ], + "createOnlyProperties": [ + "/properties/InstanceArn", + "/properties/TargetId", + "/properties/TargetType", + "/properties/PermissionSetArn", + "/properties/PrincipalType", + "/properties/PrincipalId" + ], + "primaryIdentifier": [ + "/properties/InstanceArn", + "/properties/TargetId", + "/properties/TargetType", + "/properties/PermissionSetArn", + "/properties/PrincipalType", + "/properties/PrincipalId" + ], + "handlers": { + "create": { + "permissions": [ + "sso:CreateAccountAssignment", + "sso:DescribeAccountAssignmentCreationStatus", + "sso:ListAccountAssignments", + "iam:GetSAMLProvider", + "iam:CreateSAMLProvider", + "iam:AttachRolePolicy", + "iam:PutRolePolicy", + "iam:CreateRole", + "iam:ListRolePolicies" + ] + }, + "read": { + "permissions": [ + "sso:ListAccountAssignments", + "iam:GetSAMLProvider", + "iam:ListRolePolicies" + ] + }, + "delete": { + "permissions": [ + "sso:ListAccountAssignments", + "sso:DeleteAccountAssignment", + "sso:DescribeAccountAssignmentDeletionStatus", + "iam:GetSAMLProvider", + "iam:ListRolePolicies" + ] + }, + "list": { + "permissions": [ + "sso:ListAccountAssignments", + "iam:ListRolePolicies" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/sso/instanceaccesscontrolattributeconfiguration.json b/internal/aws/cfn/schemas/aws/sso/instanceaccesscontrolattributeconfiguration.json new file mode 100644 index 00000000..a86ab3ad --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sso/instanceaccesscontrolattributeconfiguration.json @@ -0,0 +1,134 @@ +{ + "typeName": "AWS::SSO::InstanceAccessControlAttributeConfiguration", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false + }, + "description": "Resource Type definition for SSO InstanceAccessControlAttributeConfiguration", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-instanceaccesscontrolattributeconfiguration", + "definitions": { + "AccessControlAttributeValueSource": { + "type": "string", + "minLength": 0, + "maxLength": 256, + "pattern": "[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@\\[\\]\\{\\}\\$\\\\\"]*" + }, + "AccessControlAttributeValueSourceList": { + "type": "array", + "insertionOrder": true, + "items": { + "$ref": "#/definitions/AccessControlAttributeValueSource" + }, + "maxItems": 1 + }, + "AccessControlAttributeValue": { + "type": "object", + "properties": { + "Source": { + "$ref": "#/definitions/AccessControlAttributeValueSourceList" + } + }, + "required": [ + "Source" + ], + "additionalProperties": false + }, + "AccessControlAttribute": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]+", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "$ref": "#/definitions/AccessControlAttributeValue" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "AccessControlAttributeList": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/AccessControlAttribute" + }, + "maxItems": 50 + } + }, + "properties": { + "InstanceArn": { + "description": "The ARN of the AWS SSO instance under which the operation will be executed.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}", + "minLength": 10, + "maxLength": 1224 + }, + "InstanceAccessControlAttributeConfiguration": { + "description": "The InstanceAccessControlAttributeConfiguration property has been deprecated but is still supported for backwards compatibility purposes. We recomend that you use AccessControlAttributes property instead.", + "type": "object", + "properties": { + "AccessControlAttributes": { + "$ref": "#/definitions/AccessControlAttributeList" + } + }, + "required": [ + "AccessControlAttributes" + ], + "additionalProperties": false + }, + "AccessControlAttributes": { + "$ref": "#/definitions/AccessControlAttributeList" + } + }, + "additionalProperties": false, + "required": [ + "InstanceArn" + ], + "createOnlyProperties": [ + "/properties/InstanceArn" + ], + "primaryIdentifier": [ + "/properties/InstanceArn" + ], + "handlers": { + "create": { + "permissions": [ + "sso:CreateInstanceAccessControlAttributeConfiguration", + "sso:UpdateApplicationProfileForAWSAccountInstance", + "sso:DescribeInstanceAccessControlAttributeConfiguration" + ] + }, + "read": { + "permissions": [ + "sso:DescribeInstanceAccessControlAttributeConfiguration" + ] + }, + "update": { + "permissions": [ + "sso:UpdateInstanceAccessControlAttributeConfiguration", + "sso:DescribeInstanceAccessControlAttributeConfiguration" + ] + }, + "delete": { + "permissions": [ + "sso:DeleteInstanceAccessControlAttributeConfiguration", + "sso:DescribeInstanceAccessControlAttributeConfiguration" + ] + }, + "list": { + "permissions": [ + "sso:DescribeInstanceAccessControlAttributeConfiguration" + ] + } + }, + "deprecatedProperties": [ + "/properties/InstanceAccessControlAttributeConfiguration" + ] +} diff --git a/internal/aws/cfn/schemas/aws/sso/permissionset.json b/internal/aws/cfn/schemas/aws/sso/permissionset.json new file mode 100644 index 00000000..8e2c1d9f --- /dev/null +++ b/internal/aws/cfn/schemas/aws/sso/permissionset.json @@ -0,0 +1,232 @@ +{ + "typeName": "AWS::SSO::PermissionSet", + "description": "Resource Type definition for SSO PermissionSet", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "definitions": { + "Tag": { + "description": "The metadata that you apply to the permission set to help you categorize and organize them.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "pattern": "[\\w+=,.@-]+", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "pattern": "[\\w+=,.@-]+", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "ManagedPolicyArn": { + "description": "The managed policy to attach.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "CustomerManagedPolicyReference": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": "[\\w+=,.@-]+", + "minLength": 1, + "maxLength": 128 + }, + "Path": { + "type": "string", + "pattern": "((/[A-Za-z0-9\\.,\\+@=_-]+)*)/", + "minLength": 1, + "maxLength": 512 + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "PermissionsBoundary": { + "type": "object", + "additionalProperties": false, + "properties": { + "CustomerManagedPolicyReference": { + "$ref": "#/definitions/CustomerManagedPolicyReference" + }, + "ManagedPolicyArn": { + "$ref": "#/definitions/ManagedPolicyArn" + } + } + } + }, + "properties": { + "Name": { + "description": "The name you want to assign to this permission set.", + "type": "string", + "pattern": "[\\w+=,.@-]+", + "minLength": 1, + "maxLength": 32 + }, + "PermissionSetArn": { + "description": "The permission set that the policy will be attached to", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16}", + "minLength": 10, + "maxLength": 1224 + }, + "Description": { + "description": "The permission set description.", + "type": "string", + "pattern": "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]*", + "minLength": 1, + "maxLength": 700 + }, + "InstanceArn": { + "description": "The sso instance arn that the permission set is owned.", + "type": "string", + "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}", + "minLength": 10, + "maxLength": 1224 + }, + "SessionDuration": { + "description": "The length of time that a user can be signed in to an AWS account.", + "type": "string", + "pattern": "^(-?)P(?=\\d|T\\d)(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)([DW]))?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$", + "minLength": 1, + "maxLength": 100 + }, + "RelayStateType": { + "description": "The relay state URL that redirect links to any service in the AWS Management Console.", + "type": "string", + "pattern": "[a-zA-Z0-9&$@#\\/%?=~\\-_'"|!:,.;*+\\[\\]\\ \\(\\)\\{\\}]+", + "minLength": 1, + "maxLength": 240 + }, + "ManagedPolicies": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/ManagedPolicyArn" + }, + "maxItems": 20, + "default": [] + }, + "InlinePolicy": { + "description": "The inline policy to put in permission set.", + "type": [ + "object", + "string" + ] + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 50 + }, + "CustomerManagedPolicyReferences": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CustomerManagedPolicyReference" + }, + "maxItems": 20, + "default": [] + }, + "PermissionsBoundary": { + "$ref": "#/definitions/PermissionsBoundary" + } + }, + "additionalProperties": false, + "required": [ + "Name", + "InstanceArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "tagProperty": "/properties/Tags" + }, + "createOnlyProperties": [ + "/properties/InstanceArn", + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/PermissionSetArn" + ], + "primaryIdentifier": [ + "/properties/InstanceArn", + "/properties/PermissionSetArn" + ], + "handlers": { + "create": { + "permissions": [ + "sso:CreatePermissionSet", + "sso:PutInlinePolicyToPermissionSet", + "sso:AttachManagedPolicyToPermissionSet", + "sso:AttachCustomerManagedPolicyReferenceToPermissionSet", + "sso:PutPermissionsBoundaryToPermissionSet", + "sso:TagResource", + "sso:DescribePermissionSet", + "sso:ListTagsForResource", + "sso:ListManagedPoliciesInPermissionSet", + "sso:ListCustomerManagedPolicyReferencesInPermissionSet", + "sso:GetInlinePolicyForPermissionSet", + "sso:GetPermissionsBoundaryForPermissionSet" + ] + }, + "read": { + "permissions": [ + "sso:DescribePermissionSet", + "sso:ListTagsForResource", + "sso:ListManagedPoliciesInPermissionSet", + "sso:ListCustomerManagedPolicyReferencesInPermissionSet", + "sso:GetInlinePolicyForPermissionSet", + "sso:GetPermissionsBoundaryForPermissionSet" + ] + }, + "update": { + "permissions": [ + "sso:UpdatePermissionSet", + "sso:TagResource", + "sso:UntagResource", + "sso:ListTagsForResource", + "sso:AttachManagedPolicyToPermissionSet", + "sso:AttachCustomerManagedPolicyReferenceToPermissionSet", + "sso:DetachManagedPolicyFromPermissionSet", + "sso:DetachCustomerManagedPolicyReferenceFromPermissionSet", + "sso:ListManagedPoliciesInPermissionSet", + "sso:ListCustomerManagedPolicyReferencesInPermissionSet", + "sso:PutInlinePolicyToPermissionSet", + "sso:GetPermissionsBoundaryForPermissionSet", + "sso:DeletePermissionsBoundaryFromPermissionSet", + "sso:PutPermissionsBoundaryToPermissionSet", + "sso:DeleteInlinePolicyFromPermissionSet", + "sso:ProvisionPermissionSet", + "sso:DescribePermissionSet", + "sso:GetInlinePolicyForPermissionSet", + "sso:DescribePermissionSetProvisioningStatus" + ] + }, + "delete": { + "permissions": [ + "sso:DeletePermissionSet" + ] + }, + "list": { + "permissions": [ + "sso:DescribePermissionSet" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/stepfunctions/activity.json b/internal/aws/cfn/schemas/aws/stepfunctions/activity.json new file mode 100644 index 00000000..9a1f2bb1 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/stepfunctions/activity.json @@ -0,0 +1,92 @@ +{ + "typeName": "AWS::StepFunctions::Activity", + "description": "Resource schema for Activity", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "definitions": { + "TagsEntry": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TagsEntry" + } + } + }, + "additionalProperties": false, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "required": [ + "Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "states:CreateActivity" + ] + }, + "read": { + "permissions": [ + "states:DescribeActivity", + "states:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "states:ListTagsForResource", + "states:TagResource", + "states:UntagResource" + ] + }, + "delete": { + "permissions": [ + "states:DeleteActivity" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/stepfunctions/statemachine.json b/internal/aws/cfn/schemas/aws/stepfunctions/statemachine.json new file mode 100644 index 00000000..dffad374 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/stepfunctions/statemachine.json @@ -0,0 +1,265 @@ +{ + "typeName": "AWS::StepFunctions::StateMachine", + "description": "Resource schema for StateMachine", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "definitions": { + "TagsEntry": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ + "Key", + "Value" + ] + }, + "CloudWatchLogsLogGroup": { + "type": "object", + "additionalProperties": false, + "properties": { + "LogGroupArn": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "relationshipRef": { + "typeName": "AWS::Logs::LogGroup", + "propertyPath": "/properties/Arn" + } + } + } + }, + "LogDestination": { + "type": "object", + "additionalProperties": false, + "properties": { + "CloudWatchLogsLogGroup": { + "$ref": "#/definitions/CloudWatchLogsLogGroup" + } + } + }, + "LoggingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Level": { + "type": "string", + "enum": [ + "ALL", + "ERROR", + "FATAL", + "OFF" + ] + }, + "IncludeExecutionData": { + "type": "boolean" + }, + "Destinations": { + "type": "array", + "minItems": 1, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/LogDestination" + } + } + } + }, + "TracingConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + } + } + }, + "S3Location": { + "type": "object", + "additionalProperties": false, + "properties": { + "Bucket": { + "type": "string" + }, + "Key": { + "type": "string" + }, + "Version": { + "type": "string" + } + }, + "required": [ + "Bucket", + "Key" + ] + }, + "DefinitionSubstitutions": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + ".*": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "boolean" + } + ] + } + }, + "minProperties": 1 + }, + "Definition": { + "type": "object", + "minProperties": 1 + } + }, + "properties": { + "Arn": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Name": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DefinitionString": { + "type": "string", + "minLength": 1, + "maxLength": 1048576 + }, + "RoleArn": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "relationshipRef": { + "typeName": "AWS::IAM::Role", + "propertyPath": "/properties/Arn" + } + }, + "StateMachineName": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "StateMachineType": { + "type": "string", + "enum": [ + "STANDARD", + "EXPRESS" + ] + }, + "StateMachineRevisionId": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "LoggingConfiguration": { + "$ref": "#/definitions/LoggingConfiguration" + }, + "TracingConfiguration": { + "$ref": "#/definitions/TracingConfiguration" + }, + "DefinitionS3Location": { + "$ref": "#/definitions/S3Location" + }, + "DefinitionSubstitutions": { + "$ref": "#/definitions/DefinitionSubstitutions" + }, + "Definition": { + "$ref": "#/definitions/Definition" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/TagsEntry" + } + } + }, + "required": [ + "RoleArn" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Name", + "/properties/StateMachineRevisionId" + ], + "createOnlyProperties": [ + "/properties/StateMachineName", + "/properties/StateMachineType" + ], + "writeOnlyProperties": [ + "/properties/Definition", + "/properties/DefinitionS3Location", + "/properties/DefinitionSubstitutions" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/StateMachineName" + ] + ], + "handlers": { + "create": { + "permissions": [ + "states:CreateStateMachine", + "states:DescribeStateMachine", + "states:TagResource", + "iam:PassRole", + "s3:GetObject" + ] + }, + "read": { + "permissions": [ + "states:DescribeStateMachine", + "states:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "states:UpdateStateMachine", + "states:TagResource", + "states:UntagResource", + "states:ListTagsForResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "states:DeleteStateMachine", + "states:DescribeStateMachine" + ] + }, + "list": { + "permissions": [ + "states:ListStateMachines" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/stepfunctions/statemachinealias.json b/internal/aws/cfn/schemas/aws/stepfunctions/statemachinealias.json new file mode 100644 index 00000000..bc798e05 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/stepfunctions/statemachinealias.json @@ -0,0 +1,185 @@ +{ + "typeName": "AWS::StepFunctions::StateMachineAlias", + "description": "Resource schema for StateMachineAlias", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "definitions": { + "RoutingConfigurationVersion": { + "type": "object", + "properties": { + "StateMachineVersionArn": { + "type": "string", + "description": "The Amazon Resource Name (ARN) that identifies one or two state machine versions defined in the routing configuration.", + "minLength": 1, + "maxLength": 2048 + }, + "Weight": { + "type": "integer", + "description": "The percentage of traffic you want to route to the state machine version. The sum of the weights in the routing configuration must be equal to 100.", + "minimum": 0, + "maximum": 100 + } + }, + "required": [ + "StateMachineVersionArn", + "Weight" + ], + "additionalProperties": false + }, + "RoutingConfiguration": { + "type": "array", + "description": "The routing configuration of the alias. One or two versions can be mapped to an alias to split StartExecution requests of the same state machine.", + "minItems": 1, + "maxItems": 2, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/RoutingConfigurationVersion" + } + }, + "DeploymentPreference": { + "type": "object", + "description": "The settings to enable gradual state machine deployments.", + "properties": { + "StateMachineVersionArn": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Type": { + "type": "string", + "description": "The type of deployment to perform.", + "enum": [ + "LINEAR", + "ALL_AT_ONCE", + "CANARY" + ] + }, + "Percentage": { + "type": "integer", + "description": "The percentage of traffic to shift to the new version in each increment.", + "minimum": 1, + "maximum": 99 + }, + "Interval": { + "type": "integer", + "description": "The time in minutes between each traffic shifting increment.", + "minimum": 1, + "maximum": 2100 + }, + "Alarms": { + "type": "array", + "description": "A list of CloudWatch alarm names that will be monitored during the deployment. The deployment will fail and rollback if any alarms go into ALARM state.", + "minItems": 1, + "maxItems": 100, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + } + }, + "required": [ + "StateMachineVersionArn", + "Type" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "description": "The ARN of the alias." + }, + "Name": { + "type": "string", + "description": "The alias name.", + "minLength": 1, + "maxLength": 80 + }, + "Description": { + "type": "string", + "description": "An optional description of the alias.", + "minLength": 1, + "maxLength": 256 + }, + "RoutingConfiguration": { + "$ref": "#/definitions/RoutingConfiguration" + }, + "DeploymentPreference": { + "$ref": "#/definitions/DeploymentPreference" + } + }, + "additionalProperties": false, + "tagging": { + "taggable": false + }, + "oneOf": [ + { + "required": [ + "RoutingConfiguration" + ] + }, + { + "required": [ + "DeploymentPreference" + ] + } + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/DeploymentPreference" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "states:CreateStateMachineAlias", + "states:DescribeStateMachineAlias" + ] + }, + "read": { + "permissions": [ + "states:DescribeStateMachineAlias" + ] + }, + "update": { + "permissions": [ + "cloudwatch:DescribeAlarms", + "states:UpdateStateMachineAlias", + "states:DescribeStateMachineAlias" + ] + }, + "delete": { + "permissions": [ + "states:DescribeStateMachineAlias", + "states:DeleteStateMachineAlias" + ] + }, + "list": { + "permissions": [ + "states:ListStateMachineAliases" + ], + "handlerSchema": { + "properties": { + "RoutingConfiguration": { + "$ref": "resource-schema.json#/properties/RoutingConfiguration" + } + }, + "required": [ + "RoutingConfiguration" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/stepfunctions/statemachineversion.json b/internal/aws/cfn/schemas/aws/stepfunctions/statemachineversion.json new file mode 100644 index 00000000..31f25bd4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/stepfunctions/statemachineversion.json @@ -0,0 +1,83 @@ +{ + "typeName": "AWS::StepFunctions::StateMachineVersion", + "description": "Resource schema for StateMachineVersion", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "definitions": {}, + "properties": { + "Arn": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "StateMachineArn": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "StateMachineRevisionId": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Description": { + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": [ + "StateMachineArn" + ], + "tagging": { + "taggable": false + }, + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/StateMachineArn", + "/properties/StateMachineRevisionId" + ], + "writeOnlyProperties": [ + "/properties/StateMachineArn" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "states:PublishStateMachineVersion", + "states:ListStateMachineVersions", + "states:DescribeStateMachine" + ] + }, + "read": { + "permissions": [ + "states:DescribeStateMachine" + ] + }, + "delete": { + "permissions": [ + "states:DeleteStateMachineVersion", + "states:DescribeStateMachine" + ] + }, + "list": { + "permissions": [ + "states:ListStateMachineVersions" + ], + "handlerSchema": { + "properties": { + "StateMachineArn": { + "$ref": "resource-schema.json#/properties/StateMachineArn" + } + }, + "required": [ + "StateMachineArn" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/supportapp/accountalias.json b/internal/aws/cfn/schemas/aws/supportapp/accountalias.json new file mode 100644 index 00000000..4dfe6f0d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/supportapp/accountalias.json @@ -0,0 +1,61 @@ +{ + "typeName": "AWS::SupportApp::AccountAlias", + "description": "An AWS Support App resource that creates, updates, reads, and deletes a customer's account alias.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-supportapp.git", + "properties": { + "AccountAlias": { + "description": "An account alias associated with a customer's account.", + "type": "string", + "pattern": "^[\\w\\- ]+$", + "minLength": 1, + "maxLength": 30 + }, + "AccountAliasResourceId": { + "description": "Unique identifier representing an alias tied to an account", + "type": "string", + "pattern": "^[\\w\\- ]+$", + "minLength": 29, + "maxLength": 29 + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/AccountAliasResourceId" + ], + "required": [ + "AccountAlias" + ], + "readOnlyProperties": [ + "/properties/AccountAliasResourceId" + ], + "handlers": { + "create": { + "permissions": [ + "supportapp:PutAccountAlias", + "supportapp:GetAccountAlias" + ] + }, + "read": { + "permissions": [ + "supportapp:GetAccountAlias" + ] + }, + "update": { + "permissions": [ + "supportapp:PutAccountAlias", + "supportapp:GetAccountAlias" + ] + }, + "delete": { + "permissions": [ + "supportapp:DeleteAccountAlias", + "supportapp:GetAccountAlias" + ] + }, + "list": { + "permissions": [ + "supportapp:GetAccountAlias" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/supportapp/slackchannelconfiguration.json b/internal/aws/cfn/schemas/aws/supportapp/slackchannelconfiguration.json new file mode 100644 index 00000000..1403a3ef --- /dev/null +++ b/internal/aws/cfn/schemas/aws/supportapp/slackchannelconfiguration.json @@ -0,0 +1,101 @@ +{ + "typeName": "AWS::SupportApp::SlackChannelConfiguration", + "description": "An AWS Support App resource that creates, updates, lists and deletes Slack channel configurations.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-supportapp.git", + "properties": { + "TeamId": { + "description": "The team ID in Slack, which uniquely identifies a workspace.", + "type": "string", + "pattern": "^\\S+$", + "minLength": 1, + "maxLength": 256 + }, + "ChannelId": { + "description": "The channel ID in Slack, which identifies a channel within a workspace.", + "type": "string", + "pattern": "^\\S+$", + "minLength": 1, + "maxLength": 256 + }, + "ChannelName": { + "description": "The channel name in Slack.", + "type": "string", + "pattern": "^.+$", + "minLength": 1, + "maxLength": 256 + }, + "NotifyOnCreateOrReopenCase": { + "description": "Whether to notify when a case is created or reopened.", + "type": "boolean" + }, + "NotifyOnAddCorrespondenceToCase": { + "description": "Whether to notify when a correspondence is added to a case.", + "type": "boolean" + }, + "NotifyOnResolveCase": { + "description": "Whether to notify when a case is resolved.", + "type": "boolean" + }, + "NotifyOnCaseSeverity": { + "description": "The severity level of a support case that a customer wants to get notified for.", + "type": "string", + "enum": [ + "none", + "all", + "high" + ] + }, + "ChannelRoleArn": { + "description": "The Amazon Resource Name (ARN) of an IAM role that grants the AWS Support App access to perform operations for AWS services.", + "type": "string", + "pattern": "^arn:aws[-a-z0-9]*:iam::[0-9]{12}:role\\/(.+)$", + "minLength": 31, + "maxLength": 2048 + } + }, + "required": [ + "TeamId", + "ChannelId", + "NotifyOnCaseSeverity", + "ChannelRoleArn" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/TeamId", + "/properties/ChannelId" + ], + "createOnlyProperties": [ + "/properties/TeamId", + "/properties/ChannelId" + ], + "handlers": { + "create": { + "permissions": [ + "supportapp:CreateSlackChannelConfiguration", + "supportapp:ListSlackChannelConfigurations" + ] + }, + "read": { + "permissions": [ + "supportapp:ListSlackChannelConfigurations" + ] + }, + "update": { + "permissions": [ + "supportapp:UpdateSlackChannelConfiguration", + "supportapp:ListSlackChannelConfigurations" + ] + }, + "delete": { + "permissions": [ + "supportapp:DeleteSlackChannelConfiguration", + "supportapp:ListSlackChannelConfigurations" + ] + }, + "list": { + "permissions": [ + "supportapp:ListSlackChannelConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/supportapp/slackworkspaceconfiguration.json b/internal/aws/cfn/schemas/aws/supportapp/slackworkspaceconfiguration.json new file mode 100644 index 00000000..14deb90b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/supportapp/slackworkspaceconfiguration.json @@ -0,0 +1,67 @@ +{ + "typeName": "AWS::SupportApp::SlackWorkspaceConfiguration", + "description": "An AWS Support App resource that creates, updates, lists, and deletes Slack workspace configurations.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-supportapp.git", + "tagging": { + "taggable": false + }, + "properties": { + "TeamId": { + "description": "The team ID in Slack, which uniquely identifies a workspace.", + "type": "string", + "pattern": "^\\S+$", + "minLength": 1, + "maxLength": 256 + }, + "VersionId": { + "description": "An identifier used to update an existing Slack workspace configuration in AWS CloudFormation.", + "type": "string", + "pattern": "^[0-9]+$", + "minLength": 1, + "maxLength": 256 + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/TeamId" + ], + "required": [ + "TeamId" + ], + "createOnlyProperties": [ + "/properties/TeamId" + ], + "writeOnlyProperties": [ + "/properties/VersionId" + ], + "handlers": { + "create": { + "permissions": [ + "supportapp:RegisterSlackWorkspaceForOrganization", + "supportapp:ListSlackWorkspaceConfigurations" + ] + }, + "read": { + "permissions": [ + "supportapp:ListSlackWorkspaceConfigurations" + ] + }, + "update": { + "permissions": [ + "supportapp:RegisterSlackWorkspaceForOrganization", + "supportapp:ListSlackWorkspaceConfigurations" + ] + }, + "delete": { + "permissions": [ + "supportapp:ListSlackWorkspaceConfigurations", + "supportapp:DeleteSlackWorkspaceConfiguration" + ] + }, + "list": { + "permissions": [ + "supportapp:ListSlackWorkspaceConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/synthetics/canary.json b/internal/aws/cfn/schemas/aws/synthetics/canary.json new file mode 100644 index 00000000..7601a1da --- /dev/null +++ b/internal/aws/cfn/schemas/aws/synthetics/canary.json @@ -0,0 +1,385 @@ +{ + "typeName": "AWS::Synthetics::Canary", + "description": "Resource Type definition for AWS::Synthetics::Canary", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "properties": { + "Name": { + "description": "Name of the canary.", + "type": "string", + "pattern": "^[0-9a-z_\\-]{1,21}$" + }, + "Id": { + "description": "Id of the canary", + "type": "string" + }, + "State": { + "description": "State of the canary", + "type": "string" + }, + "Code": { + "description": "Provide the canary script source", + "$ref": "#/definitions/Code" + }, + "ArtifactS3Location": { + "description": "Provide the s3 bucket output location for test results", + "type": "string", + "pattern": "^(s3|S3)://" + }, + "ArtifactConfig": { + "description": "Provide artifact configuration", + "$ref": "#/definitions/ArtifactConfig" + }, + "Schedule": { + "description": "Frequency to run your canaries", + "$ref": "#/definitions/Schedule" + }, + "ExecutionRoleArn": { + "description": "Lambda Execution role used to run your canaries", + "type": "string" + }, + "RuntimeVersion": { + "description": "Runtime version of Synthetics Library", + "type": "string" + }, + "SuccessRetentionPeriod": { + "description": "Retention period of successful canary runs represented in number of days", + "type": "integer" + }, + "FailureRetentionPeriod": { + "description": "Retention period of failed canary runs represented in number of days", + "type": "integer" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "VPCConfig": { + "description": "Provide VPC Configuration if enabled.", + "$ref": "#/definitions/VPCConfig" + }, + "RunConfig": { + "description": "Provide canary run configuration", + "$ref": "#/definitions/RunConfig" + }, + "StartCanaryAfterCreation": { + "description": "Runs canary if set to True. Default is False", + "type": "boolean" + }, + "VisualReference": { + "description": "Visual reference configuration for visual testing", + "$ref": "#/definitions/VisualReference" + }, + "DeleteLambdaResourcesOnCanaryDeletion": { + "description": "Deletes associated lambda resources created by Synthetics if set to True. Default is False", + "type": "boolean" + } + }, + "definitions": { + "Schedule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Expression": { + "type": "string" + }, + "DurationInSeconds": { + "type": "string" + } + }, + "required": [ + "Expression" + ] + }, + "Code": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Bucket": { + "type": "string" + }, + "S3Key": { + "type": "string" + }, + "S3ObjectVersion": { + "type": "string" + }, + "Script": { + "type": "string" + }, + "Handler": { + "type": "string" + }, + "SourceLocationArn": { + "type": "string" + } + }, + "required": [ + "Handler" + ], + "oneOf": [ + { + "required": [ + "S3Bucket", + "S3Key" + ] + }, + { + "required": [ + "Script" + ] + } + ] + }, + "Tag": { + "description": "A key-value pair to associate with a resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Value", + "Key" + ] + }, + "VPCConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "VpcId": { + "type": "string" + }, + "SubnetIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "SecurityGroupIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "SubnetIds", + "SecurityGroupIds" + ] + }, + "RunConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "TimeoutInSeconds": { + "description": "Provide maximum canary timeout per run in seconds", + "type": "integer" + }, + "MemoryInMB": { + "description": "Provide maximum memory available for canary in MB", + "type": "integer" + }, + "ActiveTracing": { + "description": "Enable active tracing if set to true", + "type": "boolean" + }, + "EnvironmentVariables": { + "type": "object", + "additionalProperties": false, + "description": "Environment variable key-value pairs.", + "patternProperties": { + "[a-zA-Z][a-zA-Z0-9_]+": { + "type": "string" + } + } + } + } + }, + "VisualReference": { + "type": "object", + "additionalProperties": false, + "properties": { + "BaseCanaryRunId": { + "type": "string", + "description": "Canary run id to be used as base reference for visual testing" + }, + "BaseScreenshots": { + "type": "array", + "description": "List of screenshots used as base reference for visual testing", + "items": { + "$ref": "#/definitions/BaseScreenshot" + } + } + }, + "required": [ + "BaseCanaryRunId" + ] + }, + "BaseScreenshot": { + "type": "object", + "properties": { + "ScreenshotName": { + "type": "string", + "description": "Name of the screenshot to be used as base reference for visual testing" + }, + "IgnoreCoordinates": { + "type": "array", + "description": "List of coordinates of rectangles to be ignored during visual testing", + "items": { + "type": "string", + "description": "Coordinates of a rectangle to be ignored during visual testing" + } + } + }, + "required": [ + "ScreenshotName" + ] + }, + "ArtifactConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "S3Encryption": { + "$ref": "#/definitions/S3Encryption", + "description": "Encryption configuration for uploading artifacts to S3" + } + } + }, + "S3Encryption": { + "type": "object", + "additionalProperties": false, + "properties": { + "EncryptionMode": { + "type": "string", + "description": "Encryption mode for encrypting artifacts when uploading to S3. Valid values: SSE_S3 and SSE_KMS." + }, + "KmsKeyArn": { + "type": "string", + "description": "KMS key Arn for encrypting artifacts when uploading to S3. You must specify KMS key Arn for SSE_KMS encryption mode only." + } + } + } + }, + "required": [ + "Name", + "Code", + "ArtifactS3Location", + "ExecutionRoleArn", + "Schedule", + "RuntimeVersion" + ], + "tagging": { + "taggable": true + }, + "handlers": { + "create": { + "permissions": [ + "synthetics:CreateCanary", + "synthetics:StartCanary", + "synthetics:GetCanary", + "synthetics:TagResource", + "s3:CreateBucket", + "s3:GetObject", + "s3:GetObjectVersion", + "s3:PutBucketEncryption", + "s3:PutEncryptionConfiguration", + "s3:GetBucketLocation", + "lambda:CreateFunction", + "lambda:AddPermission", + "lambda:PublishVersion", + "lambda:UpdateFunctionConfiguration", + "lambda:GetFunctionConfiguration", + "lambda:GetLayerVersionByArn", + "lambda:GetLayerVersion", + "lambda:PublishLayerVersion", + "ec2:DescribeVpcs", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "iam:PassRole" + ] + }, + "update": { + "permissions": [ + "synthetics:UpdateCanary", + "synthetics:StartCanary", + "synthetics:StopCanary", + "synthetics:GetCanary", + "synthetics:TagResource", + "synthetics:UntagResource", + "s3:GetObject", + "s3:GetObjectVersion", + "s3:PutBucketEncryption", + "s3:PutEncryptionConfiguration", + "s3:GetBucketLocation", + "lambda:AddPermission", + "lambda:PublishVersion", + "lambda:UpdateFunctionConfiguration", + "lambda:GetFunctionConfiguration", + "lambda:GetLayerVersionByArn", + "lambda:GetLayerVersion", + "lambda:PublishLayerVersion", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "synthetics:GetCanary", + "synthetics:DescribeCanaries", + "synthetics:ListTagsForResource", + "iam:ListRoles", + "s3:ListAllMyBuckets", + "s3:GetBucketLocation" + ] + }, + "delete": { + "permissions": [ + "synthetics:DeleteCanary", + "synthetics:GetCanary" + ] + }, + "list": { + "permissions": [ + "synthetics:DescribeCanaries" + ] + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/State", + "/properties/Code/SourceLocationArn" + ], + "writeOnlyProperties": [ + "/properties/Code/S3Bucket", + "/properties/Code/S3Key", + "/properties/Code/S3ObjectVersion", + "/properties/Code/Script", + "/properties/DeleteLambdaResourcesOnCanaryDeletion", + "/properties/StartCanaryAfterCreation", + "/properties/RunConfig/EnvironmentVariables", + "/properties/VisualReference" + ], + "deprecatedProperties": [ + "/properties/DeleteLambdaResourcesOnCanaryDeletion" + ] +} diff --git a/internal/aws/cfn/schemas/aws/synthetics/group.json b/internal/aws/cfn/schemas/aws/synthetics/group.json new file mode 100644 index 00000000..6b77fef8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/synthetics/group.json @@ -0,0 +1,118 @@ +{ + "typeName": "AWS::Synthetics::Group", + "description": "Resource Type definition for AWS::Synthetics::Group", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "properties": { + "Name": { + "description": "Name of the group.", + "type": "string", + "pattern": "^[0-9a-z_\\-]{1,64}$" + }, + "Id": { + "description": "Id of the group.", + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 0 + }, + "ResourceArns": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ResourceArn" + }, + "maxItems": 10 + } + }, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "additionalProperties": false, + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 1, + "maxLength": 128, + "pattern": "^(?!aws:)([a-zA-Z\\d\\s_.:/=+\\-@]+)$" + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "minLength": 0, + "maxLength": 256, + "pattern": "^([a-zA-Z\\d\\s_.:/=+\\-@]*)$" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "ResourceArn": { + "type": "string", + "description": "Provide Canary Arn associated with the group.", + "pattern": "arn:(aws[a-zA-Z-]*)?:synthetics:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:canary:[0-9a-z_\\-]" + } + }, + "required": [ + "Name" + ], + "tagging": { + "taggable": true + }, + "handlers": { + "create": { + "permissions": [ + "synthetics:CreateGroup", + "synthetics:AssociateResource", + "synthetics:TagResource", + "synthetics:GetGroup" + ] + }, + "update": { + "permissions": [ + "synthetics:AssociateResource", + "synthetics:DisassociateResource", + "synthetics:TagResource", + "synthetics:UntagResource", + "synthetics:GetGroup", + "synthetics:ListGroupResources" + ] + }, + "read": { + "permissions": [ + "synthetics:GetGroup", + "synthetics:ListTagsForResource", + "synthetics:ListGroupResources" + ] + }, + "delete": { + "permissions": [ + "synthetics:DeleteGroup", + "synthetics:GetGroup" + ] + }, + "list": { + "permissions": [ + "synthetics:ListGroups" + ] + } + }, + "additionalProperties": false, + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Name" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/systemsmanagersap/application.json b/internal/aws/cfn/schemas/aws/systemsmanagersap/application.json new file mode 100644 index 00000000..3ca66792 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/systemsmanagersap/application.json @@ -0,0 +1,167 @@ +{ + "typeName": "AWS::SystemsManagerSAP::Application", + "description": "Resource schema for AWS::SystemsManagerSAP::Application", + "properties": { + "ApplicationId": { + "type": "string", + "pattern": "[\\w\\d]{1,50}" + }, + "ApplicationType": { + "type": "string", + "enum": [ + "HANA" + ] + }, + "Arn": { + "description": "The ARN of the Helix application", + "type": "string", + "pattern": "^arn:(.+:){2,4}.+$|^arn:(.+:){1,3}.+\\/.+$" + }, + "Credentials": { + "type": "array", + "items": { + "$ref": "#/definitions/Credential" + }, + "minItems": 1, + "insertionOrder": true + }, + "Instances": { + "type": "array", + "items": { + "$ref": "#/definitions/Instance" + }, + "minItems": 1, + "insertionOrder": true + }, + "SapInstanceNumber": { + "type": "string", + "pattern": "[0-9]{2}" + }, + "Sid": { + "type": "string", + "pattern": "[A-Z][A-Z0-9]{2}" + }, + "Tags": { + "description": "The tags of a SystemsManagerSAP application.", + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "insertionOrder": true + } + }, + "required": [ + "ApplicationId", + "ApplicationType" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Credentials", + "/properties/Instances", + "/properties/SapInstanceNumber", + "/properties/Sid" + ], + "writeOnlyProperties": [ + "/properties/Credentials", + "/properties/Instances", + "/properties/SapInstanceNumber", + "/properties/Sid" + ], + "additionalProperties": false, + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Credential": { + "type": "object", + "properties": { + "DatabaseName": { + "type": "string", + "pattern": "^(?=.{1,100}$).*" + }, + "CredentialType": { + "type": "string", + "enum": [ + "ADMIN" + ] + }, + "SecretId": { + "type": "string", + "pattern": "^(?=.{1,100}$).*" + } + }, + "additionalProperties": false + }, + "Instance": { + "type": "string", + "pattern": "^i-[\\w\\d]{8}$|^i-[\\w\\d]{17}$" + } + }, + "handlers": { + "create": { + "permissions": [ + "ssm-sap:RegisterApplication", + "ssm-sap:GetApplication", + "ssm-sap:TagResource", + "ssm-sap:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "ssm-sap:GetApplication", + "ssm-sap:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "ssm-sap:TagResource", + "ssm-sap:UntagResource", + "ssm-sap:ListTagsForResource", + "ssm-sap:GetApplication" + ] + }, + "delete": { + "permissions": [ + "ssm-sap:DeregisterApplication", + "ssm-sap:GetApplication" + ] + }, + "list": { + "permissions": [ + "ssm-sap:ListApplications" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/timestream/database.json b/internal/aws/cfn/schemas/aws/timestream/database.json new file mode 100644 index 00000000..c06b4499 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/timestream/database.json @@ -0,0 +1,99 @@ +{ + "typeName": "AWS::Timestream::Database", + "description": "The AWS::Timestream::Database resource creates a Timestream database.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git", + "definitions": { + "Tag": { + "description": "You can use the Resource Tags property to apply tags to resources, which can help you identify and categorize those resources.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "DatabaseName": { + "description": "The name for the database. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the database name.", + "type": "string", + "pattern": "^[a-zA-Z0-9_.-]{3,256}$" + }, + "KmsKeyId": { + "description": "The KMS key for the database. If the KMS key is not specified, the database will be encrypted with a Timestream managed KMS key located in your account.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/DatabaseName" + ], + "createOnlyProperties": [ + "/properties/DatabaseName" + ], + "readOnlyProperties": [ + "/properties/Arn" + ], + "handlers": { + "create": { + "permissions": [ + "timestream:CreateDatabase", + "timestream:DescribeEndpoints", + "timestream:TagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "timestream:DescribeDatabase", + "timestream:DescribeEndpoints", + "timestream:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "timestream:UpdateDatabase", + "timestream:DescribeDatabase", + "timestream:DescribeEndpoints", + "timestream:TagResource", + "timestream:UntagResource" + ] + }, + "delete": { + "permissions": [ + "timestream:DeleteDatabase", + "timestream:DescribeEndpoints" + ] + }, + "list": { + "permissions": [ + "timestream:ListDatabases", + "timestream:DescribeEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/timestream/scheduledquery.json b/internal/aws/cfn/schemas/aws/timestream/scheduledquery.json new file mode 100644 index 00000000..23ddf299 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/timestream/scheduledquery.json @@ -0,0 +1,546 @@ +{ + "typeName": "AWS::Timestream::ScheduledQuery", + "description": "The AWS::Timestream::ScheduledQuery resource creates a Timestream Scheduled Query.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git", + "definitions": { + "Arn": { + "description": "Amazon Resource Name of the scheduled query that is generated upon creation.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "ScheduledQueryName": { + "description": "The name of the scheduled query. Scheduled query names must be unique within each Region.", + "type": "string", + "pattern": "[a-zA-Z0-9_.-]+", + "minLength": 1, + "maxLength": 64 + }, + "QueryString": { + "description": "The query string to run. Parameter names can be specified in the query string @ character followed by an identifier. The named Parameter @scheduled_runtime is reserved and can be used in the query to get the time at which the query is scheduled to run. The timestamp calculated according to the ScheduleConfiguration parameter, will be the value of @scheduled_runtime paramater for each query run. For example, consider an instance of a scheduled query executing on 2021-12-01 00:00:00. For this instance, the @scheduled_runtime parameter is initialized to the timestamp 2021-12-01 00:00:00 when invoking the query.", + "type": "string", + "minLength": 1, + "maxLength": 262144 + }, + "ScheduleConfiguration": { + "description": "Configuration for when the scheduled query is executed.", + "type": "object", + "properties": { + "ScheduleExpression": { + "$ref": "#/definitions/ScheduleExpression" + } + }, + "required": [ + "ScheduleExpression" + ], + "additionalProperties": false + }, + "NotificationConfiguration": { + "description": "Notification configuration for the scheduled query. A notification is sent by Timestream when a query run finishes, when the state is updated or when you delete it.", + "type": "object", + "properties": { + "SnsConfiguration": { + "$ref": "#/definitions/SnsConfiguration" + } + }, + "required": [ + "SnsConfiguration" + ], + "additionalProperties": false + }, + "ClientToken": { + "description": "Using a ClientToken makes the call to CreateScheduledQuery idempotent, in other words, making the same request repeatedly will produce the same result. Making multiple identical CreateScheduledQuery requests has the same effect as making a single request. If CreateScheduledQuery is called without a ClientToken, the Query SDK generates a ClientToken on your behalf. After 8 hours, any request with the same ClientToken is treated as a new request.", + "type": "string", + "minLength": 32, + "maxLength": 128 + }, + "ScheduledQueryExecutionRoleArn": { + "description": "The ARN for the IAM role that Timestream will assume when running the scheduled query.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "TargetConfiguration": { + "description": "Configuration of target store where scheduled query results are written to.", + "type": "object", + "properties": { + "TimestreamConfiguration": { + "$ref": "#/definitions/TimestreamConfiguration" + } + }, + "required": [ + "TimestreamConfiguration" + ], + "additionalProperties": false + }, + "ErrorReportConfiguration": { + "description": "Configuration for error reporting. Error reports will be generated when a problem is encountered when writing the query results.", + "type": "object", + "properties": { + "S3Configuration": { + "$ref": "#/definitions/S3Configuration" + } + }, + "required": [ + "S3Configuration" + ], + "additionalProperties": false + }, + "KmsKeyId": { + "description": "The Amazon KMS key used to encrypt the scheduled query resource, at-rest. If the Amazon KMS key is not specified, the scheduled query resource will be encrypted with a Timestream owned Amazon KMS key. To specify a KMS key, use the key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix the name with alias/. If ErrorReportConfiguration uses SSE_KMS as encryption type, the same KmsKeyId is used to encrypt the error report at rest.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Tags": { + "description": "A list of key-value pairs to label the scheduled query.", + "type": "array", + "insertionOrder": false, + "maxItems": 200, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "ScheduleExpression": { + "description": "An expression that denotes when to trigger the scheduled query run. This can be a cron expression or a rate expression.", + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "SnsConfiguration": { + "description": "SNS configuration for notification upon scheduled query execution.", + "type": "object", + "properties": { + "TopicArn": { + "$ref": "#/definitions/TopicArn" + } + }, + "required": [ + "TopicArn" + ], + "additionalProperties": false + }, + "TopicArn": { + "description": "SNS topic ARN that the scheduled query status notifications will be sent to.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "TimestreamConfiguration": { + "description": "Configuration needed to write data into the Timestream database and table.", + "type": "object", + "properties": { + "DatabaseName": { + "$ref": "#/definitions/DatabaseName" + }, + "TableName": { + "$ref": "#/definitions/TableName" + }, + "TimeColumn": { + "$ref": "#/definitions/TimeColumn" + }, + "DimensionMappings": { + "$ref": "#/definitions/DimensionMappings" + }, + "MultiMeasureMappings": { + "$ref": "#/definitions/MultiMeasureMappings" + }, + "MixedMeasureMappings": { + "$ref": "#/definitions/MixedMeasureMappings" + }, + "MeasureNameColumn": { + "$ref": "#/definitions/MeasureNameColumn" + } + }, + "required": [ + "DatabaseName", + "TableName", + "TimeColumn", + "DimensionMappings" + ], + "additionalProperties": false + }, + "DatabaseName": { + "description": "Name of Timestream database to which the query result will be written.", + "type": "string" + }, + "TableName": { + "description": "Name of Timestream table that the query result will be written to. The table should be within the same database that is provided in Timestream configuration.", + "type": "string" + }, + "TimeColumn": { + "description": "Column from query result that should be used as the time column in destination table. Column type for this should be TIMESTAMP.", + "type": "string" + }, + "DimensionMappings": { + "description": "This is to allow mapping column(s) from the query result to the dimension in the destination table.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/DimensionMapping" + } + }, + "DimensionMapping": { + "description": "This type is used to map column(s) from the query result to a dimension in the destination table.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/DimensionMappingName" + }, + "DimensionValueType": { + "$ref": "#/definitions/DimensionValueType" + } + }, + "required": [ + "Name", + "DimensionValueType" + ], + "additionalProperties": false + }, + "DimensionMappingName": { + "description": "Column name from query result.", + "type": "string" + }, + "DimensionValueType": { + "description": "Type for the dimension.", + "type": "string", + "enum": [ + "VARCHAR" + ] + }, + "MultiMeasureMappings": { + "description": "Only one of MixedMeasureMappings or MultiMeasureMappings is to be provided. MultiMeasureMappings can be used to ingest data as multi measures in the derived table.", + "type": "object", + "properties": { + "TargetMultiMeasureName": { + "$ref": "#/definitions/TargetMultiMeasureName" + }, + "MultiMeasureAttributeMappings": { + "$ref": "#/definitions/MultiMeasureAttributeMappingList" + } + }, + "required": [ + "MultiMeasureAttributeMappings" + ], + "additionalProperties": false + }, + "TargetMultiMeasureName": { + "description": "Name of the target multi-measure in the derived table. Required if MeasureNameColumn is not provided. If MeasureNameColumn is provided then the value from that column will be used as the multi-measure name.", + "type": "string" + }, + "MultiMeasureAttributeMappingList": { + "description": "Required. Attribute mappings to be used for mapping query results to ingest data for multi-measure attributes.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/MultiMeasureAttributeMapping" + } + }, + "MultiMeasureAttributeMapping": { + "description": "An attribute mapping to be used for mapping query results to ingest data for multi-measure attributes.", + "type": "object", + "properties": { + "SourceColumn": { + "$ref": "#/definitions/MultiMeasureAttributeMappingSourceColumn" + }, + "MeasureValueType": { + "$ref": "#/definitions/MultiMeasureAttributeMappingMeasureValueType" + }, + "TargetMultiMeasureAttributeName": { + "$ref": "#/definitions/TargetMultiMeasureAttributeName" + } + }, + "required": [ + "SourceColumn", + "MeasureValueType" + ], + "additionalProperties": false + }, + "MultiMeasureAttributeMappingSourceColumn": { + "description": "Source measure value column in the query result where the attribute value is to be read.", + "type": "string" + }, + "MultiMeasureAttributeMappingMeasureValueType": { + "description": "Value type of the measure value column to be read from the query result.", + "type": "string", + "enum": [ + "BIGINT", + "BOOLEAN", + "DOUBLE", + "VARCHAR", + "TIMESTAMP" + ] + }, + "TargetMultiMeasureAttributeName": { + "description": "Custom name to be used for attribute name in derived table. If not provided, source column name would be used.", + "type": "string" + }, + "MixedMeasureMappings": { + "description": "Specifies how to map measures to multi-measure records.", + "type": "array", + "insertionOrder": false, + "minItems": 1, + "items": { + "$ref": "#/definitions/MixedMeasureMapping" + } + }, + "MixedMeasureMapping": { + "description": "MixedMeasureMappings are mappings that can be used to ingest data into a mixture of narrow and multi measures in the derived table.", + "type": "object", + "properties": { + "MeasureName": { + "$ref": "#/definitions/MixedMeasureMappingMeasureName" + }, + "SourceColumn": { + "$ref": "#/definitions/MixedMeasureMappingSourceColumn" + }, + "TargetMeasureName": { + "$ref": "#/definitions/MixedMeasureMappingTargetMeasureName" + }, + "MeasureValueType": { + "$ref": "#/definitions/MixedMeasureMappingMeasureValueType" + }, + "MultiMeasureAttributeMappings": { + "$ref": "#/definitions/MultiMeasureAttributeMappingList" + } + }, + "required": [ + "MeasureValueType" + ], + "additionalProperties": false + }, + "MixedMeasureMappingMeasureName": { + "description": "Refers to the value of the measure name in a result row. This field is required if MeasureNameColumn is provided.", + "type": "string" + }, + "MixedMeasureMappingSourceColumn": { + "description": "This field refers to the source column from which the measure value is to be read for result materialization.", + "type": "string" + }, + "MixedMeasureMappingTargetMeasureName": { + "description": "Target measure name to be used. If not provided, the target measure name by default would be MeasureName if provided, or SourceColumn otherwise.", + "type": "string" + }, + "MixedMeasureMappingMeasureValueType": { + "description": "Type of the value that is to be read from SourceColumn. If the mapping is for MULTI, use MeasureValueType.MULTI.", + "type": "string", + "enum": [ + "BIGINT", + "BOOLEAN", + "DOUBLE", + "VARCHAR", + "MULTI" + ] + }, + "MeasureNameColumn": { + "description": "Name of the measure name column from the query result.", + "type": "string" + }, + "S3Configuration": { + "description": "Details on S3 location for error reports that result from running a query.", + "type": "object", + "properties": { + "BucketName": { + "$ref": "#/definitions/BucketName" + }, + "ObjectKeyPrefix": { + "$ref": "#/definitions/ObjectKeyPrefix" + }, + "EncryptionOption": { + "$ref": "#/definitions/EncryptionOption" + } + }, + "required": [ + "BucketName" + ], + "additionalProperties": false + }, + "BucketName": { + "description": "Name of the S3 bucket under which error reports will be created.", + "type": "string", + "minLength": 3, + "maxLength": 63, + "pattern": "[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]" + }, + "ObjectKeyPrefix": { + "description": "Prefix for error report keys.", + "type": "string", + "minLength": 1, + "maxLength": 896, + "pattern": "[a-zA-Z0-9|!\\-_*'\\(\\)]([a-zA-Z0-9]|[!\\-_*'\\(\\)\\/.])+" + }, + "EncryptionOption": { + "description": "Encryption at rest options for the error reports. If no encryption option is specified, Timestream will choose SSE_S3 as default.", + "type": "string", + "enum": [ + "SSE_S3", + "SSE_KMS" + ] + }, + "Tag": { + "description": "A key-value pair to label the scheduled query.", + "type": "object", + "properties": { + "Key": { + "$ref": "#/definitions/Key" + }, + "Value": { + "$ref": "#/definitions/Value" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/Arn" + }, + "ScheduledQueryName": { + "$ref": "#/definitions/ScheduledQueryName" + }, + "QueryString": { + "$ref": "#/definitions/QueryString" + }, + "ScheduleConfiguration": { + "$ref": "#/definitions/ScheduleConfiguration" + }, + "NotificationConfiguration": { + "$ref": "#/definitions/NotificationConfiguration" + }, + "ClientToken": { + "$ref": "#/definitions/ClientToken" + }, + "ScheduledQueryExecutionRoleArn": { + "$ref": "#/definitions/ScheduledQueryExecutionRoleArn" + }, + "TargetConfiguration": { + "$ref": "#/definitions/TargetConfiguration" + }, + "ErrorReportConfiguration": { + "$ref": "#/definitions/ErrorReportConfiguration" + }, + "KmsKeyId": { + "$ref": "#/definitions/KmsKeyId" + }, + "SQName": { + "description": "The name of the scheduled query. Scheduled query names must be unique within each Region.", + "type": "string" + }, + "SQQueryString": { + "description": "The query string to run. Parameter names can be specified in the query string @ character followed by an identifier. The named Parameter @scheduled_runtime is reserved and can be used in the query to get the time at which the query is scheduled to run. The timestamp calculated according to the ScheduleConfiguration parameter, will be the value of @scheduled_runtime paramater for each query run. For example, consider an instance of a scheduled query executing on 2021-12-01 00:00:00. For this instance, the @scheduled_runtime parameter is initialized to the timestamp 2021-12-01 00:00:00 when invoking the query.", + "type": "string" + }, + "SQScheduleConfiguration": { + "description": "Configuration for when the scheduled query is executed.", + "type": "string" + }, + "SQNotificationConfiguration": { + "description": "Notification configuration for the scheduled query. A notification is sent by Timestream when a query run finishes, when the state is updated or when you delete it.", + "type": "string" + }, + "SQScheduledQueryExecutionRoleArn": { + "description": "The ARN for the IAM role that Timestream will assume when running the scheduled query.", + "type": "string" + }, + "SQTargetConfiguration": { + "description": "Configuration of target store where scheduled query results are written to.", + "type": "string" + }, + "SQErrorReportConfiguration": { + "description": "Configuration for error reporting. Error reports will be generated when a problem is encountered when writing the query results.", + "type": "string" + }, + "SQKmsKeyId": { + "description": "The Amazon KMS key used to encrypt the scheduled query resource, at-rest. If the Amazon KMS key is not specified, the scheduled query resource will be encrypted with a Timestream owned Amazon KMS key. To specify a KMS key, use the key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix the name with alias/. If ErrorReportConfiguration uses SSE_KMS as encryption type, the same KmsKeyId is used to encrypt the error report at rest.", + "type": "string" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "required": [ + "QueryString", + "ScheduleConfiguration", + "NotificationConfiguration", + "ScheduledQueryExecutionRoleArn", + "ErrorReportConfiguration" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ScheduledQueryName", + "/properties/QueryString", + "/properties/ScheduleConfiguration", + "/properties/NotificationConfiguration", + "/properties/ClientToken", + "/properties/ScheduledQueryExecutionRoleArn", + "/properties/TargetConfiguration", + "/properties/ErrorReportConfiguration", + "/properties/KmsKeyId" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/SQName", + "/properties/SQQueryString", + "/properties/SQScheduleConfiguration", + "/properties/SQNotificationConfiguration", + "/properties/SQScheduledQueryExecutionRoleArn", + "/properties/SQTargetConfiguration", + "/properties/SQErrorReportConfiguration", + "/properties/SQKmsKeyId" + ], + "handlers": { + "create": { + "permissions": [ + "timestream:CreateScheduledQuery", + "timestream:DescribeEndpoints" + ] + }, + "read": { + "permissions": [ + "timestream:DescribeScheduledQuery", + "timestream:ListTagsForResource", + "timestream:DescribeEndpoints" + ] + }, + "update": { + "permissions": [ + "timestream:UpdateScheduledQuery", + "timestream:TagResource", + "timestream:UntagResource", + "timestream:DescribeEndpoints" + ] + }, + "delete": { + "permissions": [ + "timestream:DeleteScheduledQuery", + "timestream:DescribeEndpoints" + ] + }, + "list": { + "permissions": [ + "timestream:ListScheduledQueries", + "timestream:DescribeEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/timestream/table.json b/internal/aws/cfn/schemas/aws/timestream/table.json new file mode 100644 index 00000000..58232ad9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/timestream/table.json @@ -0,0 +1,240 @@ +{ + "typeName": "AWS::Timestream::Table", + "description": "The AWS::Timestream::Table resource creates a Timestream Table.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git", + "definitions": { + "Tag": { + "description": "You can use the Resource Tags property to apply tags to resources, which can help you identify and categorize those resources.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "PartitionKeyList": { + "description": "A list of partition keys defining the attributes used to partition the table data. The order of the list determines the partition hierarchy. The name and type of each partition key as well as the partition key order cannot be changed after the table is created. However, the enforcement level of each partition key can be changed.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/PartitionKey" + }, + "insertionOrder": true + }, + "PartitionKey": { + "description": "An attribute used in partitioning data in a table. There are two types of partition keys: dimension keys and measure keys. A dimension key partitions data on a dimension name, while a measure key partitions data on the measure name.", + "type": "object", + "properties": { + "Type": { + "$ref": "#/definitions/PartitionKeyType" + }, + "Name": { + "$ref": "#/definitions/SchemaName" + }, + "EnforcementInRecord": { + "$ref": "#/definitions/PartitionKeyEnforcementLevel" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "PartitionKeyType": { + "description": "The type of the partition key. Options are DIMENSION (dimension key) and MEASURE (measure key).", + "type": "string", + "enum": [ + "DIMENSION", + "MEASURE" + ] + }, + "SchemaName": { + "description": "The name of the attribute used for a dimension key.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "PartitionKeyEnforcementLevel": { + "description": "The level of enforcement for the specification of a dimension key in ingested records. Options are REQUIRED (dimension key must be specified) and OPTIONAL (dimension key does not have to be specified).", + "type": "string", + "enum": [ + "REQUIRED", + "OPTIONAL" + ] + } + }, + "properties": { + "Arn": { + "type": "string" + }, + "Name": { + "description": "The table name exposed as a read-only attribute.", + "type": "string" + }, + "DatabaseName": { + "description": "The name for the database which the table to be created belongs to.", + "type": "string", + "pattern": "^[a-zA-Z0-9_.-]{3,256}$" + }, + "TableName": { + "description": "The name for the table. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the table name.", + "type": "string", + "pattern": "^[a-zA-Z0-9_.-]{3,256}$" + }, + "RetentionProperties": { + "description": "The retention duration of the memory store and the magnetic store.", + "type": "object", + "properties": { + "MemoryStoreRetentionPeriodInHours": { + "description": "The duration for which data must be stored in the memory store.", + "type": "string" + }, + "MagneticStoreRetentionPeriodInDays": { + "description": "The duration for which data must be stored in the magnetic store.", + "type": "string" + } + }, + "additionalProperties": false + }, + "Schema": { + "description": "A Schema specifies the expected data model of the table.", + "type": "object", + "properties": { + "CompositePartitionKey": { + "$ref": "#/definitions/PartitionKeyList" + } + }, + "additionalProperties": false + }, + "MagneticStoreWriteProperties": { + "description": "The properties that determine whether magnetic store writes are enabled.", + "type": "object", + "properties": { + "EnableMagneticStoreWrites": { + "description": "Boolean flag indicating whether magnetic store writes are enabled.", + "type": "boolean" + }, + "MagneticStoreRejectedDataLocation": { + "description": "Location to store information about records that were asynchronously rejected during magnetic store writes.", + "type": "object", + "properties": { + "S3Configuration": { + "description": "S3 configuration for location to store rejections from magnetic store writes", + "type": "object", + "properties": { + "BucketName": { + "description": "The bucket name used to store the data.", + "type": "string" + }, + "ObjectKeyPrefix": { + "description": "String used to prefix all data in the bucket.", + "type": "string" + }, + "EncryptionOption": { + "description": "Either SSE_KMS or SSE_S3.", + "type": "string" + }, + "KmsKeyId": { + "description": "Must be provided if SSE_KMS is specified as the encryption option", + "type": "string" + } + }, + "required": [ + "EncryptionOption", + "BucketName" + ], + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "required": [ + "EnableMagneticStoreWrites" + ], + "additionalProperties": false + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "maxItems": 200, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "additionalProperties": false, + "required": [ + "DatabaseName" + ], + "primaryIdentifier": [ + "/properties/DatabaseName", + "/properties/TableName" + ], + "createOnlyProperties": [ + "/properties/DatabaseName", + "/properties/TableName" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Name" + ], + "handlers": { + "create": { + "permissions": [ + "timestream:CreateTable", + "timestream:DescribeEndpoints", + "timestream:TagResource", + "s3:PutObject", + "s3:GetObject", + "s3:GetBucketAcl", + "kms:GenerateDataKey*", + "kms:DescribeKey", + "kms:Encrypt" + ] + }, + "read": { + "permissions": [ + "timestream:DescribeTable", + "timestream:DescribeEndpoints", + "timestream:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "timestream:UpdateTable", + "timestream:DescribeEndpoints", + "timestream:TagResource", + "timestream:UntagResource", + "s3:PutObject", + "s3:GetObject", + "s3:GetBucketAcl", + "kms:GenerateDataKey*", + "kms:DescribeKey", + "kms:Encrypt" + ] + }, + "delete": { + "permissions": [ + "timestream:DeleteTable", + "timestream:DescribeEndpoints", + "timestream:DescribeTable" + ] + }, + "list": { + "permissions": [ + "timestream:ListTables", + "timestream:DescribeEndpoints" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/transfer/agreement.json b/internal/aws/cfn/schemas/aws/transfer/agreement.json new file mode 100644 index 00000000..d00a2a29 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/transfer/agreement.json @@ -0,0 +1,173 @@ +{ + "typeName": "AWS::Transfer::Agreement", + "description": "Resource Type definition for AWS::Transfer::Agreement", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "definitions": { + "Tag": { + "description": "Creates a key-value pair for a specific resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The name assigned to the tag that you create.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "Contains one or more values that you assigned to the key name you create.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Description": { + "description": "A textual description for the agreement.", + "type": "string", + "pattern": "^[\\w\\- ]*$", + "minLength": 1, + "maxLength": 200 + }, + "ServerId": { + "description": "A unique identifier for the server.", + "type": "string", + "pattern": "^s-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "LocalProfileId": { + "description": "A unique identifier for the local profile.", + "type": "string", + "pattern": "^p-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "PartnerProfileId": { + "description": "A unique identifier for the partner profile.", + "type": "string", + "pattern": "^p-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "BaseDirectory": { + "description": "Specifies the base directory for the agreement.", + "type": "string", + "pattern": "^$|/.*", + "maxLength": 1024 + }, + "AccessRole": { + "description": "Specifies the access role for the agreement.", + "type": "string", + "pattern": "arn:.*role/.*", + "minLength": 20, + "maxLength": 2048 + }, + "Status": { + "description": "Specifies the status of the agreement.", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "Tags": { + "description": "Key-value pairs that can be used to group and search for agreements. Tags are metadata attached to agreements for any purpose.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "AgreementId": { + "description": "A unique identifier for the agreement.", + "type": "string", + "pattern": "^a-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "Arn": { + "description": "Specifies the unique Amazon Resource Name (ARN) for the agreement.", + "type": "string", + "pattern": "arn:.*", + "minLength": 20, + "maxLength": 1600 + } + }, + "additionalProperties": false, + "required": [ + "ServerId", + "LocalProfileId", + "PartnerProfileId", + "BaseDirectory", + "AccessRole" + ], + "readOnlyProperties": [ + "/properties/AgreementId", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/ServerId" + ], + "primaryIdentifier": [ + "/properties/AgreementId", + "/properties/ServerId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "transfer:CreateAgreement", + "transfer:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "transfer:DescribeAgreement" + ] + }, + "update": { + "permissions": [ + "transfer:UpdateAgreement", + "transfer:UnTagResource", + "transfer:TagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "transfer:DeleteAgreement" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "ServerId": { + "$ref": "resource-schema.json#/properties/ServerId" + } + }, + "required": [ + "ServerId" + ] + }, + "permissions": [ + "transfer:ListAgreements" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/transfer/certificate.json b/internal/aws/cfn/schemas/aws/transfer/certificate.json new file mode 100644 index 00000000..6d12e7fd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/transfer/certificate.json @@ -0,0 +1,193 @@ +{ + "typeName": "AWS::Transfer::Certificate", + "description": "Resource Type definition for AWS::Transfer::Certificate", + "definitions": { + "Tag": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Usage": { + "description": "Specifies the usage type for the certificate.", + "type": "string", + "enum": [ + "SIGNING", + "ENCRYPTION" + ] + }, + "Certificate": { + "description": "Specifies the certificate body to be imported.", + "type": "string", + "pattern": "^[\t\n\r -ÿ]*", + "minLength": 1, + "maxLength": 16384 + }, + "CertificateChain": { + "description": "Specifies the certificate chain to be imported.", + "type": "string", + "pattern": "^[\t\n\r -ÿ]*", + "minLength": 1, + "maxLength": 2097152 + }, + "PrivateKey": { + "description": "Specifies the private key for the certificate.", + "type": "string", + "pattern": "^[\t\n\r -ÿ]*", + "minLength": 1, + "maxLength": 16384 + }, + "ActiveDate": { + "description": "Specifies the active date for the certificate.", + "type": "string" + }, + "InactiveDate": { + "description": "Specifies the inactive date for the certificate.", + "type": "string" + }, + "Description": { + "description": "A textual description for the certificate.", + "type": "string", + "pattern": "^[\\w\\- ]*$", + "minLength": 1, + "maxLength": 200 + }, + "Tags": { + "description": "Key-value pairs that can be used to group and search for certificates. Tags are metadata attached to certificates for any purpose.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Arn": { + "description": "Specifies the unique Amazon Resource Name (ARN) for the agreement.", + "type": "string", + "pattern": "arn:.*", + "minLength": 20, + "maxLength": 1600 + }, + "CertificateId": { + "description": "A unique identifier for the certificate.", + "type": "string", + "pattern": "^cert-([0-9a-f]{17})$", + "minLength": 22, + "maxLength": 22 + }, + "Status": { + "description": "A status description for the certificate.", + "type": "string", + "enum": [ + "ACTIVE", + "PENDING", + "INACTIVE" + ] + }, + "Type": { + "description": "Describing the type of certificate. With or without a private key.", + "type": "string", + "enum": [ + "CERTIFICATE", + "CERTIFICATE_WITH_PRIVATE_KEY" + ] + }, + "Serial": { + "description": "Specifies Certificate's serial.", + "type": "string", + "pattern": "^[\\p{XDigit}{2}:?]*", + "minLength": 0, + "maxLength": 48 + }, + "NotBeforeDate": { + "description": "Specifies the not before date for the certificate.", + "type": "string" + }, + "NotAfterDate": { + "description": "Specifies the not after date for the certificate.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "Certificate", + "Usage" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CertificateId", + "/properties/Status", + "/properties/Type", + "/properties/Serial", + "/properties/NotAfterDate", + "/properties/NotBeforeDate" + ], + "writeOnlyProperties": [ + "/properties/PrivateKey" + ], + "createOnlyProperties": [ + "/properties/Certificate", + "/properties/CertificateChain", + "/properties/PrivateKey" + ], + "primaryIdentifier": [ + "/properties/CertificateId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "transfer:ImportCertificate", + "transfer:TagResource" + ] + }, + "read": { + "permissions": [ + "transfer:DescribeCertificate" + ] + }, + "update": { + "permissions": [ + "transfer:UpdateCertificate", + "transfer:UnTagResource", + "transfer:TagResource" + ] + }, + "delete": { + "permissions": [ + "transfer:DeleteCertificate" + ] + }, + "list": { + "permissions": [ + "transfer:ListCertificates" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/transfer/connector.json b/internal/aws/cfn/schemas/aws/transfer/connector.json new file mode 100644 index 00000000..f203a29c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/transfer/connector.json @@ -0,0 +1,237 @@ +{ + "typeName": "AWS::Transfer::Connector", + "description": "Resource Type definition for AWS::Transfer::Connector", + "definitions": { + "Tag": { + "description": "Creates a key-value pair for a specific resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The name assigned to the tag that you create.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "Contains one or more values that you assigned to the key name you create.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "SftpConnectorTrustedHostKey": { + "description": "The public host key for the external server to which you are connecting.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "properties": { + "AccessRole": { + "description": "Specifies the access role for the connector.", + "type": "string", + "pattern": "arn:.*role/.*", + "minLength": 20, + "maxLength": 2048 + }, + "As2Config": { + "description": "Configuration for an AS2 connector.", + "type": "object", + "properties": { + "LocalProfileId": { + "type": "string", + "description": "A unique identifier for the local profile.", + "pattern": "^p-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "PartnerProfileId": { + "type": "string", + "description": "A unique identifier for the partner profile.", + "pattern": "^p-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "MessageSubject": { + "type": "string", + "description": "The message subject for this AS2 connector configuration.", + "pattern": "^[\\p{Print}\\p{Blank}]+", + "minLength": 1, + "maxLength": 1024 + }, + "Compression": { + "type": "string", + "description": "Compression setting for this AS2 connector configuration.", + "enum": [ + "ZLIB", + "DISABLED" + ] + }, + "EncryptionAlgorithm": { + "type": "string", + "description": "Encryption algorithm for this AS2 connector configuration.", + "enum": [ + "AES128_CBC", + "AES192_CBC", + "AES256_CBC", + "NONE" + ] + }, + "SigningAlgorithm": { + "type": "string", + "description": "Signing algorithm for this AS2 connector configuration.", + "enum": [ + "SHA256", + "SHA384", + "SHA512", + "SHA1", + "NONE" + ] + }, + "MdnSigningAlgorithm": { + "type": "string", + "description": "MDN Signing algorithm for this AS2 connector configuration.", + "enum": [ + "SHA256", + "SHA384", + "SHA512", + "SHA1", + "NONE", + "DEFAULT" + ] + }, + "MdnResponse": { + "type": "string", + "description": "MDN Response setting for this AS2 connector configuration.", + "enum": [ + "SYNC", + "NONE" + ] + }, + "BasicAuthSecretId": { + "type": "string", + "description": "ARN or name of the secret in AWS Secrets Manager which contains the credentials for Basic authentication. If empty, Basic authentication is disabled for the AS2 connector", + "minLength": 0, + "maxLength": 2048 + } + }, + "additionalProperties": false + }, + "SftpConfig": { + "description": "Configuration for an SFTP connector.", + "type": "object", + "properties": { + "UserSecretId": { + "type": "string", + "description": "ARN or name of the secret in AWS Secrets Manager which contains the SFTP user's private keys or passwords.", + "minLength": 1, + "maxLength": 2048 + }, + "TrustedHostKeys": { + "description": "List of public host keys, for the external server to which you are connecting.", + "type": "array", + "maxItems": 10, + "uniqueItems": false, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/SftpConnectorTrustedHostKey" + } + } + }, + "additionalProperties": false + }, + "Arn": { + "description": "Specifies the unique Amazon Resource Name (ARN) for the connector.", + "type": "string", + "pattern": "arn:.*", + "minLength": 20, + "maxLength": 1600 + }, + "ConnectorId": { + "description": "A unique identifier for the connector.", + "type": "string", + "pattern": "^c-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "LoggingRole": { + "description": "Specifies the logging role for the connector.", + "type": "string", + "pattern": "arn:.*role/.*", + "minLength": 20, + "maxLength": 2048 + }, + "Tags": { + "description": "Key-value pairs that can be used to group and search for connectors. Tags are metadata attached to connectors for any purpose.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Url": { + "description": "URL for Connector", + "type": "string", + "maxLength": 255 + } + }, + "additionalProperties": false, + "required": [ + "AccessRole", + "Url" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/ConnectorId" + ], + "primaryIdentifier": [ + "/properties/ConnectorId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "transfer:CreateConnector", + "transfer:TagResource", + "iam:PassRole" + ] + }, + "read": { + "permissions": [ + "transfer:DescribeConnector" + ] + }, + "update": { + "permissions": [ + "transfer:UpdateConnector", + "transfer:UnTagResource", + "transfer:TagResource", + "iam:PassRole" + ] + }, + "delete": { + "permissions": [ + "transfer:DeleteConnector" + ] + }, + "list": { + "permissions": [ + "transfer:ListConnectors" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/transfer/profile.json b/internal/aws/cfn/schemas/aws/transfer/profile.json new file mode 100644 index 00000000..dfe9501c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/transfer/profile.json @@ -0,0 +1,136 @@ +{ + "typeName": "AWS::Transfer::Profile", + "description": "Resource Type definition for AWS::Transfer::Profile", + "definitions": { + "Tag": { + "description": "Creates a key-value pair for a specific resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The name assigned to the tag that you create.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "Contains one or more values that you assigned to the key name you create.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "CertificateId": { + "description": "A unique identifier for the certificate.", + "type": "string", + "pattern": "^cert-([0-9a-f]{17})$", + "minLength": 22, + "maxLength": 22 + } + }, + "properties": { + "As2Id": { + "description": "AS2 identifier agreed with a trading partner.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "ProfileType": { + "description": "Enum specifying whether the profile is local or associated with a trading partner.", + "type": "string", + "enum": [ + "LOCAL", + "PARTNER" + ] + }, + "Tags": { + "description": "An array of key-value pairs to apply to this resource.", + "type": "array", + "uniqueItems": true, + "maxItems": 50, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "CertificateIds": { + "description": "List of the certificate IDs associated with this profile to be used for encryption and signing of AS2 messages.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/CertificateId" + } + }, + "Arn": { + "description": "Specifies the unique Amazon Resource Name (ARN) for the profile.", + "type": "string", + "pattern": "arn:.*", + "minLength": 20, + "maxLength": 1600 + }, + "ProfileId": { + "description": "A unique identifier for the profile", + "type": "string", + "pattern": "^p-([0-9a-f]{17})$", + "minLength": 19, + "maxLength": 19 + } + }, + "additionalProperties": false, + "required": [ + "As2Id", + "ProfileType" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/ProfileId" + ], + "primaryIdentifier": [ + "/properties/ProfileId" + ], + "createOnlyProperties": [ + "/properties/ProfileType" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "transfer:CreateProfile", + "transfer:TagResource" + ] + }, + "read": { + "permissions": [ + "transfer:DescribeProfile" + ] + }, + "update": { + "permissions": [ + "transfer:UpdateProfile", + "transfer:UnTagResource", + "transfer:TagResource" + ] + }, + "delete": { + "permissions": [ + "transfer:DeleteProfile" + ] + }, + "list": { + "permissions": [ + "transfer:ListProfiles" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/transfer/server.json b/internal/aws/cfn/schemas/aws/transfer/server.json new file mode 100644 index 00000000..69e3c57e --- /dev/null +++ b/internal/aws/cfn/schemas/aws/transfer/server.json @@ -0,0 +1,235 @@ +{ + "typeName": "AWS::Transfer::Server", + "description": "Resource Type definition for AWS::Transfer::Server", + "additionalProperties": false, + "properties": { + "LoggingRole": { + "type": "string" + }, + "Protocols": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Protocol" + } + }, + "IdentityProviderDetails": { + "$ref": "#/definitions/IdentityProviderDetails" + }, + "EndpointDetails": { + "$ref": "#/definitions/EndpointDetails" + }, + "StructuredLogDestinations": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/StructuredLogDestination" + } + }, + "PreAuthenticationLoginBanner": { + "type": "string" + }, + "ServerId": { + "type": "string" + }, + "PostAuthenticationLoginBanner": { + "type": "string" + }, + "EndpointType": { + "type": "string" + }, + "SecurityPolicyName": { + "type": "string" + }, + "ProtocolDetails": { + "$ref": "#/definitions/ProtocolDetails" + }, + "S3StorageOptions": { + "$ref": "#/definitions/S3StorageOptions" + }, + "WorkflowDetails": { + "$ref": "#/definitions/WorkflowDetails" + }, + "Arn": { + "type": "string" + }, + "Domain": { + "type": "string" + }, + "IdentityProviderType": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Certificate": { + "type": "string" + } + }, + "definitions": { + "StructuredLogDestination": { + "type": "object", + "additionalProperties": false + }, + "IdentityProviderDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "Function": { + "type": "string" + }, + "DirectoryId": { + "type": "string" + }, + "Url": { + "type": "string" + }, + "InvocationRole": { + "type": "string" + }, + "SftpAuthenticationMethods": { + "type": "string" + } + } + }, + "ProtocolDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "As2Transports": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/As2Transport" + } + }, + "PassiveIp": { + "type": "string" + }, + "SetStatOption": { + "type": "string" + }, + "TlsSessionResumptionMode": { + "type": "string" + } + } + }, + "S3StorageOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "DirectoryListingOptimization": { + "type": "string" + } + } + }, + "WorkflowDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "OnUpload": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/WorkflowDetail" + } + }, + "OnPartialUpload": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/WorkflowDetail" + } + } + } + }, + "WorkflowDetail": { + "type": "object", + "additionalProperties": false, + "properties": { + "WorkflowId": { + "type": "string" + }, + "ExecutionRole": { + "type": "string" + } + }, + "required": [ + "WorkflowId", + "ExecutionRole" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "Protocol": { + "type": "object", + "additionalProperties": false + }, + "EndpointDetails": { + "type": "object", + "additionalProperties": false, + "properties": { + "AddressAllocationIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "VpcId": { + "type": "string" + }, + "VpcEndpointId": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "SubnetIds": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + } + } + }, + "As2Transport": { + "type": "object", + "additionalProperties": false + } + }, + "createOnlyProperties": [ + "/properties/IdentityProviderType", + "/properties/Domain" + ], + "primaryIdentifier": [ + "/properties/ServerId" + ], + "readOnlyProperties": [ + "/properties/ServerId", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/transfer/user.json b/internal/aws/cfn/schemas/aws/transfer/user.json new file mode 100644 index 00000000..03021268 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/transfer/user.json @@ -0,0 +1,135 @@ +{ + "typeName": "AWS::Transfer::User", + "description": "Resource Type definition for AWS::Transfer::User", + "additionalProperties": false, + "properties": { + "Policy": { + "type": "string" + }, + "Role": { + "type": "string" + }, + "HomeDirectory": { + "type": "string" + }, + "HomeDirectoryType": { + "type": "string" + }, + "ServerId": { + "type": "string" + }, + "UserName": { + "type": "string" + }, + "HomeDirectoryMappings": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/HomeDirectoryMapEntry" + } + }, + "PosixProfile": { + "$ref": "#/definitions/PosixProfile" + }, + "SshPublicKeys": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SshPublicKey" + } + }, + "Id": { + "type": "string" + }, + "Arn": { + "type": "string" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "definitions": { + "SshPublicKey": { + "type": "object", + "additionalProperties": false + }, + "PosixProfile": { + "type": "object", + "additionalProperties": false, + "properties": { + "Uid": { + "type": "number" + }, + "SecondaryGids": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "number" + } + }, + "Gid": { + "type": "number" + } + }, + "required": [ + "Uid", + "Gid" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Value": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + }, + "HomeDirectoryMapEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "Entry": { + "type": "string" + }, + "Target": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Entry", + "Target" + ] + } + }, + "required": [ + "Role", + "ServerId", + "UserName" + ], + "createOnlyProperties": [ + "/properties/ServerId", + "/properties/UserName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id", + "/properties/Arn" + ] +} diff --git a/internal/aws/cfn/schemas/aws/transfer/workflow.json b/internal/aws/cfn/schemas/aws/transfer/workflow.json new file mode 100644 index 00000000..6ac3e8aa --- /dev/null +++ b/internal/aws/cfn/schemas/aws/transfer/workflow.json @@ -0,0 +1,390 @@ +{ + "typeName": "AWS::Transfer::Workflow", + "description": "Resource Type definition for AWS::Transfer::Workflow", + "definitions": { + "S3Tag": { + "description": "Specifies the key-value pair that are assigned to a file during the execution of a Tagging step.", + "type": "object", + "properties": { + "Key": { + "description": "The name assigned to the tag that you create.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "description": "The value that corresponds to the key.", + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "EfsInputFileLocation": { + "description": "Specifies the details for an EFS file.", + "type": "object", + "properties": { + "FileSystemId": { + "description": "Specifies the EFS filesystem that contains the file.", + "type": "string", + "pattern": "^(arn:aws[-a-z]*:elasticfilesystem:[0-9a-z-:]+:(access-point/fsap|file-system/fs)-[0-9a-f]{8,40}|fs(ap)?-[0-9a-f]{8,40})$", + "minLength": 0, + "maxLength": 128 + }, + "Path": { + "description": "The name assigned to the file when it was created in EFS. You use the object path to retrieve the object.", + "type": "string", + "pattern": "^[^\\x00]+$", + "minLength": 1, + "maxLength": 65536 + } + }, + "additionalProperties": false + }, + "S3InputFileLocation": { + "description": "Specifies the details for a S3 file.", + "type": "object", + "properties": { + "Bucket": { + "description": "Specifies the S3 bucket that contains the file.", + "type": "string", + "pattern": "^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$", + "minLength": 3, + "maxLength": 63 + }, + "Key": { + "description": "The name assigned to the file when it was created in S3. You use the object key to retrieve the object.", + "type": "string", + "pattern": ".*", + "minLength": 0, + "maxLength": 1024 + } + }, + "additionalProperties": false + }, + "InputFileLocation": { + "description": "Specifies the location for the file being decrypted. Only applicable for the Decrypt type of workflow steps.", + "type": "object", + "properties": { + "S3FileLocation": { + "$ref": "#/definitions/S3InputFileLocation" + }, + "EfsFileLocation": { + "$ref": "#/definitions/EfsInputFileLocation" + } + }, + "additionalProperties": false + }, + "S3FileLocation": { + "description": "Specifies the location for the file being copied. Only applicable for the Copy type of workflow steps.", + "type": "object", + "properties": { + "S3FileLocation": { + "$ref": "#/definitions/S3InputFileLocation" + } + }, + "additionalProperties": false + }, + "WorkflowStep": { + "description": "The basic building block of a workflow.", + "type": "object", + "properties": { + "CopyStepDetails": { + "description": "Details for a step that performs a file copy.", + "type": "object", + "properties": { + "DestinationFileLocation": { + "$ref": "#/definitions/S3FileLocation" + }, + "Name": { + "description": "The name of the step, used as an identifier.", + "type": "string", + "pattern": "^[\\w-]*$", + "minLength": 0, + "maxLength": 30 + }, + "OverwriteExisting": { + "description": "A flag that indicates whether or not to overwrite an existing file of the same name. The default is FALSE.", + "type": "string", + "enum": [ + "TRUE", + "FALSE" + ] + }, + "SourceFileLocation": { + "description": "Specifies which file to use as input to the workflow step.", + "type": "string", + "pattern": "^\\$\\{(\\w+.)+\\w+\\}$", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "CustomStepDetails": { + "description": "Details for a step that invokes a lambda function.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the step, used as an identifier.", + "type": "string", + "pattern": "^[\\w-]*$", + "minLength": 0, + "maxLength": 30 + }, + "Target": { + "description": "The ARN for the lambda function that is being called.", + "type": "string", + "pattern": "arn:[a-z-]+:lambda:.*$", + "minLength": 0, + "maxLength": 170 + }, + "TimeoutSeconds": { + "description": "Timeout, in seconds, for the step.", + "type": "integer", + "minimum": 1, + "maximum": 1800 + }, + "SourceFileLocation": { + "description": "Specifies which file to use as input to the workflow step.", + "type": "string", + "pattern": "^\\$\\{(\\w+.)+\\w+\\}$", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "DecryptStepDetails": { + "description": "Details for a step that performs a file decryption.", + "type": "object", + "properties": { + "DestinationFileLocation": { + "$ref": "#/definitions/InputFileLocation" + }, + "Name": { + "description": "The name of the step, used as an identifier.", + "type": "string", + "pattern": "^[\\w-]*$", + "minLength": 0, + "maxLength": 30 + }, + "Type": { + "description": "Specifies which encryption method to use.", + "type": "string", + "enum": [ + "PGP" + ] + }, + "OverwriteExisting": { + "description": "A flag that indicates whether or not to overwrite an existing file of the same name. The default is FALSE.", + "type": "string", + "enum": [ + "TRUE", + "FALSE" + ] + }, + "SourceFileLocation": { + "description": "Specifies which file to use as input to the workflow step.", + "type": "string", + "pattern": "^\\$\\{(\\w+.)+\\w+\\}$", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "DeleteStepDetails": { + "description": "Details for a step that deletes the file.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the step, used as an identifier.", + "type": "string", + "pattern": "^[\\w-]*$", + "minLength": 0, + "maxLength": 30 + }, + "SourceFileLocation": { + "description": "Specifies which file to use as input to the workflow step.", + "type": "string", + "pattern": "^\\$\\{(\\w+.)+\\w+\\}$", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "TagStepDetails": { + "description": "Details for a step that creates one or more tags.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the step, used as an identifier.", + "type": "string", + "pattern": "^[\\w-]*$", + "minLength": 0, + "maxLength": 30 + }, + "Tags": { + "description": "Array that contains from 1 to 10 key/value pairs.", + "type": "array", + "maxItems": 10, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/S3Tag" + } + }, + "SourceFileLocation": { + "description": "Specifies which file to use as input to the workflow step.", + "type": "string", + "pattern": "^\\$\\{(\\w+.)+\\w+\\}$", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "Type": { + "type": "string", + "enum": [ + "COPY", + "CUSTOM", + "DECRYPT", + "DELETE", + "TAG" + ] + } + }, + "additionalProperties": false + }, + "Tag": { + "description": "Creates a key-value pair for a specific resource.", + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The name assigned to the tag that you create.", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "description": "Contains one or more values that you assigned to the key name you create.", + "minLength": 0, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "OnExceptionSteps": { + "description": "Specifies the steps (actions) to take if any errors are encountered during execution of the workflow.", + "type": "array", + "maxItems": 8, + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/WorkflowStep" + } + }, + "Steps": { + "description": "Specifies the details for the steps that are in the specified workflow.", + "type": "array", + "maxItems": 8, + "uniqueItems": true, + "insertionOrder": true, + "items": { + "$ref": "#/definitions/WorkflowStep" + } + }, + "Tags": { + "description": "Key-value pairs that can be used to group and search for workflows. Tags are metadata attached to workflows for any purpose.", + "type": "array", + "maxItems": 50, + "uniqueItems": true, + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "Description": { + "description": "A textual description for the workflow.", + "type": "string", + "pattern": "^[\\w\\- ]*$", + "minLength": 0, + "maxLength": 256 + }, + "WorkflowId": { + "description": "A unique identifier for the workflow.", + "type": "string", + "pattern": "^w-([a-z0-9]{17})$", + "minLength": 19, + "maxLength": 19 + }, + "Arn": { + "description": "Specifies the unique Amazon Resource Name (ARN) for the workflow.", + "type": "string", + "pattern": "arn:.*", + "minLength": 20, + "maxLength": 1600 + } + }, + "required": [ + "Steps" + ], + "additionalProperties": false, + "readOnlyProperties": [ + "/properties/WorkflowId", + "/properties/Arn" + ], + "createOnlyProperties": [ + "/properties/Steps", + "/properties/OnExceptionSteps", + "/properties/Description" + ], + "primaryIdentifier": [ + "/properties/WorkflowId" + ], + "taggable": true, + "handlers": { + "create": { + "permissions": [ + "transfer:CreateWorkflow", + "transfer:TagResource" + ] + }, + "read": { + "permissions": [ + "transfer:DescribeWorkflow" + ] + }, + "delete": { + "permissions": [ + "transfer:DeleteWorkflow" + ] + }, + "list": { + "permissions": [ + "transfer:ListWorkflows" + ] + }, + "update": { + "permissions": [ + "transfer:UnTagResource", + "transfer:TagResource" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/verifiedpermissions/identitysource.json b/internal/aws/cfn/schemas/aws/verifiedpermissions/identitysource.json new file mode 100644 index 00000000..ad5e5803 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/verifiedpermissions/identitysource.json @@ -0,0 +1,201 @@ +{ + "typeName": "AWS::VerifiedPermissions::IdentitySource", + "description": "Definition of AWS::VerifiedPermissions::IdentitySource Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-avp", + "definitions": { + "CognitoUserPoolConfiguration": { + "type": "object", + "properties": { + "UserPoolArn": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^arn:[a-zA-Z0-9-]+:cognito-idp:(([a-zA-Z0-9-]+:\\d{12}:userpool/[\\w-]+_[0-9a-zA-Z]+))$" + }, + "ClientIds": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^.*$" + }, + "maxItems": 1000, + "minItems": 0 + } + }, + "required": [ + "UserPoolArn" + ], + "additionalProperties": false + }, + "IdentitySourceConfiguration": { + "type": "object", + "title": "CognitoUserPoolConfiguration", + "properties": { + "CognitoUserPoolConfiguration": { + "$ref": "#/definitions/CognitoUserPoolConfiguration" + } + }, + "required": [ + "CognitoUserPoolConfiguration" + ], + "additionalProperties": false + }, + "IdentitySourceDetails": { + "type": "object", + "properties": { + "ClientIds": { + "type": "array", + "insertionOrder": false, + "items": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^.*$" + }, + "maxItems": 1000, + "minItems": 0 + }, + "UserPoolArn": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^arn:[a-zA-Z0-9-]+:cognito-idp:(([a-zA-Z0-9-]+:\\d{12}:userpool/[\\w-]+_[0-9a-zA-Z]+))$" + }, + "DiscoveryUrl": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^https://.*$" + }, + "OpenIdIssuer": { + "$ref": "#/definitions/OpenIdIssuer" + } + }, + "additionalProperties": false + }, + "OpenIdIssuer": { + "type": "string", + "enum": [ + "COGNITO" + ] + } + }, + "properties": { + "Configuration": { + "$ref": "#/definitions/IdentitySourceConfiguration" + }, + "Details": { + "$ref": "#/definitions/IdentitySourceDetails" + }, + "IdentitySourceId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "PolicyStoreId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "PrincipalEntityType": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^.*$" + } + }, + "required": [ + "Configuration", + "PolicyStoreId" + ], + "readOnlyProperties": [ + "/properties/Details", + "/properties/IdentitySourceId" + ], + "createOnlyProperties": [ + "/properties/PolicyStoreId" + ], + "primaryIdentifier": [ + "/properties/IdentitySourceId", + "/properties/PolicyStoreId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "verifiedpermissions:CreateIdentitySource", + "verifiedpermissions:GetIdentitySource", + "verifiedpermissions:UpdateIdentitySource", + "verifiedpermissions:DeleteIdentitySource", + "verifiedpermissions:ListIdentitySources", + "cognito-idp:DescribeUserPool", + "cognito-idp:ListUserPoolClients" + ] + }, + "read": { + "permissions": [ + "verifiedpermissions:CreateIdentitySource", + "verifiedpermissions:GetIdentitySource", + "verifiedpermissions:UpdateIdentitySource", + "verifiedpermissions:DeleteIdentitySource", + "verifiedpermissions:ListIdentitySources", + "cognito-idp:DescribeUserPool", + "cognito-idp:ListUserPoolClients" + ] + }, + "update": { + "permissions": [ + "verifiedpermissions:CreateIdentitySource", + "verifiedpermissions:GetIdentitySource", + "verifiedpermissions:UpdateIdentitySource", + "verifiedpermissions:DeleteIdentitySource", + "verifiedpermissions:ListIdentitySources", + "cognito-idp:DescribeUserPool", + "cognito-idp:ListUserPoolClients" + ] + }, + "delete": { + "permissions": [ + "verifiedpermissions:CreateIdentitySource", + "verifiedpermissions:GetIdentitySource", + "verifiedpermissions:UpdateIdentitySource", + "verifiedpermissions:DeleteIdentitySource", + "verifiedpermissions:ListIdentitySources", + "cognito-idp:DescribeUserPool", + "cognito-idp:ListUserPoolClients" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "PolicyStoreId": { + "$ref": "resource-schema.json#/properties/PolicyStoreId" + } + }, + "required": [ + "PolicyStoreId" + ] + }, + "permissions": [ + "verifiedpermissions:CreateIdentitySource", + "verifiedpermissions:GetIdentitySource", + "verifiedpermissions:UpdateIdentitySource", + "verifiedpermissions:DeleteIdentitySource", + "verifiedpermissions:ListIdentitySources", + "cognito-idp:DescribeUserPool", + "cognito-idp:ListUserPoolClients" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/verifiedpermissions/policy.json b/internal/aws/cfn/schemas/aws/verifiedpermissions/policy.json new file mode 100644 index 00000000..d1ddb92d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/verifiedpermissions/policy.json @@ -0,0 +1,200 @@ +{ + "typeName": "AWS::VerifiedPermissions::Policy", + "description": "Definition of AWS::VerifiedPermissions::Policy Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-avp", + "definitions": { + "EntityIdentifier": { + "type": "object", + "properties": { + "EntityType": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^.*$" + }, + "EntityId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^.*$" + } + }, + "required": [ + "EntityId", + "EntityType" + ], + "additionalProperties": false + }, + "PolicyDefinition": { + "oneOf": [ + { + "type": "object", + "title": "Static", + "properties": { + "Static": { + "$ref": "#/definitions/StaticPolicyDefinition" + } + }, + "required": [ + "Static" + ], + "additionalProperties": false + }, + { + "type": "object", + "title": "TemplateLinked", + "properties": { + "TemplateLinked": { + "$ref": "#/definitions/TemplateLinkedPolicyDefinition" + } + }, + "required": [ + "TemplateLinked" + ], + "additionalProperties": false + } + ] + }, + "PolicyType": { + "type": "string", + "enum": [ + "STATIC", + "TEMPLATE_LINKED" + ] + }, + "StaticPolicyDefinition": { + "type": "object", + "properties": { + "Description": { + "type": "string", + "maxLength": 150, + "minLength": 0 + }, + "Statement": { + "type": "string", + "maxLength": 10000, + "minLength": 1 + } + }, + "required": [ + "Statement" + ], + "additionalProperties": false + }, + "TemplateLinkedPolicyDefinition": { + "type": "object", + "properties": { + "PolicyTemplateId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "Principal": { + "$ref": "#/definitions/EntityIdentifier" + }, + "Resource": { + "$ref": "#/definitions/EntityIdentifier" + } + }, + "required": [ + "PolicyTemplateId" + ], + "additionalProperties": false + } + }, + "properties": { + "Definition": { + "$ref": "#/definitions/PolicyDefinition" + }, + "PolicyId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "PolicyStoreId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "PolicyType": { + "$ref": "#/definitions/PolicyType" + } + }, + "required": [ + "Definition", + "PolicyStoreId" + ], + "readOnlyProperties": [ + "/properties/PolicyId", + "/properties/PolicyType" + ], + "createOnlyProperties": [ + "/properties/PolicyStoreId" + ], + "primaryIdentifier": [ + "/properties/PolicyId", + "/properties/PolicyStoreId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "verifiedpermissions:CreatePolicy", + "verifiedpermissions:GetPolicy", + "verifiedpermissions:UpdatePolicy", + "verifiedpermissions:DeletePolicy" + ] + }, + "read": { + "permissions": [ + "verifiedpermissions:CreatePolicy", + "verifiedpermissions:GetPolicy", + "verifiedpermissions:UpdatePolicy", + "verifiedpermissions:DeletePolicy" + ] + }, + "update": { + "permissions": [ + "verifiedpermissions:CreatePolicy", + "verifiedpermissions:GetPolicy", + "verifiedpermissions:UpdatePolicy", + "verifiedpermissions:DeletePolicy" + ] + }, + "delete": { + "permissions": [ + "verifiedpermissions:CreatePolicy", + "verifiedpermissions:GetPolicy", + "verifiedpermissions:UpdatePolicy", + "verifiedpermissions:DeletePolicy" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "PolicyStoreId": { + "$ref": "resource-schema.json#/properties/PolicyStoreId" + } + }, + "required": [ + "PolicyStoreId" + ] + }, + "permissions": [ + "verifiedpermissions:CreatePolicy", + "verifiedpermissions:GetPolicy", + "verifiedpermissions:UpdatePolicy", + "verifiedpermissions:DeletePolicy" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/verifiedpermissions/policystore.json b/internal/aws/cfn/schemas/aws/verifiedpermissions/policystore.json new file mode 100644 index 00000000..8acb4557 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/verifiedpermissions/policystore.json @@ -0,0 +1,130 @@ +{ + "typeName": "AWS::VerifiedPermissions::PolicyStore", + "description": "Definition of AWS::VerifiedPermissions::PolicyStore Resource Type", + "definitions": { + "ValidationMode": { + "type": "string", + "enum": [ + "OFF", + "STRICT" + ] + }, + "ValidationSettings": { + "type": "object", + "properties": { + "Mode": { + "$ref": "#/definitions/ValidationMode" + } + }, + "required": [ + "Mode" + ], + "additionalProperties": false + }, + "SchemaJson": { + "type": "string" + }, + "SchemaDefinition": { + "type": "object", + "properties": { + "CedarJson": { + "$ref": "#/definitions/SchemaJson" + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2500, + "minLength": 1, + "pattern": "^arn:[^:]*:[^:]*:[^:]*:[^:]*:.*$" + }, + "Description": { + "type": "string", + "maxLength": 150, + "minLength": 0 + }, + "PolicyStoreId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "ValidationSettings": { + "$ref": "#/definitions/ValidationSettings" + }, + "Schema": { + "$ref": "#/definitions/SchemaDefinition" + } + }, + "required": [ + "ValidationSettings" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/PolicyStoreId" + ], + "primaryIdentifier": [ + "/properties/PolicyStoreId" + ], + "propertyTransform": { + "/properties/Schema/CedarJson": "$join([CedarJson, \"{}\"])" + }, + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "verifiedpermissions:CreatePolicyStore", + "verifiedpermissions:GetPolicyStore", + "verifiedpermissions:UpdatePolicyStore", + "verifiedpermissions:DeletePolicyStore", + "verifiedpermissions:PutSchema" + ] + }, + "read": { + "permissions": [ + "verifiedpermissions:CreatePolicyStore", + "verifiedpermissions:GetPolicyStore", + "verifiedpermissions:UpdatePolicyStore", + "verifiedpermissions:DeletePolicyStore", + "verifiedpermissions:GetSchema" + ] + }, + "update": { + "permissions": [ + "verifiedpermissions:CreatePolicyStore", + "verifiedpermissions:GetPolicyStore", + "verifiedpermissions:UpdatePolicyStore", + "verifiedpermissions:DeletePolicyStore", + "verifiedpermissions:GetSchema", + "verifiedpermissions:PutSchema" + ] + }, + "delete": { + "permissions": [ + "verifiedpermissions:CreatePolicyStore", + "verifiedpermissions:GetPolicyStore", + "verifiedpermissions:UpdatePolicyStore", + "verifiedpermissions:DeletePolicyStore" + ] + }, + "list": { + "permissions": [ + "verifiedpermissions:CreatePolicyStore", + "verifiedpermissions:GetPolicyStore", + "verifiedpermissions:UpdatePolicyStore", + "verifiedpermissions:DeletePolicyStore", + "verifiedpermissions:ListPolicyStores", + "verifiedpermissions:GetSchema" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/verifiedpermissions/policytemplate.json b/internal/aws/cfn/schemas/aws/verifiedpermissions/policytemplate.json new file mode 100644 index 00000000..a69808b0 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/verifiedpermissions/policytemplate.json @@ -0,0 +1,103 @@ +{ + "typeName": "AWS::VerifiedPermissions::PolicyTemplate", + "description": "Definition of AWS::VerifiedPermissions::PolicyTemplate Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-avp", + "properties": { + "Description": { + "type": "string", + "maxLength": 150, + "minLength": 0 + }, + "PolicyStoreId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "PolicyTemplateId": { + "type": "string", + "maxLength": 200, + "minLength": 1, + "pattern": "^[a-zA-Z0-9-]*$" + }, + "Statement": { + "type": "string", + "maxLength": 10000, + "minLength": 1 + } + }, + "required": [ + "Statement", + "PolicyStoreId" + ], + "readOnlyProperties": [ + "/properties/PolicyTemplateId" + ], + "createOnlyProperties": [ + "/properties/PolicyStoreId" + ], + "primaryIdentifier": [ + "/properties/PolicyStoreId", + "/properties/PolicyTemplateId" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "handlers": { + "create": { + "permissions": [ + "verifiedpermissions:CreatePolicyTemplate", + "verifiedpermissions:GetPolicyTemplate", + "verifiedpermissions:UpdatePolicyTemplate", + "verifiedpermissions:DeletePolicyTemplate" + ] + }, + "read": { + "permissions": [ + "verifiedpermissions:CreatePolicyTemplate", + "verifiedpermissions:GetPolicyTemplate", + "verifiedpermissions:UpdatePolicyTemplate", + "verifiedpermissions:DeletePolicyTemplate" + ] + }, + "update": { + "permissions": [ + "verifiedpermissions:CreatePolicyTemplate", + "verifiedpermissions:GetPolicyTemplate", + "verifiedpermissions:UpdatePolicyTemplate", + "verifiedpermissions:DeletePolicyTemplate" + ] + }, + "delete": { + "permissions": [ + "verifiedpermissions:CreatePolicyTemplate", + "verifiedpermissions:GetPolicyTemplate", + "verifiedpermissions:UpdatePolicyTemplate", + "verifiedpermissions:DeletePolicyTemplate" + ] + }, + "list": { + "handlerSchema": { + "properties": { + "PolicyStoreId": { + "$ref": "resource-schema.json#/properties/PolicyStoreId" + } + }, + "required": [ + "PolicyStoreId" + ] + }, + "permissions": [ + "verifiedpermissions:CreatePolicyTemplate", + "verifiedpermissions:GetPolicyTemplate", + "verifiedpermissions:UpdatePolicyTemplate", + "verifiedpermissions:DeletePolicyTemplate", + "verifiedpermissions:ListPolicyTemplates" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/voiceid/domain.json b/internal/aws/cfn/schemas/aws/voiceid/domain.json new file mode 100644 index 00000000..053e4513 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/voiceid/domain.json @@ -0,0 +1,142 @@ +{ + "typeName": "AWS::VoiceID::Domain", + "description": "The AWS::VoiceID::Domain resource specifies an Amazon VoiceID Domain.", + "definitions": { + "ServerSideEncryptionConfiguration": { + "type": "object", + "properties": { + "KmsKeyId": { + "type": "string", + "maxLength": 2048, + "minLength": 1 + } + }, + "required": [ + "KmsKeyId" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-%@]*)$" + }, + "DomainId": { + "type": "string", + "maxLength": 22, + "minLength": 22, + "pattern": "^[a-zA-Z0-9]{22}$" + }, + "Name": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]*$" + }, + "ServerSideEncryptionConfiguration": { + "$ref": "#/definitions/ServerSideEncryptionConfiguration" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0 + } + }, + "required": [ + "Name", + "ServerSideEncryptionConfiguration" + ], + "readOnlyProperties": [ + "/properties/DomainId" + ], + "writeOnlyProperties": [ + "/properties/Description", + "/properties/Name", + "/properties/ServerSideEncryptionConfiguration" + ], + "primaryIdentifier": [ + "/properties/DomainId" + ], + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "#/properties/Tags" + }, + "handlers": { + "create": { + "permissions": [ + "voiceid:CreateDomain", + "voiceid:DescribeDomain", + "voiceid:TagResource", + "voiceid:ListTagsForResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "voiceid:DescribeDomain", + "voiceid:ListTagsForResource", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "voiceid:DescribeDomain", + "voiceid:UpdateDomain", + "voiceid:TagResource", + "voiceid:UntagResource", + "voiceid:ListTagsForResource", + "kms:CreateGrant", + "kms:Decrypt", + "kms:DescribeKey" + ] + }, + "delete": { + "permissions": [ + "voiceid:DeleteDomain", + "voiceid:DescribeDomain", + "kms:Decrypt" + ] + }, + "list": { + "permissions": [ + "voiceid:ListDomains", + "kms:Decrypt" + ] + } + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/accesslogsubscription.json b/internal/aws/cfn/schemas/aws/vpclattice/accesslogsubscription.json new file mode 100644 index 00000000..a0459bbd --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/accesslogsubscription.json @@ -0,0 +1,199 @@ +{ + "typeName": "AWS::VpcLattice::AccessLogSubscription", + "description": "Enables access logs to be sent to Amazon CloudWatch, Amazon S3, and Amazon Kinesis Data Firehose. The service network owner can use the access logs to audit the services in the network. The service network owner will only see access logs from clients and services that are associated with their service network. Access log entries represent traffic originated from VPCs associated with that network.", + "additionalProperties": false, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:accesslogsubscription/als-[0-9a-z]{17}$" + }, + "DestinationArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$" + }, + "Id": { + "type": "string", + "maxLength": 21, + "minLength": 21, + "pattern": "^als-[0-9a-z]{17}$" + }, + "ResourceArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(service/svc))-[0-9a-z]{17}$" + }, + "ResourceId": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((sn)|(svc))-[0-9a-z]{17}$" + }, + "ResourceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((((sn)|(svc))-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(service/svc))-[0-9a-z]{17}))$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "DestinationArn" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/ResourceArn", + "/properties/ResourceId" + ], + "writeOnlyProperties": [ + "/properties/ResourceIdentifier" + ], + "createOnlyProperties": [ + "/properties/ResourceIdentifier" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ], + [ + "/properties/ResourceIdentifier" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:CreateAccessLogSubscription", + "vpc-lattice:TagResource", + "vpc-lattice:GetAccessLogSubscription", + "vpc-lattice:ListTagsForResource", + "logs:CreateLogDelivery", + "logs:CreateLogStream", + "logs:PutDestination", + "logs:PutDestinationPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "logs:GetLogDelivery", + "s3:PutBucketLogging", + "s3:GetBucketLogging", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "firehose:TagDeliveryStream", + "firehose:CreateDeliveryStream", + "firehose:DescribeDeliveryStream", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetAccessLogSubscription", + "vpc-lattice:ListTagsForResource", + "logs:GetLogDelivery" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:GetAccessLogSubscription", + "vpc-lattice:UpdateAccessLogSubscription", + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource", + "logs:UpdateLogDelivery", + "firehose:UpdateDestination", + "logs:CreateLogDelivery", + "logs:CreateLogStream", + "logs:PutDestination", + "logs:PutDestinationPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + "logs:GetLogDelivery", + "s3:PutBucketLogging", + "s3:GetBucketLogging", + "s3:GetBucketPolicy", + "s3:PutBucketPolicy", + "firehose:TagDeliveryStream", + "firehose:CreateDeliveryStream", + "firehose:DescribeDeliveryStream" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteAccessLogSubscription", + "vpc-lattice:UntagResource", + "logs:DeleteLogDelivery", + "logs:DeleteLogStream", + "logs:GetLogDelivery", + "logs:DeleteDestination", + "s3:PutBucketLogging", + "iam:GetServiceLinkedRoleDeletionStatus", + "iam:DeleteServiceLinkedRole", + "firehose:DeleteDeliveryStream", + "firehose:UntagDeliveryStream" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListAccessLogSubscriptions" + ], + "handlerSchema": { + "properties": { + "ResourceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((((sn)|(svc))-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(service/svc))-[0-9a-z]{17}))$" + } + }, + "required": [ + "ResourceIdentifier" + ] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/authpolicy.json b/internal/aws/cfn/schemas/aws/vpclattice/authpolicy.json new file mode 100644 index 00000000..ab6e3458 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/authpolicy.json @@ -0,0 +1,64 @@ +{ + "typeName": "AWS::VpcLattice::AuthPolicy", + "description": "Creates or updates the auth policy.", + "additionalProperties": false, + "properties": { + "ResourceIdentifier": { + "type": "string", + "pattern": "^((((sn)|(svc))-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(service/svc))-[0-9a-z]{17}))$", + "maxLength": 200, + "minLength": 21 + }, + "Policy": { + "type": "object" + }, + "State": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + } + }, + "required": [ + "ResourceIdentifier", + "Policy" + ], + "readOnlyProperties": [ + "/properties/State" + ], + "createOnlyProperties": [ + "/properties/ResourceIdentifier" + ], + "primaryIdentifier": [ + "/properties/ResourceIdentifier" + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:GetAuthPolicy", + "vpc-lattice:PutAuthPolicy" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetAuthPolicy" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:GetAuthPolicy", + "vpc-lattice:PutAuthPolicy" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:GetAuthPolicy", + "vpc-lattice:DeleteAuthPolicy" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/listener.json b/internal/aws/cfn/schemas/aws/vpclattice/listener.json new file mode 100644 index 00000000..027e766b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/listener.json @@ -0,0 +1,242 @@ +{ + "typeName": "AWS::VpcLattice::Listener", + "description": "Creates a listener for a service. Before you start using your Amazon VPC Lattice service, you must add one or more listeners. A listener is a process that checks for connection requests to your services.", + "additionalProperties": false, + "definitions": { + "Forward": { + "type": "object", + "properties": { + "TargetGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/WeightedTargetGroup" + }, + "maxItems": 2, + "minItems": 1, + "insertionOrder": false + } + }, + "required": [ + "TargetGroups" + ], + "additionalProperties": false + }, + "FixedResponse": { + "type": "object", + "additionalProperties": false, + "properties": { + "StatusCode": { + "type": "integer", + "maximum": 599, + "minimum": 100 + } + }, + "required": [ + "StatusCode" + ] + }, + "DefaultAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Forward": { + "$ref": "#/definitions/Forward" + }, + "FixedResponse": { + "$ref": "#/definitions/FixedResponse" + } + }, + "required": [] + }, + "WeightedTargetGroup": { + "type": "object", + "properties": { + "TargetGroupIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((tg-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:targetgroup/tg-[0-9a-z]{17}))$" + }, + "Weight": { + "type": "integer", + "maximum": 999, + "minimum": 1 + } + }, + "required": [ + "TargetGroupIdentifier" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}$" + }, + "DefaultAction": { + "$ref": "#/definitions/DefaultAction" + }, + "Id": { + "type": "string", + "maxLength": 26, + "minLength": 26, + "pattern": "^listener-[0-9a-z]{17}$" + }, + "Name": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!listener-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "Port": { + "type": "integer", + "maximum": 65535, + "minimum": 1 + }, + "Protocol": { + "type": "string", + "enum": [ + "HTTP", + "HTTPS" + ] + }, + "ServiceArn": { + "type": "string", + "maxLength": 2048, + "minLength": 21, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}$" + }, + "ServiceId": { + "type": "string", + "maxLength": 21, + "minLength": 21, + "pattern": "^svc-[0-9a-z]{17}$" + }, + "ServiceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 21, + "pattern": "^((svc-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}))$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "propertyTransform": { + "/properties/DefaultAction/Forward/TargetGroups/*/TargetGroupIdentifier": "$split(TargetGroupIdentifier, \"/\")[-1]" + }, + "required": [ + "DefaultAction", + "Protocol" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/ServiceArn", + "/properties/ServiceId" + ], + "createOnlyProperties": [ + "/properties/ServiceIdentifier", + "/properties/Name", + "/properties/Port", + "/properties/Protocol" + ], + "writeOnlyProperties": [ + "/properties/ServiceIdentifier" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/ServiceIdentifier", + "/properties/Name", + "/properties/Port" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:CreateListener", + "vpc-lattice:TagResource", + "vpc-lattice:GetListener", + "vpc-lattice:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetListener", + "vpc-lattice:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:UpdateListener", + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource", + "vpc-lattice:GetListener", + "vpc-lattice:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteListener" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListListeners" + ], + "handlerSchema": { + "properties": { + "ServiceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 21, + "pattern": "^((svc-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}))$" + } + }, + "required": [ + "ServiceIdentifier" + ] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/resourcepolicy.json b/internal/aws/cfn/schemas/aws/vpclattice/resourcepolicy.json new file mode 100644 index 00000000..e4015e61 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/resourcepolicy.json @@ -0,0 +1,54 @@ +{ + "typeName": "AWS::VpcLattice::ResourcePolicy", + "description": "Retrieves information about the resource policy. The resource policy is an IAM policy created by AWS RAM on behalf of the resource owner when they share a resource.", + "additionalProperties": false, + "properties": { + "ResourceArn": { + "type": "string", + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(service/svc))-[0-9a-z]{17}$", + "minLength": 20, + "maxLength": 200 + }, + "Policy": { + "type": "object" + } + }, + "required": [ + "ResourceArn", + "Policy" + ], + "createOnlyProperties": [ + "/properties/ResourceArn" + ], + "primaryIdentifier": [ + "/properties/ResourceArn" + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:GetResourcePolicy", + "vpc-lattice:PutResourcePolicy" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetResourcePolicy" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:GetResourcePolicy", + "vpc-lattice:PutResourcePolicy" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:GetResourcePolicy", + "vpc-lattice:DeleteResourcePolicy" + ] + } + }, + "tagging": { + "taggable": false + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/rule.json b/internal/aws/cfn/schemas/aws/vpclattice/rule.json new file mode 100644 index 00000000..1e674546 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/rule.json @@ -0,0 +1,358 @@ +{ + "typeName": "AWS::VpcLattice::Rule", + "description": "Creates a listener rule. Each listener has a default rule for checking connection requests, but you can define additional rules. Each rule consists of a priority, one or more actions, and one or more conditions.", + "additionalProperties": false, + "definitions": { + "Forward": { + "type": "object", + "properties": { + "TargetGroups": { + "type": "array", + "items": { + "$ref": "#/definitions/WeightedTargetGroup" + }, + "maxItems": 2, + "minItems": 1, + "insertionOrder": false + } + }, + "required": [ + "TargetGroups" + ], + "additionalProperties": false + }, + "FixedResponse": { + "type": "object", + "additionalProperties": false, + "properties": { + "StatusCode": { + "type": "integer", + "maximum": 599, + "minimum": 100 + } + }, + "required": [ + "StatusCode" + ] + }, + "HeaderMatch": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "maxLength": 40, + "minLength": 1 + }, + "Match": { + "$ref": "#/definitions/HeaderMatchType" + }, + "CaseSensitive": { + "type": "boolean", + "default": false + } + }, + "required": [ + "Match", + "Name" + ], + "additionalProperties": false + }, + "HeaderMatchType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Exact": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1 + }, + "Contains": { + "type": "string", + "maxLength": 128, + "minLength": 1 + } + } + }, + "HttpMatch": { + "type": "object", + "properties": { + "Method": { + "type": "string", + "enum": [ + "CONNECT", + "DELETE", + "GET", + "HEAD", + "OPTIONS", + "POST", + "PUT", + "TRACE" + ] + }, + "PathMatch": { + "$ref": "#/definitions/PathMatch" + }, + "HeaderMatches": { + "type": "array", + "maxItems": 5, + "items": { + "$ref": "#/definitions/HeaderMatch" + }, + "insertionOrder": false + } + }, + "additionalProperties": false + }, + "PathMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Match": { + "$ref": "#/definitions/PathMatchType" + }, + "CaseSensitive": { + "type": "boolean", + "default": false + } + }, + "required": [ + "Match" + ] + }, + "PathMatchType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Exact": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^\\/[a-zA-Z0-9@:%_+.~#?&\\/=-]*$" + }, + "Prefix": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^\\/[a-zA-Z0-9@:%_+.~#?&\\/=-]*$" + } + } + }, + "Action": { + "type": "object", + "title": "Forward", + "properties": { + "Forward": { + "$ref": "#/definitions/Forward" + }, + "FixedResponse": { + "$ref": "#/definitions/FixedResponse" + } + }, + "required": [], + "additionalProperties": false + }, + "Match": { + "type": "object", + "title": "HttpMatch", + "properties": { + "HttpMatch": { + "$ref": "#/definitions/HttpMatch" + } + }, + "required": [ + "HttpMatch" + ], + "additionalProperties": false + }, + "WeightedTargetGroup": { + "type": "object", + "properties": { + "TargetGroupIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((tg-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:targetgroup/tg-[0-9a-z]{17}))$" + }, + "Weight": { + "type": "integer", + "maximum": 999, + "minimum": 1 + } + }, + "required": [ + "TargetGroupIdentifier" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Action": { + "$ref": "#/definitions/Action" + }, + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}/rule/((rule-[0-9a-z]{17})|(default))$" + }, + "Id": { + "type": "string", + "maxLength": 22, + "minLength": 7, + "pattern": "^((rule-[0-9a-z]{17})|(default))$" + }, + "ListenerIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((listener-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}))$" + }, + "Match": { + "$ref": "#/definitions/Match" + }, + "Name": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!rule-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "Priority": { + "type": "integer", + "maximum": 100, + "minimum": 1 + }, + "ServiceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((svc-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:service/svc-[0-9a-z]{17}))$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "propertyTransform": { + "/properties/Action/Forward/TargetGroups/*/TargetGroupIdentifier": "$split(TargetGroupIdentifier, \"/\")[-1]" + }, + "required": [ + "Action", + "Match", + "Priority" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "createOnlyProperties": [ + "/properties/ListenerIdentifier", + "/properties/ServiceIdentifier", + "/properties/Name" + ], + "writeOnlyProperties": [ + "/properties/ListenerIdentifier", + "/properties/ServiceIdentifier" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/ServiceIdentifier", + "/properties/ListenerIdentifier", + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:CreateRule", + "vpc-lattice:GetRule", + "vpc-lattice:ListTagsForResource", + "vpc-lattice:TagResource" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetRule", + "vpc-lattice:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:UpdateRule", + "vpc-lattice:GetRule", + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteRule" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListRules" + ], + "handlerSchema": { + "properties": { + "ServiceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((svc-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:service/svc-[0-9a-z]{17}))$" + }, + "ListenerIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((listener-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}))$" + } + }, + "required": [ + "ServiceIdentifier", + "ListenerIdentifier" + ] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/service.json b/internal/aws/cfn/schemas/aws/vpclattice/service.json new file mode 100644 index 00000000..6eaeda9b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/service.json @@ -0,0 +1,176 @@ +{ + "typeName": "AWS::VpcLattice::Service", + "description": "A service is any software application that can run on instances containers, or serverless functions within an account or virtual private cloud (VPC).", + "additionalProperties": false, + "definitions": { + "DnsEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "DomainName": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}$" + }, + "AuthType": { + "type": "string", + "default": "NONE", + "enum": [ + "NONE", + "AWS_IAM" + ] + }, + "CreatedAt": { + "type": "string" + }, + "DnsEntry": { + "$ref": "#/definitions/DnsEntry" + }, + "Id": { + "type": "string", + "maxLength": 21, + "minLength": 21, + "pattern": "^svc-[0-9a-z]{17}$" + }, + "LastUpdatedAt": { + "type": "string" + }, + "Name": { + "type": "string", + "maxLength": 40, + "minLength": 3, + "pattern": "^(?!svc-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "Status": { + "type": "string", + "enum": [ + "ACTIVE", + "CREATE_IN_PROGRESS", + "DELETE_IN_PROGRESS", + "CREATE_FAILED", + "DELETE_FAILED" + ] + }, + "CertificateArn": { + "type": "string", + "maxLength": 2048, + "pattern": "^(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:certificate/[0-9a-z-]+)?$" + }, + "CustomDomainName": { + "type": "string", + "maxLength": 255, + "minLength": 3 + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedAt", + "/properties/DnsEntry/DomainName", + "/properties/DnsEntry/HostedZoneId", + "/properties/Id", + "/properties/LastUpdatedAt", + "/properties/Status" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/CustomDomainName" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ], + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:CreateService", + "vpc-lattice:GetService", + "vpc-lattice:ListTagsForResource", + "vpc-lattice:TagResource", + "acm:DescribeCertificate", + "acm:ListCertificates", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetService", + "vpc-lattice:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:UpdateService", + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource", + "vpc-lattice:GetService", + "vpc-lattice:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteService", + "vpc-lattice:GetService" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListServices" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/servicenetwork.json b/internal/aws/cfn/schemas/aws/vpclattice/servicenetwork.json new file mode 100644 index 00000000..1660ce43 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/servicenetwork.json @@ -0,0 +1,133 @@ +{ + "typeName": "AWS::VpcLattice::ServiceNetwork", + "description": "A service network is a logical boundary for a collection of services. You can associate services and VPCs with a service network.", + "additionalProperties": false, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}$" + }, + "CreatedAt": { + "type": "string" + }, + "Id": { + "type": "string", + "maxLength": 20, + "minLength": 20, + "pattern": "^sn-[0-9a-z]{17}$" + }, + "LastUpdatedAt": { + "type": "string" + }, + "Name": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!servicenetwork-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "AuthType": { + "type": "string", + "default": "NONE", + "enum": [ + "NONE", + "AWS_IAM" + ] + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedAt", + "/properties/Id", + "/properties/LastUpdatedAt" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ], + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:GetServiceNetwork", + "vpc-lattice:ListTagsForResource", + "vpc-lattice:CreateServiceNetwork", + "vpc-lattice:TagResource", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetServiceNetwork", + "vpc-lattice:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:GetServiceNetwork", + "vpc-lattice:UpdateServiceNetwork", + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteServiceNetwork" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListServiceNetworks" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": false, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/servicenetworkserviceassociation.json b/internal/aws/cfn/schemas/aws/vpclattice/servicenetworkserviceassociation.json new file mode 100644 index 00000000..658baa47 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/servicenetworkserviceassociation.json @@ -0,0 +1,220 @@ +{ + "typeName": "AWS::VpcLattice::ServiceNetworkServiceAssociation", + "description": "Associates a service with a service network.", + "additionalProperties": false, + "definitions": { + "DnsEntry": { + "type": "object", + "additionalProperties": false, + "properties": { + "DomainName": { + "type": "string" + }, + "HostedZoneId": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkserviceassociation/snsa-[0-9a-z]{17}$" + }, + "CreatedAt": { + "type": "string" + }, + "DnsEntry": { + "$ref": "#/definitions/DnsEntry" + }, + "Id": { + "type": "string", + "maxLength": 2048, + "minLength": 17, + "pattern": "^snsa-[0-9a-z]{17}$" + }, + "ServiceNetworkArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}$" + }, + "ServiceNetworkId": { + "type": "string", + "maxLength": 20, + "minLength": 20, + "pattern": "^sn-[0-9a-z]{17}$" + }, + "ServiceNetworkIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((sn-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}))$" + }, + "ServiceNetworkName": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!servicenetwork-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "ServiceArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}$" + }, + "ServiceId": { + "type": "string", + "maxLength": 21, + "minLength": 21, + "pattern": "^svc-[0-9a-z]{17}$" + }, + "ServiceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((svc-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}))$" + }, + "ServiceName": { + "type": "string", + "maxLength": 40, + "minLength": 3, + "pattern": "^(?!svc-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "Status": { + "type": "string", + "enum": [ + "CREATE_IN_PROGRESS", + "ACTIVE", + "DELETE_IN_PROGRESS", + "CREATE_FAILED", + "DELETE_FAILED" + ] + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedAt", + "/properties/DnsEntry/DomainName", + "/properties/DnsEntry/HostedZoneId", + "/properties/Id", + "/properties/ServiceNetworkArn", + "/properties/ServiceNetworkId", + "/properties/ServiceNetworkName", + "/properties/ServiceArn", + "/properties/ServiceId", + "/properties/ServiceName", + "/properties/Status" + ], + "writeOnlyProperties": [ + "/properties/ServiceNetworkIdentifier", + "/properties/ServiceIdentifier" + ], + "createOnlyProperties": [ + "/properties/ServiceNetworkIdentifier", + "/properties/ServiceIdentifier" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ], + [ + "/properties/ServiceNetworkIdentifier", + "/properties/ServiceIdentifier" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:CreateServiceNetworkServiceAssociation", + "vpc-lattice:GetServiceNetworkServiceAssociation", + "vpc-lattice:TagResource", + "vpc-lattice:ListTagsForResource" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetServiceNetworkServiceAssociation", + "vpc-lattice:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource", + "vpc-lattice:GetServiceNetworkServiceAssociation", + "vpc-lattice:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteServiceNetworkServiceAssociation", + "vpc-lattice:GetServiceNetworkServiceAssociation" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListServiceNetworkServiceAssociations" + ], + "handlerSchema": { + "properties": { + "ServiceNetworkIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((sn-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}))$" + }, + "ServiceIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((svc-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}))$" + } + }, + "required": [] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/servicenetworkvpcassociation.json b/internal/aws/cfn/schemas/aws/vpclattice/servicenetworkvpcassociation.json new file mode 100644 index 00000000..957ecc28 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/servicenetworkvpcassociation.json @@ -0,0 +1,206 @@ +{ + "typeName": "AWS::VpcLattice::ServiceNetworkVpcAssociation", + "description": "Associates a VPC with a service network.", + "additionalProperties": false, + "definitions": { + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkvpcassociation/snva-[0-9a-z]{17}$" + }, + "CreatedAt": { + "type": "string" + }, + "SecurityGroupIds": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "items": { + "type": "string", + "maxLength": 200, + "minLength": 0, + "pattern": "^sg-(([0-9a-z]{8})|([0-9a-z]{17}))$" + } + }, + "Id": { + "type": "string", + "maxLength": 22, + "minLength": 22, + "pattern": "^snva-[0-9a-z]{17}$" + }, + "ServiceNetworkArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}$" + }, + "ServiceNetworkId": { + "type": "string", + "maxLength": 20, + "minLength": 20, + "pattern": "^sn-[0-9a-z]{17}$" + }, + "ServiceNetworkIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((sn-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}))$" + }, + "ServiceNetworkName": { + "type": "string", + "maxLength": 63, + "minLength": 3, + "pattern": "^(?!servicenetwork-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "Status": { + "type": "string", + "enum": [ + "CREATE_IN_PROGRESS", + "ACTIVE", + "UPDATE_IN_PROGRESS", + "DELETE_IN_PROGRESS", + "CREATE_FAILED", + "DELETE_FAILED" + ] + }, + "VpcId": { + "type": "string", + "maxLength": 2048, + "minLength": 5, + "pattern": "^vpc-(([0-9a-z]{8})|([0-9a-z]{17}))$" + }, + "VpcIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 5, + "pattern": "^vpc-(([0-9a-z]{8})|([0-9a-z]{17}))$" + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedAt", + "/properties/Id", + "/properties/ServiceNetworkArn", + "/properties/ServiceNetworkId", + "/properties/ServiceNetworkName", + "/properties/Status", + "/properties/VpcId" + ], + "writeOnlyProperties": [ + "/properties/ServiceNetworkIdentifier", + "/properties/VpcIdentifier" + ], + "createOnlyProperties": [ + "/properties/ServiceNetworkIdentifier", + "/properties/VpcIdentifier" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ], + [ + "/properties/ServiceNetworkIdentifier", + "/properties/VpcIdentifier" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:CreateServiceNetworkVpcAssociation", + "vpc-lattice:GetServiceNetworkVpcAssociation", + "vpc-lattice:ListServiceNetworkVpcAssociations", + "vpc-lattice:ListTagsForResource", + "ec2:DescribeSecurityGroups", + "ec2:DescribeVpcs", + "vpc-lattice:TagResource" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetServiceNetworkVpcAssociation", + "vpc-lattice:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource", + "vpc-lattice:GetServiceNetworkVpcAssociation", + "vpc-lattice:UpdateServiceNetworkVpcAssociation", + "ec2:DescribeSecurityGroups", + "vpc-lattice:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteServiceNetworkVpcAssociation", + "vpc-lattice:GetServiceNetworkVpcAssociation" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListServiceNetworkVpcAssociations" + ], + "handlerSchema": { + "properties": { + "ServiceNetworkIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^((sn-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}))$" + }, + "VpcIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 5, + "pattern": "^vpc-(([0-9a-z]{8})|([0-9a-z]{17}))$" + } + }, + "required": [] + } + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/vpclattice/targetgroup.json b/internal/aws/cfn/schemas/aws/vpclattice/targetgroup.json new file mode 100644 index 00000000..18698810 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/vpclattice/targetgroup.json @@ -0,0 +1,337 @@ +{ + "typeName": "AWS::VpcLattice::TargetGroup", + "description": "A target group is a collection of targets, or compute resources, that run your application or service. A target group can only be used by a single service.", + "additionalProperties": false, + "definitions": { + "HealthCheckConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Enabled": { + "type": "boolean" + }, + "Protocol": { + "type": "string", + "enum": [ + "HTTP", + "HTTPS" + ] + }, + "ProtocolVersion": { + "type": "string", + "enum": [ + "HTTP1", + "HTTP2", + "GRPC" + ] + }, + "Port": { + "type": "integer", + "maximum": 65535, + "minimum": 1 + }, + "Path": { + "type": "string", + "maxLength": 2048, + "minLength": 0, + "pattern": "(^/[a-zA-Z0-9@:%_+.~#?&/=-]*$|(^$))" + }, + "HealthCheckIntervalSeconds": { + "type": "integer", + "maximum": 300, + "minimum": 5 + }, + "HealthCheckTimeoutSeconds": { + "type": "integer", + "maximum": 120, + "minimum": 1 + }, + "HealthyThresholdCount": { + "type": "integer", + "maximum": 10, + "minimum": 2 + }, + "UnhealthyThresholdCount": { + "type": "integer", + "maximum": 10, + "minimum": 2 + }, + "Matcher": { + "$ref": "#/definitions/Matcher" + } + } + }, + "Matcher": { + "type": "object", + "additionalProperties": false, + "properties": { + "HttpCode": { + "type": "string", + "minLength": 3, + "maxLength": 2000, + "pattern": "^[0-9-,]+$" + } + }, + "required": [ + "HttpCode" + ] + }, + "TargetGroupConfig": { + "type": "object", + "additionalProperties": false, + "properties": { + "Port": { + "type": "integer", + "maximum": 65535, + "minimum": 1 + }, + "Protocol": { + "type": "string", + "enum": [ + "HTTP", + "HTTPS" + ] + }, + "ProtocolVersion": { + "type": "string", + "default": "HTTP1", + "enum": [ + "HTTP1", + "HTTP2", + "GRPC" + ] + }, + "IpAddressType": { + "type": "string", + "default": "IPV4", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "LambdaEventStructureVersion": { + "type": "string", + "enum": [ + "V1", + "V2" + ] + }, + "VpcIdentifier": { + "type": "string", + "maxLength": 2048, + "minLength": 5, + "pattern": "^vpc-(([0-9a-z]{8})|([0-9a-z]{17}))$" + }, + "HealthCheck": { + "$ref": "#/definitions/HealthCheckConfig" + } + }, + "required": [] + }, + "Target": { + "type": "object", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Port": { + "type": "integer", + "maximum": 65535, + "minimum": 1 + } + }, + "required": [ + "Id" + ] + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 1, + "maxLength": 256 + } + }, + "required": [ + "Key", + "Value" + ] + } + }, + "properties": { + "Arn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:targetgroup/tg-[0-9a-z]{17}$" + }, + "Config": { + "$ref": "#/definitions/TargetGroupConfig" + }, + "CreatedAt": { + "type": "string" + }, + "Id": { + "type": "string", + "maxLength": 20, + "minLength": 20, + "pattern": "^tg-[0-9a-z]{17}$" + }, + "LastUpdatedAt": { + "type": "string" + }, + "Name": { + "type": "string", + "maxLength": 128, + "minLength": 3, + "pattern": "^(?!tg-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$" + }, + "Status": { + "type": "string", + "enum": [ + "CREATE_IN_PROGRESS", + "ACTIVE", + "DELETE_IN_PROGRESS", + "CREATE_FAILED", + "DELETE_FAILED" + ] + }, + "Type": { + "type": "string", + "enum": [ + "IP", + "LAMBDA", + "INSTANCE", + "ALB" + ] + }, + "Targets": { + "type": "array", + "insertionOrder": false, + "minItems": 0, + "maxItems": 100, + "default": [], + "items": { + "$ref": "#/definitions/Target" + } + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "uniqueItems": true, + "minItems": 0, + "maxItems": 50, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "Type" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/CreatedAt", + "/properties/Id", + "/properties/LastUpdatedAt", + "/properties/Status" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Type", + "/properties/Config/Port", + "/properties/Config/IpAddressType", + "/properties/Config/Protocol", + "/properties/Config/ProtocolVersion", + "/properties/Config/VpcIdentifier", + "/properties/Config/LambdaEventStructureVersion" + ], + "primaryIdentifier": [ + "/properties/Arn" + ], + "additionalIdentifiers": [ + [ + "/properties/Id" + ], + [ + "/properties/Name" + ] + ], + "handlers": { + "create": { + "permissions": [ + "vpc-lattice:CreateTargetGroup", + "vpc-lattice:GetTargetGroup", + "vpc-lattice:RegisterTargets", + "vpc-lattice:ListTargets", + "vpc-lattice:ListTagsForResource", + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource", + "ec2:DescribeVpcs", + "ec2:DescribeInstances", + "ec2:DescribeSubnets", + "ec2:DescribeAvailabilityZoneMappings", + "lambda:Invoke", + "lambda:AddPermission", + "elasticloadbalancing:DescribeLoadBalancers", + "iam:CreateServiceLinkedRole" + ] + }, + "read": { + "permissions": [ + "vpc-lattice:GetTargetGroup", + "vpc-lattice:ListTargets", + "vpc-lattice:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "vpc-lattice:UpdateTargetGroup", + "vpc-lattice:GetTargetGroup", + "vpc-lattice:ListTargets", + "vpc-lattice:RegisterTargets", + "vpc-lattice:DeregisterTargets", + "ec2:DescribeVpcs", + "ec2:DescribeInstances", + "ec2:DescribeSubnets", + "ec2:DescribeAvailabilityZoneMappings", + "elasticloadbalancing:DescribeLoadBalancers", + "lambda:Invoke", + "lambda:RemovePermission", + "lambda:AddPermission", + "vpc-lattice:TagResource", + "vpc-lattice:UntagResource", + "vpc-lattice:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "vpc-lattice:DeleteTargetGroup", + "vpc-lattice:GetTargetGroup", + "vpc-lattice:DeregisterTargets", + "vpc-lattice:ListTargets", + "lambda:RemovePermission" + ] + }, + "list": { + "permissions": [ + "vpc-lattice:ListTargetGroups" + ] + } + }, + "tagging": { + "taggable": true, + "tagOnCreate": true, + "tagUpdatable": true, + "cloudFormationSystemTags": true, + "tagProperty": "/properties/Tags" + } +} diff --git a/internal/aws/cfn/schemas/aws/waf/bytematchset.json b/internal/aws/cfn/schemas/aws/waf/bytematchset.json new file mode 100644 index 00000000..4225fba3 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/waf/bytematchset.json @@ -0,0 +1,75 @@ +{ + "typeName": "AWS::WAF::ByteMatchSet", + "description": "Resource Type definition for AWS::WAF::ByteMatchSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ByteMatchTuples": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ByteMatchTuple" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "ByteMatchTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "PositionalConstraint": { + "type": "string" + }, + "TargetString": { + "type": "string" + }, + "TargetStringBase64": { + "type": "string" + }, + "TextTransformation": { + "type": "string" + } + }, + "required": [ + "PositionalConstraint", + "TextTransformation", + "FieldToMatch" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Data": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/waf/ipset.json b/internal/aws/cfn/schemas/aws/waf/ipset.json new file mode 100644 index 00000000..fb01b823 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/waf/ipset.json @@ -0,0 +1,50 @@ +{ + "typeName": "AWS::WAF::IPSet", + "description": "Resource Type definition for AWS::WAF::IPSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "IPSetDescriptors": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/IPSetDescriptor" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "IPSetDescriptor": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/waf/rule.json b/internal/aws/cfn/schemas/aws/waf/rule.json new file mode 100644 index 00000000..f5064c3c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/waf/rule.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::WAF::Rule", + "description": "Resource Type definition for AWS::WAF::Rule", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "MetricName": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Predicates": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Predicate" + } + } + }, + "definitions": { + "Predicate": { + "type": "object", + "additionalProperties": false, + "properties": { + "DataId": { + "type": "string" + }, + "Negated": { + "type": "boolean" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Negated", + "Type", + "DataId" + ] + } + }, + "required": [ + "MetricName", + "Name" + ], + "createOnlyProperties": [ + "/properties/MetricName", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/waf/sizeconstraintset.json b/internal/aws/cfn/schemas/aws/waf/sizeconstraintset.json new file mode 100644 index 00000000..e75ba42a --- /dev/null +++ b/internal/aws/cfn/schemas/aws/waf/sizeconstraintset.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::WAF::SizeConstraintSet", + "description": "Resource Type definition for AWS::WAF::SizeConstraintSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "SizeConstraints": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SizeConstraint" + } + } + }, + "definitions": { + "SizeConstraint": { + "type": "object", + "additionalProperties": false, + "properties": { + "ComparisonOperator": { + "type": "string" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "Size": { + "type": "integer" + }, + "TextTransformation": { + "type": "string" + } + }, + "required": [ + "ComparisonOperator", + "TextTransformation", + "FieldToMatch", + "Size" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Data": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "SizeConstraints", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/waf/sqlinjectionmatchset.json b/internal/aws/cfn/schemas/aws/waf/sqlinjectionmatchset.json new file mode 100644 index 00000000..fc18d094 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/waf/sqlinjectionmatchset.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::WAF::SqlInjectionMatchSet", + "description": "Resource Type definition for AWS::WAF::SqlInjectionMatchSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "SqlInjectionMatchTuples": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/SqlInjectionMatchTuple" + } + } + }, + "definitions": { + "SqlInjectionMatchTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformation": { + "type": "string" + } + }, + "required": [ + "TextTransformation", + "FieldToMatch" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Data": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/waf/webacl.json b/internal/aws/cfn/schemas/aws/waf/webacl.json new file mode 100644 index 00000000..985f1953 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/waf/webacl.json @@ -0,0 +1,74 @@ +{ + "typeName": "AWS::WAF::WebACL", + "description": "Resource Type definition for AWS::WAF::WebACL", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "DefaultAction": { + "$ref": "#/definitions/WafAction" + }, + "MetricName": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Rules": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/ActivatedRule" + } + } + }, + "definitions": { + "ActivatedRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/WafAction" + }, + "Priority": { + "type": "integer" + }, + "RuleId": { + "type": "string" + } + }, + "required": [ + "Priority", + "RuleId" + ] + }, + "WafAction": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "DefaultAction", + "MetricName", + "Name" + ], + "createOnlyProperties": [ + "/properties/MetricName", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/waf/xssmatchset.json b/internal/aws/cfn/schemas/aws/waf/xssmatchset.json new file mode 100644 index 00000000..a1ca9a37 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/waf/xssmatchset.json @@ -0,0 +1,66 @@ +{ + "typeName": "AWS::WAF::XssMatchSet", + "description": "Resource Type definition for AWS::WAF::XssMatchSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "XssMatchTuples": { + "type": "array", + "uniqueItems": true, + "items": { + "$ref": "#/definitions/XssMatchTuple" + } + } + }, + "definitions": { + "XssMatchTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformation": { + "type": "string" + } + }, + "required": [ + "TextTransformation", + "FieldToMatch" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Data": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "Name", + "XssMatchTuples" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/bytematchset.json b/internal/aws/cfn/schemas/aws/wafregional/bytematchset.json new file mode 100644 index 00000000..208f6819 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/bytematchset.json @@ -0,0 +1,75 @@ +{ + "typeName": "AWS::WAFRegional::ByteMatchSet", + "description": "Resource Type definition for AWS::WAFRegional::ByteMatchSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ByteMatchTuples": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/ByteMatchTuple" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "ByteMatchTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "TargetString": { + "type": "string" + }, + "TargetStringBase64": { + "type": "string" + }, + "PositionalConstraint": { + "type": "string" + }, + "TextTransformation": { + "type": "string" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + } + }, + "required": [ + "PositionalConstraint", + "TextTransformation", + "FieldToMatch" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Data": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/geomatchset.json b/internal/aws/cfn/schemas/aws/wafregional/geomatchset.json new file mode 100644 index 00000000..0ef4338b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/geomatchset.json @@ -0,0 +1,50 @@ +{ + "typeName": "AWS::WAFRegional::GeoMatchSet", + "description": "Resource Type definition for AWS::WAFRegional::GeoMatchSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "GeoMatchConstraints": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/GeoMatchConstraint" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "GeoMatchConstraint": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/ipset.json b/internal/aws/cfn/schemas/aws/wafregional/ipset.json new file mode 100644 index 00000000..a50d233c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/ipset.json @@ -0,0 +1,50 @@ +{ + "typeName": "AWS::WAFRegional::IPSet", + "description": "Resource Type definition for AWS::WAFRegional::IPSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "IPSetDescriptors": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/IPSetDescriptor" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "IPSetDescriptor": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/ratebasedrule.json b/internal/aws/cfn/schemas/aws/wafregional/ratebasedrule.json new file mode 100644 index 00000000..37690324 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/ratebasedrule.json @@ -0,0 +1,68 @@ +{ + "typeName": "AWS::WAFRegional::RateBasedRule", + "description": "Resource Type definition for AWS::WAFRegional::RateBasedRule", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "MetricName": { + "type": "string" + }, + "RateLimit": { + "type": "integer" + }, + "MatchPredicates": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Predicate" + } + }, + "RateKey": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Predicate": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "DataId": { + "type": "string" + }, + "Negated": { + "type": "boolean" + } + }, + "required": [ + "Type", + "Negated", + "DataId" + ] + } + }, + "required": [ + "MetricName", + "RateLimit", + "RateKey", + "Name" + ], + "createOnlyProperties": [ + "/properties/MetricName", + "/properties/RateKey", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/regexpatternset.json b/internal/aws/cfn/schemas/aws/wafregional/regexpatternset.json new file mode 100644 index 00000000..58f27eb4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/regexpatternset.json @@ -0,0 +1,33 @@ +{ + "typeName": "AWS::WAFRegional::RegexPatternSet", + "description": "Resource Type definition for AWS::WAFRegional::RegexPatternSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "RegexPatternStrings": { + "type": "array", + "uniqueItems": false, + "items": { + "type": "string" + } + }, + "Name": { + "type": "string" + } + }, + "required": [ + "RegexPatternStrings", + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/rule.json b/internal/aws/cfn/schemas/aws/wafregional/rule.json new file mode 100644 index 00000000..e50db9db --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/rule.json @@ -0,0 +1,59 @@ +{ + "typeName": "AWS::WAFRegional::Rule", + "description": "Resource Type definition for AWS::WAFRegional::Rule", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "MetricName": { + "type": "string" + }, + "Predicates": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Predicate" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Predicate": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "DataId": { + "type": "string" + }, + "Negated": { + "type": "boolean" + } + }, + "required": [ + "Type", + "Negated", + "DataId" + ] + } + }, + "required": [ + "MetricName", + "Name" + ], + "createOnlyProperties": [ + "/properties/MetricName", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/sizeconstraintset.json b/internal/aws/cfn/schemas/aws/wafregional/sizeconstraintset.json new file mode 100644 index 00000000..2f899894 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/sizeconstraintset.json @@ -0,0 +1,73 @@ +{ + "typeName": "AWS::WAFRegional::SizeConstraintSet", + "description": "Resource Type definition for AWS::WAFRegional::SizeConstraintSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SizeConstraints": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SizeConstraint" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "SizeConstraint": { + "type": "object", + "additionalProperties": false, + "properties": { + "ComparisonOperator": { + "type": "string" + }, + "Size": { + "type": "integer" + }, + "TextTransformation": { + "type": "string" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + } + }, + "required": [ + "ComparisonOperator", + "TextTransformation", + "Size", + "FieldToMatch" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Data": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/sqlinjectionmatchset.json b/internal/aws/cfn/schemas/aws/wafregional/sqlinjectionmatchset.json new file mode 100644 index 00000000..3f317840 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/sqlinjectionmatchset.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::WAFRegional::SqlInjectionMatchSet", + "description": "Resource Type definition for AWS::WAFRegional::SqlInjectionMatchSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "SqlInjectionMatchTuples": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/SqlInjectionMatchTuple" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "SqlInjectionMatchTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "TextTransformation": { + "type": "string" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + } + }, + "required": [ + "TextTransformation", + "FieldToMatch" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Data": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/webacl.json b/internal/aws/cfn/schemas/aws/wafregional/webacl.json new file mode 100644 index 00000000..1a76561b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/webacl.json @@ -0,0 +1,75 @@ +{ + "typeName": "AWS::WAFRegional::WebACL", + "description": "Resource Type definition for AWS::WAFRegional::WebACL", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "MetricName": { + "type": "string" + }, + "DefaultAction": { + "$ref": "#/definitions/Action" + }, + "Rules": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Rule" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "Action": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + } + }, + "required": [ + "Type" + ] + }, + "Rule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "$ref": "#/definitions/Action" + }, + "Priority": { + "type": "integer" + }, + "RuleId": { + "type": "string" + } + }, + "required": [ + "Action", + "Priority", + "RuleId" + ] + } + }, + "required": [ + "DefaultAction", + "MetricName", + "Name" + ], + "createOnlyProperties": [ + "/properties/MetricName", + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/webaclassociation.json b/internal/aws/cfn/schemas/aws/wafregional/webaclassociation.json new file mode 100644 index 00000000..dac9d3c4 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/webaclassociation.json @@ -0,0 +1,30 @@ +{ + "typeName": "AWS::WAFRegional::WebACLAssociation", + "description": "Resource Type definition for AWS::WAFRegional::WebACLAssociation", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "ResourceArn": { + "type": "string" + }, + "WebACLId": { + "type": "string" + } + }, + "required": [ + "ResourceArn", + "WebACLId" + ], + "createOnlyProperties": [ + "/properties/ResourceArn", + "/properties/WebACLId" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafregional/xssmatchset.json b/internal/aws/cfn/schemas/aws/wafregional/xssmatchset.json new file mode 100644 index 00000000..67b5268c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafregional/xssmatchset.json @@ -0,0 +1,65 @@ +{ + "typeName": "AWS::WAFRegional::XssMatchSet", + "description": "Resource Type definition for AWS::WAFRegional::XssMatchSet", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "XssMatchTuples": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/XssMatchTuple" + } + }, + "Name": { + "type": "string" + } + }, + "definitions": { + "XssMatchTuple": { + "type": "object", + "additionalProperties": false, + "properties": { + "TextTransformation": { + "type": "string" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + } + }, + "required": [ + "TextTransformation", + "FieldToMatch" + ] + }, + "FieldToMatch": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "type": "string" + }, + "Data": { + "type": "string" + } + }, + "required": [ + "Type" + ] + } + }, + "required": [ + "Name" + ], + "createOnlyProperties": [ + "/properties/Name" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/wafv2/ipset.json b/internal/aws/cfn/schemas/aws/wafv2/ipset.json new file mode 100644 index 00000000..516a72f8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafv2/ipset.json @@ -0,0 +1,166 @@ +{ + "typeName": "AWS::WAFv2::IPSet", + "description": "Contains a list of IP addresses. This can be either IPV4 or IPV6. The list will be mutually", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "definitions": { + "EntityName": { + "description": "Name of the IPSet.", + "type": "string", + "pattern": "^[0-9A-Za-z_-]{1,128}$" + }, + "EntityDescription": { + "description": "Description of the entity.", + "type": "string", + "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$" + }, + "EntityId": { + "description": "Id of the IPSet", + "type": "string", + "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$" + }, + "Scope": { + "description": "Use CLOUDFRONT for CloudFront IPSet, use REGIONAL for Application Load Balancer and API Gateway.", + "type": "string", + "enum": [ + "CLOUDFRONT", + "REGIONAL" + ] + }, + "IPAddressVersion": { + "description": "Type of addresses in the IPSet, use IPV4 for IPV4 IP addresses, IPV6 for IPV6 address.", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "IPAddress": { + "description": "IP address", + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "ResourceArn": { + "description": "ARN of the WAF entity.", + "type": "string" + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "Description": { + "$ref": "#/definitions/EntityDescription" + }, + "Name": { + "$ref": "#/definitions/EntityName" + }, + "Id": { + "$ref": "#/definitions/EntityId" + }, + "Scope": { + "$ref": "#/definitions/Scope" + }, + "IPAddressVersion": { + "$ref": "#/definitions/IPAddressVersion" + }, + "Addresses": { + "description": "List of IPAddresses.", + "type": "array", + "items": { + "$ref": "#/definitions/IPAddress" + } + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1 + } + }, + "required": [ + "Addresses", + "IPAddressVersion", + "Scope" + ], + "primaryIdentifier": [ + "/properties/Name", + "/properties/Id", + "/properties/Scope" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Scope" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "additionalProperties": false, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "wafv2:CreateIPSet", + "wafv2:GetIPSet", + "wafv2:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "wafv2:DeleteIPSet", + "wafv2:GetIPSet" + ] + }, + "read": { + "permissions": [ + "wafv2:GetIPSet", + "wafv2:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "wafv2:UpdateIPSet", + "wafv2:GetIPSet", + "wafv2:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "wafv2:listIPSets" + ], + "handlerSchema": { + "properties": { + "Scope": { + "$ref": "resource-schema.json#/properties/Scope" + } + }, + "required": [ + "Scope" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wafv2/loggingconfiguration.json b/internal/aws/cfn/schemas/aws/wafv2/loggingconfiguration.json new file mode 100644 index 00000000..876b1879 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafv2/loggingconfiguration.json @@ -0,0 +1,238 @@ +{ + "typeName": "AWS::WAFv2::LoggingConfiguration", + "description": "A WAFv2 Logging Configuration Resource Provider", + "sourceUrl": "https://github.com/advaj/aws-cloudformation-resource-providers-wafv2.git", + "definitions": { + "Filter": { + "type": "object", + "properties": { + "Behavior": { + "description": "How to handle logs that satisfy the filter's conditions and requirement. ", + "type": "string", + "enum": [ + "KEEP", + "DROP" + ] + }, + "Conditions": { + "description": "Match conditions for the filter.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/Condition" + } + }, + "Requirement": { + "description": "Logic to apply to the filtering conditions. You can specify that, in order to satisfy the filter, a log must match all conditions or must match at least one condition.", + "type": "string", + "enum": [ + "MEETS_ALL", + "MEETS_ANY" + ] + } + }, + "additionalProperties": false, + "required": [ + "Behavior", + "Conditions", + "Requirement" + ] + }, + "Condition": { + "type": "object", + "additionalProperties": false, + "properties": { + "ActionCondition": { + "description": "A single action condition.", + "type": "object", + "additionalProperties": false, + "properties": { + "Action": { + "description": "Logic to apply to the filtering conditions. You can specify that, in order to satisfy the filter, a log must match all conditions or must match at least one condition.", + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "COUNT", + "CAPTCHA", + "CHALLENGE", + "EXCLUDED_AS_COUNT" + ] + } + }, + "required": [ + "Action" + ] + }, + "LabelNameCondition": { + "description": "A single label name condition.", + "type": "object", + "additionalProperties": false, + "properties": { + "LabelName": { + "description": "The label name that a log record must contain in order to meet the condition. This must be a fully qualified label name. Fully qualified labels have a prefix, optional namespaces, and label name. The prefix identifies the rule group or web ACL context of the rule that added the label. ", + "type": "string" + } + }, + "required": [ + "LabelName" + ] + } + } + }, + "FieldToMatch": { + "description": "A key-value pair to associate with a resource.", + "type": "object", + "additionalProperties": false, + "properties": { + "Method": { + "description": "Inspect the HTTP method. The method indicates the type of operation that the request is asking the origin to perform. ", + "type": "object" + }, + "QueryString": { + "type": "object", + "description": "Inspect the query string. This is the part of a URL that appears after a ? character, if any. " + }, + "SingleHeader": { + "description": "Inspect a single header. Provide the name of the header to inspect, for example, User-Agent or Referer. This setting isn't case sensitive.", + "type": "object", + "additionalProperties": false, + "properties": { + "Name": { + "description": "The name of the query header to inspect.", + "type": "string" + } + }, + "required": [ + "Name" + ] + }, + "UriPath": { + "type": "object", + "description": "Inspect the request URI path. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg. " + } + } + } + }, + "properties": { + "ResourceArn": { + "description": "The Amazon Resource Name (ARN) of the web ACL that you want to associate with LogDestinationConfigs.", + "type": "string" + }, + "LogDestinationConfigs": { + "description": "The Amazon Resource Names (ARNs) of the logging destinations that you want to associate with the web ACL.", + "type": "array", + "items": { + "type": "string" + } + }, + "RedactedFields": { + "description": "The parts of the request that you want to keep out of the logs. For example, if you redact the HEADER field, the HEADER field in the firehose will be xxx.", + "type": "array", + "insertionOrder": false, + "items": { + "$ref": "#/definitions/FieldToMatch" + } + }, + "ManagedByFirewallManager": { + "description": "Indicates whether the logging configuration was created by AWS Firewall Manager, as part of an AWS WAF policy configuration. If true, only Firewall Manager can modify or delete the configuration.", + "type": "boolean" + }, + "LoggingFilter": { + "description": "Filtering that specifies which web requests are kept in the logs and which are dropped. You can filter on the rule action and on the web request labels that were applied by matching rules during web ACL evaluation.", + "type": "object", + "additionalProperties": false, + "properties": { + "DefaultBehavior": { + "description": "Default handling for logs that don't match any of the specified filtering conditions.", + "type": "string", + "enum": [ + "KEEP", + "DROP" + ] + }, + "Filters": { + "description": "The filters that you want to apply to the logs.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/Filter" + } + } + }, + "required": [ + "DefaultBehavior", + "Filters" + ] + } + }, + "additionalProperties": false, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "required": [ + "ResourceArn", + "LogDestinationConfigs" + ], + "createOnlyProperties": [ + "/properties/ResourceArn" + ], + "readOnlyProperties": [ + "/properties/ManagedByFirewallManager" + ], + "primaryIdentifier": [ + "/properties/ResourceArn" + ], + "handlers": { + "create": { + "permissions": [ + "wafv2:PutLoggingConfiguration", + "wafv2:GetLoggingConfiguration", + "firehose:ListDeliveryStreams", + "iam:CreateServiceLinkedRole", + "iam:DescribeOrganization", + "logs:CreateLogDelivery", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups" + ] + }, + "read": { + "permissions": [ + "wafv2:GetLoggingConfiguration" + ] + }, + "update": { + "permissions": [ + "wafv2:PutLoggingConfiguration", + "wafv2:GetLoggingConfiguration", + "firehose:ListDeliveryStreams", + "iam:CreateServiceLinkedRole", + "iam:DescribeOrganization", + "logs:CreateLogDelivery", + "s3:PutBucketPolicy", + "s3:GetBucketPolicy", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups" + ] + }, + "delete": { + "permissions": [ + "wafv2:DeleteLoggingConfiguration", + "wafv2:GetLoggingConfiguration", + "logs:DeleteLogDelivery" + ] + }, + "list": { + "permissions": [ + "wafv2:ListLoggingConfigurations" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wafv2/regexpatternset.json b/internal/aws/cfn/schemas/aws/wafv2/regexpatternset.json new file mode 100644 index 00000000..9d7c4649 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafv2/regexpatternset.json @@ -0,0 +1,132 @@ +{ + "typeName": "AWS::WAFv2::RegexPatternSet", + "description": "Contains a list of Regular expressions based on the provided inputs. RegexPatternSet can be used with other WAF entities with RegexPatternSetReferenceStatement to perform other actions .", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "description": "ARN of the WAF entity.", + "type": "string" + }, + "Description": { + "description": "Description of the entity.", + "type": "string", + "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$" + }, + "Name": { + "description": "Name of the RegexPatternSet.", + "type": "string", + "pattern": "^[0-9A-Za-z_-]{1,128}$" + }, + "Id": { + "description": "Id of the RegexPatternSet", + "type": "string", + "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$" + }, + "RegularExpressionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "Scope": { + "description": "Use CLOUDFRONT for CloudFront RegexPatternSet, use REGIONAL for Application Load Balancer and API Gateway.", + "type": "string", + "enum": [ + "CLOUDFRONT", + "REGIONAL" + ] + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1 + } + }, + "required": [ + "Scope", + "RegularExpressionList" + ], + "primaryIdentifier": [ + "/properties/Name", + "/properties/Id", + "/properties/Scope" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Scope" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id" + ], + "additionalProperties": false, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "wafv2:CreateRegexPatternSet", + "wafv2:GetRegexPatternSet", + "wafv2:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "wafv2:DeleteRegexPatternSet", + "wafv2:GetRegexPatternSet" + ] + }, + "read": { + "permissions": [ + "wafv2:GetRegexPatternSet", + "wafv2:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "wafv2:UpdateRegexPatternSet", + "wafv2:GetRegexPatternSet", + "wafv2:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "wafv2:listRegexPatternSets" + ], + "handlerSchema": { + "properties": { + "Scope": { + "$ref": "resource-schema.json#/properties/Scope" + } + }, + "required": [ + "Scope" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wafv2/rulegroup.json b/internal/aws/cfn/schemas/aws/wafv2/rulegroup.json new file mode 100644 index 00000000..99c90ff9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafv2/rulegroup.json @@ -0,0 +1,1464 @@ +{ + "typeName": "AWS::WAFv2::RuleGroup", + "description": "Contains the Rules that identify the requests that you want to allow, block, or count. In a RuleGroup, you also specify a default action (ALLOW or BLOCK), and the action for each Rule that you add to a RuleGroup, for example, block requests from specified IP addresses or block requests from specified referrers. You also associate the RuleGroup with a CloudFront distribution to identify the requests that you want AWS WAF to filter. If you add more than one Rule to a RuleGroup, a request needs to match only one of the specifications to be allowed, blocked, or counted.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "definitions": { + "AndStatement": { + "type": "object", + "properties": { + "Statements": { + "type": "array", + "items": { + "$ref": "#/definitions/Statement" + } + } + }, + "required": [ + "Statements" + ], + "additionalProperties": false + }, + "ByteMatchStatement": { + "description": "Byte Match statement.", + "type": "object", + "properties": { + "SearchString": { + "$ref": "#/definitions/SearchString" + }, + "SearchStringBase64": { + "$ref": "#/definitions/SearchStringBase64" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + }, + "PositionalConstraint": { + "$ref": "#/definitions/PositionalConstraint" + } + }, + "required": [ + "FieldToMatch", + "PositionalConstraint", + "TextTransformations" + ], + "additionalProperties": false + }, + "EntityDescription": { + "description": "Description of the entity.", + "type": "string", + "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$" + }, + "EntityName": { + "description": "Name of the RuleGroup.", + "type": "string", + "pattern": "^[0-9A-Za-z_-]{1,128}$" + }, + "FieldToMatch": { + "description": "Field of the request to match.", + "type": "object", + "properties": { + "SingleHeader": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "SingleQueryArgument": { + "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "AllQueryArguments": { + "description": "All query arguments of a web request.", + "type": "object" + }, + "UriPath": { + "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.", + "type": "object" + }, + "QueryString": { + "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.", + "type": "object" + }, + "Body": { + "$ref": "#/definitions/Body" + }, + "Method": { + "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.", + "type": "object" + }, + "JsonBody": { + "$ref": "#/definitions/JsonBody" + }, + "Headers": { + "$ref": "#/definitions/Headers" + }, + "Cookies": { + "$ref": "#/definitions/Cookies" + }, + "JA3Fingerprint": { + "$ref": "#/definitions/JA3Fingerprint" + } + }, + "additionalProperties": false + }, + "JsonBody": { + "description": "Inspect the request body as JSON. The request body immediately follows the request headers.", + "type": "object", + "properties": { + "MatchPattern": { + "$ref": "#/definitions/JsonMatchPattern" + }, + "MatchScope": { + "$ref": "#/definitions/JsonMatchScope" + }, + "InvalidFallbackBehavior": { + "$ref": "#/definitions/BodyParsingFallbackBehavior" + }, + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "required": [ + "MatchPattern", + "MatchScope" + ], + "additionalProperties": false + }, + "BodyParsingFallbackBehavior": { + "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.", + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH", + "EVALUATE_AS_STRING" + ] + }, + "JsonMatchScope": { + "description": "The parts of the JSON to match against using the MatchPattern.", + "type": "string", + "enum": [ + "ALL", + "KEY", + "VALUE" + ] + }, + "JsonMatchPattern": { + "description": "The pattern to look for in the JSON body.", + "type": "object", + "properties": { + "All": { + "description": "Inspect all parts of the web request's JSON body.", + "type": "object" + }, + "IncludedPaths": { + "type": "array", + "items": { + "$ref": "#/definitions/JsonPointerPath" + } + } + }, + "additionalProperties": false + }, + "JsonPointerPath": { + "description": "JSON pointer path in the web request's JSON body", + "type": "string", + "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$" + }, + "GeoMatchStatement": { + "type": "object", + "properties": { + "CountryCodes": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2 + } + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" + } + }, + "additionalProperties": false + }, + "EntityId": { + "description": "Id of the RuleGroup", + "type": "string", + "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$" + }, + "IPSetReferenceStatement": { + "type": "object", + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "IPSetForwardedIPConfig": { + "$ref": "#/definitions/IPSetForwardedIPConfiguration" + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "NotStatement": { + "type": "object", + "properties": { + "Statement": { + "$ref": "#/definitions/Statement" + } + }, + "required": [ + "Statement" + ], + "additionalProperties": false + }, + "OrStatement": { + "type": "object", + "properties": { + "Statements": { + "type": "array", + "items": { + "$ref": "#/definitions/Statement" + } + } + }, + "required": [ + "Statements" + ], + "additionalProperties": false + }, + "PositionalConstraint": { + "description": "Position of the evaluation in the FieldToMatch of request.", + "type": "string", + "enum": [ + "EXACTLY", + "STARTS_WITH", + "ENDS_WITH", + "CONTAINS", + "CONTAINS_WORD" + ] + }, + "RateBasedStatement": { + "type": "object", + "properties": { + "Limit": { + "$ref": "#/definitions/RateLimit" + }, + "EvaluationWindowSec": { + "$ref": "#/definitions/EvaluationWindowSec" + }, + "AggregateKeyType": { + "type": "string", + "enum": [ + "IP", + "FORWARDED_IP", + "CONSTANT", + "CUSTOM_KEYS" + ] + }, + "CustomKeys": { + "description": "Specifies the aggregate keys to use in a rate-base rule.", + "type": "array", + "items": { + "$ref": "#/definitions/RateBasedStatementCustomKey" + }, + "maxItems": 5 + }, + "ScopeDownStatement": { + "$ref": "#/definitions/Statement" + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" + } + }, + "required": [ + "Limit", + "AggregateKeyType" + ], + "additionalProperties": false + }, + "RateBasedStatementCustomKey": { + "description": "Specifies a single custom aggregate key for a rate-base rule.", + "type": "object", + "properties": { + "Cookie": { + "$ref": "#/definitions/RateLimitCookie" + }, + "ForwardedIP": { + "$ref": "#/definitions/RateLimitForwardedIP" + }, + "Header": { + "$ref": "#/definitions/RateLimitHeader" + }, + "HTTPMethod": { + "$ref": "#/definitions/RateLimitHTTPMethod" + }, + "IP": { + "$ref": "#/definitions/RateLimitIP" + }, + "LabelNamespace": { + "$ref": "#/definitions/RateLimitLabelNamespace" + }, + "QueryArgument": { + "$ref": "#/definitions/RateLimitQueryArgument" + }, + "QueryString": { + "$ref": "#/definitions/RateLimitQueryString" + }, + "UriPath": { + "$ref": "#/definitions/RateLimitUriPath" + } + }, + "additionalProperties": false + }, + "RateLimitCookie": { + "description": "Specifies a cookie as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the cookie to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Name", + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitForwardedIP": { + "description": "Specifies the first IP address in an HTTP header as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitHeader": { + "description": "Specifies a header as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the header to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Name", + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitHTTPMethod": { + "description": "Specifies the request's HTTP method as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitIP": { + "description": "Specifies the IP address in the web request as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitLabelNamespace": { + "description": "Specifies a label namespace to use as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Namespace": { + "description": "The namespace to use for aggregation.", + "type": "string", + "pattern": "^[0-9A-Za-z_:-]{1,1024}$" + } + }, + "required": [ + "Namespace" + ], + "additionalProperties": false + }, + "RateLimitQueryArgument": { + "description": "Specifies a query argument in the request as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the query argument to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Name", + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitQueryString": { + "description": "Specifies the request's query string as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitUriPath": { + "description": "Specifies the request's URI Path as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimit": { + "type": "integer", + "minimum": 100, + "maximum": 2000000000 + }, + "EvaluationWindowSec": { + "type": "integer", + "enum": [ + 60, + 120, + 300, + 600 + ] + }, + "RegexPatternSetReferenceStatement": { + "type": "object", + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Arn", + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "ResourceArn": { + "description": "ARN of the WAF entity.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "ForwardedIPConfiguration": { + "type": "object", + "properties": { + "HeaderName": { + "type": "string", + "pattern": "^[a-zA-Z0-9-]+{1,255}$" + }, + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + } + }, + "required": [ + "HeaderName", + "FallbackBehavior" + ], + "additionalProperties": false + }, + "IPSetForwardedIPConfiguration": { + "type": "object", + "properties": { + "HeaderName": { + "type": "string", + "pattern": "^[a-zA-Z0-9-]+{1,255}$" + }, + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + }, + "Position": { + "type": "string", + "enum": [ + "FIRST", + "LAST", + "ANY" + ] + } + }, + "required": [ + "HeaderName", + "FallbackBehavior", + "Position" + ], + "additionalProperties": false + }, + "Rule": { + "description": "Rule of RuleGroup that contains condition and action.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/EntityName" + }, + "Priority": { + "$ref": "#/definitions/RulePriority" + }, + "Statement": { + "$ref": "#/definitions/Statement" + }, + "Action": { + "$ref": "#/definitions/RuleAction" + }, + "RuleLabels": { + "description": "Collection of Rule Labels.", + "type": "array", + "items": { + "$ref": "#/definitions/Label" + } + }, + "VisibilityConfig": { + "$ref": "#/definitions/VisibilityConfig" + }, + "CaptchaConfig": { + "$ref": "#/definitions/CaptchaConfig" + }, + "ChallengeConfig": { + "$ref": "#/definitions/ChallengeConfig" + } + }, + "required": [ + "Name", + "Priority", + "Statement", + "VisibilityConfig" + ], + "additionalProperties": false + }, + "RuleAction": { + "description": "Action taken when Rule matches its condition.", + "type": "object", + "properties": { + "Allow": { + "$ref": "#/definitions/AllowAction" + }, + "Block": { + "$ref": "#/definitions/BlockAction" + }, + "Count": { + "$ref": "#/definitions/CountAction" + }, + "Captcha": { + "$ref": "#/definitions/CaptchaAction" + }, + "Challenge": { + "$ref": "#/definitions/ChallengeAction" + } + }, + "additionalProperties": false + }, + "AllowAction": { + "description": "Allow traffic towards application.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "BlockAction": { + "description": "Block traffic towards application.", + "type": "object", + "properties": { + "CustomResponse": { + "$ref": "#/definitions/CustomResponse" + } + }, + "additionalProperties": false + }, + "CountAction": { + "description": "Count traffic towards application.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "CaptchaAction": { + "description": "Checks valid token exists with request.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "ChallengeAction": { + "description": "Checks that the request has a valid token with an unexpired challenge timestamp and, if not, returns a browser challenge to the client.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "CustomHTTPHeaderName": { + "description": "HTTP header name.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "CustomHTTPHeaderValue": { + "description": "HTTP header value.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "CustomHTTPHeader": { + "description": "HTTP header.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/CustomHTTPHeaderName" + }, + "Value": { + "$ref": "#/definitions/CustomHTTPHeaderValue" + } + }, + "required": [ + "Name", + "Value" + ], + "additionalProperties": false + }, + "CustomRequestHandling": { + "description": "Custom request handling.", + "type": "object", + "properties": { + "InsertHeaders": { + "description": "Collection of HTTP headers.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomHTTPHeader" + }, + "minItems": 1 + } + }, + "required": [ + "InsertHeaders" + ], + "additionalProperties": false + }, + "ResponseStatusCode": { + "description": "Custom response code.", + "type": "integer", + "minimum": 200, + "maximum": 599 + }, + "ResponseContentType": { + "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.", + "type": "string", + "enum": [ + "TEXT_PLAIN", + "TEXT_HTML", + "APPLICATION_JSON" + ] + }, + "ResponseContent": { + "description": "Response content.", + "type": "string", + "minLength": 1, + "maxLength": 10240 + }, + "CustomResponseBody": { + "description": "Custom response body.", + "type": "object", + "properties": { + "ContentType": { + "$ref": "#/definitions/ResponseContentType" + }, + "Content": { + "$ref": "#/definitions/ResponseContent" + } + }, + "required": [ + "ContentType", + "Content" + ], + "additionalProperties": false + }, + "CustomResponse": { + "description": "Custom response.", + "type": "object", + "properties": { + "ResponseCode": { + "$ref": "#/definitions/ResponseStatusCode" + }, + "CustomResponseBodyKey": { + "description": "Custom response body key.", + "type": "string", + "pattern": "^[\\w\\-]+$" + }, + "ResponseHeaders": { + "description": "Collection of HTTP headers.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomHTTPHeader" + }, + "minItems": 1 + } + }, + "required": [ + "ResponseCode" + ], + "additionalProperties": false + }, + "CustomResponseBodies": { + "description": "Custom response key and body map.", + "type": "object", + "patternProperties": { + "^[\\w\\-]+$": { + "$ref": "#/definitions/CustomResponseBody" + } + }, + "additionalProperties": false, + "minProperties": 1 + }, + "RuleGroup": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/EntityName" + }, + "Id": { + "$ref": "#/definitions/EntityId" + }, + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "Description": { + "$ref": "#/definitions/EntityDescription" + }, + "Rules": { + "description": "Collection of Rules.", + "type": "array", + "items": { + "$ref": "#/definitions/Rule" + } + }, + "VisibilityConfig": { + "$ref": "#/definitions/VisibilityConfig" + }, + "Capacity": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "RulePriority": { + "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.", + "type": "integer", + "minimum": 0 + }, + "Scope": { + "description": "Use CLOUDFRONT for CloudFront RuleGroup, use REGIONAL for Application Load Balancer and API Gateway.", + "type": "string", + "enum": [ + "CLOUDFRONT", + "REGIONAL" + ] + }, + "SearchString": { + "description": "String that is searched to find a match.", + "type": "string" + }, + "SearchStringBase64": { + "description": "Base64 encoded string that is searched to find a match.", + "type": "string" + }, + "SizeConstraintStatement": { + "description": "Size Constraint statement.", + "type": "object", + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "ComparisonOperator": { + "type": "string", + "enum": [ + "EQ", + "NE", + "LE", + "LT", + "GE", + "GT" + ] + }, + "Size": { + "type": "number", + "minimum": 0, + "maximum": 21474836480 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "FieldToMatch", + "ComparisonOperator", + "Size", + "TextTransformations" + ], + "additionalProperties": false + }, + "SqliMatchStatement": { + "description": "Sqli Match Statement.", + "type": "object", + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + }, + "SensitivityLevel": { + "$ref": "#/definitions/SensitivityLevel" + } + }, + "required": [ + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "Statement": { + "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc", + "type": "object", + "properties": { + "ByteMatchStatement": { + "$ref": "#/definitions/ByteMatchStatement" + }, + "SqliMatchStatement": { + "$ref": "#/definitions/SqliMatchStatement" + }, + "XssMatchStatement": { + "$ref": "#/definitions/XssMatchStatement" + }, + "SizeConstraintStatement": { + "$ref": "#/definitions/SizeConstraintStatement" + }, + "GeoMatchStatement": { + "$ref": "#/definitions/GeoMatchStatement" + }, + "IPSetReferenceStatement": { + "$ref": "#/definitions/IPSetReferenceStatement" + }, + "RegexPatternSetReferenceStatement": { + "$ref": "#/definitions/RegexPatternSetReferenceStatement" + }, + "RateBasedStatement": { + "$ref": "#/definitions/RateBasedStatement" + }, + "AndStatement": { + "$ref": "#/definitions/AndStatement" + }, + "OrStatement": { + "$ref": "#/definitions/OrStatement" + }, + "NotStatement": { + "$ref": "#/definitions/NotStatement" + }, + "LabelMatchStatement": { + "$ref": "#/definitions/LabelMatchStatement" + }, + "RegexMatchStatement": { + "$ref": "#/definitions/RegexMatchStatement" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "TextTransformation": { + "description": "Text Transformation on the Search String before match.", + "type": "object", + "properties": { + "Priority": { + "$ref": "#/definitions/TextTransformationPriority" + }, + "Type": { + "$ref": "#/definitions/TextTransformationType" + } + }, + "required": [ + "Priority", + "Type" + ], + "additionalProperties": false + }, + "TextTransformationPriority": { + "description": "Priority of Rule being evaluated.", + "type": "integer", + "minimum": 0 + }, + "TextTransformationType": { + "description": "Type of text transformation.", + "type": "string", + "enum": [ + "NONE", + "COMPRESS_WHITE_SPACE", + "HTML_ENTITY_DECODE", + "LOWERCASE", + "CMD_LINE", + "URL_DECODE", + "BASE64_DECODE", + "HEX_DECODE", + "MD5", + "REPLACE_COMMENTS", + "ESCAPE_SEQ_DECODE", + "SQL_HEX_DECODE", + "CSS_DECODE", + "JS_DECODE", + "NORMALIZE_PATH", + "NORMALIZE_PATH_WIN", + "REMOVE_NULLS", + "REPLACE_NULLS", + "BASE64_DECODE_EXT", + "URL_DECODE_UNI", + "UTF8_TO_UNICODE" + ] + }, + "VisibilityConfig": { + "description": "Visibility Metric of the RuleGroup.", + "type": "object", + "properties": { + "SampledRequestsEnabled": { + "type": "boolean" + }, + "CloudWatchMetricsEnabled": { + "type": "boolean" + }, + "MetricName": { + "type": "string", + "maxLength": 128, + "minLength": 1 + } + }, + "required": [ + "SampledRequestsEnabled", + "CloudWatchMetricsEnabled", + "MetricName" + ], + "additionalProperties": false + }, + "XssMatchStatement": { + "description": "Xss Match Statement.", + "type": "object", + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "LabelName": { + "description": "Name of the Label.", + "type": "string", + "pattern": "^[0-9A-Za-z_:-]{1,1024}$" + }, + "LabelSummary": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/LabelName" + } + }, + "additionalProperties": false + }, + "Label": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/LabelName" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "LabelMatchKey": { + "type": "string", + "pattern": "^[0-9A-Za-z_:-]{1,1024}$" + }, + "LabelMatchScope": { + "type": "string", + "enum": [ + "LABEL", + "NAMESPACE" + ] + }, + "LabelMatchStatement": { + "type": "object", + "properties": { + "Scope": { + "$ref": "#/definitions/LabelMatchScope" + }, + "Key": { + "$ref": "#/definitions/LabelMatchKey" + } + }, + "required": [ + "Scope", + "Key" + ], + "additionalProperties": false + }, + "RegexMatchStatement": { + "type": "object", + "properties": { + "RegexString": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "RegexString", + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "CaptchaConfig": { + "type": "object", + "properties": { + "ImmunityTimeProperty": { + "$ref": "#/definitions/ImmunityTimeProperty" + } + }, + "additionalProperties": false + }, + "ChallengeConfig": { + "type": "object", + "properties": { + "ImmunityTimeProperty": { + "$ref": "#/definitions/ImmunityTimeProperty" + } + }, + "additionalProperties": false + }, + "ImmunityTimeProperty": { + "type": "object", + "properties": { + "ImmunityTime": { + "type": "integer", + "minimum": 60, + "maximum": 259200 + } + }, + "required": [ + "ImmunityTime" + ], + "additionalProperties": false + }, + "Body": { + "description": "The body of a web request. This immediately follows the request headers.", + "type": "object", + "properties": { + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "additionalProperties": false + }, + "Headers": { + "description": "Includes headers of a web request.", + "type": "object", + "properties": { + "MatchPattern": { + "$ref": "#/definitions/HeaderMatchPattern" + }, + "MatchScope": { + "$ref": "#/definitions/MapMatchScope" + }, + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "required": [ + "MatchPattern", + "MatchScope", + "OversizeHandling" + ], + "additionalProperties": false + }, + "Cookies": { + "description": "Includes cookies of a web request.", + "type": "object", + "properties": { + "MatchPattern": { + "$ref": "#/definitions/CookieMatchPattern" + }, + "MatchScope": { + "$ref": "#/definitions/MapMatchScope" + }, + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "required": [ + "MatchPattern", + "MatchScope", + "OversizeHandling" + ], + "additionalProperties": false + }, + "HeaderMatchPattern": { + "description": "The pattern to look for in the request headers.", + "type": "object", + "properties": { + "All": { + "description": "Inspect all parts of the web request headers.", + "type": "object" + }, + "IncludedHeaders": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "minItems": 1, + "maxItems": 199 + }, + "ExcludedHeaders": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "minItems": 1, + "maxItems": 199 + } + }, + "additionalProperties": false + }, + "CookieMatchPattern": { + "description": "The pattern to look for in the request cookies.", + "type": "object", + "properties": { + "All": { + "description": "Inspect all parts of the web request cookies.", + "type": "object" + }, + "IncludedCookies": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 60 + }, + "minItems": 1, + "maxItems": 199 + }, + "ExcludedCookies": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 60 + }, + "minItems": 1, + "maxItems": 199 + } + }, + "additionalProperties": false + }, + "MapMatchScope": { + "description": "The parts of the request to match against using the MatchPattern.", + "type": "string", + "enum": [ + "ALL", + "KEY", + "VALUE" + ] + }, + "OversizeHandling": { + "description": "Handling of requests containing oversize fields", + "type": "string", + "enum": [ + "CONTINUE", + "MATCH", + "NO_MATCH" + ] + }, + "SensitivityLevel": { + "description": "Sensitivity Level current only used for sqli match statements.", + "type": "string", + "enum": [ + "LOW", + "HIGH" + ] + }, + "JA3Fingerprint": { + "description": "Includes the JA3 fingerprint of a web request.", + "type": "object", + "properties": { + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + } + }, + "required": [ + "FallbackBehavior" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "Capacity": { + "type": "integer", + "minimum": 0 + }, + "Description": { + "$ref": "#/definitions/EntityDescription" + }, + "Name": { + "$ref": "#/definitions/EntityName" + }, + "Id": { + "$ref": "#/definitions/EntityId" + }, + "Scope": { + "$ref": "#/definitions/Scope" + }, + "Rules": { + "description": "Collection of Rules.", + "type": "array", + "items": { + "$ref": "#/definitions/Rule" + } + }, + "VisibilityConfig": { + "$ref": "#/definitions/VisibilityConfig" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1 + }, + "LabelNamespace": { + "$ref": "#/definitions/LabelName" + }, + "CustomResponseBodies": { + "$ref": "#/definitions/CustomResponseBodies" + }, + "AvailableLabels": { + "description": "Collection of Available Labels.", + "type": "array", + "items": { + "$ref": "#/definitions/LabelSummary" + } + }, + "ConsumedLabels": { + "description": "Collection of Consumed Labels.", + "type": "array", + "items": { + "$ref": "#/definitions/LabelSummary" + } + } + }, + "required": [ + "Capacity", + "Scope", + "VisibilityConfig" + ], + "primaryIdentifier": [ + "/properties/Name", + "/properties/Id", + "/properties/Scope" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Scope" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Id", + "/properties/LabelNamespace", + "/properties/AvailableLabels/*/Name", + "/properties/ConsumedLabels/*/Name" + ], + "additionalProperties": false, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "wafv2:CreateRuleGroup", + "wafv2:GetRuleGroup", + "wafv2:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "wafv2:DeleteRuleGroup", + "wafv2:GetRuleGroup" + ] + }, + "read": { + "permissions": [ + "wafv2:GetRuleGroup", + "wafv2:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "wafv2:UpdateRuleGroup", + "wafv2:GetRuleGroup", + "wafv2:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "wafv2:listRuleGroups" + ], + "handlerSchema": { + "properties": { + "Scope": { + "$ref": "resource-schema.json#/properties/Scope" + } + }, + "required": [ + "Scope" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wafv2/webacl.json b/internal/aws/cfn/schemas/aws/wafv2/webacl.json new file mode 100644 index 00000000..87cc321b --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafv2/webacl.json @@ -0,0 +1,2002 @@ +{ + "typeName": "AWS::WAFv2::WebACL", + "description": "Contains the Rules that identify the requests that you want to allow, block, or count. In a WebACL, you also specify a default action (ALLOW or BLOCK), and the action for each Rule that you add to a WebACL, for example, block requests from specified IP addresses or block requests from specified referrers. You also associate the WebACL with a CloudFront distribution to identify the requests that you want AWS WAF to filter. If you add more than one Rule to a WebACL, a request needs to match only one of the specifications to be allowed, blocked, or counted.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "definitions": { + "AndStatement": { + "type": "object", + "properties": { + "Statements": { + "type": "array", + "items": { + "$ref": "#/definitions/Statement" + } + } + }, + "required": [ + "Statements" + ], + "additionalProperties": false + }, + "Body": { + "description": "The body of a web request. This immediately follows the request headers.", + "type": "object", + "properties": { + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "additionalProperties": false + }, + "ByteMatchStatement": { + "description": "Byte Match statement.", + "type": "object", + "properties": { + "SearchString": { + "$ref": "#/definitions/SearchString" + }, + "SearchStringBase64": { + "$ref": "#/definitions/SearchStringBase64" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + }, + "PositionalConstraint": { + "$ref": "#/definitions/PositionalConstraint" + } + }, + "required": [ + "FieldToMatch", + "PositionalConstraint", + "TextTransformations" + ], + "additionalProperties": false + }, + "DefaultAction": { + "description": "Default Action WebACL will take against ingress traffic when there is no matching Rule.", + "type": "object", + "properties": { + "Allow": { + "$ref": "#/definitions/AllowAction" + }, + "Block": { + "$ref": "#/definitions/BlockAction" + } + }, + "additionalProperties": false + }, + "EntityDescription": { + "description": "Description of the entity.", + "type": "string", + "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$" + }, + "EntityName": { + "description": "Name of the WebACL.", + "type": "string", + "pattern": "^[0-9A-Za-z_-]{1,128}$" + }, + "ExcludedRule": { + "description": "Excluded Rule in the RuleGroup or ManagedRuleGroup will not be evaluated.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/EntityName" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "RuleActionOverride": { + "description": "Action override for rules in the rule group.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/EntityName" + }, + "ActionToUse": { + "$ref": "#/definitions/RuleAction" + } + }, + "required": [ + "Name", + "ActionToUse" + ], + "additionalProperties": false + }, + "ExcludedRules": { + "type": "array", + "items": { + "$ref": "#/definitions/ExcludedRule" + } + }, + "FieldToMatch": { + "description": "Field of the request to match.", + "type": "object", + "properties": { + "SingleHeader": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "SingleQueryArgument": { + "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "AllQueryArguments": { + "description": "All query arguments of a web request.", + "type": "object" + }, + "UriPath": { + "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.", + "type": "object" + }, + "QueryString": { + "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.", + "type": "object" + }, + "Body": { + "$ref": "#/definitions/Body" + }, + "Method": { + "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.", + "type": "object" + }, + "JsonBody": { + "$ref": "#/definitions/JsonBody" + }, + "Headers": { + "$ref": "#/definitions/Headers" + }, + "Cookies": { + "$ref": "#/definitions/Cookies" + }, + "JA3Fingerprint": { + "$ref": "#/definitions/JA3Fingerprint" + } + }, + "additionalProperties": false + }, + "JsonBody": { + "description": "Inspect the request body as JSON. The request body immediately follows the request headers.", + "type": "object", + "properties": { + "MatchPattern": { + "$ref": "#/definitions/JsonMatchPattern" + }, + "MatchScope": { + "$ref": "#/definitions/JsonMatchScope" + }, + "InvalidFallbackBehavior": { + "$ref": "#/definitions/BodyParsingFallbackBehavior" + }, + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "required": [ + "MatchPattern", + "MatchScope" + ], + "additionalProperties": false + }, + "BodyParsingFallbackBehavior": { + "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.", + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH", + "EVALUATE_AS_STRING" + ] + }, + "JsonMatchScope": { + "description": "The parts of the JSON to match against using the MatchPattern.", + "type": "string", + "enum": [ + "ALL", + "KEY", + "VALUE" + ] + }, + "JsonMatchPattern": { + "description": "The pattern to look for in the JSON body.", + "type": "object", + "properties": { + "All": { + "description": "Inspect all parts of the web request's JSON body.", + "type": "object" + }, + "IncludedPaths": { + "type": "array", + "items": { + "$ref": "#/definitions/JsonPointerPath" + } + } + }, + "additionalProperties": false + }, + "JsonPointerPath": { + "description": "JSON pointer path in the web request's JSON body", + "type": "string", + "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$" + }, + "GeoMatchStatement": { + "type": "object", + "properties": { + "CountryCodes": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 2 + } + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" + } + }, + "additionalProperties": false + }, + "EntityId": { + "description": "Id of the WebACL", + "type": "string", + "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$" + }, + "IPSetReferenceStatement": { + "type": "object", + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "IPSetForwardedIPConfig": { + "$ref": "#/definitions/IPSetForwardedIPConfiguration" + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "ManagedRuleGroupStatement": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/EntityName" + }, + "VendorName": { + "type": "string" + }, + "Version": { + "type": "string", + "pattern": "^[\\w#:\\.\\-/]+$", + "minLength": 1, + "maxLength": 64 + }, + "ExcludedRules": { + "type": "array", + "items": { + "$ref": "#/definitions/ExcludedRule" + } + }, + "ScopeDownStatement": { + "$ref": "#/definitions/Statement" + }, + "ManagedRuleGroupConfigs": { + "description": "Collection of ManagedRuleGroupConfig.", + "type": "array", + "items": { + "$ref": "#/definitions/ManagedRuleGroupConfig" + } + }, + "RuleActionOverrides": { + "description": "Action overrides for rules in the rule group.", + "type": "array", + "items": { + "$ref": "#/definitions/RuleActionOverride" + }, + "maxItems": 100 + } + }, + "required": [ + "VendorName", + "Name" + ], + "additionalProperties": false + }, + "NotStatement": { + "type": "object", + "properties": { + "Statement": { + "$ref": "#/definitions/Statement" + } + }, + "required": [ + "Statement" + ], + "additionalProperties": false + }, + "OrStatement": { + "type": "object", + "properties": { + "Statements": { + "type": "array", + "items": { + "$ref": "#/definitions/Statement" + } + } + }, + "required": [ + "Statements" + ], + "additionalProperties": false + }, + "OverrideAction": { + "description": "Override a RuleGroup or ManagedRuleGroup behavior. This can only be applied to Rule that has RuleGroupReferenceStatement or ManagedRuleGroupReferenceStatement.", + "type": "object", + "properties": { + "Count": { + "description": "Count traffic towards application.", + "type": "object" + }, + "None": { + "description": "Keep the RuleGroup or ManagedRuleGroup behavior as is.", + "type": "object" + } + }, + "additionalProperties": false + }, + "PositionalConstraint": { + "description": "Position of the evaluation in the FieldToMatch of request.", + "type": "string", + "enum": [ + "EXACTLY", + "STARTS_WITH", + "ENDS_WITH", + "CONTAINS", + "CONTAINS_WORD" + ] + }, + "QueryString": { + "type": "object" + }, + "RateBasedStatement": { + "type": "object", + "properties": { + "Limit": { + "$ref": "#/definitions/RateLimit" + }, + "EvaluationWindowSec": { + "$ref": "#/definitions/EvaluationWindowSec" + }, + "AggregateKeyType": { + "type": "string", + "enum": [ + "CONSTANT", + "IP", + "FORWARDED_IP", + "CUSTOM_KEYS" + ] + }, + "CustomKeys": { + "description": "Specifies the aggregate keys to use in a rate-base rule.", + "type": "array", + "items": { + "$ref": "#/definitions/RateBasedStatementCustomKey" + }, + "maxItems": 5 + }, + "ScopeDownStatement": { + "$ref": "#/definitions/Statement" + }, + "ForwardedIPConfig": { + "$ref": "#/definitions/ForwardedIPConfiguration" + } + }, + "required": [ + "Limit", + "AggregateKeyType" + ], + "additionalProperties": false + }, + "RateBasedStatementCustomKey": { + "description": "Specifies a single custom aggregate key for a rate-base rule.", + "type": "object", + "properties": { + "Cookie": { + "$ref": "#/definitions/RateLimitCookie" + }, + "ForwardedIP": { + "$ref": "#/definitions/RateLimitForwardedIP" + }, + "Header": { + "$ref": "#/definitions/RateLimitHeader" + }, + "HTTPMethod": { + "$ref": "#/definitions/RateLimitHTTPMethod" + }, + "IP": { + "$ref": "#/definitions/RateLimitIP" + }, + "LabelNamespace": { + "$ref": "#/definitions/RateLimitLabelNamespace" + }, + "QueryArgument": { + "$ref": "#/definitions/RateLimitQueryArgument" + }, + "QueryString": { + "$ref": "#/definitions/RateLimitQueryString" + }, + "UriPath": { + "$ref": "#/definitions/RateLimitUriPath" + } + }, + "additionalProperties": false + }, + "RateLimitCookie": { + "description": "Specifies a cookie as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the cookie to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Name", + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitForwardedIP": { + "description": "Specifies the first IP address in an HTTP header as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitHeader": { + "description": "Specifies a header as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the header to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Name", + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitHTTPMethod": { + "description": "Specifies the request's HTTP method as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitIP": { + "description": "Specifies the IP address in the web request as an aggregate key for a rate-based rule.", + "type": "object" + }, + "RateLimitLabelNamespace": { + "description": "Specifies a label namespace to use as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Namespace": { + "description": "The namespace to use for aggregation.", + "type": "string", + "pattern": "^[0-9A-Za-z_:-]{1,1024}$" + } + }, + "required": [ + "Namespace" + ], + "additionalProperties": false + }, + "RateLimitQueryArgument": { + "description": "Specifies a query argument in the request as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "Name": { + "description": "The name of the query argument to use.", + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Name", + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitQueryString": { + "description": "Specifies the request's query string as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimitUriPath": { + "description": "Specifies the request's URI Path as an aggregate key for a rate-based rule.", + "type": "object", + "properties": { + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "TextTransformations" + ], + "additionalProperties": false + }, + "RateLimit": { + "type": "integer", + "minimum": 100, + "maximum": 2000000000 + }, + "EvaluationWindowSec": { + "type": "integer", + "enum": [ + 60, + 120, + 300, + 600 + ] + }, + "RegexPatternSetReferenceStatement": { + "type": "object", + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "Arn", + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "ResourceArn": { + "description": "ARN of the WAF entity.", + "type": "string", + "minLength": 20, + "maxLength": 2048 + }, + "ForwardedIPConfiguration": { + "type": "object", + "properties": { + "HeaderName": { + "type": "string", + "pattern": "^[a-zA-Z0-9-]+{1,255}$" + }, + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + } + }, + "required": [ + "HeaderName", + "FallbackBehavior" + ], + "additionalProperties": false + }, + "IPSetForwardedIPConfiguration": { + "type": "object", + "properties": { + "HeaderName": { + "type": "string", + "pattern": "^[a-zA-Z0-9-]+{1,255}$" + }, + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + }, + "Position": { + "type": "string", + "enum": [ + "FIRST", + "LAST", + "ANY" + ] + } + }, + "required": [ + "HeaderName", + "FallbackBehavior", + "Position" + ], + "additionalProperties": false + }, + "Rule": { + "description": "Rule of WebACL that contains condition and action.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/EntityName" + }, + "Priority": { + "$ref": "#/definitions/RulePriority" + }, + "Statement": { + "$ref": "#/definitions/Statement" + }, + "Action": { + "$ref": "#/definitions/RuleAction" + }, + "OverrideAction": { + "$ref": "#/definitions/OverrideAction" + }, + "RuleLabels": { + "description": "Collection of Rule Labels.", + "type": "array", + "items": { + "$ref": "#/definitions/Label" + } + }, + "VisibilityConfig": { + "$ref": "#/definitions/VisibilityConfig" + }, + "CaptchaConfig": { + "$ref": "#/definitions/CaptchaConfig" + }, + "ChallengeConfig": { + "$ref": "#/definitions/ChallengeConfig" + } + }, + "required": [ + "Name", + "Priority", + "Statement", + "VisibilityConfig" + ], + "additionalProperties": false + }, + "Rules": { + "description": "Collection of Rules.", + "type": "array", + "items": { + "$ref": "#/definitions/Rule" + } + }, + "RuleAction": { + "description": "Action taken when Rule matches its condition.", + "type": "object", + "properties": { + "Allow": { + "$ref": "#/definitions/AllowAction" + }, + "Block": { + "$ref": "#/definitions/BlockAction" + }, + "Count": { + "$ref": "#/definitions/CountAction" + }, + "Captcha": { + "$ref": "#/definitions/CaptchaAction" + }, + "Challenge": { + "$ref": "#/definitions/ChallengeAction" + } + }, + "additionalProperties": false + }, + "AllowAction": { + "description": "Allow traffic towards application.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "CountAction": { + "description": "Allow traffic towards application.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "CaptchaAction": { + "description": "Checks valid token exists with request.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "ChallengeAction": { + "description": "Checks that the request has a valid token with an unexpired challenge timestamp and, if not, returns a browser challenge to the client.", + "type": "object", + "properties": { + "CustomRequestHandling": { + "$ref": "#/definitions/CustomRequestHandling" + } + }, + "additionalProperties": false + }, + "BlockAction": { + "description": "Block traffic towards application.", + "type": "object", + "properties": { + "CustomResponse": { + "$ref": "#/definitions/CustomResponse" + } + }, + "additionalProperties": false + }, + "CustomHTTPHeaderName": { + "description": "HTTP header name.", + "type": "string", + "minLength": 1, + "maxLength": 64 + }, + "CustomHTTPHeaderValue": { + "description": "HTTP header value.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "CustomHTTPHeader": { + "description": "HTTP header.", + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/CustomHTTPHeaderName" + }, + "Value": { + "$ref": "#/definitions/CustomHTTPHeaderValue" + } + }, + "required": [ + "Name", + "Value" + ], + "additionalProperties": false + }, + "CustomRequestHandling": { + "description": "Custom request handling.", + "type": "object", + "properties": { + "InsertHeaders": { + "description": "Collection of HTTP headers.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomHTTPHeader" + }, + "minItems": 1 + } + }, + "required": [ + "InsertHeaders" + ], + "additionalProperties": false + }, + "ResponseStatusCode": { + "description": "Custom response code.", + "type": "integer", + "minimum": 200, + "maximum": 599 + }, + "ResponseContentType": { + "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.", + "type": "string", + "enum": [ + "TEXT_PLAIN", + "TEXT_HTML", + "APPLICATION_JSON" + ] + }, + "ResponseContent": { + "description": "Response content.", + "type": "string", + "minLength": 1, + "maxLength": 10240 + }, + "CustomResponseBody": { + "description": "Custom response body.", + "type": "object", + "properties": { + "ContentType": { + "$ref": "#/definitions/ResponseContentType" + }, + "Content": { + "$ref": "#/definitions/ResponseContent" + } + }, + "required": [ + "ContentType", + "Content" + ], + "additionalProperties": false + }, + "CustomResponse": { + "description": "Custom response.", + "type": "object", + "properties": { + "ResponseCode": { + "$ref": "#/definitions/ResponseStatusCode" + }, + "CustomResponseBodyKey": { + "description": "Custom response body key.", + "type": "string", + "pattern": "^[\\w\\-]+$" + }, + "ResponseHeaders": { + "description": "Collection of HTTP headers.", + "type": "array", + "items": { + "$ref": "#/definitions/CustomHTTPHeader" + }, + "minItems": 1 + } + }, + "required": [ + "ResponseCode" + ], + "additionalProperties": false + }, + "CustomResponseBodies": { + "description": "Custom response key and body map.", + "type": "object", + "patternProperties": { + "^[\\w\\-]+$": { + "$ref": "#/definitions/CustomResponseBody" + } + }, + "minProperties": 1, + "additionalProperties": false + }, + "RuleGroupReferenceStatement": { + "type": "object", + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "ExcludedRules": { + "type": "array", + "items": { + "$ref": "#/definitions/ExcludedRule" + } + }, + "RuleActionOverrides": { + "description": "Action overrides for rules in the rule group.", + "type": "array", + "items": { + "$ref": "#/definitions/RuleActionOverride" + }, + "maxItems": 100 + } + }, + "required": [ + "Arn" + ], + "additionalProperties": false + }, + "RulePriority": { + "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.", + "type": "integer", + "minimum": 0 + }, + "Scope": { + "description": "Use CLOUDFRONT for CloudFront WebACL, use REGIONAL for Application Load Balancer and API Gateway.", + "type": "string", + "enum": [ + "CLOUDFRONT", + "REGIONAL" + ] + }, + "SearchString": { + "description": "String that is searched to find a match.", + "type": "string" + }, + "SearchStringBase64": { + "description": "Base64 encoded string that is searched to find a match.", + "type": "string" + }, + "SingleHeader": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "additionalProperties": false + }, + "SingleQueryArgument": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "additionalProperties": false + }, + "SizeConstraintStatement": { + "description": "Size Constraint statement.", + "type": "object", + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "ComparisonOperator": { + "type": "string", + "enum": [ + "EQ", + "NE", + "LE", + "LT", + "GE", + "GT" + ] + }, + "Size": { + "type": "number", + "minimum": 0, + "maximum": 21474836480 + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "FieldToMatch", + "ComparisonOperator", + "Size", + "TextTransformations" + ], + "additionalProperties": false + }, + "SqliMatchStatement": { + "description": "Sqli Match Statement.", + "type": "object", + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + }, + "SensitivityLevel": { + "$ref": "#/definitions/SensitivityLevel" + } + }, + "required": [ + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "Statement": { + "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc", + "type": "object", + "properties": { + "ByteMatchStatement": { + "$ref": "#/definitions/ByteMatchStatement" + }, + "SqliMatchStatement": { + "$ref": "#/definitions/SqliMatchStatement" + }, + "XssMatchStatement": { + "$ref": "#/definitions/XssMatchStatement" + }, + "SizeConstraintStatement": { + "$ref": "#/definitions/SizeConstraintStatement" + }, + "GeoMatchStatement": { + "$ref": "#/definitions/GeoMatchStatement" + }, + "RuleGroupReferenceStatement": { + "$ref": "#/definitions/RuleGroupReferenceStatement" + }, + "IPSetReferenceStatement": { + "$ref": "#/definitions/IPSetReferenceStatement" + }, + "RegexPatternSetReferenceStatement": { + "$ref": "#/definitions/RegexPatternSetReferenceStatement" + }, + "ManagedRuleGroupStatement": { + "$ref": "#/definitions/ManagedRuleGroupStatement" + }, + "RateBasedStatement": { + "$ref": "#/definitions/RateBasedStatement" + }, + "AndStatement": { + "$ref": "#/definitions/AndStatement" + }, + "OrStatement": { + "$ref": "#/definitions/OrStatement" + }, + "NotStatement": { + "$ref": "#/definitions/NotStatement" + }, + "LabelMatchStatement": { + "$ref": "#/definitions/LabelMatchStatement" + }, + "RegexMatchStatement": { + "$ref": "#/definitions/RegexMatchStatement" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Value": { + "type": "string", + "minLength": 0, + "maxLength": 256 + } + }, + "additionalProperties": false + }, + "TextTransformation": { + "description": "Text Transformation on the Search String before match.", + "type": "object", + "properties": { + "Priority": { + "$ref": "#/definitions/TextTransformationPriority" + }, + "Type": { + "$ref": "#/definitions/TextTransformationType" + } + }, + "required": [ + "Priority", + "Type" + ], + "additionalProperties": false + }, + "TextTransformationPriority": { + "description": "Priority of Rule being evaluated.", + "type": "integer", + "minimum": 0 + }, + "TextTransformationType": { + "description": "Type of text transformation.", + "type": "string", + "enum": [ + "NONE", + "COMPRESS_WHITE_SPACE", + "HTML_ENTITY_DECODE", + "LOWERCASE", + "CMD_LINE", + "URL_DECODE", + "BASE64_DECODE", + "HEX_DECODE", + "MD5", + "REPLACE_COMMENTS", + "ESCAPE_SEQ_DECODE", + "SQL_HEX_DECODE", + "CSS_DECODE", + "JS_DECODE", + "NORMALIZE_PATH", + "NORMALIZE_PATH_WIN", + "REMOVE_NULLS", + "REPLACE_NULLS", + "BASE64_DECODE_EXT", + "URL_DECODE_UNI", + "UTF8_TO_UNICODE" + ] + }, + "UriPath": { + "type": "object" + }, + "VisibilityConfig": { + "description": "Visibility Metric of the WebACL.", + "type": "object", + "properties": { + "SampledRequestsEnabled": { + "type": "boolean" + }, + "CloudWatchMetricsEnabled": { + "type": "boolean" + }, + "MetricName": { + "type": "string", + "maxLength": 128, + "minLength": 1 + } + }, + "required": [ + "SampledRequestsEnabled", + "CloudWatchMetricsEnabled", + "MetricName" + ], + "additionalProperties": false + }, + "XssMatchStatement": { + "description": "Xss Match Statement.", + "type": "object", + "properties": { + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "LabelName": { + "description": "Name of the Label.", + "type": "string", + "pattern": "^[0-9A-Za-z_:-]{1,1024}$" + }, + "Label": { + "type": "object", + "properties": { + "Name": { + "$ref": "#/definitions/LabelName" + } + }, + "required": [ + "Name" + ], + "additionalProperties": false + }, + "LabelMatchKey": { + "type": "string", + "pattern": "^[0-9A-Za-z_:-]{1,1024}$" + }, + "LabelMatchScope": { + "type": "string", + "enum": [ + "LABEL", + "NAMESPACE" + ] + }, + "LabelMatchStatement": { + "type": "object", + "properties": { + "Scope": { + "$ref": "#/definitions/LabelMatchScope" + }, + "Key": { + "$ref": "#/definitions/LabelMatchKey" + } + }, + "required": [ + "Scope", + "Key" + ], + "additionalProperties": false + }, + "RegexMatchStatement": { + "type": "object", + "properties": { + "RegexString": { + "type": "string", + "maxLength": 512, + "minLength": 1 + }, + "FieldToMatch": { + "$ref": "#/definitions/FieldToMatch" + }, + "TextTransformations": { + "type": "array", + "items": { + "$ref": "#/definitions/TextTransformation" + } + } + }, + "required": [ + "RegexString", + "FieldToMatch", + "TextTransformations" + ], + "additionalProperties": false + }, + "CaptchaConfig": { + "type": "object", + "properties": { + "ImmunityTimeProperty": { + "$ref": "#/definitions/ImmunityTimeProperty" + } + }, + "additionalProperties": false + }, + "ChallengeConfig": { + "type": "object", + "properties": { + "ImmunityTimeProperty": { + "$ref": "#/definitions/ImmunityTimeProperty" + } + }, + "additionalProperties": false + }, + "ImmunityTimeProperty": { + "type": "object", + "properties": { + "ImmunityTime": { + "type": "integer", + "minimum": 60, + "maximum": 259200 + } + }, + "required": [ + "ImmunityTime" + ], + "additionalProperties": false + }, + "ManagedRuleGroupConfig": { + "description": "ManagedRuleGroupConfig.", + "type": "object", + "properties": { + "LoginPath": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 256 + }, + "PayloadType": { + "type": "string", + "enum": [ + "JSON", + "FORM_ENCODED" + ] + }, + "UsernameField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "PasswordField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "AWSManagedRulesBotControlRuleSet": { + "$ref": "#/definitions/AWSManagedRulesBotControlRuleSet" + }, + "AWSManagedRulesATPRuleSet": { + "$ref": "#/definitions/AWSManagedRulesATPRuleSet" + }, + "AWSManagedRulesACFPRuleSet": { + "$ref": "#/definitions/AWSManagedRulesACFPRuleSet" + } + }, + "additionalProperties": false + }, + "AWSManagedRulesBotControlRuleSet": { + "description": "Configures how to use the Bot Control managed rule group in the web ACL", + "type": "object", + "properties": { + "InspectionLevel": { + "type": "string", + "enum": [ + "COMMON", + "TARGETED" + ] + }, + "EnableMachineLearning": { + "type": "boolean" + } + }, + "required": [ + "InspectionLevel" + ], + "additionalProperties": false + }, + "AWSManagedRulesATPRuleSet": { + "description": "Configures how to use the Account Takeover Prevention managed rule group in the web ACL", + "type": "object", + "properties": { + "LoginPath": { + "type": "string" + }, + "EnableRegexInPath": { + "type": "boolean" + }, + "RequestInspection": { + "$ref": "#/definitions/RequestInspection" + }, + "ResponseInspection": { + "$ref": "#/definitions/ResponseInspection" + } + }, + "required": [ + "LoginPath" + ], + "additionalProperties": false + }, + "AWSManagedRulesACFPRuleSet": { + "description": "Configures how to use the Account creation fraud prevention managed rule group in the web ACL", + "type": "object", + "properties": { + "CreationPath": { + "type": "string" + }, + "RegistrationPagePath": { + "type": "string" + }, + "RequestInspection": { + "$ref": "#/definitions/RequestInspectionACFP" + }, + "ResponseInspection": { + "$ref": "#/definitions/ResponseInspection" + }, + "EnableRegexInPath": { + "type": "boolean" + } + }, + "required": [ + "CreationPath", + "RegistrationPagePath", + "RequestInspection" + ], + "additionalProperties": false + }, + "RequestInspection": { + "description": "Configures the inspection of login requests", + "type": "object", + "properties": { + "PayloadType": { + "type": "string", + "enum": [ + "JSON", + "FORM_ENCODED" + ] + }, + "UsernameField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "PasswordField": { + "$ref": "#/definitions/FieldIdentifier" + } + }, + "required": [ + "PayloadType", + "UsernameField", + "PasswordField" + ], + "additionalProperties": false + }, + "RequestInspectionACFP": { + "description": "Configures the inspection of sign-up requests", + "type": "object", + "properties": { + "PayloadType": { + "type": "string", + "enum": [ + "JSON", + "FORM_ENCODED" + ] + }, + "UsernameField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "PasswordField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "EmailField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "PhoneNumberFields": { + "type": "array", + "items": { + "$ref": "#/definitions/PhoneNumberField" + } + }, + "AddressFields": { + "type": "array", + "items": { + "$ref": "#/definitions/AddressField" + } + } + }, + "required": [ + "PayloadType" + ], + "additionalProperties": false + }, + "ResponseInspection": { + "description": "Configures the inspection of login responses", + "type": "object", + "properties": { + "StatusCode": { + "$ref": "#/definitions/ResponseInspectionStatusCode" + }, + "Header": { + "$ref": "#/definitions/ResponseInspectionHeader" + }, + "BodyContains": { + "$ref": "#/definitions/ResponseInspectionBodyContains" + }, + "Json": { + "$ref": "#/definitions/ResponseInspectionJson" + } + }, + "additionalProperties": false + }, + "ResponseInspectionStatusCode": { + "description": "Response status codes that indicate success or failure of a login request", + "type": "object", + "properties": { + "SuccessCodes": { + "type": "array", + "items": { + "type": "integer", + "minLength": 0, + "maxLength": 999 + }, + "minItems": 1, + "maxItems": 10 + }, + "FailureCodes": { + "type": "array", + "items": { + "type": "integer", + "minLength": 0, + "maxLength": 999 + }, + "minItems": 1, + "maxItems": 10 + } + }, + "required": [ + "SuccessCodes", + "FailureCodes" + ], + "additionalProperties": false + }, + "ResponseInspectionHeader": { + "description": "Response headers that indicate success or failure of a login request", + "type": "object", + "properties": { + "Name": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 200 + }, + "SuccessValues": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 3 + }, + "FailureValues": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 3 + } + }, + "required": [ + "Name", + "SuccessValues", + "FailureValues" + ], + "additionalProperties": false + }, + "ResponseInspectionBodyContains": { + "description": "Response body contents that indicate success or failure of a login request", + "type": "object", + "properties": { + "SuccessStrings": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 + }, + "FailureStrings": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 + } + }, + "required": [ + "SuccessStrings", + "FailureStrings" + ], + "additionalProperties": false + }, + "ResponseInspectionJson": { + "description": "Response JSON that indicate success or failure of a login request", + "type": "object", + "properties": { + "Identifier": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 512 + }, + "SuccessValues": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 + }, + "FailureValues": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 100 + }, + "minItems": 1, + "maxItems": 5 + } + }, + "required": [ + "Identifier", + "SuccessValues", + "FailureValues" + ], + "additionalProperties": false + }, + "TokenDomains": { + "description": "List of domains to accept in web request tokens, in addition to the domain of the protected resource.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w\\.\\-/]+$", + "minLength": 1, + "maxLength": 253 + } + }, + "AssociationConfig": { + "description": "AssociationConfig for body inspection", + "type": "object", + "properties": { + "RequestBody": { + "$ref": "#/definitions/RequestBody" + } + }, + "additionalProperties": false + }, + "RequestBody": { + "type": "object", + "description": "Map of AssociatedResourceType and RequestBodyAssociatedResourceTypeConfig", + "patternProperties": { + "^(CLOUDFRONT)$": { + "$ref": "#/definitions/RequestBodyAssociatedResourceTypeConfig" + } + }, + "additionalProperties": false + }, + "RequestBodyAssociatedResourceTypeConfig": { + "description": "Configures the inspection size in the request body.", + "type": "object", + "properties": { + "DefaultSizeInspectionLimit": { + "$ref": "#/definitions/SizeInspectionLimit" + } + }, + "required": [ + "DefaultSizeInspectionLimit" + ], + "additionalProperties": false + }, + "SizeInspectionLimit": { + "type": "string", + "enum": [ + "KB_16", + "KB_32", + "KB_48", + "KB_64" + ] + }, + "PhoneNumberField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "AddressField": { + "$ref": "#/definitions/FieldIdentifier" + }, + "FieldIdentifier": { + "type": "object", + "properties": { + "Identifier": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 512 + } + }, + "required": [ + "Identifier" + ], + "additionalProperties": false + }, + "Headers": { + "description": "Includes headers of a web request.", + "type": "object", + "properties": { + "MatchPattern": { + "$ref": "#/definitions/HeaderMatchPattern" + }, + "MatchScope": { + "$ref": "#/definitions/MapMatchScope" + }, + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "required": [ + "MatchPattern", + "MatchScope", + "OversizeHandling" + ], + "additionalProperties": false + }, + "Cookies": { + "description": "Includes cookies of a web request.", + "type": "object", + "properties": { + "MatchPattern": { + "$ref": "#/definitions/CookieMatchPattern" + }, + "MatchScope": { + "$ref": "#/definitions/MapMatchScope" + }, + "OversizeHandling": { + "$ref": "#/definitions/OversizeHandling" + } + }, + "required": [ + "MatchPattern", + "MatchScope", + "OversizeHandling" + ], + "additionalProperties": false + }, + "HeaderMatchPattern": { + "description": "The pattern to look for in the request headers.", + "type": "object", + "properties": { + "All": { + "description": "Inspect all parts of the web request headers.", + "type": "object" + }, + "IncludedHeaders": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "minItems": 1, + "maxItems": 199 + }, + "ExcludedHeaders": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 64 + }, + "minItems": 1, + "maxItems": 199 + } + }, + "additionalProperties": false + }, + "CookieMatchPattern": { + "description": "The pattern to look for in the request cookies.", + "type": "object", + "properties": { + "All": { + "description": "Inspect all parts of the web request cookies.", + "type": "object" + }, + "IncludedCookies": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 60 + }, + "minItems": 1, + "maxItems": 199 + }, + "ExcludedCookies": { + "type": "array", + "items": { + "type": "string", + "pattern": ".*\\S.*", + "minLength": 1, + "maxLength": 60 + }, + "minItems": 1, + "maxItems": 199 + } + }, + "additionalProperties": false + }, + "MapMatchScope": { + "description": "The parts of the request to match against using the MatchPattern.", + "type": "string", + "enum": [ + "ALL", + "KEY", + "VALUE" + ] + }, + "OversizeHandling": { + "description": "Handling of requests containing oversize fields", + "type": "string", + "enum": [ + "CONTINUE", + "MATCH", + "NO_MATCH" + ] + }, + "SensitivityLevel": { + "description": "Sensitivity Level current only used for sqli match statements.", + "type": "string", + "enum": [ + "LOW", + "HIGH" + ] + }, + "JA3Fingerprint": { + "description": "Includes the JA3 fingerprint of a web request.", + "type": "object", + "properties": { + "FallbackBehavior": { + "type": "string", + "enum": [ + "MATCH", + "NO_MATCH" + ] + } + }, + "required": [ + "FallbackBehavior" + ], + "additionalProperties": false + } + }, + "properties": { + "Arn": { + "$ref": "#/definitions/ResourceArn" + }, + "Capacity": { + "type": "integer", + "minimum": 0 + }, + "DefaultAction": { + "$ref": "#/definitions/DefaultAction" + }, + "Description": { + "$ref": "#/definitions/EntityDescription" + }, + "Name": { + "$ref": "#/definitions/EntityName" + }, + "Id": { + "$ref": "#/definitions/EntityId" + }, + "Scope": { + "$ref": "#/definitions/Scope" + }, + "Rules": { + "description": "Collection of Rules.", + "type": "array", + "items": { + "$ref": "#/definitions/Rule" + } + }, + "VisibilityConfig": { + "$ref": "#/definitions/VisibilityConfig" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "minItems": 1 + }, + "LabelNamespace": { + "$ref": "#/definitions/LabelName" + }, + "CustomResponseBodies": { + "$ref": "#/definitions/CustomResponseBodies" + }, + "CaptchaConfig": { + "$ref": "#/definitions/CaptchaConfig" + }, + "ChallengeConfig": { + "$ref": "#/definitions/ChallengeConfig" + }, + "TokenDomains": { + "$ref": "#/definitions/TokenDomains" + }, + "AssociationConfig": { + "$ref": "#/definitions/AssociationConfig" + } + }, + "required": [ + "DefaultAction", + "Scope", + "VisibilityConfig" + ], + "primaryIdentifier": [ + "/properties/Name", + "/properties/Id", + "/properties/Scope" + ], + "createOnlyProperties": [ + "/properties/Name", + "/properties/Scope" + ], + "readOnlyProperties": [ + "/properties/Arn", + "/properties/Capacity", + "/properties/Id", + "/properties/LabelNamespace" + ], + "additionalProperties": false, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "wafv2:CreateWebACL", + "wafv2:GetWebACL", + "wafv2:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "wafv2:DeleteWebACL", + "wafv2:GetWebACL" + ] + }, + "read": { + "permissions": [ + "wafv2:GetWebACL", + "wafv2:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "wafv2:UpdateWebACL", + "wafv2:GetWebACL", + "wafv2:ListTagsForResource" + ] + }, + "list": { + "permissions": [ + "wafv2:listWebACLs" + ], + "handlerSchema": { + "properties": { + "Scope": { + "$ref": "resource-schema.json#/properties/Scope" + } + }, + "required": [ + "Scope" + ] + } + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wafv2/webaclassociation.json b/internal/aws/cfn/schemas/aws/wafv2/webaclassociation.json new file mode 100644 index 00000000..53735c6d --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wafv2/webaclassociation.json @@ -0,0 +1,125 @@ +{ + "typeName": "AWS::WAFv2::WebACLAssociation", + "description": "Associates WebACL to Application Load Balancer, CloudFront or API Gateway.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "definitions": { + "ResourceArn": { + "type": "string", + "minLength": 20, + "maxLength": 2048 + } + }, + "properties": { + "ResourceArn": { + "$ref": "#/definitions/ResourceArn" + }, + "WebACLArn": { + "$ref": "#/definitions/ResourceArn" + } + }, + "required": [ + "ResourceArn", + "WebACLArn" + ], + "createOnlyProperties": [ + "/properties/ResourceArn", + "/properties/WebACLArn" + ], + "primaryIdentifier": [ + "/properties/ResourceArn", + "/properties/WebACLArn" + ], + "additionalProperties": false, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": false, + "tagUpdatable": false, + "taggable": false + }, + "handlers": { + "create": { + "permissions": [ + "wafv2:AssociateWebACL", + "wafv2:GetWebACLForResource", + "wafv2:GetWebACL", + "wafv2:DisassociateWebACL", + "elasticloadbalancing:SetWebACL", + "apigateway:SetWebACL", + "appsync:SetWebACL", + "cognito-idp:AssociateWebACL", + "cognito-idp:DisassociateWebACL", + "cognito-idp:GetWebACLForResource", + "apprunner:AssociateWebAcl", + "apprunner:DisassociateWebAcl", + "apprunner:DescribeWebAclForService", + "ec2:AssociateVerifiedAccessInstanceWebAcl", + "ec2:DisassociateVerifiedAccessInstanceWebAcl", + "ec2:DescribeVerifiedAccessInstanceWebAclAssociations", + "ec2:GetVerifiedAccessInstanceWebAcl" + ] + }, + "delete": { + "permissions": [ + "wafv2:AssociateWebACL", + "wafv2:GetWebACLForResource", + "wafv2:GetWebACL", + "wafv2:DisassociateWebACL", + "elasticloadbalancing:SetWebACL", + "apigateway:SetWebACL", + "appsync:SetWebACL", + "cognito-idp:AssociateWebACL", + "cognito-idp:DisassociateWebACL", + "cognito-idp:GetWebACLForResource", + "apprunner:AssociateWebAcl", + "apprunner:DisassociateWebAcl", + "apprunner:DescribeWebAclForService", + "ec2:AssociateVerifiedAccessInstanceWebAcl", + "ec2:DisassociateVerifiedAccessInstanceWebAcl", + "ec2:DescribeVerifiedAccessInstanceWebAclAssociations", + "ec2:GetVerifiedAccessInstanceWebAcl" + ] + }, + "read": { + "permissions": [ + "wafv2:AssociateWebACL", + "wafv2:GetWebACLForResource", + "wafv2:GetWebACL", + "wafv2:DisassociateWebACL", + "elasticloadbalancing:SetWebACL", + "apigateway:SetWebACL", + "appsync:SetWebACL", + "cognito-idp:AssociateWebACL", + "cognito-idp:DisassociateWebACL", + "cognito-idp:GetWebACLForResource", + "apprunner:AssociateWebAcl", + "apprunner:DisassociateWebAcl", + "apprunner:DescribeWebAclForService", + "ec2:AssociateVerifiedAccessInstanceWebAcl", + "ec2:DisassociateVerifiedAccessInstanceWebAcl", + "ec2:DescribeVerifiedAccessInstanceWebAclAssociations", + "ec2:GetVerifiedAccessInstanceWebAcl" + ] + }, + "update": { + "permissions": [ + "wafv2:AssociateWebACL", + "wafv2:GetWebACLForResource", + "wafv2:GetWebACL", + "wafv2:DisassociateWebACL", + "elasticloadbalancing:SetWebACL", + "apigateway:SetWebACL", + "appsync:SetWebACL", + "cognito-idp:AssociateWebACL", + "cognito-idp:DisassociateWebACL", + "cognito-idp:GetWebACLForResource", + "apprunner:AssociateWebAcl", + "apprunner:DisassociateWebAcl", + "apprunner:DescribeWebAclForService", + "ec2:AssociateVerifiedAccessInstanceWebAcl", + "ec2:DisassociateVerifiedAccessInstanceWebAcl", + "ec2:DescribeVerifiedAccessInstanceWebAclAssociations", + "ec2:GetVerifiedAccessInstanceWebAcl" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wisdom/assistant.json b/internal/aws/cfn/schemas/aws/wisdom/assistant.json new file mode 100644 index 00000000..cb8b9897 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wisdom/assistant.json @@ -0,0 +1,134 @@ +{ + "typeName": "AWS::Wisdom::Assistant", + "description": "Definition of AWS::Wisdom::Assistant Resource Type", + "definitions": { + "AssistantType": { + "type": "string", + "enum": [ + "AGENT" + ] + }, + "ServerSideEncryptionConfiguration": { + "type": "object", + "properties": { + "KmsKeyId": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "Tag": { + "additionalProperties": false, + "properties": { + "Key": { + "maxLength": 128, + "minLength": 1, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "type": "string" + }, + "Value": { + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "type": "object" + } + }, + "properties": { + "Type": { + "$ref": "#/definitions/AssistantType" + }, + "Description": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "AssistantArn": { + "type": "string", + "pattern": "^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?$" + }, + "AssistantId": { + "type": "string", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + }, + "ServerSideEncryptionConfiguration": { + "$ref": "#/definitions/ServerSideEncryptionConfiguration" + }, + "Tags": { + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array" + }, + "Name": { + "type": "string", + "maxLength": 255, + "minLength": 1 + } + }, + "required": [ + "Name", + "Type" + ], + "readOnlyProperties": [ + "/properties/AssistantId", + "/properties/AssistantArn" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/Name", + "/properties/ServerSideEncryptionConfiguration", + "/properties/Tags", + "/properties/Type" + ], + "primaryIdentifier": [ + "/properties/AssistantId" + ], + "additionalIdentifiers": [ + [ + "/properties/AssistantArn" + ] + ], + "additionalProperties": false, + "taggable": false, + "replacementStrategy": "delete_then_create", + "handlers": { + "create": { + "permissions": [ + "kms:CreateGrant", + "kms:DescribeKey", + "wisdom:CreateAssistant", + "wisdom:TagResource" + ] + }, + "update": { + "permissions": [ + "wisdom:GetAssistant" + ] + }, + "read": { + "permissions": [ + "wisdom:GetAssistant" + ] + }, + "list": { + "permissions": [ + "wisdom:ListAssistants" + ] + }, + "delete": { + "permissions": [ + "wisdom:DeleteAssistant" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wisdom/assistantassociation.json b/internal/aws/cfn/schemas/aws/wisdom/assistantassociation.json new file mode 100644 index 00000000..527a52e8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wisdom/assistantassociation.json @@ -0,0 +1,146 @@ +{ + "typeName": "AWS::Wisdom::AssistantAssociation", + "description": "Definition of AWS::Wisdom::AssistantAssociation Resource Type", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk", + "definitions": { + "AssociationData": { + "type": "object", + "properties": { + "KnowledgeBaseId": { + "type": "string", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + } + }, + "required": [ + "KnowledgeBaseId" + ], + "additionalProperties": false + }, + "AssociationType": { + "type": "string", + "enum": [ + "KNOWLEDGE_BASE" + ] + }, + "Tag": { + "additionalProperties": false, + "properties": { + "Key": { + "maxLength": 128, + "minLength": 1, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "type": "string" + }, + "Value": { + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "type": "object" + } + }, + "properties": { + "AssistantAssociationArn": { + "type": "string", + "pattern": "^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?$" + }, + "AssistantArn": { + "type": "string", + "pattern": "^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?$" + }, + "AssistantAssociationId": { + "type": "string", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + }, + "AssistantId": { + "type": "string", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + }, + "Association": { + "$ref": "#/definitions/AssociationData" + }, + "AssociationType": { + "$ref": "#/definitions/AssociationType" + }, + "Tags": { + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array" + } + }, + "required": [ + "Association", + "AssociationType", + "AssistantId" + ], + "readOnlyProperties": [ + "/properties/AssistantAssociationId", + "/properties/AssistantAssociationArn", + "/properties/AssistantArn" + ], + "createOnlyProperties": [ + "/properties/Association", + "/properties/AssociationType", + "/properties/AssistantId", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/AssistantAssociationId", + "/properties/AssistantId" + ], + "additionalIdentifiers": [ + [ + "/properties/AssistantAssociationArn", + "/properties/AssistantArn" + ] + ], + "additionalProperties": false, + "taggable": false, + "replacementStrategy": "delete_then_create", + "handlers": { + "create": { + "permissions": [ + "wisdom:CreateAssistantAssociation", + "wisdom:TagResource" + ] + }, + "update": { + "permissions": [ + "wisdom:GetAssistantAssociation" + ] + }, + "read": { + "permissions": [ + "wisdom:GetAssistantAssociation" + ] + }, + "list": { + "permissions": [ + "wisdom:ListAssistantAssociations" + ], + "handlerSchema": { + "properties": { + "AssistantId": { + "$ref": "resource-schema.json#/properties/AssistantId" + } + }, + "required": [ + "AssistantId" + ] + } + }, + "delete": { + "permissions": [ + "wisdom:DeleteAssistantAssociation" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/wisdom/knowledgebase.json b/internal/aws/cfn/schemas/aws/wisdom/knowledgebase.json new file mode 100644 index 00000000..bab29302 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/wisdom/knowledgebase.json @@ -0,0 +1,206 @@ +{ + "typeName": "AWS::Wisdom::KnowledgeBase", + "description": "Definition of AWS::Wisdom::KnowledgeBase Resource Type", + "definitions": { + "AppIntegrationsConfiguration": { + "type": "object", + "properties": { + "ObjectFields": { + "type": "array", + "items": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + }, + "insertionOrder": false, + "maxItems": 100, + "minItems": 1 + }, + "AppIntegrationArn": { + "type": "string", + "maxLength": 2048, + "minLength": 1, + "pattern": "^arn:[a-z-]+?:[a-z-]+?:[a-z0-9-]*?:([0-9]{12})?:[a-zA-Z0-9-:/]+$" + } + }, + "required": [ + "AppIntegrationArn" + ], + "additionalProperties": false + }, + "KnowledgeBaseType": { + "type": "string", + "enum": [ + "EXTERNAL", + "CUSTOM" + ] + }, + "RenderingConfiguration": { + "type": "object", + "properties": { + "TemplateUri": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "ServerSideEncryptionConfiguration": { + "type": "object", + "properties": { + "KmsKeyId": { + "type": "string", + "maxLength": 4096, + "minLength": 1 + } + }, + "additionalProperties": false + }, + "SourceConfiguration": { + "type": "object", + "properties": { + "AppIntegrations": { + "$ref": "#/definitions/AppIntegrationsConfiguration" + } + }, + "oneOf": [ + { + "required": [ + "AppIntegrations" + ] + } + ], + "additionalProperties": false + }, + "Tag": { + "additionalProperties": false, + "properties": { + "Key": { + "maxLength": 128, + "minLength": 1, + "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$", + "type": "string" + }, + "Value": { + "maxLength": 256, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "Key", + "Value" + ], + "type": "object" + } + }, + "properties": { + "Description": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "KnowledgeBaseArn": { + "type": "string", + "pattern": "^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?$" + }, + "KnowledgeBaseId": { + "type": "string", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$" + }, + "KnowledgeBaseType": { + "$ref": "#/definitions/KnowledgeBaseType" + }, + "Name": { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "RenderingConfiguration": { + "$ref": "#/definitions/RenderingConfiguration" + }, + "ServerSideEncryptionConfiguration": { + "$ref": "#/definitions/ServerSideEncryptionConfiguration" + }, + "SourceConfiguration": { + "$ref": "#/definitions/SourceConfiguration" + }, + "Tags": { + "insertionOrder": false, + "uniqueItems": true, + "items": { + "$ref": "#/definitions/Tag" + }, + "type": "array" + } + }, + "required": [ + "KnowledgeBaseType", + "Name" + ], + "readOnlyProperties": [ + "/properties/KnowledgeBaseId", + "/properties/KnowledgeBaseArn" + ], + "createOnlyProperties": [ + "/properties/Description", + "/properties/KnowledgeBaseType", + "/properties/Name", + "/properties/ServerSideEncryptionConfiguration", + "/properties/SourceConfiguration", + "/properties/Tags" + ], + "primaryIdentifier": [ + "/properties/KnowledgeBaseId" + ], + "additionalIdentifiers": [ + [ + "/properties/KnowledgeBaseArn" + ] + ], + "additionalProperties": false, + "taggable": false, + "replacementStrategy": "delete_then_create", + "handlers": { + "create": { + "permissions": [ + "appflow:CreateFlow", + "appflow:DeleteFlow", + "appflow:StartFlow", + "appflow:TagResource", + "appflow:UseConnectorProfile", + "app-integrations:CreateDataIntegrationAssociation", + "app-integrations:GetDataIntegration", + "kms:DescribeKey", + "kms:CreateGrant", + "kms:ListGrants", + "wisdom:CreateKnowledgeBase", + "wisdom:TagResource" + ] + }, + "update": { + "permissions": [ + "wisdom:GetKnowledgeBase" + ] + }, + "delete": { + "permissions": [ + "appflow:DeleteFlow", + "appflow:StopFlow", + "app-integrations:DeleteDataIntegrationAssociation", + "wisdom:DeleteKnowledgeBase" + ] + }, + "list": { + "permissions": [ + "wisdom:ListKnowledgeBases" + ] + }, + "read": { + "permissions": [ + "wisdom:GetKnowledgeBase" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/workspaces/connectionalias.json b/internal/aws/cfn/schemas/aws/workspaces/connectionalias.json new file mode 100644 index 00000000..58eb0fc9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspaces/connectionalias.json @@ -0,0 +1,123 @@ +{ + "typeName": "AWS::WorkSpaces::ConnectionAlias", + "description": "Resource Type definition for AWS::WorkSpaces::ConnectionAlias", + "definitions": { + "ConnectionAliasAssociation": { + "type": "object", + "additionalProperties": false, + "properties": { + "AssociationStatus": { + "type": "string", + "enum": [ + "NOT_ASSOCIATED", + "PENDING_ASSOCIATION", + "ASSOCIATED_WITH_OWNER_ACCOUNT", + "ASSOCIATED_WITH_SHARED_ACCOUNT", + "PENDING_DISASSOCIATION" + ] + }, + "AssociatedAccountId": { + "type": "string" + }, + "ResourceId": { + "type": "string", + "pattern": ".+", + "minLength": 1, + "maxLength": 1000 + }, + "ConnectionIdentifier": { + "type": "string", + "maxLength": 20, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]+$" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "properties": { + "Associations": { + "type": "array", + "maxLength": 25, + "minLength": 1, + "items": { + "$ref": "#/definitions/ConnectionAliasAssociation" + } + }, + "AliasId": { + "type": "string", + "pattern": "^wsca-[0-9a-z]{8,63}$", + "maxLength": 68, + "minLength": 13 + }, + "ConnectionString": { + "type": "string", + "pattern": "^[.0-9a-zA-Z\\-]{1,255}$", + "minLength": 1, + "maxLength": 255 + }, + "ConnectionAliasState": { + "type": "string", + "enum": [ + "CREATING", + "CREATED", + "DELETING" + ] + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "ConnectionString" + ], + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/AliasId" + ], + "createOnlyProperties": [ + "/properties/ConnectionString", + "/properties/Tags" + ], + "readOnlyProperties": [ + "/properties/ConnectionAliasState", + "/properties/AliasId", + "/properties/Associations" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces:CreateConnectionAlias" + ] + }, + "read": { + "permissions": [ + "workspaces:DescribeConnectionAliases" + ] + }, + "delete": { + "permissions": [ + "workspaces:DeleteConnectionAlias" + ] + } + } +} diff --git a/internal/aws/cfn/schemas/aws/workspaces/workspace.json b/internal/aws/cfn/schemas/aws/workspaces/workspace.json new file mode 100644 index 00000000..c4a5167c --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspaces/workspace.json @@ -0,0 +1,91 @@ +{ + "typeName": "AWS::WorkSpaces::Workspace", + "description": "Resource Type definition for AWS::WorkSpaces::Workspace", + "additionalProperties": false, + "properties": { + "Id": { + "type": "string" + }, + "BundleId": { + "type": "string" + }, + "DirectoryId": { + "type": "string" + }, + "RootVolumeEncryptionEnabled": { + "type": "boolean" + }, + "Tags": { + "type": "array", + "uniqueItems": false, + "items": { + "$ref": "#/definitions/Tag" + } + }, + "UserName": { + "type": "string" + }, + "UserVolumeEncryptionEnabled": { + "type": "boolean" + }, + "VolumeEncryptionKey": { + "type": "string" + }, + "WorkspaceProperties": { + "$ref": "#/definitions/WorkspaceProperties" + } + }, + "definitions": { + "WorkspaceProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "ComputeTypeName": { + "type": "string" + }, + "RootVolumeSizeGib": { + "type": "integer" + }, + "RunningMode": { + "type": "string" + }, + "RunningModeAutoStopTimeoutInMinutes": { + "type": "integer" + }, + "UserVolumeSizeGib": { + "type": "integer" + } + } + }, + "Tag": { + "type": "object", + "additionalProperties": false, + "properties": { + "Key": { + "type": "string" + }, + "Value": { + "type": "string" + } + }, + "required": [ + "Value", + "Key" + ] + } + }, + "required": [ + "BundleId", + "DirectoryId", + "UserName" + ], + "createOnlyProperties": [ + "/properties/UserName" + ], + "primaryIdentifier": [ + "/properties/Id" + ], + "readOnlyProperties": [ + "/properties/Id" + ] +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/browsersettings.json b/internal/aws/cfn/schemas/aws/workspacesweb/browsersettings.json new file mode 100644 index 00000000..bc631ac8 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/browsersettings.json @@ -0,0 +1,159 @@ +{ + "typeName": "AWS::WorkSpacesWeb::BrowserSettings", + "description": "Definition of AWS::WorkSpacesWeb::BrowserSettings Resource Type", + "definitions": { + "EncryptionContextMap": { + "type": "object", + "patternProperties": { + "^[\\s\\S]*$": { + "type": "string", + "maxLength": 131072, + "minLength": 0, + "pattern": "^[\\s\\S]*$" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AdditionalEncryptionContext": { + "$ref": "#/definitions/EncryptionContextMap" + }, + "AssociatedPortalArns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "insertionOrder": false + }, + "BrowserPolicy": { + "type": "string", + "maxLength": 131072, + "minLength": 2, + "pattern": "\\{[\\S\\s]*\\}\\s*" + }, + "BrowserSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "CustomerManagedKey": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:kms:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:key\\/[a-zA-Z0-9-]+$" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0, + "insertionOrder": false + } + }, + "readOnlyProperties": [ + "/properties/AssociatedPortalArns", + "/properties/BrowserSettingsArn" + ], + "writeOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "createOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "primaryIdentifier": [ + "/properties/BrowserSettingsArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreateBrowserSettings", + "workspaces-web:GetBrowserSettings", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetBrowserSettings", + "workspaces-web:ListBrowserSettings", + "workspaces-web:ListTagsForResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "workspaces-web:UpdateBrowserSettings", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "workspaces-web:GetBrowserSettings", + "workspaces-web:ListBrowserSettings", + "workspaces-web:ListTagsForResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetBrowserSettings", + "workspaces-web:DeleteBrowserSettings", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListBrowserSettings" + ] + } + }, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": true, + "tagProperty": "/properties/Tags", + "tagUpdatable": true, + "taggable": true + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/identityprovider.json b/internal/aws/cfn/schemas/aws/workspacesweb/identityprovider.json new file mode 100644 index 00000000..81025855 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/identityprovider.json @@ -0,0 +1,128 @@ +{ + "typeName": "AWS::WorkSpacesWeb::IdentityProvider", + "description": "Definition of AWS::WorkSpacesWeb::IdentityProvider Resource Type", + "definitions": { + "IdentityProviderDetails": { + "type": "object", + "patternProperties": { + "^[\\s\\S]*$": { + "type": "string", + "maxLength": 131072, + "minLength": 0, + "pattern": "^[\\s\\S]*$" + } + }, + "additionalProperties": false + }, + "IdentityProviderType": { + "type": "string", + "enum": [ + "SAML", + "Facebook", + "Google", + "LoginWithAmazon", + "SignInWithApple", + "OIDC" + ] + } + }, + "properties": { + "IdentityProviderArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36}){2,}$" + }, + "IdentityProviderDetails": { + "$ref": "#/definitions/IdentityProviderDetails" + }, + "IdentityProviderName": { + "type": "string", + "maxLength": 32, + "minLength": 1, + "pattern": "^[^_][\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}][^_]+$" + }, + "IdentityProviderType": { + "$ref": "#/definitions/IdentityProviderType" + }, + "PortalArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + } + }, + "required": [ + "IdentityProviderDetails", + "IdentityProviderName", + "IdentityProviderType" + ], + "readOnlyProperties": [ + "/properties/IdentityProviderArn" + ], + "writeOnlyProperties": [ + "/properties/PortalArn" + ], + "createOnlyProperties": [ + "/properties/PortalArn" + ], + "primaryIdentifier": [ + "/properties/IdentityProviderArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreateIdentityProvider", + "workspaces-web:GetIdentityProvider", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetIdentityProvider", + "workspaces-web:ListIdentityProviders", + "workspaces-web:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "workspaces-web:UpdateIdentityProvider", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "workspaces-web:GetIdentityProvider", + "workspaces-web:ListIdentityProviders", + "workspaces-web:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetIdentityProvider", + "workspaces-web:DeleteIdentityProvider" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListIdentityProviders" + ], + "handlerSchema": { + "properties": { + "PortalArn": { + "$ref": "resource-schema.json#/properties/PortalArn" + } + }, + "required": [ + "PortalArn" + ] + } + } + }, + "sourceUrl": "https://github.com/shivankgoel/aws-cloudformation-resource-providers-workspaces-web", + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/ipaccesssettings.json b/internal/aws/cfn/schemas/aws/workspacesweb/ipaccesssettings.json new file mode 100644 index 00000000..3e8c8331 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/ipaccesssettings.json @@ -0,0 +1,204 @@ +{ + "typeName": "AWS::WorkSpacesWeb::IpAccessSettings", + "description": "Definition of AWS::WorkSpacesWeb::IpAccessSettings Resource Type", + "definitions": { + "EncryptionContextMap": { + "type": "object", + "patternProperties": { + "^[\\s\\S]*$": { + "type": "string", + "maxLength": 131072, + "minLength": 0, + "pattern": "^[\\s\\S]*$" + } + }, + "additionalProperties": false + }, + "IpRule": { + "type": "object", + "properties": { + "IpRange": { + "type": "string", + "pattern": "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(?:/([0-9]|[12][0-9]|3[0-2])|)$", + "description": "A single IP address or an IP address range in CIDR notation" + }, + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^.+$" + } + }, + "required": [ + "IpRange" + ], + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AdditionalEncryptionContext": { + "$ref": "#/definitions/EncryptionContextMap" + }, + "AssociatedPortalArns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "insertionOrder": false + }, + "CreationDate": { + "type": "string", + "format": "date-time" + }, + "CustomerManagedKey": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:kms:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:key\\/[a-zA-Z0-9-]+$" + }, + "Description": { + "type": "string", + "maxLength": 256, + "minLength": 1, + "pattern": "^.+$" + }, + "DisplayName": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^.+$" + }, + "IpAccessSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "IpRules": { + "type": "array", + "items": { + "$ref": "#/definitions/IpRule" + }, + "maxItems": 100, + "minItems": 1, + "insertionOrder": false + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0, + "insertionOrder": false + } + }, + "required": [ + "IpRules" + ], + "readOnlyProperties": [ + "/properties/AssociatedPortalArns", + "/properties/CreationDate", + "/properties/IpAccessSettingsArn" + ], + "writeOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "createOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "primaryIdentifier": [ + "/properties/IpAccessSettingsArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreateIpAccessSettings", + "workspaces-web:GetIpAccessSettings", + "workspaces-web:ListIpAccessSettings", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetIpAccessSettings", + "workspaces-web:ListIpAccessSettings", + "workspaces-web:ListTagsForResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "workspaces-web:UpdateIpAccessSettings", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "workspaces-web:GetIpAccessSettings", + "workspaces-web:ListIpAccessSettings", + "workspaces-web:ListTagsForResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetIpAccessSettings", + "workspaces-web:ListIpAccessSettings", + "workspaces-web:DeleteIpAccessSettings", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListIpAccessSettings" + ] + } + }, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": true, + "tagProperty": "/properties/Tags", + "tagUpdatable": true, + "taggable": true + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/networksettings.json b/internal/aws/cfn/schemas/aws/workspacesweb/networksettings.json new file mode 100644 index 00000000..19cfe3d7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/networksettings.json @@ -0,0 +1,142 @@ +{ + "typeName": "AWS::WorkSpacesWeb::NetworkSettings", + "description": "Definition of AWS::WorkSpacesWeb::NetworkSettings Resource Type", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AssociatedPortalArns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "insertionOrder": false + }, + "NetworkSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "SecurityGroupIds": { + "type": "array", + "items": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^[\\w+\\-]+$" + }, + "maxItems": 5, + "minItems": 1, + "insertionOrder": false + }, + "SubnetIds": { + "type": "array", + "items": { + "type": "string", + "maxLength": 32, + "minLength": 1, + "pattern": "^subnet-([0-9a-f]{8}|[0-9a-f]{17})$" + }, + "maxItems": 3, + "minItems": 2, + "insertionOrder": false + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0, + "insertionOrder": false + }, + "VpcId": { + "type": "string", + "maxLength": 255, + "minLength": 1, + "pattern": "^vpc-[0-9a-z]*$" + } + }, + "required": [ + "SecurityGroupIds", + "SubnetIds", + "VpcId" + ], + "readOnlyProperties": [ + "/properties/AssociatedPortalArns", + "/properties/NetworkSettingsArn" + ], + "primaryIdentifier": [ + "/properties/NetworkSettingsArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreateNetworkSettings", + "workspaces-web:GetNetworkSettings", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetNetworkSettings", + "workspaces-web:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "workspaces-web:UpdateNetworkSettings", + "workspaces-web:UpdateResource", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "workspaces-web:GetNetworkSettings", + "workspaces-web:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetNetworkSettings", + "workspaces-web:DeleteNetworkSettings" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListNetworkSettings" + ] + } + }, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": true, + "tagProperty": "/properties/Tags", + "tagUpdatable": true, + "taggable": true + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/portal.json b/internal/aws/cfn/schemas/aws/workspacesweb/portal.json new file mode 100644 index 00000000..dfefc5a7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/portal.json @@ -0,0 +1,295 @@ +{ + "typeName": "AWS::WorkSpacesWeb::Portal", + "description": "Definition of AWS::WorkSpacesWeb::Portal Resource Type", + "definitions": { + "AuthenticationType": { + "type": "string", + "enum": [ + "Standard", + "IAM_Identity_Center" + ] + }, + "BrowserType": { + "type": "string", + "enum": [ + "Chrome" + ] + }, + "EncryptionContextMap": { + "type": "object", + "patternProperties": { + "^[\\s\\S]*$": { + "type": "string", + "maxLength": 131072, + "minLength": 0, + "pattern": "^[\\s\\S]*$" + } + }, + "additionalProperties": false + }, + "PortalStatus": { + "type": "string", + "enum": [ + "Incomplete", + "Pending", + "Active" + ] + }, + "RendererType": { + "type": "string", + "enum": [ + "AppStream" + ] + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AdditionalEncryptionContext": { + "$ref": "#/definitions/EncryptionContextMap" + }, + "AuthenticationType": { + "$ref": "#/definitions/AuthenticationType" + }, + "BrowserSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "BrowserType": { + "$ref": "#/definitions/BrowserType" + }, + "CreationDate": { + "type": "string", + "format": "date-time" + }, + "CustomerManagedKey": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:kms:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:key\\/[a-zA-Z0-9-]+$" + }, + "DisplayName": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "pattern": "^.+$" + }, + "IpAccessSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "NetworkSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "PortalArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "PortalEndpoint": { + "type": "string", + "maxLength": 253, + "minLength": 1, + "pattern": "^[a-zA-Z0-9]?((?!-)([A-Za-z0-9-]*[A-Za-z0-9])\\.)+[a-zA-Z0-9]+$" + }, + "PortalStatus": { + "$ref": "#/definitions/PortalStatus" + }, + "RendererType": { + "$ref": "#/definitions/RendererType" + }, + "ServiceProviderSamlMetadata": { + "type": "string", + "maxLength": 204800, + "minLength": 0, + "pattern": "^.*$" + }, + "StatusReason": { + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": ".*" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0, + "insertionOrder": false + }, + "TrustStoreArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "UserAccessLoggingSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "UserSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + } + }, + "readOnlyProperties": [ + "/properties/BrowserType", + "/properties/CreationDate", + "/properties/PortalArn", + "/properties/PortalEndpoint", + "/properties/PortalStatus", + "/properties/RendererType", + "/properties/ServiceProviderSamlMetadata", + "/properties/StatusReason" + ], + "writeOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "createOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "primaryIdentifier": [ + "/properties/PortalArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreatePortal", + "workspaces-web:GetPortal", + "workspaces-web:GetPortalServiceProviderMetadata", + "workspaces-web:AssociateBrowserSettings", + "workspaces-web:AssociateIpAccessSettings", + "workspaces-web:AssociateNetworkSettings", + "workspaces-web:AssociateTrustStore", + "workspaces-web:AssociateUserAccessLoggingSettings", + "workspaces-web:AssociateUserSettings", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource", + "kms:CreateGrant", + "kms:GenerateDataKey", + "kms:Decrypt", + "ec2:CreateNetworkInterface", + "ec2:CreateNetworkInterfacePermission", + "ec2:DeleteNetworkInterface", + "ec2:DeleteNetworkInterfacePermission", + "ec2:ModifyNetworkInterfaceAttribute", + "kinesis:PutRecord", + "kinesis:PutRecords", + "kinesis:DescribeStreamSummary", + "sso:CreateManagedApplicationInstance", + "sso:DescribeRegisteredRegions" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetPortal", + "workspaces-web:GetPortalServiceProviderMetadata", + "workspaces-web:ListTagsForResource", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "workspaces-web:GetPortal", + "workspaces-web:GetPortalServiceProviderMetadata", + "workspaces-web:UpdatePortal", + "workspaces-web:AssociateBrowserSettings", + "workspaces-web:AssociateIpAccessSettings", + "workspaces-web:AssociateNetworkSettings", + "workspaces-web:AssociateTrustStore", + "workspaces-web:AssociateUserAccessLoggingSettings", + "workspaces-web:AssociateUserSettings", + "workspaces-web:DisassociateBrowserSettings", + "workspaces-web:DisassociateIpAccessSettings", + "workspaces-web:DisassociateNetworkSettings", + "workspaces-web:DisassociateTrustStore", + "workspaces-web:DisassociateUserAccessLoggingSettings", + "workspaces-web:DisassociateUserSettings", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "kms:CreateGrant", + "kms:Encrypt", + "kms:GenerateDataKey", + "kms:Decrypt", + "ec2:CreateNetworkInterface", + "ec2:CreateNetworkInterfacePermission", + "ec2:DeleteNetworkInterface", + "ec2:DeleteNetworkInterfacePermission", + "ec2:ModifyNetworkInterfaceAttribute", + "kinesis:PutRecord", + "kinesis:PutRecords", + "kinesis:DescribeStreamSummary", + "sso:CreateManagedApplicationInstance", + "sso:DeleteManagedApplicationInstance", + "sso:DescribeRegisteredRegions", + "sso:GetApplicationInstance", + "sso:ListApplicationInstances" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetPortal", + "workspaces-web:DeletePortal", + "workspaces-web:DisassociateBrowserSettings", + "workspaces-web:DisassociateIpAccessSettings", + "workspaces-web:DisassociateNetworkSettings", + "workspaces-web:DisassociateTrustStore", + "workspaces-web:DisassociateUserAccessLoggingSettings", + "workspaces-web:DisassociateUserSettings", + "kms:Decrypt", + "sso:DeleteManagedApplicationInstance" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListPortals", + "kms:Decrypt" + ] + } + }, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": true, + "tagProperty": "/properties/Tags", + "tagUpdatable": true, + "taggable": true + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/truststore.json b/internal/aws/cfn/schemas/aws/workspacesweb/truststore.json new file mode 100644 index 00000000..ef98a6be --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/truststore.json @@ -0,0 +1,124 @@ +{ + "typeName": "AWS::WorkSpacesWeb::TrustStore", + "description": "Definition of AWS::WorkSpacesWeb::TrustStore Resource Type", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AssociatedPortalArns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "insertionOrder": false + }, + "CertificateList": { + "type": "array", + "items": { + "type": "string" + }, + "insertionOrder": false + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0, + "insertionOrder": false + }, + "TrustStoreArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + } + }, + "required": [ + "CertificateList" + ], + "readOnlyProperties": [ + "/properties/AssociatedPortalArns", + "/properties/TrustStoreArn" + ], + "primaryIdentifier": [ + "/properties/TrustStoreArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreateTrustStore", + "workspaces-web:GetTrustStore", + "workspaces-web:GetTrustStoreCertificate", + "workspaces-web:ListTrustStoreCertificates", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetTrustStore", + "workspaces-web:GetTrustStoreCertificate", + "workspaces-web:ListTagsForResource", + "workspaces-web:ListTrustStoreCertificates" + ] + }, + "update": { + "permissions": [ + "workspaces-web:UpdateTrustStore", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "workspaces-web:GetTrustStore", + "workspaces-web:GetTrustStoreCertificate", + "workspaces-web:ListTagsForResource", + "workspaces-web:ListTrustStoreCertificates" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetTrustStore", + "workspaces-web:GetTrustStoreCertificate", + "workspaces-web:DeleteTrustStore" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListTrustStores", + "workspaces-web:ListTrustStoreCertificates" + ] + } + }, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": true, + "tagProperty": "/properties/Tags", + "tagUpdatable": true, + "taggable": true + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/useraccessloggingsettings.json b/internal/aws/cfn/schemas/aws/workspacesweb/useraccessloggingsettings.json new file mode 100644 index 00000000..cc90f6e9 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/useraccessloggingsettings.json @@ -0,0 +1,118 @@ +{ + "typeName": "AWS::WorkSpacesWeb::UserAccessLoggingSettings", + "description": "Definition of AWS::WorkSpacesWeb::UserAccessLoggingSettings Resource Type", + "definitions": { + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AssociatedPortalArns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "insertionOrder": false + }, + "KinesisStreamArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "arn:[\\w+=/,.@-]+:kinesis:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:stream/.+", + "description": "Kinesis stream ARN to which log events are published." + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0, + "insertionOrder": false + }, + "UserAccessLoggingSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + } + }, + "required": [ + "KinesisStreamArn" + ], + "readOnlyProperties": [ + "/properties/AssociatedPortalArns", + "/properties/UserAccessLoggingSettingsArn" + ], + "primaryIdentifier": [ + "/properties/UserAccessLoggingSettingsArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreateUserAccessLoggingSettings", + "workspaces-web:GetUserAccessLoggingSettings", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetUserAccessLoggingSettings", + "workspaces-web:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "workspaces-web:UpdateUserAccessLoggingSettings", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "workspaces-web:GetUserAccessLoggingSettings", + "workspaces-web:ListTagsForResource", + "kinesis:PutRecord", + "kinesis:PutRecords" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetUserAccessLoggingSettings", + "workspaces-web:DeleteUserAccessLoggingSettings" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListUserAccessLoggingSettings" + ] + } + }, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": true, + "tagProperty": "/properties/Tags", + "tagUpdatable": true, + "taggable": true + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/workspacesweb/usersettings.json b/internal/aws/cfn/schemas/aws/workspacesweb/usersettings.json new file mode 100644 index 00000000..ad1a75fe --- /dev/null +++ b/internal/aws/cfn/schemas/aws/workspacesweb/usersettings.json @@ -0,0 +1,252 @@ +{ + "typeName": "AWS::WorkSpacesWeb::UserSettings", + "description": "Definition of AWS::WorkSpacesWeb::UserSettings Resource Type", + "definitions": { + "CookieSpecification": { + "type": "object", + "properties": { + "Domain": { + "type": "string", + "maxLength": 253, + "minLength": 0, + "pattern": "^(\\.?)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)*[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$" + }, + "Name": { + "type": "string", + "maxLength": 4096, + "minLength": 0 + }, + "Path": { + "type": "string", + "maxLength": 2000, + "minLength": 0, + "pattern": "^/(\\S)*$" + } + }, + "required": [ + "Domain" + ], + "additionalProperties": false + }, + "CookieSynchronizationConfiguration": { + "type": "object", + "properties": { + "Allowlist": { + "type": "array", + "items": { + "$ref": "#/definitions/CookieSpecification" + }, + "maxItems": 10, + "minItems": 0, + "insertionOrder": false + }, + "Blocklist": { + "type": "array", + "items": { + "$ref": "#/definitions/CookieSpecification" + }, + "maxItems": 10, + "minItems": 0, + "insertionOrder": false + } + }, + "required": [ + "Allowlist" + ], + "additionalProperties": false + }, + "EnabledType": { + "type": "string", + "enum": [ + "Disabled", + "Enabled" + ] + }, + "EncryptionContextMap": { + "type": "object", + "patternProperties": { + "^[\\s\\S]*$": { + "type": "string", + "maxLength": 131072, + "minLength": 0, + "pattern": "^[\\s\\S]*$" + } + }, + "additionalProperties": false + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "maxLength": 128, + "minLength": 1, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + }, + "Value": { + "type": "string", + "maxLength": 256, + "minLength": 0, + "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + } + }, + "properties": { + "AdditionalEncryptionContext": { + "$ref": "#/definitions/EncryptionContextMap" + }, + "AssociatedPortalArns": { + "type": "array", + "items": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + }, + "insertionOrder": false + }, + "CookieSynchronizationConfiguration": { + "$ref": "#/definitions/CookieSynchronizationConfiguration" + }, + "CopyAllowed": { + "$ref": "#/definitions/EnabledType" + }, + "CustomerManagedKey": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:kms:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:key\\/[a-zA-Z0-9-]+$" + }, + "DisconnectTimeoutInMinutes": { + "type": "number", + "default": null, + "maximum": 600, + "minimum": 1 + }, + "DownloadAllowed": { + "$ref": "#/definitions/EnabledType" + }, + "IdleDisconnectTimeoutInMinutes": { + "type": "number", + "default": null, + "maximum": 60, + "minimum": 0 + }, + "PasteAllowed": { + "$ref": "#/definitions/EnabledType" + }, + "PrintAllowed": { + "$ref": "#/definitions/EnabledType" + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "maxItems": 200, + "minItems": 0, + "insertionOrder": false + }, + "UploadAllowed": { + "$ref": "#/definitions/EnabledType" + }, + "UserSettingsArn": { + "type": "string", + "maxLength": 2048, + "minLength": 20, + "pattern": "^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$" + } + }, + "required": [ + "CopyAllowed", + "DownloadAllowed", + "PasteAllowed", + "PrintAllowed", + "UploadAllowed" + ], + "readOnlyProperties": [ + "/properties/AssociatedPortalArns", + "/properties/UserSettingsArn" + ], + "writeOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "createOnlyProperties": [ + "/properties/AdditionalEncryptionContext", + "/properties/CustomerManagedKey" + ], + "primaryIdentifier": [ + "/properties/UserSettingsArn" + ], + "handlers": { + "create": { + "permissions": [ + "workspaces-web:CreateUserSettings", + "workspaces-web:GetUserSettings", + "workspaces-web:ListTagsForResource", + "workspaces-web:TagResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "read": { + "permissions": [ + "workspaces-web:GetUserSettings", + "workspaces-web:ListTagsForResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "update": { + "permissions": [ + "workspaces-web:UpdateUserSettings", + "workspaces-web:TagResource", + "workspaces-web:UntagResource", + "workspaces-web:GetUserSettings", + "workspaces-web:ListTagsForResource", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "delete": { + "permissions": [ + "workspaces-web:GetUserSettings", + "workspaces-web:DeleteUserSettings", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + }, + "list": { + "permissions": [ + "workspaces-web:ListUserSettings", + "kms:CreateGrant", + "kms:DescribeKey", + "kms:GenerateDataKey", + "kms:Decrypt" + ] + } + }, + "tagging": { + "cloudFormationSystemTags": false, + "tagOnCreate": true, + "tagProperty": "/properties/Tags", + "tagUpdatable": true, + "taggable": true + }, + "additionalProperties": false +} diff --git a/internal/aws/cfn/schemas/aws/xray/group.json b/internal/aws/cfn/schemas/aws/xray/group.json new file mode 100644 index 00000000..61e375b7 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/xray/group.json @@ -0,0 +1,114 @@ +{ + "typeName": "AWS::XRay::Group", + "description": "This schema provides construct and validation rules for AWS-XRay Group resource parameters.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "FilterExpression": { + "description": "The filter expression defining criteria by which to group traces.", + "type": "string" + }, + "GroupName": { + "description": "The case-sensitive name of the new group. Names must be unique.", + "type": "string", + "minLength": 1, + "maxLength": 32 + }, + "GroupARN": { + "description": "The ARN of the group that was generated on creation.", + "type": "string", + "minLength": 1, + "maxLength": 400 + }, + "InsightsConfiguration": { + "$ref": "#/definitions/InsightsConfiguration" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "definitions": { + "InsightsConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "InsightsEnabled": { + "description": "Set the InsightsEnabled value to true to enable insights or false to disable insights.", + "type": "boolean" + }, + "NotificationsEnabled": { + "description": "Set the NotificationsEnabled value to true to enable insights notifications. Notifications can only be enabled on a group with InsightsEnabled set to true.", + "type": "boolean" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag." + }, + "Value": { + "type": "string", + "description": "The value for the tag." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "required": [ + "GroupName" + ], + "handlers": { + "create": { + "permissions": [ + "xray:CreateGroup", + "xray:TagResource" + ] + }, + "read": { + "permissions": [ + "xray:GetGroup", + "xray:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "xray:UpdateGroup", + "xray:TagResource", + "xray:UntagResource", + "xray:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "xray:DeleteGroup" + ] + }, + "list": { + "permissions": [ + "xray:GetGroups", + "xray:ListTagsForResource" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/GroupARN" + ], + "readOnlyProperties": [ + "/properties/GroupARN" + ] +} diff --git a/internal/aws/cfn/schemas/aws/xray/resourcepolicy.json b/internal/aws/cfn/schemas/aws/xray/resourcepolicy.json new file mode 100644 index 00000000..41ba4a83 --- /dev/null +++ b/internal/aws/cfn/schemas/aws/xray/resourcepolicy.json @@ -0,0 +1,73 @@ +{ + "typeName": "AWS::XRay::ResourcePolicy", + "description": "This schema provides construct and validation rules for AWS-XRay Resource Policy resource parameters.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "PolicyName": { + "description": "The name of the resource policy. Must be unique within a specific AWS account.", + "type": "string", + "pattern": "[\\w+=,.@-]+", + "minLength": 1, + "maxLength": 128 + }, + "PolicyDocument": { + "description": "The resource policy document, which can be up to 5kb in size.", + "type": "string", + "minLength": 1, + "maxLength": 5120 + }, + "BypassPolicyLockoutCheck": { + "description": "A flag to indicate whether to bypass the resource policy lockout safety check", + "type": "boolean" + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/PolicyName" + ], + "createOnlyProperties": [ + "/properties/PolicyName" + ], + "writeOnlyProperties": [ + "/properties/BypassPolicyLockoutCheck" + ], + "handlers": { + "create": { + "permissions": [ + "xray:PutResourcePolicy", + "xray:ListResourcePolicies" + ] + }, + "read": { + "permissions": [ + "xray:ListResourcePolicies" + ] + }, + "update": { + "permissions": [ + "xray:PutResourcePolicy", + "xray:ListResourcePolicies" + ] + }, + "delete": { + "permissions": [ + "xray:DeleteResourcePolicy" + ] + }, + "list": { + "permissions": [ + "xray:ListResourcePolicies" + ] + } + }, + "required": [ + "PolicyName", + "PolicyDocument" + ], + "tagging": { + "taggable": false, + "tagOnCreate": false, + "tagUpdatable": false, + "cloudFormationSystemTags": false + } +} diff --git a/internal/aws/cfn/schemas/aws/xray/samplingrule.json b/internal/aws/cfn/schemas/aws/xray/samplingrule.json new file mode 100644 index 00000000..e8a8bdbc --- /dev/null +++ b/internal/aws/cfn/schemas/aws/xray/samplingrule.json @@ -0,0 +1,284 @@ +{ + "typeName": "AWS::XRay::SamplingRule", + "description": "This schema provides construct and validation rules for AWS-XRay SamplingRule resource parameters.", + "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "properties": { + "SamplingRule": { + "$ref": "#/definitions/SamplingRule" + }, + "SamplingRuleRecord": { + "$ref": "#/definitions/SamplingRuleRecord" + }, + "SamplingRuleUpdate": { + "$ref": "#/definitions/SamplingRuleUpdate" + }, + "RuleARN": { + "$ref": "#/definitions/RuleARN" + }, + "RuleName": { + "$ref": "#/definitions/RuleName" + }, + "Tags": { + "$ref": "#/definitions/Tags" + } + }, + "definitions": { + "SamplingRule": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "$comment": "String to string map", + "description": "Matches attributes derived from the request.", + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false + }, + "FixedRate": { + "description": "The percentage of matching requests to instrument, after the reservoir is exhausted.", + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "Host": { + "description": "Matches the hostname from a request URL.", + "type": "string", + "maxLength": 64 + }, + "HTTPMethod": { + "description": "Matches the HTTP method from a request URL.", + "type": "string", + "maxLength": 10 + }, + "Priority": { + "description": "The priority of the sampling rule.", + "type": "integer", + "minimum": 1, + "maximum": 9999 + }, + "ReservoirSize": { + "description": "A fixed number of matching requests to instrument per second, prior to applying the fixed rate. The reservoir is not used directly by services, but applies to all services using the rule collectively.", + "type": "integer", + "minimum": 0 + }, + "ResourceARN": { + "description": "Matches the ARN of the AWS resource on which the service runs.", + "type": "string", + "maxLength": 500 + }, + "RuleARN": { + "$ref": "#/definitions/RuleARN" + }, + "RuleName": { + "$ref": "#/definitions/RuleName" + }, + "ServiceName": { + "description": "Matches the name that the service uses to identify itself in segments.", + "type": "string", + "maxLength": 64 + }, + "ServiceType": { + "description": "Matches the origin that the service uses to identify its type in segments.", + "type": "string", + "maxLength": 64 + }, + "URLPath": { + "description": "Matches the path from a request URL.", + "type": "string", + "maxLength": 128 + }, + "Version": { + "description": "The version of the sampling rule format (1)", + "type": "integer", + "minimum": 1 + } + }, + "required": [ + "FixedRate", + "Host", + "HTTPMethod", + "Priority", + "ReservoirSize", + "ResourceARN", + "ServiceName", + "ServiceType", + "URLPath" + ] + }, + "SamplingRuleRecord": { + "type": "object", + "additionalProperties": false, + "properties": { + "CreatedAt": { + "description": "When the rule was created, in Unix time seconds.", + "type": "string" + }, + "ModifiedAt": { + "description": "When the rule was modified, in Unix time seconds.", + "type": "string" + }, + "SamplingRule": { + "$ref": "#/definitions/SamplingRule" + } + } + }, + "SamplingRuleUpdate": { + "type": "object", + "additionalProperties": false, + "properties": { + "Attributes": { + "$comment": "String to string map", + "description": "Matches attributes derived from the request.", + "type": "object", + "patternProperties": { + ".{1,}": { + "type": "string" + } + }, + "additionalProperties": false + }, + "FixedRate": { + "description": "The percentage of matching requests to instrument, after the reservoir is exhausted.", + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "Host": { + "description": "Matches the hostname from a request URL.", + "type": "string", + "maxLength": 64 + }, + "HTTPMethod": { + "description": "Matches the HTTP method from a request URL.", + "type": "string", + "maxLength": 10 + }, + "Priority": { + "description": "The priority of the sampling rule.", + "type": "integer", + "minimum": 1, + "maximum": 9999 + }, + "ReservoirSize": { + "description": "A fixed number of matching requests to instrument per second, prior to applying the fixed rate. The reservoir is not used directly by services, but applies to all services using the rule collectively.", + "type": "integer", + "minimum": 0 + }, + "ResourceARN": { + "description": "Matches the ARN of the AWS resource on which the service runs.", + "type": "string", + "maxLength": 500 + }, + "RuleARN": { + "$ref": "#/definitions/RuleARN" + }, + "RuleName": { + "$ref": "#/definitions/RuleName" + }, + "ServiceName": { + "description": "Matches the name that the service uses to identify itself in segments.", + "type": "string", + "maxLength": 64 + }, + "ServiceType": { + "description": "Matches the origin that the service uses to identify its type in segments.", + "type": "string", + "maxLength": 64 + }, + "URLPath": { + "description": "Matches the path from a request URL.", + "type": "string", + "maxLength": 128 + } + } + }, + "RuleName": { + "description": "The ARN of the sampling rule. Specify a rule by either name or ARN, but not both.", + "type": "string", + "minLength": 1, + "maxLength": 32 + }, + "RuleARN": { + "description": "The ARN of the sampling rule. Specify a rule by either name or ARN, but not both.", + "type": "string" + }, + "Tag": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "The key name of the tag." + }, + "Value": { + "type": "string", + "description": "The value for the tag." + } + }, + "required": [ + "Key", + "Value" + ], + "additionalProperties": false + }, + "Tags": { + "type": "array", + "insertionOrder": false, + "description": "An array of key-value pairs to apply to this resource.", + "items": { + "$ref": "#/definitions/Tag" + } + } + }, + "handlers": { + "create": { + "permissions": [ + "xray:CreateSamplingRule", + "xray:TagResource" + ] + }, + "read": { + "permissions": [ + "xray:GetSamplingRules", + "xray:ListTagsForResource" + ] + }, + "update": { + "permissions": [ + "xray:UpdateSamplingRule", + "xray:TagResource", + "xray:UntagResource", + "xray:ListTagsForResource" + ] + }, + "delete": { + "permissions": [ + "xray:DeleteSamplingRule" + ] + }, + "list": { + "permissions": [ + "xray:GetSamplingRules", + "xray:ListTagsForResource" + ] + } + }, + "additionalProperties": false, + "primaryIdentifier": [ + "/properties/RuleARN" + ], + "createOnlyProperties": [ + "/properties/SamplingRule/Version" + ], + "readOnlyProperties": [ + "/properties/RuleARN" + ], + "deprecatedProperties": [ + "/properties/RuleName", + "/properties/SamplingRuleRecord", + "/properties/SamplingRuleUpdate" + ] +} diff --git a/internal/cmd/build/pkl.go b/internal/cmd/build/pkl.go index 3d888a45..624893aa 100644 --- a/internal/cmd/build/pkl.go +++ b/internal/cmd/build/pkl.go @@ -25,10 +25,21 @@ var reservedNames = []string{ "UpdateReplacePolicy", } +type aliasType int + +const ( + MAP = iota + LISTING + STRINGS + TYPES + PRIMITIVE +) + type defAlias struct { - Name string - Values []string - IsMap bool + Name string + Values []string + Type aliasType + PrimitiveValue string } // Represents a definition property @@ -67,17 +78,47 @@ func fixPropName(propName string) string { return propName } +// printTypeAlias prints out a type alias, which +// might be String, an enum, a listing, or a map func printTypeAlias(alias *defAlias) { fmt.Println() fmt.Printf("typealias %s = ", alias.Name) - for i, v := range alias.Values { - if i != 0 { - fmt.Print("|") - } - fmt.Printf("\"%s\"", v) - } - if alias.IsMap { + + switch alias.Type { + case MAP: + // map (patternProperties) fmt.Print("Mapping") + case LISTING: + fmt.Print("Listing<") + // array + for i, v := range alias.Values { + if i != 0 { + fmt.Print("|") + } + fmt.Printf("%s", v) + } + fmt.Print(">") + case STRINGS: + if len(alias.Values) > 0 { + // enum + for i, v := range alias.Values { + if i != 0 { + fmt.Print("|") + } + fmt.Printf("\"%s\"", v) + } + } else { + fmt.Print("String") + } + case TYPES: + for i, v := range alias.Values { + if i != 0 { + fmt.Print("|") + } + fmt.Printf("%s", v) + } + case PRIMITIVE: + fmt.Print(alias.PrimitiveValue) } fmt.Print("\n") } @@ -101,10 +142,17 @@ func printCls(cls *pklDefClass) { fmt.Printf("}\n") } +func createAlias(defName string, propName string, cls *pklDefClass, typeName string) string { + aliasName := fmt.Sprintf("%s%s", defName, propName) + alias := &defAlias{Name: aliasName, PrimitiveValue: typeName, Type: PRIMITIVE} + cls.Aliases = append(cls.Aliases, alias) + return aliasName +} + // Returns the alias name and adds it to the class -func createTypeAlias(defName string, propName string, cls *pklDefClass, enum []any) string { +func createStringAlias(defName string, propName string, cls *pklDefClass, enum []any) string { aliasName := fmt.Sprintf("%s%s", defName, propName) - alias := &defAlias{Name: aliasName, Values: make([]string, 0)} + alias := &defAlias{Name: aliasName, Values: make([]string, 0), Type: STRINGS} for _, e := range enum { alias.Values = append(alias.Values, fmt.Sprintf("%s", e)) } @@ -124,19 +172,27 @@ func getPropType(defName string, propName string, if len(prop.Enum) > 0 { // Create a type alias // Example: typealias SSEAlgorithmTypes = "aws:kms"|"AES256"|"aws:kms:dsse" - aliasName := createTypeAlias(defName, propName, cls, prop.Enum) + aliasName := createStringAlias(defName, propName, cls, prop.Enum) retval = aliasName + "|Mapping" } else if len(prop.Pattern) > 0 { - // BUG: Multiline regex + // Multiline regex // AWS::Omics::AnnotationStore - // \n is getting converted to an actual newline + // \n was getting converted to an actual newline // "pattern": "^arn:([^:\n]*):([^:\n]*):([^:\n]*):([0-9]{12}):([^:\n]*)$" + prop.Pattern = strings.Replace(prop.Pattern, "\\n", "\\\\n", -1) retval = fmt.Sprintf("String(matches(Regex(#\"%s\"#)))|Mapping", prop.Pattern) } else { retval = "String|Mapping" } case "object": - retval = "Dynamic" + if prop.PatternProperties != nil { + // Create a type alias + alias := &defAlias{Name: shortName + defName + propName, Type: MAP} + cls.Aliases = append(cls.Aliases, alias) + retval = shortName + defName + propName + } else { + retval = "Dynamic" + } case "array": if prop.Items != nil { if prop.Items.Ref != "" { @@ -151,7 +207,7 @@ func getPropType(defName string, propName string, switch prop.Items.Type { case "string": if len(prop.Items.Enum) > 0 { - aliasName := createTypeAlias(defName, propName, cls, prop.Items.Enum) + aliasName := createStringAlias(defName, propName, cls, prop.Items.Enum) retval = fmt.Sprintf("Listing<%s|Mapping>", aliasName) } else { retval = "Listing" @@ -179,17 +235,36 @@ func getPropType(defName string, propName string, if prop.Ref != "" { clsName := getDefName(shortName, strings.Replace(prop.Ref, "#/definitions/", "", 1)) retval = clsName + } else if prop.PatternProperties != nil { + // Create a type alias + alias := &defAlias{Name: shortName + defName + propName, Type: MAP} + cls.Aliases = append(cls.Aliases, alias) + retval = shortName + defName + propName + } else if len(prop.OneOf) > 0 { + err := handleOfs(defName+propName, prop.OneOf, shortName, cls) + if err != nil { + return "", err + } + retval = shortName + defName + propName + } else if len(prop.AnyOf) > 0 { + err := handleOfs(defName+propName, prop.AnyOf, shortName, cls) + if err != nil { + return "", err + } + retval = shortName + defName + propName } else { - return "", fmt.Errorf("expected blank type to have $ref: %s", propName) + return "", fmt.Errorf("expected blank type to have $ref, patternProperties, anyOf, or oneOf: %s", propName) } } - if retval == "" { - return "", fmt.Errorf("unable to determine type for %s: %v", propName, prop.Type) - } + //if retval == "" { + // return "", fmt.Errorf("unable to determine type for %s: %v", propName, prop.Type) + //} + if !required { retval = fmt.Sprintf("(%s)?", retval) } + return retval, nil } @@ -203,6 +278,109 @@ func printDescription(description string, indent string) { } } +// handleOfs handles anyof, oneOf +func handleOfs(name string, of []*cfn.Prop, shortName string, defCls *pklDefClass) error { + // Make a new type alias for it + aliasName := shortName + name + alias := &defAlias{Name: aliasName, Values: make([]string, 0), Type: TYPES} + for i, xOf := range of { + // Create a new definition class for the type + if xOf.Title == "" { + xOf.Title = fmt.Sprintf("%d", i) + } + xOfCls, err := createDefinitionClass(name+xOf.Title, xOf, shortName) + if err != nil { + return fmt.Errorf("unable to create def class for xOf %s: %s", name, xOf.Title) + } + alias.Values = append(alias.Values, xOfCls.Name) + } + defCls.Aliases = append(defCls.Aliases, alias) + return nil +} + +// createDefinitionClass creates classes based on #definitions and on oneOf types +func createDefinitionClass(name string, def *cfn.Prop, shortName string) (*pklDefClass, error) { + cls := &pklDefClass{ + Name: getDefName(shortName, name), + Description: def.Description, + Props: make([]*pklDefProp, 0), + Aliases: make([]*defAlias, 0), + } + classes[name] = cls + + r := def.GetRequired() + + for propName, prop := range def.Properties { + required := slices.Contains(r, propName) + propType, err := getPropType(name, propName, prop, cls, required, shortName) + if err != nil { + return nil, err + } + cls.Props = append(cls.Props, &pklDefProp{Name: propName, Type: propType}) + } + + // patternProperties + if def.PatternProperties != nil { + // Create a type alias + alias := &defAlias{Name: shortName + name, Type: MAP} + cls.Aliases = append(cls.Aliases, alias) + } + + if def.Type == "object" && len(cls.Props) == 0 && def.PatternProperties == nil { + // Tags? + alias := &defAlias{Name: shortName + name, Type: PRIMITIVE, PrimitiveValue: "Dynamic"} + cls.Aliases = append(cls.Aliases, alias) + } + + if def.Type != "object" { + if len(cls.Props) > 0 { + return nil, fmt.Errorf("unexpected: defintion %s with type %s has %d props", + name, def.Type, len(cls.Props)) + } + + switch def.Type { + case "array": + aliasName := fmt.Sprintf("%s%s", shortName, name) + alias := &defAlias{Name: aliasName, Values: make([]string, 0), Type: LISTING} + propType, err := getPropType(name, "Array", def.Items, cls, false, shortName) + if err != nil { + return nil, fmt.Errorf("unable to create array alias for %s", name) + } + alias.Values = append(alias.Values, propType) + cls.Aliases = append(cls.Aliases, alias) + case "string": + // Create a type definition instead + createAlias(shortName+name, "", cls, "String|Mapping") + case "integer": + createAlias(shortName+name, "", cls, "Int|Mapping") + case "number": + createAlias(shortName+name, "", cls, "Number|Mapping") + case "boolean": + createAlias(shortName+name, "", cls, "Boolean|Mapping") + default: + if len(def.OneOf) > 0 { + err := handleOfs(name, def.OneOf, shortName, cls) + if err != nil { + return nil, err + } + } else if len(def.AnyOf) > 0 { + err := handleOfs(name, def.AnyOf, shortName, cls) + if err != nil { + return nil, err + } + } + + if len(def.AllOf) > 0 { + return nil, fmt.Errorf("allOf unsupported: %s", name) + } + + // Something else we missed? + return nil, fmt.Errorf("unable to create class for definition %s", name) + } + } + return cls, nil +} + func generatePklClass(typeName string) error { schema, err := getSchema(typeName) if err != nil { @@ -226,50 +404,7 @@ func generatePklClass(typeName string) error { // Iterate over definitions, creating a class for each one for name, def := range schema.Definitions { - - cls := &pklDefClass{ - Name: getDefName(shortName, name), - Description: def.Description, - Props: make([]*pklDefProp, 0), - Aliases: make([]*defAlias, 0), - } - classes[name] = cls - - r := def.GetRequired() - - for propName, prop := range def.Properties { - required := slices.Contains(r, propName) - propType, err := getPropType(name, propName, prop, cls, required, shortName) - if err != nil { - return err - } - cls.Props = append(cls.Props, &pklDefProp{Name: propName, Type: propType}) - } - - if len(cls.Props) == 0 && def.PatternProperties != nil { - // Create a type alias - alias := &defAlias{Name: shortName + name, IsMap: true} - cls.Aliases = append(cls.Aliases, alias) - } - - // Descriptions should all have type "object" but some of - // them are primitive types. - if def.Type != "object" { - if len(cls.Props) > 0 { - return fmt.Errorf("unexpected: defintion %s with type %s has %d props", - name, def.Type, len(cls.Props)) - } - - if def.Type == "string" { - if len(def.Enum) == 0 { - return fmt.Errorf("unexpected: definition %s has no enum", name) - } - // Create a type definition instead - createTypeAlias(shortName+name, "", cls, def.Enum) - } else { - return fmt.Errorf("unable to create class for definition %s", name) - } - } + createDefinitionClass(name, def, shortName) } // Print out each of the classes diff --git a/pkl/aws/accessanalyzer/analyzer.pkl b/pkl/aws/accessanalyzer/analyzer.pkl index cfdd0434..4ed781e7 100644 --- a/pkl/aws/accessanalyzer/analyzer.pkl +++ b/pkl/aws/accessanalyzer/analyzer.pkl @@ -5,6 +5,12 @@ module aws.accessanalyzer.analyzer import "../../cloudformation.pkl" +/// A key-value pair to associate with a resource. +open class AnalyzerTag { + Key: String|Mapping + Value: String|Mapping +} + /// The Configuration for Unused Access Analyzer open class AnalyzerUnusedAccessConfiguration { UnusedAccessAge: (Int|Mapping)? @@ -25,12 +31,6 @@ open class AnalyzerFilter { Neq: (Listing)? } -/// A key-value pair to associate with a resource. -open class AnalyzerTag { - Key: String|Mapping - Value: String|Mapping -} - /// The AWS::AccessAnalyzer::Analyzer type specifies an analyzer of the user's account open class Analyzer extends cloudformation.Resource { diff --git a/pkl/aws/acmpca/certificate.pkl b/pkl/aws/acmpca/certificate.pkl index 95ce368c..ed3bb907 100644 --- a/pkl/aws/acmpca/certificate.pkl +++ b/pkl/aws/acmpca/certificate.pkl @@ -5,74 +5,104 @@ module aws.acmpca.certificate import "../../cloudformation.pkl" -/// -open class CertificateCertificatePolicyList { -} +typealias CertificateDnsName = String|Mapping -/// String that contains X.509 UniformResourceIdentifier information. -open class CertificateUniformResourceIdentifier { -} -/// -open class CertificateExtendedKeyUsageList { +/// Defines the X.509 ``CertificatePolicies`` extension. +open class CertificatePolicyInformation { + CertPolicyId: CertificateCustomObjectIdentifier + PolicyQualifiers: (CertificatePolicyQualifierInfoList)? } -/// Array of X.509 extensions for a certificate. -open class CertificateCustomExtensionList { +/// Modifies the ``CertPolicyId`` of a ``PolicyInformation`` object with a qualifier. AWS Private CA supports the certification practice statement (CPS) qualifier. +open class CertificatePolicyQualifierInfo { + PolicyQualifierId: String|Mapping + Qualifier: CertificateQualifier } -/// -open class CertificatePolicyQualifierInfoList { +/// Contains information about the certificate subject. The ``Subject`` field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The ``Subject``must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate. +open class CertificateSubject { + Country: (String|Mapping)? + Organization: (String|Mapping)? + GivenName: (String|Mapping)? + Initials: (String|Mapping)? + Pseudonym: (String|Mapping)? + DistinguishedNameQualifier: (String|Mapping)? + Locality: (String|Mapping)? + Title: (String|Mapping)? + Surname: (String|Mapping)? + GenerationQualifier: (String|Mapping)? + SerialNumber: (String|Mapping)? + CustomAttributes: (CertificateCustomAttributeList)? + OrganizationalUnit: (String|Mapping)? + State: (String|Mapping)? + CommonName: (String|Mapping)? } -/// Defines a custom ASN.1 X.400 ``GeneralName`` using an object identifier (OID) and value. The OID must satisfy the regular expression shown below. For more information, see NIST's definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier). -open class CertificateOtherName { - TypeId: CertificateCustomObjectIdentifier - Value: String|Mapping +/// Defines one or more purposes for which the key contained in the certificate can be used. Default value for each option is false. +open class CertificateKeyUsage { + KeyEncipherment: (Boolean|Mapping)? + DataEncipherment: (Boolean|Mapping)? + KeyAgreement: (Boolean|Mapping)? + CRLSign: (Boolean|Mapping)? + DecipherOnly: (Boolean|Mapping)? + DigitalSignature: (Boolean|Mapping)? + NonRepudiation: (Boolean|Mapping)? + KeyCertSign: (Boolean|Mapping)? + EncipherOnly: (Boolean|Mapping)? } -/// Specifies the X.509 extension information for a certificate. -/// -/// Extensions present in ``CustomExtensions`` follow the ``ApiPassthrough`` [template rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations). -open class CertificateCustomExtension { - Critical: (Boolean|Mapping)? - ObjectIdentifier: CertificateCustomObjectIdentifier - Value: String|Mapping +typealias CertificateCustomAttributeList = Listing<(CertificateCustomAttribute)?> + + +typealias CertificateIpAddress = String|Mapping + + +/// Defines a ``PolicyInformation`` qualifier. AWS Private CA supports the [certification practice statement (CPS) qualifier](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.4) defined in RFC 5280. +open class CertificateQualifier { + CpsUri: String|Mapping } /// Describes an ASN.1 X.400 ``GeneralName`` as defined in [RFC 5280](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280). Only one of the following naming options should be provided. Providing more than one option results in an ``InvalidArgsException`` error. open class CertificateGeneralName { - OtherName: (CertificateOtherName)? - Rfc822Name: (CertificateRfc822Name)? DnsName: (CertificateDnsName)? DirectoryName: (CertificateSubject)? EdiPartyName: (CertificateEdiPartyName)? UniformResourceIdentifier: (CertificateUniformResourceIdentifier)? IpAddress: (CertificateIpAddress)? RegisteredId: (CertificateCustomObjectIdentifier)? + OtherName: (CertificateOtherName)? + Rfc822Name: (CertificateRfc822Name)? } -/// Defines a ``PolicyInformation`` qualifier. AWS Private CA supports the [certification practice statement (CPS) qualifier](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.4) defined in RFC 5280. -open class CertificateQualifier { - CpsUri: String|Mapping -} +typealias CertificateExtendedKeyUsageList = Listing<(CertificateExtendedKeyUsage)?> -/// Array of X.500 attribute type and value. CustomAttributes cannot be used along with pre-defined attributes. -open class CertificateCustomAttributeList { -} -/// Defines the X.500 relative distinguished name (RDN). -open class CertificateCustomAttribute { - ObjectIdentifier: CertificateCustomObjectIdentifier +typealias CertificateCustomExtensionList = Listing<(CertificateCustomExtension)?> + + +typealias CertificateUniformResourceIdentifier = String|Mapping + + +typealias CertificatePolicyQualifierInfoList = Listing<(CertificatePolicyQualifierInfo)?> + + +/// Defines a custom ASN.1 X.400 ``GeneralName`` using an object identifier (OID) and value. The OID must satisfy the regular expression shown below. For more information, see NIST's definition of [Object Identifier (OID)](https://docs.aws.amazon.com/https://csrc.nist.gov/glossary/term/Object_Identifier). +open class CertificateOtherName { + TypeId: CertificateCustomObjectIdentifier Value: String|Mapping } -/// Contains X.509 certificate information to be placed in an issued certificate. An ``APIPassthrough`` or ``APICSRPassthrough`` template variant must be selected, or else this parameter is ignored. -/// -/// If conflicting or duplicate certificate information is supplied from other sources, AWS Private CA applies [order of operation rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations) to determine what information is used. -open class CertificateApiPassthrough { - Extensions: (CertificateExtensions)? - Subject: (CertificateSubject)? +/// Describes an Electronic Data Interchange (EDI) entity as described in as defined in [Subject Alternative Name](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) in RFC 5280. +open class CertificateEdiPartyName { + PartyName: String|Mapping + NameAssigner: String|Mapping +} + +/// Specifies additional purposes for which the certified public key may be used other than basic purposes indicated in the ``KeyUsage`` extension. +open class CertificateExtendedKeyUsage { + ExtendedKeyUsageType: (String|Mapping)? + ExtendedKeyUsageObjectIdentifier: (CertificateCustomObjectIdentifier)? } /// Length of time for which the certificate issued by your private certificate authority (CA), or by the private CA itself, is valid in days, months, or years. You can issue a certificate by calling the ``IssueCertificate`` operation. @@ -81,27 +111,27 @@ open class CertificateValidity { Type: String|Mapping } -/// Defines one or more purposes for which the key contained in the certificate can be used. Default value for each option is false. -open class CertificateKeyUsage { - EncipherOnly: (Boolean|Mapping)? - DecipherOnly: (Boolean|Mapping)? - DigitalSignature: (Boolean|Mapping)? - NonRepudiation: (Boolean|Mapping)? - KeyEncipherment: (Boolean|Mapping)? - CRLSign: (Boolean|Mapping)? - DataEncipherment: (Boolean|Mapping)? - KeyAgreement: (Boolean|Mapping)? - KeyCertSign: (Boolean|Mapping)? -} +typealias CertificateArn = String|Mapping -/// Modifies the ``CertPolicyId`` of a ``PolicyInformation`` object with a qualifier. AWS Private CA supports the certification practice statement (CPS) qualifier. -open class CertificatePolicyQualifierInfo { - PolicyQualifierId: String|Mapping - Qualifier: CertificateQualifier + +/// Defines the X.500 relative distinguished name (RDN). +open class CertificateCustomAttribute { + ObjectIdentifier: CertificateCustomObjectIdentifier + Value: String|Mapping } -/// String that contains X.509 ObjectIdentifier information. -open class CertificateCustomObjectIdentifier { +typealias CertificateCertificatePolicyList = Listing<(CertificatePolicyInformation)?> + + +typealias CertificateCustomObjectIdentifier = String|Mapping + + +/// Contains X.509 certificate information to be placed in an issued certificate. An ``APIPassthrough`` or ``APICSRPassthrough`` template variant must be selected, or else this parameter is ignored. +/// +/// If conflicting or duplicate certificate information is supplied from other sources, AWS Private CA applies [order of operation rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations) to determine what information is used. +open class CertificateApiPassthrough { + Extensions: (CertificateExtensions)? + Subject: (CertificateSubject)? } /// Contains X.509 extension information for a certificate. @@ -113,61 +143,19 @@ open class CertificateExtensions { CertificatePolicies: (CertificateCertificatePolicyList)? } -/// Contains information about the certificate subject. The ``Subject`` field in the certificate identifies the entity that owns or controls the public key in the certificate. The entity can be a user, computer, device, or service. The ``Subject``must contain an X.500 distinguished name (DN). A DN is a sequence of relative distinguished names (RDNs). The RDNs are separated by commas in the certificate. -open class CertificateSubject { - State: (String|Mapping)? - GivenName: (String|Mapping)? - Initials: (String|Mapping)? - Country: (String|Mapping)? - OrganizationalUnit: (String|Mapping)? - DistinguishedNameQualifier: (String|Mapping)? - Organization: (String|Mapping)? - CommonName: (String|Mapping)? - CustomAttributes: (CertificateCustomAttributeList)? - SerialNumber: (String|Mapping)? - Locality: (String|Mapping)? - Title: (String|Mapping)? - Surname: (String|Mapping)? - Pseudonym: (String|Mapping)? - GenerationQualifier: (String|Mapping)? -} - -/// String that contains X.509 Rfc822Name information. -open class CertificateRfc822Name { -} - -/// String that contains X.509 DnsName information. -open class CertificateDnsName { -} - -/// String that contains X.509 IpAddress information. -open class CertificateIpAddress { -} +typealias CertificateRfc822Name = String|Mapping -/// Specifies additional purposes for which the certified public key may be used other than basic purposes indicated in the ``KeyUsage`` extension. -open class CertificateExtendedKeyUsage { - ExtendedKeyUsageType: (String|Mapping)? - ExtendedKeyUsageObjectIdentifier: (CertificateCustomObjectIdentifier)? -} -/// Defines the X.509 ``CertificatePolicies`` extension. -open class CertificatePolicyInformation { - CertPolicyId: CertificateCustomObjectIdentifier - PolicyQualifiers: (CertificatePolicyQualifierInfoList)? -} +typealias CertificateGeneralNameList = Listing<(CertificateGeneralName)?> -/// Describes an Electronic Data Interchange (EDI) entity as described in as defined in [Subject Alternative Name](https://docs.aws.amazon.com/https://datatracker.ietf.org/doc/html/rfc5280) in RFC 5280. -open class CertificateEdiPartyName { - PartyName: String|Mapping - NameAssigner: String|Mapping -} -/// -open class CertificateArn { -} - -/// -open class CertificateGeneralNameList { +/// Specifies the X.509 extension information for a certificate. +/// +/// Extensions present in ``CustomExtensions`` follow the ``ApiPassthrough`` [template rules](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html#template-order-of-operations). +open class CertificateCustomExtension { + Critical: (Boolean|Mapping)? + ObjectIdentifier: CertificateCustomObjectIdentifier + Value: String|Mapping } /// The ``AWS::ACMPCA::Certificate`` resource is used to issue a certificate using your private certificate authority. For more information, see the [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html) action. @@ -179,21 +167,12 @@ open class Certificate extends cloudformation.Resource { /// The Amazon Resource Name (ARN) for the private CA issues the certificate. hidden CertificateAuthorityArn: CertificateArn - /// Specifies X.509 certificate information to be included in the issued certificate. An ``APIPassthrough`` or ``APICSRPassthrough`` template variant must be selected, or else this parameter is ignored. - hidden ApiPassthrough: (CertificateApiPassthrough)? - /// The name of the algorithm that will be used to sign the certificate to be issued. /// /// This parameter should not be confused with the ``SigningAlgorithm`` parameter used to sign a CSR in the ``CreateCertificateAuthority`` action. /// The specified signing algorithm family (RSA or ECDSA) must match the algorithm family of the CA's secret key. hidden SigningAlgorithm: String|Mapping - /// Specifies a custom configuration template to use when issuing a certificate. If this parameter is not provided, PCAshort defaults to the ``EndEntityCertificate/V1`` template. For more information about PCAshort templates, see [Using Templates](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html). - hidden TemplateArn: (CertificateArn)? - - /// The period of time during which the certificate will be valid. - hidden Validity: CertificateValidity - /// Information describing the start of the validity period of the certificate. This parameter sets the ?Not Before" date for the certificate. /// /// By default, when issuing a certificate, PCAshort sets the "Not Before" date to the issuance time minus 60 minutes. This compensates for clock inconsistencies across computer systems. The ``ValidityNotBefore`` parameter can be used to customize the ?Not Before? value. @@ -201,17 +180,26 @@ open class Certificate extends cloudformation.Resource { /// The ``ValidityNotBefore`` value is expressed as an explicit date and time, using the ``Validity`` type value ``ABSOLUTE``. hidden ValidityNotBefore: (CertificateValidity)? + /// Specifies X.509 certificate information to be included in the issued certificate. An ``APIPassthrough`` or ``APICSRPassthrough`` template variant must be selected, or else this parameter is ignored. + hidden ApiPassthrough: (CertificateApiPassthrough)? + /// The certificate signing request (CSR) for the certificate. hidden CertificateSigningRequest: String|Mapping + /// Specifies a custom configuration template to use when issuing a certificate. If this parameter is not provided, PCAshort defaults to the ``EndEntityCertificate/V1`` template. For more information about PCAshort templates, see [Using Templates](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html). + hidden TemplateArn: (CertificateArn)? + + /// The period of time during which the certificate will be valid. + hidden Validity: CertificateValidity + Properties { ["CertificateAuthorityArn"] = if (CertificateAuthorityArn == null) null else CertificateAuthorityArn - ["ApiPassthrough"] = if (ApiPassthrough == null) null else ApiPassthrough ["SigningAlgorithm"] = if (SigningAlgorithm == null) null else SigningAlgorithm - ["TemplateArn"] = if (TemplateArn == null) null else TemplateArn - ["Validity"] = if (Validity == null) null else Validity ["ValidityNotBefore"] = if (ValidityNotBefore == null) null else ValidityNotBefore + ["ApiPassthrough"] = if (ApiPassthrough == null) null else ApiPassthrough ["CertificateSigningRequest"] = if (CertificateSigningRequest == null) null else CertificateSigningRequest + ["TemplateArn"] = if (TemplateArn == null) null else TemplateArn + ["Validity"] = if (Validity == null) null else Validity } } diff --git a/pkl/aws/acmpca/certificateauthority.pkl b/pkl/aws/acmpca/certificateauthority.pkl index 44eac035..4b80c9b9 100644 --- a/pkl/aws/acmpca/certificateauthority.pkl +++ b/pkl/aws/acmpca/certificateauthority.pkl @@ -5,6 +5,41 @@ module aws.acmpca.certificateauthority import "../../cloudformation.pkl" +/// +open class CertificateAuthorityTag { + Key: (String|Mapping)? + Value: (String|Mapping)? +} + +typealias CertificateAuthorityDnsName = String|Mapping + + +typealias CertificateAuthorityIpAddress = String|Mapping + + +/// Structure that contains X.509 GeneralName information. Assign one and ONLY one field. +open class CertificateAuthorityGeneralName { + UniformResourceIdentifier: (CertificateAuthorityUniformResourceIdentifier)? + IpAddress: (CertificateAuthorityIpAddress)? + RegisteredId: (CertificateAuthorityCustomObjectIdentifier)? + OtherName: (CertificateAuthorityOtherName)? + Rfc822Name: (CertificateAuthorityRfc822Name)? + DnsName: (CertificateAuthorityDnsName)? + DirectoryName: (CertificateAuthoritySubject)? + EdiPartyName: (CertificateAuthorityEdiPartyName)? +} + +/// Configures the default behavior of the CRL Distribution Point extension for certificates issued by your certificate authority +open class CertificateAuthorityCrlDistributionPointExtensionConfiguration { + OmitExtension: Boolean|Mapping +} + +/// Structure that contains X.509 AccessMethod information. Assign one and ONLY one field. +open class CertificateAuthorityAccessMethod { + CustomObjectIdentifier: (CertificateAuthorityCustomObjectIdentifier)? + AccessMethodType: (CertificateAuthorityAccessMethodType)? +} + /// Your certificate authority can create and maintain a certificate revocation list (CRL). A CRL contains information about certificates that have been revoked. open class CertificateAuthorityCrlConfiguration { ExpirationInDays: (Int|Mapping)? @@ -15,131 +50,84 @@ open class CertificateAuthorityCrlConfiguration { Enabled: (Boolean|Mapping)? } -/// String that contains X.509 DnsName information. -open class CertificateAuthorityDnsName { -} +typealias CertificateAuthorityArn = String|Mapping -/// Structure that contains X.509 EdiPartyName information. -open class CertificateAuthorityEdiPartyName { - PartyName: String|Mapping - NameAssigner: String|Mapping -} -/// String that contains X.509 IpAddress information. -open class CertificateAuthorityIpAddress { +/// Certificate Authority revocation information. +open class CertificateAuthorityRevocationConfiguration { + OcspConfiguration: (CertificateAuthorityOcspConfiguration)? + CrlConfiguration: (CertificateAuthorityCrlConfiguration)? } -/// Structure that contains X.509 AccessDescription information. -open class CertificateAuthorityAccessDescription { - AccessLocation: CertificateAuthorityGeneralName - AccessMethod: CertificateAuthorityAccessMethod +typealias CertificateAuthorityAccessMethodType = String|Mapping + + +/// Helps to configure online certificate status protocol (OCSP) responder for your certificate authority +open class CertificateAuthorityOcspConfiguration { + Enabled: (Boolean|Mapping)? + OcspCustomCname: (String|Mapping)? } /// Structure that contains X.500 distinguished name information for your CA. open class CertificateAuthoritySubject { OrganizationalUnit: (String|Mapping)? - DistinguishedNameQualifier: (String|Mapping)? Locality: (String|Mapping)? + Surname: (String|Mapping)? + DistinguishedNameQualifier: (String|Mapping)? + State: (String|Mapping)? + CommonName: (String|Mapping)? + Country: (String|Mapping)? GivenName: (String|Mapping)? Initials: (String|Mapping)? - CustomAttributes: (CertificateAuthorityCustomAttributeList)? - State: (String|Mapping)? - Pseudonym: (String|Mapping)? + GenerationQualifier: (String|Mapping)? Organization: (String|Mapping)? - CommonName: (String|Mapping)? SerialNumber: (String|Mapping)? Title: (String|Mapping)? - Surname: (String|Mapping)? - Country: (String|Mapping)? - GenerationQualifier: (String|Mapping)? + Pseudonym: (String|Mapping)? + CustomAttributes: (CertificateAuthorityCustomAttributeList)? } -/// String that contains X.509 UniformResourceIdentifier information. -open class CertificateAuthorityUniformResourceIdentifier { +typealias CertificateAuthorityCustomObjectIdentifier = String|Mapping + + +typealias CertificateAuthorityRfc822Name = String|Mapping + + +/// Structure that contains X.509 EdiPartyName information. +open class CertificateAuthorityEdiPartyName { + PartyName: String|Mapping + NameAssigner: String|Mapping } +typealias CertificateAuthorityUniformResourceIdentifier = String|Mapping + + /// Structure that contains X.500 attribute type and value. open class CertificateAuthorityCustomAttribute { ObjectIdentifier: CertificateAuthorityCustomObjectIdentifier Value: String|Mapping } -/// -open class CertificateAuthorityTag { - Key: (String|Mapping)? - Value: (String|Mapping)? +/// Structure that contains X.509 OtherName information. +open class CertificateAuthorityOtherName { + TypeId: CertificateAuthorityCustomObjectIdentifier + Value: String|Mapping } -/// Array of X.500 attribute type and value. CustomAttributes cannot be used along with pre-defined attributes. -open class CertificateAuthorityCustomAttributeList { -} +typealias CertificateAuthoritySubjectInformationAccess = Listing<(CertificateAuthorityAccessDescription)?> -/// Configures the default behavior of the CRL Distribution Point extension for certificates issued by your certificate authority -open class CertificateAuthorityCrlDistributionPointExtensionConfiguration { - OmitExtension: Boolean|Mapping -} - -/// Certificate Authority revocation information. -open class CertificateAuthorityRevocationConfiguration { - CrlConfiguration: (CertificateAuthorityCrlConfiguration)? - OcspConfiguration: (CertificateAuthorityOcspConfiguration)? -} /// Structure that contains X.509 KeyUsage information. open class CertificateAuthorityKeyUsage { - CRLSign: (Boolean|Mapping)? + DecipherOnly: (Boolean|Mapping)? + DigitalSignature: (Boolean|Mapping)? NonRepudiation: (Boolean|Mapping)? - KeyAgreement: (Boolean|Mapping)? + DataEncipherment: (Boolean|Mapping)? KeyCertSign: (Boolean|Mapping)? EncipherOnly: (Boolean|Mapping)? - DecipherOnly: (Boolean|Mapping)? - DigitalSignature: (Boolean|Mapping)? KeyEncipherment: (Boolean|Mapping)? - DataEncipherment: (Boolean|Mapping)? -} - -/// String that contains X.509 ObjectIdentifier information. -open class CertificateAuthorityCustomObjectIdentifier { -} - -/// Pre-defined enum string for X.509 AccessMethod ObjectIdentifiers. -open class CertificateAuthorityAccessMethodType { -} - -/// -open class CertificateAuthorityArn { -} - -/// Structure that contains X.509 GeneralName information. Assign one and ONLY one field. -open class CertificateAuthorityGeneralName { - OtherName: (CertificateAuthorityOtherName)? - Rfc822Name: (CertificateAuthorityRfc822Name)? - DnsName: (CertificateAuthorityDnsName)? - DirectoryName: (CertificateAuthoritySubject)? - EdiPartyName: (CertificateAuthorityEdiPartyName)? - UniformResourceIdentifier: (CertificateAuthorityUniformResourceIdentifier)? - IpAddress: (CertificateAuthorityIpAddress)? - RegisteredId: (CertificateAuthorityCustomObjectIdentifier)? -} - -/// String that contains X.509 Rfc822Name information. -open class CertificateAuthorityRfc822Name { -} - -/// Structure that contains X.509 AccessMethod information. Assign one and ONLY one field. -open class CertificateAuthorityAccessMethod { - CustomObjectIdentifier: (CertificateAuthorityCustomObjectIdentifier)? - AccessMethodType: (CertificateAuthorityAccessMethodType)? -} - -/// Structure that contains X.509 OtherName information. -open class CertificateAuthorityOtherName { - TypeId: CertificateAuthorityCustomObjectIdentifier - Value: String|Mapping -} - -/// Array of X.509 AccessDescription. -open class CertificateAuthoritySubjectInformationAccess { + KeyAgreement: (Boolean|Mapping)? + CRLSign: (Boolean|Mapping)? } /// Structure that contains CSR pass though extensions information. @@ -148,12 +136,15 @@ open class CertificateAuthorityCsrExtensions { SubjectInformationAccess: (CertificateAuthoritySubjectInformationAccess)? } -/// Helps to configure online certificate status protocol (OCSP) responder for your certificate authority -open class CertificateAuthorityOcspConfiguration { - Enabled: (Boolean|Mapping)? - OcspCustomCname: (String|Mapping)? +/// Structure that contains X.509 AccessDescription information. +open class CertificateAuthorityAccessDescription { + AccessLocation: CertificateAuthorityGeneralName + AccessMethod: CertificateAuthorityAccessMethod } +typealias CertificateAuthorityCustomAttributeList = Listing<(CertificateAuthorityCustomAttribute)?> + + /// Private certificate authority. open class CertificateAuthority extends cloudformation.Resource { @@ -163,11 +154,20 @@ open class CertificateAuthority extends cloudformation.Resource { /// The type of the certificate authority. hidden TypeProperty: String|Mapping + /// Structure that contains X.500 distinguished name information for your CA. + hidden Subject: CertificateAuthoritySubject + + /// Certificate revocation information used by the CreateCertificateAuthority and UpdateCertificateAuthority actions. + hidden RevocationConfiguration: (CertificateAuthorityRevocationConfiguration)? + + /// + hidden Tags: (Listing)? + /// Public key algorithm and size, in bits, of the key pair that your CA creates when it issues a certificate. hidden KeyAlgorithm: String|Mapping - /// Usage mode of the ceritificate authority. - hidden UsageMode: (String|Mapping)? + /// Algorithm your CA uses to sign certificate requests. + hidden SigningAlgorithm: String|Mapping /// Structure that contains CSR pass through extension information used by the CreateCertificateAuthority action. hidden CsrExtensions: (CertificateAuthorityCsrExtensions)? @@ -175,28 +175,19 @@ open class CertificateAuthority extends cloudformation.Resource { /// KeyStorageSecurityStadard defines a cryptographic key management compliance standard used for handling CA keys. hidden KeyStorageSecurityStandard: (String|Mapping)? - /// Algorithm your CA uses to sign certificate requests. - hidden SigningAlgorithm: String|Mapping - - /// Structure that contains X.500 distinguished name information for your CA. - hidden Subject: CertificateAuthoritySubject - - /// Certificate revocation information used by the CreateCertificateAuthority and UpdateCertificateAuthority actions. - hidden RevocationConfiguration: (CertificateAuthorityRevocationConfiguration)? - - /// - hidden Tags: (Listing)? + /// Usage mode of the ceritificate authority. + hidden UsageMode: (String|Mapping)? Properties { ["Type"] = if (TypeProperty == null) null else TypeProperty - ["KeyAlgorithm"] = if (KeyAlgorithm == null) null else KeyAlgorithm - ["UsageMode"] = if (UsageMode == null) null else UsageMode - ["CsrExtensions"] = if (CsrExtensions == null) null else CsrExtensions - ["KeyStorageSecurityStandard"] = if (KeyStorageSecurityStandard == null) null else KeyStorageSecurityStandard - ["SigningAlgorithm"] = if (SigningAlgorithm == null) null else SigningAlgorithm ["Subject"] = if (Subject == null) null else Subject ["RevocationConfiguration"] = if (RevocationConfiguration == null) null else RevocationConfiguration ["Tags"] = if (Tags == null) null else Tags + ["KeyAlgorithm"] = if (KeyAlgorithm == null) null else KeyAlgorithm + ["SigningAlgorithm"] = if (SigningAlgorithm == null) null else SigningAlgorithm + ["CsrExtensions"] = if (CsrExtensions == null) null else CsrExtensions + ["KeyStorageSecurityStandard"] = if (KeyStorageSecurityStandard == null) null else KeyStorageSecurityStandard + ["UsageMode"] = if (UsageMode == null) null else UsageMode } } diff --git a/pkl/aws/amazonmq/broker.pkl b/pkl/aws/amazonmq/broker.pkl index 3e5e55fa..77218651 100644 --- a/pkl/aws/amazonmq/broker.pkl +++ b/pkl/aws/amazonmq/broker.pkl @@ -5,11 +5,35 @@ module aws.amazonmq.broker import "../../cloudformation.pkl" +/// +open class BrokerLdapServerMetadata { + UserRoleName: (String|Mapping)? + RoleName: (String|Mapping)? + UserSearchSubtree: (Boolean|Mapping)? + RoleBase: String|Mapping + ServiceAccountPassword: String|Mapping + RoleSearchSubtree: (Boolean|Mapping)? + Hosts: Listing + UserSearchMatching: String|Mapping + UserBase: String|Mapping + RoleSearchMatching: String|Mapping + ServiceAccountUsername: String|Mapping +} + +/// +open class BrokerUser { + ReplicationUser: (Boolean|Mapping)? + ConsoleAccess: (Boolean|Mapping)? + Username: String|Mapping + Groups: (Listing)? + Password: String|Mapping +} + /// open class BrokerMaintenanceWindow { + TimeOfDay: String|Mapping TimeZone: String|Mapping DayOfWeek: String|Mapping - TimeOfDay: String|Mapping } /// @@ -36,30 +60,6 @@ open class BrokerLogList { General: (Boolean|Mapping)? } -/// -open class BrokerLdapServerMetadata { - ServiceAccountPassword: String|Mapping - Hosts: Listing - RoleName: (String|Mapping)? - UserBase: String|Mapping - UserSearchSubtree: (Boolean|Mapping)? - RoleSearchMatching: String|Mapping - RoleBase: String|Mapping - UserRoleName: (String|Mapping)? - UserSearchMatching: String|Mapping - ServiceAccountUsername: String|Mapping - RoleSearchSubtree: (Boolean|Mapping)? -} - -/// -open class BrokerUser { - ReplicationUser: (Boolean|Mapping)? - ConsoleAccess: (Boolean|Mapping)? - Username: String|Mapping - Groups: (Listing)? - Password: String|Mapping -} - /// Resource Type definition for AWS::AmazonMQ::Broker open class Broker extends cloudformation.Resource { @@ -67,86 +67,86 @@ open class Broker extends cloudformation.Resource { /// - hidden EngineType: String|Mapping - - /// - hidden DataReplicationMode: (String|Mapping)? + hidden LdapServerMetadata: (BrokerLdapServerMetadata)? /// - hidden Tags: (Listing)? + hidden EncryptionOptions: (BrokerEncryptionOptions)? /// hidden MaintenanceWindowStartTime: (BrokerMaintenanceWindow)? /// - hidden EncryptionOptions: (BrokerEncryptionOptions)? + hidden AutoMinorVersionUpgrade: Boolean|Mapping /// - hidden HostInstanceType: String|Mapping + hidden Configuration: (BrokerConfigurationId)? /// - hidden BrokerName: String|Mapping + hidden Users: Listing /// - hidden LdapServerMetadata: (BrokerLdapServerMetadata)? + hidden SubnetIds: (Listing)? /// - hidden PubliclyAccessible: Boolean|Mapping + hidden StorageType: (String|Mapping)? /// - hidden AuthenticationStrategy: (String|Mapping)? + hidden HostInstanceType: String|Mapping /// - hidden Users: Listing + hidden DataReplicationPrimaryBrokerArn: (String|Mapping)? /// - hidden AutoMinorVersionUpgrade: Boolean|Mapping + hidden EngineVersion: String|Mapping /// hidden Logs: (BrokerLogList)? /// - hidden Configuration: (BrokerConfigurationId)? + hidden BrokerName: String|Mapping /// - hidden SubnetIds: (Listing)? + hidden SecurityGroups: (Listing)? /// - hidden DeploymentMode: String|Mapping + hidden AuthenticationStrategy: (String|Mapping)? /// - hidden StorageType: (String|Mapping)? + hidden PubliclyAccessible: Boolean|Mapping /// - hidden SecurityGroups: (Listing)? + hidden EngineType: String|Mapping /// - hidden DataReplicationPrimaryBrokerArn: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden EngineVersion: String|Mapping + hidden DeploymentMode: String|Mapping + + /// + hidden DataReplicationMode: (String|Mapping)? Properties { - ["EngineType"] = if (EngineType == null) null else EngineType - ["DataReplicationMode"] = if (DataReplicationMode == null) null else DataReplicationMode - ["Tags"] = if (Tags == null) null else Tags - ["MaintenanceWindowStartTime"] = if (MaintenanceWindowStartTime == null) null else MaintenanceWindowStartTime - ["EncryptionOptions"] = if (EncryptionOptions == null) null else EncryptionOptions - ["HostInstanceType"] = if (HostInstanceType == null) null else HostInstanceType - ["BrokerName"] = if (BrokerName == null) null else BrokerName ["LdapServerMetadata"] = if (LdapServerMetadata == null) null else LdapServerMetadata - ["PubliclyAccessible"] = if (PubliclyAccessible == null) null else PubliclyAccessible - ["AuthenticationStrategy"] = if (AuthenticationStrategy == null) null else AuthenticationStrategy - ["Users"] = if (Users == null) null else Users + ["EncryptionOptions"] = if (EncryptionOptions == null) null else EncryptionOptions + ["MaintenanceWindowStartTime"] = if (MaintenanceWindowStartTime == null) null else MaintenanceWindowStartTime ["AutoMinorVersionUpgrade"] = if (AutoMinorVersionUpgrade == null) null else AutoMinorVersionUpgrade - ["Logs"] = if (Logs == null) null else Logs ["Configuration"] = if (Configuration == null) null else Configuration + ["Users"] = if (Users == null) null else Users ["SubnetIds"] = if (SubnetIds == null) null else SubnetIds - ["DeploymentMode"] = if (DeploymentMode == null) null else DeploymentMode ["StorageType"] = if (StorageType == null) null else StorageType - ["SecurityGroups"] = if (SecurityGroups == null) null else SecurityGroups + ["HostInstanceType"] = if (HostInstanceType == null) null else HostInstanceType ["DataReplicationPrimaryBrokerArn"] = if (DataReplicationPrimaryBrokerArn == null) null else DataReplicationPrimaryBrokerArn ["EngineVersion"] = if (EngineVersion == null) null else EngineVersion + ["Logs"] = if (Logs == null) null else Logs + ["BrokerName"] = if (BrokerName == null) null else BrokerName + ["SecurityGroups"] = if (SecurityGroups == null) null else SecurityGroups + ["AuthenticationStrategy"] = if (AuthenticationStrategy == null) null else AuthenticationStrategy + ["PubliclyAccessible"] = if (PubliclyAccessible == null) null else PubliclyAccessible + ["EngineType"] = if (EngineType == null) null else EngineType + ["Tags"] = if (Tags == null) null else Tags + ["DeploymentMode"] = if (DeploymentMode == null) null else DeploymentMode + ["DataReplicationMode"] = if (DataReplicationMode == null) null else DataReplicationMode } } diff --git a/pkl/aws/amazonmq/configuration.pkl b/pkl/aws/amazonmq/configuration.pkl index 8067a5f3..3bf8dee6 100644 --- a/pkl/aws/amazonmq/configuration.pkl +++ b/pkl/aws/amazonmq/configuration.pkl @@ -17,18 +17,18 @@ open class Configuration extends cloudformation.Resource { Type = "AWS::AmazonMQ::Configuration" - /// - hidden AuthenticationStrategy: (String|Mapping)? - /// hidden EngineType: String|Mapping /// - hidden Name: String|Mapping + hidden EngineVersion: String|Mapping /// hidden Description: (String|Mapping)? + /// + hidden AuthenticationStrategy: (String|Mapping)? + /// hidden Data: String|Mapping @@ -36,16 +36,16 @@ open class Configuration extends cloudformation.Resource { hidden Tags: (Listing)? /// - hidden EngineVersion: String|Mapping + hidden Name: String|Mapping Properties { - ["AuthenticationStrategy"] = if (AuthenticationStrategy == null) null else AuthenticationStrategy ["EngineType"] = if (EngineType == null) null else EngineType - ["Name"] = if (Name == null) null else Name + ["EngineVersion"] = if (EngineVersion == null) null else EngineVersion ["Description"] = if (Description == null) null else Description + ["AuthenticationStrategy"] = if (AuthenticationStrategy == null) null else AuthenticationStrategy ["Data"] = if (Data == null) null else Data ["Tags"] = if (Tags == null) null else Tags - ["EngineVersion"] = if (EngineVersion == null) null else EngineVersion + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/amplify/app.pkl b/pkl/aws/amplify/app.pkl index ce963b0f..06b68248 100644 --- a/pkl/aws/amplify/app.pkl +++ b/pkl/aws/amplify/app.pkl @@ -5,6 +5,21 @@ module aws.amplify.app import "../../cloudformation.pkl" +/// +open class AppBasicAuthConfig { + EnableBasicAuth: (Boolean|Mapping)? + Username: (String|Mapping)? + Password: (String|Mapping)? +} + +/// +open class AppCustomRule { + Condition: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + Status: (String(matches(Regex(#".{3,7}"#)))|Mapping)? + Target: String(matches(Regex(#"(?s).+"#)))|Mapping + Source: String(matches(Regex(#"(?s).+"#)))|Mapping +} + /// open class AppEnvironmentVariable { Name: String(matches(Regex(#"(?s).*"#)))|Mapping @@ -21,32 +36,17 @@ typealias AutoBranchCreationConfigStage = "EXPERIMENTAL"|"BETA"|"PULL_REQUEST"|" /// open class AppAutoBranchCreationConfig { - EnableAutoBuild: (Boolean|Mapping)? EnablePerformanceMode: (Boolean|Mapping)? + EnablePullRequestPreview: (Boolean|Mapping)? EnvironmentVariables: (Listing)? - Framework: (String(matches(Regex(#"(?s).*"#)))|Mapping)? Stage: (AutoBranchCreationConfigStage|Mapping)? - AutoBranchCreationPatterns: (Listing)? + EnableAutoBranchCreation: (Boolean|Mapping)? BasicAuthConfig: (AppBasicAuthConfig)? - EnablePullRequestPreview: (Boolean|Mapping)? - PullRequestEnvironmentName: (String(matches(Regex(#"(?s).*"#)))|Mapping)? BuildSpec: (String|Mapping)? - EnableAutoBranchCreation: (Boolean|Mapping)? -} - -/// -open class AppBasicAuthConfig { - EnableBasicAuth: (Boolean|Mapping)? - Username: (String|Mapping)? - Password: (String|Mapping)? -} - -/// -open class AppCustomRule { - Condition: (String(matches(Regex(#"(?s).*"#)))|Mapping)? - Status: (String(matches(Regex(#".{3,7}"#)))|Mapping)? - Target: String(matches(Regex(#"(?s).+"#)))|Mapping - Source: String(matches(Regex(#"(?s).+"#)))|Mapping + EnableAutoBuild: (Boolean|Mapping)? + Framework: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + PullRequestEnvironmentName: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + AutoBranchCreationPatterns: (Listing)? } /// The AWS::Amplify::App resource creates Apps in the Amplify Console. An App is a collection of branches. @@ -56,66 +56,66 @@ open class App extends cloudformation.Resource { /// - hidden OauthToken: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + hidden EnvironmentVariables: (Listing)? /// - hidden Platform: (AppPlatform|Mapping)? + hidden AccessToken: (String|Mapping)? /// - hidden Repository: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + hidden BasicAuthConfig: (AppBasicAuthConfig)? /// - hidden EnableBranchAutoDeletion: (Boolean|Mapping)? + hidden Description: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// hidden IAMServiceRole: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// - hidden Name: String(matches(Regex(#"(?s).+"#)))|Mapping + hidden OauthToken: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// - hidden Tags: (Listing)? + hidden BuildSpec: (String(matches(Regex(#"(?s).+"#)))|Mapping)? /// - hidden AutoBranchCreationConfig: (AppAutoBranchCreationConfig)? + hidden CustomHeaders: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// - hidden BasicAuthConfig: (AppBasicAuthConfig)? + hidden CustomRules: (Listing)? /// - hidden CustomRules: (Listing)? + hidden EnableBranchAutoDeletion: (Boolean|Mapping)? /// - hidden AccessToken: (String|Mapping)? + hidden Name: String(matches(Regex(#"(?s).+"#)))|Mapping /// - hidden CustomHeaders: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + hidden Platform: (AppPlatform|Mapping)? /// - hidden BuildSpec: (String(matches(Regex(#"(?s).+"#)))|Mapping)? + hidden AutoBranchCreationConfig: (AppAutoBranchCreationConfig)? /// - hidden Description: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + hidden Repository: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// - hidden EnvironmentVariables: (Listing)? + hidden Tags: (Listing)? Properties { + ["EnvironmentVariables"] = if (EnvironmentVariables == null) null else EnvironmentVariables + ["AccessToken"] = if (AccessToken == null) null else AccessToken + ["BasicAuthConfig"] = if (BasicAuthConfig == null) null else BasicAuthConfig + ["Description"] = if (Description == null) null else Description + ["IAMServiceRole"] = if (IAMServiceRole == null) null else IAMServiceRole ["OauthToken"] = if (OauthToken == null) null else OauthToken - ["Platform"] = if (Platform == null) null else Platform - ["Repository"] = if (Repository == null) null else Repository + ["BuildSpec"] = if (BuildSpec == null) null else BuildSpec + ["CustomHeaders"] = if (CustomHeaders == null) null else CustomHeaders + ["CustomRules"] = if (CustomRules == null) null else CustomRules ["EnableBranchAutoDeletion"] = if (EnableBranchAutoDeletion == null) null else EnableBranchAutoDeletion - ["IAMServiceRole"] = if (IAMServiceRole == null) null else IAMServiceRole ["Name"] = if (Name == null) null else Name - ["Tags"] = if (Tags == null) null else Tags + ["Platform"] = if (Platform == null) null else Platform ["AutoBranchCreationConfig"] = if (AutoBranchCreationConfig == null) null else AutoBranchCreationConfig - ["BasicAuthConfig"] = if (BasicAuthConfig == null) null else BasicAuthConfig - ["CustomRules"] = if (CustomRules == null) null else CustomRules - ["AccessToken"] = if (AccessToken == null) null else AccessToken - ["CustomHeaders"] = if (CustomHeaders == null) null else CustomHeaders - ["BuildSpec"] = if (BuildSpec == null) null else BuildSpec - ["Description"] = if (Description == null) null else Description - ["EnvironmentVariables"] = if (EnvironmentVariables == null) null else EnvironmentVariables + ["Repository"] = if (Repository == null) null else Repository + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/amplify/branch.pkl b/pkl/aws/amplify/branch.pkl index 00ea24ab..4ff1f5e5 100644 --- a/pkl/aws/amplify/branch.pkl +++ b/pkl/aws/amplify/branch.pkl @@ -5,17 +5,6 @@ module aws.amplify.branch import "../../cloudformation.pkl" -/// -open class BranchBackend { - StackArn: (String|Mapping)? -} - -/// -open class BranchEnvironmentVariable { - Value: String(matches(Regex(#"(?s).*"#)))|Mapping - Name: String(matches(Regex(#"(?s).*"#)))|Mapping -} - /// open class BranchTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping @@ -29,6 +18,17 @@ open class BranchBasicAuthConfig { Password: String|Mapping } +/// +open class BranchBackend { + StackArn: (String|Mapping)? +} + +/// +open class BranchEnvironmentVariable { + Name: String(matches(Regex(#"(?s).*"#)))|Mapping + Value: String(matches(Regex(#"(?s).*"#)))|Mapping +} + /// The AWS::Amplify::Branch resource creates a new branch within an app. open class Branch extends cloudformation.Resource { @@ -36,62 +36,62 @@ open class Branch extends cloudformation.Resource { /// - hidden BranchName: String(matches(Regex(#"(?s).+"#)))|Mapping + hidden BuildSpec: (String(matches(Regex(#"(?s).+"#)))|Mapping)? /// - hidden EnableAutoBuild: (Boolean|Mapping)? + hidden Description: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// - hidden PullRequestEnvironmentName: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + hidden EnablePerformanceMode: (Boolean|Mapping)? /// - hidden AppId: String(matches(Regex(#"d[a-z0-9]+"#)))|Mapping + hidden EnvironmentVariables: (Listing)? /// - hidden BasicAuthConfig: (BranchBasicAuthConfig)? + hidden PullRequestEnvironmentName: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// - hidden EnablePullRequestPreview: (Boolean|Mapping)? + hidden Stage: (BranchStage|Mapping)? /// - hidden EnvironmentVariables: (Listing)? + hidden AppId: String(matches(Regex(#"d[a-z0-9]+"#)))|Mapping /// - hidden Tags: (Listing)? + hidden Backend: (BranchBackend)? /// - hidden EnablePerformanceMode: (Boolean|Mapping)? + hidden BranchName: String(matches(Regex(#"(?s).+"#)))|Mapping /// hidden Framework: (String(matches(Regex(#"(?s).*"#)))|Mapping)? /// - hidden Backend: (BranchBackend)? + hidden EnablePullRequestPreview: (Boolean|Mapping)? /// - hidden BuildSpec: (String(matches(Regex(#"(?s).+"#)))|Mapping)? + hidden Tags: (Listing)? /// - hidden Description: (String(matches(Regex(#"(?s).*"#)))|Mapping)? + hidden BasicAuthConfig: (BranchBasicAuthConfig)? /// - hidden Stage: (BranchStage|Mapping)? + hidden EnableAutoBuild: (Boolean|Mapping)? Properties { - ["BranchName"] = if (BranchName == null) null else BranchName - ["EnableAutoBuild"] = if (EnableAutoBuild == null) null else EnableAutoBuild + ["BuildSpec"] = if (BuildSpec == null) null else BuildSpec + ["Description"] = if (Description == null) null else Description + ["EnablePerformanceMode"] = if (EnablePerformanceMode == null) null else EnablePerformanceMode + ["EnvironmentVariables"] = if (EnvironmentVariables == null) null else EnvironmentVariables ["PullRequestEnvironmentName"] = if (PullRequestEnvironmentName == null) null else PullRequestEnvironmentName + ["Stage"] = if (Stage == null) null else Stage ["AppId"] = if (AppId == null) null else AppId - ["BasicAuthConfig"] = if (BasicAuthConfig == null) null else BasicAuthConfig + ["Backend"] = if (Backend == null) null else Backend + ["BranchName"] = if (BranchName == null) null else BranchName + ["Framework"] = if (Framework == null) null else Framework ["EnablePullRequestPreview"] = if (EnablePullRequestPreview == null) null else EnablePullRequestPreview - ["EnvironmentVariables"] = if (EnvironmentVariables == null) null else EnvironmentVariables ["Tags"] = if (Tags == null) null else Tags - ["EnablePerformanceMode"] = if (EnablePerformanceMode == null) null else EnablePerformanceMode - ["Framework"] = if (Framework == null) null else Framework - ["Backend"] = if (Backend == null) null else Backend - ["BuildSpec"] = if (BuildSpec == null) null else BuildSpec - ["Description"] = if (Description == null) null else Description - ["Stage"] = if (Stage == null) null else Stage + ["BasicAuthConfig"] = if (BasicAuthConfig == null) null else BasicAuthConfig + ["EnableAutoBuild"] = if (EnableAutoBuild == null) null else EnableAutoBuild } } diff --git a/pkl/aws/amplify/domain.pkl b/pkl/aws/amplify/domain.pkl index e5c0a052..571f83c7 100644 --- a/pkl/aws/amplify/domain.pkl +++ b/pkl/aws/amplify/domain.pkl @@ -5,12 +5,18 @@ module aws.amplify.domain import "../../cloudformation.pkl" +/// +open class DomainSubDomainSetting { + Prefix: String(matches(Regex(#"(?s).*"#)))|Mapping + BranchName: String(matches(Regex(#"(?s).+"#)))|Mapping +} + typealias CertificateSettingsCertificateType = "AMPLIFY_MANAGED"|"CUSTOM" /// open class DomainCertificateSettings { - CustomCertificateArn: (String(matches(Regex(#"^arn:aws:acm:[a-z0-9-]+:\d{12}:certificate\/.+$"#)))|Mapping)? CertificateType: (CertificateSettingsCertificateType|Mapping)? + CustomCertificateArn: (String(matches(Regex(#"^arn:aws:acm:[a-z0-9-]+:\d{12}:certificate\/.+$"#)))|Mapping)? } typealias CertificateCertificateType = "AMPLIFY_MANAGED"|"CUSTOM" @@ -22,12 +28,6 @@ open class DomainCertificate { CertificateType: (CertificateCertificateType|Mapping)? } -/// -open class DomainSubDomainSetting { - Prefix: String(matches(Regex(#"(?s).*"#)))|Mapping - BranchName: String(matches(Regex(#"(?s).+"#)))|Mapping -} - /// The AWS::Amplify::Domain resource allows you to connect a custom domain to your app. open class Domain extends cloudformation.Resource { @@ -35,42 +35,42 @@ open class Domain extends cloudformation.Resource { /// - hidden AppId: String(matches(Regex(#"d[a-z0-9]+"#)))|Mapping + hidden EnableAutoSubDomain: (Boolean|Mapping)? /// - hidden CertificateSettings: (DomainCertificateSettings)? + hidden AutoSubDomainCreationPatterns: (Listing)? /// - hidden DomainName: String(matches(Regex(#"^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])(\.)?$"#)))|Mapping + hidden UpdateStatus: (String|Mapping)? /// - hidden AutoSubDomainIAMRole: (String(matches(Regex(#"^$|^arn:.+:iam::\d{12}:role.+"#)))|Mapping)? + hidden AppId: String(matches(Regex(#"d[a-z0-9]+"#)))|Mapping /// - hidden UpdateStatus: (String|Mapping)? + hidden SubDomainSettings: Listing /// - hidden AutoSubDomainCreationPatterns: (Listing)? + hidden DomainName: String(matches(Regex(#"^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])(\.)?$"#)))|Mapping /// - hidden Certificate: (DomainCertificate)? + hidden AutoSubDomainIAMRole: (String(matches(Regex(#"^$|^arn:.+:iam::\d{12}:role.+"#)))|Mapping)? /// - hidden EnableAutoSubDomain: (Boolean|Mapping)? + hidden Certificate: (DomainCertificate)? /// - hidden SubDomainSettings: Listing + hidden CertificateSettings: (DomainCertificateSettings)? Properties { + ["EnableAutoSubDomain"] = if (EnableAutoSubDomain == null) null else EnableAutoSubDomain + ["AutoSubDomainCreationPatterns"] = if (AutoSubDomainCreationPatterns == null) null else AutoSubDomainCreationPatterns + ["UpdateStatus"] = if (UpdateStatus == null) null else UpdateStatus ["AppId"] = if (AppId == null) null else AppId - ["CertificateSettings"] = if (CertificateSettings == null) null else CertificateSettings + ["SubDomainSettings"] = if (SubDomainSettings == null) null else SubDomainSettings ["DomainName"] = if (DomainName == null) null else DomainName ["AutoSubDomainIAMRole"] = if (AutoSubDomainIAMRole == null) null else AutoSubDomainIAMRole - ["UpdateStatus"] = if (UpdateStatus == null) null else UpdateStatus - ["AutoSubDomainCreationPatterns"] = if (AutoSubDomainCreationPatterns == null) null else AutoSubDomainCreationPatterns ["Certificate"] = if (Certificate == null) null else Certificate - ["EnableAutoSubDomain"] = if (EnableAutoSubDomain == null) null else EnableAutoSubDomain - ["SubDomainSettings"] = if (SubDomainSettings == null) null else SubDomainSettings + ["CertificateSettings"] = if (CertificateSettings == null) null else CertificateSettings } } diff --git a/pkl/aws/amplifyuibuilder/component.pkl b/pkl/aws/amplifyuibuilder/component.pkl index e2824f07..7adcd9ee 100644 --- a/pkl/aws/amplifyuibuilder/component.pkl +++ b/pkl/aws/amplifyuibuilder/component.pkl @@ -5,44 +5,16 @@ module aws.amplifyuibuilder.component import "../../cloudformation.pkl" -/// -open class ComponentActionParameters { - Global: (ComponentComponentProperty)? - Model: (String|Mapping)? - Type: (ComponentComponentProperty)? - Url: (ComponentComponentProperty)? - Anchor: (ComponentComponentProperty)? - Target: (ComponentComponentProperty)? - Id: (ComponentComponentProperty)? - Fields: (ComponentComponentProperties)? - State: (ComponentMutationActionSetStateParameter)? -} - -/// -open class ComponentSortDirection { -} +typealias ComponentComponentBindingProperties = Mapping -/// -open class ComponentComponentCollectionProperties { -} -/// -open class ComponentComponentConditionProperty { - Else: (ComponentComponentProperty)? - OperandType: (String|Mapping)? - Property: (String|Mapping)? - Field: (String|Mapping)? - Operator: (String|Mapping)? - Operand: (String|Mapping)? - Then: (ComponentComponentProperty)? -} +typealias ComponentComponentOverrides = Mapping -/// -open class ComponentComponentEvents { -} /// -open class ComponentComponentOverridesValue { +open class ComponentComponentPropertyBindingProperties { + Property: String|Mapping + Field: (String|Mapping)? } /// @@ -53,65 +25,108 @@ open class ComponentFormBindingElement { /// open class ComponentMutationActionSetStateParameter { - ComponentName: String|Mapping Property: String|Mapping Set: ComponentComponentProperty + ComponentName: String|Mapping } +typealias ComponentComponentCollectionProperties = Mapping + + +typealias ComponentComponentVariantValues = Mapping + + /// open class ComponentPredicate { - Operand: (String|Mapping)? - OperandType: (String(matches(Regex(#"^boolean|string|number$"#)))|Mapping)? Or: (Listing)? And: (Listing)? Field: (String|Mapping)? Operator: (String|Mapping)? + Operand: (String|Mapping)? + OperandType: (String(matches(Regex(#"^boolean|string|number$"#)))|Mapping)? } /// -open class ComponentSortProperty { - Field: String|Mapping - Direction: ComponentSortDirection -} - -/// -open class ComponentComponentBindingPropertiesValue { - Type: (String|Mapping)? - BindingProperties: (ComponentComponentBindingPropertiesValueProperties)? +open class ComponentComponentBindingPropertiesValueProperties { + Bucket: (String|Mapping)? + Key: (String|Mapping)? DefaultValue: (String|Mapping)? + SlotName: (String|Mapping)? + Model: (String|Mapping)? + Field: (String|Mapping)? + Predicates: (Listing)? + UserAttribute: (String|Mapping)? } /// open class ComponentComponentChild { + SourceId: (String|Mapping)? + ComponentType: String|Mapping Name: String|Mapping Properties: ComponentComponentProperties Children: (Listing)? Events: (ComponentComponentEvents)? - SourceId: (String|Mapping)? - ComponentType: String|Mapping } -/// -open class ComponentComponentEvent { - Action: (String|Mapping)? - Parameters: (ComponentActionParameters)? - BindingEvent: (String|Mapping)? -} +typealias ComponentComponentEvents = Mapping + + +typealias ComponentComponentOverridesValue = Mapping + + +typealias ComponentTags = Mapping + /// -open class ComponentComponentProperties { +open class ComponentComponentDataConfiguration { + Model: String|Mapping + Sort: (Listing)? + Predicate: (ComponentPredicate)? + Identifiers: (Listing)? } +typealias ComponentComponentProperties = Mapping + + +typealias ComponentSortDirection = String|Mapping + + /// -open class ComponentComponentVariantValues { +open class ComponentActionParameters { + State: (ComponentMutationActionSetStateParameter)? + Url: (ComponentComponentProperty)? + Anchor: (ComponentComponentProperty)? + Target: (ComponentComponentProperty)? + Id: (ComponentComponentProperty)? + Fields: (ComponentComponentProperties)? + Type: (ComponentComponentProperty)? + Global: (ComponentComponentProperty)? + Model: (String|Mapping)? } /// -open class ComponentFormBindings { +open class ComponentSortProperty { + Field: String|Mapping + Direction: ComponentSortDirection } /// -open class ComponentTags { +open class ComponentComponentProperty { + BindingProperties: (ComponentComponentPropertyBindingProperties)? + CollectionBindingProperties: (ComponentComponentPropertyBindingProperties)? + DefaultValue: (String|Mapping)? + Bindings: (ComponentFormBindings)? + ImportedValue: (String|Mapping)? + Value: (String|Mapping)? + Condition: (ComponentComponentConditionProperty)? + Event: (String|Mapping)? + Concat: (Listing)? + Configured: (Boolean|Mapping)? + Model: (String|Mapping)? + Type: (String|Mapping)? + ComponentName: (String|Mapping)? + Property: (String|Mapping)? + UserAttribute: (String|Mapping)? } /// @@ -121,56 +136,31 @@ open class ComponentComponentVariant { } /// -open class ComponentComponentBindingProperties { -} - -/// -open class ComponentComponentBindingPropertiesValueProperties { - SlotName: (String|Mapping)? - Model: (String|Mapping)? - Field: (String|Mapping)? - Predicates: (Listing)? - UserAttribute: (String|Mapping)? - Bucket: (String|Mapping)? - Key: (String|Mapping)? +open class ComponentComponentBindingPropertiesValue { + Type: (String|Mapping)? + BindingProperties: (ComponentComponentBindingPropertiesValueProperties)? DefaultValue: (String|Mapping)? } -/// -open class ComponentComponentDataConfiguration { - Model: String|Mapping - Sort: (Listing)? - Predicate: (ComponentPredicate)? - Identifiers: (Listing)? -} +typealias ComponentFormBindings = Mapping -/// -open class ComponentComponentOverrides { -} /// -open class ComponentComponentProperty { - DefaultValue: (String|Mapping)? - Event: (String|Mapping)? - Condition: (ComponentComponentConditionProperty)? - Configured: (Boolean|Mapping)? - ComponentName: (String|Mapping)? - Concat: (Listing)? - Type: (String|Mapping)? - CollectionBindingProperties: (ComponentComponentPropertyBindingProperties)? - Value: (String|Mapping)? - BindingProperties: (ComponentComponentPropertyBindingProperties)? - Model: (String|Mapping)? - Bindings: (ComponentFormBindings)? - UserAttribute: (String|Mapping)? - ImportedValue: (String|Mapping)? - Property: (String|Mapping)? +open class ComponentComponentEvent { + Action: (String|Mapping)? + Parameters: (ComponentActionParameters)? + BindingEvent: (String|Mapping)? } /// -open class ComponentComponentPropertyBindingProperties { - Property: String|Mapping +open class ComponentComponentConditionProperty { + OperandType: (String|Mapping)? + Property: (String|Mapping)? Field: (String|Mapping)? + Operator: (String|Mapping)? + Operand: (String|Mapping)? + Then: (ComponentComponentProperty)? + Else: (ComponentComponentProperty)? } /// Definition of AWS::AmplifyUIBuilder::Component Resource Type @@ -180,62 +170,62 @@ open class Component extends cloudformation.Resource { /// - hidden Events: (ComponentComponentEvents)? - - /// - hidden Tags: (ComponentTags)? + hidden Variants: (Listing)? /// hidden AppId: (String|Mapping)? /// - hidden PropertiesProperty: (ComponentComponentProperties)? + hidden CollectionProperties: (ComponentComponentCollectionProperties)? /// - hidden SchemaVersion: (String|Mapping)? + hidden Events: (ComponentComponentEvents)? /// - hidden SourceId: (String|Mapping)? + hidden Name: (String|Mapping)? /// - hidden CollectionProperties: (ComponentComponentCollectionProperties)? + hidden Overrides: (ComponentComponentOverrides)? /// - hidden ComponentType: (String|Mapping)? + hidden BindingProperties: (ComponentComponentBindingProperties)? /// - hidden Overrides: (ComponentComponentOverrides)? + hidden SchemaVersion: (String|Mapping)? /// - hidden Variants: (Listing)? + hidden SourceId: (String|Mapping)? /// - hidden BindingProperties: (ComponentComponentBindingProperties)? + hidden Tags: (ComponentTags)? /// hidden Children: (Listing)? + /// + hidden ComponentType: (String|Mapping)? + /// hidden EnvironmentName: (String|Mapping)? /// - hidden Name: (String|Mapping)? + hidden PropertiesProperty: (ComponentComponentProperties)? Properties { - ["Events"] = if (Events == null) null else Events - ["Tags"] = if (Tags == null) null else Tags + ["Variants"] = if (Variants == null) null else Variants ["AppId"] = if (AppId == null) null else AppId - ["Properties"] = if (PropertiesProperty == null) null else PropertiesProperty - ["SchemaVersion"] = if (SchemaVersion == null) null else SchemaVersion - ["SourceId"] = if (SourceId == null) null else SourceId ["CollectionProperties"] = if (CollectionProperties == null) null else CollectionProperties - ["ComponentType"] = if (ComponentType == null) null else ComponentType + ["Events"] = if (Events == null) null else Events + ["Name"] = if (Name == null) null else Name ["Overrides"] = if (Overrides == null) null else Overrides - ["Variants"] = if (Variants == null) null else Variants ["BindingProperties"] = if (BindingProperties == null) null else BindingProperties + ["SchemaVersion"] = if (SchemaVersion == null) null else SchemaVersion + ["SourceId"] = if (SourceId == null) null else SourceId + ["Tags"] = if (Tags == null) null else Tags ["Children"] = if (Children == null) null else Children + ["ComponentType"] = if (ComponentType == null) null else ComponentType ["EnvironmentName"] = if (EnvironmentName == null) null else EnvironmentName - ["Name"] = if (Name == null) null else Name + ["Properties"] = if (PropertiesProperty == null) null else PropertiesProperty } } diff --git a/pkl/aws/amplifyuibuilder/form.pkl b/pkl/aws/amplifyuibuilder/form.pkl index 1c88a3f8..5e4c1762 100644 --- a/pkl/aws/amplifyuibuilder/form.pkl +++ b/pkl/aws/amplifyuibuilder/form.pkl @@ -5,78 +5,79 @@ module aws.amplifyuibuilder.form import "../../cloudformation.pkl" -/// -open class FormFieldInputConfig { - DescriptiveText: (String|Mapping)? - DefaultChecked: (Boolean|Mapping)? - MinValue: (Number|Mapping)? - Step: (Number|Mapping)? - Value: (String|Mapping)? - FileUploaderConfig: (FormFileUploaderFieldConfig)? - DefaultValue: (String|Mapping)? - Placeholder: (String|Mapping)? - DefaultCountryCode: (String|Mapping)? - Name: (String|Mapping)? - MaxValue: (Number|Mapping)? - IsArray: (Boolean|Mapping)? - Required: (Boolean|Mapping)? - ReadOnly: (Boolean|Mapping)? - ValueMappings: (FormValueMappings)? - Type: String|Mapping -} +typealias FormFieldsMap = Mapping + /// -open class FormFieldPosition { +open class FormFormButton { + Excluded: (Boolean|Mapping)? + Children: (String|Mapping)? + Position: (FormFieldPosition)? } /// -open class FormFormDataSourceType { +open class FormFormInputBindingPropertiesValue { + Type: (String|Mapping)? + BindingProperties: (FormFormInputBindingPropertiesValueProperties)? } /// -open class FormFormDataTypeConfig { - DataSourceType: FormFormDataSourceType - DataTypeName: String|Mapping +open class FormFieldPositionFixed { + Fixed: FormFixedPosition } /// -open class FormFormInputBindingProperties { +open class FormFieldPositionRightOf { + RightOf: String|Mapping } /// -open class FormFormButtonsPosition { +open class FormFileUploaderFieldConfig { + ShowThumbnails: (Boolean|Mapping)? + IsResumable: (Boolean|Mapping)? + MaxFileCount: (Number|Mapping)? + MaxSize: (Number|Mapping)? + AccessLevel: FormStorageAccessLevel + AcceptedFileTypes: Listing } +typealias FormFormStyleConfig = FormFormStyleConfigTokenReference|FormFormStyleConfigValue + + /// -open class FormFormStyle { - HorizontalGap: (FormFormStyleConfig)? - VerticalGap: (FormFormStyleConfig)? - OuterPadding: (FormFormStyleConfig)? +open class FormFormStyleConfigTokenReference { + TokenReference: String|Mapping } /// -open class FormFormStyleConfig { +open class FormFieldConfig { + InputType: (FormFieldInputConfig)? + Validations: (Listing)? + Label: (String|Mapping)? + Position: (FormFieldPosition)? + Excluded: (Boolean|Mapping)? } +typealias FormFormInputBindingProperties = Mapping + + +typealias FormLabelDecorator = String|Mapping + + +typealias FormSectionalElementMap = Mapping + + /// open class FormValueMapping { - Value: FormFormInputValueProperty DisplayValue: (FormFormInputValueProperty)? + Value: FormFormInputValueProperty } -/// -open class FormFileUploaderFieldConfig { - AccessLevel: FormStorageAccessLevel - AcceptedFileTypes: Listing - ShowThumbnails: (Boolean|Mapping)? - IsResumable: (Boolean|Mapping)? - MaxFileCount: (Number|Mapping)? - MaxSize: (Number|Mapping)? -} +typealias FormStorageAccessLevel = String|Mapping + + +typealias FormTags = Mapping -/// -open class FormFormActionType { -} /// open class FormFormCTA { @@ -87,92 +88,104 @@ open class FormFormCTA { } /// -open class FormFormInputValuePropertyBindingProperties { - Property: String|Mapping - Field: (String|Mapping)? +open class FormValueMappings { + BindingProperties: (FormFormInputBindingProperties)? + Values: Listing } /// -open class FormSectionalElementMap { +open class FormFormStyleConfigValue { + Value: String|Mapping } +typealias FormFormButtonsPosition = String|Mapping + + /// -open class FormFieldsMap { +open class FormFormInputValueProperty { + Concat: (Listing)? + Value: (String|Mapping)? + BindingProperties: (FormFormInputValuePropertyBindingProperties)? } /// -open class FormFixedPosition { +open class FormFormStyle { + HorizontalGap: (FormFormStyleConfig)? + VerticalGap: (FormFormStyleConfig)? + OuterPadding: (FormFormStyleConfig)? } /// -open class FormFormButton { - Excluded: (Boolean|Mapping)? - Children: (String|Mapping)? - Position: (FormFieldPosition)? +open class FormFormDataTypeConfig { + DataSourceType: FormFormDataSourceType + DataTypeName: String|Mapping } +typealias FormFieldPosition = FormFieldPositionFixed|FormFieldPositionRightOf|FormFieldPositionBelow + + /// -open class FormFormInputBindingPropertiesValueProperties { - Model: (String|Mapping)? +open class FormFieldPositionBelow { + Below: String|Mapping } /// -open class FormStorageAccessLevel { +open class FormFormInputBindingPropertiesValueProperties { + Model: (String|Mapping)? } /// -open class FormTags { +open class FormFieldInputConfig { + Type: String|Mapping + Placeholder: (String|Mapping)? + DescriptiveText: (String|Mapping)? + DefaultChecked: (Boolean|Mapping)? + IsArray: (Boolean|Mapping)? + Required: (Boolean|Mapping)? + Name: (String|Mapping)? + Step: (Number|Mapping)? + Value: (String|Mapping)? + FileUploaderConfig: (FormFileUploaderFieldConfig)? + DefaultCountryCode: (String|Mapping)? + ValueMappings: (FormValueMappings)? + MinValue: (Number|Mapping)? + ReadOnly: (Boolean|Mapping)? + DefaultValue: (String|Mapping)? + MaxValue: (Number|Mapping)? } +typealias FormFixedPosition = String|Mapping + + /// open class FormFieldValidationConfiguration { - StrValues: (Listing)? NumValues: (Listing)? ValidationMessage: (String|Mapping)? Type: String|Mapping + StrValues: (Listing)? +} + +/// +open class FormFormInputValuePropertyBindingProperties { + Field: (String|Mapping)? + Property: String|Mapping } /// open class FormSectionalElement { - Type: String|Mapping - Position: (FormFieldPosition)? Text: (String|Mapping)? Level: (Number|Mapping)? Orientation: (String|Mapping)? Excluded: (Boolean|Mapping)? + Type: String|Mapping + Position: (FormFieldPosition)? } -/// -open class FormValueMappings { - Values: Listing - BindingProperties: (FormFormInputBindingProperties)? -} +typealias FormFormActionType = String|Mapping -/// -open class FormFormInputValueProperty { - Value: (String|Mapping)? - BindingProperties: (FormFormInputValuePropertyBindingProperties)? - Concat: (Listing)? -} -/// -open class FormFormInputBindingPropertiesValue { - Type: (String|Mapping)? - BindingProperties: (FormFormInputBindingPropertiesValueProperties)? -} - -/// -open class FormLabelDecorator { -} +typealias FormFormDataSourceType = String|Mapping -/// -open class FormFieldConfig { - Label: (String|Mapping)? - Position: (FormFieldPosition)? - Excluded: (Boolean|Mapping)? - InputType: (FormFieldInputConfig)? - Validations: (Listing)? -} /// Definition of AWS::AmplifyUIBuilder::Form Resource Type open class Form extends cloudformation.Resource { @@ -181,7 +194,7 @@ open class Form extends cloudformation.Resource { /// - hidden EnvironmentName: (String|Mapping)? + hidden LabelDecorator: (FormLabelDecorator)? /// hidden Style: (FormFormStyle)? @@ -190,45 +203,45 @@ open class Form extends cloudformation.Resource { hidden Cta: (FormFormCTA)? /// - hidden LabelDecorator: (FormLabelDecorator)? + hidden DataType: (FormFormDataTypeConfig)? /// - hidden Fields: (FormFieldsMap)? + hidden SchemaVersion: (String|Mapping)? /// - hidden FormActionType: (FormFormActionType)? + hidden SectionalElements: (FormSectionalElementMap)? /// - hidden SchemaVersion: (String|Mapping)? + hidden EnvironmentName: (String|Mapping)? /// - hidden Tags: (FormTags)? + hidden AppId: (String|Mapping)? /// - hidden AppId: (String|Mapping)? + hidden Fields: (FormFieldsMap)? /// - hidden DataType: (FormFormDataTypeConfig)? + hidden Tags: (FormTags)? /// - hidden Name: (String|Mapping)? + hidden FormActionType: (FormFormActionType)? /// - hidden SectionalElements: (FormSectionalElementMap)? + hidden Name: (String|Mapping)? Properties { - ["EnvironmentName"] = if (EnvironmentName == null) null else EnvironmentName + ["LabelDecorator"] = if (LabelDecorator == null) null else LabelDecorator ["Style"] = if (Style == null) null else Style ["Cta"] = if (Cta == null) null else Cta - ["LabelDecorator"] = if (LabelDecorator == null) null else LabelDecorator - ["Fields"] = if (Fields == null) null else Fields - ["FormActionType"] = if (FormActionType == null) null else FormActionType + ["DataType"] = if (DataType == null) null else DataType ["SchemaVersion"] = if (SchemaVersion == null) null else SchemaVersion - ["Tags"] = if (Tags == null) null else Tags + ["SectionalElements"] = if (SectionalElements == null) null else SectionalElements + ["EnvironmentName"] = if (EnvironmentName == null) null else EnvironmentName ["AppId"] = if (AppId == null) null else AppId - ["DataType"] = if (DataType == null) null else DataType + ["Fields"] = if (Fields == null) null else Fields + ["Tags"] = if (Tags == null) null else Tags + ["FormActionType"] = if (FormActionType == null) null else FormActionType ["Name"] = if (Name == null) null else Name - ["SectionalElements"] = if (SectionalElements == null) null else SectionalElements } } diff --git a/pkl/aws/amplifyuibuilder/theme.pkl b/pkl/aws/amplifyuibuilder/theme.pkl index f72cb63e..87a2047c 100644 --- a/pkl/aws/amplifyuibuilder/theme.pkl +++ b/pkl/aws/amplifyuibuilder/theme.pkl @@ -5,15 +5,8 @@ module aws.amplifyuibuilder.theme import "../../cloudformation.pkl" -/// -open class ThemeThemeValues { - Key: (String|Mapping)? - Value: (ThemeThemeValue)? -} +typealias ThemeTags = Mapping -/// -open class ThemeTags { -} /// open class ThemeThemeValue { @@ -21,6 +14,12 @@ open class ThemeThemeValue { Children: (Listing)? } +/// +open class ThemeThemeValues { + Key: (String|Mapping)? + Value: (ThemeThemeValue)? +} + /// Definition of AWS::AmplifyUIBuilder::Theme Resource Type open class Theme extends cloudformation.Resource { @@ -28,30 +27,30 @@ open class Theme extends cloudformation.Resource { /// - hidden AppId: (String|Mapping)? + hidden Name: (String|Mapping)? /// - hidden Overrides: (Listing)? + hidden Tags: (ThemeTags)? /// - hidden Values: (Listing)? + hidden AppId: (String|Mapping)? /// - hidden Tags: (ThemeTags)? + hidden EnvironmentName: (String|Mapping)? /// - hidden EnvironmentName: (String|Mapping)? + hidden Overrides: (Listing)? /// - hidden Name: (String|Mapping)? + hidden Values: (Listing)? Properties { + ["Name"] = if (Name == null) null else Name + ["Tags"] = if (Tags == null) null else Tags ["AppId"] = if (AppId == null) null else AppId + ["EnvironmentName"] = if (EnvironmentName == null) null else EnvironmentName ["Overrides"] = if (Overrides == null) null else Overrides ["Values"] = if (Values == null) null else Values - ["Tags"] = if (Tags == null) null else Tags - ["EnvironmentName"] = if (EnvironmentName == null) null else EnvironmentName - ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/apigateway/apikey.pkl b/pkl/aws/apigateway/apikey.pkl index 220c2dc7..7f303224 100644 --- a/pkl/aws/apigateway/apikey.pkl +++ b/pkl/aws/apigateway/apikey.pkl @@ -5,35 +5,35 @@ module aws.apigateway.apikey import "../../cloudformation.pkl" +/// +open class ApiKeyTag { + Value: String|Mapping + Key: String|Mapping +} + /// ``StageKey`` is a property of the [AWS::ApiGateway::ApiKey](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html) resource that specifies the stage to associate with the API key. This association allows only clients with the key to make requests to methods in that stage. open class ApiKeyStageKey { RestApiId: (String|Mapping)? StageName: (String|Mapping)? } -/// -open class ApiKeyTag { - Key: String|Mapping - Value: String|Mapping -} - /// The ``AWS::ApiGateway::ApiKey`` resource creates a unique key that you can distribute to clients who are executing API Gateway ``Method`` resources that require an API key. To specify which API key clients must use, map the API key with the ``RestApi`` and ``Stage`` resources that include the methods that require a key. open class ApiKey extends cloudformation.Resource { Type = "AWS::ApiGateway::ApiKey" + /// An MKT customer identifier, when integrating with the AWS SaaS Marketplace. + hidden CustomerId: (String|Mapping)? + /// The description of the ApiKey. hidden Description: (String|Mapping)? /// DEPRECATED FOR USAGE PLANS - Specifies stages associated with the API key. hidden StageKeys: (Listing)? - /// The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with ``aws:``. The tag value can be up to 256 characters. - hidden Tags: (Listing)? - - /// An MKT customer identifier, when integrating with the AWS SaaS Marketplace. - hidden CustomerId: (String|Mapping)? + /// Specifies a value of the API key. + hidden Value: (String|Mapping)? /// Specifies whether the ApiKey can be used by callers. hidden Enabled: (Boolean|Mapping)? @@ -46,18 +46,18 @@ open class ApiKey extends cloudformation.Resource { /// If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name. hidden Name: (String|Mapping)? - /// Specifies a value of the API key. - hidden Value: (String|Mapping)? + /// The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with ``aws:``. The tag value can be up to 256 characters. + hidden Tags: (Listing)? Properties { + ["CustomerId"] = if (CustomerId == null) null else CustomerId ["Description"] = if (Description == null) null else Description ["StageKeys"] = if (StageKeys == null) null else StageKeys - ["Tags"] = if (Tags == null) null else Tags - ["CustomerId"] = if (CustomerId == null) null else CustomerId + ["Value"] = if (Value == null) null else Value ["Enabled"] = if (Enabled == null) null else Enabled ["GenerateDistinctId"] = if (GenerateDistinctId == null) null else GenerateDistinctId ["Name"] = if (Name == null) null else Name - ["Value"] = if (Value == null) null else Value + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/apigateway/authorizer.pkl b/pkl/aws/apigateway/authorizer.pkl index bf426e2a..60be15d5 100644 --- a/pkl/aws/apigateway/authorizer.pkl +++ b/pkl/aws/apigateway/authorizer.pkl @@ -11,24 +11,9 @@ open class Authorizer extends cloudformation.Resource { Type = "AWS::ApiGateway::Authorizer" - /// Specifies the authorizer's Uniform Resource Identifier (URI). For ``TOKEN`` or ``REQUEST`` authorizers, this must be a well-formed Lambda function URI, for example, ``arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations``. In general, the URI has this form ``arn:aws:apigateway:{region}:lambda:path/{service_api}``, where ``{region}`` is the same as the region hosting the Lambda function, ``path`` indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial ``/``. For Lambda functions, this is usually of the form ``/2015-03-31/functions/[FunctionARN]/invocations``. - hidden AuthorizerUri: (String|Mapping)? - - /// The name of the authorizer. - hidden Name: String|Mapping - - /// The string identifier of the associated RestApi. - hidden RestApiId: String|Mapping - - /// Optional customer-defined field, used in OpenAPI imports and exports without functional impact. - hidden AuthType: (String|Mapping)? - /// Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, specify null. hidden AuthorizerCredentials: (String|Mapping)? - /// The TTL in seconds of cached authorizer results. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway will cache authorizer responses. If this field is not set, the default value is 300. The maximum value is 3600, or 1 hour. - hidden AuthorizerResultTtlInSeconds: (Int|Mapping)? - /// The identity source for which authorization is requested. For a ``TOKEN`` or ``COGNITO_USER_POOLS`` authorizer, this is required and specifies the request header mapping expression for the custom header holding the authorization token submitted by the client. For example, if the token header name is ``Auth``, the header mapping expression is ``method.request.header.Auth``. For the ``REQUEST`` authorizer, this is required when authorization caching is enabled. The value is a comma-separated string of one or more mapping expressions of the specified request parameters. For example, if an ``Auth`` header, a ``Name`` query string parameter are defined as identity sources, this value is ``method.request.header.Auth, method.request.querystring.Name``. These parameters will be used to derive the authorization caching key and to perform runtime validation of the ``REQUEST`` authorizer by verifying all of the identity-related request parameters are present, not null and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function, otherwise, it returns a 401 Unauthorized response without calling the Lambda function. The valid value is a string of comma-separated mapping expressions of the specified request parameters. When the authorization caching is not enabled, this property is optional. hidden IdentitySource: (String|Mapping)? @@ -38,20 +23,35 @@ open class Authorizer extends cloudformation.Resource { /// A list of the Amazon Cognito user pool ARNs for the ``COGNITO_USER_POOLS`` authorizer. Each element is of this format: ``arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}``. For a ``TOKEN`` or ``REQUEST`` authorizer, this is not defined. hidden ProviderARNs: (Listing)? + /// The string identifier of the associated RestApi. + hidden RestApiId: String|Mapping + + /// Specifies the authorizer's Uniform Resource Identifier (URI). For ``TOKEN`` or ``REQUEST`` authorizers, this must be a well-formed Lambda function URI, for example, ``arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations``. In general, the URI has this form ``arn:aws:apigateway:{region}:lambda:path/{service_api}``, where ``{region}`` is the same as the region hosting the Lambda function, ``path`` indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial ``/``. For Lambda functions, this is usually of the form ``/2015-03-31/functions/[FunctionARN]/invocations``. + hidden AuthorizerUri: (String|Mapping)? + + /// The name of the authorizer. + hidden Name: String|Mapping + /// The authorizer type. Valid values are ``TOKEN`` for a Lambda function using a single authorization token submitted in a custom header, ``REQUEST`` for a Lambda function using incoming request parameters, and ``COGNITO_USER_POOLS`` for using an Amazon Cognito user pool. hidden TypeProperty: String|Mapping + /// Optional customer-defined field, used in OpenAPI imports and exports without functional impact. + hidden AuthType: (String|Mapping)? + + /// The TTL in seconds of cached authorizer results. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway will cache authorizer responses. If this field is not set, the default value is 300. The maximum value is 3600, or 1 hour. + hidden AuthorizerResultTtlInSeconds: (Int|Mapping)? + Properties { - ["AuthorizerUri"] = if (AuthorizerUri == null) null else AuthorizerUri - ["Name"] = if (Name == null) null else Name - ["RestApiId"] = if (RestApiId == null) null else RestApiId - ["AuthType"] = if (AuthType == null) null else AuthType ["AuthorizerCredentials"] = if (AuthorizerCredentials == null) null else AuthorizerCredentials - ["AuthorizerResultTtlInSeconds"] = if (AuthorizerResultTtlInSeconds == null) null else AuthorizerResultTtlInSeconds ["IdentitySource"] = if (IdentitySource == null) null else IdentitySource ["IdentityValidationExpression"] = if (IdentityValidationExpression == null) null else IdentityValidationExpression ["ProviderARNs"] = if (ProviderARNs == null) null else ProviderARNs + ["RestApiId"] = if (RestApiId == null) null else RestApiId + ["AuthorizerUri"] = if (AuthorizerUri == null) null else AuthorizerUri + ["Name"] = if (Name == null) null else Name ["Type"] = if (TypeProperty == null) null else TypeProperty + ["AuthType"] = if (AuthType == null) null else AuthType + ["AuthorizerResultTtlInSeconds"] = if (AuthorizerResultTtlInSeconds == null) null else AuthorizerResultTtlInSeconds } } diff --git a/pkl/aws/apigateway/clientcertificate.pkl b/pkl/aws/apigateway/clientcertificate.pkl index 6298dd8e..a7487b60 100644 --- a/pkl/aws/apigateway/clientcertificate.pkl +++ b/pkl/aws/apigateway/clientcertificate.pkl @@ -17,15 +17,15 @@ open class ClientCertificate extends cloudformation.Resource { Type = "AWS::ApiGateway::ClientCertificate" - /// The collection of tags. Each tag element is associated with a given resource. - hidden Tags: (Listing)? - /// The description of the client certificate. hidden Description: (String|Mapping)? + /// The collection of tags. Each tag element is associated with a given resource. + hidden Tags: (Listing)? + Properties { - ["Tags"] = if (Tags == null) null else Tags ["Description"] = if (Description == null) null else Description + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/apigateway/deployment.pkl b/pkl/aws/apigateway/deployment.pkl index 02eec2db..3021225d 100644 --- a/pkl/aws/apigateway/deployment.pkl +++ b/pkl/aws/apigateway/deployment.pkl @@ -5,49 +5,12 @@ module aws.apigateway.deployment import "../../cloudformation.pkl" -/// The ``MethodSetting`` property type configures settings for all methods in a stage. -/// -/// The ``MethodSettings`` property of the [Amazon API Gateway Deployment StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type contains a list of ``MethodSetting`` property types. -open class DeploymentMethodSetting { - CacheTtlInSeconds: (Int|Mapping)? - DataTraceEnabled: (Boolean|Mapping)? - HttpMethod: (String|Mapping)? - ThrottlingBurstLimit: (Int|Mapping)? - ThrottlingRateLimit: (Number|Mapping)? - CacheDataEncrypted: (Boolean|Mapping)? - CachingEnabled: (Boolean|Mapping)? - LoggingLevel: (String|Mapping)? - MetricsEnabled: (Boolean|Mapping)? - ResourcePath: (String|Mapping)? -} - -/// ``StageDescription`` is a property of the [AWS::ApiGateway::Deployment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html) resource that configures a deployment stage. -open class DeploymentStageDescription { - MethodSettings: (Listing)? - MetricsEnabled: (Boolean|Mapping)? - ThrottlingRateLimit: (Number|Mapping)? - Variables: (Dynamic)? - CachingEnabled: (Boolean|Mapping)? - CanarySetting: (DeploymentCanarySetting)? - DocumentationVersion: (String|Mapping)? - ThrottlingBurstLimit: (Int|Mapping)? - AccessLogSetting: (DeploymentAccessLogSetting)? - ClientCertificateId: (String|Mapping)? - Description: (String|Mapping)? - LoggingLevel: (String|Mapping)? - Tags: (Listing)? - TracingEnabled: (Boolean|Mapping)? - CacheClusterEnabled: (Boolean|Mapping)? - CacheClusterSize: (String|Mapping)? - CacheDataEncrypted: (Boolean|Mapping)? - CacheTtlInSeconds: (Int|Mapping)? - DataTraceEnabled: (Boolean|Mapping)? -} +typealias DeploymentDeploymentCanarySettingsStageVariableOverrides = Mapping /// The ``DeploymentCanarySettings`` property type specifies settings for the canary deployment. open class DeploymentDeploymentCanarySettings { PercentTraffic: (Number|Mapping)? - StageVariableOverrides: (Dynamic)? + StageVariableOverrides: (DeploymentDeploymentCanarySettingsStageVariableOverrides)? UseStageCache: (Boolean|Mapping)? } @@ -59,11 +22,13 @@ open class DeploymentAccessLogSetting { Format: (String|Mapping)? } +typealias DeploymentCanarySettingStageVariableOverrides = Mapping + /// The ``CanarySetting`` property type specifies settings for the canary deployment in this stage. /// /// ``CanarySetting`` is a property of the [StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type. open class DeploymentCanarySetting { - StageVariableOverrides: (Dynamic)? + StageVariableOverrides: (DeploymentCanarySettingStageVariableOverrides)? UseStageCache: (Boolean|Mapping)? PercentTraffic: (Number|Mapping)? } @@ -74,6 +39,47 @@ open class DeploymentTag { Value: String|Mapping } +/// The ``MethodSetting`` property type configures settings for all methods in a stage. +/// +/// The ``MethodSettings`` property of the [Amazon API Gateway Deployment StageDescription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html) property type contains a list of ``MethodSetting`` property types. +open class DeploymentMethodSetting { + CacheDataEncrypted: (Boolean|Mapping)? + CacheTtlInSeconds: (Int|Mapping)? + CachingEnabled: (Boolean|Mapping)? + LoggingLevel: (String|Mapping)? + MetricsEnabled: (Boolean|Mapping)? + ResourcePath: (String|Mapping)? + DataTraceEnabled: (Boolean|Mapping)? + HttpMethod: (String|Mapping)? + ThrottlingBurstLimit: (Int|Mapping)? + ThrottlingRateLimit: (Number|Mapping)? +} + +typealias DeploymentStageDescriptionVariables = Mapping + +/// ``StageDescription`` is a property of the [AWS::ApiGateway::Deployment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html) resource that configures a deployment stage. +open class DeploymentStageDescription { + ClientCertificateId: (String|Mapping)? + DataTraceEnabled: (Boolean|Mapping)? + MetricsEnabled: (Boolean|Mapping)? + CachingEnabled: (Boolean|Mapping)? + LoggingLevel: (String|Mapping)? + Tags: (Listing)? + ThrottlingBurstLimit: (Int|Mapping)? + ThrottlingRateLimit: (Number|Mapping)? + TracingEnabled: (Boolean|Mapping)? + CacheClusterEnabled: (Boolean|Mapping)? + CacheClusterSize: (String|Mapping)? + CacheDataEncrypted: (Boolean|Mapping)? + Description: (String|Mapping)? + AccessLogSetting: (DeploymentAccessLogSetting)? + CacheTtlInSeconds: (Int|Mapping)? + CanarySetting: (DeploymentCanarySetting)? + DocumentationVersion: (String|Mapping)? + MethodSettings: (Listing)? + Variables: (DeploymentStageDescriptionVariables)? +} + /// The ``AWS::ApiGateway::Deployment`` resource deploys an API Gateway ``RestApi`` resource to a stage so that clients can call the API over the internet. The stage acts as an environment. open class Deployment extends cloudformation.Resource { diff --git a/pkl/aws/apigateway/documentationpart.pkl b/pkl/aws/apigateway/documentationpart.pkl index c06b6d20..23cae822 100644 --- a/pkl/aws/apigateway/documentationpart.pkl +++ b/pkl/aws/apigateway/documentationpart.pkl @@ -11,11 +11,11 @@ typealias LocationType = "API"|"AUTHORIZER"|"MODEL"|"RESOURCE"|"METHOD"|"PATH_PA /// /// For more information about each property, including constraints and valid values, see [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPartLocation.html) in the *Amazon API Gateway REST API Reference*. open class DocumentationPartLocation { + StatusCode: (String|Mapping)? + Type: (LocationType|Mapping)? Method: (String|Mapping)? Name: (String|Mapping)? Path: (String|Mapping)? - StatusCode: (String|Mapping)? - Type: (LocationType|Mapping)? } /// The ``AWS::ApiGateway::DocumentationPart`` resource creates a documentation part for an API. For more information, see [Representation of API Documentation in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api-content-representation.html) in the *API Gateway Developer Guide*. @@ -24,19 +24,19 @@ open class DocumentationPart extends cloudformation.Resource { Type = "AWS::ApiGateway::DocumentationPart" - /// The new documentation content map of the targeted API entity. Enclosed key-value pairs are API-specific, but only OpenAPI-compliant key-value pairs can be exported and, hence, published. - hidden PropertiesProperty: String|Mapping - /// The string identifier of the associated RestApi. hidden RestApiId: String|Mapping /// The location of the targeted API entity of the to-be-created documentation part. hidden Location: DocumentationPartLocation + /// The new documentation content map of the targeted API entity. Enclosed key-value pairs are API-specific, but only OpenAPI-compliant key-value pairs can be exported and, hence, published. + hidden PropertiesProperty: String|Mapping + Properties { - ["Properties"] = if (PropertiesProperty == null) null else PropertiesProperty ["RestApiId"] = if (RestApiId == null) null else RestApiId ["Location"] = if (Location == null) null else Location + ["Properties"] = if (PropertiesProperty == null) null else PropertiesProperty } } diff --git a/pkl/aws/apigateway/domainname.pkl b/pkl/aws/apigateway/domainname.pkl index 379fc967..464d32d4 100644 --- a/pkl/aws/apigateway/domainname.pkl +++ b/pkl/aws/apigateway/domainname.pkl @@ -5,12 +5,6 @@ module aws.apigateway.domainname import "../../cloudformation.pkl" -/// -open class DomainNameTag { - Key: (String|Mapping)? - Value: (String|Mapping)? -} - /// open class DomainNameEndpointConfiguration { Types: (Listing)? @@ -22,15 +16,18 @@ open class DomainNameMutualTlsAuthentication { TruststoreVersion: (String|Mapping)? } +/// +open class DomainNameTag { + Key: (String|Mapping)? + Value: (String|Mapping)? +} + /// Resource Type definition for AWS::ApiGateway::DomainName. open class DomainName extends cloudformation.Resource { Type = "AWS::ApiGateway::DomainName" - /// - hidden DomainName: (String|Mapping)? - /// hidden EndpointConfiguration: (DomainNameEndpointConfiguration)? @@ -38,28 +35,31 @@ open class DomainName extends cloudformation.Resource { hidden MutualTlsAuthentication: (DomainNameMutualTlsAuthentication)? /// - hidden Tags: (Listing)? + hidden RegionalCertificateArn: (String|Mapping)? /// hidden SecurityPolicy: (String|Mapping)? /// - hidden CertificateArn: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden RegionalCertificateArn: (String|Mapping)? + hidden DomainName: (String|Mapping)? + + /// + hidden CertificateArn: (String|Mapping)? /// hidden OwnershipVerificationCertificateArn: (String|Mapping)? Properties { - ["DomainName"] = if (DomainName == null) null else DomainName ["EndpointConfiguration"] = if (EndpointConfiguration == null) null else EndpointConfiguration ["MutualTlsAuthentication"] = if (MutualTlsAuthentication == null) null else MutualTlsAuthentication - ["Tags"] = if (Tags == null) null else Tags + ["RegionalCertificateArn"] = if (RegionalCertificateArn == null) null else RegionalCertificateArn ["SecurityPolicy"] = if (SecurityPolicy == null) null else SecurityPolicy + ["Tags"] = if (Tags == null) null else Tags + ["DomainName"] = if (DomainName == null) null else DomainName ["CertificateArn"] = if (CertificateArn == null) null else CertificateArn - ["RegionalCertificateArn"] = if (RegionalCertificateArn == null) null else RegionalCertificateArn ["OwnershipVerificationCertificateArn"] = if (OwnershipVerificationCertificateArn == null) null else OwnershipVerificationCertificateArn } diff --git a/pkl/aws/apigateway/gatewayresponse.pkl b/pkl/aws/apigateway/gatewayresponse.pkl index 831ea750..0073836a 100644 --- a/pkl/aws/apigateway/gatewayresponse.pkl +++ b/pkl/aws/apigateway/gatewayresponse.pkl @@ -12,10 +12,10 @@ open class GatewayResponse extends cloudformation.Resource { /// Response parameters (paths, query strings and headers) of the GatewayResponse as a string-to-string map of key-value pairs. - hidden ResponseParameters: (Dynamic)? + hidden ResponseParameters: (GatewayResponseGatewayResponseResponseParameters)? /// Response templates of the GatewayResponse as a string-to-string map of key-value pairs. - hidden ResponseTemplates: (Dynamic)? + hidden ResponseTemplates: (GatewayResponseGatewayResponseResponseTemplates)? /// The string identifier of the associated RestApi. hidden RestApiId: String|Mapping @@ -35,3 +35,8 @@ open class GatewayResponse extends cloudformation.Resource { } } + + +typealias GatewayResponseGatewayResponseResponseParameters = Mapping + +typealias GatewayResponseGatewayResponseResponseTemplates = Mapping diff --git a/pkl/aws/apigateway/method.pkl b/pkl/aws/apigateway/method.pkl index 68aa70a3..f9250c61 100644 --- a/pkl/aws/apigateway/method.pkl +++ b/pkl/aws/apigateway/method.pkl @@ -5,47 +5,59 @@ module aws.apigateway.method import "../../cloudformation.pkl" +typealias MethodIntegrationRequestParameters = Mapping + typealias IntegrationContentHandling = "CONVERT_TO_BINARY"|"CONVERT_TO_TEXT" +typealias IntegrationPassthroughBehavior = "WHEN_NO_MATCH"|"WHEN_NO_TEMPLATES"|"NEVER" + typealias IntegrationConnectionType = "INTERNET"|"VPC_LINK" typealias IntegrationType = "AWS"|"AWS_PROXY"|"HTTP"|"HTTP_PROXY"|"MOCK" -typealias IntegrationPassthroughBehavior = "WHEN_NO_MATCH"|"WHEN_NO_TEMPLATES"|"NEVER" +typealias MethodIntegrationRequestTemplates = Mapping /// ``Integration`` is a property of the [AWS::ApiGateway::Method](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html) resource that specifies information about the target backend that a method calls. open class MethodIntegration { - IntegrationHttpMethod: (String|Mapping)? - IntegrationResponses: (Listing)? - TimeoutInMillis: (Int|Mapping)? + Credentials: (String|Mapping)? + RequestParameters: (MethodIntegrationRequestParameters)? + CacheKeyParameters: (Listing)? CacheNamespace: (String|Mapping)? ContentHandling: (IntegrationContentHandling|Mapping)? - Credentials: (String|Mapping)? + PassthroughBehavior: (IntegrationPassthroughBehavior|Mapping)? ConnectionType: (IntegrationConnectionType|Mapping)? - Uri: (String|Mapping)? - CacheKeyParameters: (Listing)? + IntegrationResponses: (Listing)? Type: IntegrationType|Mapping - RequestTemplates: (Dynamic)? + Uri: (String|Mapping)? ConnectionId: (String|Mapping)? - PassthroughBehavior: (IntegrationPassthroughBehavior|Mapping)? - RequestParameters: (Dynamic)? + IntegrationHttpMethod: (String|Mapping)? + RequestTemplates: (MethodIntegrationRequestTemplates)? + TimeoutInMillis: (Int|Mapping)? } +typealias MethodMethodResponseResponseModels = Mapping + +typealias MethodMethodResponseResponseParameters = Mapping + /// Represents a method response of a given HTTP status code returned to the client. The method response is passed from the back end through the associated integration response that can be transformed using a mapping template. open class MethodMethodResponse { - ResponseModels: (Dynamic)? - ResponseParameters: (Dynamic)? + ResponseModels: (MethodMethodResponseResponseModels)? + ResponseParameters: (MethodMethodResponseResponseParameters)? StatusCode: String|Mapping } typealias IntegrationResponseContentHandling = "CONVERT_TO_BINARY"|"CONVERT_TO_TEXT" +typealias MethodIntegrationResponseResponseParameters = Mapping + +typealias MethodIntegrationResponseResponseTemplates = Mapping + /// ``IntegrationResponse`` is a property of the [Amazon API Gateway Method Integration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html) property type that specifies the response that API Gateway sends after a method's backend finishes processing a request. open class MethodIntegrationResponse { StatusCode: String|Mapping ContentHandling: (IntegrationResponseContentHandling|Mapping)? - ResponseParameters: (Dynamic)? - ResponseTemplates: (Dynamic)? + ResponseParameters: (MethodIntegrationResponseResponseParameters)? + ResponseTemplates: (MethodIntegrationResponseResponseTemplates)? SelectionPattern: (String|Mapping)? } @@ -58,61 +70,65 @@ open class Method extends cloudformation.Resource { /// A list of authorization scopes configured on the method. The scopes are used with a ``COGNITO_USER_POOLS`` authorizer to authorize the method invocation. The authorization works by matching the method scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any method scopes matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the method scope is configured, the client must provide an access token instead of an identity token for authorization purposes. hidden AuthorizationScopes: (Listing)? - /// The method's authorization type. This parameter is required. For valid values, see [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) in the *API Gateway API Reference*. - /// - /// If you specify the ``AuthorizerId`` property, specify ``CUSTOM`` or ``COGNITO_USER_POOLS`` for this property. - hidden AuthorizationType: (MethodAuthorizationType|Mapping)? - - /// A key-value map defining required or optional method request parameters that can be accepted by API Gateway. A key is a method request parameter name matching the pattern of ``method.request.{location}.{name}``, where ``location`` is ``querystring``, ``path``, or ``header`` and ``name`` is a valid and unique parameter name. The value associated with the key is a Boolean flag indicating whether the parameter is required (``true``) or optional (``false``). The method request parameter names defined here are available in Integration to be mapped to integration request parameters or templates. - hidden RequestParameters: (Dynamic)? + /// The identifier of an authorizer to use on this method. The method's authorization type must be ``CUSTOM`` or ``COGNITO_USER_POOLS``. + hidden AuthorizerId: (String|Mapping)? /// The identifier of a RequestValidator for request validation. hidden RequestValidatorId: (String|Mapping)? + /// The string identifier of the associated RestApi. + hidden RestApiId: String|Mapping + /// A boolean flag specifying whether a valid ApiKey is required to invoke this method. hidden ApiKeyRequired: (Boolean|Mapping)? - /// Gets a method response associated with a given HTTP status code. - hidden MethodResponses: (Listing)? - - /// The identifier of an authorizer to use on this method. The method's authorization type must be ``CUSTOM`` or ``COGNITO_USER_POOLS``. - hidden AuthorizerId: (String|Mapping)? - - /// Represents an ``HTTP``, ``HTTP_PROXY``, ``AWS``, ``AWS_PROXY``, or Mock integration. - hidden Integration: (MethodIntegration)? + /// A human-friendly operation identifier for the method. For example, you can assign the ``operationName`` of ``ListPets`` for the ``GET /pets`` method in the ``PetStore`` example. + hidden OperationName: (String|Mapping)? - /// A key-value map specifying data schemas, represented by Model resources, (as the mapped value) of the request payloads of given content types (as the mapping key). - hidden RequestModels: (Dynamic)? + /// A key-value map defining required or optional method request parameters that can be accepted by API Gateway. A key is a method request parameter name matching the pattern of ``method.request.{location}.{name}``, where ``location`` is ``querystring``, ``path``, or ``header`` and ``name`` is a valid and unique parameter name. The value associated with the key is a Boolean flag indicating whether the parameter is required (``true``) or optional (``false``). The method request parameter names defined here are available in Integration to be mapped to integration request parameters or templates. + hidden RequestParameters: (MethodMethodRequestParameters)? /// The Resource identifier for the MethodResponse resource. hidden ResourceId: String|Mapping - /// The string identifier of the associated RestApi. - hidden RestApiId: String|Mapping - /// The method's HTTP verb. hidden HttpMethod: String|Mapping - /// A human-friendly operation identifier for the method. For example, you can assign the ``operationName`` of ``ListPets`` for the ``GET /pets`` method in the ``PetStore`` example. - hidden OperationName: (String|Mapping)? + /// A key-value map specifying data schemas, represented by Model resources, (as the mapped value) of the request payloads of given content types (as the mapping key). + hidden RequestModels: (MethodMethodRequestModels)? + + /// The method's authorization type. This parameter is required. For valid values, see [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) in the *API Gateway API Reference*. + /// + /// If you specify the ``AuthorizerId`` property, specify ``CUSTOM`` or ``COGNITO_USER_POOLS`` for this property. + hidden AuthorizationType: (MethodAuthorizationType|Mapping)? + + /// Represents an ``HTTP``, ``HTTP_PROXY``, ``AWS``, ``AWS_PROXY``, or Mock integration. + hidden Integration: (MethodIntegration)? + + /// Gets a method response associated with a given HTTP status code. + hidden MethodResponses: (Listing)? Properties { ["AuthorizationScopes"] = if (AuthorizationScopes == null) null else AuthorizationScopes - ["AuthorizationType"] = if (AuthorizationType == null) null else AuthorizationType - ["RequestParameters"] = if (RequestParameters == null) null else RequestParameters + ["AuthorizerId"] = if (AuthorizerId == null) null else AuthorizerId ["RequestValidatorId"] = if (RequestValidatorId == null) null else RequestValidatorId + ["RestApiId"] = if (RestApiId == null) null else RestApiId ["ApiKeyRequired"] = if (ApiKeyRequired == null) null else ApiKeyRequired - ["MethodResponses"] = if (MethodResponses == null) null else MethodResponses - ["AuthorizerId"] = if (AuthorizerId == null) null else AuthorizerId - ["Integration"] = if (Integration == null) null else Integration - ["RequestModels"] = if (RequestModels == null) null else RequestModels + ["OperationName"] = if (OperationName == null) null else OperationName + ["RequestParameters"] = if (RequestParameters == null) null else RequestParameters ["ResourceId"] = if (ResourceId == null) null else ResourceId - ["RestApiId"] = if (RestApiId == null) null else RestApiId ["HttpMethod"] = if (HttpMethod == null) null else HttpMethod - ["OperationName"] = if (OperationName == null) null else OperationName + ["RequestModels"] = if (RequestModels == null) null else RequestModels + ["AuthorizationType"] = if (AuthorizationType == null) null else AuthorizationType + ["Integration"] = if (Integration == null) null else Integration + ["MethodResponses"] = if (MethodResponses == null) null else MethodResponses } } +typealias MethodMethodRequestParameters = Mapping + +typealias MethodMethodRequestModels = Mapping + typealias MethodAuthorizationType = "NONE"|"AWS_IAM"|"CUSTOM"|"COGNITO_USER_POOLS" diff --git a/pkl/aws/apigateway/requestvalidator.pkl b/pkl/aws/apigateway/requestvalidator.pkl index 9da5fd49..7afdf194 100644 --- a/pkl/aws/apigateway/requestvalidator.pkl +++ b/pkl/aws/apigateway/requestvalidator.pkl @@ -11,6 +11,9 @@ open class RequestValidator extends cloudformation.Resource { Type = "AWS::ApiGateway::RequestValidator" + /// The name of this RequestValidator + hidden Name: (String|Mapping)? + /// The string identifier of the associated RestApi. hidden RestApiId: String|Mapping @@ -20,14 +23,11 @@ open class RequestValidator extends cloudformation.Resource { /// A Boolean flag to indicate whether to validate request parameters (``true``) or not (``false``). hidden ValidateRequestParameters: (Boolean|Mapping)? - /// The name of this RequestValidator - hidden Name: (String|Mapping)? - Properties { + ["Name"] = if (Name == null) null else Name ["RestApiId"] = if (RestApiId == null) null else RestApiId ["ValidateRequestBody"] = if (ValidateRequestBody == null) null else ValidateRequestBody ["ValidateRequestParameters"] = if (ValidateRequestParameters == null) null else ValidateRequestParameters - ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/apigateway/restapi.pkl b/pkl/aws/apigateway/restapi.pkl index 936f8fba..4a94f3c7 100644 --- a/pkl/aws/apigateway/restapi.pkl +++ b/pkl/aws/apigateway/restapi.pkl @@ -5,6 +5,16 @@ module aws.apigateway.restapi import "../../cloudformation.pkl" +/// ``S3Location`` is a property of the [AWS::ApiGateway::RestApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html) resource that specifies the Amazon S3 location of a OpenAPI (formerly Swagger) file that defines a set of RESTful APIs in JSON or YAML. +/// +/// On January 1, 2016, the Swagger Specification was donated to the [OpenAPI initiative](https://docs.aws.amazon.com/https://www.openapis.org/), becoming the foundation of the OpenAPI Specification. +open class RestApiS3Location { + ETag: (String|Mapping)? + Version: (String|Mapping)? + Key: (String|Mapping)? + Bucket: (String|Mapping)? +} + /// The ``EndpointConfiguration`` property type specifies the endpoint types of a REST API. /// /// ``EndpointConfiguration`` is a property of the [AWS::ApiGateway::RestApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html) resource. @@ -15,18 +25,8 @@ open class RestApiEndpointConfiguration { /// open class RestApiTag { - Key: String|Mapping Value: String|Mapping -} - -/// ``S3Location`` is a property of the [AWS::ApiGateway::RestApi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html) resource that specifies the Amazon S3 location of a OpenAPI (formerly Swagger) file that defines a set of RESTful APIs in JSON or YAML. -/// -/// On January 1, 2016, the Swagger Specification was donated to the [OpenAPI initiative](https://docs.aws.amazon.com/https://www.openapis.org/), becoming the foundation of the OpenAPI Specification. -open class RestApiS3Location { - Bucket: (String|Mapping)? - ETag: (String|Mapping)? - Version: (String|Mapping)? - Key: (String|Mapping)? + Key: String|Mapping } /// The ``AWS::ApiGateway::RestApi`` resource creates a REST API. For more information, see [restapi:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateRestApi.html) in the *Amazon API Gateway REST API Reference*. @@ -37,24 +37,18 @@ open class RestApi extends cloudformation.Resource { Type = "AWS::ApiGateway::RestApi" + /// The source of the API key for metering requests according to a usage plan. Valid values are: ``HEADER`` to read the API key from the ``X-API-Key`` header of a request. ``AUTHORIZER`` to read the API key from the ``UsageIdentifierKey`` from a custom authorizer. + hidden ApiKeySourceType: (String|Mapping)? + /// The list of binary media types supported by the RestApi. By default, the RestApi supports only UTF-8-encoded text payloads. hidden BinaryMediaTypes: (Listing)? - /// The description of the RestApi. - hidden Description: (String|Mapping)? + /// The Amazon Simple Storage Service (Amazon S3) location that points to an OpenAPI file, which defines a set of RESTful APIs in JSON or YAML format. + hidden BodyS3Location: (RestApiS3Location)? /// Specifies whether clients can invoke your API by using the default ``execute-api`` endpoint. By default, clients can invoke your API with the default ``https://{api_id}.execute-api.{region}.amazonaws.com`` endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint hidden DisableExecuteApiEndpoint: (Boolean|Mapping)? - /// A query parameter to indicate whether to rollback the API update (``true``) or not (``false``) when a warning is encountered. The default value is ``false``. - hidden FailOnWarnings: (Boolean|Mapping)? - - /// An OpenAPI specification that defines a set of RESTful APIs in JSON format. For YAML templates, you can also provide the specification in YAML format. - hidden Body: (Dynamic)? - - /// Custom header parameters as part of the request. For example, to exclude DocumentationParts from an imported API, set ``ignore=documentation`` as a ``parameters`` value, as in the AWS CLI command of ``aws apigateway import-rest-api --parameters ignore=documentation --body 'file:///path/to/imported-api-body.json'``. - hidden Parameters: (Dynamic)? - /// This property applies only when you use OpenAPI to define your REST API. The ``Mode`` determines how API Gateway handles resource updates. /// /// Valid values are ``overwrite`` or ``merge``. @@ -64,46 +58,55 @@ open class RestApi extends cloudformation.Resource { /// Use the default mode to define top-level ``RestApi`` properties in addition to using OpenAPI. Generally, it's preferred to use API Gateway's OpenAPI extensions to model these properties. hidden Mode: (String|Mapping)? - /// The ID of the RestApi that you want to clone from. - hidden CloneFrom: (String|Mapping)? - - /// A nullable integer that is used to enable compression (with non-negative between 0 and 10485760 (10M) bytes, inclusive) or disable compression (with a null value) on an API. When compression is enabled, compression or decompression is not applied on the payload if the payload size is smaller than this value. Setting it to zero allows compression for any payload size. - hidden MinimumCompressionSize: (Int|Mapping)? + /// An OpenAPI specification that defines a set of RESTful APIs in JSON format. For YAML templates, you can also provide the specification in YAML format. + hidden Body: (Dynamic)? /// A list of the endpoint types of the API. Use this property when creating an API. When importing an existing API, specify the endpoint configuration types using the ``Parameters`` property. hidden EndpointConfiguration: (RestApiEndpointConfiguration)? + /// The description of the RestApi. + hidden Description: (String|Mapping)? + /// The name of the RestApi. A name is required if the REST API is not based on an OpenAPI specification. hidden Name: (String|Mapping)? - /// A policy document that contains the permissions for the ``RestApi`` resource. To set the ARN for the policy, use the ``!Join`` intrinsic function with ``""`` as delimiter and values of ``"execute-api:/"`` and ``"*"``. - hidden Policy: (Dynamic)? + /// Custom header parameters as part of the request. For example, to exclude DocumentationParts from an imported API, set ``ignore=documentation`` as a ``parameters`` value, as in the AWS CLI command of ``aws apigateway import-rest-api --parameters ignore=documentation --body 'file:///path/to/imported-api-body.json'``. + hidden Parameters: (RestApiRestApiParameters)? /// The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with ``aws:``. The tag value can be up to 256 characters. hidden Tags: (Listing)? - /// The source of the API key for metering requests according to a usage plan. Valid values are: ``HEADER`` to read the API key from the ``X-API-Key`` header of a request. ``AUTHORIZER`` to read the API key from the ``UsageIdentifierKey`` from a custom authorizer. - hidden ApiKeySourceType: (String|Mapping)? + /// The ID of the RestApi that you want to clone from. + hidden CloneFrom: (String|Mapping)? - /// The Amazon Simple Storage Service (Amazon S3) location that points to an OpenAPI file, which defines a set of RESTful APIs in JSON or YAML format. - hidden BodyS3Location: (RestApiS3Location)? + /// A query parameter to indicate whether to rollback the API update (``true``) or not (``false``) when a warning is encountered. The default value is ``false``. + hidden FailOnWarnings: (Boolean|Mapping)? + + /// A policy document that contains the permissions for the ``RestApi`` resource. To set the ARN for the policy, use the ``!Join`` intrinsic function with ``""`` as delimiter and values of ``"execute-api:/"`` and ``"*"``. + hidden Policy: (Dynamic)? + + /// A nullable integer that is used to enable compression (with non-negative between 0 and 10485760 (10M) bytes, inclusive) or disable compression (with a null value) on an API. When compression is enabled, compression or decompression is not applied on the payload if the payload size is smaller than this value. Setting it to zero allows compression for any payload size. + hidden MinimumCompressionSize: (Int|Mapping)? Properties { + ["ApiKeySourceType"] = if (ApiKeySourceType == null) null else ApiKeySourceType ["BinaryMediaTypes"] = if (BinaryMediaTypes == null) null else BinaryMediaTypes - ["Description"] = if (Description == null) null else Description + ["BodyS3Location"] = if (BodyS3Location == null) null else BodyS3Location ["DisableExecuteApiEndpoint"] = if (DisableExecuteApiEndpoint == null) null else DisableExecuteApiEndpoint - ["FailOnWarnings"] = if (FailOnWarnings == null) null else FailOnWarnings - ["Body"] = if (Body == null) null else Body - ["Parameters"] = if (Parameters == null) null else Parameters ["Mode"] = if (Mode == null) null else Mode - ["CloneFrom"] = if (CloneFrom == null) null else CloneFrom - ["MinimumCompressionSize"] = if (MinimumCompressionSize == null) null else MinimumCompressionSize + ["Body"] = if (Body == null) null else Body ["EndpointConfiguration"] = if (EndpointConfiguration == null) null else EndpointConfiguration + ["Description"] = if (Description == null) null else Description ["Name"] = if (Name == null) null else Name - ["Policy"] = if (Policy == null) null else Policy + ["Parameters"] = if (Parameters == null) null else Parameters ["Tags"] = if (Tags == null) null else Tags - ["ApiKeySourceType"] = if (ApiKeySourceType == null) null else ApiKeySourceType - ["BodyS3Location"] = if (BodyS3Location == null) null else BodyS3Location + ["CloneFrom"] = if (CloneFrom == null) null else CloneFrom + ["FailOnWarnings"] = if (FailOnWarnings == null) null else FailOnWarnings + ["Policy"] = if (Policy == null) null else Policy + ["MinimumCompressionSize"] = if (MinimumCompressionSize == null) null else MinimumCompressionSize } } + + +typealias RestApiRestApiParameters = Mapping diff --git a/pkl/aws/apigateway/stage.pkl b/pkl/aws/apigateway/stage.pkl index b7dbb84d..b024802b 100644 --- a/pkl/aws/apigateway/stage.pkl +++ b/pkl/aws/apigateway/stage.pkl @@ -5,42 +5,44 @@ module aws.apigateway.stage import "../../cloudformation.pkl" +typealias StageCanarySettingStageVariableOverrides = Mapping + /// Configuration settings of a canary deployment. open class StageCanarySetting { - StageVariableOverrides: (Dynamic)? - UseStageCache: (Boolean|Mapping)? DeploymentId: (String|Mapping)? PercentTraffic: (Number|Mapping)? + StageVariableOverrides: (StageCanarySettingStageVariableOverrides)? + UseStageCache: (Boolean|Mapping)? } /// The ``AccessLogSetting`` property type specifies settings for logging access in this stage. /// /// ``AccessLogSetting`` is a property of the [AWS::ApiGateway::Stage](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html) resource. open class StageAccessLogSetting { - DestinationArn: (String|Mapping)? Format: (String|Mapping)? + DestinationArn: (String|Mapping)? } /// The ``MethodSetting`` property type configures settings for all methods in a stage. /// /// The ``MethodSettings`` property of the ``AWS::ApiGateway::Stage`` resource contains a list of ``MethodSetting`` property types. open class StageMethodSetting { - CacheDataEncrypted: (Boolean|Mapping)? - LoggingLevel: (String|Mapping)? + CachingEnabled: (Boolean|Mapping)? + HttpMethod: (String|Mapping)? + ResourcePath: (String|Mapping)? ThrottlingBurstLimit: (Int|Mapping)? ThrottlingRateLimit: (Number|Mapping)? + CacheDataEncrypted: (Boolean|Mapping)? CacheTtlInSeconds: (Int|Mapping)? - CachingEnabled: (Boolean|Mapping)? DataTraceEnabled: (Boolean|Mapping)? - HttpMethod: (String|Mapping)? + LoggingLevel: (String|Mapping)? MetricsEnabled: (Boolean|Mapping)? - ResourcePath: (String|Mapping)? } /// open class StageTag { - Key: String|Mapping Value: String|Mapping + Key: String|Mapping } /// The ``AWS::ApiGateway::Stage`` resource creates a stage for a deployment. @@ -49,14 +51,29 @@ open class Stage extends cloudformation.Resource { Type = "AWS::ApiGateway::Stage" - /// A map that defines the method settings for a Stage resource. Keys (designated as ``/{method_setting_key`` below) are method paths defined as ``{resource_path}/{http_method}`` for an individual method override, or ``/\*/\*`` for overriding all methods in the stage. - hidden MethodSettings: (Listing)? + /// The identifier of a client certificate for an API stage. + hidden ClientCertificateId: (String|Mapping)? /// The name of the stage is the first path segment in the Uniform Resource Identifier (URI) of a call to API Gateway. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters. hidden StageName: (String|Mapping)? + /// Access log settings, including the access log format and access log destination ARN. + hidden AccessLogSetting: (StageAccessLogSetting)? + + /// Specifies whether a cache cluster is enabled for the stage. + hidden CacheClusterEnabled: (Boolean|Mapping)? + + /// A map that defines the method settings for a Stage resource. Keys (designated as ``/{method_setting_key`` below) are method paths defined as ``{resource_path}/{http_method}`` for an individual method override, or ``/\*/\*`` for overriding all methods in the stage. + hidden MethodSettings: (Listing)? + + /// Specifies whether active tracing with X-ray is enabled for the Stage. + hidden TracingEnabled: (Boolean|Mapping)? + /// A map (string-to-string map) that defines the stage variables, where the variable name is the key and the variable value is the value. Variable names are limited to alphanumeric characters. Values must match the following regular expression: ``[A-Za-z0-9-._~:/?#&=,]+``. - hidden Variables: (Dynamic)? + hidden Variables: (StageStageVariables)? + + /// The stage's cache capacity in GB. For more information about choosing a cache size, see [Enabling API caching to enhance responsiveness](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html). + hidden CacheClusterSize: (String|Mapping)? /// Settings for the canary deployment in this stage. hidden CanarySetting: (StageCanarySetting)? @@ -64,48 +81,36 @@ open class Stage extends cloudformation.Resource { /// The identifier of the Deployment that the stage points to. hidden DeploymentId: (String|Mapping)? - /// The string identifier of the associated RestApi. - hidden RestApiId: String|Mapping - /// The stage's description. hidden Description: (String|Mapping)? - /// Specifies whether active tracing with X-ray is enabled for the Stage. - hidden TracingEnabled: (Boolean|Mapping)? - - /// The identifier of a client certificate for an API stage. - hidden ClientCertificateId: (String|Mapping)? - /// The version of the associated API documentation. hidden DocumentationVersion: (String|Mapping)? + /// The string identifier of the associated RestApi. + hidden RestApiId: String|Mapping + /// The collection of tags. Each tag element is associated with a given resource. hidden Tags: (Listing)? - /// Access log settings, including the access log format and access log destination ARN. - hidden AccessLogSetting: (StageAccessLogSetting)? - - /// Specifies whether a cache cluster is enabled for the stage. - hidden CacheClusterEnabled: (Boolean|Mapping)? - - /// The stage's cache capacity in GB. For more information about choosing a cache size, see [Enabling API caching to enhance responsiveness](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html). - hidden CacheClusterSize: (String|Mapping)? - Properties { - ["MethodSettings"] = if (MethodSettings == null) null else MethodSettings + ["ClientCertificateId"] = if (ClientCertificateId == null) null else ClientCertificateId ["StageName"] = if (StageName == null) null else StageName + ["AccessLogSetting"] = if (AccessLogSetting == null) null else AccessLogSetting + ["CacheClusterEnabled"] = if (CacheClusterEnabled == null) null else CacheClusterEnabled + ["MethodSettings"] = if (MethodSettings == null) null else MethodSettings + ["TracingEnabled"] = if (TracingEnabled == null) null else TracingEnabled ["Variables"] = if (Variables == null) null else Variables + ["CacheClusterSize"] = if (CacheClusterSize == null) null else CacheClusterSize ["CanarySetting"] = if (CanarySetting == null) null else CanarySetting ["DeploymentId"] = if (DeploymentId == null) null else DeploymentId - ["RestApiId"] = if (RestApiId == null) null else RestApiId ["Description"] = if (Description == null) null else Description - ["TracingEnabled"] = if (TracingEnabled == null) null else TracingEnabled - ["ClientCertificateId"] = if (ClientCertificateId == null) null else ClientCertificateId ["DocumentationVersion"] = if (DocumentationVersion == null) null else DocumentationVersion + ["RestApiId"] = if (RestApiId == null) null else RestApiId ["Tags"] = if (Tags == null) null else Tags - ["AccessLogSetting"] = if (AccessLogSetting == null) null else AccessLogSetting - ["CacheClusterEnabled"] = if (CacheClusterEnabled == null) null else CacheClusterEnabled - ["CacheClusterSize"] = if (CacheClusterSize == null) null else CacheClusterSize } } + + +typealias StageStageVariables = Mapping diff --git a/pkl/aws/apigateway/usageplan.pkl b/pkl/aws/apigateway/usageplan.pkl index 52676609..8e8764d6 100644 --- a/pkl/aws/apigateway/usageplan.pkl +++ b/pkl/aws/apigateway/usageplan.pkl @@ -5,32 +5,34 @@ module aws.apigateway.usageplan import "../../cloudformation.pkl" +typealias UsagePlanApiStageThrottle = Mapping + /// API stage name of the associated API stage in a usage plan. open class UsagePlanApiStage { - Stage: (String|Mapping)? - Throttle: (Dynamic)? ApiId: (String|Mapping)? + Stage: (String|Mapping)? + Throttle: (UsagePlanApiStageThrottle)? } /// ``ThrottleSettings`` is a property of the [AWS::ApiGateway::UsagePlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html) resource that specifies the overall request rate (average requests per second) and burst capacity when users call your REST APIs. open class UsagePlanThrottleSettings { - BurstLimit: (Int|Mapping)? RateLimit: (Number|Mapping)? + BurstLimit: (Int|Mapping)? } /// open class UsagePlanTag { - Key: String|Mapping Value: String|Mapping + Key: String|Mapping } /// ``QuotaSettings`` is a property of the [AWS::ApiGateway::UsagePlan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html) resource that specifies a target for the maximum number of requests users can make to your REST APIs. /// /// In some cases clients can exceed the targets that you set. Don?t rely on usage plans to control costs. Consider using [](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) to monitor costs and [](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) to manage API requests. open class UsagePlanQuotaSettings { + Period: (String|Mapping)? Limit: (Int|Mapping)? Offset: (Int|Mapping)? - Period: (String|Mapping)? } /// The ``AWS::ApiGateway::UsagePlan`` resource creates a usage plan for deployed APIs. A usage plan sets a target for the throttling and quota limits on individual client API keys. For more information, see [Creating and Using API Usage Plans in Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html) in the *API Gateway Developer Guide*. @@ -41,6 +43,12 @@ open class UsagePlan extends cloudformation.Resource { Type = "AWS::ApiGateway::UsagePlan" + /// A map containing method level throttling information for API stage in a usage plan. + hidden Throttle: (UsagePlanThrottleSettings)? + + /// The name of a usage plan. + hidden UsagePlanName: (String|Mapping)? + /// The associated API stages of a usage plan. hidden ApiStages: (Listing)? @@ -53,19 +61,13 @@ open class UsagePlan extends cloudformation.Resource { /// The collection of tags. Each tag element is associated with a given resource. hidden Tags: (Listing)? - /// A map containing method level throttling information for API stage in a usage plan. - hidden Throttle: (UsagePlanThrottleSettings)? - - /// The name of a usage plan. - hidden UsagePlanName: (String|Mapping)? - Properties { + ["Throttle"] = if (Throttle == null) null else Throttle + ["UsagePlanName"] = if (UsagePlanName == null) null else UsagePlanName ["ApiStages"] = if (ApiStages == null) null else ApiStages ["Description"] = if (Description == null) null else Description ["Quota"] = if (Quota == null) null else Quota ["Tags"] = if (Tags == null) null else Tags - ["Throttle"] = if (Throttle == null) null else Throttle - ["UsagePlanName"] = if (UsagePlanName == null) null else UsagePlanName } } diff --git a/pkl/aws/apigateway/usageplankey.pkl b/pkl/aws/apigateway/usageplankey.pkl index f920fdf3..6cffcf83 100644 --- a/pkl/aws/apigateway/usageplankey.pkl +++ b/pkl/aws/apigateway/usageplankey.pkl @@ -11,19 +11,19 @@ open class UsagePlanKey extends cloudformation.Resource { Type = "AWS::ApiGateway::UsagePlanKey" + /// The Id of the UsagePlanKey resource. + hidden KeyId: String|Mapping + /// The type of a UsagePlanKey resource for a plan customer. hidden KeyType: UsagePlanKeyKeyType|Mapping /// The Id of the UsagePlan resource representing the usage plan containing the UsagePlanKey resource representing a plan customer. hidden UsagePlanId: String|Mapping - /// The Id of the UsagePlanKey resource. - hidden KeyId: String|Mapping - Properties { + ["KeyId"] = if (KeyId == null) null else KeyId ["KeyType"] = if (KeyType == null) null else KeyType ["UsagePlanId"] = if (UsagePlanId == null) null else UsagePlanId - ["KeyId"] = if (KeyId == null) null else KeyId } } diff --git a/pkl/aws/apigatewayv2/api.pkl b/pkl/aws/apigatewayv2/api.pkl index 5a31c6d6..905eff0a 100644 --- a/pkl/aws/apigatewayv2/api.pkl +++ b/pkl/aws/apigatewayv2/api.pkl @@ -5,22 +5,22 @@ module aws.apigatewayv2.api import "../../cloudformation.pkl" -/// The ``BodyS3Location`` property specifies an S3 location from which to import an OpenAPI definition. Supported only for HTTP APIs. -open class ApiBodyS3Location { - Etag: (String|Mapping)? - Bucket: (String|Mapping)? - Version: (String|Mapping)? - Key: (String|Mapping)? -} - /// The ``Cors`` property specifies a CORS configuration for an API. Supported only for HTTP APIs. See [Configuring CORS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html) for more information. open class ApiCors { + MaxAge: (Int|Mapping)? AllowMethods: (Listing)? AllowOrigins: (Listing)? AllowCredentials: (Boolean|Mapping)? ExposeHeaders: (Listing)? AllowHeaders: (Listing)? - MaxAge: (Int|Mapping)? +} + +/// The ``BodyS3Location`` property specifies an S3 location from which to import an OpenAPI definition. Supported only for HTTP APIs. +open class ApiBodyS3Location { + Etag: (String|Mapping)? + Bucket: (String|Mapping)? + Version: (String|Mapping)? + Key: (String|Mapping)? } /// The ``AWS::ApiGatewayV2::Api`` resource creates an API. WebSocket APIs and HTTP APIs are supported. For more information about WebSocket APIs, see [About WebSocket APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-overview.html) in the *API Gateway Developer Guide*. For more information about HTTP APIs, see [HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html) in the *API Gateway Developer Guide.* @@ -29,20 +29,26 @@ open class Api extends cloudformation.Resource { Type = "AWS::ApiGatewayV2::Api" + /// Specifies whether clients can invoke your API by using the default ``execute-api`` endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint. + hidden DisableExecuteApiEndpoint: (Boolean|Mapping)? + /// Avoid validating models when creating a deployment. Supported only for WebSocket APIs. hidden DisableSchemaValidation: (Boolean|Mapping)? - /// The API protocol. Valid values are ``WEBSOCKET`` or ``HTTP``. Required unless you specify an OpenAPI definition for ``Body`` or ``S3BodyLocation``. - hidden ProtocolType: (String|Mapping)? - /// The OpenAPI definition. Supported only for HTTP APIs. To import an HTTP API, you must specify a ``Body`` or ``BodyS3Location``. If you specify a ``Body`` or ``BodyS3Location``, don't specify CloudFormation resources such as ``AWS::ApiGatewayV2::Authorizer`` or ``AWS::ApiGatewayV2::Route``. API Gateway doesn't support the combination of OpenAPI and CloudFormation resources. hidden Body: (Dynamic)? - /// The description of the API. - hidden Description: (String|Mapping)? + /// A CORS configuration. Supported only for HTTP APIs. See [Configuring CORS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html) for more information. + hidden CorsConfiguration: (ApiCors)? - /// Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered. - hidden FailOnWarnings: (Boolean|Mapping)? + /// The collection of tags. Each tag element is associated with a given resource. + hidden Tags: (ApiApiTags)? + + /// The route selection expression for the API. For HTTP APIs, the ``routeSelectionExpression`` must be ``${request.method} ${request.path}``. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs. + hidden RouteSelectionExpression: (String|Mapping)? + + /// The name of the API. Required unless you specify an OpenAPI definition for ``Body`` or ``S3BodyLocation``. + hidden Name: (String|Mapping)? /// This property is part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Supported only for HTTP APIs. hidden Target: (String|Mapping)? @@ -50,54 +56,51 @@ open class Api extends cloudformation.Resource { /// This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify ``arn:aws:iam::*:user/*``. To use resource-based permissions on supported AWS services, specify ``null``. Currently, this property is not used for HTTP integrations. Supported only for HTTP APIs. hidden CredentialsArn: (String|Mapping)? - /// A version identifier for the API. - hidden Version: (String|Mapping)? - - /// This property is part of quick create. If you don't specify a ``routeKey``, a default route of ``$default`` is created. The ``$default`` route acts as a catch-all for any request made to your API, for a particular stage. The ``$default`` route key can't be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs. - hidden RouteKey: (String|Mapping)? - /// An API key selection expression. Supported only for WebSocket APIs. See [API Key Selection Expressions](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions). hidden ApiKeySelectionExpression: (String|Mapping)? - /// The route selection expression for the API. For HTTP APIs, the ``routeSelectionExpression`` must be ``${request.method} ${request.path}``. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs. - hidden RouteSelectionExpression: (String|Mapping)? + /// The S3 location of an OpenAPI definition. Supported only for HTTP APIs. To import an HTTP API, you must specify a ``Body`` or ``BodyS3Location``. If you specify a ``Body`` or ``BodyS3Location``, don't specify CloudFormation resources such as ``AWS::ApiGatewayV2::Authorizer`` or ``AWS::ApiGatewayV2::Route``. API Gateway doesn't support the combination of OpenAPI and CloudFormation resources. + hidden BodyS3Location: (ApiBodyS3Location)? + + /// The description of the API. + hidden Description: (String|Mapping)? /// Specifies how to interpret the base path of the API during import. Valid values are ``ignore``, ``prepend``, and ``split``. The default value is ``ignore``. To learn more, see [Set the OpenAPI basePath Property](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html). Supported only for HTTP APIs. hidden BasePath: (String|Mapping)? - /// Specifies whether clients can invoke your API by using the default ``execute-api`` endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint. - hidden DisableExecuteApiEndpoint: (Boolean|Mapping)? - - /// The name of the API. Required unless you specify an OpenAPI definition for ``Body`` or ``S3BodyLocation``. - hidden Name: (String|Mapping)? + /// Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered. + hidden FailOnWarnings: (Boolean|Mapping)? - /// A CORS configuration. Supported only for HTTP APIs. See [Configuring CORS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html) for more information. - hidden CorsConfiguration: (ApiCors)? + /// A version identifier for the API. + hidden Version: (String|Mapping)? - /// The collection of tags. Each tag element is associated with a given resource. - hidden Tags: (Dynamic)? + /// The API protocol. Valid values are ``WEBSOCKET`` or ``HTTP``. Required unless you specify an OpenAPI definition for ``Body`` or ``S3BodyLocation``. + hidden ProtocolType: (String|Mapping)? - /// The S3 location of an OpenAPI definition. Supported only for HTTP APIs. To import an HTTP API, you must specify a ``Body`` or ``BodyS3Location``. If you specify a ``Body`` or ``BodyS3Location``, don't specify CloudFormation resources such as ``AWS::ApiGatewayV2::Authorizer`` or ``AWS::ApiGatewayV2::Route``. API Gateway doesn't support the combination of OpenAPI and CloudFormation resources. - hidden BodyS3Location: (ApiBodyS3Location)? + /// This property is part of quick create. If you don't specify a ``routeKey``, a default route of ``$default`` is created. The ``$default`` route acts as a catch-all for any request made to your API, for a particular stage. The ``$default`` route key can't be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs. + hidden RouteKey: (String|Mapping)? Properties { + ["DisableExecuteApiEndpoint"] = if (DisableExecuteApiEndpoint == null) null else DisableExecuteApiEndpoint ["DisableSchemaValidation"] = if (DisableSchemaValidation == null) null else DisableSchemaValidation - ["ProtocolType"] = if (ProtocolType == null) null else ProtocolType ["Body"] = if (Body == null) null else Body - ["Description"] = if (Description == null) null else Description - ["FailOnWarnings"] = if (FailOnWarnings == null) null else FailOnWarnings + ["CorsConfiguration"] = if (CorsConfiguration == null) null else CorsConfiguration + ["Tags"] = if (Tags == null) null else Tags + ["RouteSelectionExpression"] = if (RouteSelectionExpression == null) null else RouteSelectionExpression + ["Name"] = if (Name == null) null else Name ["Target"] = if (Target == null) null else Target ["CredentialsArn"] = if (CredentialsArn == null) null else CredentialsArn - ["Version"] = if (Version == null) null else Version - ["RouteKey"] = if (RouteKey == null) null else RouteKey ["ApiKeySelectionExpression"] = if (ApiKeySelectionExpression == null) null else ApiKeySelectionExpression - ["RouteSelectionExpression"] = if (RouteSelectionExpression == null) null else RouteSelectionExpression - ["BasePath"] = if (BasePath == null) null else BasePath - ["DisableExecuteApiEndpoint"] = if (DisableExecuteApiEndpoint == null) null else DisableExecuteApiEndpoint - ["Name"] = if (Name == null) null else Name - ["CorsConfiguration"] = if (CorsConfiguration == null) null else CorsConfiguration - ["Tags"] = if (Tags == null) null else Tags ["BodyS3Location"] = if (BodyS3Location == null) null else BodyS3Location + ["Description"] = if (Description == null) null else Description + ["BasePath"] = if (BasePath == null) null else BasePath + ["FailOnWarnings"] = if (FailOnWarnings == null) null else FailOnWarnings + ["Version"] = if (Version == null) null else Version + ["ProtocolType"] = if (ProtocolType == null) null else ProtocolType + ["RouteKey"] = if (RouteKey == null) null else RouteKey } } + + +typealias ApiApiTags = Mapping diff --git a/pkl/aws/apigatewayv2/apigatewaymanagedoverrides.pkl b/pkl/aws/apigatewayv2/apigatewaymanagedoverrides.pkl index 0561c523..2b17e8f1 100644 --- a/pkl/aws/apigatewayv2/apigatewaymanagedoverrides.pkl +++ b/pkl/aws/apigatewayv2/apigatewaymanagedoverrides.pkl @@ -7,38 +7,38 @@ import "../../cloudformation.pkl" /// open class ApiGatewayManagedOverridesRouteSettings { + ThrottlingRateLimit: (Number|Mapping)? DetailedMetricsEnabled: (Boolean|Mapping)? LoggingLevel: (String|Mapping)? DataTraceEnabled: (Boolean|Mapping)? ThrottlingBurstLimit: (Int|Mapping)? - ThrottlingRateLimit: (Number|Mapping)? } /// open class ApiGatewayManagedOverridesStageOverrides { + Description: (String|Mapping)? + AccessLogSettings: (ApiGatewayManagedOverridesAccessLogSettings)? AutoDeploy: (Boolean|Mapping)? RouteSettings: (Dynamic)? StageVariables: (Dynamic)? DefaultRouteSettings: (ApiGatewayManagedOverridesRouteSettings)? - Description: (String|Mapping)? - AccessLogSettings: (ApiGatewayManagedOverridesAccessLogSettings)? } /// open class ApiGatewayManagedOverridesRouteOverrides { + AuthorizerId: (String|Mapping)? + OperationName: (String|Mapping)? AuthorizationScopes: (Listing)? Target: (String|Mapping)? AuthorizationType: (String|Mapping)? - AuthorizerId: (String|Mapping)? - OperationName: (String|Mapping)? } /// open class ApiGatewayManagedOverridesIntegrationOverrides { - IntegrationMethod: (String|Mapping)? TimeoutInMillis: (Int|Mapping)? Description: (String|Mapping)? PayloadFormatVersion: (String|Mapping)? + IntegrationMethod: (String|Mapping)? } /// @@ -54,22 +54,22 @@ open class ApiGatewayManagedOverrides extends cloudformation.Resource { /// - hidden ApiId: String|Mapping + hidden Stage: (ApiGatewayManagedOverridesStageOverrides)? /// - hidden Route: (ApiGatewayManagedOverridesRouteOverrides)? + hidden Integration: (ApiGatewayManagedOverridesIntegrationOverrides)? /// - hidden Stage: (ApiGatewayManagedOverridesStageOverrides)? + hidden ApiId: String|Mapping /// - hidden Integration: (ApiGatewayManagedOverridesIntegrationOverrides)? + hidden Route: (ApiGatewayManagedOverridesRouteOverrides)? Properties { - ["ApiId"] = if (ApiId == null) null else ApiId - ["Route"] = if (Route == null) null else Route ["Stage"] = if (Stage == null) null else Stage ["Integration"] = if (Integration == null) null else Integration + ["ApiId"] = if (ApiId == null) null else ApiId + ["Route"] = if (Route == null) null else Route } } diff --git a/pkl/aws/apigatewayv2/authorizer.pkl b/pkl/aws/apigatewayv2/authorizer.pkl index 74da696f..fda12e00 100644 --- a/pkl/aws/apigatewayv2/authorizer.pkl +++ b/pkl/aws/apigatewayv2/authorizer.pkl @@ -17,54 +17,54 @@ open class Authorizer extends cloudformation.Resource { Type = "AWS::ApiGatewayV2::Authorizer" - /// Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html). - hidden EnableSimpleResponses: (Boolean|Mapping)? - - /// The authorizer's Uniform Resource Identifier (URI). For ``REQUEST`` authorizers, this must be a well-formed Lambda function URI, for example, ``arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations``. In general, the URI has this form: ``arn:aws:apigateway:{region}:lambda:path/{service_api}``, where *{region}* is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial ``/``. For Lambda functions, this is usually of the form ``/2015-03-31/functions/[FunctionARN]/invocations``. - hidden AuthorizerUri: (String|Mapping)? - /// Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, specify null. Supported only for ``REQUEST`` authorizers. hidden AuthorizerCredentialsArn: (String|Mapping)? /// The authorizer type. Specify ``REQUEST`` for a Lambda function using incoming request parameters. Specify ``JWT`` to use JSON Web Tokens (supported only for HTTP APIs). hidden AuthorizerType: String|Mapping - /// The ``JWTConfiguration`` property specifies the configuration of a JWT authorizer. Required for the ``JWT`` authorizer type. Supported only for HTTP APIs. - hidden JwtConfiguration: (AuthorizerJWTConfiguration)? - /// The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers. hidden AuthorizerResultTtlInSeconds: (Int|Mapping)? - /// The identity source for which authorization is requested. - /// - /// For a ``REQUEST`` authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with ``$``, for example, ``$request.header.Auth``, ``$request.querystring.Name``. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html). - /// For ``JWT``, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example ``$request.header.Authorization``. - hidden IdentitySource: (Listing)? - /// The API identifier. hidden ApiId: String|Mapping + /// The name of the authorizer. + hidden Name: String|Mapping + /// This parameter is not used. hidden IdentityValidationExpression: (String|Mapping)? + /// The authorizer's Uniform Resource Identifier (URI). For ``REQUEST`` authorizers, this must be a well-formed Lambda function URI, for example, ``arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations``. In general, the URI has this form: ``arn:aws:apigateway:{region}:lambda:path/{service_api}``, where *{region}* is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial ``/``. For Lambda functions, this is usually of the form ``/2015-03-31/functions/[FunctionARN]/invocations``. + hidden AuthorizerUri: (String|Mapping)? + + /// The ``JWTConfiguration`` property specifies the configuration of a JWT authorizer. Required for the ``JWT`` authorizer type. Supported only for HTTP APIs. + hidden JwtConfiguration: (AuthorizerJWTConfiguration)? + + /// The identity source for which authorization is requested. + /// + /// For a ``REQUEST`` authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with ``$``, for example, ``$request.header.Auth``, ``$request.querystring.Name``. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html). + /// For ``JWT``, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example ``$request.header.Authorization``. + hidden IdentitySource: (Listing)? + /// Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are ``1.0`` and ``2.0``. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html). hidden AuthorizerPayloadFormatVersion: (String|Mapping)? - /// The name of the authorizer. - hidden Name: String|Mapping + /// Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see [Working with Lambda authorizers for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html). + hidden EnableSimpleResponses: (Boolean|Mapping)? Properties { - ["EnableSimpleResponses"] = if (EnableSimpleResponses == null) null else EnableSimpleResponses - ["AuthorizerUri"] = if (AuthorizerUri == null) null else AuthorizerUri ["AuthorizerCredentialsArn"] = if (AuthorizerCredentialsArn == null) null else AuthorizerCredentialsArn ["AuthorizerType"] = if (AuthorizerType == null) null else AuthorizerType - ["JwtConfiguration"] = if (JwtConfiguration == null) null else JwtConfiguration ["AuthorizerResultTtlInSeconds"] = if (AuthorizerResultTtlInSeconds == null) null else AuthorizerResultTtlInSeconds - ["IdentitySource"] = if (IdentitySource == null) null else IdentitySource ["ApiId"] = if (ApiId == null) null else ApiId + ["Name"] = if (Name == null) null else Name ["IdentityValidationExpression"] = if (IdentityValidationExpression == null) null else IdentityValidationExpression + ["AuthorizerUri"] = if (AuthorizerUri == null) null else AuthorizerUri + ["JwtConfiguration"] = if (JwtConfiguration == null) null else JwtConfiguration + ["IdentitySource"] = if (IdentitySource == null) null else IdentitySource ["AuthorizerPayloadFormatVersion"] = if (AuthorizerPayloadFormatVersion == null) null else AuthorizerPayloadFormatVersion - ["Name"] = if (Name == null) null else Name + ["EnableSimpleResponses"] = if (EnableSimpleResponses == null) null else EnableSimpleResponses } } diff --git a/pkl/aws/apigatewayv2/deployment.pkl b/pkl/aws/apigatewayv2/deployment.pkl index 9f338dfd..060d4d02 100644 --- a/pkl/aws/apigatewayv2/deployment.pkl +++ b/pkl/aws/apigatewayv2/deployment.pkl @@ -11,19 +11,19 @@ open class Deployment extends cloudformation.Resource { Type = "AWS::ApiGatewayV2::Deployment" - /// The description for the deployment resource. - hidden Description: (String|Mapping)? - /// The name of an existing stage to associate with the deployment. hidden StageName: (String|Mapping)? /// The API identifier. hidden ApiId: String|Mapping + /// The description for the deployment resource. + hidden Description: (String|Mapping)? + Properties { - ["Description"] = if (Description == null) null else Description ["StageName"] = if (StageName == null) null else StageName ["ApiId"] = if (ApiId == null) null else ApiId + ["Description"] = if (Description == null) null else Description } } diff --git a/pkl/aws/apigatewayv2/domainname.pkl b/pkl/aws/apigatewayv2/domainname.pkl index b64ed2b6..0d126a6c 100644 --- a/pkl/aws/apigatewayv2/domainname.pkl +++ b/pkl/aws/apigatewayv2/domainname.pkl @@ -5,21 +5,21 @@ module aws.apigatewayv2.domainname import "../../cloudformation.pkl" -/// If specified, API Gateway performs two-way authentication between the client and the server. Clients must present a trusted certificate to access your API. -open class DomainNameMutualTlsAuthentication { - TruststoreVersion: (String|Mapping)? - TruststoreUri: (String|Mapping)? -} - /// The ``DomainNameConfiguration`` property type specifies the configuration for an API's domain name. /// /// ``DomainNameConfiguration`` is a property of the [AWS::ApiGatewayV2::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html) resource. open class DomainNameDomainNameConfiguration { - SecurityPolicy: (String|Mapping)? - CertificateArn: (String|Mapping)? OwnershipVerificationCertificateArn: (String|Mapping)? EndpointType: (String|Mapping)? CertificateName: (String|Mapping)? + SecurityPolicy: (String|Mapping)? + CertificateArn: (String|Mapping)? +} + +/// If specified, API Gateway performs two-way authentication between the client and the server. Clients must present a trusted certificate to access your API. +open class DomainNameMutualTlsAuthentication { + TruststoreVersion: (String|Mapping)? + TruststoreUri: (String|Mapping)? } /// The ``AWS::ApiGatewayV2::DomainName`` resource specifies a custom domain name for your API in Amazon API Gateway (API Gateway). @@ -40,7 +40,7 @@ open class DomainName extends cloudformation.Resource { hidden DomainNameConfigurations: (Listing)? /// The collection of tags associated with a domain name. - hidden Tags: (Dynamic)? + hidden Tags: (DomainNameDomainNameTags)? Properties { ["MutualTlsAuthentication"] = if (MutualTlsAuthentication == null) null else MutualTlsAuthentication @@ -50,3 +50,6 @@ open class DomainName extends cloudformation.Resource { } } + + +typealias DomainNameDomainNameTags = Mapping diff --git a/pkl/aws/apigatewayv2/integration.pkl b/pkl/aws/apigatewayv2/integration.pkl index 9bd9e7c3..c615dcba 100644 --- a/pkl/aws/apigatewayv2/integration.pkl +++ b/pkl/aws/apigatewayv2/integration.pkl @@ -17,78 +17,78 @@ open class Integration extends cloudformation.Resource { /// - hidden ConnectionId: (String|Mapping)? + hidden IntegrationMethod: (String|Mapping)? /// - hidden CredentialsArn: (String|Mapping)? + hidden TimeoutInMillis: (Int|Mapping)? /// - hidden ApiId: String|Mapping + hidden TlsConfig: (IntegrationTlsConfig)? /// - hidden IntegrationType: String|Mapping + hidden Description: (String|Mapping)? /// - hidden ConnectionType: (String|Mapping)? + hidden PayloadFormatVersion: (String|Mapping)? /// - hidden RequestParameters: (Dynamic)? + hidden IntegrationType: String|Mapping /// - hidden RequestTemplates: (Dynamic)? + hidden ResponseParameters: (Dynamic)? /// - hidden TimeoutInMillis: (Int|Mapping)? + hidden PassthroughBehavior: (String|Mapping)? /// - hidden IntegrationUri: (String|Mapping)? + hidden ConnectionId: (String|Mapping)? /// - hidden PayloadFormatVersion: (String|Mapping)? + hidden ContentHandlingStrategy: (String|Mapping)? /// - hidden TemplateSelectionExpression: (String|Mapping)? + hidden CredentialsArn: (String|Mapping)? /// - hidden IntegrationMethod: (String|Mapping)? + hidden RequestTemplates: (Dynamic)? /// - hidden PassthroughBehavior: (String|Mapping)? + hidden IntegrationSubtype: (String|Mapping)? /// - hidden TlsConfig: (IntegrationTlsConfig)? + hidden TemplateSelectionExpression: (String|Mapping)? /// - hidden ContentHandlingStrategy: (String|Mapping)? + hidden ConnectionType: (String|Mapping)? /// - hidden IntegrationSubtype: (String|Mapping)? + hidden RequestParameters: (Dynamic)? /// - hidden Description: (String|Mapping)? + hidden IntegrationUri: (String|Mapping)? /// - hidden ResponseParameters: (Dynamic)? + hidden ApiId: String|Mapping Properties { - ["ConnectionId"] = if (ConnectionId == null) null else ConnectionId - ["CredentialsArn"] = if (CredentialsArn == null) null else CredentialsArn - ["ApiId"] = if (ApiId == null) null else ApiId - ["IntegrationType"] = if (IntegrationType == null) null else IntegrationType - ["ConnectionType"] = if (ConnectionType == null) null else ConnectionType - ["RequestParameters"] = if (RequestParameters == null) null else RequestParameters - ["RequestTemplates"] = if (RequestTemplates == null) null else RequestTemplates + ["IntegrationMethod"] = if (IntegrationMethod == null) null else IntegrationMethod ["TimeoutInMillis"] = if (TimeoutInMillis == null) null else TimeoutInMillis - ["IntegrationUri"] = if (IntegrationUri == null) null else IntegrationUri + ["TlsConfig"] = if (TlsConfig == null) null else TlsConfig + ["Description"] = if (Description == null) null else Description ["PayloadFormatVersion"] = if (PayloadFormatVersion == null) null else PayloadFormatVersion - ["TemplateSelectionExpression"] = if (TemplateSelectionExpression == null) null else TemplateSelectionExpression - ["IntegrationMethod"] = if (IntegrationMethod == null) null else IntegrationMethod + ["IntegrationType"] = if (IntegrationType == null) null else IntegrationType + ["ResponseParameters"] = if (ResponseParameters == null) null else ResponseParameters ["PassthroughBehavior"] = if (PassthroughBehavior == null) null else PassthroughBehavior - ["TlsConfig"] = if (TlsConfig == null) null else TlsConfig + ["ConnectionId"] = if (ConnectionId == null) null else ConnectionId ["ContentHandlingStrategy"] = if (ContentHandlingStrategy == null) null else ContentHandlingStrategy + ["CredentialsArn"] = if (CredentialsArn == null) null else CredentialsArn + ["RequestTemplates"] = if (RequestTemplates == null) null else RequestTemplates ["IntegrationSubtype"] = if (IntegrationSubtype == null) null else IntegrationSubtype - ["Description"] = if (Description == null) null else Description - ["ResponseParameters"] = if (ResponseParameters == null) null else ResponseParameters + ["TemplateSelectionExpression"] = if (TemplateSelectionExpression == null) null else TemplateSelectionExpression + ["ConnectionType"] = if (ConnectionType == null) null else ConnectionType + ["RequestParameters"] = if (RequestParameters == null) null else RequestParameters + ["IntegrationUri"] = if (IntegrationUri == null) null else IntegrationUri + ["ApiId"] = if (ApiId == null) null else ApiId } } diff --git a/pkl/aws/apigatewayv2/integrationresponse.pkl b/pkl/aws/apigatewayv2/integrationresponse.pkl index 92b04262..acab5207 100644 --- a/pkl/aws/apigatewayv2/integrationresponse.pkl +++ b/pkl/aws/apigatewayv2/integrationresponse.pkl @@ -11,6 +11,9 @@ open class IntegrationResponse extends cloudformation.Resource { Type = "AWS::ApiGatewayV2::IntegrationResponse" + /// The integration response key. + hidden IntegrationResponseKey: String|Mapping + /// The API identifier. hidden ApiId: String|Mapping @@ -33,17 +36,14 @@ open class IntegrationResponse extends cloudformation.Resource { /// The integration ID. hidden IntegrationId: String|Mapping - /// The integration response key. - hidden IntegrationResponseKey: String|Mapping - Properties { + ["IntegrationResponseKey"] = if (IntegrationResponseKey == null) null else IntegrationResponseKey ["ApiId"] = if (ApiId == null) null else ApiId ["ResponseTemplates"] = if (ResponseTemplates == null) null else ResponseTemplates ["TemplateSelectionExpression"] = if (TemplateSelectionExpression == null) null else TemplateSelectionExpression ["ResponseParameters"] = if (ResponseParameters == null) null else ResponseParameters ["ContentHandlingStrategy"] = if (ContentHandlingStrategy == null) null else ContentHandlingStrategy ["IntegrationId"] = if (IntegrationId == null) null else IntegrationId - ["IntegrationResponseKey"] = if (IntegrationResponseKey == null) null else IntegrationResponseKey } } diff --git a/pkl/aws/apigatewayv2/route.pkl b/pkl/aws/apigatewayv2/route.pkl index 22ec5f29..ca85bdfe 100644 --- a/pkl/aws/apigatewayv2/route.pkl +++ b/pkl/aws/apigatewayv2/route.pkl @@ -19,52 +19,52 @@ open class Route extends cloudformation.Resource { /// The model selection expression for the route. Supported only for WebSocket APIs. hidden ModelSelectionExpression: (String|Mapping)? - /// The API identifier. - hidden ApiId: String|Mapping + /// The identifier of the ``Authorizer`` resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer. + hidden AuthorizerId: (String|Mapping)? + + /// The route response selection expression for the route. Supported only for WebSocket APIs. + hidden RouteResponseSelectionExpression: (String|Mapping)? + + /// The authorization scopes supported by this route. + hidden AuthorizationScopes: (Listing)? + + /// The route key for the route. For HTTP APIs, the route key can be either ``$default``, or a combination of an HTTP method and resource path, for example, ``GET /pets``. + hidden RouteKey: String|Mapping /// The request parameters for the route. Supported only for WebSocket APIs. hidden RequestParameters: (Dynamic)? + /// The target for the route. + hidden Target: (String|Mapping)? + /// The request models for the route. Supported only for WebSocket APIs. hidden RequestModels: (Dynamic)? /// The operation name for the route. hidden OperationName: (String|Mapping)? - /// The route key for the route. For HTTP APIs, the route key can be either ``$default``, or a combination of an HTTP method and resource path, for example, ``GET /pets``. - hidden RouteKey: String|Mapping - /// The authorization type for the route. For WebSocket APIs, valid values are ``NONE`` for open access, ``AWS_IAM`` for using AWS IAM permissions, and ``CUSTOM`` for using a Lambda authorizer. For HTTP APIs, valid values are ``NONE`` for open access, ``JWT`` for using JSON Web Tokens, ``AWS_IAM`` for using AWS IAM permissions, and ``CUSTOM`` for using a Lambda authorizer. hidden AuthorizationType: (String|Mapping)? + /// The API identifier. + hidden ApiId: String|Mapping + /// Specifies whether an API key is required for the route. Supported only for WebSocket APIs. hidden ApiKeyRequired: (Boolean|Mapping)? - /// The authorization scopes supported by this route. - hidden AuthorizationScopes: (Listing)? - - /// The target for the route. - hidden Target: (String|Mapping)? - - /// The route response selection expression for the route. Supported only for WebSocket APIs. - hidden RouteResponseSelectionExpression: (String|Mapping)? - - /// The identifier of the ``Authorizer`` resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer. - hidden AuthorizerId: (String|Mapping)? - Properties { ["ModelSelectionExpression"] = if (ModelSelectionExpression == null) null else ModelSelectionExpression - ["ApiId"] = if (ApiId == null) null else ApiId + ["AuthorizerId"] = if (AuthorizerId == null) null else AuthorizerId + ["RouteResponseSelectionExpression"] = if (RouteResponseSelectionExpression == null) null else RouteResponseSelectionExpression + ["AuthorizationScopes"] = if (AuthorizationScopes == null) null else AuthorizationScopes + ["RouteKey"] = if (RouteKey == null) null else RouteKey ["RequestParameters"] = if (RequestParameters == null) null else RequestParameters + ["Target"] = if (Target == null) null else Target ["RequestModels"] = if (RequestModels == null) null else RequestModels ["OperationName"] = if (OperationName == null) null else OperationName - ["RouteKey"] = if (RouteKey == null) null else RouteKey ["AuthorizationType"] = if (AuthorizationType == null) null else AuthorizationType + ["ApiId"] = if (ApiId == null) null else ApiId ["ApiKeyRequired"] = if (ApiKeyRequired == null) null else ApiKeyRequired - ["AuthorizationScopes"] = if (AuthorizationScopes == null) null else AuthorizationScopes - ["Target"] = if (Target == null) null else Target - ["RouteResponseSelectionExpression"] = if (RouteResponseSelectionExpression == null) null else RouteResponseSelectionExpression - ["AuthorizerId"] = if (AuthorizerId == null) null else AuthorizerId } } diff --git a/pkl/aws/apigatewayv2/routeresponse.pkl b/pkl/aws/apigatewayv2/routeresponse.pkl index 95b5eb9d..68500dbc 100644 --- a/pkl/aws/apigatewayv2/routeresponse.pkl +++ b/pkl/aws/apigatewayv2/routeresponse.pkl @@ -5,30 +5,20 @@ module aws.apigatewayv2.routeresponse import "../../cloudformation.pkl" +typealias RouteResponseRouteParameters = Mapping + + /// Specifies whether the parameter is required. open class RouteResponseParameterConstraints { Required: Boolean|Mapping } -/// -open class RouteResponseRouteParameters { -} - /// The ``AWS::ApiGatewayV2::RouteResponse`` resource creates a route response for a WebSocket API. For more information, see [Set up Route Responses for a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-route-response.html) in the *API Gateway Developer Guide*. open class RouteResponse extends cloudformation.Resource { Type = "AWS::ApiGatewayV2::RouteResponse" - /// The route ID. - hidden RouteId: String|Mapping - - /// The model selection expression for the route response. Supported only for WebSocket APIs. - hidden ModelSelectionExpression: (String|Mapping)? - - /// The API identifier. - hidden ApiId: String|Mapping - /// The response models for the route response. hidden ResponseModels: (Dynamic)? @@ -38,13 +28,22 @@ open class RouteResponse extends cloudformation.Resource { /// The route response parameters. hidden ResponseParameters: (RouteResponseRouteParameters)? + /// The route ID. + hidden RouteId: String|Mapping + + /// The model selection expression for the route response. Supported only for WebSocket APIs. + hidden ModelSelectionExpression: (String|Mapping)? + + /// The API identifier. + hidden ApiId: String|Mapping + Properties { - ["RouteId"] = if (RouteId == null) null else RouteId - ["ModelSelectionExpression"] = if (ModelSelectionExpression == null) null else ModelSelectionExpression - ["ApiId"] = if (ApiId == null) null else ApiId ["ResponseModels"] = if (ResponseModels == null) null else ResponseModels ["RouteResponseKey"] = if (RouteResponseKey == null) null else RouteResponseKey ["ResponseParameters"] = if (ResponseParameters == null) null else ResponseParameters + ["RouteId"] = if (RouteId == null) null else RouteId + ["ModelSelectionExpression"] = if (ModelSelectionExpression == null) null else ModelSelectionExpression + ["ApiId"] = if (ApiId == null) null else ApiId } } diff --git a/pkl/aws/apigatewayv2/stage.pkl b/pkl/aws/apigatewayv2/stage.pkl index 55e1b212..fd03080e 100644 --- a/pkl/aws/apigatewayv2/stage.pkl +++ b/pkl/aws/apigatewayv2/stage.pkl @@ -13,11 +13,11 @@ open class StageAccessLogSettings { /// open class StageRouteSettings { - DataTraceEnabled: (Boolean|Mapping)? ThrottlingBurstLimit: (Int|Mapping)? ThrottlingRateLimit: (Number|Mapping)? DetailedMetricsEnabled: (Boolean|Mapping)? LoggingLevel: (String|Mapping)? + DataTraceEnabled: (Boolean|Mapping)? } /// Resource Type definition for AWS::ApiGatewayV2::Stage @@ -27,54 +27,54 @@ open class Stage extends cloudformation.Resource { /// - hidden StageName: String|Mapping + hidden ClientCertificateId: (String|Mapping)? /// - hidden StageVariables: (Dynamic)? + hidden ApiId: String|Mapping /// hidden Tags: (Dynamic)? /// - hidden AccessLogSettings: (StageAccessLogSettings)? + hidden AutoDeploy: (Boolean|Mapping)? /// - hidden ClientCertificateId: (String|Mapping)? + hidden StageName: String|Mapping /// - hidden DeploymentId: (String|Mapping)? + hidden RouteSettings: (Dynamic)? /// - hidden AutoDeploy: (Boolean|Mapping)? + hidden AccessPolicyId: (String|Mapping)? /// - hidden RouteSettings: (Dynamic)? + hidden AccessLogSettings: (StageAccessLogSettings)? /// hidden DefaultRouteSettings: (StageRouteSettings)? /// - hidden Description: (String|Mapping)? + hidden DeploymentId: (String|Mapping)? /// - hidden AccessPolicyId: (String|Mapping)? + hidden StageVariables: (Dynamic)? /// - hidden ApiId: String|Mapping + hidden Description: (String|Mapping)? Properties { - ["StageName"] = if (StageName == null) null else StageName - ["StageVariables"] = if (StageVariables == null) null else StageVariables - ["Tags"] = if (Tags == null) null else Tags - ["AccessLogSettings"] = if (AccessLogSettings == null) null else AccessLogSettings ["ClientCertificateId"] = if (ClientCertificateId == null) null else ClientCertificateId - ["DeploymentId"] = if (DeploymentId == null) null else DeploymentId + ["ApiId"] = if (ApiId == null) null else ApiId + ["Tags"] = if (Tags == null) null else Tags ["AutoDeploy"] = if (AutoDeploy == null) null else AutoDeploy + ["StageName"] = if (StageName == null) null else StageName ["RouteSettings"] = if (RouteSettings == null) null else RouteSettings + ["AccessPolicyId"] = if (AccessPolicyId == null) null else AccessPolicyId + ["AccessLogSettings"] = if (AccessLogSettings == null) null else AccessLogSettings ["DefaultRouteSettings"] = if (DefaultRouteSettings == null) null else DefaultRouteSettings + ["DeploymentId"] = if (DeploymentId == null) null else DeploymentId + ["StageVariables"] = if (StageVariables == null) null else StageVariables ["Description"] = if (Description == null) null else Description - ["AccessPolicyId"] = if (AccessPolicyId == null) null else AccessPolicyId - ["ApiId"] = if (ApiId == null) null else ApiId } } diff --git a/pkl/aws/apigatewayv2/vpclink.pkl b/pkl/aws/apigatewayv2/vpclink.pkl index 3c4288a9..6d064185 100644 --- a/pkl/aws/apigatewayv2/vpclink.pkl +++ b/pkl/aws/apigatewayv2/vpclink.pkl @@ -18,7 +18,7 @@ open class VpcLink extends cloudformation.Resource { hidden SecurityGroupIds: (Listing)? /// The collection of tags. Each tag element is associated with a given resource. - hidden Tags: (Dynamic)? + hidden Tags: (VpcLinkVpcLinkTags)? /// The name of the VPC link. hidden Name: String|Mapping @@ -31,3 +31,6 @@ open class VpcLink extends cloudformation.Resource { } } + + +typealias VpcLinkVpcLinkTags = Mapping diff --git a/pkl/aws/appconfig/application.pkl b/pkl/aws/appconfig/application.pkl index 63a320da..52d021f7 100644 --- a/pkl/aws/appconfig/application.pkl +++ b/pkl/aws/appconfig/application.pkl @@ -7,8 +7,8 @@ import "../../cloudformation.pkl" /// Metadata to assign to the application. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define. open class ApplicationTags { - Key: String(matches(Regex(#"^(?!aws:.)[a-zA-Z1-9+=._:/-]*$"#)))|Mapping Value: String|Mapping + Key: String(matches(Regex(#"^(?!aws:.)[a-zA-Z1-9+=._:/-]*$"#)))|Mapping } /// Resource Type definition for AWS::AppConfig::Application diff --git a/pkl/aws/appconfig/configurationprofile.pkl b/pkl/aws/appconfig/configurationprofile.pkl index e06a7cb4..54d6af88 100644 --- a/pkl/aws/appconfig/configurationprofile.pkl +++ b/pkl/aws/appconfig/configurationprofile.pkl @@ -5,60 +5,60 @@ module aws.appconfig.configurationprofile import "../../cloudformation.pkl" -/// A list of methods for validating the configuration. -open class ConfigurationProfileValidators { - Type: (String|Mapping)? - Content: (String|Mapping)? -} - /// Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define. open class ConfigurationProfileTags { Key: (String(matches(Regex(#"^(?!aws:.)[a-zA-Z0-9 +=._:/-]*$"#)))|Mapping)? Value: (String|Mapping)? } +/// A list of methods for validating the configuration. +open class ConfigurationProfileValidators { + Type: (String|Mapping)? + Content: (String|Mapping)? +} + /// An example resource schema demonstrating some basic constructs and validation rules. open class ConfigurationProfile extends cloudformation.Resource { Type = "AWS::AppConfig::ConfigurationProfile" + /// A URI to locate the configuration. You can specify the AWS AppConfig hosted configuration store, Systems Manager (SSM) document, an SSM Parameter Store parameter, or an Amazon S3 object. + hidden LocationUri: String|Mapping + + /// The type of configurations contained in the profile. When calling this API, enter one of the following values for Type: AWS.AppConfig.FeatureFlags, AWS.Freeform + hidden TypeProperty: (String(matches(Regex(#"^[a-zA-Z\.]+"#)))|Mapping)? + /// A description of the configuration profile. hidden Description: (String|Mapping)? + /// A list of methods for validating the configuration. + hidden Validators: (Listing)? + /// The ARN of an IAM role with permission to access the configuration at the specified LocationUri. hidden RetrievalRoleArn: (String(matches(Regex(#"^((arn):(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):(iam)::\d{12}:role[/].*)$"#)))|Mapping)? + /// A name for the configuration profile. + hidden Name: String|Mapping + /// The application ID. hidden ApplicationId: String(matches(Regex(#"[a-z0-9]{4,7}"#)))|Mapping /// Metadata to assign to the configuration profile. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define. hidden Tags: (Listing)? - /// A name for the configuration profile. - hidden Name: String|Mapping - - /// A URI to locate the configuration. You can specify the AWS AppConfig hosted configuration store, Systems Manager (SSM) document, an SSM Parameter Store parameter, or an Amazon S3 object. - hidden LocationUri: String|Mapping - - /// The type of configurations contained in the profile. When calling this API, enter one of the following values for Type: AWS.AppConfig.FeatureFlags, AWS.Freeform - hidden TypeProperty: (String(matches(Regex(#"^[a-zA-Z\.]+"#)))|Mapping)? - - /// A list of methods for validating the configuration. - hidden Validators: (Listing)? - /// The AWS Key Management Service key identifier (key ID, key alias, or key ARN) provided when the resource was created or updated. hidden KmsKeyIdentifier: (String(matches(Regex(#"^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}|alias/[a-zA-Z0-9/_-]{1,250}|arn:aws[a-zA-Z-]*:kms:[a-z]{2}(-gov|-iso(b?))?-[a-z]+-\d{1}:\d{12}:(key/[0-9a-f-]{36}|alias/[a-zA-Z0-9/_-]{1,250})$"#)))|Mapping)? Properties { + ["LocationUri"] = if (LocationUri == null) null else LocationUri + ["Type"] = if (TypeProperty == null) null else TypeProperty ["Description"] = if (Description == null) null else Description + ["Validators"] = if (Validators == null) null else Validators ["RetrievalRoleArn"] = if (RetrievalRoleArn == null) null else RetrievalRoleArn + ["Name"] = if (Name == null) null else Name ["ApplicationId"] = if (ApplicationId == null) null else ApplicationId ["Tags"] = if (Tags == null) null else Tags - ["Name"] = if (Name == null) null else Name - ["LocationUri"] = if (LocationUri == null) null else LocationUri - ["Type"] = if (TypeProperty == null) null else TypeProperty - ["Validators"] = if (Validators == null) null else Validators ["KmsKeyIdentifier"] = if (KmsKeyIdentifier == null) null else KmsKeyIdentifier } diff --git a/pkl/aws/appconfig/deployment.pkl b/pkl/aws/appconfig/deployment.pkl index 67bb2425..12ae4542 100644 --- a/pkl/aws/appconfig/deployment.pkl +++ b/pkl/aws/appconfig/deployment.pkl @@ -25,42 +25,42 @@ open class Deployment extends cloudformation.Resource { /// - hidden Tags: (Listing)? + hidden ConfigurationVersion: String|Mapping /// - hidden Description: (String|Mapping)? + hidden DynamicExtensionParameters: (Listing)? /// - hidden ConfigurationVersion: String|Mapping + hidden Tags: (Listing)? /// - hidden DynamicExtensionParameters: (Listing)? + hidden DeploymentStrategyId: String|Mapping /// - hidden KmsKeyIdentifier: (String|Mapping)? + hidden EnvironmentId: String|Mapping /// - hidden ApplicationId: String|Mapping + hidden Description: (String|Mapping)? /// - hidden DeploymentStrategyId: String|Mapping + hidden ApplicationId: String|Mapping /// hidden ConfigurationProfileId: String|Mapping /// - hidden EnvironmentId: String|Mapping + hidden KmsKeyIdentifier: (String|Mapping)? Properties { - ["Tags"] = if (Tags == null) null else Tags - ["Description"] = if (Description == null) null else Description ["ConfigurationVersion"] = if (ConfigurationVersion == null) null else ConfigurationVersion ["DynamicExtensionParameters"] = if (DynamicExtensionParameters == null) null else DynamicExtensionParameters - ["KmsKeyIdentifier"] = if (KmsKeyIdentifier == null) null else KmsKeyIdentifier - ["ApplicationId"] = if (ApplicationId == null) null else ApplicationId + ["Tags"] = if (Tags == null) null else Tags ["DeploymentStrategyId"] = if (DeploymentStrategyId == null) null else DeploymentStrategyId - ["ConfigurationProfileId"] = if (ConfigurationProfileId == null) null else ConfigurationProfileId ["EnvironmentId"] = if (EnvironmentId == null) null else EnvironmentId + ["Description"] = if (Description == null) null else Description + ["ApplicationId"] = if (ApplicationId == null) null else ApplicationId + ["ConfigurationProfileId"] = if (ConfigurationProfileId == null) null else ConfigurationProfileId + ["KmsKeyIdentifier"] = if (KmsKeyIdentifier == null) null else KmsKeyIdentifier } } diff --git a/pkl/aws/appconfig/deploymentstrategy.pkl b/pkl/aws/appconfig/deploymentstrategy.pkl index c2cc79ea..3d22b5f6 100644 --- a/pkl/aws/appconfig/deploymentstrategy.pkl +++ b/pkl/aws/appconfig/deploymentstrategy.pkl @@ -21,35 +21,35 @@ open class DeploymentStrategy extends cloudformation.Resource { hidden GrowthType: (String|Mapping)? /// - hidden Description: (String|Mapping)? + hidden DeploymentDurationInMinutes: Number|Mapping /// - hidden GrowthFactor: Number|Mapping + hidden Tags: (Listing)? /// - hidden Tags: (Listing)? + hidden ReplicateTo: String|Mapping /// - hidden Name: String|Mapping + hidden Description: (String|Mapping)? /// - hidden ReplicateTo: String|Mapping + hidden GrowthFactor: Number|Mapping /// hidden FinalBakeTimeInMinutes: (Number|Mapping)? /// - hidden DeploymentDurationInMinutes: Number|Mapping + hidden Name: String|Mapping Properties { ["GrowthType"] = if (GrowthType == null) null else GrowthType - ["Description"] = if (Description == null) null else Description - ["GrowthFactor"] = if (GrowthFactor == null) null else GrowthFactor + ["DeploymentDurationInMinutes"] = if (DeploymentDurationInMinutes == null) null else DeploymentDurationInMinutes ["Tags"] = if (Tags == null) null else Tags - ["Name"] = if (Name == null) null else Name ["ReplicateTo"] = if (ReplicateTo == null) null else ReplicateTo + ["Description"] = if (Description == null) null else Description + ["GrowthFactor"] = if (GrowthFactor == null) null else GrowthFactor ["FinalBakeTimeInMinutes"] = if (FinalBakeTimeInMinutes == null) null else FinalBakeTimeInMinutes - ["DeploymentDurationInMinutes"] = if (DeploymentDurationInMinutes == null) null else DeploymentDurationInMinutes + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/appconfig/environment.pkl b/pkl/aws/appconfig/environment.pkl index ff219918..affa202d 100644 --- a/pkl/aws/appconfig/environment.pkl +++ b/pkl/aws/appconfig/environment.pkl @@ -13,8 +13,8 @@ open class EnvironmentMonitor { /// Metadata to assign to the environment. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define. open class EnvironmentTag { - Key: String(matches(Regex(#"^(?!aws:.)[a-zA-Z1-9+=._:/-]*$"#)))|Mapping Value: String|Mapping + Key: String(matches(Regex(#"^(?!aws:.)[a-zA-Z1-9+=._:/-]*$"#)))|Mapping } /// Resource Type definition for AWS::AppConfig::Environment @@ -23,12 +23,6 @@ open class Environment extends cloudformation.Resource { Type = "AWS::AppConfig::Environment" - /// A name for the environment. - hidden Name: String|Mapping - - /// A description of the environment. - hidden Description: (String|Mapping)? - /// Amazon CloudWatch alarms to monitor during the deployment process. hidden Monitors: (Listing)? @@ -38,12 +32,18 @@ open class Environment extends cloudformation.Resource { /// The application ID. hidden ApplicationId: String(matches(Regex(#"[a-z0-9]{4,7}"#)))|Mapping + /// A name for the environment. + hidden Name: String|Mapping + + /// A description of the environment. + hidden Description: (String|Mapping)? + Properties { - ["Name"] = if (Name == null) null else Name - ["Description"] = if (Description == null) null else Description ["Monitors"] = if (Monitors == null) null else Monitors ["Tags"] = if (Tags == null) null else Tags ["ApplicationId"] = if (ApplicationId == null) null else ApplicationId + ["Name"] = if (Name == null) null else Name + ["Description"] = if (Description == null) null else Description } } diff --git a/pkl/aws/appconfig/extension.pkl b/pkl/aws/appconfig/extension.pkl index c7976dec..9850e263 100644 --- a/pkl/aws/appconfig/extension.pkl +++ b/pkl/aws/appconfig/extension.pkl @@ -11,9 +11,8 @@ open class ExtensionTag { Value: String|Mapping } -/// A list of actions for an extension to take at a specific action point. -open class ExtensionActions { -} +typealias ExtensionActions = Listing<(ExtensionAction)?> + /// An action for an extension to take at a specific action point. open class ExtensionAction { @@ -25,9 +24,9 @@ open class ExtensionAction { /// A parameter for the extension to send to a specific action. open class ExtensionParameter { + Description: (String|Mapping)? Dynamic: (Boolean|Mapping)? Required: Boolean|Mapping - Description: (String|Mapping)? } /// Resource Type definition for AWS::AppConfig::Extension @@ -37,13 +36,7 @@ open class Extension extends cloudformation.Resource { /// - hidden Actions: Dynamic - - /// - hidden Parameters: (Dynamic)? - - /// - hidden LatestVersionNumber: (Int|Mapping)? + hidden Parameters: (ExtensionExtensionParameters)? /// An array of key-value tags to apply to this resource. hidden Tags: (Listing)? @@ -54,13 +47,24 @@ open class Extension extends cloudformation.Resource { /// Description of the extension. hidden Description: (String|Mapping)? + /// + hidden LatestVersionNumber: (Int|Mapping)? + + /// + hidden Actions: ExtensionExtensionActions + Properties { - ["Actions"] = if (Actions == null) null else Actions ["Parameters"] = if (Parameters == null) null else Parameters - ["LatestVersionNumber"] = if (LatestVersionNumber == null) null else LatestVersionNumber ["Tags"] = if (Tags == null) null else Tags ["Name"] = if (Name == null) null else Name ["Description"] = if (Description == null) null else Description + ["LatestVersionNumber"] = if (LatestVersionNumber == null) null else LatestVersionNumber + ["Actions"] = if (Actions == null) null else Actions } } + + +typealias ExtensionExtensionParameters = Mapping + +typealias ExtensionExtensionActions = Mapping diff --git a/pkl/aws/appconfig/extensionassociation.pkl b/pkl/aws/appconfig/extensionassociation.pkl index 79967139..4f3846b7 100644 --- a/pkl/aws/appconfig/extensionassociation.pkl +++ b/pkl/aws/appconfig/extensionassociation.pkl @@ -17,27 +17,30 @@ open class ExtensionAssociation extends cloudformation.Resource { Type = "AWS::AppConfig::ExtensionAssociation" - /// - hidden ExtensionIdentifier: (String|Mapping)? - /// hidden ResourceIdentifier: (String|Mapping)? /// hidden ExtensionVersionNumber: (Int|Mapping)? - /// - hidden Parameters: (Dynamic)? - /// An array of key-value pairs to apply to this resource. hidden Tags: (Listing)? + /// + hidden ExtensionIdentifier: (String|Mapping)? + + /// + hidden Parameters: (ExtensionAssociationExtensionAssociationParameters)? + Properties { - ["ExtensionIdentifier"] = if (ExtensionIdentifier == null) null else ExtensionIdentifier ["ResourceIdentifier"] = if (ResourceIdentifier == null) null else ResourceIdentifier ["ExtensionVersionNumber"] = if (ExtensionVersionNumber == null) null else ExtensionVersionNumber - ["Parameters"] = if (Parameters == null) null else Parameters ["Tags"] = if (Tags == null) null else Tags + ["ExtensionIdentifier"] = if (ExtensionIdentifier == null) null else ExtensionIdentifier + ["Parameters"] = if (Parameters == null) null else Parameters } } + + +typealias ExtensionAssociationExtensionAssociationParameters = Mapping diff --git a/pkl/aws/appconfig/hostedconfigurationversion.pkl b/pkl/aws/appconfig/hostedconfigurationversion.pkl index 8740b9c3..00092255 100644 --- a/pkl/aws/appconfig/hostedconfigurationversion.pkl +++ b/pkl/aws/appconfig/hostedconfigurationversion.pkl @@ -11,6 +11,12 @@ open class HostedConfigurationVersion extends cloudformation.Resource { Type = "AWS::AppConfig::HostedConfigurationVersion" + /// An optional locking token used to prevent race conditions from overwriting configuration updates when creating a new version. To ensure your data is not overwritten when creating multiple hosted configuration versions in rapid succession, specify the version number of the latest hosted configuration version. + hidden LatestVersionNumber: (Int|Mapping)? + + /// A user-defined label for an AWS AppConfig hosted configuration version. + hidden VersionLabel: (String(matches(Regex(#"^$|.*[^0-9].*"#)))|Mapping)? + /// The application ID. hidden ApplicationId: String(matches(Regex(#"[a-z0-9]{4,7}"#)))|Mapping @@ -26,20 +32,14 @@ open class HostedConfigurationVersion extends cloudformation.Resource { /// A standard MIME type describing the format of the configuration content. hidden ContentType: String|Mapping - /// An optional locking token used to prevent race conditions from overwriting configuration updates when creating a new version. To ensure your data is not overwritten when creating multiple hosted configuration versions in rapid succession, specify the version number of the latest hosted configuration version. - hidden LatestVersionNumber: (Int|Mapping)? - - /// A user-defined label for an AWS AppConfig hosted configuration version. - hidden VersionLabel: (String(matches(Regex(#"^$|.*[^0-9].*"#)))|Mapping)? - Properties { + ["LatestVersionNumber"] = if (LatestVersionNumber == null) null else LatestVersionNumber + ["VersionLabel"] = if (VersionLabel == null) null else VersionLabel ["ApplicationId"] = if (ApplicationId == null) null else ApplicationId ["ConfigurationProfileId"] = if (ConfigurationProfileId == null) null else ConfigurationProfileId ["Description"] = if (Description == null) null else Description ["Content"] = if (Content == null) null else Content ["ContentType"] = if (ContentType == null) null else ContentType - ["LatestVersionNumber"] = if (LatestVersionNumber == null) null else LatestVersionNumber - ["VersionLabel"] = if (VersionLabel == null) null else VersionLabel } } diff --git a/pkl/aws/appflow/connector.pkl b/pkl/aws/appflow/connector.pkl index 24645bf0..6c23a4fc 100644 --- a/pkl/aws/appflow/connector.pkl +++ b/pkl/aws/appflow/connector.pkl @@ -21,9 +21,6 @@ open class Connector extends cloudformation.Resource { Type = "AWS::AppFlow::Connector" - /// The name of the connector. The name is unique for each ConnectorRegistration in your AWS account. - hidden ConnectorLabel: (String(matches(Regex(#"[a-zA-Z0-9][\w!@#.-]+"#)))|Mapping)? - /// The provisioning type of the connector. Currently the only supported value is LAMBDA. hidden ConnectorProvisioningType: String(matches(Regex(#"[a-zA-Z0-9][\w!@#.-]+"#)))|Mapping @@ -33,11 +30,14 @@ open class Connector extends cloudformation.Resource { /// A description about the connector that's being registered. hidden Description: (String(matches(Regex(#"[\s\w/!@#+=.-]*"#)))|Mapping)? + /// The name of the connector. The name is unique for each ConnectorRegistration in your AWS account. + hidden ConnectorLabel: (String(matches(Regex(#"[a-zA-Z0-9][\w!@#.-]+"#)))|Mapping)? + Properties { - ["ConnectorLabel"] = if (ConnectorLabel == null) null else ConnectorLabel ["ConnectorProvisioningType"] = if (ConnectorProvisioningType == null) null else ConnectorProvisioningType ["ConnectorProvisioningConfig"] = if (ConnectorProvisioningConfig == null) null else ConnectorProvisioningConfig ["Description"] = if (Description == null) null else Description + ["ConnectorLabel"] = if (ConnectorLabel == null) null else ConnectorLabel } } diff --git a/pkl/aws/appflow/connectorprofile.pkl b/pkl/aws/appflow/connectorprofile.pkl index 082d43be..076558d6 100644 --- a/pkl/aws/appflow/connectorprofile.pkl +++ b/pkl/aws/appflow/connectorprofile.pkl @@ -5,174 +5,218 @@ module aws.appflow.connectorprofile import "../../cloudformation.pkl" +typealias ConnectorProfileKey = String|Mapping + + +/// Connector specific configurations needed to create connector profile +open class ConnectorProfileConnectorProfileConfig { + ConnectorProfileProperties: (ConnectorProfileConnectorProfileProperties)? + ConnectorProfileCredentials: (ConnectorProfileConnectorProfileCredentials)? +} + /// -open class ConnectorProfileCustomAuthCredentials { - CredentialsMap: (ConnectorProfileCredentialsMap)? - CustomAuthenticationType: ConnectorProfileCustomAuthenticationType +open class ConnectorProfileSalesforceConnectorProfileCredentials { + AccessToken: (ConnectorProfileAccessToken)? + RefreshToken: (ConnectorProfileRefreshToken)? + ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? + ClientCredentialsArn: (ConnectorProfileClientCredentialsArn)? + OAuth2GrantType: (ConnectorProfileOAuth2GrantType)? + JwtToken: (ConnectorProfileJwtToken)? } /// -open class ConnectorProfileAccessToken { +open class ConnectorProfilePardotConnectorProfileCredentials { + AccessToken: (ConnectorProfileAccessToken)? + RefreshToken: (ConnectorProfileRefreshToken)? + ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? + ClientCredentialsArn: (ConnectorProfileClientCredentialsArn)? } /// -open class ConnectorProfileRedshiftConnectorProfileCredentials { - Username: (ConnectorProfileUsername)? - Password: (ConnectorProfilePassword)? +open class ConnectorProfileOAuth2Properties { + TokenUrl: (String(matches(Regex(#"^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"#)))|Mapping)? + OAuth2GrantType: (ConnectorProfileOAuth2GrantType)? + TokenUrlCustomProperties: (ConnectorProfileTokenUrlCustomProperties)? } +typealias ConnectorProfileAccessToken = String|Mapping + + /// -open class ConnectorProfileVeevaConnectorProfileCredentials { - Password: ConnectorProfilePassword - Username: ConnectorProfileUsername +open class ConnectorProfileZendeskConnectorProfileProperties { + InstanceUrl: ConnectorProfileInstanceUrl } +typealias ConnectorProfileProfileProperties = Mapping + + +typealias ConnectorProfileApiToken = String|Mapping + + /// open class ConnectorProfileBasicAuthCredentials { - Username: ConnectorProfileUsername Password: ConnectorProfilePassword + Username: ConnectorProfileUsername +} + +typealias ConnectorProfileRoleArn = String|Mapping + + +/// +open class ConnectorProfileServiceNowConnectorProfileCredentials { + Username: (ConnectorProfileUsername)? + Password: (ConnectorProfilePassword)? + OAuth2Credentials: (ConnectorProfileOAuth2Credentials)? } /// -open class ConnectorProfileDataApiRoleArn { +open class ConnectorProfileRedshiftConnectorProfileCredentials { + Username: (ConnectorProfileUsername)? + Password: (ConnectorProfilePassword)? } +typealias ConnectorProfileInstanceUrl = String|Mapping + + /// -open class ConnectorProfileRegion { +open class ConnectorProfileSlackConnectorProfileCredentials { + ClientSecret: ConnectorProfileClientSecret + AccessToken: (ConnectorProfileAccessToken)? + ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? + ClientId: ConnectorProfileClientId } +typealias ConnectorProfileApplicationKey = String|Mapping + + +typealias ConnectorProfileAuthCode = String|Mapping + + +typealias ConnectorProfileApiKey = String|Mapping + + /// -open class ConnectorProfileConnectorType { +open class ConnectorProfileConnectorOAuthRequest { + AuthCode: (String|Mapping)? + RedirectUri: (String|Mapping)? } +typealias ConnectorProfileDataApiRoleArn = String|Mapping + + +typealias ConnectorProfileStage = String|Mapping + + /// -open class ConnectorProfilePardotConnectorProfileCredentials { +open class ConnectorProfileMarketoConnectorProfileCredentials { + ClientId: ConnectorProfileClientId + ClientSecret: ConnectorProfileClientSecret AccessToken: (ConnectorProfileAccessToken)? - RefreshToken: (ConnectorProfileRefreshToken)? ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? - ClientCredentialsArn: (ConnectorProfileClientCredentialsArn)? } +typealias ConnectorProfileCustomAuthenticationType = String|Mapping + + +typealias ConnectorProfilePrivateLinkServiceName = String|Mapping + + /// open class ConnectorProfileSnowflakeConnectorProfileProperties { + Warehouse: ConnectorProfileWarehouse Stage: ConnectorProfileStage BucketName: ConnectorProfileBucketName BucketPrefix: (ConnectorProfileBucketPrefix)? PrivateLinkServiceName: (ConnectorProfilePrivateLinkServiceName)? AccountName: (ConnectorProfileAccountName)? Region: (ConnectorProfileRegion)? - Warehouse: ConnectorProfileWarehouse } /// -open class ConnectorProfileTrendmicroConnectorProfileCredentials { - ApiSecretKey: ConnectorProfileApiSecretKey +open class ConnectorProfileSAPODataConnectorProfileProperties { + ApplicationHostUrl: (ConnectorProfileApplicationHostUrl)? + ApplicationServicePath: (ConnectorProfileApplicationServicePath)? + PortNumber: (ConnectorProfilePortNumber)? + ClientNumber: (ConnectorProfileClientNumber)? + LogonLanguage: (ConnectorProfileLogonLanguage)? + PrivateLinkServiceName: (ConnectorProfilePrivateLinkServiceName)? + OAuthProperties: (ConnectorProfileOAuthProperties)? + DisableSSO: (Boolean|Mapping)? } -/// -open class ConnectorProfileCustomConnectorProfileCredentials { - AuthenticationType: ConnectorProfileAuthenticationType - Basic: (ConnectorProfileBasicAuthCredentials)? - Oauth2: (ConnectorProfileOAuth2Credentials)? - ApiKey: (ConnectorProfileApiKeyCredentials)? - Custom: (ConnectorProfileCustomAuthCredentials)? -} +typealias ConnectorProfileCredentialsMap = Mapping + + +typealias ConnectorProfileClientNumber = String|Mapping + + +typealias ConnectorProfileWarehouse = String|Mapping + /// -open class ConnectorProfileStage { +open class ConnectorProfileCustomConnectorProfileProperties { + OAuth2Properties: (ConnectorProfileOAuth2Properties)? + ProfileProperties: (ConnectorProfileProfileProperties)? } /// open class ConnectorProfileRedshiftConnectorProfileProperties { - IsRedshiftServerless: (Boolean|Mapping)? - BucketName: ConnectorProfileBucketName BucketPrefix: (ConnectorProfileBucketPrefix)? + IsRedshiftServerless: (Boolean|Mapping)? DataApiRoleArn: (ConnectorProfileDataApiRoleArn)? ClusterIdentifier: (ConnectorProfileClusterIdentifier)? - WorkgroupName: (ConnectorProfileWorkgroupName)? DatabaseName: (ConnectorProfileDatabaseName)? DatabaseUrl: (ConnectorProfileDatabaseUrl)? RoleArn: ConnectorProfileRoleArn + WorkgroupName: (ConnectorProfileWorkgroupName)? + BucketName: ConnectorProfileBucketName } -/// -open class ConnectorProfileSlackConnectorProfileProperties { - InstanceUrl: ConnectorProfileInstanceUrl -} +typealias ConnectorProfileClientId = String|Mapping -/// -open class ConnectorProfileJwtToken { -} -/// -open class ConnectorProfileAccessKeyId { -} +typealias ConnectorProfileBucketName = String|Mapping -/// -open class ConnectorProfileClientCredentialsArn { -} /// -open class ConnectorProfileSlackConnectorProfileCredentials { - ClientId: ConnectorProfileClientId - ClientSecret: ConnectorProfileClientSecret - AccessToken: (ConnectorProfileAccessToken)? - ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? +open class ConnectorProfileApiKeyCredentials { + ApiKey: ConnectorProfileApiKey + ApiSecretKey: (ConnectorProfileApiSecretKey)? } /// -open class ConnectorProfileApplicationKey { +open class ConnectorProfileVeevaConnectorProfileCredentials { + Username: ConnectorProfileUsername + Password: ConnectorProfilePassword } /// -open class ConnectorProfileGoogleAnalyticsConnectorProfileCredentials { - ClientId: ConnectorProfileClientId - ClientSecret: ConnectorProfileClientSecret - AccessToken: (ConnectorProfileAccessToken)? - RefreshToken: (ConnectorProfileRefreshToken)? - ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? +open class ConnectorProfileDatadogConnectorProfileCredentials { + ApiKey: ConnectorProfileApiKey + ApplicationKey: ConnectorProfileApplicationKey } /// -open class ConnectorProfileSnowflakeConnectorProfileCredentials { - Username: ConnectorProfileUsername - Password: ConnectorProfilePassword +open class ConnectorProfileSingularConnectorProfileCredentials { + ApiKey: ConnectorProfileApiKey } +typealias ConnectorProfileConnectorType = String|Mapping + + +typealias ConnectorProfileLogonLanguage = String|Mapping + + /// -open class ConnectorProfileOAuth2Credentials { - ClientId: (ConnectorProfileClientId)? - ClientSecret: (ConnectorProfileClientSecret)? +open class ConnectorProfileZendeskConnectorProfileCredentials { AccessToken: (ConnectorProfileAccessToken)? - RefreshToken: (ConnectorProfileRefreshToken)? - OAuthRequest: (ConnectorProfileConnectorOAuthRequest)? + ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? + ClientId: ConnectorProfileClientId + ClientSecret: ConnectorProfileClientSecret } -/// -open class ConnectorProfileClientId { -} +typealias ConnectorProfileBucketPrefix = String|Mapping -/// Connector specific configuration needed to create connector profile based on Authentication mechanism -open class ConnectorProfileConnectorProfileCredentials { - GoogleAnalytics: (ConnectorProfileGoogleAnalyticsConnectorProfileCredentials)? - SAPOData: (ConnectorProfileSAPODataConnectorProfileCredentials)? - Pardot: (ConnectorProfilePardotConnectorProfileCredentials)? - Slack: (ConnectorProfileSlackConnectorProfileCredentials)? - Dynatrace: (ConnectorProfileDynatraceConnectorProfileCredentials)? - Salesforce: (ConnectorProfileSalesforceConnectorProfileCredentials)? - Trendmicro: (ConnectorProfileTrendmicroConnectorProfileCredentials)? - Veeva: (ConnectorProfileVeevaConnectorProfileCredentials)? - CustomConnector: (ConnectorProfileCustomConnectorProfileCredentials)? - ServiceNow: (ConnectorProfileServiceNowConnectorProfileCredentials)? - Singular: (ConnectorProfileSingularConnectorProfileCredentials)? - Snowflake: (ConnectorProfileSnowflakeConnectorProfileCredentials)? - Zendesk: (ConnectorProfileZendeskConnectorProfileCredentials)? - Amplitude: (ConnectorProfileAmplitudeConnectorProfileCredentials)? - Datadog: (ConnectorProfileDatadogConnectorProfileCredentials)? - InforNexus: (ConnectorProfileInforNexusConnectorProfileCredentials)? - Marketo: (ConnectorProfileMarketoConnectorProfileCredentials)? - Redshift: (ConnectorProfileRedshiftConnectorProfileCredentials)? -} /// open class ConnectorProfileAmplitudeConnectorProfileCredentials { @@ -180,284 +224,204 @@ open class ConnectorProfileAmplitudeConnectorProfileCredentials { SecretKey: ConnectorProfileSecretKey } -/// -open class ConnectorProfileLogonLanguage { -} +typealias ConnectorProfileClientSecret = String|Mapping -/// -open class ConnectorProfileVeevaConnectorProfileProperties { - InstanceUrl: ConnectorProfileInstanceUrl -} /// -open class ConnectorProfilePassword { +open class ConnectorProfileInforNexusConnectorProfileCredentials { + AccessKeyId: ConnectorProfileAccessKeyId + UserId: ConnectorProfileUsername + SecretAccessKey: ConnectorProfileKey + Datakey: ConnectorProfileKey } /// -open class ConnectorProfileSalesforceConnectorProfileCredentials { - JwtToken: (ConnectorProfileJwtToken)? - AccessToken: (ConnectorProfileAccessToken)? - RefreshToken: (ConnectorProfileRefreshToken)? - ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? - ClientCredentialsArn: (ConnectorProfileClientCredentialsArn)? - OAuth2GrantType: (ConnectorProfileOAuth2GrantType)? +open class ConnectorProfileSnowflakeConnectorProfileCredentials { + Username: ConnectorProfileUsername + Password: ConnectorProfilePassword } /// -open class ConnectorProfileApplicationServicePath { +open class ConnectorProfileTrendmicroConnectorProfileCredentials { + ApiSecretKey: ConnectorProfileApiSecretKey } -/// -open class ConnectorProfileServiceNowConnectorProfileProperties { - InstanceUrl: ConnectorProfileInstanceUrl -} +typealias ConnectorProfileTokenUrlCustomProperties = Mapping -/// -open class ConnectorProfileCustomConnectorProfileProperties { - ProfileProperties: (ConnectorProfileProfileProperties)? - OAuth2Properties: (ConnectorProfileOAuth2Properties)? -} -/// -open class ConnectorProfileApiToken { -} +typealias ConnectorProfileClusterIdentifier = String|Mapping -/// -open class ConnectorProfileDatabaseUrl { -} -/// -open class ConnectorProfileMarketoConnectorProfileCredentials { - ClientSecret: ConnectorProfileClientSecret - AccessToken: (ConnectorProfileAccessToken)? - ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? - ClientId: ConnectorProfileClientId -} +typealias ConnectorProfileDatabaseName = String|Mapping -/// -open class ConnectorProfileSAPODataConnectorProfileCredentials { - BasicAuthCredentials: (ConnectorProfileBasicAuthCredentials)? - OAuthCredentials: (Dynamic)? -} /// open class ConnectorProfileSalesforceConnectorProfileProperties { + InstanceUrl: (ConnectorProfileInstanceUrl)? isSandboxEnvironment: (Boolean|Mapping)? usePrivateLinkForMetadataAndAuthorization: (Boolean|Mapping)? - InstanceUrl: (ConnectorProfileInstanceUrl)? -} - -/// -open class ConnectorProfilePardotConnectorProfileProperties { - BusinessUnitId: ConnectorProfileBusinessUnitId - InstanceUrl: (ConnectorProfileInstanceUrl)? - IsSandboxEnvironment: (Boolean|Mapping)? } /// -open class ConnectorProfileZendeskConnectorProfileProperties { +open class ConnectorProfileDynatraceConnectorProfileProperties { InstanceUrl: ConnectorProfileInstanceUrl } -/// -open class ConnectorProfileCustomAuthenticationType { -} - -/// -open class ConnectorProfileRoleArn { -} - /// Connector specific properties needed to create connector profile - currently not needed for Amplitude, Trendmicro, Googleanalytics and Singular open class ConnectorProfileConnectorProfileProperties { InforNexus: (ConnectorProfileInforNexusConnectorProfileProperties)? - SAPOData: (ConnectorProfileSAPODataConnectorProfileProperties)? - Salesforce: (ConnectorProfileSalesforceConnectorProfileProperties)? - Slack: (ConnectorProfileSlackConnectorProfileProperties)? - Snowflake: (ConnectorProfileSnowflakeConnectorProfileProperties)? Marketo: (ConnectorProfileMarketoConnectorProfileProperties)? + Pardot: (ConnectorProfilePardotConnectorProfileProperties)? Datadog: (ConnectorProfileDatadogConnectorProfileProperties)? - Dynatrace: (ConnectorProfileDynatraceConnectorProfileProperties)? + Salesforce: (ConnectorProfileSalesforceConnectorProfileProperties)? + Slack: (ConnectorProfileSlackConnectorProfileProperties)? Redshift: (ConnectorProfileRedshiftConnectorProfileProperties)? - Zendesk: (ConnectorProfileZendeskConnectorProfileProperties)? CustomConnector: (ConnectorProfileCustomConnectorProfileProperties)? - Pardot: (ConnectorProfilePardotConnectorProfileProperties)? + Zendesk: (ConnectorProfileZendeskConnectorProfileProperties)? + SAPOData: (ConnectorProfileSAPODataConnectorProfileProperties)? ServiceNow: (ConnectorProfileServiceNowConnectorProfileProperties)? + Snowflake: (ConnectorProfileSnowflakeConnectorProfileProperties)? Veeva: (ConnectorProfileVeevaConnectorProfileProperties)? + Dynatrace: (ConnectorProfileDynatraceConnectorProfileProperties)? } -/// -open class ConnectorProfileInforNexusConnectorProfileProperties { - InstanceUrl: ConnectorProfileInstanceUrl -} +typealias ConnectorProfileRefreshToken = String|Mapping -/// -open class ConnectorProfileUsername { -} /// -open class ConnectorProfileConnectorOAuthRequest { - AuthCode: (String|Mapping)? - RedirectUri: (String|Mapping)? +open class ConnectorProfileSAPODataConnectorProfileCredentials { + BasicAuthCredentials: (ConnectorProfileBasicAuthCredentials)? + OAuthCredentials: (Dynamic)? } /// -open class ConnectorProfileClientNumber { +open class ConnectorProfileServiceNowConnectorProfileProperties { + InstanceUrl: ConnectorProfileInstanceUrl } /// -open class ConnectorProfileClientSecret { +open class ConnectorProfileVeevaConnectorProfileProperties { + InstanceUrl: ConnectorProfileInstanceUrl } /// -open class ConnectorProfilePrivateLinkServiceName { +open class ConnectorProfileDatadogConnectorProfileProperties { + InstanceUrl: ConnectorProfileInstanceUrl } -/// A map for properties for custom connector. -open class ConnectorProfileProfileProperties { -} +typealias ConnectorProfileAuthenticationType = String|Mapping -/// -open class ConnectorProfileOAuth2GrantType { -} - -/// A map for properties for custom connector Token Url. -open class ConnectorProfileTokenUrlCustomProperties { -} -/// -open class ConnectorProfileApiKey { -} +typealias ConnectorProfileAccountName = String|Mapping -/// -open class ConnectorProfileKey { -} -/// -open class ConnectorProfileDatabaseName { -} +typealias ConnectorProfileDatabaseUrl = String|Mapping -/// -open class ConnectorProfileSingularConnectorProfileCredentials { - ApiKey: ConnectorProfileApiKey -} /// -open class ConnectorProfileApiKeyCredentials { - ApiKey: ConnectorProfileApiKey - ApiSecretKey: (ConnectorProfileApiSecretKey)? +open class ConnectorProfileMarketoConnectorProfileProperties { + InstanceUrl: ConnectorProfileInstanceUrl } -/// -open class ConnectorProfileAccountName { -} +typealias ConnectorProfileBusinessUnitId = String|Mapping -/// -open class ConnectorProfileApplicationHostUrl { -} /// -open class ConnectorProfileZendeskConnectorProfileCredentials { +open class ConnectorProfileGoogleAnalyticsConnectorProfileCredentials { ClientId: ConnectorProfileClientId ClientSecret: ConnectorProfileClientSecret AccessToken: (ConnectorProfileAccessToken)? + RefreshToken: (ConnectorProfileRefreshToken)? ConnectorOAuthRequest: (ConnectorProfileConnectorOAuthRequest)? } -/// A map for properties for custom authentication. -open class ConnectorProfileCredentialsMap { -} +typealias ConnectorProfileApplicationServicePath = String|Mapping + + +typealias ConnectorProfileJwtToken = String|Mapping + + +typealias ConnectorProfileApplicationHostUrl = String|Mapping -/// -open class ConnectorProfileWorkgroupName { -} /// -open class ConnectorProfilePortNumber { +open class ConnectorProfileOAuthProperties { + AuthCodeUrl: (String(matches(Regex(#"^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"#)))|Mapping)? + TokenUrl: (String(matches(Regex(#"^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"#)))|Mapping)? + OAuthScopes: (Listing)? } +typealias ConnectorProfileRegion = String|Mapping + + /// -open class ConnectorProfileMarketoConnectorProfileProperties { +open class ConnectorProfileSlackConnectorProfileProperties { InstanceUrl: ConnectorProfileInstanceUrl } /// -open class ConnectorProfileSAPODataConnectorProfileProperties { - LogonLanguage: (ConnectorProfileLogonLanguage)? - PrivateLinkServiceName: (ConnectorProfilePrivateLinkServiceName)? - OAuthProperties: (ConnectorProfileOAuthProperties)? - DisableSSO: (Boolean|Mapping)? - ApplicationHostUrl: (ConnectorProfileApplicationHostUrl)? - ApplicationServicePath: (ConnectorProfileApplicationServicePath)? - PortNumber: (ConnectorProfilePortNumber)? - ClientNumber: (ConnectorProfileClientNumber)? +open class ConnectorProfileCustomAuthCredentials { + CustomAuthenticationType: ConnectorProfileCustomAuthenticationType + CredentialsMap: (ConnectorProfileCredentialsMap)? } /// -open class ConnectorProfileApiSecretKey { +open class ConnectorProfileOAuth2Credentials { + AccessToken: (ConnectorProfileAccessToken)? + RefreshToken: (ConnectorProfileRefreshToken)? + OAuthRequest: (ConnectorProfileConnectorOAuthRequest)? + ClientId: (ConnectorProfileClientId)? + ClientSecret: (ConnectorProfileClientSecret)? } -/// -open class ConnectorProfileBucketName { -} +typealias ConnectorProfilePortNumber = Int|Mapping -/// -open class ConnectorProfileWarehouse { -} -/// -open class ConnectorProfileDatadogConnectorProfileCredentials { - ApiKey: ConnectorProfileApiKey - ApplicationKey: ConnectorProfileApplicationKey -} +typealias ConnectorProfileClientCredentialsArn = String|Mapping -/// -open class ConnectorProfileInstanceUrl { -} /// -open class ConnectorProfileOAuth2Properties { - TokenUrlCustomProperties: (ConnectorProfileTokenUrlCustomProperties)? - TokenUrl: (String(matches(Regex(#"^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"#)))|Mapping)? - OAuth2GrantType: (ConnectorProfileOAuth2GrantType)? +open class ConnectorProfilePardotConnectorProfileProperties { + InstanceUrl: (ConnectorProfileInstanceUrl)? + IsSandboxEnvironment: (Boolean|Mapping)? + BusinessUnitId: ConnectorProfileBusinessUnitId } -/// -open class ConnectorProfileAuthCode { -} +typealias ConnectorProfileApiSecretKey = String|Mapping -/// -open class ConnectorProfileClusterIdentifier { -} -/// -open class ConnectorProfileSecretKey { -} +typealias ConnectorProfileSecretKey = String|Mapping -/// -open class ConnectorProfileOAuthProperties { - AuthCodeUrl: (String(matches(Regex(#"^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"#)))|Mapping)? - TokenUrl: (String(matches(Regex(#"^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"#)))|Mapping)? - OAuthScopes: (Listing)? -} -/// -open class ConnectorProfileDynatraceConnectorProfileProperties { - InstanceUrl: ConnectorProfileInstanceUrl -} +typealias ConnectorProfileAccessKeyId = String|Mapping -/// -open class ConnectorProfileServiceNowConnectorProfileCredentials { - Password: (ConnectorProfilePassword)? - OAuth2Credentials: (ConnectorProfileOAuth2Credentials)? - Username: (ConnectorProfileUsername)? -} -/// -open class ConnectorProfileAuthenticationType { -} +typealias ConnectorProfilePassword = String|Mapping -/// -open class ConnectorProfileBusinessUnitId { + +typealias ConnectorProfileWorkgroupName = String|Mapping + + +/// Connector specific configuration needed to create connector profile based on Authentication mechanism +open class ConnectorProfileConnectorProfileCredentials { + Marketo: (ConnectorProfileMarketoConnectorProfileCredentials)? + CustomConnector: (ConnectorProfileCustomConnectorProfileCredentials)? + Dynatrace: (ConnectorProfileDynatraceConnectorProfileCredentials)? + InforNexus: (ConnectorProfileInforNexusConnectorProfileCredentials)? + Snowflake: (ConnectorProfileSnowflakeConnectorProfileCredentials)? + Trendmicro: (ConnectorProfileTrendmicroConnectorProfileCredentials)? + Redshift: (ConnectorProfileRedshiftConnectorProfileCredentials)? + ServiceNow: (ConnectorProfileServiceNowConnectorProfileCredentials)? + GoogleAnalytics: (ConnectorProfileGoogleAnalyticsConnectorProfileCredentials)? + Salesforce: (ConnectorProfileSalesforceConnectorProfileCredentials)? + Singular: (ConnectorProfileSingularConnectorProfileCredentials)? + Slack: (ConnectorProfileSlackConnectorProfileCredentials)? + Veeva: (ConnectorProfileVeevaConnectorProfileCredentials)? + Amplitude: (ConnectorProfileAmplitudeConnectorProfileCredentials)? + Datadog: (ConnectorProfileDatadogConnectorProfileCredentials)? + Zendesk: (ConnectorProfileZendeskConnectorProfileCredentials)? + SAPOData: (ConnectorProfileSAPODataConnectorProfileCredentials)? + Pardot: (ConnectorProfilePardotConnectorProfileCredentials)? } /// @@ -465,30 +429,23 @@ open class ConnectorProfileDynatraceConnectorProfileCredentials { ApiToken: ConnectorProfileApiToken } -/// -open class ConnectorProfileInforNexusConnectorProfileCredentials { - AccessKeyId: ConnectorProfileAccessKeyId - UserId: ConnectorProfileUsername - SecretAccessKey: ConnectorProfileKey - Datakey: ConnectorProfileKey -} +typealias ConnectorProfileUsername = String|Mapping -/// -open class ConnectorProfileBucketPrefix { -} /// -open class ConnectorProfileRefreshToken { +open class ConnectorProfileCustomConnectorProfileCredentials { + ApiKey: (ConnectorProfileApiKeyCredentials)? + Custom: (ConnectorProfileCustomAuthCredentials)? + AuthenticationType: ConnectorProfileAuthenticationType + Basic: (ConnectorProfileBasicAuthCredentials)? + Oauth2: (ConnectorProfileOAuth2Credentials)? } -/// Connector specific configurations needed to create connector profile -open class ConnectorProfileConnectorProfileConfig { - ConnectorProfileCredentials: (ConnectorProfileConnectorProfileCredentials)? - ConnectorProfileProperties: (ConnectorProfileConnectorProfileProperties)? -} +typealias ConnectorProfileOAuth2GrantType = String|Mapping + /// -open class ConnectorProfileDatadogConnectorProfileProperties { +open class ConnectorProfileInforNexusConnectorProfileProperties { InstanceUrl: ConnectorProfileInstanceUrl } @@ -498,9 +455,6 @@ open class ConnectorProfile extends cloudformation.Resource { Type = "AWS::AppFlow::ConnectorProfile" - /// The label of the connector. The label is unique for each ConnectorRegistration in your AWS account. Only needed if calling for CUSTOMCONNECTOR connector type/. - hidden ConnectorLabel: (String(matches(Regex(#"[\w!@#.-]+"#)))|Mapping)? - /// The maximum number of items to retrieve in a single batch. hidden ConnectorProfileName: String(matches(Regex(#"[\w/!@#+=.-]+"#)))|Mapping @@ -516,13 +470,16 @@ open class ConnectorProfile extends cloudformation.Resource { /// Connector specific configurations needed to create connector profile hidden ConnectorProfileConfig: (ConnectorProfileConnectorProfileConfig)? + /// The label of the connector. The label is unique for each ConnectorRegistration in your AWS account. Only needed if calling for CUSTOMCONNECTOR connector type/. + hidden ConnectorLabel: (String(matches(Regex(#"[\w!@#.-]+"#)))|Mapping)? + Properties { - ["ConnectorLabel"] = if (ConnectorLabel == null) null else ConnectorLabel ["ConnectorProfileName"] = if (ConnectorProfileName == null) null else ConnectorProfileName ["KMSArn"] = if (KMSArn == null) null else KMSArn ["ConnectorType"] = if (ConnectorType == null) null else ConnectorType ["ConnectionMode"] = if (ConnectionMode == null) null else ConnectionMode ["ConnectorProfileConfig"] = if (ConnectorProfileConfig == null) null else ConnectorProfileConfig + ["ConnectorLabel"] = if (ConnectorLabel == null) null else ConnectorLabel } } diff --git a/pkl/aws/appflow/flow.pkl b/pkl/aws/appflow/flow.pkl index 0737c719..a7c80656 100644 --- a/pkl/aws/appflow/flow.pkl +++ b/pkl/aws/appflow/flow.pkl @@ -5,39 +5,47 @@ module aws.appflow.flow import "../../cloudformation.pkl" -/// -open class FlowBucketPrefix { -} +typealias FlowDataTransferApi = String|Mapping -/// The API version that the connector will use. -open class FlowApiVersion { -} -/// -open class FlowPardotSourceProperties { - Object: FlowObject -} +typealias FlowName = String|Mapping + + +typealias FlowIncludeSourceFiles = Boolean|Mapping + + +typealias FlowPathPrefixHierarchy = Listing<(FlowPathPrefix)?> + + +typealias FlowTriggerType = String|Mapping + /// -open class FlowCustomConnectorSourceProperties { - EntityName: FlowEntityName - CustomProperties: (FlowCustomProperties)? - DataTransferApi: (Dynamic)? +open class FlowS3OutputFormatConfig { + PreserveSourceDataTyping: (FlowPreserveSourceDataTyping)? + FileType: (FlowFileType)? + PrefixConfig: (FlowPrefixConfig)? + AggregationConfig: (FlowAggregationConfig)? } +typealias FlowMarketoConnectorOperator = String|Mapping + + +typealias FlowPardotConnectorOperator = String|Mapping + + /// -open class FlowSAPODataConnectorOperator { +open class FlowS3SourceProperties { + BucketName: FlowBucketName + BucketPrefix: FlowBucketPrefix + S3InputFormatConfig: (FlowS3InputFormatConfig)? } /// Trigger settings of the flow. open class FlowGlueDataCatalog { - RoleArn: String(matches(Regex(#"arn:aws:iam:.*:[0-9]+:.*"#)))|Mapping DatabaseName: String(matches(Regex(#"[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*"#)))|Mapping TablePrefix: String(matches(Regex(#"[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*"#)))|Mapping -} - -/// -open class FlowTriggerType { + RoleArn: String(matches(Regex(#"arn:aws:iam:.*:[0-9]+:.*"#)))|Mapping } /// @@ -46,81 +54,71 @@ open class FlowEventBridgeDestinationProperties { ErrorHandlingConfig: (FlowErrorHandlingConfig)? } -/// -open class FlowDatadogConnectorOperator { -} +typealias FlowTrendmicroConnectorOperator = String|Mapping -/// Configurations of Source connector of the flow. -open class FlowSourceFlowConfig { - ConnectorType: FlowConnectorType - ApiVersion: (FlowApiVersion)? - ConnectorProfileName: (FlowConnectorProfileName)? - SourceConnectorProperties: FlowSourceConnectorProperties - IncrementalPullConfig: (FlowIncrementalPullConfig)? -} -/// -open class FlowAggregationConfig { - AggregationType: (FlowAggregationType)? - TargetFileSize: (FlowTargetFileSize)? -} +typealias FlowSingularConnectorOperator = String|Mapping + + +typealias FlowCustomProperties = Mapping + /// -open class FlowTrendmicroSourceProperties { +open class FlowSalesforceSourceProperties { Object: FlowObject + EnableDynamicFieldUpdate: (FlowEnableDynamicFieldUpdate)? + IncludeDeletedRecords: (FlowIncludeDeletedRecords)? + DataTransferApi: (FlowDataTransferApi)? } -/// -open class FlowIncludeAllVersions { -} +typealias FlowAggregationType = String|Mapping -/// -open class FlowWriteOperationType { -} -/// -open class FlowTargetFileSize { -} +typealias FlowFileType = String|Mapping -/// -open class FlowS3OutputFormatConfig { - FileType: (FlowFileType)? - PrefixConfig: (FlowPrefixConfig)? - AggregationConfig: (FlowAggregationConfig)? - PreserveSourceDataTyping: (FlowPreserveSourceDataTyping)? -} /// -open class FlowInforNexusSourceProperties { - Object: FlowObject +open class FlowSAPODataSourceProperties { + ObjectPath: FlowObject + parallelismConfig: (FlowSAPODataParallelismConfig)? + paginationConfig: (FlowSAPODataPaginationConfig)? } -/// -open class FlowMarketoSourceProperties { - Object: FlowObject -} +typealias FlowPrefixType = String|Mapping + + +typealias FlowOperator = String|Mapping + /// open class FlowRedshiftDestinationProperties { - ErrorHandlingConfig: (FlowErrorHandlingConfig)? Object: FlowObject IntermediateBucketName: FlowBucketName BucketPrefix: (FlowBucketPrefix)? + ErrorHandlingConfig: (FlowErrorHandlingConfig)? } -/// -open class FlowOperatorPropertiesKeys { -} +typealias ScheduledTriggerPropertiesDataPullMode = "Incremental"|"Complete" -/// -open class FlowIncludeRenditions { +/// Details required for scheduled trigger type +open class FlowScheduledTriggerProperties { + DataPullMode: (ScheduledTriggerPropertiesDataPullMode|Mapping)? + ScheduleStartTime: (Number|Mapping)? + ScheduleEndTime: (Number|Mapping)? + FirstExecutionFrom: (Number|Mapping)? + TimeZone: (String|Mapping)? + ScheduleOffset: (Number|Mapping)? + FlowErrorDeactivationThreshold: (Int|Mapping)? + ScheduleExpression: String|Mapping } /// -open class FlowUpsolverS3OutputFormatConfig { - PrefixConfig: FlowPrefixConfig - AggregationConfig: (FlowAggregationConfig)? - FileType: (FlowFileType)? +open class FlowSalesforceDestinationProperties { + IdFieldNames: (Listing)? + WriteOperationType: (FlowWriteOperationType)? + DataTransferApi: (FlowDataTransferApi)? + Object: FlowObject + ErrorHandlingConfig: (FlowErrorHandlingConfig)? } /// @@ -130,49 +128,83 @@ open class FlowS3DestinationProperties { S3OutputFormatConfig: (FlowS3OutputFormatConfig)? } +typealias S3InputFormatConfigS3InputFileType = "CSV"|"JSON" + /// -open class FlowSalesforceConnectorOperator { +open class FlowS3InputFormatConfig { + S3InputFileType: (S3InputFormatConfigS3InputFileType|Mapping)? } /// -open class FlowEnableDynamicFieldUpdate { +open class FlowTask { + ConnectorOperator: (FlowConnectorOperator)? + DestinationField: (String|Mapping)? + TaskType: FlowTaskType + TaskProperties: (Listing)? + SourceFields: Listing } -/// -open class FlowSlackSourceProperties { - Object: FlowObject +typealias FlowTargetFileSize = Int|Mapping + + +/// Configurations of Source connector of the flow. +open class FlowSourceFlowConfig { + IncrementalPullConfig: (FlowIncrementalPullConfig)? + ConnectorType: FlowConnectorType + ApiVersion: (FlowApiVersion)? + ConnectorProfileName: (FlowConnectorProfileName)? + SourceConnectorProperties: FlowSourceConnectorProperties } +typealias FlowDatetimeTypeFieldName = String|Mapping + + /// -open class FlowCustomConnectorDestinationProperties { - EntityName: FlowEntityName - ErrorHandlingConfig: (FlowErrorHandlingConfig)? - WriteOperationType: (FlowWriteOperationType)? - IdFieldNames: (Listing)? - CustomProperties: (FlowCustomProperties)? +open class FlowAmplitudeSourceProperties { + Object: FlowObject } /// -open class FlowSalesforceDestinationProperties { +open class FlowInforNexusSourceProperties { Object: FlowObject - ErrorHandlingConfig: (FlowErrorHandlingConfig)? - IdFieldNames: (Listing)? - WriteOperationType: (FlowWriteOperationType)? - DataTransferApi: (FlowDataTransferApi)? } -/// An object used to store task related info -open class FlowTaskPropertiesObject { - Value: String(matches(Regex(#".+"#)))|Mapping - Key: FlowOperatorPropertiesKeys +/// Configuration for scheduled incremental data pull +open class FlowIncrementalPullConfig { + DatetimeTypeFieldName: (FlowDatetimeTypeFieldName)? } -/// -open class FlowPardotConnectorOperator { +typealias FlowSlackConnectorOperator = String|Mapping + + +typealias FlowIncludeDeletedRecords = Boolean|Mapping + + +/// Operation to be performed on provided source fields +open class FlowConnectorOperator { + Zendesk: (FlowZendeskConnectorOperator)? + Amplitude: (FlowAmplitudeConnectorOperator)? + GoogleAnalytics: (FlowGoogleAnalyticsConnectorOperator)? + Pardot: (FlowPardotConnectorOperator)? + ServiceNow: (FlowServiceNowConnectorOperator)? + Datadog: (FlowDatadogConnectorOperator)? + InforNexus: (FlowInforNexusConnectorOperator)? + Marketo: (FlowMarketoConnectorOperator)? + Slack: (FlowSlackConnectorOperator)? + Trendmicro: (FlowTrendmicroConnectorOperator)? + CustomConnector: (FlowOperator)? + Dynatrace: (FlowDynatraceConnectorOperator)? + S3: (FlowS3ConnectorOperator)? + Salesforce: (FlowSalesforceConnectorOperator)? + Singular: (FlowSingularConnectorOperator)? + SAPOData: (FlowSAPODataConnectorOperator)? + Veeva: (FlowVeevaConnectorOperator)? } -/// -open class FlowObject { +/// A label for tagging AppFlow resources +open class FlowTag { + Key: String|Mapping + Value: String|Mapping } /// @@ -183,192 +215,88 @@ open class FlowErrorHandlingConfig { } /// -open class FlowZendeskDestinationProperties { - Object: FlowObject - ErrorHandlingConfig: (FlowErrorHandlingConfig)? - IdFieldNames: (Listing)? - WriteOperationType: (FlowWriteOperationType)? -} - -/// SAP Source connector parallelism factor -open class FlowSAPODataParallelismConfig { - maxParallelism: FlowSAPODataMaxParallelism +open class FlowCustomConnectorSourceProperties { + DataTransferApi: (Dynamic)? + EntityName: FlowEntityName + CustomProperties: (FlowCustomProperties)? } -/// -open class FlowPrefixConfig { - PrefixType: (FlowPrefixType)? - PrefixFormat: (FlowPrefixFormat)? - PathPrefixHierarchy: (FlowPathPrefixHierarchy)? -} +typealias FlowIncludeAllVersions = Boolean|Mapping -/// Name of connector profile -open class FlowConnectorProfileName { -} -/// -open class FlowVeevaSourceProperties { - Object: FlowObject - DocumentType: (FlowDocumentType)? - IncludeSourceFiles: (FlowIncludeSourceFiles)? - IncludeRenditions: (FlowIncludeRenditions)? - IncludeAllVersions: (FlowIncludeAllVersions)? -} +typealias FlowDatadogConnectorOperator = String|Mapping -/// Configuration for scheduled incremental data pull -open class FlowIncrementalPullConfig { - DatetimeTypeFieldName: (FlowDatetimeTypeFieldName)? -} -/// -open class FlowPreserveSourceDataTyping { +/// Configurations of metadata catalog of the flow. +open class FlowMetadataCatalogConfig { + GlueDataCatalog: (FlowGlueDataCatalog)? } -/// -open class FlowDynatraceSourceProperties { - Object: FlowObject -} +typealias FlowEnableDynamicFieldUpdate = Boolean|Mapping -/// -open class FlowSalesforceSourceProperties { - Object: FlowObject - EnableDynamicFieldUpdate: (FlowEnableDynamicFieldUpdate)? - IncludeDeletedRecords: (FlowIncludeDeletedRecords)? - DataTransferApi: (FlowDataTransferApi)? -} -/// -open class FlowSingularConnectorOperator { -} +typealias FlowObject = String|Mapping -/// -open class FlowStatus { -} -/// Trigger settings of the flow. -open class FlowTriggerConfig { - TriggerType: FlowTriggerType - TriggerProperties: (FlowScheduledTriggerProperties)? -} +typealias FlowPrefixFormat = String|Mapping -typealias ScheduledTriggerPropertiesDataPullMode = "Incremental"|"Complete" -/// Details required for scheduled trigger type -open class FlowScheduledTriggerProperties { - FlowErrorDeactivationThreshold: (Int|Mapping)? - ScheduleExpression: String|Mapping - DataPullMode: (ScheduledTriggerPropertiesDataPullMode|Mapping)? - ScheduleStartTime: (Number|Mapping)? - ScheduleEndTime: (Number|Mapping)? - FirstExecutionFrom: (Number|Mapping)? - TimeZone: (String|Mapping)? - ScheduleOffset: (Number|Mapping)? -} +typealias FlowWriteOperationType = String|Mapping -/// Name of the datetime/timestamp data type field to be used for importing incremental records from the source -open class FlowDatetimeTypeFieldName { -} /// -open class FlowGoogleAnalyticsSourceProperties { +open class FlowTrendmicroSourceProperties { Object: FlowObject } -/// -open class FlowConnectorType { -} +typealias FlowAmplitudeConnectorOperator = String|Mapping -/// -open class FlowInforNexusConnectorOperator { -} -/// -open class FlowServiceNowConnectorOperator { -} +typealias FlowUpsolverBucketName = String|Mapping -/// Source connector details required to query a connector -open class FlowSourceConnectorProperties { - Pardot: (FlowPardotSourceProperties)? - ServiceNow: (FlowServiceNowSourceProperties)? - Slack: (FlowSlackSourceProperties)? - CustomConnector: (FlowCustomConnectorSourceProperties)? - Marketo: (FlowMarketoSourceProperties)? - SAPOData: (FlowSAPODataSourceProperties)? - Singular: (FlowSingularSourceProperties)? - Trendmicro: (FlowTrendmicroSourceProperties)? - Datadog: (FlowDatadogSourceProperties)? - Dynatrace: (FlowDynatraceSourceProperties)? - InforNexus: (FlowInforNexusSourceProperties)? - S3: (FlowS3SourceProperties)? - Salesforce: (FlowSalesforceSourceProperties)? - Amplitude: (FlowAmplitudeSourceProperties)? - GoogleAnalytics: (FlowGoogleAnalyticsSourceProperties)? - Veeva: (FlowVeevaSourceProperties)? - Zendesk: (FlowZendeskSourceProperties)? -} -/// -open class FlowName { -} +typealias FlowSalesforceConnectorOperator = String|Mapping -/// -open class FlowS3SourceProperties { - BucketName: FlowBucketName - BucketPrefix: FlowBucketPrefix - S3InputFormatConfig: (FlowS3InputFormatConfig)? -} /// -open class FlowServiceNowSourceProperties { +open class FlowSnowflakeDestinationProperties { + IntermediateBucketName: FlowBucketName + BucketPrefix: (FlowBucketPrefix)? + ErrorHandlingConfig: (FlowErrorHandlingConfig)? Object: FlowObject } /// -open class FlowDynatraceConnectorOperator { -} - -/// -open class FlowDocumentType { +open class FlowPrefixConfig { + PrefixType: (FlowPrefixType)? + PrefixFormat: (FlowPrefixFormat)? + PathPrefixHierarchy: (FlowPathPrefixHierarchy)? } /// -open class FlowTaskType { +open class FlowDatadogSourceProperties { + Object: FlowObject } /// -open class FlowMarketoConnectorOperator { +open class FlowMarketoSourceProperties { + Object: FlowObject } -/// -open class FlowEntityName { +/// An object used to store task related info +open class FlowTaskPropertiesObject { + Key: FlowOperatorPropertiesKeys + Value: String(matches(Regex(#".+"#)))|Mapping } -/// Configurations of destination connector. -open class FlowDestinationFlowConfig { - ConnectorType: FlowConnectorType - ApiVersion: (FlowApiVersion)? - ConnectorProfileName: (FlowConnectorProfileName)? - DestinationConnectorProperties: FlowDestinationConnectorProperties -} +typealias FlowPathPrefix = String|Mapping -/// -open class FlowSnowflakeDestinationProperties { - ErrorHandlingConfig: (FlowErrorHandlingConfig)? - Object: FlowObject - IntermediateBucketName: FlowBucketName - BucketPrefix: (FlowBucketPrefix)? -} -/// -open class FlowSAPODataMaxPageSize { -} +typealias FlowStatus = String|Mapping -/// -open class FlowDataTransferApi { -} /// -open class FlowAmplitudeSourceProperties { +open class FlowGoogleAnalyticsSourceProperties { Object: FlowObject } @@ -379,78 +307,35 @@ open class FlowUpsolverDestinationProperties { S3OutputFormatConfig: FlowUpsolverS3OutputFormatConfig } -/// Destination connector details -open class FlowDestinationConnectorProperties { - SAPOData: (FlowSAPODataDestinationProperties)? - Salesforce: (FlowSalesforceDestinationProperties)? - Upsolver: (FlowUpsolverDestinationProperties)? - LookoutMetrics: (FlowLookoutMetricsDestinationProperties)? - CustomConnector: (FlowCustomConnectorDestinationProperties)? - Marketo: (FlowMarketoDestinationProperties)? - Zendesk: (FlowZendeskDestinationProperties)? - Redshift: (FlowRedshiftDestinationProperties)? - S3: (FlowS3DestinationProperties)? - Snowflake: (FlowSnowflakeDestinationProperties)? - EventBridge: (FlowEventBridgeDestinationProperties)? -} - /// -open class FlowIncludeDeletedRecords { +open class FlowDynatraceSourceProperties { + Object: FlowObject } -/// -open class FlowIncludeSourceFiles { -} +typealias FlowVeevaConnectorOperator = String|Mapping -/// Operation to be performed on provided source fields -open class FlowConnectorOperator { - Veeva: (FlowVeevaConnectorOperator)? - GoogleAnalytics: (FlowGoogleAnalyticsConnectorOperator)? - InforNexus: (FlowInforNexusConnectorOperator)? - S3: (FlowS3ConnectorOperator)? - Pardot: (FlowPardotConnectorOperator)? - Trendmicro: (FlowTrendmicroConnectorOperator)? - Dynatrace: (FlowDynatraceConnectorOperator)? - SAPOData: (FlowSAPODataConnectorOperator)? - ServiceNow: (FlowServiceNowConnectorOperator)? - Zendesk: (FlowZendeskConnectorOperator)? - CustomConnector: (FlowOperator)? - Amplitude: (FlowAmplitudeConnectorOperator)? - Datadog: (FlowDatadogConnectorOperator)? - Marketo: (FlowMarketoConnectorOperator)? - Singular: (FlowSingularConnectorOperator)? - Slack: (FlowSlackConnectorOperator)? - Salesforce: (FlowSalesforceConnectorOperator)? -} /// -open class FlowTrendmicroConnectorOperator { +open class FlowSuccessResponseHandlingConfig { + BucketName: (FlowBucketName)? + BucketPrefix: (FlowBucketPrefix)? } /// -open class FlowLookoutMetricsDestinationProperties { - Object: (FlowObject)? +open class FlowAggregationConfig { + AggregationType: (FlowAggregationType)? + TargetFileSize: (FlowTargetFileSize)? } -/// -open class FlowAmplitudeConnectorOperator { -} +typealias FlowSAPODataMaxPageSize = Int|Mapping -/// -open class FlowFileType { -} -/// -open class FlowS3ConnectorOperator { -} +typealias FlowGoogleAnalyticsConnectorOperator = String|Mapping -/// Configurations of metadata catalog of the flow. -open class FlowMetadataCatalogConfig { - GlueDataCatalog: (FlowGlueDataCatalog)? -} /// -open class FlowBucketName { +open class FlowServiceNowSourceProperties { + Object: FlowObject } /// @@ -458,121 +343,186 @@ open class FlowZendeskSourceProperties { Object: FlowObject } -/// -open class FlowZendeskConnectorOperator { -} +typealias FlowSAPODataConnectorOperator = String|Mapping -/// -open class FlowPrefixType { -} -/// -open class FlowPathPrefixHierarchy { -} +typealias FlowZendeskConnectorOperator = String|Mapping -/// -open class FlowPrefixFormat { -} /// -open class FlowSAPODataDestinationProperties { +open class FlowZendeskDestinationProperties { + Object: FlowObject + ErrorHandlingConfig: (FlowErrorHandlingConfig)? IdFieldNames: (Listing)? WriteOperationType: (FlowWriteOperationType)? - ObjectPath: FlowObject - ErrorHandlingConfig: (FlowErrorHandlingConfig)? - SuccessResponseHandlingConfig: (FlowSuccessResponseHandlingConfig)? } +typealias FlowPreserveSourceDataTyping = Boolean|Mapping + + /// -open class FlowSAPODataMaxParallelism { +open class FlowLookoutMetricsDestinationProperties { + Object: (FlowObject)? } -/// -open class FlowTask { - ConnectorOperator: (FlowConnectorOperator)? - DestinationField: (String|Mapping)? - TaskType: FlowTaskType - TaskProperties: (Listing)? - SourceFields: Listing +/// SAP Source connector page size +open class FlowSAPODataPaginationConfig { + maxPageSize: FlowSAPODataMaxPageSize } -typealias S3InputFormatConfigS3InputFileType = "CSV"|"JSON" +typealias FlowServiceNowConnectorOperator = String|Mapping -/// -open class FlowS3InputFormatConfig { - S3InputFileType: (S3InputFormatConfigS3InputFileType|Mapping)? + +typealias FlowBucketPrefix = String|Mapping + + +/// Configurations of destination connector. +open class FlowDestinationFlowConfig { + ConnectorType: FlowConnectorType + ApiVersion: (FlowApiVersion)? + ConnectorProfileName: (FlowConnectorProfileName)? + DestinationConnectorProperties: FlowDestinationConnectorProperties } /// -open class FlowGoogleAnalyticsConnectorOperator { +open class FlowPardotSourceProperties { + Object: FlowObject } +typealias FlowEntityName = String|Mapping + + +typealias FlowApiVersion = String|Mapping + + /// -open class FlowDatadogSourceProperties { +open class FlowSlackSourceProperties { Object: FlowObject } +/// +open class FlowSAPODataDestinationProperties { + ObjectPath: FlowObject + ErrorHandlingConfig: (FlowErrorHandlingConfig)? + SuccessResponseHandlingConfig: (FlowSuccessResponseHandlingConfig)? + IdFieldNames: (Listing)? + WriteOperationType: (FlowWriteOperationType)? +} + +typealias FlowSAPODataMaxParallelism = Int|Mapping + + /// open class FlowSingularSourceProperties { Object: FlowObject } +typealias FlowInforNexusConnectorOperator = String|Mapping + + +typealias FlowTaskType = String|Mapping + + +typealias FlowDocumentType = String|Mapping + + /// open class FlowMarketoDestinationProperties { Object: FlowObject ErrorHandlingConfig: (FlowErrorHandlingConfig)? } -/// -open class FlowSlackConnectorOperator { -} +typealias FlowConnectorType = String|Mapping -/// A label for tagging AppFlow resources -open class FlowTag { - Value: String|Mapping - Key: String|Mapping -} -/// -open class FlowVeevaConnectorOperator { +/// Trigger settings of the flow. +open class FlowTriggerConfig { + TriggerType: FlowTriggerType + TriggerProperties: (FlowScheduledTriggerProperties)? } /// -open class FlowOperator { +open class FlowVeevaSourceProperties { + DocumentType: (FlowDocumentType)? + IncludeSourceFiles: (FlowIncludeSourceFiles)? + IncludeRenditions: (FlowIncludeRenditions)? + IncludeAllVersions: (FlowIncludeAllVersions)? + Object: FlowObject } -/// -open class FlowAggregationType { -} +typealias FlowBucketName = String|Mapping -/// -open class FlowSAPODataSourceProperties { - ObjectPath: FlowObject - parallelismConfig: (FlowSAPODataParallelismConfig)? - paginationConfig: (FlowSAPODataPaginationConfig)? -} -/// A map for properties for custom connector. -open class FlowCustomProperties { +typealias FlowOperatorPropertiesKeys = String|Mapping + + +/// Destination connector details +open class FlowDestinationConnectorProperties { + Snowflake: (FlowSnowflakeDestinationProperties)? + LookoutMetrics: (FlowLookoutMetricsDestinationProperties)? + EventBridge: (FlowEventBridgeDestinationProperties)? + Upsolver: (FlowUpsolverDestinationProperties)? + Marketo: (FlowMarketoDestinationProperties)? + Zendesk: (FlowZendeskDestinationProperties)? + CustomConnector: (FlowCustomConnectorDestinationProperties)? + Redshift: (FlowRedshiftDestinationProperties)? + S3: (FlowS3DestinationProperties)? + Salesforce: (FlowSalesforceDestinationProperties)? + SAPOData: (FlowSAPODataDestinationProperties)? } +typealias FlowDynatraceConnectorOperator = String|Mapping + + /// -open class FlowSuccessResponseHandlingConfig { - BucketName: (FlowBucketName)? - BucketPrefix: (FlowBucketPrefix)? +open class FlowCustomConnectorDestinationProperties { + CustomProperties: (FlowCustomProperties)? + EntityName: FlowEntityName + ErrorHandlingConfig: (FlowErrorHandlingConfig)? + WriteOperationType: (FlowWriteOperationType)? + IdFieldNames: (Listing)? } -/// SAP Source connector page size -open class FlowSAPODataPaginationConfig { - maxPageSize: FlowSAPODataMaxPageSize +typealias FlowIncludeRenditions = Boolean|Mapping + + +typealias FlowConnectorProfileName = String|Mapping + + +/// Source connector details required to query a connector +open class FlowSourceConnectorProperties { + GoogleAnalytics: (FlowGoogleAnalyticsSourceProperties)? + Marketo: (FlowMarketoSourceProperties)? + ServiceNow: (FlowServiceNowSourceProperties)? + Slack: (FlowSlackSourceProperties)? + Trendmicro: (FlowTrendmicroSourceProperties)? + Amplitude: (FlowAmplitudeSourceProperties)? + Dynatrace: (FlowDynatraceSourceProperties)? + Singular: (FlowSingularSourceProperties)? + Zendesk: (FlowZendeskSourceProperties)? + CustomConnector: (FlowCustomConnectorSourceProperties)? + Datadog: (FlowDatadogSourceProperties)? + InforNexus: (FlowInforNexusSourceProperties)? + SAPOData: (FlowSAPODataSourceProperties)? + Salesforce: (FlowSalesforceSourceProperties)? + Pardot: (FlowPardotSourceProperties)? + Veeva: (FlowVeevaSourceProperties)? + S3: (FlowS3SourceProperties)? } /// -open class FlowUpsolverBucketName { +open class FlowUpsolverS3OutputFormatConfig { + FileType: (FlowFileType)? + PrefixConfig: FlowPrefixConfig + AggregationConfig: (FlowAggregationConfig)? } -/// -open class FlowPathPrefix { +typealias FlowS3ConnectorOperator = String|Mapping + + +/// SAP Source connector parallelism factor +open class FlowSAPODataParallelismConfig { + maxParallelism: FlowSAPODataMaxParallelism } /// Resource schema for AWS::AppFlow::Flow. @@ -581,47 +531,47 @@ open class Flow extends cloudformation.Resource { Type = "AWS::AppFlow::Flow" + /// Configurations of metadata catalog of the flow. + hidden MetadataCatalogConfig: (FlowMetadataCatalogConfig)? + /// Name of the flow. hidden FlowName: String(matches(Regex(#"[a-zA-Z0-9][\w!@#.-]+"#)))|Mapping /// Description of the flow. hidden Description: (String(matches(Regex(#"[\w!@#\-.?,\s]*"#)))|Mapping)? - /// The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key. - hidden KMSArn: (String(matches(Regex(#"arn:aws:kms:.*:[0-9]+:.*"#)))|Mapping)? - - /// Trigger settings of the flow. - hidden TriggerConfig: FlowTriggerConfig + /// Configurations of Source connector of the flow. + hidden SourceFlowConfig: FlowSourceFlowConfig /// List of Destination connectors of the flow. hidden DestinationFlowConfigList: Listing - /// Configurations of metadata catalog of the flow. - hidden MetadataCatalogConfig: (FlowMetadataCatalogConfig)? - - /// Flow activation status for Scheduled- and Event-triggered flows - hidden FlowStatus: (FlowFlowStatus|Mapping)? - - /// Configurations of Source connector of the flow. - hidden SourceFlowConfig: FlowSourceFlowConfig - /// List of tasks for the flow. hidden Tasks: Listing /// List of Tags. hidden Tags: (Listing)? + /// The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key. + hidden KMSArn: (String(matches(Regex(#"arn:aws:kms:.*:[0-9]+:.*"#)))|Mapping)? + + /// Trigger settings of the flow. + hidden TriggerConfig: FlowTriggerConfig + + /// Flow activation status for Scheduled- and Event-triggered flows + hidden FlowStatus: (FlowFlowStatus|Mapping)? + Properties { + ["MetadataCatalogConfig"] = if (MetadataCatalogConfig == null) null else MetadataCatalogConfig ["FlowName"] = if (FlowName == null) null else FlowName ["Description"] = if (Description == null) null else Description - ["KMSArn"] = if (KMSArn == null) null else KMSArn - ["TriggerConfig"] = if (TriggerConfig == null) null else TriggerConfig - ["DestinationFlowConfigList"] = if (DestinationFlowConfigList == null) null else DestinationFlowConfigList - ["MetadataCatalogConfig"] = if (MetadataCatalogConfig == null) null else MetadataCatalogConfig - ["FlowStatus"] = if (FlowStatus == null) null else FlowStatus ["SourceFlowConfig"] = if (SourceFlowConfig == null) null else SourceFlowConfig + ["DestinationFlowConfigList"] = if (DestinationFlowConfigList == null) null else DestinationFlowConfigList ["Tasks"] = if (Tasks == null) null else Tasks ["Tags"] = if (Tags == null) null else Tags + ["KMSArn"] = if (KMSArn == null) null else KMSArn + ["TriggerConfig"] = if (TriggerConfig == null) null else TriggerConfig + ["FlowStatus"] = if (FlowStatus == null) null else FlowStatus } } diff --git a/pkl/aws/appintegrations/dataintegration.pkl b/pkl/aws/appintegrations/dataintegration.pkl index b6bf6373..4c1c186e 100644 --- a/pkl/aws/appintegrations/dataintegration.pkl +++ b/pkl/aws/appintegrations/dataintegration.pkl @@ -7,26 +7,27 @@ import "../../cloudformation.pkl" /// open class DataIntegrationScheduleConfig { + FirstExecutionFrom: (String(matches(Regex(#".*\S.*"#)))|Mapping)? Object: (String(matches(Regex(#"^[a-zA-Z0-9/\._\-]+$"#)))|Mapping)? ScheduleExpression: String(matches(Regex(#".*\S.*"#)))|Mapping - FirstExecutionFrom: (String(matches(Regex(#".*\S.*"#)))|Mapping)? } /// A label for tagging DataIntegration resources open class DataIntegrationTag { - Value: String|Mapping Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } +typealias DataIntegrationFileConfigurationFilters = Mapping + /// The configuration for what files should be pulled from the source. open class DataIntegrationFileConfiguration { Folders: Listing - Filters: (Dynamic)? + Filters: (DataIntegrationFileConfigurationFilters)? } -/// The configuration for what data should be pulled from the source. -open class DataIntegrationObjectConfiguration { -} +typealias DataIntegrationObjectConfiguration = Mapping + /// Resource Type definition for AWS::AppIntegrations::DataIntegration open class DataIntegration extends cloudformation.Resource { @@ -34,12 +35,18 @@ open class DataIntegration extends cloudformation.Resource { Type = "AWS::AppIntegrations::DataIntegration" - /// The data integration description. - hidden Description: (String|Mapping)? - /// The URI of the data source. hidden SourceURI: String(matches(Regex(#"^(\w+\:\/\/[\w.-]+[\w/!@#+=.-]+$)|(\w+\:\/\/[\w.-]+[\w/!@#+=.-]+[\w/!@#+=.-]+[\w/!@#+=.,-]+$)"#)))|Mapping + /// The tags (keys and values) associated with the data integration. + hidden Tags: (Listing)? + + /// The configuration for what data should be pulled from the source. + hidden ObjectConfiguration: (DataIntegrationObjectConfiguration)? + + /// The data integration description. + hidden Description: (String|Mapping)? + /// The name of the data integration. hidden Name: String(matches(Regex(#"^[a-zA-Z0-9/\._\-]+$"#)))|Mapping @@ -49,24 +56,18 @@ open class DataIntegration extends cloudformation.Resource { /// The name of the data and how often it should be pulled from the source. hidden ScheduleConfig: (DataIntegrationScheduleConfig)? - /// The tags (keys and values) associated with the data integration. - hidden Tags: (Listing)? - /// The configuration for what files should be pulled from the source. hidden FileConfiguration: (DataIntegrationFileConfiguration)? - /// The configuration for what data should be pulled from the source. - hidden ObjectConfiguration: (DataIntegrationObjectConfiguration)? - Properties { - ["Description"] = if (Description == null) null else Description ["SourceURI"] = if (SourceURI == null) null else SourceURI + ["Tags"] = if (Tags == null) null else Tags + ["ObjectConfiguration"] = if (ObjectConfiguration == null) null else ObjectConfiguration + ["Description"] = if (Description == null) null else Description ["Name"] = if (Name == null) null else Name ["KmsKey"] = if (KmsKey == null) null else KmsKey ["ScheduleConfig"] = if (ScheduleConfig == null) null else ScheduleConfig - ["Tags"] = if (Tags == null) null else Tags ["FileConfiguration"] = if (FileConfiguration == null) null else FileConfiguration - ["ObjectConfiguration"] = if (ObjectConfiguration == null) null else ObjectConfiguration } } diff --git a/pkl/aws/appintegrations/eventintegration.pkl b/pkl/aws/appintegrations/eventintegration.pkl index a5d97408..62e559b7 100644 --- a/pkl/aws/appintegrations/eventintegration.pkl +++ b/pkl/aws/appintegrations/eventintegration.pkl @@ -5,11 +5,6 @@ module aws.appintegrations.eventintegration import "../../cloudformation.pkl" -/// -open class EventIntegrationEventFilter { - Source: String(matches(Regex(#"^aws\.partner\/.*$"#)))|Mapping -} - /// open class EventIntegrationTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping @@ -22,12 +17,20 @@ open class EventIntegrationMetadata { Value: String(matches(Regex(#".*\S.*"#)))|Mapping } +/// +open class EventIntegrationEventFilter { + Source: String(matches(Regex(#"^aws\.partner\/.*$"#)))|Mapping +} + /// Resource Type definition for AWS::AppIntegrations::EventIntegration open class EventIntegration extends cloudformation.Resource { Type = "AWS::AppIntegrations::EventIntegration" + /// The event integration description. + hidden Description: (String|Mapping)? + /// The name of the event integration. hidden Name: String(matches(Regex(#"^[a-zA-Z0-9/\._\-]+$"#)))|Mapping @@ -40,15 +43,12 @@ open class EventIntegration extends cloudformation.Resource { /// The tags (keys and values) associated with the event integration. hidden Tags: (Listing)? - /// The event integration description. - hidden Description: (String|Mapping)? - Properties { + ["Description"] = if (Description == null) null else Description ["Name"] = if (Name == null) null else Name ["EventBridgeBus"] = if (EventBridgeBus == null) null else EventBridgeBus ["EventFilter"] = if (EventFilter == null) null else EventFilter ["Tags"] = if (Tags == null) null else Tags - ["Description"] = if (Description == null) null else Description } } diff --git a/pkl/aws/applicationautoscaling/scalabletarget.pkl b/pkl/aws/applicationautoscaling/scalabletarget.pkl index 7d5a6ab4..832ae707 100644 --- a/pkl/aws/applicationautoscaling/scalabletarget.pkl +++ b/pkl/aws/applicationautoscaling/scalabletarget.pkl @@ -6,24 +6,24 @@ module aws.applicationautoscaling.scalabletarget import "../../cloudformation.pkl" /// specifies whether the scaling activities for a scalable target are in a suspended state -open class SuspendedState { +open class ScalableTargetSuspendedState { DynamicScalingInSuspended: (Boolean|Mapping)? ScheduledScalingSuspended: (Boolean|Mapping)? DynamicScalingOutSuspended: (Boolean|Mapping)? } /// specifies a scheduled action for a scalable target -open class ScheduledAction { - Timezone: (String|Mapping)? - ScheduledActionName: String|Mapping +open class ScalableTargetScheduledAction { EndTime: (String|Mapping)? Schedule: String|Mapping StartTime: (String|Mapping)? - ScalableTargetAction: (ScalableTargetAction)? + ScalableTargetAction: (ScalableTargetScalableTargetAction)? + Timezone: (String|Mapping)? + ScheduledActionName: String|Mapping } /// specifies the minimum and maximum capacity -open class ScalableTargetAction { +open class ScalableTargetScalableTargetAction { MinCapacity: (Int|Mapping)? MaxCapacity: (Int|Mapping)? } @@ -40,33 +40,33 @@ open class ScalableTarget extends cloudformation.Resource { /// The identifier of the resource associated with the scalable target hidden ResourceId: String|Mapping - /// Specify the Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that allows Application Auto Scaling to modify the scalable target on your behalf. - hidden RoleARN: (String|Mapping)? - - /// The scheduled actions for the scalable target. Duplicates aren't allowed. - hidden ScheduledActions: (Listing)? + /// The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property + hidden ScalableDimension: String|Mapping /// The namespace of the AWS service that provides the resource, or a custom-resource hidden ServiceNamespace: String|Mapping + /// An embedded object that contains attributes and attribute values that are used to suspend and resume automatic scaling. Setting the value of an attribute to true suspends the specified scaling activities. Setting it to false (default) resumes the specified scaling activities. + hidden SuspendedState: (ScalableTargetSuspendedState)? + /// The maximum value that you plan to scale in to. When a scaling policy is in effect, Application Auto Scaling can scale in (contract) as needed to the minimum capacity limit in response to changing demand hidden MaxCapacity: Int|Mapping - /// The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property - hidden ScalableDimension: String|Mapping + /// Specify the Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that allows Application Auto Scaling to modify the scalable target on your behalf. + hidden RoleARN: (String|Mapping)? - /// An embedded object that contains attributes and attribute values that are used to suspend and resume automatic scaling. Setting the value of an attribute to true suspends the specified scaling activities. Setting it to false (default) resumes the specified scaling activities. - hidden SuspendedState: (SuspendedState)? + /// The scheduled actions for the scalable target. Duplicates aren't allowed. + hidden ScheduledActions: (Listing)? Properties { ["MinCapacity"] = if (MinCapacity == null) null else MinCapacity ["ResourceId"] = if (ResourceId == null) null else ResourceId - ["RoleARN"] = if (RoleARN == null) null else RoleARN - ["ScheduledActions"] = if (ScheduledActions == null) null else ScheduledActions - ["ServiceNamespace"] = if (ServiceNamespace == null) null else ServiceNamespace - ["MaxCapacity"] = if (MaxCapacity == null) null else MaxCapacity ["ScalableDimension"] = if (ScalableDimension == null) null else ScalableDimension + ["ServiceNamespace"] = if (ServiceNamespace == null) null else ServiceNamespace ["SuspendedState"] = if (SuspendedState == null) null else SuspendedState + ["MaxCapacity"] = if (MaxCapacity == null) null else MaxCapacity + ["RoleARN"] = if (RoleARN == null) null else RoleARN + ["ScheduledActions"] = if (ScheduledActions == null) null else ScheduledActions } } diff --git a/pkl/aws/applicationautoscaling/scalingpolicy.pkl b/pkl/aws/applicationautoscaling/scalingpolicy.pkl index ba9089b4..a20b9856 100644 --- a/pkl/aws/applicationautoscaling/scalingpolicy.pkl +++ b/pkl/aws/applicationautoscaling/scalingpolicy.pkl @@ -5,80 +5,80 @@ module aws.applicationautoscaling.scalingpolicy import "../../cloudformation.pkl" -/// Represents a CloudWatch metric of your choosing for a target tracking scaling policy to use with Application Auto Scaling. -open class CustomizedMetricSpecification { - Dimensions: (Listing)? +/// Represents a specific metric. +open class ScalingPolicyTargetTrackingMetric { + Dimensions: (Listing)? MetricName: (String|Mapping)? Namespace: (String|Mapping)? - Statistic: (String|Mapping)? - Unit: (String|Mapping)? - Metrics: (Listing)? -} - -/// The metric data to return. Also defines whether this call is returning data for one metric only, or whether it is performing a math expression on the values of returned metric statistics to create a new time series. A time series is a series of data points, each of which is associated with a timestamp. -open class TargetTrackingMetricDataQuery { - Label: (String|Mapping)? - ReturnData: (Boolean|Mapping)? - MetricStat: (TargetTrackingMetricStat)? - Expression: (String|Mapping)? - Id: (String|Mapping)? } -/// Represents a specific metric. -open class TargetTrackingMetric { - Dimensions: (Listing)? - MetricName: (String|Mapping)? - Namespace: (String|Mapping)? +/// A target tracking scaling policy. +open class ScalingPolicyTargetTrackingScalingPolicyConfiguration { + TargetValue: Number|Mapping + CustomizedMetricSpecification: (ScalingPolicyCustomizedMetricSpecification)? + DisableScaleIn: (Boolean|Mapping)? + PredefinedMetricSpecification: (ScalingPolicyPredefinedMetricSpecification)? + ScaleInCooldown: (Int|Mapping)? + ScaleOutCooldown: (Int|Mapping)? } -/// Describes the dimension of a metric. -open class TargetTrackingMetricDimension { - Name: (String|Mapping)? - Value: (String|Mapping)? +/// Represents a step adjustment for a StepScalingPolicyConfiguration. Describes an adjustment based on the difference between the value of the aggregated CloudWatch metric and the breach threshold that you've defined for the alarm. +open class ScalingPolicyStepAdjustment { + MetricIntervalLowerBound: (Number|Mapping)? + MetricIntervalUpperBound: (Number|Mapping)? + ScalingAdjustment: Int|Mapping } /// A step scaling policy. -open class StepScalingPolicyConfiguration { +open class ScalingPolicyStepScalingPolicyConfiguration { AdjustmentType: (String|Mapping)? Cooldown: (Int|Mapping)? MetricAggregationType: (String|Mapping)? MinAdjustmentMagnitude: (Int|Mapping)? - StepAdjustments: (Listing)? + StepAdjustments: (Listing)? } /// Represents a predefined metric for a target tracking scaling policy to use with Application Auto Scaling. -open class PredefinedMetricSpecification { +open class ScalingPolicyPredefinedMetricSpecification { PredefinedMetricType: String|Mapping ResourceLabel: (String|Mapping)? } -/// Represents a step adjustment for a StepScalingPolicyConfiguration. Describes an adjustment based on the difference between the value of the aggregated CloudWatch metric and the breach threshold that you've defined for the alarm. -open class StepAdjustment { - MetricIntervalLowerBound: (Number|Mapping)? - MetricIntervalUpperBound: (Number|Mapping)? - ScalingAdjustment: Int|Mapping +/// This structure defines the CloudWatch metric to return, along with the statistic, period, and unit. +open class ScalingPolicyTargetTrackingMetricStat { + Metric: (ScalingPolicyTargetTrackingMetric)? + Stat: (String|Mapping)? + Unit: (String|Mapping)? +} + +/// The metric data to return. Also defines whether this call is returning data for one metric only, or whether it is performing a math expression on the values of returned metric statistics to create a new time series. A time series is a series of data points, each of which is associated with a timestamp. +open class ScalingPolicyTargetTrackingMetricDataQuery { + ReturnData: (Boolean|Mapping)? + MetricStat: (ScalingPolicyTargetTrackingMetricStat)? + Expression: (String|Mapping)? + Id: (String|Mapping)? + Label: (String|Mapping)? +} + +/// Describes the dimension of a metric. +open class ScalingPolicyTargetTrackingMetricDimension { + Name: (String|Mapping)? + Value: (String|Mapping)? } /// Describes the dimension names and values associated with a metric. -open class MetricDimension { +open class ScalingPolicyMetricDimension { Name: String|Mapping Value: String|Mapping } -/// A target tracking scaling policy. -open class TargetTrackingScalingPolicyConfiguration { - CustomizedMetricSpecification: (CustomizedMetricSpecification)? - DisableScaleIn: (Boolean|Mapping)? - PredefinedMetricSpecification: (PredefinedMetricSpecification)? - ScaleInCooldown: (Int|Mapping)? - ScaleOutCooldown: (Int|Mapping)? - TargetValue: Number|Mapping -} - -/// This structure defines the CloudWatch metric to return, along with the statistic, period, and unit. -open class TargetTrackingMetricStat { - Metric: (TargetTrackingMetric)? - Stat: (String|Mapping)? +/// Represents a CloudWatch metric of your choosing for a target tracking scaling policy to use with Application Auto Scaling. +open class ScalingPolicyCustomizedMetricSpecification { + Metrics: (Listing)? + Dimensions: (Listing)? + MetricName: (String|Mapping)? + Namespace: (String|Mapping)? + Statistic: (String|Mapping)? Unit: (String|Mapping)? } @@ -88,19 +88,15 @@ open class ScalingPolicy extends cloudformation.Resource { Type = "AWS::ApplicationAutoScaling::ScalingPolicy" - /// The CloudFormation-generated ID of an Application Auto Scaling scalable target. For more information about the ID, see the Return Value section of the AWS::ApplicationAutoScaling::ScalableTarget resource. - hidden ScalingTargetId: (String|Mapping)? - - /// The namespace of the AWS service that provides the resource, or a custom-resource. - hidden ServiceNamespace: (String|Mapping)? - /// The name of the scaling policy. - /// /// + /// + /// /// Updates to the name of a target tracking scaling policy are not supported, unless you also update the metric used for scaling. To change only a target tracking scaling policy's name, first delete the policy by removing the existing AWS::ApplicationAutoScaling::ScalingPolicy resource from the template and updating the stack. Then, recreate the resource with the same settings and a different name. hidden PolicyName: String|Mapping /// The scaling policy type. - /// /// + /// + /// /// The following policy types are supported: /// /// TargetTrackingScaling Not supported for Amazon EMR @@ -111,23 +107,29 @@ open class ScalingPolicy extends cloudformation.Resource { /// The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier. hidden ResourceId: (String|Mapping)? + /// The namespace of the AWS service that provides the resource, or a custom-resource. + hidden ServiceNamespace: (String|Mapping)? + + /// A step scaling policy. + hidden StepScalingPolicyConfiguration: (ScalingPolicyStepScalingPolicyConfiguration)? + /// The scalable dimension. This string consists of the service namespace, resource type, and scaling property. hidden ScalableDimension: (String|Mapping)? - /// A step scaling policy. - hidden StepScalingPolicyConfiguration: (StepScalingPolicyConfiguration)? + /// The CloudFormation-generated ID of an Application Auto Scaling scalable target. For more information about the ID, see the Return Value section of the AWS::ApplicationAutoScaling::ScalableTarget resource. + hidden ScalingTargetId: (String|Mapping)? /// A target tracking scaling policy. - hidden TargetTrackingScalingPolicyConfiguration: (TargetTrackingScalingPolicyConfiguration)? + hidden TargetTrackingScalingPolicyConfiguration: (ScalingPolicyTargetTrackingScalingPolicyConfiguration)? Properties { - ["ScalingTargetId"] = if (ScalingTargetId == null) null else ScalingTargetId - ["ServiceNamespace"] = if (ServiceNamespace == null) null else ServiceNamespace ["PolicyName"] = if (PolicyName == null) null else PolicyName ["PolicyType"] = if (PolicyType == null) null else PolicyType ["ResourceId"] = if (ResourceId == null) null else ResourceId - ["ScalableDimension"] = if (ScalableDimension == null) null else ScalableDimension + ["ServiceNamespace"] = if (ServiceNamespace == null) null else ServiceNamespace ["StepScalingPolicyConfiguration"] = if (StepScalingPolicyConfiguration == null) null else StepScalingPolicyConfiguration + ["ScalableDimension"] = if (ScalableDimension == null) null else ScalableDimension + ["ScalingTargetId"] = if (ScalingTargetId == null) null else ScalingTargetId ["TargetTrackingScalingPolicyConfiguration"] = if (TargetTrackingScalingPolicyConfiguration == null) null else TargetTrackingScalingPolicyConfiguration } diff --git a/pkl/aws/applicationinsights/application.pkl b/pkl/aws/applicationinsights/application.pkl index 6cbfa909..334c9c8f 100644 --- a/pkl/aws/applicationinsights/application.pkl +++ b/pkl/aws/applicationinsights/application.pkl @@ -5,65 +5,24 @@ module aws.applicationinsights.application import "../../cloudformation.pkl" -/// The NetWeaver Prometheus Exporter Settings. -open class NetWeaverPrometheusExporter { - SAPSID: String|Mapping - InstanceNumbers: Listing - PrometheusPort: (String|Mapping)? -} - -/// A Windows Event to be monitored for the component. -open class WindowsEvent { - EventLevels: Listing - PatternSet: (String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping)? - LogGroupName: String(matches(Regex(#"[\.\-_/#A-Za-z0-9]+"#)))|Mapping - EventName: String(matches(Regex(#"^[a-zA-Z0-9_ \\/-]+$"#)))|Mapping -} - -typealias AlarmSeverity = "HIGH"|"MEDIUM"|"LOW" - -/// A CloudWatch alarm to be monitored for the component. -open class Alarm { - AlarmName: String|Mapping - Severity: (AlarmSeverity|Mapping)? -} - -/// The log pattern. -open class LogPattern { - PatternName: String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping - Pattern: String|Mapping - Rank: Int|Mapping +/// The log pattern set. +open class ApplicationLogPatternSet { + LogPatterns: Listing + PatternSetName: String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping } -typealias ComponentMonitoringSettingComponentConfigurationMode = "DEFAULT"|"DEFAULT_WITH_OVERWRITE"|"CUSTOM" - -/// The monitoring setting of the component. -open class ComponentMonitoringSetting { - Tier: String(matches(Regex(#"^[A-Z][[A-Z]_]*$"#)))|Mapping - ComponentConfigurationMode: ComponentMonitoringSettingComponentConfigurationMode|Mapping - DefaultOverwriteComponentConfiguration: (ComponentConfiguration)? - CustomComponentConfiguration: (ComponentConfiguration)? - ComponentName: (String(matches(Regex(#"^[\d\w\-_.+]*$"#)))|Mapping)? - ComponentARN: (String(matches(Regex(#"^arn:aws(-[\w]+)*:[\w\d-]+:([\w\d-]*)?:[\w\d_-]*([:/].+)*$"#)))|Mapping)? -} +typealias ApplicationEventLevel = String|Mapping -/// The configuration settings of sub components. -open class SubComponentConfigurationDetails { - Processes: (Listing)? - AlarmMetrics: (Listing)? - Logs: (Listing)? - WindowsEvents: (Listing)? -} /// The HA cluster Prometheus Exporter settings. -open class HAClusterPrometheusExporter { +open class ApplicationHAClusterPrometheusExporter { PrometheusPort: (String|Mapping)? } typealias LogEncoding = "utf-8"|"utf-16"|"ascii" /// A log to be monitored for the component. -open class Log { +open class ApplicationLog { LogGroupName: (String(matches(Regex(#"[\.\-_/#A-Za-z0-9]+"#)))|Mapping)? LogPath: (String(matches(Regex(#"^([a-zA-Z]:\\[\\\S|*\S]?.*|/[^"']*)$"#)))|Mapping)? LogType: String(matches(Regex(#"^[A-Z][[A-Z]_]*$"#)))|Mapping @@ -71,74 +30,122 @@ open class Log { PatternSet: (String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping)? } -/// A process to be monitored for the component. -open class Process { - ProcessName: String(matches(Regex(#"^[a-zA-Z0-9_,-]+$"#)))|Mapping - AlarmMetrics: Listing +/// The configuration settings of the component. +open class ApplicationComponentConfiguration { + ConfigurationDetails: (ApplicationConfigurationDetails)? + SubComponentTypeConfigurations: (Listing)? +} + +/// The configuration settings. +open class ApplicationConfigurationDetails { + Logs: (Listing)? + Processes: (Listing)? + JMXPrometheusExporter: (ApplicationJMXPrometheusExporter)? + HANAPrometheusExporter: (ApplicationHANAPrometheusExporter)? + HAClusterPrometheusExporter: (ApplicationHAClusterPrometheusExporter)? + NetWeaverPrometheusExporter: (ApplicationNetWeaverPrometheusExporter)? + SQLServerPrometheusExporter: (ApplicationSQLServerPrometheusExporter)? + AlarmMetrics: (Listing)? + WindowsEvents: (Listing)? + Alarms: (Listing)? +} + +/// A Windows Event to be monitored for the component. +open class ApplicationWindowsEvent { + LogGroupName: String(matches(Regex(#"[\.\-_/#A-Za-z0-9]+"#)))|Mapping + EventName: String(matches(Regex(#"^[a-zA-Z0-9_ \\/-]+$"#)))|Mapping + EventLevels: Listing + PatternSet: (String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping)? } /// A key-value pair to associate with a resource. -open class Tag { - Value: String|Mapping +open class ApplicationTag { Key: String|Mapping + Value: String|Mapping } -/// The custom grouped component. -open class CustomComponent { - ComponentName: String(matches(Regex(#"^[\d\w\-_.+]*$"#)))|Mapping - ResourceList: Listing +/// The SQL prometheus exporter settings. +open class ApplicationSQLServerPrometheusExporter { + PrometheusPort: String|Mapping + SQLSecretName: String|Mapping +} + +typealias AlarmSeverity = "HIGH"|"MEDIUM"|"LOW" + +/// A CloudWatch alarm to be monitored for the component. +open class ApplicationAlarm { + AlarmName: String|Mapping + Severity: (AlarmSeverity|Mapping)? +} + +typealias ComponentMonitoringSettingComponentConfigurationMode = "DEFAULT"|"DEFAULT_WITH_OVERWRITE"|"CUSTOM" + +/// The monitoring setting of the component. +open class ApplicationComponentMonitoringSetting { + ComponentName: (String(matches(Regex(#"^[\d\w\-_.+]*$"#)))|Mapping)? + ComponentARN: (String(matches(Regex(#"^arn:aws(-[\w]+)*:[\w\d-]+:([\w\d-]*)?:[\w\d_-]*([:/].+)*$"#)))|Mapping)? + Tier: String(matches(Regex(#"^[A-Z][[A-Z]_]*$"#)))|Mapping + ComponentConfigurationMode: ComponentMonitoringSettingComponentConfigurationMode|Mapping + DefaultOverwriteComponentConfiguration: (ApplicationComponentConfiguration)? + CustomComponentConfiguration: (ApplicationComponentConfiguration)? } /// The JMX Prometheus Exporter settings. -open class JMXPrometheusExporter { +open class ApplicationJMXPrometheusExporter { + HostPort: (String|Mapping)? PrometheusPort: (String|Mapping)? JMXURL: (String|Mapping)? - HostPort: (String|Mapping)? } -/// A metric to be monitored for the component. -open class AlarmMetric { - AlarmMetricName: String|Mapping +/// The NetWeaver Prometheus Exporter Settings. +open class ApplicationNetWeaverPrometheusExporter { + SAPSID: String|Mapping + InstanceNumbers: Listing + PrometheusPort: (String|Mapping)? } -/// The configuration settings. -open class ConfigurationDetails { - WindowsEvents: (Listing)? - Processes: (Listing)? - Alarms: (Listing)? - JMXPrometheusExporter: (JMXPrometheusExporter)? - HANAPrometheusExporter: (HANAPrometheusExporter)? - NetWeaverPrometheusExporter: (NetWeaverPrometheusExporter)? - SQLServerPrometheusExporter: (SQLServerPrometheusExporter)? - AlarmMetrics: (Listing)? - HAClusterPrometheusExporter: (HAClusterPrometheusExporter)? - Logs: (Listing)? +/// A process to be monitored for the component. +open class ApplicationProcess { + ProcessName: String(matches(Regex(#"^[a-zA-Z0-9_,-]+$"#)))|Mapping + AlarmMetrics: Listing } -/// The SQL prometheus exporter settings. -open class SQLServerPrometheusExporter { - PrometheusPort: String|Mapping - SQLSecretName: String|Mapping +typealias SubComponentTypeConfigurationSubComponentType = "AWS::EC2::Instance"|"AWS::EC2::Volume" + +/// One type sub component configurations for the component. +open class ApplicationSubComponentTypeConfiguration { + SubComponentType: SubComponentTypeConfigurationSubComponentType|Mapping + SubComponentConfigurationDetails: ApplicationSubComponentConfigurationDetails +} + +/// The configuration settings of sub components. +open class ApplicationSubComponentConfigurationDetails { + AlarmMetrics: (Listing)? + Logs: (Listing)? + WindowsEvents: (Listing)? + Processes: (Listing)? } -/// The level of event to log. -open class EventLevel { +/// The log pattern. +open class ApplicationLogPattern { + PatternName: String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping + Pattern: String|Mapping + Rank: Int|Mapping } -/// The log pattern set. -open class LogPatternSet { - PatternSetName: String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping - LogPatterns: Listing +/// A metric to be monitored for the component. +open class ApplicationAlarmMetric { + AlarmMetricName: String|Mapping } -/// The configuration settings of the component. -open class ComponentConfiguration { - ConfigurationDetails: (ConfigurationDetails)? - SubComponentTypeConfigurations: (Listing)? +/// The custom grouped component. +open class ApplicationCustomComponent { + ComponentName: String(matches(Regex(#"^[\d\w\-_.+]*$"#)))|Mapping + ResourceList: Listing } /// The HANA DB Prometheus Exporter settings. -open class HANAPrometheusExporter { +open class ApplicationHANAPrometheusExporter { HANASID: String|Mapping HANAPort: String|Mapping HANASecretName: String|Mapping @@ -146,29 +153,12 @@ open class HANAPrometheusExporter { PrometheusPort: (String|Mapping)? } -typealias SubComponentTypeConfigurationSubComponentType = "AWS::EC2::Instance"|"AWS::EC2::Volume" - -/// One type sub component configurations for the component. -open class SubComponentTypeConfiguration { - SubComponentType: SubComponentTypeConfigurationSubComponentType|Mapping - SubComponentConfigurationDetails: SubComponentConfigurationDetails -} - /// Resource schema for AWS::ApplicationInsights::Application open class Application extends cloudformation.Resource { Type = "AWS::ApplicationInsights::Application" - /// The tags of Application Insights application. - hidden Tags: (Listing)? - - /// The log pattern sets. - hidden LogPatternSets: (Listing)? - - /// If set to true, the managed policies for SSM and CW will be attached to the instance roles if they are missing - hidden AttachMissingPermission: (Boolean|Mapping)? - /// The name of the resource group. hidden ResourceGroupName: String(matches(Regex(#"[a-zA-Z0-9.-_]*"#)))|Mapping @@ -178,33 +168,42 @@ open class Application extends cloudformation.Resource { /// The SNS topic provided to Application Insights that is associated to the created opsItem. hidden OpsItemSNSTopicArn: (String(matches(Regex(#"^arn:aws(-[\w]+)*:[\w\d-]+:([\w\d-]*)?:[\w\d_-]*([:/].+)*$"#)))|Mapping)? - /// The grouping type of the application - hidden GroupingType: (ApplicationGroupingType|Mapping)? - - /// When set to true, creates opsItems for any problems detected on an application. - hidden OpsCenterEnabled: (Boolean|Mapping)? + /// The tags of Application Insights application. + hidden Tags: (Listing)? /// The custom grouped components. - hidden CustomComponents: (Listing)? + hidden CustomComponents: (Listing)? /// If set to true, application will be configured with recommended monitoring configuration. hidden AutoConfigurationEnabled: (Boolean|Mapping)? /// The monitoring settings of the components. - hidden ComponentMonitoringSettings: (Listing)? + hidden ComponentMonitoringSettings: (Listing)? + + /// The grouping type of the application + hidden GroupingType: (ApplicationGroupingType|Mapping)? + + /// When set to true, creates opsItems for any problems detected on an application. + hidden OpsCenterEnabled: (Boolean|Mapping)? + + /// The log pattern sets. + hidden LogPatternSets: (Listing)? + + /// If set to true, the managed policies for SSM and CW will be attached to the instance roles if they are missing + hidden AttachMissingPermission: (Boolean|Mapping)? Properties { - ["Tags"] = if (Tags == null) null else Tags - ["LogPatternSets"] = if (LogPatternSets == null) null else LogPatternSets - ["AttachMissingPermission"] = if (AttachMissingPermission == null) null else AttachMissingPermission ["ResourceGroupName"] = if (ResourceGroupName == null) null else ResourceGroupName ["CWEMonitorEnabled"] = if (CWEMonitorEnabled == null) null else CWEMonitorEnabled ["OpsItemSNSTopicArn"] = if (OpsItemSNSTopicArn == null) null else OpsItemSNSTopicArn - ["GroupingType"] = if (GroupingType == null) null else GroupingType - ["OpsCenterEnabled"] = if (OpsCenterEnabled == null) null else OpsCenterEnabled + ["Tags"] = if (Tags == null) null else Tags ["CustomComponents"] = if (CustomComponents == null) null else CustomComponents ["AutoConfigurationEnabled"] = if (AutoConfigurationEnabled == null) null else AutoConfigurationEnabled ["ComponentMonitoringSettings"] = if (ComponentMonitoringSettings == null) null else ComponentMonitoringSettings + ["GroupingType"] = if (GroupingType == null) null else GroupingType + ["OpsCenterEnabled"] = if (OpsCenterEnabled == null) null else OpsCenterEnabled + ["LogPatternSets"] = if (LogPatternSets == null) null else LogPatternSets + ["AttachMissingPermission"] = if (AttachMissingPermission == null) null else AttachMissingPermission } } diff --git a/pkl/aws/appmesh/gatewayroute.pkl b/pkl/aws/appmesh/gatewayroute.pkl index 9579d33e..b45dfb01 100644 --- a/pkl/aws/appmesh/gatewayroute.pkl +++ b/pkl/aws/appmesh/gatewayroute.pkl @@ -6,14 +6,11 @@ module aws.appmesh.gatewayroute import "../../cloudformation.pkl" /// -open class GatewayRouteHttpGatewayRouteMatch { - QueryParameters: (Listing)? - Path: (GatewayRouteHttpPathMatch)? - Headers: (Listing)? - Port: (Int|Mapping)? - Hostname: (GatewayRouteGatewayRouteHostnameMatch)? - Prefix: (String|Mapping)? - Method: (String|Mapping)? +open class GatewayRouteGatewayRouteSpec { + HttpRoute: (GatewayRouteHttpGatewayRoute)? + Http2Route: (GatewayRouteHttpGatewayRoute)? + GrpcRoute: (GatewayRouteGrpcGatewayRoute)? + Priority: (Int|Mapping)? } /// @@ -23,28 +20,24 @@ open class GatewayRouteTag { } /// -open class GatewayRouteHttpPathMatch { - Regex: (String|Mapping)? - Exact: (String|Mapping)? -} - -/// -open class GatewayRouteGatewayRouteHostnameRewrite { - DefaultTargetHostname: (String|Mapping)? +open class GatewayRouteHttpGatewayRoutePrefixRewrite { + Value: (String|Mapping)? + DefaultPrefix: (String|Mapping)? } /// -open class GatewayRouteGrpcGatewayRouteMatch { - Hostname: (GatewayRouteGatewayRouteHostnameMatch)? - Metadata: (Listing)? - ServiceName: (String|Mapping)? - Port: (Int|Mapping)? +open class GatewayRouteHttpGatewayRouteHeaderMatch { + Regex: (String|Mapping)? + Range: (GatewayRouteGatewayRouteRangeMatch)? + Suffix: (String|Mapping)? + Exact: (String|Mapping)? + Prefix: (String|Mapping)? } /// -open class GatewayRouteGatewayRouteTarget { - VirtualService: GatewayRouteGatewayRouteVirtualService - Port: (Int|Mapping)? +open class GatewayRouteHttpGatewayRoute { + Action: GatewayRouteHttpGatewayRouteAction + Match: GatewayRouteHttpGatewayRouteMatch } /// @@ -55,20 +48,14 @@ open class GatewayRouteGrpcGatewayRouteMetadata { } /// -open class GatewayRouteGrpcGatewayRoute { - Action: GatewayRouteGrpcGatewayRouteAction - Match: GatewayRouteGrpcGatewayRouteMatch -} - -/// -open class GatewayRouteGrpcGatewayRouteRewrite { - Hostname: (GatewayRouteGatewayRouteHostnameRewrite)? +open class GatewayRouteHttpPathMatch { + Regex: (String|Mapping)? + Exact: (String|Mapping)? } /// -open class GatewayRouteGrpcGatewayRouteAction { - Target: GatewayRouteGatewayRouteTarget - Rewrite: (GatewayRouteGrpcGatewayRouteRewrite)? +open class GatewayRouteHttpQueryParameterMatch { + Exact: (String|Mapping)? } /// @@ -77,23 +64,37 @@ open class GatewayRouteGatewayRouteVirtualService { } /// -open class GatewayRouteHttpGatewayRouteAction { - Target: GatewayRouteGatewayRouteTarget - Rewrite: (GatewayRouteHttpGatewayRouteRewrite)? +open class GatewayRouteGrpcGatewayRouteMatch { + Metadata: (Listing)? + ServiceName: (String|Mapping)? + Port: (Int|Mapping)? + Hostname: (GatewayRouteGatewayRouteHostnameMatch)? } /// -open class GatewayRouteHttpGatewayRouteHeaderMatch { +open class GatewayRouteGatewayRouteMetadataMatch { + Prefix: (String|Mapping)? Regex: (String|Mapping)? Range: (GatewayRouteGatewayRouteRangeMatch)? Suffix: (String|Mapping)? Exact: (String|Mapping)? - Prefix: (String|Mapping)? } /// -open class GatewayRouteHttpGatewayRoutePathRewrite { - Exact: (String|Mapping)? +open class GatewayRouteGatewayRouteHostnameRewrite { + DefaultTargetHostname: (String|Mapping)? +} + +/// +open class GatewayRouteQueryParameter { + Name: String|Mapping + Match: (GatewayRouteHttpQueryParameterMatch)? +} + +/// +open class GatewayRouteHttpGatewayRouteAction { + Target: GatewayRouteGatewayRouteTarget + Rewrite: (GatewayRouteHttpGatewayRouteRewrite)? } /// @@ -104,28 +105,36 @@ open class GatewayRouteHttpGatewayRouteRewrite { } /// -open class GatewayRouteHttpQueryParameterMatch { +open class GatewayRouteHttpGatewayRoutePathRewrite { Exact: (String|Mapping)? } /// -open class GatewayRouteQueryParameter { - Name: String|Mapping - Match: (GatewayRouteHttpQueryParameterMatch)? +open class GatewayRouteGatewayRouteHostnameMatch { + Suffix: (String|Mapping)? + Exact: (String|Mapping)? } /// -open class GatewayRouteHttpGatewayRoutePrefixRewrite { - Value: (String|Mapping)? - DefaultPrefix: (String|Mapping)? +open class GatewayRouteHttpGatewayRouteMatch { + Prefix: (String|Mapping)? + Method: (String|Mapping)? + QueryParameters: (Listing)? + Path: (GatewayRouteHttpPathMatch)? + Headers: (Listing)? + Port: (Int|Mapping)? + Hostname: (GatewayRouteGatewayRouteHostnameMatch)? } /// -open class GatewayRouteGatewayRouteSpec { - HttpRoute: (GatewayRouteHttpGatewayRoute)? - Http2Route: (GatewayRouteHttpGatewayRoute)? - GrpcRoute: (GatewayRouteGrpcGatewayRoute)? - Priority: (Int|Mapping)? +open class GatewayRouteGrpcGatewayRouteRewrite { + Hostname: (GatewayRouteGatewayRouteHostnameRewrite)? +} + +/// +open class GatewayRouteGatewayRouteTarget { + VirtualService: GatewayRouteGatewayRouteVirtualService + Port: (Int|Mapping)? } /// @@ -137,29 +146,20 @@ open class GatewayRouteHttpGatewayRouteHeader { /// open class GatewayRouteGatewayRouteRangeMatch { - Start: Int|Mapping End: Int|Mapping + Start: Int|Mapping } /// -open class GatewayRouteGatewayRouteMetadataMatch { - Exact: (String|Mapping)? - Prefix: (String|Mapping)? - Regex: (String|Mapping)? - Range: (GatewayRouteGatewayRouteRangeMatch)? - Suffix: (String|Mapping)? -} - -/// -open class GatewayRouteHttpGatewayRoute { - Action: GatewayRouteHttpGatewayRouteAction - Match: GatewayRouteHttpGatewayRouteMatch +open class GatewayRouteGrpcGatewayRouteAction { + Target: GatewayRouteGatewayRouteTarget + Rewrite: (GatewayRouteGrpcGatewayRouteRewrite)? } /// -open class GatewayRouteGatewayRouteHostnameMatch { - Suffix: (String|Mapping)? - Exact: (String|Mapping)? +open class GatewayRouteGrpcGatewayRoute { + Action: GatewayRouteGrpcGatewayRouteAction + Match: GatewayRouteGrpcGatewayRouteMatch } /// Resource Type definition for AWS::AppMesh::GatewayRoute @@ -169,30 +169,30 @@ open class GatewayRoute extends cloudformation.Resource { /// - hidden Tags: (Listing)? + hidden GatewayRouteName: (String|Mapping)? /// hidden Spec: GatewayRouteGatewayRouteSpec /// - hidden MeshName: String|Mapping + hidden MeshOwner: (String|Mapping)? /// - hidden VirtualGatewayName: String|Mapping + hidden Tags: (Listing)? /// - hidden MeshOwner: (String|Mapping)? + hidden MeshName: String|Mapping /// - hidden GatewayRouteName: (String|Mapping)? + hidden VirtualGatewayName: String|Mapping Properties { - ["Tags"] = if (Tags == null) null else Tags + ["GatewayRouteName"] = if (GatewayRouteName == null) null else GatewayRouteName ["Spec"] = if (Spec == null) null else Spec + ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner + ["Tags"] = if (Tags == null) null else Tags ["MeshName"] = if (MeshName == null) null else MeshName ["VirtualGatewayName"] = if (VirtualGatewayName == null) null else VirtualGatewayName - ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner - ["GatewayRouteName"] = if (GatewayRouteName == null) null else GatewayRouteName } } diff --git a/pkl/aws/appmesh/mesh.pkl b/pkl/aws/appmesh/mesh.pkl index 65efac74..f9713397 100644 --- a/pkl/aws/appmesh/mesh.pkl +++ b/pkl/aws/appmesh/mesh.pkl @@ -6,25 +6,25 @@ module aws.appmesh.mesh import "../../cloudformation.pkl" /// -open class MeshMeshSpec { - EgressFilter: (MeshEgressFilter)? - ServiceDiscovery: (MeshMeshServiceDiscovery)? +open class MeshTag { + Value: String|Mapping + Key: String|Mapping } /// -open class MeshEgressFilter { - Type: String|Mapping +open class MeshMeshServiceDiscovery { + IpPreference: (String|Mapping)? } /// -open class MeshTag { - Value: String|Mapping - Key: String|Mapping +open class MeshMeshSpec { + EgressFilter: (MeshEgressFilter)? + ServiceDiscovery: (MeshMeshServiceDiscovery)? } /// -open class MeshMeshServiceDiscovery { - IpPreference: (String|Mapping)? +open class MeshEgressFilter { + Type: String|Mapping } /// Resource Type definition for AWS::AppMesh::Mesh diff --git a/pkl/aws/appmesh/route.pkl b/pkl/aws/appmesh/route.pkl index 3da82031..ad9b6c26 100644 --- a/pkl/aws/appmesh/route.pkl +++ b/pkl/aws/appmesh/route.pkl @@ -6,28 +6,17 @@ module aws.appmesh.route import "../../cloudformation.pkl" /// -open class RouteHttpRetryPolicy { - PerRetryTimeout: RouteDuration - HttpRetryEvents: (Listing)? - MaxRetries: Int|Mapping - TcpRetryEvents: (Listing)? -} - -/// -open class RouteGrpcTimeout { - Idle: (RouteDuration)? - PerRequest: (RouteDuration)? -} - -/// -open class RouteDuration { - Value: Int|Mapping - Unit: String|Mapping +open class RouteHttpRoute { + Action: RouteHttpRouteAction + RetryPolicy: (RouteHttpRetryPolicy)? + Timeout: (RouteHttpTimeout)? + Match: RouteHttpRouteMatch } /// -open class RouteGrpcRouteAction { - WeightedTargets: Listing +open class RouteHttpPathMatch { + Regex: (String|Mapping)? + Exact: (String|Mapping)? } /// @@ -38,62 +27,54 @@ open class RouteTcpRoute { } /// -open class RouteTcpRouteAction { - WeightedTargets: Listing +open class RouteRouteSpec { + TcpRoute: (RouteTcpRoute)? + Priority: (Int|Mapping)? + HttpRoute: (RouteHttpRoute)? + Http2Route: (RouteHttpRoute)? + GrpcRoute: (RouteGrpcRoute)? } /// -open class RouteHttpRouteMatch { - Scheme: (String|Mapping)? - Headers: (Listing)? - Port: (Int|Mapping)? - Prefix: (String|Mapping)? - Method: (String|Mapping)? - QueryParameters: (Listing)? - Path: (RouteHttpPathMatch)? +open class RouteHttpRetryPolicy { + TcpRetryEvents: (Listing)? + PerRetryTimeout: RouteDuration + HttpRetryEvents: (Listing)? + MaxRetries: Int|Mapping } /// -open class RouteHttpRouteAction { - WeightedTargets: Listing +open class RouteQueryParameter { + Name: String|Mapping + Match: (RouteHttpQueryParameterMatch)? } /// -open class RouteGrpcRouteMetadataMatchMethod { - Suffix: (String|Mapping)? - Exact: (String|Mapping)? - Prefix: (String|Mapping)? - Regex: (String|Mapping)? - Range: (RouteMatchRange)? +open class RouteGrpcTimeout { + Idle: (RouteDuration)? + PerRequest: (RouteDuration)? } /// -open class RouteRouteSpec { - TcpRoute: (RouteTcpRoute)? - Priority: (Int|Mapping)? - HttpRoute: (RouteHttpRoute)? - Http2Route: (RouteHttpRoute)? - GrpcRoute: (RouteGrpcRoute)? +open class RouteTcpRouteAction { + WeightedTargets: Listing } /// -open class RouteTag { - Key: String|Mapping - Value: String|Mapping +open class RouteHttpTimeout { + PerRequest: (RouteDuration)? + Idle: (RouteDuration)? } /// -open class RouteGrpcRouteMatch { - Metadata: (Listing)? - MethodName: (String|Mapping)? - ServiceName: (String|Mapping)? - Port: (Int|Mapping)? +open class RouteMatchRange { + End: Int|Mapping + Start: Int|Mapping } /// -open class RouteQueryParameter { - Match: (RouteHttpQueryParameterMatch)? - Name: String|Mapping +open class RouteTcpRouteMatch { + Port: (Int|Mapping)? } /// @@ -104,20 +85,17 @@ open class RouteWeightedTarget { } /// -open class RouteHttpPathMatch { - Regex: (String|Mapping)? - Exact: (String|Mapping)? -} - -/// -open class RouteMatchRange { - Start: Int|Mapping - End: Int|Mapping +open class RouteGrpcRetryPolicy { + MaxRetries: Int|Mapping + TcpRetryEvents: (Listing)? + PerRetryTimeout: RouteDuration + GrpcRetryEvents: (Listing)? + HttpRetryEvents: (Listing)? } /// -open class RouteHttpQueryParameterMatch { - Exact: (String|Mapping)? +open class RouteGrpcRouteAction { + WeightedTargets: Listing } /// @@ -128,18 +106,32 @@ open class RouteGrpcRouteMetadata { } /// -open class RouteHeaderMatchMethod { - Range: (RouteMatchRange)? - Suffix: (String|Mapping)? - Exact: (String|Mapping)? +open class RouteHttpRouteMatch { Prefix: (String|Mapping)? - Regex: (String|Mapping)? + Method: (String|Mapping)? + QueryParameters: (Listing)? + Path: (RouteHttpPathMatch)? + Scheme: (String|Mapping)? + Headers: (Listing)? + Port: (Int|Mapping)? } /// -open class RouteHttpTimeout { - Idle: (RouteDuration)? - PerRequest: (RouteDuration)? +open class RouteTag { + Value: String|Mapping + Key: String|Mapping +} + +/// +open class RouteHttpRouteHeader { + Invert: (Boolean|Mapping)? + Name: String|Mapping + Match: (RouteHeaderMatchMethod)? +} + +/// +open class RouteHttpQueryParameterMatch { + Exact: (String|Mapping)? } /// @@ -148,40 +140,48 @@ open class RouteTcpTimeout { } /// -open class RouteTcpRouteMatch { +open class RouteGrpcRouteMatch { + Metadata: (Listing)? + MethodName: (String|Mapping)? + ServiceName: (String|Mapping)? Port: (Int|Mapping)? } /// -open class RouteHttpRoute { - Timeout: (RouteHttpTimeout)? - Match: RouteHttpRouteMatch - Action: RouteHttpRouteAction - RetryPolicy: (RouteHttpRetryPolicy)? +open class RouteGrpcRouteMetadataMatchMethod { + Exact: (String|Mapping)? + Prefix: (String|Mapping)? + Regex: (String|Mapping)? + Range: (RouteMatchRange)? + Suffix: (String|Mapping)? } /// -open class RouteGrpcRoute { - Action: RouteGrpcRouteAction - RetryPolicy: (RouteGrpcRetryPolicy)? - Timeout: (RouteGrpcTimeout)? - Match: RouteGrpcRouteMatch +open class RouteHeaderMatchMethod { + Range: (RouteMatchRange)? + Suffix: (String|Mapping)? + Exact: (String|Mapping)? + Prefix: (String|Mapping)? + Regex: (String|Mapping)? } /// -open class RouteHttpRouteHeader { - Name: String|Mapping - Match: (RouteHeaderMatchMethod)? - Invert: (Boolean|Mapping)? +open class RouteHttpRouteAction { + WeightedTargets: Listing } /// -open class RouteGrpcRetryPolicy { - MaxRetries: Int|Mapping - TcpRetryEvents: (Listing)? - PerRetryTimeout: RouteDuration - GrpcRetryEvents: (Listing)? - HttpRetryEvents: (Listing)? +open class RouteDuration { + Value: Int|Mapping + Unit: String|Mapping +} + +/// +open class RouteGrpcRoute { + Action: RouteGrpcRouteAction + RetryPolicy: (RouteGrpcRetryPolicy)? + Timeout: (RouteGrpcTimeout)? + Match: RouteGrpcRouteMatch } /// Resource Type definition for AWS::AppMesh::Route @@ -191,29 +191,29 @@ open class Route extends cloudformation.Resource { /// - hidden Spec: RouteRouteSpec + hidden MeshOwner: (String|Mapping)? /// - hidden VirtualRouterName: String|Mapping + hidden RouteName: (String|Mapping)? /// - hidden MeshOwner: (String|Mapping)? + hidden Spec: RouteRouteSpec /// - hidden RouteName: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden Tags: (Listing)? + hidden VirtualRouterName: String|Mapping /// hidden MeshName: String|Mapping Properties { - ["Spec"] = if (Spec == null) null else Spec - ["VirtualRouterName"] = if (VirtualRouterName == null) null else VirtualRouterName ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner ["RouteName"] = if (RouteName == null) null else RouteName + ["Spec"] = if (Spec == null) null else Spec ["Tags"] = if (Tags == null) null else Tags + ["VirtualRouterName"] = if (VirtualRouterName == null) null else VirtualRouterName ["MeshName"] = if (MeshName == null) null else MeshName } diff --git a/pkl/aws/appmesh/virtualgateway.pkl b/pkl/aws/appmesh/virtualgateway.pkl index 8f040ee5..b1b8d48c 100644 --- a/pkl/aws/appmesh/virtualgateway.pkl +++ b/pkl/aws/appmesh/virtualgateway.pkl @@ -6,101 +6,93 @@ module aws.appmesh.virtualgateway import "../../cloudformation.pkl" /// -open class VirtualGatewayVirtualGatewayTlsValidationContextFileTrust { - CertificateChain: String|Mapping +open class VirtualGatewayVirtualGatewayHttp2ConnectionPool { + MaxRequests: Int|Mapping } /// -open class VirtualGatewayVirtualGatewayGrpcConnectionPool { - MaxRequests: Int|Mapping +open class VirtualGatewayVirtualGatewayHttpConnectionPool { + MaxConnections: Int|Mapping + MaxPendingRequests: (Int|Mapping)? } /// -open class VirtualGatewaySubjectAlternativeNames { - Match: VirtualGatewaySubjectAlternativeNameMatchers +open class VirtualGatewayVirtualGatewayTlsValidationContextAcmTrust { + CertificateAuthorityArns: Listing } /// -open class VirtualGatewayVirtualGatewayListenerTlsSdsCertificate { - SecretName: String|Mapping +open class VirtualGatewayVirtualGatewayClientPolicyTls { + Validation: VirtualGatewayVirtualGatewayTlsValidationContext + Ports: (Listing)? + Enforce: (Boolean|Mapping)? + Certificate: (VirtualGatewayVirtualGatewayClientTlsCertificate)? } /// -open class VirtualGatewayTag { - Value: String|Mapping - Key: String|Mapping +open class VirtualGatewayVirtualGatewayPortMapping { + Protocol: String|Mapping + Port: Int|Mapping } /// -open class VirtualGatewayVirtualGatewayListenerTls { - Validation: (VirtualGatewayVirtualGatewayListenerTlsValidationContext)? - Mode: String|Mapping - Certificate: VirtualGatewayVirtualGatewayListenerTlsCertificate +open class VirtualGatewayVirtualGatewayBackendDefaults { + ClientPolicy: (VirtualGatewayVirtualGatewayClientPolicy)? } /// -open class VirtualGatewayVirtualGatewayListenerTlsCertificate { - SDS: (VirtualGatewayVirtualGatewayListenerTlsSdsCertificate)? - ACM: (VirtualGatewayVirtualGatewayListenerTlsAcmCertificate)? - File: (VirtualGatewayVirtualGatewayListenerTlsFileCertificate)? +open class VirtualGatewayVirtualGatewayListenerTlsValidationContext { + SubjectAlternativeNames: (VirtualGatewaySubjectAlternativeNames)? + Trust: VirtualGatewayVirtualGatewayListenerTlsValidationContextTrust } /// -open class VirtualGatewayVirtualGatewayTlsValidationContextTrust { - SDS: (VirtualGatewayVirtualGatewayTlsValidationContextSdsTrust)? - ACM: (VirtualGatewayVirtualGatewayTlsValidationContextAcmTrust)? - File: (VirtualGatewayVirtualGatewayTlsValidationContextFileTrust)? +open class VirtualGatewaySubjectAlternativeNames { + Match: VirtualGatewaySubjectAlternativeNameMatchers } /// -open class VirtualGatewayVirtualGatewayFileAccessLog { - Path: String|Mapping - Format: (VirtualGatewayLoggingFormat)? +open class VirtualGatewayVirtualGatewayClientTlsCertificate { + SDS: (VirtualGatewayVirtualGatewayListenerTlsSdsCertificate)? + File: (VirtualGatewayVirtualGatewayListenerTlsFileCertificate)? } /// -open class VirtualGatewayLoggingFormat { - Text: (String|Mapping)? - Json: (Listing)? +open class VirtualGatewayVirtualGatewayClientPolicy { + TLS: (VirtualGatewayVirtualGatewayClientPolicyTls)? } /// -open class VirtualGatewayVirtualGatewayHealthCheckPolicy { - Protocol: String|Mapping - IntervalMillis: Int|Mapping - Path: (String|Mapping)? - UnhealthyThreshold: Int|Mapping - Port: (Int|Mapping)? - HealthyThreshold: Int|Mapping - TimeoutMillis: Int|Mapping +open class VirtualGatewayLoggingFormat { + Text: (String|Mapping)? + Json: (Listing)? } /// -open class VirtualGatewayVirtualGatewayPortMapping { - Protocol: String|Mapping - Port: Int|Mapping +open class VirtualGatewayVirtualGatewayFileAccessLog { + Format: (VirtualGatewayLoggingFormat)? + Path: String|Mapping } /// -open class VirtualGatewayVirtualGatewayListenerTlsValidationContextTrust { - File: (VirtualGatewayVirtualGatewayTlsValidationContextFileTrust)? - SDS: (VirtualGatewayVirtualGatewayTlsValidationContextSdsTrust)? +open class VirtualGatewayJsonFormatRef { + Value: String|Mapping + Key: String|Mapping } /// -open class VirtualGatewayVirtualGatewayClientPolicy { - TLS: (VirtualGatewayVirtualGatewayClientPolicyTls)? +open class VirtualGatewayVirtualGatewayTlsValidationContextFileTrust { + CertificateChain: String|Mapping } /// -open class VirtualGatewayVirtualGatewayListenerTlsValidationContext { - Trust: VirtualGatewayVirtualGatewayListenerTlsValidationContextTrust - SubjectAlternativeNames: (VirtualGatewaySubjectAlternativeNames)? +open class VirtualGatewayVirtualGatewayLogging { + AccessLog: (VirtualGatewayVirtualGatewayAccessLog)? } /// -open class VirtualGatewaySubjectAlternativeNameMatchers { - Exact: (Listing)? +open class VirtualGatewayVirtualGatewayGrpcConnectionPool { + MaxRequests: Int|Mapping } /// @@ -109,93 +101,101 @@ open class VirtualGatewayVirtualGatewayAccessLog { } /// -open class VirtualGatewayVirtualGatewayTlsValidationContextSdsTrust { - SecretName: String|Mapping +open class VirtualGatewayVirtualGatewaySpec { + Logging: (VirtualGatewayVirtualGatewayLogging)? + Listeners: Listing + BackendDefaults: (VirtualGatewayVirtualGatewayBackendDefaults)? } /// -open class VirtualGatewayVirtualGatewayClientPolicyTls { - Validation: VirtualGatewayVirtualGatewayTlsValidationContext - Ports: (Listing)? - Enforce: (Boolean|Mapping)? - Certificate: (VirtualGatewayVirtualGatewayClientTlsCertificate)? +open class VirtualGatewayTag { + Value: String|Mapping + Key: String|Mapping } /// -open class VirtualGatewayVirtualGatewayConnectionPool { - HTTP: (VirtualGatewayVirtualGatewayHttpConnectionPool)? - HTTP2: (VirtualGatewayVirtualGatewayHttp2ConnectionPool)? - GRPC: (VirtualGatewayVirtualGatewayGrpcConnectionPool)? +open class VirtualGatewayVirtualGatewayHealthCheckPolicy { + Port: (Int|Mapping)? + HealthyThreshold: Int|Mapping + TimeoutMillis: Int|Mapping + Protocol: String|Mapping + IntervalMillis: Int|Mapping + Path: (String|Mapping)? + UnhealthyThreshold: Int|Mapping } /// -open class VirtualGatewayVirtualGatewayClientTlsCertificate { - File: (VirtualGatewayVirtualGatewayListenerTlsFileCertificate)? - SDS: (VirtualGatewayVirtualGatewayListenerTlsSdsCertificate)? +open class VirtualGatewayVirtualGatewayTlsValidationContextSdsTrust { + SecretName: String|Mapping } /// -open class VirtualGatewayVirtualGatewayListener { - PortMapping: VirtualGatewayVirtualGatewayPortMapping - ConnectionPool: (VirtualGatewayVirtualGatewayConnectionPool)? - HealthCheck: (VirtualGatewayVirtualGatewayHealthCheckPolicy)? - TLS: (VirtualGatewayVirtualGatewayListenerTls)? +open class VirtualGatewayVirtualGatewayListenerTlsFileCertificate { + CertificateChain: String|Mapping + PrivateKey: String|Mapping } /// -open class VirtualGatewayVirtualGatewayHttpConnectionPool { - MaxConnections: Int|Mapping - MaxPendingRequests: (Int|Mapping)? +open class VirtualGatewaySubjectAlternativeNameMatchers { + Exact: (Listing)? } /// -open class VirtualGatewayJsonFormatRef { - Value: String|Mapping - Key: String|Mapping +open class VirtualGatewayVirtualGatewayConnectionPool { + HTTP: (VirtualGatewayVirtualGatewayHttpConnectionPool)? + HTTP2: (VirtualGatewayVirtualGatewayHttp2ConnectionPool)? + GRPC: (VirtualGatewayVirtualGatewayGrpcConnectionPool)? } /// -open class VirtualGatewayVirtualGatewayTlsValidationContextAcmTrust { - CertificateAuthorityArns: Listing +open class VirtualGatewayVirtualGatewayListener { + ConnectionPool: (VirtualGatewayVirtualGatewayConnectionPool)? + HealthCheck: (VirtualGatewayVirtualGatewayHealthCheckPolicy)? + TLS: (VirtualGatewayVirtualGatewayListenerTls)? + PortMapping: VirtualGatewayVirtualGatewayPortMapping } /// -open class VirtualGatewayVirtualGatewayHttp2ConnectionPool { - MaxRequests: Int|Mapping +open class VirtualGatewayVirtualGatewayListenerTlsAcmCertificate { + CertificateArn: String|Mapping } /// -open class VirtualGatewayVirtualGatewaySpec { - Logging: (VirtualGatewayVirtualGatewayLogging)? - Listeners: Listing - BackendDefaults: (VirtualGatewayVirtualGatewayBackendDefaults)? +open class VirtualGatewayVirtualGatewayListenerTlsSdsCertificate { + SecretName: String|Mapping } /// -open class VirtualGatewayVirtualGatewayListenerTlsAcmCertificate { - CertificateArn: String|Mapping +open class VirtualGatewayVirtualGatewayTlsValidationContext { + SubjectAlternativeNames: (VirtualGatewaySubjectAlternativeNames)? + Trust: VirtualGatewayVirtualGatewayTlsValidationContextTrust } /// -open class VirtualGatewayVirtualGatewayLogging { - AccessLog: (VirtualGatewayVirtualGatewayAccessLog)? +open class VirtualGatewayVirtualGatewayListenerTlsValidationContextTrust { + SDS: (VirtualGatewayVirtualGatewayTlsValidationContextSdsTrust)? + File: (VirtualGatewayVirtualGatewayTlsValidationContextFileTrust)? } /// -open class VirtualGatewayVirtualGatewayListenerTlsFileCertificate { - CertificateChain: String|Mapping - PrivateKey: String|Mapping +open class VirtualGatewayVirtualGatewayListenerTls { + Validation: (VirtualGatewayVirtualGatewayListenerTlsValidationContext)? + Mode: String|Mapping + Certificate: VirtualGatewayVirtualGatewayListenerTlsCertificate } /// -open class VirtualGatewayVirtualGatewayTlsValidationContext { - SubjectAlternativeNames: (VirtualGatewaySubjectAlternativeNames)? - Trust: VirtualGatewayVirtualGatewayTlsValidationContextTrust +open class VirtualGatewayVirtualGatewayTlsValidationContextTrust { + File: (VirtualGatewayVirtualGatewayTlsValidationContextFileTrust)? + SDS: (VirtualGatewayVirtualGatewayTlsValidationContextSdsTrust)? + ACM: (VirtualGatewayVirtualGatewayTlsValidationContextAcmTrust)? } /// -open class VirtualGatewayVirtualGatewayBackendDefaults { - ClientPolicy: (VirtualGatewayVirtualGatewayClientPolicy)? +open class VirtualGatewayVirtualGatewayListenerTlsCertificate { + SDS: (VirtualGatewayVirtualGatewayListenerTlsSdsCertificate)? + ACM: (VirtualGatewayVirtualGatewayListenerTlsAcmCertificate)? + File: (VirtualGatewayVirtualGatewayListenerTlsFileCertificate)? } /// Resource Type definition for AWS::AppMesh::VirtualGateway @@ -208,23 +208,23 @@ open class VirtualGateway extends cloudformation.Resource { hidden MeshName: String|Mapping /// - hidden MeshOwner: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden Spec: VirtualGatewayVirtualGatewaySpec + hidden VirtualGatewayName: (String|Mapping)? /// - hidden VirtualGatewayName: (String|Mapping)? + hidden MeshOwner: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden Spec: VirtualGatewayVirtualGatewaySpec Properties { ["MeshName"] = if (MeshName == null) null else MeshName + ["Tags"] = if (Tags == null) null else Tags + ["VirtualGatewayName"] = if (VirtualGatewayName == null) null else VirtualGatewayName ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner ["Spec"] = if (Spec == null) null else Spec - ["VirtualGatewayName"] = if (VirtualGatewayName == null) null else VirtualGatewayName - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/appmesh/virtualnode.pkl b/pkl/aws/appmesh/virtualnode.pkl index ecb7dd72..3b4ac299 100644 --- a/pkl/aws/appmesh/virtualnode.pkl +++ b/pkl/aws/appmesh/virtualnode.pkl @@ -6,207 +6,202 @@ module aws.appmesh.virtualnode import "../../cloudformation.pkl" /// -open class VirtualNodeTag { - Value: String|Mapping - Key: String|Mapping +open class VirtualNodeVirtualNodeGrpcConnectionPool { + MaxRequests: Int|Mapping } /// -open class VirtualNodeAccessLog { - File: (VirtualNodeFileAccessLog)? +open class VirtualNodeListenerTlsFileCertificate { + CertificateChain: String|Mapping + PrivateKey: String|Mapping } /// -open class VirtualNodeTlsValidationContextAcmTrust { - CertificateAuthorityArns: Listing +open class VirtualNodeListenerTlsAcmCertificate { + CertificateArn: String|Mapping } /// -open class VirtualNodeFileAccessLog { - Path: String|Mapping - Format: (VirtualNodeLoggingFormat)? +open class VirtualNodeHttpTimeout { + PerRequest: (VirtualNodeDuration)? + Idle: (VirtualNodeDuration)? } /// -open class VirtualNodeListenerTlsCertificate { - SDS: (VirtualNodeListenerTlsSdsCertificate)? - ACM: (VirtualNodeListenerTlsAcmCertificate)? - File: (VirtualNodeListenerTlsFileCertificate)? +open class VirtualNodeOutlierDetection { + MaxEjectionPercent: Int|Mapping + BaseEjectionDuration: VirtualNodeDuration + MaxServerErrors: Int|Mapping + Interval: VirtualNodeDuration } /// -open class VirtualNodeTcpTimeout { - Idle: (VirtualNodeDuration)? +open class VirtualNodeDuration { + Value: Int|Mapping + Unit: String|Mapping } /// -open class VirtualNodeDnsServiceDiscovery { - Hostname: String|Mapping - IpPreference: (String|Mapping)? - ResponseType: (String|Mapping)? +open class VirtualNodeClientPolicyTls { + Validation: VirtualNodeTlsValidationContext + Ports: (Listing)? + Enforce: (Boolean|Mapping)? + Certificate: (VirtualNodeClientTlsCertificate)? } /// -open class VirtualNodeSubjectAlternativeNames { - Match: VirtualNodeSubjectAlternativeNameMatchers +open class VirtualNodeFileAccessLog { + Path: String|Mapping + Format: (VirtualNodeLoggingFormat)? } /// -open class VirtualNodeVirtualNodeSpec { - BackendDefaults: (VirtualNodeBackendDefaults)? - ServiceDiscovery: (VirtualNodeServiceDiscovery)? - Logging: (VirtualNodeLogging)? - Backends: (Listing)? - Listeners: (Listing)? +open class VirtualNodeVirtualServiceBackend { + VirtualServiceName: String|Mapping + ClientPolicy: (VirtualNodeClientPolicy)? } /// -open class VirtualNodeVirtualNodeHttp2ConnectionPool { - MaxRequests: Int|Mapping +open class VirtualNodeTlsValidationContextFileTrust { + CertificateChain: String|Mapping } /// -open class VirtualNodeJsonFormatRef { - Value: String|Mapping - Key: String|Mapping +open class VirtualNodeAccessLog { + File: (VirtualNodeFileAccessLog)? } /// -open class VirtualNodeAwsCloudMapInstanceAttribute { +open class VirtualNodeTlsValidationContextSdsTrust { + SecretName: String|Mapping +} + +/// +open class VirtualNodeJsonFormatRef { Value: String|Mapping Key: String|Mapping } /// -open class VirtualNodeBackendDefaults { - ClientPolicy: (VirtualNodeClientPolicy)? +open class VirtualNodeVirtualNodeSpec { + ServiceDiscovery: (VirtualNodeServiceDiscovery)? + Logging: (VirtualNodeLogging)? + Backends: (Listing)? + Listeners: (Listing)? + BackendDefaults: (VirtualNodeBackendDefaults)? } /// -open class VirtualNodeListenerTlsSdsCertificate { - SecretName: String|Mapping +open class VirtualNodeAwsCloudMapServiceDiscovery { + Attributes: (Listing)? + NamespaceName: String|Mapping + ServiceName: String|Mapping + IpPreference: (String|Mapping)? } /// -open class VirtualNodeVirtualNodeGrpcConnectionPool { - MaxRequests: Int|Mapping +open class VirtualNodeBackendDefaults { + ClientPolicy: (VirtualNodeClientPolicy)? } /// -open class VirtualNodeTlsValidationContextTrust { - SDS: (VirtualNodeTlsValidationContextSdsTrust)? - ACM: (VirtualNodeTlsValidationContextAcmTrust)? - File: (VirtualNodeTlsValidationContextFileTrust)? +open class VirtualNodeClientPolicy { + TLS: (VirtualNodeClientPolicyTls)? } /// -open class VirtualNodeListenerTlsValidationContextTrust { - File: (VirtualNodeTlsValidationContextFileTrust)? - SDS: (VirtualNodeTlsValidationContextSdsTrust)? +open class VirtualNodeTag { + Value: String|Mapping + Key: String|Mapping } /// -open class VirtualNodeLogging { - AccessLog: (VirtualNodeAccessLog)? +open class VirtualNodeListenerTimeout { + HTTP2: (VirtualNodeHttpTimeout)? + GRPC: (VirtualNodeGrpcTimeout)? + TCP: (VirtualNodeTcpTimeout)? + HTTP: (VirtualNodeHttpTimeout)? } /// -open class VirtualNodeTlsValidationContext { +open class VirtualNodeListenerTlsValidationContext { SubjectAlternativeNames: (VirtualNodeSubjectAlternativeNames)? - Trust: VirtualNodeTlsValidationContextTrust + Trust: VirtualNodeListenerTlsValidationContextTrust } /// -open class VirtualNodeDuration { - Unit: String|Mapping - Value: Int|Mapping +open class VirtualNodeGrpcTimeout { + PerRequest: (VirtualNodeDuration)? + Idle: (VirtualNodeDuration)? } /// -open class VirtualNodeListenerTlsAcmCertificate { - CertificateArn: String|Mapping +open class VirtualNodeSubjectAlternativeNameMatchers { + Exact: (Listing)? } /// -open class VirtualNodeClientPolicyTls { - Validation: VirtualNodeTlsValidationContext - Ports: (Listing)? - Enforce: (Boolean|Mapping)? - Certificate: (VirtualNodeClientTlsCertificate)? +open class VirtualNodeTlsValidationContextAcmTrust { + CertificateAuthorityArns: Listing } /// -open class VirtualNodeVirtualServiceBackend { - VirtualServiceName: String|Mapping - ClientPolicy: (VirtualNodeClientPolicy)? +open class VirtualNodeListenerTls { + Mode: String|Mapping + Certificate: VirtualNodeListenerTlsCertificate + Validation: (VirtualNodeListenerTlsValidationContext)? } /// -open class VirtualNodeOutlierDetection { - MaxServerErrors: Int|Mapping - Interval: VirtualNodeDuration - MaxEjectionPercent: Int|Mapping - BaseEjectionDuration: VirtualNodeDuration +open class VirtualNodeListenerTlsCertificate { + SDS: (VirtualNodeListenerTlsSdsCertificate)? + ACM: (VirtualNodeListenerTlsAcmCertificate)? + File: (VirtualNodeListenerTlsFileCertificate)? } /// -open class VirtualNodeVirtualNodeConnectionPool { - TCP: (VirtualNodeVirtualNodeTcpConnectionPool)? - HTTP: (VirtualNodeVirtualNodeHttpConnectionPool)? - HTTP2: (VirtualNodeVirtualNodeHttp2ConnectionPool)? - GRPC: (VirtualNodeVirtualNodeGrpcConnectionPool)? +open class VirtualNodeSubjectAlternativeNames { + Match: VirtualNodeSubjectAlternativeNameMatchers } /// -open class VirtualNodeVirtualNodeTcpConnectionPool { +open class VirtualNodeVirtualNodeHttpConnectionPool { MaxConnections: Int|Mapping + MaxPendingRequests: (Int|Mapping)? } /// -open class VirtualNodeLoggingFormat { - Json: (Listing)? - Text: (String|Mapping)? +open class VirtualNodeTcpTimeout { + Idle: (VirtualNodeDuration)? } /// -open class VirtualNodeAwsCloudMapServiceDiscovery { - ServiceName: String|Mapping - IpPreference: (String|Mapping)? - Attributes: (Listing)? - NamespaceName: String|Mapping +open class VirtualNodeClientTlsCertificate { + File: (VirtualNodeListenerTlsFileCertificate)? + SDS: (VirtualNodeListenerTlsSdsCertificate)? } /// -open class VirtualNodeSubjectAlternativeNameMatchers { - Exact: (Listing)? +open class VirtualNodeListener { + PortMapping: VirtualNodePortMapping + OutlierDetection: (VirtualNodeOutlierDetection)? + ConnectionPool: (VirtualNodeVirtualNodeConnectionPool)? + Timeout: (VirtualNodeListenerTimeout)? + HealthCheck: (VirtualNodeHealthCheck)? + TLS: (VirtualNodeListenerTls)? } /// -open class VirtualNodeVirtualNodeHttpConnectionPool { - MaxPendingRequests: (Int|Mapping)? +open class VirtualNodeVirtualNodeTcpConnectionPool { MaxConnections: Int|Mapping } /// -open class VirtualNodeHealthCheck { - UnhealthyThreshold: Int|Mapping - Port: (Int|Mapping)? - HealthyThreshold: Int|Mapping - TimeoutMillis: Int|Mapping - Protocol: String|Mapping - IntervalMillis: Int|Mapping - Path: (String|Mapping)? -} - -/// -open class VirtualNodeGrpcTimeout { - Idle: (VirtualNodeDuration)? - PerRequest: (VirtualNodeDuration)? -} - -/// -open class VirtualNodeTlsValidationContextFileTrust { - CertificateChain: String|Mapping +open class VirtualNodeVirtualNodeConnectionPool { + TCP: (VirtualNodeVirtualNodeTcpConnectionPool)? + HTTP: (VirtualNodeVirtualNodeHttpConnectionPool)? + HTTP2: (VirtualNodeVirtualNodeHttp2ConnectionPool)? + GRPC: (VirtualNodeVirtualNodeGrpcConnectionPool)? } /// @@ -216,73 +211,78 @@ open class VirtualNodePortMapping { } /// -open class VirtualNodeClientPolicy { - TLS: (VirtualNodeClientPolicyTls)? +open class VirtualNodeLoggingFormat { + Json: (Listing)? + Text: (String|Mapping)? } /// -open class VirtualNodeListener { - HealthCheck: (VirtualNodeHealthCheck)? - TLS: (VirtualNodeListenerTls)? - PortMapping: VirtualNodePortMapping - OutlierDetection: (VirtualNodeOutlierDetection)? - ConnectionPool: (VirtualNodeVirtualNodeConnectionPool)? - Timeout: (VirtualNodeListenerTimeout)? +open class VirtualNodeTlsValidationContextTrust { + SDS: (VirtualNodeTlsValidationContextSdsTrust)? + ACM: (VirtualNodeTlsValidationContextAcmTrust)? + File: (VirtualNodeTlsValidationContextFileTrust)? } /// -open class VirtualNodeListenerTls { - Validation: (VirtualNodeListenerTlsValidationContext)? - Mode: String|Mapping - Certificate: VirtualNodeListenerTlsCertificate +open class VirtualNodeVirtualNodeHttp2ConnectionPool { + MaxRequests: Int|Mapping } /// -open class VirtualNodeHttpTimeout { - PerRequest: (VirtualNodeDuration)? - Idle: (VirtualNodeDuration)? +open class VirtualNodeServiceDiscovery { + AWSCloudMap: (VirtualNodeAwsCloudMapServiceDiscovery)? + DNS: (VirtualNodeDnsServiceDiscovery)? } /// -open class VirtualNodeServiceDiscovery { - DNS: (VirtualNodeDnsServiceDiscovery)? - AWSCloudMap: (VirtualNodeAwsCloudMapServiceDiscovery)? +open class VirtualNodeDnsServiceDiscovery { + IpPreference: (String|Mapping)? + ResponseType: (String|Mapping)? + Hostname: String|Mapping } /// -open class VirtualNodeListenerTlsValidationContext { - SubjectAlternativeNames: (VirtualNodeSubjectAlternativeNames)? - Trust: VirtualNodeListenerTlsValidationContextTrust +open class VirtualNodeBackend { + VirtualService: (VirtualNodeVirtualServiceBackend)? } /// -open class VirtualNodeListenerTimeout { - TCP: (VirtualNodeTcpTimeout)? - HTTP: (VirtualNodeHttpTimeout)? - HTTP2: (VirtualNodeHttpTimeout)? - GRPC: (VirtualNodeGrpcTimeout)? +open class VirtualNodeListenerTlsSdsCertificate { + SecretName: String|Mapping } /// -open class VirtualNodeListenerTlsFileCertificate { - CertificateChain: String|Mapping - PrivateKey: String|Mapping +open class VirtualNodeLogging { + AccessLog: (VirtualNodeAccessLog)? } /// -open class VirtualNodeTlsValidationContextSdsTrust { - SecretName: String|Mapping +open class VirtualNodeAwsCloudMapInstanceAttribute { + Value: String|Mapping + Key: String|Mapping } /// -open class VirtualNodeBackend { - VirtualService: (VirtualNodeVirtualServiceBackend)? +open class VirtualNodeListenerTlsValidationContextTrust { + SDS: (VirtualNodeTlsValidationContextSdsTrust)? + File: (VirtualNodeTlsValidationContextFileTrust)? } /// -open class VirtualNodeClientTlsCertificate { - File: (VirtualNodeListenerTlsFileCertificate)? - SDS: (VirtualNodeListenerTlsSdsCertificate)? +open class VirtualNodeTlsValidationContext { + Trust: VirtualNodeTlsValidationContextTrust + SubjectAlternativeNames: (VirtualNodeSubjectAlternativeNames)? +} + +/// +open class VirtualNodeHealthCheck { + TimeoutMillis: Int|Mapping + Protocol: String|Mapping + IntervalMillis: Int|Mapping + Path: (String|Mapping)? + UnhealthyThreshold: Int|Mapping + Port: (Int|Mapping)? + HealthyThreshold: Int|Mapping } /// Resource Type definition for AWS::AppMesh::VirtualNode @@ -292,26 +292,26 @@ open class VirtualNode extends cloudformation.Resource { /// - hidden VirtualNodeName: (String|Mapping)? + hidden MeshName: String|Mapping /// - hidden Tags: (Listing)? + hidden Spec: VirtualNodeVirtualNodeSpec /// - hidden MeshName: String|Mapping + hidden VirtualNodeName: (String|Mapping)? /// - hidden MeshOwner: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden Spec: VirtualNodeVirtualNodeSpec + hidden MeshOwner: (String|Mapping)? Properties { + ["MeshName"] = if (MeshName == null) null else MeshName + ["Spec"] = if (Spec == null) null else Spec ["VirtualNodeName"] = if (VirtualNodeName == null) null else VirtualNodeName ["Tags"] = if (Tags == null) null else Tags - ["MeshName"] = if (MeshName == null) null else MeshName ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner - ["Spec"] = if (Spec == null) null else Spec } } diff --git a/pkl/aws/appmesh/virtualrouter.pkl b/pkl/aws/appmesh/virtualrouter.pkl index 426a802c..3ca2fa67 100644 --- a/pkl/aws/appmesh/virtualrouter.pkl +++ b/pkl/aws/appmesh/virtualrouter.pkl @@ -5,16 +5,6 @@ module aws.appmesh.virtualrouter import "../../cloudformation.pkl" -/// -open class VirtualRouterVirtualRouterSpec { - Listeners: Listing -} - -/// -open class VirtualRouterVirtualRouterListener { - PortMapping: VirtualRouterPortMapping -} - /// open class VirtualRouterTag { Value: String|Mapping @@ -27,6 +17,16 @@ open class VirtualRouterPortMapping { Port: Int|Mapping } +/// +open class VirtualRouterVirtualRouterSpec { + Listeners: Listing +} + +/// +open class VirtualRouterVirtualRouterListener { + PortMapping: VirtualRouterPortMapping +} + /// Resource Type definition for AWS::AppMesh::VirtualRouter open class VirtualRouter extends cloudformation.Resource { @@ -34,26 +34,26 @@ open class VirtualRouter extends cloudformation.Resource { /// - hidden MeshName: String|Mapping + hidden VirtualRouterName: (String|Mapping)? /// - hidden MeshOwner: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden Spec: VirtualRouterVirtualRouterSpec + hidden MeshName: String|Mapping /// - hidden Tags: (Listing)? + hidden MeshOwner: (String|Mapping)? /// - hidden VirtualRouterName: (String|Mapping)? + hidden Spec: VirtualRouterVirtualRouterSpec Properties { + ["VirtualRouterName"] = if (VirtualRouterName == null) null else VirtualRouterName + ["Tags"] = if (Tags == null) null else Tags ["MeshName"] = if (MeshName == null) null else MeshName ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner ["Spec"] = if (Spec == null) null else Spec - ["Tags"] = if (Tags == null) null else Tags - ["VirtualRouterName"] = if (VirtualRouterName == null) null else VirtualRouterName } } diff --git a/pkl/aws/appmesh/virtualservice.pkl b/pkl/aws/appmesh/virtualservice.pkl index 416c2f93..94f60bf2 100644 --- a/pkl/aws/appmesh/virtualservice.pkl +++ b/pkl/aws/appmesh/virtualservice.pkl @@ -18,8 +18,8 @@ open class VirtualServiceVirtualServiceProvider { /// open class VirtualServiceTag { - Value: String|Mapping Key: String|Mapping + Value: String|Mapping } /// @@ -39,26 +39,26 @@ open class VirtualService extends cloudformation.Resource { /// - hidden VirtualServiceName: String|Mapping + hidden Spec: VirtualServiceVirtualServiceSpec /// - hidden MeshName: String|Mapping + hidden Tags: (Listing)? /// - hidden MeshOwner: (String|Mapping)? + hidden MeshName: String|Mapping /// - hidden Spec: VirtualServiceVirtualServiceSpec + hidden MeshOwner: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden VirtualServiceName: String|Mapping Properties { - ["VirtualServiceName"] = if (VirtualServiceName == null) null else VirtualServiceName - ["MeshName"] = if (MeshName == null) null else MeshName - ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner ["Spec"] = if (Spec == null) null else Spec ["Tags"] = if (Tags == null) null else Tags + ["MeshName"] = if (MeshName == null) null else MeshName + ["MeshOwner"] = if (MeshOwner == null) null else MeshOwner + ["VirtualServiceName"] = if (VirtualServiceName == null) null else VirtualServiceName } } diff --git a/pkl/aws/apprunner/autoscalingconfiguration.pkl b/pkl/aws/apprunner/autoscalingconfiguration.pkl index 000f0716..0203414b 100644 --- a/pkl/aws/apprunner/autoscalingconfiguration.pkl +++ b/pkl/aws/apprunner/autoscalingconfiguration.pkl @@ -17,6 +17,9 @@ open class AutoScalingConfiguration extends cloudformation.Resource { Type = "AWS::AppRunner::AutoScalingConfiguration" + /// The customer-provided auto scaling configuration name. When you use it for the first time in an AWS Region, App Runner creates revision number 1 of this name. When you use the same name in subsequent calls, App Runner creates incremental revisions of the configuration. The auto scaling configuration name can be used in multiple revisions of a configuration. + hidden AutoScalingConfigurationName: (String(matches(Regex(#"[A-Za-z0-9][A-Za-z0-9\-_]{3,31}"#)))|Mapping)? + /// The maximum number of concurrent requests that an instance processes. If the number of concurrent requests exceeds this limit, App Runner scales the service up to use more instances to process the requests. hidden MaxConcurrency: (Int|Mapping)? @@ -29,15 +32,12 @@ open class AutoScalingConfiguration extends cloudformation.Resource { /// A list of metadata items that you can associate with your auto scaling configuration resource. A tag is a key-value pair. hidden Tags: (Listing)? - /// The customer-provided auto scaling configuration name. When you use it for the first time in an AWS Region, App Runner creates revision number 1 of this name. When you use the same name in subsequent calls, App Runner creates incremental revisions of the configuration. The auto scaling configuration name can be used in multiple revisions of a configuration. - hidden AutoScalingConfigurationName: (String(matches(Regex(#"[A-Za-z0-9][A-Za-z0-9\-_]{3,31}"#)))|Mapping)? - Properties { + ["AutoScalingConfigurationName"] = if (AutoScalingConfigurationName == null) null else AutoScalingConfigurationName ["MaxConcurrency"] = if (MaxConcurrency == null) null else MaxConcurrency ["MaxSize"] = if (MaxSize == null) null else MaxSize ["MinSize"] = if (MinSize == null) null else MinSize ["Tags"] = if (Tags == null) null else Tags - ["AutoScalingConfigurationName"] = if (AutoScalingConfigurationName == null) null else AutoScalingConfigurationName } } diff --git a/pkl/aws/apprunner/observabilityconfiguration.pkl b/pkl/aws/apprunner/observabilityconfiguration.pkl index f3b88770..ff683d86 100644 --- a/pkl/aws/apprunner/observabilityconfiguration.pkl +++ b/pkl/aws/apprunner/observabilityconfiguration.pkl @@ -14,8 +14,8 @@ open class ObservabilityConfigurationTraceConfiguration { /// open class ObservabilityConfigurationTag { - Key: (String|Mapping)? Value: (String|Mapping)? + Key: (String|Mapping)? } /// The AWS::AppRunner::ObservabilityConfiguration resource is an AWS App Runner resource type that specifies an App Runner observability configuration @@ -24,19 +24,19 @@ open class ObservabilityConfiguration extends cloudformation.Resource { Type = "AWS::AppRunner::ObservabilityConfiguration" + /// A list of metadata items that you can associate with your observability configuration resource. A tag is a key-value pair. + hidden Tags: (Listing)? + /// A name for the observability configuration. When you use it for the first time in an AWS Region, App Runner creates revision number 1 of this name. When you use the same name in subsequent calls, App Runner creates incremental revisions of the configuration. hidden ObservabilityConfigurationName: (String(matches(Regex(#"[A-Za-z0-9][A-Za-z0-9\-_]{3,31}"#)))|Mapping)? /// The configuration of the tracing feature within this observability configuration. If you don't specify it, App Runner doesn't enable tracing. hidden TraceConfiguration: (ObservabilityConfigurationTraceConfiguration)? - /// A list of metadata items that you can associate with your observability configuration resource. A tag is a key-value pair. - hidden Tags: (Listing)? - Properties { + ["Tags"] = if (Tags == null) null else Tags ["ObservabilityConfigurationName"] = if (ObservabilityConfigurationName == null) null else ObservabilityConfigurationName ["TraceConfiguration"] = if (TraceConfiguration == null) null else TraceConfiguration - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/apprunner/service.pkl b/pkl/aws/apprunner/service.pkl index 716b02e0..488ff87f 100644 --- a/pkl/aws/apprunner/service.pkl +++ b/pkl/aws/apprunner/service.pkl @@ -5,59 +5,10 @@ module aws.apprunner.service import "../../cloudformation.pkl" -/// Image Configuration -open class ServiceImageConfiguration { - StartCommand: (String|Mapping)? - Port: (String|Mapping)? - RuntimeEnvironmentVariables: (Listing)? - RuntimeEnvironmentSecrets: (Listing)? -} - /// -open class ServiceRoleArn { -} - -/// Service observability configuration -open class ServiceServiceObservabilityConfiguration { - ObservabilityEnabled: Boolean|Mapping - ObservabilityConfigurationArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\.]{0,63}:[a-z0-9-\.]{0,63}:[0-9]{12}:(\w|/|-){1,1011}"#)))|Mapping)? -} - -typealias CodeConfigurationConfigurationSource = "REPOSITORY"|"API" - -/// Code Configuration -open class ServiceCodeConfiguration { - CodeConfigurationValues: (ServiceCodeConfigurationValues)? - ConfigurationSource: CodeConfigurationConfigurationSource|Mapping -} - -/// Instance Configuration -open class ServiceInstanceConfiguration { - Cpu: (String(matches(Regex(#"256|512|1024|2048|4096|(0.25|0.5|1|2|4) vCPU"#)))|Mapping)? - Memory: (String(matches(Regex(#"512|1024|2048|3072|4096|6144|8192|10240|12288|(0.5|1|2|3|4|6|8|10|12) GB"#)))|Mapping)? - InstanceRoleArn: (ServiceRoleArn)? -} - -/// Encryption configuration (KMS key) -open class ServiceEncryptionConfiguration { - KmsKey: String(matches(Regex(#"arn:aws(-[\w]+)*:kms:[a-z\-]+-[0-9]{1}:[0-9]{12}:key\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping -} - -typealias ImageRepositoryImageRepositoryType = "ECR"|"ECR_PUBLIC" - -/// Image Repository -open class ServiceImageRepository { - ImageIdentifier: String(matches(Regex(#"([0-9]{12}.dkr.ecr.[a-z\-]+-[0-9]{1}.amazonaws.com\/.*)|(^public\.ecr\.aws\/.+\/.+)"#)))|Mapping - ImageConfiguration: (ServiceImageConfiguration)? - ImageRepositoryType: ImageRepositoryImageRepositoryType|Mapping -} - -/// Source Code Repository -open class ServiceCodeRepository { - RepositoryUrl: String|Mapping - SourceCodeVersion: ServiceSourceCodeVersion - CodeConfiguration: (ServiceCodeConfiguration)? - SourceDirectory: (String(matches(Regex(#"[^\x00]+"#)))|Mapping)? +open class ServiceTag { + Value: (String|Mapping)? + Key: (String|Mapping)? } typealias SourceCodeVersionType = "BRANCH" @@ -68,121 +19,169 @@ open class ServiceSourceCodeVersion { Value: String|Mapping } -/// Authentication Configuration -open class ServiceAuthenticationConfiguration { - ConnectionArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\w|\/|-){1,1011}"#)))|Mapping)? - AccessRoleArn: (ServiceRoleArn)? -} - typealias EgressConfigurationEgressType = "DEFAULT"|"VPC" /// Network egress configuration open class ServiceEgressConfiguration { - VpcConnectorArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\w|\/|-){1,1011}"#)))|Mapping)? EgressType: EgressConfigurationEgressType|Mapping -} - -/// -open class ServiceKeyValuePair { - Name: (String|Mapping)? - Value: (String|Mapping)? + VpcConnectorArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\w|\/|-){1,1011}"#)))|Mapping)? } /// Source Code configuration open class ServiceSourceConfiguration { - CodeRepository: (ServiceCodeRepository)? ImageRepository: (ServiceImageRepository)? AutoDeploymentsEnabled: (Boolean|Mapping)? AuthenticationConfiguration: (ServiceAuthenticationConfiguration)? + CodeRepository: (ServiceCodeRepository)? +} + +/// Authentication Configuration +open class ServiceAuthenticationConfiguration { + ConnectionArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\w|\/|-){1,1011}"#)))|Mapping)? + AccessRoleArn: (ServiceRoleArn)? +} + +typealias CodeConfigurationConfigurationSource = "REPOSITORY"|"API" + +/// Code Configuration +open class ServiceCodeConfiguration { + ConfigurationSource: CodeConfigurationConfigurationSource|Mapping + CodeConfigurationValues: (ServiceCodeConfigurationValues)? } typealias HealthCheckConfigurationProtocol = "TCP"|"HTTP" /// Health check configuration open class ServiceHealthCheckConfiguration { - Path: (String|Mapping)? Interval: (Int|Mapping)? Timeout: (Int|Mapping)? HealthyThreshold: (Int|Mapping)? UnhealthyThreshold: (Int|Mapping)? Protocol: (HealthCheckConfigurationProtocol|Mapping)? + Path: (String|Mapping)? } -/// Network ingress configuration -open class ServiceIngressConfiguration { - IsPubliclyAccessible: Boolean|Mapping +/// +open class ServiceKeyValuePair { + Name: (String|Mapping)? + Value: (String|Mapping)? } -typealias NetworkConfigurationIpAddressType = "IPV4"|"DUAL_STACK" - -/// Network configuration -open class ServiceNetworkConfiguration { - EgressConfiguration: (ServiceEgressConfiguration)? - IngressConfiguration: (ServiceIngressConfiguration)? - IpAddressType: (NetworkConfigurationIpAddressType|Mapping)? +/// Source Code Repository +open class ServiceCodeRepository { + RepositoryUrl: String|Mapping + SourceCodeVersion: ServiceSourceCodeVersion + CodeConfiguration: (ServiceCodeConfiguration)? + SourceDirectory: (String(matches(Regex(#"[^\x00]+"#)))|Mapping)? } -/// -open class ServiceTag { - Key: (String|Mapping)? - Value: (String|Mapping)? +/// Service observability configuration +open class ServiceServiceObservabilityConfiguration { + ObservabilityEnabled: Boolean|Mapping + ObservabilityConfigurationArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\.]{0,63}:[a-z0-9-\.]{0,63}:[0-9]{12}:(\w|/|-){1,1011}"#)))|Mapping)? } typealias CodeConfigurationValuesRuntime = "PYTHON_3"|"NODEJS_12"|"NODEJS_14"|"CORRETTO_8"|"CORRETTO_11"|"NODEJS_16"|"GO_1"|"DOTNET_6"|"PHP_81"|"RUBY_31"|"PYTHON_311"|"NODEJS_18" /// Code Configuration Values open class ServiceCodeConfigurationValues { + StartCommand: (String|Mapping)? + Port: (String|Mapping)? + RuntimeEnvironmentVariables: (Listing)? + RuntimeEnvironmentSecrets: (Listing)? Runtime: CodeConfigurationValuesRuntime|Mapping BuildCommand: (String|Mapping)? +} + +/// Instance Configuration +open class ServiceInstanceConfiguration { + Cpu: (String(matches(Regex(#"256|512|1024|2048|4096|(0.25|0.5|1|2|4) vCPU"#)))|Mapping)? + Memory: (String(matches(Regex(#"512|1024|2048|3072|4096|6144|8192|10240|12288|(0.5|1|2|3|4|6|8|10|12) GB"#)))|Mapping)? + InstanceRoleArn: (ServiceRoleArn)? +} + +/// Encryption configuration (KMS key) +open class ServiceEncryptionConfiguration { + KmsKey: String(matches(Regex(#"arn:aws(-[\w]+)*:kms:[a-z\-]+-[0-9]{1}:[0-9]{12}:key\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping +} + +typealias ServiceRoleArn = String|Mapping + + +/// Network ingress configuration +open class ServiceIngressConfiguration { + IsPubliclyAccessible: Boolean|Mapping +} + +typealias ImageRepositoryImageRepositoryType = "ECR"|"ECR_PUBLIC" + +/// Image Repository +open class ServiceImageRepository { + ImageIdentifier: String(matches(Regex(#"([0-9]{12}.dkr.ecr.[a-z\-]+-[0-9]{1}.amazonaws.com\/.*)|(^public\.ecr\.aws\/.+\/.+)"#)))|Mapping + ImageConfiguration: (ServiceImageConfiguration)? + ImageRepositoryType: ImageRepositoryImageRepositoryType|Mapping +} + +/// Image Configuration +open class ServiceImageConfiguration { StartCommand: (String|Mapping)? Port: (String|Mapping)? RuntimeEnvironmentVariables: (Listing)? RuntimeEnvironmentSecrets: (Listing)? } +typealias NetworkConfigurationIpAddressType = "IPV4"|"DUAL_STACK" + +/// Network configuration +open class ServiceNetworkConfiguration { + EgressConfiguration: (ServiceEgressConfiguration)? + IngressConfiguration: (ServiceIngressConfiguration)? + IpAddressType: (NetworkConfigurationIpAddressType|Mapping)? +} + /// The AWS::AppRunner::Service resource specifies an AppRunner Service. open class Service extends cloudformation.Resource { Type = "AWS::AppRunner::Service" - /// The AppRunner Service Name. - hidden ServiceName: (String(matches(Regex(#"[A-Za-z0-9][A-Za-z0-9-_]{3,39}"#)))|Mapping)? - - /// - hidden SourceConfiguration: ServiceSourceConfiguration - - /// Autoscaling configuration ARN - hidden AutoScalingConfigurationArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\w|\/|-){1,1011}"#)))|Mapping)? - /// - hidden Tags: (Listing)? + hidden InstanceConfiguration: (ServiceInstanceConfiguration)? /// hidden HealthCheckConfiguration: (ServiceHealthCheckConfiguration)? - /// - hidden InstanceConfiguration: (ServiceInstanceConfiguration)? - /// hidden ObservabilityConfiguration: (ServiceServiceObservabilityConfiguration)? /// hidden NetworkConfiguration: (ServiceNetworkConfiguration)? + /// The AppRunner Service Name. + hidden ServiceName: (String(matches(Regex(#"[A-Za-z0-9][A-Za-z0-9-_]{3,39}"#)))|Mapping)? + /// hidden EncryptionConfiguration: (ServiceEncryptionConfiguration)? + /// Autoscaling configuration ARN + hidden AutoScalingConfigurationArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[0-9]{12}:(\w|\/|-){1,1011}"#)))|Mapping)? + + /// + hidden SourceConfiguration: ServiceSourceConfiguration + + /// + hidden Tags: (Listing)? + Properties { - ["ServiceName"] = if (ServiceName == null) null else ServiceName - ["SourceConfiguration"] = if (SourceConfiguration == null) null else SourceConfiguration - ["AutoScalingConfigurationArn"] = if (AutoScalingConfigurationArn == null) null else AutoScalingConfigurationArn - ["Tags"] = if (Tags == null) null else Tags - ["HealthCheckConfiguration"] = if (HealthCheckConfiguration == null) null else HealthCheckConfiguration ["InstanceConfiguration"] = if (InstanceConfiguration == null) null else InstanceConfiguration + ["HealthCheckConfiguration"] = if (HealthCheckConfiguration == null) null else HealthCheckConfiguration ["ObservabilityConfiguration"] = if (ObservabilityConfiguration == null) null else ObservabilityConfiguration ["NetworkConfiguration"] = if (NetworkConfiguration == null) null else NetworkConfiguration + ["ServiceName"] = if (ServiceName == null) null else ServiceName ["EncryptionConfiguration"] = if (EncryptionConfiguration == null) null else EncryptionConfiguration + ["AutoScalingConfigurationArn"] = if (AutoScalingConfigurationArn == null) null else AutoScalingConfigurationArn + ["SourceConfiguration"] = if (SourceConfiguration == null) null else SourceConfiguration + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/apprunner/vpcingressconnection.pkl b/pkl/aws/apprunner/vpcingressconnection.pkl index 3d61401d..982199a0 100644 --- a/pkl/aws/apprunner/vpcingressconnection.pkl +++ b/pkl/aws/apprunner/vpcingressconnection.pkl @@ -5,41 +5,41 @@ module aws.apprunner.vpcingressconnection import "../../cloudformation.pkl" +/// +open class VpcIngressConnectionTag { + Key: (String|Mapping)? + Value: (String|Mapping)? +} + /// The configuration of customer?s VPC and related VPC endpoint open class VpcIngressConnectionIngressVpcConfiguration { VpcId: String|Mapping VpcEndpointId: String|Mapping } -/// -open class VpcIngressConnectionTag { - Value: (String|Mapping)? - Key: (String|Mapping)? -} - /// The AWS::AppRunner::VpcIngressConnection resource is an App Runner resource that specifies an App Runner VpcIngressConnection. open class VpcIngressConnection extends cloudformation.Resource { Type = "AWS::AppRunner::VpcIngressConnection" - /// - hidden IngressVpcConfiguration: VpcIngressConnectionIngressVpcConfiguration - - /// - hidden Tags: (Listing)? - /// The customer-provided Vpc Ingress Connection name. hidden VpcIngressConnectionName: (String(matches(Regex(#"[A-Za-z0-9][A-Za-z0-9\-_]{3,39}"#)))|Mapping)? /// The Amazon Resource Name (ARN) of the service. hidden ServiceArn: String(matches(Regex(#"arn:aws(-[\w]+)*:[a-z0-9-\.]{0,63}:[a-z0-9-\.]{0,63}:[0-9]{12}:(\w|/|-){1,1011}"#)))|Mapping + /// + hidden IngressVpcConfiguration: VpcIngressConnectionIngressVpcConfiguration + + /// + hidden Tags: (Listing)? + Properties { - ["IngressVpcConfiguration"] = if (IngressVpcConfiguration == null) null else IngressVpcConfiguration - ["Tags"] = if (Tags == null) null else Tags ["VpcIngressConnectionName"] = if (VpcIngressConnectionName == null) null else VpcIngressConnectionName ["ServiceArn"] = if (ServiceArn == null) null else ServiceArn + ["IngressVpcConfiguration"] = if (IngressVpcConfiguration == null) null else IngressVpcConfiguration + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/appstream/appblock.pkl b/pkl/aws/appstream/appblock.pkl index 3b34e457..9aceb900 100644 --- a/pkl/aws/appstream/appblock.pkl +++ b/pkl/aws/appstream/appblock.pkl @@ -5,14 +5,24 @@ module aws.appstream.appblock import "../../cloudformation.pkl" +typealias AppBlockTag = AppBlockTag0|AppBlockTag1 + + /// -open class AppBlockTag { +open class AppBlockTag0 { + Key: String|Mapping + Value: String|Mapping } /// -open class AppBlockPackagingType { +open class AppBlockTag1 { + TagKey: String|Mapping + TagValue: String|Mapping } +typealias AppBlockPackagingType = String|Mapping + + /// open class AppBlockS3Location { S3Bucket: String|Mapping @@ -27,9 +37,8 @@ open class AppBlockScriptDetails { ScriptS3Location: AppBlockS3Location } -/// -open class AppBlockArn { -} +typealias AppBlockArn = String|Mapping + /// Resource Type definition for AWS::AppStream::AppBlock open class AppBlock extends cloudformation.Resource { @@ -41,35 +50,35 @@ open class AppBlock extends cloudformation.Resource { hidden Tags: (Listing)? /// - hidden PackagingType: (AppBlockPackagingType)? + hidden PostSetupScriptDetails: (AppBlockScriptDetails)? /// - hidden Name: String|Mapping + hidden Description: (String|Mapping)? /// - hidden SourceS3Location: AppBlockS3Location + hidden DisplayName: (String|Mapping)? /// - hidden SetupScriptDetails: (AppBlockScriptDetails)? + hidden SourceS3Location: AppBlockS3Location /// - hidden Description: (String|Mapping)? + hidden SetupScriptDetails: (AppBlockScriptDetails)? /// - hidden DisplayName: (String|Mapping)? + hidden PackagingType: (AppBlockPackagingType)? /// - hidden PostSetupScriptDetails: (AppBlockScriptDetails)? + hidden Name: String|Mapping Properties { ["Tags"] = if (Tags == null) null else Tags - ["PackagingType"] = if (PackagingType == null) null else PackagingType - ["Name"] = if (Name == null) null else Name - ["SourceS3Location"] = if (SourceS3Location == null) null else SourceS3Location - ["SetupScriptDetails"] = if (SetupScriptDetails == null) null else SetupScriptDetails + ["PostSetupScriptDetails"] = if (PostSetupScriptDetails == null) null else PostSetupScriptDetails ["Description"] = if (Description == null) null else Description ["DisplayName"] = if (DisplayName == null) null else DisplayName - ["PostSetupScriptDetails"] = if (PostSetupScriptDetails == null) null else PostSetupScriptDetails + ["SourceS3Location"] = if (SourceS3Location == null) null else SourceS3Location + ["SetupScriptDetails"] = if (SetupScriptDetails == null) null else SetupScriptDetails + ["PackagingType"] = if (PackagingType == null) null else PackagingType + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/appstream/appblockbuilder.pkl b/pkl/aws/appstream/appblockbuilder.pkl index 44ef7842..abd9e8d8 100644 --- a/pkl/aws/appstream/appblockbuilder.pkl +++ b/pkl/aws/appstream/appblockbuilder.pkl @@ -5,13 +5,8 @@ module aws.appstream.appblockbuilder import "../../cloudformation.pkl" -/// -open class AppBlockBuilderPlatformType { -} +typealias AppBlockBuilderArn = String|Mapping -/// -open class AppBlockBuilderArn { -} /// open class AppBlockBuilderAccessEndpoint { @@ -31,6 +26,9 @@ open class AppBlockBuilderVpcConfig { SubnetIds: (Listing)? } +typealias AppBlockBuilderPlatformType = String|Mapping + + /// Resource Type definition for AWS::AppStream::AppBlockBuilder. open class AppBlockBuilder extends cloudformation.Resource { @@ -38,49 +36,49 @@ open class AppBlockBuilder extends cloudformation.Resource { /// - hidden Tags: (Listing)? + hidden VpcConfig: AppBlockBuilderVpcConfig /// - hidden VpcConfig: AppBlockBuilderVpcConfig + hidden AppBlockArns: (Listing)? /// - hidden DisplayName: (String|Mapping)? + hidden Name: String|Mapping /// - hidden InstanceType: String|Mapping + hidden Tags: (Listing)? /// - hidden Name: String|Mapping + hidden EnableDefaultInternetAccess: (Boolean|Mapping)? /// - hidden Platform: AppBlockBuilderPlatformType + hidden Description: (String|Mapping)? /// - hidden EnableDefaultInternetAccess: (Boolean|Mapping)? + hidden DisplayName: (String|Mapping)? /// hidden IamRoleArn: (String|Mapping)? /// - hidden AppBlockArns: (Listing)? + hidden InstanceType: String|Mapping /// - hidden Description: (String|Mapping)? + hidden Platform: AppBlockBuilderPlatformType /// hidden AccessEndpoints: (Listing)? Properties { - ["Tags"] = if (Tags == null) null else Tags ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig - ["DisplayName"] = if (DisplayName == null) null else DisplayName - ["InstanceType"] = if (InstanceType == null) null else InstanceType + ["AppBlockArns"] = if (AppBlockArns == null) null else AppBlockArns ["Name"] = if (Name == null) null else Name - ["Platform"] = if (Platform == null) null else Platform + ["Tags"] = if (Tags == null) null else Tags ["EnableDefaultInternetAccess"] = if (EnableDefaultInternetAccess == null) null else EnableDefaultInternetAccess - ["IamRoleArn"] = if (IamRoleArn == null) null else IamRoleArn - ["AppBlockArns"] = if (AppBlockArns == null) null else AppBlockArns ["Description"] = if (Description == null) null else Description + ["DisplayName"] = if (DisplayName == null) null else DisplayName + ["IamRoleArn"] = if (IamRoleArn == null) null else IamRoleArn + ["InstanceType"] = if (InstanceType == null) null else InstanceType + ["Platform"] = if (Platform == null) null else Platform ["AccessEndpoints"] = if (AccessEndpoints == null) null else AccessEndpoints } diff --git a/pkl/aws/appstream/application.pkl b/pkl/aws/appstream/application.pkl index fed55cec..d797922b 100644 --- a/pkl/aws/appstream/application.pkl +++ b/pkl/aws/appstream/application.pkl @@ -11,22 +11,30 @@ open class ApplicationS3Location { S3Key: String|Mapping } -/// -open class ApplicationArn { -} +typealias ApplicationArn = String|Mapping + + +typealias ApplicationPlatformType = String|Mapping + + +typealias ApplicationTag = ApplicationTag0|ApplicationTag1 -/// -open class ApplicationPlatformType { -} /// -open class ApplicationTag { +open class ApplicationTag0 { + Key: String|Mapping + Value: String|Mapping } /// -open class ApplicationApplicationAttribute { +open class ApplicationTag1 { + TagKey: String|Mapping + TagValue: String|Mapping } +typealias ApplicationApplicationAttribute = String|Mapping + + /// Resource Type definition for AWS::AppStream::Application open class Application extends cloudformation.Resource { @@ -37,51 +45,51 @@ open class Application extends cloudformation.Resource { hidden LaunchPath: String|Mapping /// - hidden LaunchParameters: (String|Mapping)? + hidden WorkingDirectory: (String|Mapping)? /// - hidden WorkingDirectory: (String|Mapping)? + hidden IconS3Location: ApplicationS3Location /// - hidden Name: String|Mapping + hidden AttributesToDelete: (Listing)? /// - hidden DisplayName: (String|Mapping)? + hidden LaunchParameters: (String|Mapping)? /// - hidden Description: (String|Mapping)? + hidden InstanceFamilies: Listing /// - hidden Platforms: Listing + hidden Description: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden AppBlockArn: ApplicationArn /// - hidden InstanceFamilies: Listing + hidden Platforms: Listing /// - hidden IconS3Location: ApplicationS3Location + hidden Tags: (Listing)? /// - hidden AttributesToDelete: (Listing)? + hidden Name: String|Mapping /// - hidden AppBlockArn: ApplicationArn + hidden DisplayName: (String|Mapping)? Properties { ["LaunchPath"] = if (LaunchPath == null) null else LaunchPath - ["LaunchParameters"] = if (LaunchParameters == null) null else LaunchParameters ["WorkingDirectory"] = if (WorkingDirectory == null) null else WorkingDirectory - ["Name"] = if (Name == null) null else Name - ["DisplayName"] = if (DisplayName == null) null else DisplayName - ["Description"] = if (Description == null) null else Description - ["Platforms"] = if (Platforms == null) null else Platforms - ["Tags"] = if (Tags == null) null else Tags - ["InstanceFamilies"] = if (InstanceFamilies == null) null else InstanceFamilies ["IconS3Location"] = if (IconS3Location == null) null else IconS3Location ["AttributesToDelete"] = if (AttributesToDelete == null) null else AttributesToDelete + ["LaunchParameters"] = if (LaunchParameters == null) null else LaunchParameters + ["InstanceFamilies"] = if (InstanceFamilies == null) null else InstanceFamilies + ["Description"] = if (Description == null) null else Description ["AppBlockArn"] = if (AppBlockArn == null) null else AppBlockArn + ["Platforms"] = if (Platforms == null) null else Platforms + ["Tags"] = if (Tags == null) null else Tags + ["Name"] = if (Name == null) null else Name + ["DisplayName"] = if (DisplayName == null) null else DisplayName } } diff --git a/pkl/aws/appstream/applicationfleetassociation.pkl b/pkl/aws/appstream/applicationfleetassociation.pkl index 44cd54ea..a6659017 100644 --- a/pkl/aws/appstream/applicationfleetassociation.pkl +++ b/pkl/aws/appstream/applicationfleetassociation.pkl @@ -5,9 +5,8 @@ module aws.appstream.applicationfleetassociation import "../../cloudformation.pkl" -/// -open class ApplicationFleetAssociationArn { -} +typealias ApplicationFleetAssociationArn = String|Mapping + /// Resource Type definition for AWS::AppStream::ApplicationFleetAssociation open class ApplicationFleetAssociation extends cloudformation.Resource { diff --git a/pkl/aws/appstream/directoryconfig.pkl b/pkl/aws/appstream/directoryconfig.pkl index 474af2b5..da36ba23 100644 --- a/pkl/aws/appstream/directoryconfig.pkl +++ b/pkl/aws/appstream/directoryconfig.pkl @@ -6,15 +6,15 @@ module aws.appstream.directoryconfig import "../../cloudformation.pkl" /// -open class DirectoryConfigCertificateBasedAuthProperties { - CertificateAuthorityArn: (String|Mapping)? - Status: (String|Mapping)? +open class DirectoryConfigServiceAccountCredentials { + AccountName: String|Mapping + AccountPassword: String|Mapping } /// -open class DirectoryConfigServiceAccountCredentials { - AccountPassword: String|Mapping - AccountName: String|Mapping +open class DirectoryConfigCertificateBasedAuthProperties { + Status: (String|Mapping)? + CertificateAuthorityArn: (String|Mapping)? } /// Resource Type definition for AWS::AppStream::DirectoryConfig diff --git a/pkl/aws/appstream/entitlement.pkl b/pkl/aws/appstream/entitlement.pkl index f6d01952..6629807f 100644 --- a/pkl/aws/appstream/entitlement.pkl +++ b/pkl/aws/appstream/entitlement.pkl @@ -7,8 +7,8 @@ import "../../cloudformation.pkl" /// open class EntitlementAttribute { - Value: String|Mapping Name: String|Mapping + Value: String|Mapping } /// Resource Type definition for AWS::AppStream::Entitlement @@ -17,9 +17,6 @@ open class Entitlement extends cloudformation.Resource { Type = "AWS::AppStream::Entitlement" - /// - hidden Name: String|Mapping - /// hidden StackName: String|Mapping @@ -32,12 +29,15 @@ open class Entitlement extends cloudformation.Resource { /// hidden Attributes: Listing + /// + hidden Name: String|Mapping + Properties { - ["Name"] = if (Name == null) null else Name ["StackName"] = if (StackName == null) null else StackName ["Description"] = if (Description == null) null else Description ["AppVisibility"] = if (AppVisibility == null) null else AppVisibility ["Attributes"] = if (Attributes == null) null else Attributes + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/appstream/fleet.pkl b/pkl/aws/appstream/fleet.pkl index 9c1691d3..a85d7354 100644 --- a/pkl/aws/appstream/fleet.pkl +++ b/pkl/aws/appstream/fleet.pkl @@ -5,12 +5,6 @@ module aws.appstream.fleet import "../../cloudformation.pkl" -/// -open class FleetComputeCapacity { - DesiredInstances: (Int|Mapping)? - DesiredSessions: (Int|Mapping)? -} - /// open class FleetVpcConfig { SubnetIds: (Listing)? @@ -25,14 +19,20 @@ open class FleetDomainJoinInfo { /// open class FleetTag { - Key: String|Mapping Value: String|Mapping + Key: String|Mapping } /// open class FleetS3Location { - S3Bucket: String|Mapping S3Key: String|Mapping + S3Bucket: String|Mapping +} + +/// +open class FleetComputeCapacity { + DesiredInstances: (Int|Mapping)? + DesiredSessions: (Int|Mapping)? } /// Resource Type definition for AWS::AppStream::Fleet @@ -42,94 +42,94 @@ open class Fleet extends cloudformation.Resource { /// - hidden Name: String|Mapping - - /// - hidden ImageName: (String|Mapping)? + hidden StreamView: (String|Mapping)? /// - hidden DisconnectTimeoutInSeconds: (Int|Mapping)? + hidden IamRoleArn: (String|Mapping)? /// - hidden IamRoleArn: (String|Mapping)? + hidden ImageArn: (String|Mapping)? /// - hidden ComputeCapacity: (FleetComputeCapacity)? + hidden Description: (String|Mapping)? /// hidden Platform: (String|Mapping)? /// - hidden VpcConfig: (FleetVpcConfig)? + hidden EnableDefaultInternetAccess: (Boolean|Mapping)? /// - hidden DomainJoinInfo: (FleetDomainJoinInfo)? + hidden Name: String|Mapping /// hidden MaxConcurrentSessions: (Int|Mapping)? /// - hidden Tags: (Listing)? + hidden ComputeCapacity: (FleetComputeCapacity)? /// - hidden IdleDisconnectTimeoutInSeconds: (Int|Mapping)? + hidden VpcConfig: (FleetVpcConfig)? /// - hidden DisplayName: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden MaxSessionsPerInstance: (Int|Mapping)? + hidden DomainJoinInfo: (FleetDomainJoinInfo)? /// - hidden Description: (String|Mapping)? + hidden UsbDeviceFilterStrings: (Listing)? /// - hidden EnableDefaultInternetAccess: (Boolean|Mapping)? + hidden ImageName: (String|Mapping)? /// - hidden SessionScriptS3Location: (FleetS3Location)? + hidden MaxUserDurationInSeconds: (Int|Mapping)? /// - hidden MaxUserDurationInSeconds: (Int|Mapping)? + hidden IdleDisconnectTimeoutInSeconds: (Int|Mapping)? /// - hidden InstanceType: String|Mapping + hidden DisconnectTimeoutInSeconds: (Int|Mapping)? /// - hidden ImageArn: (String|Mapping)? + hidden DisplayName: (String|Mapping)? /// - hidden StreamView: (String|Mapping)? + hidden MaxSessionsPerInstance: (Int|Mapping)? /// hidden FleetType: (String|Mapping)? /// - hidden UsbDeviceFilterStrings: (Listing)? + hidden SessionScriptS3Location: (FleetS3Location)? + + /// + hidden InstanceType: String|Mapping Properties { - ["Name"] = if (Name == null) null else Name - ["ImageName"] = if (ImageName == null) null else ImageName - ["DisconnectTimeoutInSeconds"] = if (DisconnectTimeoutInSeconds == null) null else DisconnectTimeoutInSeconds + ["StreamView"] = if (StreamView == null) null else StreamView ["IamRoleArn"] = if (IamRoleArn == null) null else IamRoleArn - ["ComputeCapacity"] = if (ComputeCapacity == null) null else ComputeCapacity + ["ImageArn"] = if (ImageArn == null) null else ImageArn + ["Description"] = if (Description == null) null else Description ["Platform"] = if (Platform == null) null else Platform - ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig - ["DomainJoinInfo"] = if (DomainJoinInfo == null) null else DomainJoinInfo + ["EnableDefaultInternetAccess"] = if (EnableDefaultInternetAccess == null) null else EnableDefaultInternetAccess + ["Name"] = if (Name == null) null else Name ["MaxConcurrentSessions"] = if (MaxConcurrentSessions == null) null else MaxConcurrentSessions + ["ComputeCapacity"] = if (ComputeCapacity == null) null else ComputeCapacity + ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig ["Tags"] = if (Tags == null) null else Tags + ["DomainJoinInfo"] = if (DomainJoinInfo == null) null else DomainJoinInfo + ["UsbDeviceFilterStrings"] = if (UsbDeviceFilterStrings == null) null else UsbDeviceFilterStrings + ["ImageName"] = if (ImageName == null) null else ImageName + ["MaxUserDurationInSeconds"] = if (MaxUserDurationInSeconds == null) null else MaxUserDurationInSeconds ["IdleDisconnectTimeoutInSeconds"] = if (IdleDisconnectTimeoutInSeconds == null) null else IdleDisconnectTimeoutInSeconds + ["DisconnectTimeoutInSeconds"] = if (DisconnectTimeoutInSeconds == null) null else DisconnectTimeoutInSeconds ["DisplayName"] = if (DisplayName == null) null else DisplayName ["MaxSessionsPerInstance"] = if (MaxSessionsPerInstance == null) null else MaxSessionsPerInstance - ["Description"] = if (Description == null) null else Description - ["EnableDefaultInternetAccess"] = if (EnableDefaultInternetAccess == null) null else EnableDefaultInternetAccess + ["FleetType"] = if (FleetType == null) null else FleetType ["SessionScriptS3Location"] = if (SessionScriptS3Location == null) null else SessionScriptS3Location - ["MaxUserDurationInSeconds"] = if (MaxUserDurationInSeconds == null) null else MaxUserDurationInSeconds ["InstanceType"] = if (InstanceType == null) null else InstanceType - ["ImageArn"] = if (ImageArn == null) null else ImageArn - ["StreamView"] = if (StreamView == null) null else StreamView - ["FleetType"] = if (FleetType == null) null else FleetType - ["UsbDeviceFilterStrings"] = if (UsbDeviceFilterStrings == null) null else UsbDeviceFilterStrings } } diff --git a/pkl/aws/appstream/imagebuilder.pkl b/pkl/aws/appstream/imagebuilder.pkl index 72e6b23a..2bfd59a2 100644 --- a/pkl/aws/appstream/imagebuilder.pkl +++ b/pkl/aws/appstream/imagebuilder.pkl @@ -5,18 +5,6 @@ module aws.appstream.imagebuilder import "../../cloudformation.pkl" -/// -open class ImageBuilderTag { - Value: String|Mapping - Key: String|Mapping -} - -/// -open class ImageBuilderAccessEndpoint { - EndpointType: String|Mapping - VpceId: String|Mapping -} - /// open class ImageBuilderVpcConfig { SecurityGroupIds: (Listing)? @@ -29,6 +17,18 @@ open class ImageBuilderDomainJoinInfo { DirectoryName: (String|Mapping)? } +/// +open class ImageBuilderTag { + Value: String|Mapping + Key: String|Mapping +} + +/// +open class ImageBuilderAccessEndpoint { + EndpointType: String|Mapping + VpceId: String|Mapping +} + /// Resource Type definition for AWS::AppStream::ImageBuilder open class ImageBuilder extends cloudformation.Resource { @@ -36,58 +36,58 @@ open class ImageBuilder extends cloudformation.Resource { /// - hidden EnableDefaultInternetAccess: (Boolean|Mapping)? + hidden VpcConfig: (ImageBuilderVpcConfig)? /// - hidden Description: (String|Mapping)? + hidden AppstreamAgentVersion: (String|Mapping)? /// - hidden VpcConfig: (ImageBuilderVpcConfig)? + hidden Tags: (Listing)? /// - hidden InstanceType: String|Mapping + hidden ImageArn: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden ImageName: (String|Mapping)? /// - hidden DomainJoinInfo: (ImageBuilderDomainJoinInfo)? + hidden DisplayName: (String|Mapping)? /// - hidden Name: String|Mapping + hidden IamRoleArn: (String|Mapping)? /// - hidden ImageArn: (String|Mapping)? + hidden AccessEndpoints: (Listing)? /// - hidden AppstreamAgentVersion: (String|Mapping)? + hidden Description: (String|Mapping)? /// - hidden ImageName: (String|Mapping)? + hidden EnableDefaultInternetAccess: (Boolean|Mapping)? /// - hidden DisplayName: (String|Mapping)? + hidden DomainJoinInfo: (ImageBuilderDomainJoinInfo)? /// - hidden IamRoleArn: (String|Mapping)? + hidden Name: String|Mapping /// - hidden AccessEndpoints: (Listing)? + hidden InstanceType: String|Mapping Properties { - ["EnableDefaultInternetAccess"] = if (EnableDefaultInternetAccess == null) null else EnableDefaultInternetAccess - ["Description"] = if (Description == null) null else Description ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig - ["InstanceType"] = if (InstanceType == null) null else InstanceType + ["AppstreamAgentVersion"] = if (AppstreamAgentVersion == null) null else AppstreamAgentVersion ["Tags"] = if (Tags == null) null else Tags - ["DomainJoinInfo"] = if (DomainJoinInfo == null) null else DomainJoinInfo - ["Name"] = if (Name == null) null else Name ["ImageArn"] = if (ImageArn == null) null else ImageArn - ["AppstreamAgentVersion"] = if (AppstreamAgentVersion == null) null else AppstreamAgentVersion ["ImageName"] = if (ImageName == null) null else ImageName ["DisplayName"] = if (DisplayName == null) null else DisplayName ["IamRoleArn"] = if (IamRoleArn == null) null else IamRoleArn ["AccessEndpoints"] = if (AccessEndpoints == null) null else AccessEndpoints + ["Description"] = if (Description == null) null else Description + ["EnableDefaultInternetAccess"] = if (EnableDefaultInternetAccess == null) null else EnableDefaultInternetAccess + ["DomainJoinInfo"] = if (DomainJoinInfo == null) null else DomainJoinInfo + ["Name"] = if (Name == null) null else Name + ["InstanceType"] = if (InstanceType == null) null else InstanceType } } diff --git a/pkl/aws/appstream/stack.pkl b/pkl/aws/appstream/stack.pkl index a219e1c9..1934f775 100644 --- a/pkl/aws/appstream/stack.pkl +++ b/pkl/aws/appstream/stack.pkl @@ -5,6 +5,24 @@ module aws.appstream.stack import "../../cloudformation.pkl" +/// +open class StackStorageConnector { + ConnectorType: String|Mapping + Domains: (Listing)? + ResourceIdentifier: (String|Mapping)? +} + +/// +open class StackApplicationSettings { + SettingsGroup: (String|Mapping)? + Enabled: Boolean|Mapping +} + +/// +open class StackStreamingExperienceSettings { + PreferredProtocol: (String|Mapping)? +} + /// open class StackTag { Value: String|Mapping @@ -24,24 +42,6 @@ open class StackUserSetting { MaximumLength: (Int|Mapping)? } -/// -open class StackStorageConnector { - Domains: (Listing)? - ResourceIdentifier: (String|Mapping)? - ConnectorType: String|Mapping -} - -/// -open class StackApplicationSettings { - SettingsGroup: (String|Mapping)? - Enabled: Boolean|Mapping -} - -/// -open class StackStreamingExperienceSettings { - PreferredProtocol: (String|Mapping)? -} - /// Resource Type definition for AWS::AppStream::Stack open class Stack extends cloudformation.Resource { @@ -49,62 +49,62 @@ open class Stack extends cloudformation.Resource { /// - hidden EmbedHostDomains: (Listing)? - - /// - hidden AttributesToDelete: (Listing)? + hidden AccessEndpoints: (Listing)? /// - hidden RedirectURL: (String|Mapping)? + hidden StorageConnectors: (Listing)? /// - hidden StreamingExperienceSettings: (StackStreamingExperienceSettings)? + hidden Name: (String|Mapping)? /// hidden Description: (String|Mapping)? /// - hidden DeleteStorageConnectors: (Boolean|Mapping)? + hidden RedirectURL: (String|Mapping)? /// - hidden UserSettings: (Listing)? + hidden FeedbackURL: (String|Mapping)? /// - hidden Name: (String|Mapping)? + hidden ApplicationSettings: (StackApplicationSettings)? /// - hidden ApplicationSettings: (StackApplicationSettings)? + hidden DisplayName: (String|Mapping)? /// - hidden StorageConnectors: (Listing)? + hidden EmbedHostDomains: (Listing)? /// - hidden FeedbackURL: (String|Mapping)? + hidden StreamingExperienceSettings: (StackStreamingExperienceSettings)? /// - hidden DisplayName: (String|Mapping)? + hidden AttributesToDelete: (Listing)? /// hidden Tags: (Listing)? /// - hidden AccessEndpoints: (Listing)? + hidden DeleteStorageConnectors: (Boolean|Mapping)? + + /// + hidden UserSettings: (Listing)? Properties { - ["EmbedHostDomains"] = if (EmbedHostDomains == null) null else EmbedHostDomains - ["AttributesToDelete"] = if (AttributesToDelete == null) null else AttributesToDelete - ["RedirectURL"] = if (RedirectURL == null) null else RedirectURL - ["StreamingExperienceSettings"] = if (StreamingExperienceSettings == null) null else StreamingExperienceSettings - ["Description"] = if (Description == null) null else Description - ["DeleteStorageConnectors"] = if (DeleteStorageConnectors == null) null else DeleteStorageConnectors - ["UserSettings"] = if (UserSettings == null) null else UserSettings - ["Name"] = if (Name == null) null else Name - ["ApplicationSettings"] = if (ApplicationSettings == null) null else ApplicationSettings + ["AccessEndpoints"] = if (AccessEndpoints == null) null else AccessEndpoints ["StorageConnectors"] = if (StorageConnectors == null) null else StorageConnectors + ["Name"] = if (Name == null) null else Name + ["Description"] = if (Description == null) null else Description + ["RedirectURL"] = if (RedirectURL == null) null else RedirectURL ["FeedbackURL"] = if (FeedbackURL == null) null else FeedbackURL + ["ApplicationSettings"] = if (ApplicationSettings == null) null else ApplicationSettings ["DisplayName"] = if (DisplayName == null) null else DisplayName + ["EmbedHostDomains"] = if (EmbedHostDomains == null) null else EmbedHostDomains + ["StreamingExperienceSettings"] = if (StreamingExperienceSettings == null) null else StreamingExperienceSettings + ["AttributesToDelete"] = if (AttributesToDelete == null) null else AttributesToDelete ["Tags"] = if (Tags == null) null else Tags - ["AccessEndpoints"] = if (AccessEndpoints == null) null else AccessEndpoints + ["DeleteStorageConnectors"] = if (DeleteStorageConnectors == null) null else DeleteStorageConnectors + ["UserSettings"] = if (UserSettings == null) null else UserSettings } } diff --git a/pkl/aws/appstream/stackfleetassociation.pkl b/pkl/aws/appstream/stackfleetassociation.pkl index e69de29b..1a758915 100644 --- a/pkl/aws/appstream/stackfleetassociation.pkl +++ b/pkl/aws/appstream/stackfleetassociation.pkl @@ -0,0 +1,25 @@ +/// AWS::AppStream::StackFleetAssociation +/// +/// Generated by rain build --pkl-class AWS::AppStream::StackFleetAssociation +module aws.appstream.stackfleetassociation + +import "../../cloudformation.pkl" + +/// Resource Type definition for AWS::AppStream::StackFleetAssociation +open class StackFleetAssociation extends cloudformation.Resource { + + Type = "AWS::AppStream::StackFleetAssociation" + + + /// + hidden FleetName: String|Mapping + + /// + hidden StackName: String|Mapping + + Properties { + ["FleetName"] = if (FleetName == null) null else FleetName + ["StackName"] = if (StackName == null) null else StackName + } + +} diff --git a/pkl/aws/appstream/stackuserassociation.pkl b/pkl/aws/appstream/stackuserassociation.pkl index 13c7808b..b73fd467 100644 --- a/pkl/aws/appstream/stackuserassociation.pkl +++ b/pkl/aws/appstream/stackuserassociation.pkl @@ -11,9 +11,6 @@ open class StackUserAssociation extends cloudformation.Resource { Type = "AWS::AppStream::StackUserAssociation" - /// - hidden SendEmailNotification: (Boolean|Mapping)? - /// hidden UserName: String|Mapping @@ -23,11 +20,14 @@ open class StackUserAssociation extends cloudformation.Resource { /// hidden AuthenticationType: String|Mapping + /// + hidden SendEmailNotification: (Boolean|Mapping)? + Properties { - ["SendEmailNotification"] = if (SendEmailNotification == null) null else SendEmailNotification ["UserName"] = if (UserName == null) null else UserName ["StackName"] = if (StackName == null) null else StackName ["AuthenticationType"] = if (AuthenticationType == null) null else AuthenticationType + ["SendEmailNotification"] = if (SendEmailNotification == null) null else SendEmailNotification } } diff --git a/pkl/aws/appsync/datasource.pkl b/pkl/aws/appsync/datasource.pkl index 9a744483..dd857483 100644 --- a/pkl/aws/appsync/datasource.pkl +++ b/pkl/aws/appsync/datasource.pkl @@ -6,74 +6,74 @@ module aws.appsync.datasource import "../../cloudformation.pkl" /// -open class DeltaSyncConfig { +open class DataSourceDeltaSyncConfig { + DeltaSyncTableName: String|Mapping BaseTableTTL: String|Mapping DeltaSyncTableTTL: String|Mapping - DeltaSyncTableName: String|Mapping } /// -open class RelationalDatabaseConfig { - RdsHttpEndpointConfig: (RdsHttpEndpointConfig)? - RelationalDatabaseSourceType: String|Mapping -} - -/// -open class HttpConfig { - Endpoint: String|Mapping - AuthorizationConfig: (AuthorizationConfig)? -} - -/// -open class ElasticsearchConfig { +open class DataSourceOpenSearchServiceConfig { AwsRegion: String|Mapping Endpoint: String|Mapping } /// -open class DynamoDBConfig { - Versioned: (Boolean|Mapping)? - TableName: String|Mapping - DeltaSyncConfig: (DeltaSyncConfig)? - UseCallerCredentials: (Boolean|Mapping)? +open class DataSourceElasticsearchConfig { AwsRegion: String|Mapping + Endpoint: String|Mapping } /// -open class RdsHttpEndpointConfig { - Schema: (String|Mapping)? +open class DataSourceRdsHttpEndpointConfig { DatabaseName: (String|Mapping)? AwsRegion: String|Mapping DbClusterIdentifier: String|Mapping AwsSecretStoreArn: String|Mapping + Schema: (String|Mapping)? } /// -open class AwsIamConfig { +open class DataSourceAwsIamConfig { SigningRegion: (String|Mapping)? SigningServiceName: (String|Mapping)? } /// -open class AuthorizationConfig { +open class DataSourceEventBridgeConfig { + EventBusArn: String|Mapping +} + +/// +open class DataSourceAuthorizationConfig { AuthorizationType: String|Mapping - AwsIamConfig: (AwsIamConfig)? + AwsIamConfig: (DataSourceAwsIamConfig)? } /// -open class LambdaConfig { - LambdaFunctionArn: String|Mapping +open class DataSourceRelationalDatabaseConfig { + RdsHttpEndpointConfig: (DataSourceRdsHttpEndpointConfig)? + RelationalDatabaseSourceType: String|Mapping } /// -open class OpenSearchServiceConfig { +open class DataSourceDynamoDBConfig { + DeltaSyncConfig: (DataSourceDeltaSyncConfig)? + UseCallerCredentials: (Boolean|Mapping)? AwsRegion: String|Mapping - Endpoint: String|Mapping + Versioned: (Boolean|Mapping)? + TableName: String|Mapping } /// -open class EventBridgeConfig { - EventBusArn: String|Mapping +open class DataSourceLambdaConfig { + LambdaFunctionArn: String|Mapping +} + +/// +open class DataSourceHttpConfig { + Endpoint: String|Mapping + AuthorizationConfig: (DataSourceAuthorizationConfig)? } /// Resource Type definition for AWS::AppSync::DataSource @@ -86,54 +86,54 @@ open class DataSource extends cloudformation.Resource { hidden Description: (String|Mapping)? /// - hidden TypeProperty: String|Mapping + hidden LambdaConfig: (DataSourceLambdaConfig)? /// - hidden EventBridgeConfig: (EventBridgeConfig)? + hidden ServiceRoleArn: (String|Mapping)? /// - hidden LambdaConfig: (LambdaConfig)? + hidden MetricsConfig: (String|Mapping)? /// - hidden DynamoDBConfig: (DynamoDBConfig)? + hidden RelationalDatabaseConfig: (DataSourceRelationalDatabaseConfig)? /// - hidden ServiceRoleArn: (String|Mapping)? + hidden OpenSearchServiceConfig: (DataSourceOpenSearchServiceConfig)? /// - hidden MetricsConfig: (String|Mapping)? + hidden HttpConfig: (DataSourceHttpConfig)? /// - hidden Name: String|Mapping + hidden DynamoDBConfig: (DataSourceDynamoDBConfig)? /// - hidden ElasticsearchConfig: (ElasticsearchConfig)? + hidden ElasticsearchConfig: (DataSourceElasticsearchConfig)? /// - hidden OpenSearchServiceConfig: (OpenSearchServiceConfig)? + hidden Name: String|Mapping /// - hidden HttpConfig: (HttpConfig)? + hidden TypeProperty: String|Mapping /// - hidden RelationalDatabaseConfig: (RelationalDatabaseConfig)? + hidden EventBridgeConfig: (DataSourceEventBridgeConfig)? /// hidden ApiId: String|Mapping Properties { ["Description"] = if (Description == null) null else Description - ["Type"] = if (TypeProperty == null) null else TypeProperty - ["EventBridgeConfig"] = if (EventBridgeConfig == null) null else EventBridgeConfig ["LambdaConfig"] = if (LambdaConfig == null) null else LambdaConfig - ["DynamoDBConfig"] = if (DynamoDBConfig == null) null else DynamoDBConfig ["ServiceRoleArn"] = if (ServiceRoleArn == null) null else ServiceRoleArn ["MetricsConfig"] = if (MetricsConfig == null) null else MetricsConfig - ["Name"] = if (Name == null) null else Name - ["ElasticsearchConfig"] = if (ElasticsearchConfig == null) null else ElasticsearchConfig + ["RelationalDatabaseConfig"] = if (RelationalDatabaseConfig == null) null else RelationalDatabaseConfig ["OpenSearchServiceConfig"] = if (OpenSearchServiceConfig == null) null else OpenSearchServiceConfig ["HttpConfig"] = if (HttpConfig == null) null else HttpConfig - ["RelationalDatabaseConfig"] = if (RelationalDatabaseConfig == null) null else RelationalDatabaseConfig + ["DynamoDBConfig"] = if (DynamoDBConfig == null) null else DynamoDBConfig + ["ElasticsearchConfig"] = if (ElasticsearchConfig == null) null else ElasticsearchConfig + ["Name"] = if (Name == null) null else Name + ["Type"] = if (TypeProperty == null) null else TypeProperty + ["EventBridgeConfig"] = if (EventBridgeConfig == null) null else EventBridgeConfig ["ApiId"] = if (ApiId == null) null else ApiId } diff --git a/pkl/aws/appsync/domainnameapiassociation.pkl b/pkl/aws/appsync/domainnameapiassociation.pkl index eeaedc89..54f591e9 100644 --- a/pkl/aws/appsync/domainnameapiassociation.pkl +++ b/pkl/aws/appsync/domainnameapiassociation.pkl @@ -12,14 +12,14 @@ open class DomainNameApiAssociation extends cloudformation.Resource { /// - hidden DomainName: String(matches(Regex(#"^(\*[a-z\d-]*\.)?([a-z\d-]+\.)+[a-z\d-]+$"#)))|Mapping + hidden ApiId: String|Mapping /// - hidden ApiId: String|Mapping + hidden DomainName: String(matches(Regex(#"^(\*[a-z\d-]*\.)?([a-z\d-]+\.)+[a-z\d-]+$"#)))|Mapping Properties { - ["DomainName"] = if (DomainName == null) null else DomainName ["ApiId"] = if (ApiId == null) null else ApiId + ["DomainName"] = if (DomainName == null) null else DomainName } } diff --git a/pkl/aws/appsync/functionconfiguration.pkl b/pkl/aws/appsync/functionconfiguration.pkl index 00af22f1..790911f3 100644 --- a/pkl/aws/appsync/functionconfiguration.pkl +++ b/pkl/aws/appsync/functionconfiguration.pkl @@ -5,22 +5,22 @@ module aws.appsync.function_configuration import "../../cloudformation.pkl" +/// The LambdaConflictHandlerConfig when configuring LAMBDA as the Conflict Handler. +open class FunctionConfigurationLambdaConflictHandlerConfig { + LambdaConflictHandlerArn: (String|Mapping)? +} + /// Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified. -open class AppSyncRuntime { +open class FunctionConfigurationAppSyncRuntime { Name: String|Mapping RuntimeVersion: String|Mapping } /// Describes a Sync configuration for a resolver. Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked. -open class SyncConfig { +open class FunctionConfigurationSyncConfig { ConflictDetection: String|Mapping ConflictHandler: (String|Mapping)? - LambdaConflictHandlerConfig: (LambdaConflictHandlerConfig)? -} - -/// The LambdaConflictHandlerConfig when configuring LAMBDA as the Conflict Handler. -open class LambdaConflictHandlerConfig { - LambdaConflictHandlerArn: (String|Mapping)? + LambdaConflictHandlerConfig: (FunctionConfigurationLambdaConflictHandlerConfig)? } /// An example resource schema demonstrating some basic constructs and validation rules. @@ -29,63 +29,63 @@ open class FunctionConfiguration extends cloudformation.Resource { Type = "AWS::AppSync::FunctionConfiguration" + /// The Function request mapping template. Functions support only the 2018-05-29 version of the request mapping template. + hidden RequestMappingTemplate: (String|Mapping)? + /// Describes a Sync configuration for a resolver. Contains information on which Conflict Detection, as well as Resolution strategy, should be performed when the resolver is invoked. hidden RequestMappingTemplateS3Location: (String|Mapping)? - /// The Function response mapping template. - hidden ResponseMappingTemplate: (String|Mapping)? + /// The location of a response mapping template in an Amazon S3 bucket. Use this if you want to provision with a template file in Amazon S3 rather than embedding it in your CloudFormation template. + hidden ResponseMappingTemplateS3Location: (String|Mapping)? + + /// Describes a Sync configuration for a resolver. Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked. + hidden SyncConfig: (FunctionConfigurationSyncConfig)? /// The name of data source this function will attach. hidden DataSourceName: String|Mapping + /// The name of the function. + hidden Name: String|Mapping + + /// The AWS AppSync GraphQL API that you want to attach using this function. + hidden ApiId: String|Mapping + /// The version of the request mapping template. Currently, only the 2018-05-29 version of the template is supported. hidden FunctionVersion: (String|Mapping)? - /// The maximum number of resolver request inputs that will be sent to a single AWS Lambda function in a BatchInvoke operation. - hidden MaxBatchSize: (Int|Mapping)? - - /// The Amazon S3 endpoint (where the code is located??). - hidden CodeS3Location: (String|Mapping)? + /// The Function response mapping template. + hidden ResponseMappingTemplate: (String|Mapping)? /// The function description. hidden Description: (String|Mapping)? - /// The location of a response mapping template in an Amazon S3 bucket. Use this if you want to provision with a template file in Amazon S3 rather than embedding it in your CloudFormation template. - hidden ResponseMappingTemplateS3Location: (String|Mapping)? - - /// The resolver code that contains the request and response functions. When code is used, the runtime is required. The runtime value must be APPSYNC_JS. - hidden Code: (String|Mapping)? + /// The Amazon S3 endpoint (where the code is located??). + hidden CodeS3Location: (String|Mapping)? - /// The name of the function. - hidden Name: String|Mapping + /// The maximum number of resolver request inputs that will be sent to a single AWS Lambda function in a BatchInvoke operation. + hidden MaxBatchSize: (Int|Mapping)? /// Describes a runtime used by an AWS AppSync pipeline resolver or AWS AppSync function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified. - hidden Runtime: (AppSyncRuntime)? - - /// Describes a Sync configuration for a resolver. Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked. - hidden SyncConfig: (SyncConfig)? + hidden Runtime: (FunctionConfigurationAppSyncRuntime)? - /// The AWS AppSync GraphQL API that you want to attach using this function. - hidden ApiId: String|Mapping - - /// The Function request mapping template. Functions support only the 2018-05-29 version of the request mapping template. - hidden RequestMappingTemplate: (String|Mapping)? + /// The resolver code that contains the request and response functions. When code is used, the runtime is required. The runtime value must be APPSYNC_JS. + hidden Code: (String|Mapping)? Properties { + ["RequestMappingTemplate"] = if (RequestMappingTemplate == null) null else RequestMappingTemplate ["RequestMappingTemplateS3Location"] = if (RequestMappingTemplateS3Location == null) null else RequestMappingTemplateS3Location - ["ResponseMappingTemplate"] = if (ResponseMappingTemplate == null) null else ResponseMappingTemplate + ["ResponseMappingTemplateS3Location"] = if (ResponseMappingTemplateS3Location == null) null else ResponseMappingTemplateS3Location + ["SyncConfig"] = if (SyncConfig == null) null else SyncConfig ["DataSourceName"] = if (DataSourceName == null) null else DataSourceName + ["Name"] = if (Name == null) null else Name + ["ApiId"] = if (ApiId == null) null else ApiId ["FunctionVersion"] = if (FunctionVersion == null) null else FunctionVersion - ["MaxBatchSize"] = if (MaxBatchSize == null) null else MaxBatchSize - ["CodeS3Location"] = if (CodeS3Location == null) null else CodeS3Location + ["ResponseMappingTemplate"] = if (ResponseMappingTemplate == null) null else ResponseMappingTemplate ["Description"] = if (Description == null) null else Description - ["ResponseMappingTemplateS3Location"] = if (ResponseMappingTemplateS3Location == null) null else ResponseMappingTemplateS3Location - ["Code"] = if (Code == null) null else Code - ["Name"] = if (Name == null) null else Name + ["CodeS3Location"] = if (CodeS3Location == null) null else CodeS3Location + ["MaxBatchSize"] = if (MaxBatchSize == null) null else MaxBatchSize ["Runtime"] = if (Runtime == null) null else Runtime - ["SyncConfig"] = if (SyncConfig == null) null else SyncConfig - ["ApiId"] = if (ApiId == null) null else ApiId - ["RequestMappingTemplate"] = if (RequestMappingTemplate == null) null else RequestMappingTemplate + ["Code"] = if (Code == null) null else Code } } diff --git a/pkl/aws/appsync/graphqlapi.pkl b/pkl/aws/appsync/graphqlapi.pkl index 3c76d15e..43bde21e 100644 --- a/pkl/aws/appsync/graphqlapi.pkl +++ b/pkl/aws/appsync/graphqlapi.pkl @@ -6,13 +6,13 @@ module aws.appsync.graphqlapi import "../../cloudformation.pkl" /// -open class Tag { +open class GraphQLApiTag { Value: String|Mapping Key: String|Mapping } /// -open class UserPoolConfig { +open class GraphQLApiUserPoolConfig { AwsRegion: (String|Mapping)? DefaultAction: (String|Mapping)? AppIdClientRegex: (String|Mapping)? @@ -20,22 +20,22 @@ open class UserPoolConfig { } /// -open class AdditionalAuthenticationProvider { - LambdaAuthorizerConfig: (LambdaAuthorizerConfig)? - OpenIDConnectConfig: (OpenIDConnectConfig)? - UserPoolConfig: (CognitoUserPoolConfig)? +open class GraphQLApiAdditionalAuthenticationProvider { + OpenIDConnectConfig: (GraphQLApiOpenIDConnectConfig)? + UserPoolConfig: (GraphQLApiCognitoUserPoolConfig)? AuthenticationType: String|Mapping + LambdaAuthorizerConfig: (GraphQLApiLambdaAuthorizerConfig)? } /// -open class LogConfig { +open class GraphQLApiLogConfig { ExcludeVerboseContent: (Boolean|Mapping)? FieldLogLevel: (String|Mapping)? CloudWatchLogsRoleArn: (String|Mapping)? } /// -open class OpenIDConnectConfig { +open class GraphQLApiOpenIDConnectConfig { ClientId: (String|Mapping)? AuthTTL: (Number|Mapping)? Issuer: (String|Mapping)? @@ -43,24 +43,24 @@ open class OpenIDConnectConfig { } /// -open class EnhancedMetricsConfig { - DataSourceLevelMetricsBehavior: String|Mapping +open class GraphQLApiEnhancedMetricsConfig { OperationLevelMetricsConfig: String|Mapping ResolverLevelMetricsBehavior: String|Mapping + DataSourceLevelMetricsBehavior: String|Mapping } /// -open class CognitoUserPoolConfig { +open class GraphQLApiCognitoUserPoolConfig { AppIdClientRegex: (String|Mapping)? UserPoolId: (String|Mapping)? AwsRegion: (String|Mapping)? } /// -open class LambdaAuthorizerConfig { - IdentityValidationExpression: (String|Mapping)? +open class GraphQLApiLambdaAuthorizerConfig { AuthorizerUri: (String|Mapping)? AuthorizerResultTtlInSeconds: (Number|Mapping)? + IdentityValidationExpression: (String|Mapping)? } /// Resource Type definition for AWS::AppSync::GraphQLApi @@ -70,52 +70,52 @@ open class GraphQLApi extends cloudformation.Resource { /// - hidden QueryDepthLimit: (Int|Mapping)? + hidden Name: String|Mapping /// - hidden LogConfig: (LogConfig)? + hidden AuthenticationType: String|Mapping /// - hidden EnvironmentVariables: (Dynamic)? + hidden UserPoolConfig: (GraphQLApiUserPoolConfig)? /// - hidden ApiType: (String|Mapping)? + hidden EnvironmentVariables: (Dynamic)? /// - hidden OwnerContact: (String|Mapping)? + hidden ApiType: (String|Mapping)? /// - hidden Name: String|Mapping + hidden QueryDepthLimit: (Int|Mapping)? /// - hidden Tags: (Listing)? + hidden XrayEnabled: (Boolean|Mapping)? /// - hidden XrayEnabled: (Boolean|Mapping)? + hidden Tags: (Listing)? /// - hidden UserPoolConfig: (UserPoolConfig)? + hidden OwnerContact: (String|Mapping)? /// - hidden AdditionalAuthenticationProviders: (Listing)? + hidden EnhancedMetricsConfig: (GraphQLApiEnhancedMetricsConfig)? /// - hidden OpenIDConnectConfig: (OpenIDConnectConfig)? + hidden IntrospectionConfig: (String|Mapping)? /// hidden MergedApiExecutionRoleArn: (String|Mapping)? /// - hidden EnhancedMetricsConfig: (EnhancedMetricsConfig)? + hidden OpenIDConnectConfig: (GraphQLApiOpenIDConnectConfig)? /// - hidden AuthenticationType: String|Mapping + hidden LambdaAuthorizerConfig: (GraphQLApiLambdaAuthorizerConfig)? /// - hidden IntrospectionConfig: (String|Mapping)? + hidden AdditionalAuthenticationProviders: (Listing)? /// - hidden LambdaAuthorizerConfig: (LambdaAuthorizerConfig)? + hidden LogConfig: (GraphQLApiLogConfig)? /// hidden ResolverCountLimit: (Int|Mapping)? @@ -124,22 +124,22 @@ open class GraphQLApi extends cloudformation.Resource { hidden Visibility: (String|Mapping)? Properties { - ["QueryDepthLimit"] = if (QueryDepthLimit == null) null else QueryDepthLimit - ["LogConfig"] = if (LogConfig == null) null else LogConfig + ["Name"] = if (Name == null) null else Name + ["AuthenticationType"] = if (AuthenticationType == null) null else AuthenticationType + ["UserPoolConfig"] = if (UserPoolConfig == null) null else UserPoolConfig ["EnvironmentVariables"] = if (EnvironmentVariables == null) null else EnvironmentVariables ["ApiType"] = if (ApiType == null) null else ApiType - ["OwnerContact"] = if (OwnerContact == null) null else OwnerContact - ["Name"] = if (Name == null) null else Name - ["Tags"] = if (Tags == null) null else Tags + ["QueryDepthLimit"] = if (QueryDepthLimit == null) null else QueryDepthLimit ["XrayEnabled"] = if (XrayEnabled == null) null else XrayEnabled - ["UserPoolConfig"] = if (UserPoolConfig == null) null else UserPoolConfig - ["AdditionalAuthenticationProviders"] = if (AdditionalAuthenticationProviders == null) null else AdditionalAuthenticationProviders - ["OpenIDConnectConfig"] = if (OpenIDConnectConfig == null) null else OpenIDConnectConfig - ["MergedApiExecutionRoleArn"] = if (MergedApiExecutionRoleArn == null) null else MergedApiExecutionRoleArn + ["Tags"] = if (Tags == null) null else Tags + ["OwnerContact"] = if (OwnerContact == null) null else OwnerContact ["EnhancedMetricsConfig"] = if (EnhancedMetricsConfig == null) null else EnhancedMetricsConfig - ["AuthenticationType"] = if (AuthenticationType == null) null else AuthenticationType ["IntrospectionConfig"] = if (IntrospectionConfig == null) null else IntrospectionConfig + ["MergedApiExecutionRoleArn"] = if (MergedApiExecutionRoleArn == null) null else MergedApiExecutionRoleArn + ["OpenIDConnectConfig"] = if (OpenIDConnectConfig == null) null else OpenIDConnectConfig ["LambdaAuthorizerConfig"] = if (LambdaAuthorizerConfig == null) null else LambdaAuthorizerConfig + ["AdditionalAuthenticationProviders"] = if (AdditionalAuthenticationProviders == null) null else AdditionalAuthenticationProviders + ["LogConfig"] = if (LogConfig == null) null else LogConfig ["ResolverCountLimit"] = if (ResolverCountLimit == null) null else ResolverCountLimit ["Visibility"] = if (Visibility == null) null else Visibility } diff --git a/pkl/aws/appsync/resolver.pkl b/pkl/aws/appsync/resolver.pkl index fee3a648..1f2f2549 100644 --- a/pkl/aws/appsync/resolver.pkl +++ b/pkl/aws/appsync/resolver.pkl @@ -5,39 +5,42 @@ module aws.appsync.resolver import "../../cloudformation.pkl" +/// Use the ``PipelineConfig`` property type to specify ``PipelineConfig`` for an APSYlong resolver. +/// +/// ``PipelineConfig`` is a property of the [AWS::AppSync::Resolver](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html) resource. +open class ResolverPipelineConfig { + Functions: (Listing)? +} + +/// The caching configuration for a resolver that has caching activated. +open class ResolverCachingConfig { + CachingKeys: (Listing)? + Ttl: Number|Mapping +} + /// Describes a Sync configuration for a resolver. -////// Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked. -open class SyncConfig { +/// +/// Specifies which Conflict Detection strategy and Resolution strategy to use when the resolver is invoked. +open class ResolverSyncConfig { ConflictHandler: (String|Mapping)? ConflictDetection: String|Mapping - LambdaConflictHandlerConfig: (LambdaConflictHandlerConfig)? + LambdaConflictHandlerConfig: (ResolverLambdaConflictHandlerConfig)? } /// The ``LambdaConflictHandlerConfig`` when configuring LAMBDA as the Conflict Handler. -open class LambdaConflictHandlerConfig { +open class ResolverLambdaConflictHandlerConfig { LambdaConflictHandlerArn: (String|Mapping)? } /// Describes a runtime used by an APSYlong resolver or APSYlong function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified. -open class AppSyncRuntime { +open class ResolverAppSyncRuntime { RuntimeVersion: String|Mapping Name: String|Mapping } -/// Use the ``PipelineConfig`` property type to specify ``PipelineConfig`` for an APSYlong resolver. -////// ``PipelineConfig`` is a property of the [AWS::AppSync::Resolver](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html) resource. -open class PipelineConfig { - Functions: (Listing)? -} - -/// The caching configuration for a resolver that has caching activated. -open class CachingConfig { - CachingKeys: (Listing)? - Ttl: Number|Mapping -} - /// The ``AWS::AppSync::Resolver`` resource defines the logical GraphQL resolver that you attach to fields in a schema. Request and response templates for resolvers are written in Apache Velocity Template Language (VTL) format. For more information about resolvers, see [Resolver Mapping Template Reference](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference.html). -////// When you submit an update, CFNLong updates resources based on differences between what you submit and the stack's current template. To cause this resource to be updated you must change a property value for this resource in the CFNshort template. Changing the S3 file content without changing a property value will not result in an update operation. +/// +/// When you submit an update, CFNLong updates resources based on differences between what you submit and the stack's current template. To cause this resource to be updated you must change a property value for this resource in the CFNshort template. Changing the S3 file content without changing a property value will not result in an update operation. /// See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *User Guide*. open class Resolver extends cloudformation.Resource { @@ -47,75 +50,77 @@ open class Resolver extends cloudformation.Resource { /// The Amazon S3 endpoint. hidden CodeS3Location: (String|Mapping)? - /// The response mapping template. - hidden ResponseMappingTemplate: (String|Mapping)? - /// The location of a response mapping template in an S3 bucket. Use this if you want to provision with a template file in S3 rather than embedding it in your CFNshort template. hidden ResponseMappingTemplateS3Location: (String|Mapping)? - /// - hidden MetricsConfig: (ResolverMetricsConfig|Mapping)? + /// The ``SyncConfig`` for a resolver attached to a versioned data source. + hidden SyncConfig: (ResolverSyncConfig)? - /// The GraphQL field on a type that invokes the resolver. - hidden FieldName: String|Mapping + /// The GraphQL type that invokes this resolver. + hidden TypeName: String|Mapping + + /// The caching configuration for the resolver. + hidden CachingConfig: (ResolverCachingConfig)? + + /// The request mapping template. + /// + /// Request mapping templates are optional when using a Lambda data source. For all other data sources, a request mapping template is required. + hidden RequestMappingTemplate: (String|Mapping)? + + /// The ``resolver`` code that contains the request and response functions. When code is used, the ``runtime`` is required. The runtime value must be ``APPSYNC_JS``. + hidden Code: (String|Mapping)? /// The resolver type. - /// /// + *UNIT*: A UNIT resolver type. A UNIT resolver is the default resolver type. You can use a UNIT resolver to run a GraphQL query against a single data source. + /// + /// + *UNIT*: A UNIT resolver type. A UNIT resolver is the default resolver type. You can use a UNIT resolver to run a GraphQL query against a single data source. /// + *PIPELINE*: A PIPELINE resolver type. You can use a PIPELINE resolver to invoke a series of ``Function`` objects in a serial manner. You can use a pipeline resolver to run a GraphQL query against multiple data sources. hidden Kind: (String|Mapping)? - /// The maximum number of resolver request inputs that will be sent to a single LAMlong function in a ``BatchInvoke`` operation. - hidden MaxBatchSize: (Int|Mapping)? - /// Functions linked with the pipeline resolver. - hidden PipelineConfig: (PipelineConfig)? + hidden PipelineConfig: (ResolverPipelineConfig)? - /// The APSYlong GraphQL API to which you want to attach this resolver. - hidden ApiId: String|Mapping + /// The location of a request mapping template in an S3 bucket. Use this if you want to provision with a template file in S3 rather than embedding it in your CFNshort template. + hidden RequestMappingTemplateS3Location: (String|Mapping)? - /// The caching configuration for the resolver. - hidden CachingConfig: (CachingConfig)? + /// The response mapping template. + hidden ResponseMappingTemplate: (String|Mapping)? - /// The ``resolver`` code that contains the request and response functions. When code is used, the ``runtime`` is required. The runtime value must be ``APPSYNC_JS``. - hidden Code: (String|Mapping)? + /// + hidden MetricsConfig: (ResolverMetricsConfig|Mapping)? /// The resolver data source name. hidden DataSourceName: (String|Mapping)? - /// The request mapping template. - /// /// Request mapping templates are optional when using a Lambda data source. For all other data sources, a request mapping template is required. - hidden RequestMappingTemplate: (String|Mapping)? + /// The GraphQL field on a type that invokes the resolver. + hidden FieldName: String|Mapping - /// The GraphQL type that invokes this resolver. - hidden TypeName: String|Mapping + /// The maximum number of resolver request inputs that will be sent to a single LAMlong function in a ``BatchInvoke`` operation. + hidden MaxBatchSize: (Int|Mapping)? /// Describes a runtime used by an APSYlong resolver or APSYlong function. Specifies the name and version of the runtime to use. Note that if a runtime is specified, code must also be specified. - hidden Runtime: (AppSyncRuntime)? + hidden Runtime: (ResolverAppSyncRuntime)? - /// The ``SyncConfig`` for a resolver attached to a versioned data source. - hidden SyncConfig: (SyncConfig)? - - /// The location of a request mapping template in an S3 bucket. Use this if you want to provision with a template file in S3 rather than embedding it in your CFNshort template. - hidden RequestMappingTemplateS3Location: (String|Mapping)? + /// The APSYlong GraphQL API to which you want to attach this resolver. + hidden ApiId: String|Mapping Properties { ["CodeS3Location"] = if (CodeS3Location == null) null else CodeS3Location - ["ResponseMappingTemplate"] = if (ResponseMappingTemplate == null) null else ResponseMappingTemplate ["ResponseMappingTemplateS3Location"] = if (ResponseMappingTemplateS3Location == null) null else ResponseMappingTemplateS3Location - ["MetricsConfig"] = if (MetricsConfig == null) null else MetricsConfig - ["FieldName"] = if (FieldName == null) null else FieldName - ["Kind"] = if (Kind == null) null else Kind - ["MaxBatchSize"] = if (MaxBatchSize == null) null else MaxBatchSize - ["PipelineConfig"] = if (PipelineConfig == null) null else PipelineConfig - ["ApiId"] = if (ApiId == null) null else ApiId + ["SyncConfig"] = if (SyncConfig == null) null else SyncConfig + ["TypeName"] = if (TypeName == null) null else TypeName ["CachingConfig"] = if (CachingConfig == null) null else CachingConfig + ["RequestMappingTemplate"] = if (RequestMappingTemplate == null) null else RequestMappingTemplate ["Code"] = if (Code == null) null else Code + ["Kind"] = if (Kind == null) null else Kind + ["PipelineConfig"] = if (PipelineConfig == null) null else PipelineConfig + ["RequestMappingTemplateS3Location"] = if (RequestMappingTemplateS3Location == null) null else RequestMappingTemplateS3Location + ["ResponseMappingTemplate"] = if (ResponseMappingTemplate == null) null else ResponseMappingTemplate + ["MetricsConfig"] = if (MetricsConfig == null) null else MetricsConfig ["DataSourceName"] = if (DataSourceName == null) null else DataSourceName - ["RequestMappingTemplate"] = if (RequestMappingTemplate == null) null else RequestMappingTemplate - ["TypeName"] = if (TypeName == null) null else TypeName + ["FieldName"] = if (FieldName == null) null else FieldName + ["MaxBatchSize"] = if (MaxBatchSize == null) null else MaxBatchSize ["Runtime"] = if (Runtime == null) null else Runtime - ["SyncConfig"] = if (SyncConfig == null) null else SyncConfig - ["RequestMappingTemplateS3Location"] = if (RequestMappingTemplateS3Location == null) null else RequestMappingTemplateS3Location + ["ApiId"] = if (ApiId == null) null else ApiId } } diff --git a/pkl/aws/appsync/sourceapiassociation.pkl b/pkl/aws/appsync/sourceapiassociation.pkl index fcd6b75c..033531cc 100644 --- a/pkl/aws/appsync/sourceapiassociation.pkl +++ b/pkl/aws/appsync/sourceapiassociation.pkl @@ -8,7 +8,7 @@ import "../../cloudformation.pkl" typealias SourceApiAssociationConfigMergeType = "AUTO_MERGE"|"MANUAL_MERGE" /// -open class SourceApiAssociationConfig { +open class SourceApiAssociationSourceApiAssociationConfig { MergeType: (SourceApiAssociationConfigMergeType|Mapping)? } @@ -24,17 +24,17 @@ open class SourceApiAssociation extends cloudformation.Resource { /// Description of the SourceApiAssociation. hidden Description: (String|Mapping)? - /// Customized configuration for SourceApiAssociation. - hidden SourceApiAssociationConfig: (SourceApiAssociationConfig)? - /// Identifier of the Source GraphQLApi to associate. It could be either GraphQLApi ApiId or ARN hidden SourceApiIdentifier: (String|Mapping)? + /// Customized configuration for SourceApiAssociation. + hidden SourceApiAssociationConfig: (SourceApiAssociationSourceApiAssociationConfig)? + Properties { ["MergedApiIdentifier"] = if (MergedApiIdentifier == null) null else MergedApiIdentifier ["Description"] = if (Description == null) null else Description - ["SourceApiAssociationConfig"] = if (SourceApiAssociationConfig == null) null else SourceApiAssociationConfig ["SourceApiIdentifier"] = if (SourceApiIdentifier == null) null else SourceApiIdentifier + ["SourceApiAssociationConfig"] = if (SourceApiAssociationConfig == null) null else SourceApiAssociationConfig } } diff --git a/pkl/aws/aps/rulegroupsnamespace.pkl b/pkl/aws/aps/rulegroupsnamespace.pkl index b62651ce..9db74302 100644 --- a/pkl/aws/aps/rulegroupsnamespace.pkl +++ b/pkl/aws/aps/rulegroupsnamespace.pkl @@ -17,9 +17,6 @@ open class RuleGroupsNamespace extends cloudformation.Resource { Type = "AWS::APS::RuleGroupsNamespace" - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? - /// Required to identify a specific APS Workspace associated with this RuleGroupsNamespace. hidden Workspace: String(matches(Regex(#"^arn:(aws|aws-us-gov|aws-cn):aps:[a-z0-9-]+:[0-9]+:workspace/[a-zA-Z0-9-]+$"#)))|Mapping @@ -29,11 +26,14 @@ open class RuleGroupsNamespace extends cloudformation.Resource { /// The RuleGroupsNamespace data. hidden Data: String|Mapping + /// An array of key-value pairs to apply to this resource. + hidden Tags: (Listing)? + Properties { - ["Tags"] = if (Tags == null) null else Tags ["Workspace"] = if (Workspace == null) null else Workspace ["Name"] = if (Name == null) null else Name ["Data"] = if (Data == null) null else Data + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/athena/capacityreservation.pkl b/pkl/aws/athena/capacityreservation.pkl index d458371e..bbe978db 100644 --- a/pkl/aws/athena/capacityreservation.pkl +++ b/pkl/aws/athena/capacityreservation.pkl @@ -6,41 +6,36 @@ module aws.athena.capacityreservation import "../../cloudformation.pkl" /// -open class CapacityAssignment { - WorkgroupNames: WorkgroupNames +open class CapacityReservationTag { + Key: String|Mapping + Value: String|Mapping } -/// List of capacity assignments -open class CapacityAssignments { -} +typealias CapacityReservationWorkgroupName = String|Mapping -/// Assignment configuration to assign workgroups to a reservation -open class CapacityAssignmentConfiguration { - CapacityAssignments: CapacityAssignments -} -/// -open class CapacityReservationStatus { -} +typealias CapacityReservationWorkgroupNames = Listing<(CapacityReservationWorkgroupName)?> -/// The Amazon Resource Name (ARN) of the specified capacity reservation -open class Arn { -} /// -open class Tag { - Key: String|Mapping - Value: String|Mapping +open class CapacityReservationCapacityAssignment { + WorkgroupNames: CapacityReservationWorkgroupNames } -/// -open class WorkgroupName { -} +typealias CapacityReservationCapacityAssignments = Listing<(CapacityReservationCapacityAssignment)?> -/// -open class WorkgroupNames { + +/// Assignment configuration to assign workgroups to a reservation +open class CapacityReservationCapacityAssignmentConfiguration { + CapacityAssignments: CapacityReservationCapacityAssignments } +typealias CapacityReservationCapacityReservationStatus = String|Mapping + + +typealias CapacityReservationArn = String|Mapping + + /// Resource schema for AWS::Athena::CapacityReservation open class CapacityReservation extends cloudformation.Resource { @@ -54,10 +49,10 @@ open class CapacityReservation extends cloudformation.Resource { hidden Name: String(matches(Regex(#"[a-zA-Z0-9._-]{1,128}"#)))|Mapping /// - hidden CapacityAssignmentConfiguration: (CapacityAssignmentConfiguration)? + hidden CapacityAssignmentConfiguration: (CapacityReservationCapacityAssignmentConfiguration)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["TargetDpus"] = if (TargetDpus == null) null else TargetDpus diff --git a/pkl/aws/athena/datacatalog.pkl b/pkl/aws/athena/datacatalog.pkl index c7b557e9..68830846 100644 --- a/pkl/aws/athena/datacatalog.pkl +++ b/pkl/aws/athena/datacatalog.pkl @@ -6,27 +6,20 @@ module aws.athena.datacatalog import "../../cloudformation.pkl" /// -open class Tags { -} - -/// -open class Tag { +open class DataCatalogTag { Key: String|Mapping Value: String|Mapping } +typealias DataCatalogTags = Listing<(DataCatalogTag)?> + + /// Resource schema for AWS::Athena::DataCatalog open class DataCatalog extends cloudformation.Resource { Type = "AWS::Athena::DataCatalog" - /// A list of comma separated tags to add to the data catalog that is created. - hidden Tags: (Tags)? - - /// The type of data catalog to create: LAMBDA for a federated catalog, GLUE for AWS Glue Catalog, or HIVE for an external hive metastore. - hidden TypeProperty: DataCatalogType|Mapping - /// The name of the data catalog to create. The catalog name must be unique for the AWS account and can use a maximum of 128 alphanumeric, underscore, at sign, or hyphen characters. hidden Name: String|Mapping @@ -34,17 +27,25 @@ open class DataCatalog extends cloudformation.Resource { hidden Description: (String|Mapping)? /// Specifies the Lambda function or functions to use for creating the data catalog. This is a mapping whose values depend on the catalog type. - hidden Parameters: (Dynamic)? + hidden Parameters: (DataCatalogDataCatalogParameters)? + + /// A list of comma separated tags to add to the data catalog that is created. + hidden Tags: (DataCatalogTags)? + + /// The type of data catalog to create: LAMBDA for a federated catalog, GLUE for AWS Glue Catalog, or HIVE for an external hive metastore. + hidden TypeProperty: DataCatalogType|Mapping Properties { - ["Tags"] = if (Tags == null) null else Tags - ["Type"] = if (TypeProperty == null) null else TypeProperty ["Name"] = if (Name == null) null else Name ["Description"] = if (Description == null) null else Description ["Parameters"] = if (Parameters == null) null else Parameters + ["Tags"] = if (Tags == null) null else Tags + ["Type"] = if (TypeProperty == null) null else TypeProperty } } +typealias DataCatalogDataCatalogParameters = Mapping + typealias DataCatalogType = "LAMBDA"|"GLUE"|"HIVE" diff --git a/pkl/aws/athena/namedquery.pkl b/pkl/aws/athena/namedquery.pkl index 06387d56..802557fa 100644 --- a/pkl/aws/athena/namedquery.pkl +++ b/pkl/aws/athena/namedquery.pkl @@ -11,6 +11,12 @@ open class NamedQuery extends cloudformation.Resource { Type = "AWS::Athena::NamedQuery" + /// The contents of the query with all query statements. + hidden QueryString: String|Mapping + + /// The name of the workgroup that contains the named query. + hidden WorkGroup: (String|Mapping)? + /// The query name. hidden Name: (String|Mapping)? @@ -20,18 +26,12 @@ open class NamedQuery extends cloudformation.Resource { /// The query description. hidden Description: (String|Mapping)? - /// The contents of the query with all query statements. - hidden QueryString: String|Mapping - - /// The name of the workgroup that contains the named query. - hidden WorkGroup: (String|Mapping)? - Properties { + ["QueryString"] = if (QueryString == null) null else QueryString + ["WorkGroup"] = if (WorkGroup == null) null else WorkGroup ["Name"] = if (Name == null) null else Name ["Database"] = if (Database == null) null else Database ["Description"] = if (Description == null) null else Description - ["QueryString"] = if (QueryString == null) null else QueryString - ["WorkGroup"] = if (WorkGroup == null) null else WorkGroup } } diff --git a/pkl/aws/athena/preparedstatement.pkl b/pkl/aws/athena/preparedstatement.pkl index 3d5cb8d6..0b1a9853 100644 --- a/pkl/aws/athena/preparedstatement.pkl +++ b/pkl/aws/athena/preparedstatement.pkl @@ -11,9 +11,6 @@ open class PreparedStatement extends cloudformation.Resource { Type = "AWS::Athena::PreparedStatement" - /// The name of the prepared statement. - hidden StatementName: String|Mapping - /// The name of the workgroup to which the prepared statement belongs. hidden WorkGroup: String|Mapping @@ -23,11 +20,14 @@ open class PreparedStatement extends cloudformation.Resource { /// The query string for the prepared statement. hidden QueryStatement: String|Mapping + /// The name of the prepared statement. + hidden StatementName: String|Mapping + Properties { - ["StatementName"] = if (StatementName == null) null else StatementName ["WorkGroup"] = if (WorkGroup == null) null else WorkGroup ["Description"] = if (Description == null) null else Description ["QueryStatement"] = if (QueryStatement == null) null else QueryStatement + ["StatementName"] = if (StatementName == null) null else StatementName } } diff --git a/pkl/aws/athena/workgroup.pkl b/pkl/aws/athena/workgroup.pkl index a90e4812..902013b5 100644 --- a/pkl/aws/athena/workgroup.pkl +++ b/pkl/aws/athena/workgroup.pkl @@ -5,161 +5,142 @@ module aws.athena.workgroup import "../../cloudformation.pkl" -/// -open class Tag { - Key: String|Mapping - Value: String|Mapping -} +typealias WorkGroupSelectedEngineVersion = String|Mapping -/// Additional Configuration that are passed to Athena Spark Calculations running in this workgroup -open class AdditionalConfiguration { -} -/// Indicates the KMS key for encrypting notebook content. -open class CustomerContentEncryptionConfiguration { - KmsKey: KmsKey +/// +open class WorkGroupWorkGroupConfiguration { + BytesScannedCutoffPerQuery: (WorkGroupBytesScannedCutoffPerQuery)? + EnforceWorkGroupConfiguration: (WorkGroupEnforceWorkGroupConfiguration)? + ExecutionRole: (WorkGroupExecutionRole)? + EngineVersion: (WorkGroupEngineVersion)? + AdditionalConfiguration: (WorkGroupAdditionalConfiguration)? + CustomerContentEncryptionConfiguration: (WorkGroupCustomerContentEncryptionConfiguration)? + PublishCloudWatchMetricsEnabled: (WorkGroupPublishCloudWatchMetricsEnabled)? + RequesterPaysEnabled: (WorkGroupRequesterPaysEnabled)? + ResultConfiguration: (WorkGroupResultConfiguration)? } -/// Read only. The engine version on which the query runs. If the user requests a valid engine version other than Auto, the effective engine version is the same as the engine version that the user requested. If the user requests Auto, the effective engine version is chosen by Athena. When a request to update the engine version is made by a CreateWorkGroup or UpdateWorkGroup operation, the EffectiveEngineVersion field is ignored. -open class EffectiveEngineVersion { -} +typealias WorkGroupTags = Listing<(WorkGroupTag)?> -/// The AWS account ID of the owner of S3 bucket where query results are stored -open class ExpectedBucketOwner { -} -/// Indicates that the Amazon CloudWatch metrics are enabled for the workgroup. -open class PublishCloudWatchMetricsEnabled { -} +typealias WorkGroupEncryptionOption = String|Mapping + /// The location in Amazon S3 where query results are stored and the encryption option, if any, used for query results. These are known as "client-side settings". If workgroup settings override client-side settings, then the query uses the workgroup settings. -////// -open class ResultConfiguration { - EncryptionConfiguration: (EncryptionConfiguration)? - OutputLocation: (OutputLocation)? - ExpectedBucketOwner: (ExpectedBucketOwner)? - AclConfiguration: (AclConfiguration)? +/// +/// +open class WorkGroupResultConfiguration { + EncryptionConfiguration: (WorkGroupEncryptionConfiguration)? + OutputLocation: (WorkGroupOutputLocation)? + ExpectedBucketOwner: (WorkGroupExpectedBucketOwner)? + AclConfiguration: (WorkGroupAclConfiguration)? } /// -open class WorkGroupConfiguration { - RequesterPaysEnabled: (RequesterPaysEnabled)? - EngineVersion: (EngineVersion)? - BytesScannedCutoffPerQuery: (BytesScannedCutoffPerQuery)? - EnforceWorkGroupConfiguration: (EnforceWorkGroupConfiguration)? - PublishCloudWatchMetricsEnabled: (PublishCloudWatchMetricsEnabled)? - CustomerContentEncryptionConfiguration: (CustomerContentEncryptionConfiguration)? - ResultConfiguration: (ResultConfiguration)? - AdditionalConfiguration: (AdditionalConfiguration)? - ExecutionRole: (ExecutionRole)? +open class WorkGroupTag { + Key: String|Mapping + Value: String|Mapping } -/// The configuration information that will be updated for this workgroup, which includes the location in Amazon S3 where query results are stored, the encryption option, if any, used for query results, whether the Amazon CloudWatch Metrics are enabled for the workgroup, whether the workgroup settings override the client-side settings, and the data usage limit for the amount of bytes scanned per query, if it is specified. -open class WorkGroupConfigurationUpdates { - AdditionalConfiguration: (AdditionalConfiguration)? - CustomerContentEncryptionConfiguration: (CustomerContentEncryptionConfiguration)? - BytesScannedCutoffPerQuery: (BytesScannedCutoffPerQuery)? - PublishCloudWatchMetricsEnabled: (PublishCloudWatchMetricsEnabled)? - ResultConfigurationUpdates: (ResultConfigurationUpdates)? - RemoveBytesScannedCutoffPerQuery: (RemoveBytesScannedCutoffPerQuery)? - EngineVersion: (EngineVersion)? - ExecutionRole: (ExecutionRole)? - RemoveCustomerContentEncryptionConfiguration: (RemoveCustomerContentEncryptionConfiguration)? - EnforceWorkGroupConfiguration: (EnforceWorkGroupConfiguration)? - RequesterPaysEnabled: (RequesterPaysEnabled)? +/// The result configuration information about the queries in this workgroup that will be updated. Includes the updated results location and an updated option for encrypting query results. +open class WorkGroupResultConfigurationUpdates { + RemoveOutputLocation: (WorkGroupRemoveOutputLocation)? + RemoveExpectedBucketOwner: (WorkGroupRemoveExpectedBucketOwner)? + RemoveAclConfiguration: (WorkGroupRemoveAclConfiguration)? + EncryptionConfiguration: (WorkGroupEncryptionConfiguration)? + OutputLocation: (WorkGroupOutputLocation)? + ExpectedBucketOwner: (WorkGroupExpectedBucketOwner)? + AclConfiguration: (WorkGroupAclConfiguration)? + RemoveEncryptionConfiguration: (WorkGroupRemoveEncryptionConfiguration)? } -/// The Amazon S3 canned ACL that Athena should specify when storing query results. Currently the only supported canned ACL is BUCKET_OWNER_FULL_CONTROL -open class S3AclOption { +/// The configuration information that will be updated for this workgroup, which includes the location in Amazon S3 where query results are stored, the encryption option, if any, used for query results, whether the Amazon CloudWatch Metrics are enabled for the workgroup, whether the workgroup settings override the client-side settings, and the data usage limit for the amount of bytes scanned per query, if it is specified. +open class WorkGroupWorkGroupConfigurationUpdates { + EnforceWorkGroupConfiguration: (WorkGroupEnforceWorkGroupConfiguration)? + ResultConfigurationUpdates: (WorkGroupResultConfigurationUpdates)? + EngineVersion: (WorkGroupEngineVersion)? + ExecutionRole: (WorkGroupExecutionRole)? + CustomerContentEncryptionConfiguration: (WorkGroupCustomerContentEncryptionConfiguration)? + BytesScannedCutoffPerQuery: (WorkGroupBytesScannedCutoffPerQuery)? + PublishCloudWatchMetricsEnabled: (WorkGroupPublishCloudWatchMetricsEnabled)? + RequesterPaysEnabled: (WorkGroupRequesterPaysEnabled)? + RemoveBytesScannedCutoffPerQuery: (WorkGroupRemoveBytesScannedCutoffPerQuery)? + AdditionalConfiguration: (WorkGroupAdditionalConfiguration)? + RemoveCustomerContentEncryptionConfiguration: (WorkGroupRemoveCustomerContentEncryptionConfiguration)? } -/// The result configuration information about the queries in this workgroup that will be updated. Includes the updated results location and an updated option for encrypting query results. -open class ResultConfigurationUpdates { - OutputLocation: (OutputLocation)? - ExpectedBucketOwner: (ExpectedBucketOwner)? - AclConfiguration: (AclConfiguration)? - RemoveEncryptionConfiguration: (RemoveEncryptionConfiguration)? - RemoveOutputLocation: (RemoveOutputLocation)? - RemoveExpectedBucketOwner: (RemoveExpectedBucketOwner)? - RemoveAclConfiguration: (RemoveAclConfiguration)? - EncryptionConfiguration: (EncryptionConfiguration)? -} +typealias WorkGroupOutputLocation = String|Mapping -/// -open class Tags { -} -/// If set to "true", the settings for the workgroup override client-side settings. If set to "false", client-side settings are used -open class EnforceWorkGroupConfiguration { -} +typealias WorkGroupRemoveAclConfiguration = Boolean|Mapping -/// For SSE-KMS and CSE-KMS, this is the KMS key ARN or ID. -open class KmsKey { -} -/// Execution Role ARN required to run Athena Spark Calculations -open class ExecutionRole { +/// Indicates the KMS key for encrypting notebook content. +open class WorkGroupCustomerContentEncryptionConfiguration { + KmsKey: WorkGroupKmsKey } -/// -open class RemoveOutputLocation { -} +typealias WorkGroupRemoveExpectedBucketOwner = Boolean|Mapping -/// -open class RemoveAclConfiguration { -} -/// The engine version requested by the user. Possible values are determined by the output of ListEngineVersions, including Auto. The default is Auto. -open class SelectedEngineVersion { -} +typealias WorkGroupKmsKey = String|Mapping -/// The Athena engine version for running queries. -open class EngineVersion { - EffectiveEngineVersion: (EffectiveEngineVersion)? - SelectedEngineVersion: (SelectedEngineVersion)? -} -/// If query results are encrypted in Amazon S3, indicates the encryption option used (for example, SSE-KMS or CSE-KMS) and key information. -open class EncryptionConfiguration { - EncryptionOption: EncryptionOption - KmsKey: (KmsKey)? -} +typealias WorkGroupExpectedBucketOwner = String|Mapping -/// -open class RemoveEncryptionConfiguration { -} -/// -open class RemoveCustomerContentEncryptionConfiguration { -} +typealias WorkGroupRemoveCustomerContentEncryptionConfiguration = Boolean|Mapping -/// The location in Amazon S3 where your query results are stored, such as s3://path/to/query/bucket/. To run the query, you must specify the query results location using one of the ways: either for individual queries using either this setting (client-side), or in the workgroup, using WorkGroupConfiguration -open class OutputLocation { -} -/// Indicates that the data usage control limit per query is removed. -open class RemoveBytesScannedCutoffPerQuery { -} +typealias WorkGroupPublishCloudWatchMetricsEnabled = Boolean|Mapping -/// Indicates that an Amazon S3 canned ACL should be set to control ownership of stored query results -open class AclConfiguration { - S3AclOption: S3AclOption -} -/// The upper data usage limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan. -open class BytesScannedCutoffPerQuery { -} +typealias WorkGroupRequesterPaysEnabled = Boolean|Mapping + + +typealias WorkGroupRemoveEncryptionConfiguration = Boolean|Mapping + + +typealias WorkGroupRemoveOutputLocation = Boolean|Mapping + + +typealias WorkGroupEnforceWorkGroupConfiguration = Boolean|Mapping + -/// If set to true, allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to false, workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. -open class RequesterPaysEnabled { +typealias WorkGroupEffectiveEngineVersion = String|Mapping + + +typealias WorkGroupRemoveBytesScannedCutoffPerQuery = Boolean|Mapping + + +typealias WorkGroupBytesScannedCutoffPerQuery = Int|Mapping + + +/// The Athena engine version for running queries. +open class WorkGroupEngineVersion { + SelectedEngineVersion: (WorkGroupSelectedEngineVersion)? + EffectiveEngineVersion: (WorkGroupEffectiveEngineVersion)? } -/// Indicates whether Amazon S3 server-side encryption with Amazon S3-managed keys (SSE-S3), server-side encryption with KMS-managed keys (SSE-KMS), or client-side encryption with KMS-managed keys (CSE-KMS) is used. -open class EncryptionOption { +typealias WorkGroupExecutionRole = String|Mapping + + +typealias WorkGroupAdditionalConfiguration = String|Mapping + + +/// If query results are encrypted in Amazon S3, indicates the encryption option used (for example, SSE-KMS or CSE-KMS) and key information. +open class WorkGroupEncryptionConfiguration { + EncryptionOption: WorkGroupEncryptionOption + KmsKey: (WorkGroupKmsKey)? } -/// -open class RemoveExpectedBucketOwner { +typealias WorkGroupS3AclOption = String|Mapping + + +/// Indicates that an Amazon S3 canned ACL should be set to control ownership of stored query results +open class WorkGroupAclConfiguration { + S3AclOption: WorkGroupS3AclOption } /// Resource schema for AWS::Athena::WorkGroup @@ -181,13 +162,13 @@ open class WorkGroup extends cloudformation.Resource { hidden Description: (String|Mapping)? /// One or more tags, separated by commas, that you want to attach to the workgroup as you create it - hidden Tags: (Tags)? + hidden Tags: (WorkGroupTags)? /// The workgroup configuration - hidden WorkGroupConfiguration: (WorkGroupConfiguration)? + hidden WorkGroupConfiguration: (WorkGroupWorkGroupConfiguration)? /// The workgroup configuration update object - hidden WorkGroupConfigurationUpdates: (WorkGroupConfigurationUpdates)? + hidden WorkGroupConfigurationUpdates: (WorkGroupWorkGroupConfigurationUpdates)? Properties { ["State"] = if (State == null) null else State diff --git a/pkl/aws/auditmanager/assessment.pkl b/pkl/aws/auditmanager/assessment.pkl index 835a3658..982c8099 100644 --- a/pkl/aws/auditmanager/assessment.pkl +++ b/pkl/aws/auditmanager/assessment.pkl @@ -5,131 +5,112 @@ module aws.auditmanager.assessment import "../../cloudformation.pkl" -/// The destination type, such as Amazon S3. -open class AssessmentReportDestinationType { -} +typealias AssessmentTimestamp = Number|Mapping -/// The comment related to the delegation. -open class DelegationComment { -} -/// An AWS service such as Amazon S3, AWS CloudTrail, and so on. -open class AWSService { - ServiceName: (AWSServiceName)? -} +typealias AssessmentAssessmentName = String|Mapping + + +typealias AssessmentRoleType = String|Mapping + + +typealias AssessmentAWSServiceName = String|Mapping -/// The Amazon Resource Name (ARN) of the IAM user or role. -open class IamArn { -} -/// The identifier for the specified AWS account. -open class AccountId { +typealias AssessmentFrameworkId = String|Mapping + + +typealias AssessmentEmailAddress = String|Mapping + + +typealias AssessmentCreatedBy = String|Mapping + + +typealias AssessmentAssessmentDescription = String|Mapping + + +/// The assignment of a control set to a delegate for review. +open class AssessmentDelegation { + AssessmentName: (AssessmentAssessmentName)? + Comment: (AssessmentDelegationComment)? + Status: (AssessmentDelegationStatus)? + CreatedBy: (AssessmentCreatedBy)? + RoleArn: (AssessmentIamArn)? + CreationTime: (AssessmentTimestamp)? + Id: (AssessmentUUID)? + RoleType: (AssessmentRoleType)? + AssessmentId: (AssessmentUUID)? + LastUpdated: (AssessmentTimestamp)? + ControlSetId: (AssessmentControlSetId)? } -/// The sequence of characters that identifies when the event occurred. -open class Timestamp { +/// The wrapper that contains the AWS accounts and AWS services in scope for the assessment. +open class AssessmentScope { + AwsAccounts: (Listing)? + AwsServices: (Listing)? } -/// The identifier for the specified control set. -open class ControlSetId { +/// The destination in which evidence reports are stored for the specified assessment. +open class AssessmentAssessmentReportsDestination { + Destination: (AssessmentS3Url)? + DestinationType: (AssessmentAssessmentReportDestinationType)? } +typealias AssessmentDelegationStatus = String|Mapping + + +typealias AssessmentIamArn = String|Mapping + + /// The wrapper that contains AWS Audit Manager role information, such as the role type and IAM ARN. -open class Role { - RoleArn: (IamArn)? - RoleType: (RoleType)? +open class AssessmentRole { + RoleArn: (AssessmentIamArn)? + RoleType: (AssessmentRoleType)? } -/// The name of the AWS service. -open class AWSServiceName { -} +typealias AssessmentS3Url = String|Mapping -/// The URL of the specified Amazon S3 bucket. -open class S3Url { -} -/// The destination in which evidence reports are stored for the specified assessment. -open class AssessmentReportsDestination { - Destination: (S3Url)? - DestinationType: (AssessmentReportDestinationType)? -} +typealias AssessmentControlSetId = String|Mapping + /// A key-value pair to associate with a resource. -open class Tag { +open class AssessmentTag { Key: String|Mapping Value: String|Mapping } -/// -open class UUID { -} +typealias AssessmentAccountName = String|Mapping -/// The name of the specified AWS account. -open class AccountName { -} /// The AWS account associated with the assessment. -open class AWSAccount { - EmailAddress: (EmailAddress)? - Name: (AccountName)? - Id: (AccountId)? +open class AssessmentAWSAccount { + EmailAddress: (AssessmentEmailAddress)? + Name: (AssessmentAccountName)? + Id: (AssessmentAccountId)? } -/// The name of the related assessment. -open class AssessmentName { -} +typealias AssessmentAccountId = String|Mapping -/// The wrapper that contains the AWS accounts and AWS services in scope for the assessment. -open class Scope { - AwsAccounts: (Listing)? - AwsServices: (Listing)? -} -/// The status of the specified assessment. -open class AssessmentStatus { -} +typealias AssessmentAssessmentArn = String|Mapping -/// The unique identifier for the email account. -open class EmailAddress { -} -/// The Amazon Resource Name (ARN) of the assessment. -open class AssessmentArn { -} +typealias AssessmentAssessmentReportDestinationType = String|Mapping -/// The IAM role type. -open class RoleType { -} -/// The description of the specified assessment. -open class AssessmentDescription { -} +typealias AssessmentAssessmentStatus = String|Mapping -/// The identifier for the specified framework. -open class FrameworkId { -} -/// The assignment of a control set to a delegate for review. -open class Delegation { - RoleArn: (IamArn)? - AssessmentName: (AssessmentName)? - LastUpdated: (Timestamp)? - ControlSetId: (ControlSetId)? - CreationTime: (Timestamp)? - CreatedBy: (CreatedBy)? - Comment: (DelegationComment)? - Id: (UUID)? - RoleType: (RoleType)? - AssessmentId: (UUID)? - Status: (DelegationStatus)? -} +typealias AssessmentDelegationComment = String|Mapping -/// The status of the delegation. -open class DelegationStatus { -} -/// The IAM user or role that performed the action. -open class CreatedBy { +typealias AssessmentUUID = String|Mapping + + +/// An AWS service such as Amazon S3, AWS CloudTrail, and so on. +open class AssessmentAWSService { + ServiceName: (AssessmentAWSServiceName)? } /// An entity that defines the scope of audit evidence collected by AWS Audit Manager. @@ -139,46 +120,46 @@ open class Assessment extends cloudformation.Resource { /// - hidden AwsAccount: (AWSAccount)? - - /// The list of delegations. - hidden Delegations: (Listing)? + hidden AssessmentReportsDestination: (AssessmentAssessmentReportsDestination)? /// - hidden Status: (AssessmentStatus)? + hidden Status: (AssessmentAssessmentStatus)? /// - hidden Scope: (Scope)? + hidden Description: (AssessmentAssessmentDescription)? /// - hidden AssessmentReportsDestination: (AssessmentReportsDestination)? - - /// - hidden FrameworkId: (FrameworkId)? - - /// The tags associated with the assessment. - hidden Tags: (Listing)? + hidden AwsAccount: (AssessmentAWSAccount)? /// The list of roles for the specified assessment. - hidden Roles: (Listing)? + hidden Roles: (Listing)? /// - hidden Description: (AssessmentDescription)? + hidden Scope: (AssessmentScope)? /// - hidden Name: (AssessmentName)? + hidden Name: (AssessmentAssessmentName)? + + /// + hidden FrameworkId: (AssessmentFrameworkId)? + + /// The tags associated with the assessment. + hidden Tags: (Listing)? + + /// The list of delegations. + hidden Delegations: (Listing)? Properties { - ["AwsAccount"] = if (AwsAccount == null) null else AwsAccount - ["Delegations"] = if (Delegations == null) null else Delegations + ["AssessmentReportsDestination"] = if (AssessmentReportsDestination == null) null else AssessmentReportsDestination ["Status"] = if (Status == null) null else Status + ["Description"] = if (Description == null) null else Description + ["AwsAccount"] = if (AwsAccount == null) null else AwsAccount + ["Roles"] = if (Roles == null) null else Roles ["Scope"] = if (Scope == null) null else Scope - ["AssessmentReportsDestination"] = if (AssessmentReportsDestination == null) null else AssessmentReportsDestination + ["Name"] = if (Name == null) null else Name ["FrameworkId"] = if (FrameworkId == null) null else FrameworkId ["Tags"] = if (Tags == null) null else Tags - ["Roles"] = if (Roles == null) null else Roles - ["Description"] = if (Description == null) null else Description - ["Name"] = if (Name == null) null else Name + ["Delegations"] = if (Delegations == null) null else Delegations } } diff --git a/pkl/aws/autoscaling/autoscalinggroup.pkl b/pkl/aws/autoscaling/autoscalinggroup.pkl index 989500a7..382514ac 100644 --- a/pkl/aws/autoscaling/autoscalinggroup.pkl +++ b/pkl/aws/autoscaling/autoscalinggroup.pkl @@ -5,102 +5,145 @@ module aws.autoscaling.autoscalinggroup import "../../cloudformation.pkl" -/// -open class BaselineEbsBandwidthMbpsRequest { +/// ``AcceleratorTotalMemoryMiBRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum total memory size for the accelerators for an instance type, in MiB. +open class AutoScalingGroupAcceleratorTotalMemoryMiBRequest { Min: (Int|Mapping)? Max: (Int|Mapping)? } -/// -open class LaunchTemplateOverrides { - LaunchTemplateSpecification: (LaunchTemplateSpecification)? - WeightedCapacity: (String|Mapping)? - InstanceRequirements: (InstanceRequirements)? - InstanceType: (String|Mapping)? +/// Specifies a launch template to use when provisioning EC2 instances for an Auto Scaling group. +/// +/// You must specify the following: +/// + The ID or the name of the launch template, but not both. +/// + The version of the launch template. +/// +/// ``LaunchTemplateSpecification`` is property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. It is also a property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) and [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property types. +/// For information about creating a launch template, see [AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) and [Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) in the *Amazon EC2 Auto Scaling User Guide*. +/// For examples of launch templates, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html) and the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#aws-resource-ec2-launchtemplate--examples) section in the ``AWS::EC2::LaunchTemplate`` resource. +open class AutoScalingGroupLaunchTemplateSpecification { + LaunchTemplateName: (String|Mapping)? + Version: String|Mapping + LaunchTemplateId: (String|Mapping)? } -/// -open class AcceleratorTotalMemoryMiBRequest { +/// ``NetworkInterfaceCountRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of network interfaces for an instance type. +open class AutoScalingGroupNetworkInterfaceCountRequest { Min: (Int|Mapping)? Max: (Int|Mapping)? } -/// -open class InstanceRequirements { - LocalStorageTypes: (Listing)? - AllowedInstanceTypes: (Listing)? - CpuManufacturers: (Listing)? - RequireHibernateSupport: (Boolean|Mapping)? - SpotMaxPricePercentageOverLowestPrice: (Int|Mapping)? - AcceleratorTypes: (Listing)? - VCpuCount: VCpuCountRequest - NetworkBandwidthGbps: (NetworkBandwidthGbpsRequest)? - MaxSpotPriceAsPercentageOfOptimalOnDemandPrice: (Int|Mapping)? - AcceleratorTotalMemoryMiB: (AcceleratorTotalMemoryMiBRequest)? - OnDemandMaxPricePercentageOverLowestPrice: (Int|Mapping)? - MemoryMiB: MemoryMiBRequest - InstanceGenerations: (Listing)? - MemoryGiBPerVCpu: (MemoryGiBPerVCpuRequest)? - BareMetal: (String|Mapping)? - AcceleratorNames: (Listing)? - TotalLocalStorageGB: (TotalLocalStorageGBRequest)? - NetworkInterfaceCount: (NetworkInterfaceCountRequest)? - AcceleratorManufacturers: (Listing)? - ExcludedInstanceTypes: (Listing)? - LocalStorage: (String|Mapping)? - AcceleratorCount: (AcceleratorCountRequest)? - BaselineEbsBandwidthMbps: (BaselineEbsBandwidthMbpsRequest)? - BurstablePerformance: (String|Mapping)? +/// A structure that specifies an Amazon SNS notification configuration for the ``NotificationConfigurations`` property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. +/// +/// For an example template snippet, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html). +/// For more information, see [Get Amazon SNS notifications when your Auto Scaling group scales](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ASGettingNotifications.html) in the *Amazon EC2 Auto Scaling User Guide*. +open class AutoScalingGroupNotificationConfiguration { + TopicARN: Dynamic + NotificationTypes: (Listing)? } -/// -open class TotalLocalStorageGBRequest { - Max: (Number|Mapping)? - Min: (Number|Mapping)? +/// Use this structure to specify the launch templates and instance types (overrides) for a mixed instances policy. +/// +/// ``LaunchTemplate`` is a property of the [AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html) property type. +open class AutoScalingGroupLaunchTemplate { + Overrides: (Listing)? + LaunchTemplateSpecification: AutoScalingGroupLaunchTemplateSpecification } -/// -open class NetworkBandwidthGbpsRequest { - Min: (Number|Mapping)? - Max: (Number|Mapping)? +/// ``AcceleratorCountRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of accelerators for an instance type. +open class AutoScalingGroupAcceleratorCountRequest { + Min: (Int|Mapping)? + Max: (Int|Mapping)? +} + +/// ``MetricsCollection`` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource that describes the group metrics that an Amazon EC2 Auto Scaling group sends to Amazon CloudWatch. These metrics describe the group rather than any of its instances. +/// +/// For more information, see [Monitor CloudWatch metrics for your Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-monitoring.html) in the *Amazon EC2 Auto Scaling User Guide*. You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html#aws-resource-autoscaling-autoscalinggroup--examples) section of the ``AWS::AutoScaling::AutoScalingGroup`` resource. +open class AutoScalingGroupMetricsCollection { + Metrics: (Listing)? + Granularity: String|Mapping } -/// -open class MemoryGiBPerVCpuRequest { +/// ``TotalLocalStorageGBRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum total local storage size for an instance type, in GB. +open class AutoScalingGroupTotalLocalStorageGBRequest { Min: (Number|Mapping)? Max: (Number|Mapping)? } -/// -open class InstanceMaintenancePolicy { - MaxHealthyPercentage: (Int|Mapping)? - MinHealthyPercentage: (Int|Mapping)? +/// ``BaselineEbsBandwidthMbpsRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum baseline bandwidth performance for an instance type, in Mbps. +open class AutoScalingGroupBaselineEbsBandwidthMbpsRequest { + Max: (Int|Mapping)? + Min: (Int|Mapping)? } -/// -open class MixedInstancesPolicy { - InstancesDistribution: (InstancesDistribution)? - LaunchTemplate: LaunchTemplate +/// ``VCpuCountRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum number of vCPUs for an instance type. +open class AutoScalingGroupVCpuCountRequest { + Max: (Int|Mapping)? + Min: (Int|Mapping)? } -/// -open class InstancesDistribution { +/// Use this structure to specify the distribution of On-Demand Instances and Spot Instances and the allocation strategies used to fulfill On-Demand and Spot capacities for a mixed instances policy. +/// +/// For more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide*. +/// ``InstancesDistribution`` is a property of the [AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html) property type. +open class AutoScalingGroupInstancesDistribution { + SpotMaxPrice: (String|Mapping)? OnDemandAllocationStrategy: (String|Mapping)? OnDemandBaseCapacity: (Int|Mapping)? OnDemandPercentageAboveBaseCapacity: (Int|Mapping)? SpotInstancePools: (Int|Mapping)? SpotAllocationStrategy: (String|Mapping)? - SpotMaxPrice: (String|Mapping)? } -/// -open class AcceleratorCountRequest { - Min: (Int|Mapping)? - Max: (Int|Mapping)? +/// ``InstanceMaintenancePolicy`` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. +/// +/// For more information, see [Instance maintenance policies](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html) in the *Amazon EC2 Auto Scaling User Guide*. +open class AutoScalingGroupInstanceMaintenancePolicy { + MinHealthyPercentage: (Int|Mapping)? + MaxHealthyPercentage: (Int|Mapping)? } -/// -open class LifecycleHookSpecification { +/// The attributes for the instance types for a mixed instances policy. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types. Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types. +/// +/// When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values. +/// To limit the list of instance types from which Amazon EC2 Auto Scaling can identify matching instance types, you can use one of the following parameters, but not both in the same request: +/// + ``AllowedInstanceTypes`` - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes. +/// + ``ExcludedInstanceTypes`` - The instance types to exclude from the list, even if they match your specified attributes. +/// +/// You must specify ``VCpuCount`` and ``MemoryMiB``. All other attributes are optional. Any unspecified optional attribute is set to its default. +/// For an example template, see [Auto scaling template snippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html). +/// For more information, see [Creating an Auto Scaling group using attribute-based instance type selection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html) in the *Amazon EC2 Auto Scaling User Guide*. For help determining which instance types match your attributes before you apply them to your Auto Scaling group, see [Preview instance types with specified attributes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements) in the *Amazon EC2 User Guide for Linux Instances*. +/// ``InstanceRequirements`` is a property of the ``LaunchTemplateOverrides`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) property type. +open class AutoScalingGroupInstanceRequirements { + TotalLocalStorageGB: (AutoScalingGroupTotalLocalStorageGBRequest)? + AcceleratorTypes: (Listing)? + MemoryGiBPerVCpu: (AutoScalingGroupMemoryGiBPerVCpuRequest)? + NetworkBandwidthGbps: (AutoScalingGroupNetworkBandwidthGbpsRequest)? + AllowedInstanceTypes: (Listing)? + BareMetal: (String|Mapping)? + BurstablePerformance: (String|Mapping)? + VCpuCount: AutoScalingGroupVCpuCountRequest + AcceleratorCount: (AutoScalingGroupAcceleratorCountRequest)? + RequireHibernateSupport: (Boolean|Mapping)? + MaxSpotPriceAsPercentageOfOptimalOnDemandPrice: (Int|Mapping)? + BaselineEbsBandwidthMbps: (AutoScalingGroupBaselineEbsBandwidthMbpsRequest)? + LocalStorageTypes: (Listing)? + NetworkInterfaceCount: (AutoScalingGroupNetworkInterfaceCountRequest)? + ExcludedInstanceTypes: (Listing)? + OnDemandMaxPricePercentageOverLowestPrice: (Int|Mapping)? + CpuManufacturers: (Listing)? + SpotMaxPricePercentageOverLowestPrice: (Int|Mapping)? + AcceleratorNames: (Listing)? + AcceleratorTotalMemoryMiB: (AutoScalingGroupAcceleratorTotalMemoryMiBRequest)? + MemoryMiB: AutoScalingGroupMemoryMiBRequest + InstanceGenerations: (Listing)? + AcceleratorManufacturers: (Listing)? + LocalStorage: (String|Mapping)? +} + +/// ``LifecycleHookSpecification`` specifies a lifecycle hook for the ``LifecycleHookSpecificationList`` property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. A lifecycle hook specifies actions to perform when Amazon EC2 Auto Scaling launches or terminates instances. +/// +/// For more information, see [Amazon EC2 Auto Scaling lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) in the *Amazon EC2 Auto Scaling User Guide*. You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html#aws-resource-as-lifecyclehook--examples) section of the ``AWS::AutoScaling::LifecycleHook`` resource. +open class AutoScalingGroupLifecycleHookSpecification { LifecycleTransition: String|Mapping HeartbeatTimeout: (Int|Mapping)? NotificationMetadata: (String|Mapping)? @@ -110,183 +153,239 @@ open class LifecycleHookSpecification { LifecycleHookName: String|Mapping } -/// -open class NotificationConfiguration { - NotificationTypes: (Listing)? - TopicARN: Dynamic +/// Use this structure to let Amazon EC2 Auto Scaling do the following when the Auto Scaling group has a mixed instances policy: +/// +/// + Override the instance type that is specified in the launch template. +/// + Use multiple instance types. +/// +/// Specify the instance types that you want, or define your instance requirements instead and let Amazon EC2 Auto Scaling provision the available instance types that meet your requirements. This can provide Amazon EC2 Auto Scaling with a larger selection of instance types to choose from when fulfilling Spot and On-Demand capacities. You can view which instance types are matched before you apply the instance requirements to your Auto Scaling group. +/// After you define your instance requirements, you don't have to keep updating these settings to get new EC2 instance types automatically. Amazon EC2 Auto Scaling uses the instance requirements of the Auto Scaling group to determine whether a new EC2 instance type can be used. +/// ``LaunchTemplateOverrides`` is a property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplate.html) property type. +open class AutoScalingGroupLaunchTemplateOverrides { + WeightedCapacity: (String|Mapping)? + InstanceRequirements: (AutoScalingGroupInstanceRequirements)? + InstanceType: (String|Mapping)? + LaunchTemplateSpecification: (AutoScalingGroupLaunchTemplateSpecification)? } -/// -open class MemoryMiBRequest { - Max: (Int|Mapping)? - Min: (Int|Mapping)? +/// Use this structure to launch multiple instance types and On-Demand Instances and Spot Instances within a single Auto Scaling group. +/// +/// A mixed instances policy contains information that Amazon EC2 Auto Scaling can use to launch instances and help optimize your costs. For more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide*. +/// You can create a mixed instances policy for new and existing Auto Scaling groups. You must use a launch template to configure the policy. You cannot use a launch configuration. +/// There are key differences between Spot Instances and On-Demand Instances: +/// + The price for Spot Instances varies based on demand +/// + Amazon EC2 can terminate an individual Spot Instance as the availability of, or price for, Spot Instances changes +/// +/// When a Spot Instance is terminated, Amazon EC2 Auto Scaling group attempts to launch a replacement instance to maintain the desired capacity for the group. +/// ``MixedInstancesPolicy`` is a property of the [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. +open class AutoScalingGroupMixedInstancesPolicy { + InstancesDistribution: (AutoScalingGroupInstancesDistribution)? + LaunchTemplate: AutoScalingGroupLaunchTemplate } -/// -open class NetworkInterfaceCountRequest { - Min: (Int|Mapping)? - Max: (Int|Mapping)? +/// ``NetworkBandwidthGbpsRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum network bandwidth for an instance type, in Gbps. +/// +/// Setting the minimum bandwidth does not guarantee that your instance will achieve the minimum bandwidth. Amazon EC2 will identify instance types that support the specified minimum bandwidth, but the actual bandwidth of your instance might go below the specified minimum at times. For more information, see [Available instance bandwidth](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth) in the *Amazon EC2 User Guide for Linux Instances*. +open class AutoScalingGroupNetworkBandwidthGbpsRequest { + Min: (Number|Mapping)? + Max: (Number|Mapping)? } -/// -open class TagProperty { +/// A structure that specifies a tag for the ``Tags`` property of [AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html) resource. +/// +/// For more information, see [Tag Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-tagging.html) in the *Amazon EC2 Auto Scaling User Guide*. You can find a sample template snippet in the [Examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-autoscalinggroup.html#aws-resource-autoscaling-autoscalinggroup--examples) section of the ``AWS::AutoScaling::AutoScalingGroup`` resource. +/// CloudFormation adds the following tags to all Auto Scaling groups and associated instances: +/// + aws:cloudformation:stack-name +/// + aws:cloudformation:stack-id +/// + aws:cloudformation:logical-id +open class AutoScalingGroupTagProperty { Value: String|Mapping Key: String|Mapping PropagateAtLaunch: Boolean|Mapping } -/// -open class LaunchTemplateSpecification { - LaunchTemplateName: (String|Mapping)? - Version: String|Mapping - LaunchTemplateId: (String|Mapping)? -} - -/// -open class LaunchTemplate { - LaunchTemplateSpecification: LaunchTemplateSpecification - Overrides: (Listing)? -} - -/// -open class MetricsCollection { - Metrics: (Listing)? - Granularity: String|Mapping +/// ``MemoryGiBPerVCpuRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum amount of memory per vCPU for an instance type, in GiB. +open class AutoScalingGroupMemoryGiBPerVCpuRequest { + Min: (Number|Mapping)? + Max: (Number|Mapping)? } -/// -open class VCpuCountRequest { +/// ``MemoryMiBRequest`` is a property of the ``InstanceRequirements`` property of the [AWS::AutoScaling::AutoScalingGroup LaunchTemplateOverrides](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-launchtemplateoverrides.html) property type that describes the minimum and maximum instance memory size for an instance type, in MiB. +open class AutoScalingGroupMemoryMiBRequest { Min: (Int|Mapping)? Max: (Int|Mapping)? } -/// Resource Type definition for AWS::AutoScaling::AutoScalingGroup +/// The ``AWS::AutoScaling::AutoScalingGroup`` resource defines an Amazon EC2 Auto Scaling group, which is a collection of Amazon EC2 instances that are treated as a logical grouping for the purposes of automatic scaling and management. +/// +/// For more information about Amazon EC2 Auto Scaling, see the [Amazon EC2 Auto Scaling User Guide](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html). +/// Amazon EC2 Auto Scaling configures instances launched as part of an Auto Scaling group using either a [launch template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) or a launch configuration. We strongly recommend that you do not use launch configurations. They do not provide full functionality for Amazon EC2 Auto Scaling or Amazon EC2. For more information, see [Launch configurations](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-configurations.html) and [Migrate CloudFormation stacks from launch configurations to launch templates](https://docs.aws.amazon.com/autoscaling/ec2/userguide/migrate-launch-configurations-with-cloudformation.html) in the *Amazon EC2 Auto Scaling User Guide*. open class AutoScalingGroup extends cloudformation.Resource { Type = "AWS::AutoScaling::AutoScalingGroup" - /// - hidden InstanceMaintenancePolicy: (InstanceMaintenancePolicy)? + /// The minimum size of the group. + hidden MinSize: String(matches(Regex(#"^[0-9]+$"#)))|Mapping - /// - hidden DesiredCapacityType: (String|Mapping)? + /// One or more tags. You can tag your Auto Scaling group and propagate the tags to the Amazon EC2 instances it launches. Tags are not propagated to Amazon EBS volumes. To add tags to Amazon EBS volumes, specify the tags in a launch template but use caution. If the launch template specifies an instance tag with a key that is also specified for the Auto Scaling group, Amazon EC2 Auto Scaling overrides the value of that instance tag with the value specified by the Auto Scaling group. For more information, see [Tag Auto Scaling groups and instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-tagging.html) in the *Amazon EC2 Auto Scaling User Guide*. + hidden Tags: (Listing)? /// - hidden LaunchConfigurationName: (String|Mapping)? + hidden NotificationConfiguration: (AutoScalingGroupNotificationConfiguration)? - /// - hidden DesiredCapacity: (String(matches(Regex(#"^[0-9]+$"#)))|Mapping)? - - /// - hidden InstanceId: (String|Mapping)? + /// The name of the placement group into which to launch your instances. For more information, see [Placement groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) in the *Amazon EC2 User Guide for Linux Instances*. + /// + /// A *cluster* placement group is a logical grouping of instances within a single Availability Zone. You cannot specify multiple Availability Zones and a cluster placement group. + hidden PlacementGroup: (String|Mapping)? - /// - hidden MetricsCollection: (Listing)? + /// The Amazon Resource Name (ARN) of the service-linked role that the Auto Scaling group uses to call other AWS service on your behalf. By default, Amazon EC2 Auto Scaling uses a service-linked role named ``AWSServiceRoleForAutoScaling``, which it creates if it does not exist. For more information, see [Service-linked roles](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html) in the *Amazon EC2 Auto Scaling User Guide*. + hidden ServiceLinkedRoleARN: (String|Mapping)? - /// - hidden LaunchTemplate: (LaunchTemplateSpecification)? + /// Information used to specify the launch template and version to use to launch instances. You can alternatively associate a launch template to the Auto Scaling group by specifying a ``MixedInstancesPolicy``. For more information about creating launch templates, see [Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// + /// If you omit this property, you must specify ``MixedInstancesPolicy``, ``LaunchConfigurationName``, or ``InstanceId``. + hidden LaunchTemplate: (AutoScalingGroupLaunchTemplateSpecification)? - /// - hidden Context: (String|Mapping)? + /// A list of Availability Zones where instances in the Auto Scaling group can be created. Used for launching into the default VPC subnet in each Availability Zone when not using the ``VPCZoneIdentifier`` property, or for attaching a network interface when an existing network interface ID is specified in a launch template. + hidden AvailabilityZones: (Listing)? - /// - hidden MaxSize: String(matches(Regex(#"^[0-9]+$"#)))|Mapping + /// Enables the monitoring of group metrics of an Auto Scaling group. By default, these metrics are disabled. + hidden MetricsCollection: (Listing)? - /// - hidden TerminationPolicies: (Listing)? + /// Indicates whether newly launched instances are protected from termination by Amazon EC2 Auto Scaling when scaling in. For more information about preventing instances from terminating on scale in, see [Using instance scale-in protection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html) in the *Amazon EC2 Auto Scaling User Guide*. + hidden NewInstancesProtectedFromScaleIn: (Boolean|Mapping)? - /// - hidden ServiceLinkedRoleARN: (String|Mapping)? + /// A comma-separated value string of one or more health check types. + /// + /// The valid values are ``EC2``, ``ELB``, and ``VPC_LATTICE``. ``EC2`` is the default health check and cannot be disabled. For more information, see [Health checks for Auto Scaling instances](https://docs.aws.amazon.com/autoscaling/ec2/userguide/healthcheck.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// Only specify ``EC2`` if you must clear a value that was previously set. + hidden HealthCheckType: (String|Mapping)? - /// + /// The amount of time, in seconds, that Amazon EC2 Auto Scaling waits before checking the health status of an EC2 instance that has come into service and marking it unhealthy due to a failed health check. This is useful if your instances do not immediately pass their health checks after they enter the ``InService`` state. For more information, see [Set the health check grace period for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/health-check-grace-period.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// + /// Default: ``0`` seconds hidden HealthCheckGracePeriod: (Int|Mapping)? - /// - hidden Cooldown: (String|Mapping)? - - /// - hidden NewInstancesProtectedFromScaleIn: (Boolean|Mapping)? - - /// - hidden AvailabilityZones: (Listing)? + /// Reserved. + hidden Context: (String|Mapping)? - /// - hidden AutoScalingGroupName: (String|Mapping)? + /// A list of Classic Load Balancers associated with this Auto Scaling group. For Application Load Balancers, Network Load Balancers, and Gateway Load Balancers, specify the ``TargetGroupARNs`` property instead. + hidden LoadBalancerNames: (Listing)? - /// - hidden MixedInstancesPolicy: (MixedInstancesPolicy)? + /// The amount of time, in seconds, until a new instance is considered to have finished initializing and resource consumption to become stable after it enters the ``InService`` state. + /// + /// During an instance refresh, Amazon EC2 Auto Scaling waits for the warm-up period after it replaces an instance before it moves on to replacing the next instance. Amazon EC2 Auto Scaling also waits for the warm-up period before aggregating the metrics for new instances with existing instances in the Amazon CloudWatch metrics that are used for scaling, resulting in more reliable usage data. For more information, see [Set the default instance warmup for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-default-instance-warmup.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// To manage various warm-up settings at the group level, we recommend that you set the default instance warmup, *even if it is set to 0 seconds*. To remove a value that you previously set, include the property but specify ``-1`` for the value. However, we strongly recommend keeping the default instance warmup enabled by specifying a value of ``0`` or other nominal value. + /// Default: None + hidden DefaultInstanceWarmup: (Int|Mapping)? - /// + /// An embedded object that specifies a mixed instances policy. + /// + /// The policy includes properties that not only define the distribution of On-Demand Instances and Spot Instances, the maximum price to pay for Spot Instances (optional), and how the Auto Scaling group allocates instance types to fulfill On-Demand and Spot capacities, but also the properties that specify the instance configuration information—the launch template and instance types. The policy can also include a weight for each instance type and different launch templates for individual instance types. + /// For more information, see [Auto Scaling groups with multiple instance types and purchase options](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html) in the *Amazon EC2 Auto Scaling User Guide*. + hidden MixedInstancesPolicy: (AutoScalingGroupMixedInstancesPolicy)? + + /// A list of subnet IDs for a virtual private cloud (VPC) where instances in the Auto Scaling group can be created. + /// + /// If this resource specifies public subnets and is also in a VPC that is defined in the same stack template, you must use the [DependsOn attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) to declare a dependency on the [VPC-gateway attachment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html). + /// When you update ``VPCZoneIdentifier``, this retains the same Auto Scaling group and replaces old instances with new ones, according to the specified subnets. You can optionally specify how CloudFormation handles these updates by using an [UpdatePolicy attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html). + /// Required to launch instances into a nondefault VPC. If you specify ``VPCZoneIdentifier`` with ``AvailabilityZones``, the subnets that you specify for this property must reside in those Availability Zones. hidden VPCZoneIdentifier: (Listing)? - /// - hidden HealthCheckType: (String|Mapping)? + /// The ID of the instance used to base the launch configuration on. For more information, see [Create an Auto Scaling group using an EC2 instance](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-from-instance.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// + /// If you specify ``LaunchTemplate``, ``MixedInstancesPolicy``, or ``LaunchConfigurationName``, don't specify ``InstanceId``. + hidden InstanceId: (String|Mapping)? - /// - hidden LifecycleHookSpecificationList: (Listing)? + /// An instance maintenance policy. For more information, see [Set instance maintenance policy](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html) in the *Amazon EC2 Auto Scaling User Guide*. + hidden InstanceMaintenancePolicy: (AutoScalingGroupInstanceMaintenancePolicy)? - /// - hidden NotificationConfigurations: (Listing)? + /// The maximum size of the group. + /// + /// With a mixed instances policy that uses instance weighting, Amazon EC2 Auto Scaling may need to go above ``MaxSize`` to meet your capacity requirements. In this event, Amazon EC2 Auto Scaling will never go above ``MaxSize`` by more than your largest instance weight (weights that define how many units each instance contributes to the desired capacity of the group). + hidden MaxSize: String(matches(Regex(#"^[0-9]+$"#)))|Mapping - /// - hidden CapacityRebalance: (Boolean|Mapping)? + /// One or more lifecycle hooks to add to the Auto Scaling group before instances are launched. + hidden LifecycleHookSpecificationList: (Listing)? - /// - hidden MinSize: String(matches(Regex(#"^[0-9]+$"#)))|Mapping + /// The Amazon Resource Names (ARN) of the Elastic Load Balancing target groups to associate with the Auto Scaling group. Instances are registered as targets with the target groups. The target groups receive incoming traffic and route requests to one or more registered targets. For more information, see [Use Elastic Load Balancing to distribute traffic across the instances in your Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html) in the *Amazon EC2 Auto Scaling User Guide*. + hidden TargetGroupARNs: (Listing)? - /// - hidden LoadBalancerNames: (Listing)? + /// *Only needed if you use simple scaling policies.* + /// + /// The amount of time, in seconds, between one scaling activity ending and another one starting due to simple scaling policies. For more information, see [Scaling cooldowns for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// Default: ``300`` seconds + hidden Cooldown: (String|Mapping)? - /// - hidden DefaultInstanceWarmup: (Int|Mapping)? + /// A policy or a list of policies that are used to select the instance to terminate. These policies are executed in the order that you list them. For more information, see [Work with Amazon EC2 Auto Scaling termination policies](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-termination-policies.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// + /// Valid values: ``Default`` | ``AllocationStrategy`` | ``ClosestToNextInstanceHour`` | ``NewestInstance`` | ``OldestInstance`` | ``OldestLaunchConfiguration`` | ``OldestLaunchTemplate`` | ``arn:aws:lambda:region:account-id:function:my-function:my-alias`` + hidden TerminationPolicies: (Listing)? - /// - hidden PlacementGroup: (String|Mapping)? + /// The name of the Auto Scaling group. This name must be unique per Region per account. + /// + /// The name can contain any ASCII character 33 to 126 including most punctuation characters, digits, and upper and lowercased letters. + /// You cannot use a colon (:) in the name. + hidden AutoScalingGroupName: (String|Mapping)? - /// + /// The unit of measurement for the value specified for desired capacity. Amazon EC2 Auto Scaling supports ``DesiredCapacityType`` for attribute-based instance type selection only. For more information, see [Creating an Auto Scaling group using attribute-based instance type selection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html) in the *Amazon EC2 Auto Scaling User Guide*. + /// + /// By default, Amazon EC2 Auto Scaling specifies ``units``, which translates into number of instances. + /// Valid values: ``units`` | ``vcpu`` | ``memory-mib`` + hidden DesiredCapacityType: (String|Mapping)? + + /// The maximum amount of time, in seconds, that an instance can be in service. The default is null. If specified, the value must be either 0 or a number equal to or greater than 86,400 seconds (1 day). For more information, see [Replacing Auto Scaling instances based on maximum instance lifetime](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-max-instance-lifetime.html) in the *Amazon EC2 Auto Scaling User Guide*. hidden MaxInstanceLifetime: (Int|Mapping)? - /// - hidden TargetGroupARNs: (Listing)? + /// The name of the launch configuration to use to launch instances. + /// + /// Required only if you don't specify ``LaunchTemplate``, ``MixedInstancesPolicy``, or ``InstanceId``. + hidden LaunchConfigurationName: (String|Mapping)? - /// - hidden Tags: (Listing)? + /// Configures an Auto Scaling group to send notifications when specified events take place. + hidden NotificationConfigurations: (Listing)? - /// - hidden NotificationConfiguration: (NotificationConfiguration)? + /// The desired capacity is the initial capacity of the Auto Scaling group at the time of its creation and the capacity it attempts to maintain. It can scale beyond this capacity if you configure automatic scaling. + /// + /// The number must be greater than or equal to the minimum size of the group and less than or equal to the maximum size of the group. If you do not specify a desired capacity when creating the stack, the default is the minimum size of the group. + /// CloudFormation marks the Auto Scaling group as successful (by setting its status to CREATE_COMPLETE) when the desired capacity is reached. However, if a maximum Spot price is set in the launch template or launch configuration that you specified, then desired capacity is not used as a criteria for success. Whether your request is fulfilled depends on Spot Instance capacity and your maximum price. + hidden DesiredCapacity: (String(matches(Regex(#"^[0-9]+$"#)))|Mapping)? + + /// Indicates whether Capacity Rebalancing is enabled. Otherwise, Capacity Rebalancing is disabled. When you turn on Capacity Rebalancing, Amazon EC2 Auto Scaling attempts to launch a Spot Instance whenever Amazon EC2 notifies that a Spot Instance is at an elevated risk of interruption. After launching a new instance, it then terminates an old instance. For more information, see [Use Capacity Rebalancing to handle Amazon EC2 Spot Interruptions](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html) in the in the *Amazon EC2 Auto Scaling User Guide*. + hidden CapacityRebalance: (Boolean|Mapping)? Properties { - ["InstanceMaintenancePolicy"] = if (InstanceMaintenancePolicy == null) null else InstanceMaintenancePolicy - ["DesiredCapacityType"] = if (DesiredCapacityType == null) null else DesiredCapacityType - ["LaunchConfigurationName"] = if (LaunchConfigurationName == null) null else LaunchConfigurationName - ["DesiredCapacity"] = if (DesiredCapacity == null) null else DesiredCapacity - ["InstanceId"] = if (InstanceId == null) null else InstanceId - ["MetricsCollection"] = if (MetricsCollection == null) null else MetricsCollection - ["LaunchTemplate"] = if (LaunchTemplate == null) null else LaunchTemplate - ["Context"] = if (Context == null) null else Context - ["MaxSize"] = if (MaxSize == null) null else MaxSize - ["TerminationPolicies"] = if (TerminationPolicies == null) null else TerminationPolicies + ["MinSize"] = if (MinSize == null) null else MinSize + ["Tags"] = if (Tags == null) null else Tags + ["NotificationConfiguration"] = if (NotificationConfiguration == null) null else NotificationConfiguration + ["PlacementGroup"] = if (PlacementGroup == null) null else PlacementGroup ["ServiceLinkedRoleARN"] = if (ServiceLinkedRoleARN == null) null else ServiceLinkedRoleARN - ["HealthCheckGracePeriod"] = if (HealthCheckGracePeriod == null) null else HealthCheckGracePeriod - ["Cooldown"] = if (Cooldown == null) null else Cooldown - ["NewInstancesProtectedFromScaleIn"] = if (NewInstancesProtectedFromScaleIn == null) null else NewInstancesProtectedFromScaleIn + ["LaunchTemplate"] = if (LaunchTemplate == null) null else LaunchTemplate ["AvailabilityZones"] = if (AvailabilityZones == null) null else AvailabilityZones - ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName + ["MetricsCollection"] = if (MetricsCollection == null) null else MetricsCollection + ["NewInstancesProtectedFromScaleIn"] = if (NewInstancesProtectedFromScaleIn == null) null else NewInstancesProtectedFromScaleIn + ["HealthCheckType"] = if (HealthCheckType == null) null else HealthCheckType + ["HealthCheckGracePeriod"] = if (HealthCheckGracePeriod == null) null else HealthCheckGracePeriod + ["Context"] = if (Context == null) null else Context + ["LoadBalancerNames"] = if (LoadBalancerNames == null) null else LoadBalancerNames + ["DefaultInstanceWarmup"] = if (DefaultInstanceWarmup == null) null else DefaultInstanceWarmup ["MixedInstancesPolicy"] = if (MixedInstancesPolicy == null) null else MixedInstancesPolicy ["VPCZoneIdentifier"] = if (VPCZoneIdentifier == null) null else VPCZoneIdentifier - ["HealthCheckType"] = if (HealthCheckType == null) null else HealthCheckType + ["InstanceId"] = if (InstanceId == null) null else InstanceId + ["InstanceMaintenancePolicy"] = if (InstanceMaintenancePolicy == null) null else InstanceMaintenancePolicy + ["MaxSize"] = if (MaxSize == null) null else MaxSize ["LifecycleHookSpecificationList"] = if (LifecycleHookSpecificationList == null) null else LifecycleHookSpecificationList + ["TargetGroupARNs"] = if (TargetGroupARNs == null) null else TargetGroupARNs + ["Cooldown"] = if (Cooldown == null) null else Cooldown + ["TerminationPolicies"] = if (TerminationPolicies == null) null else TerminationPolicies + ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName + ["DesiredCapacityType"] = if (DesiredCapacityType == null) null else DesiredCapacityType + ["MaxInstanceLifetime"] = if (MaxInstanceLifetime == null) null else MaxInstanceLifetime + ["LaunchConfigurationName"] = if (LaunchConfigurationName == null) null else LaunchConfigurationName ["NotificationConfigurations"] = if (NotificationConfigurations == null) null else NotificationConfigurations + ["DesiredCapacity"] = if (DesiredCapacity == null) null else DesiredCapacity ["CapacityRebalance"] = if (CapacityRebalance == null) null else CapacityRebalance - ["MinSize"] = if (MinSize == null) null else MinSize - ["LoadBalancerNames"] = if (LoadBalancerNames == null) null else LoadBalancerNames - ["DefaultInstanceWarmup"] = if (DefaultInstanceWarmup == null) null else DefaultInstanceWarmup - ["PlacementGroup"] = if (PlacementGroup == null) null else PlacementGroup - ["MaxInstanceLifetime"] = if (MaxInstanceLifetime == null) null else MaxInstanceLifetime - ["TargetGroupARNs"] = if (TargetGroupARNs == null) null else TargetGroupARNs - ["Tags"] = if (Tags == null) null else Tags - ["NotificationConfiguration"] = if (NotificationConfiguration == null) null else NotificationConfiguration } } diff --git a/pkl/aws/autoscaling/launchconfiguration.pkl b/pkl/aws/autoscaling/launchconfiguration.pkl index bbe9557f..212917aa 100644 --- a/pkl/aws/autoscaling/launchconfiguration.pkl +++ b/pkl/aws/autoscaling/launchconfiguration.pkl @@ -5,30 +5,30 @@ module aws.autoscaling.launchconfiguration import "../../cloudformation.pkl" -/// MetadataOptions is a property of AWS::AutoScaling::LaunchConfiguration that describes metadata options for the instances. -open class MetadataOptions { - HttpEndpoint: (String|Mapping)? - HttpPutResponseHopLimit: (Int|Mapping)? - HttpTokens: (String|Mapping)? -} - /// BlockDeviceMapping is a property of AWS::AutoScaling::LaunchConfiguration that describes a block device mapping for an Auto Scaling group. -open class BlockDeviceMapping { +open class LaunchConfigurationBlockDeviceMapping { + Ebs: (LaunchConfigurationBlockDevice)? + DeviceName: String|Mapping NoDevice: (Boolean|Mapping)? VirtualName: (String|Mapping)? - Ebs: (BlockDevice)? - DeviceName: String|Mapping } /// BlockDevice is a subproperty of BlockDeviceMapping that describes an Amazon EBS volume. -open class BlockDevice { +open class LaunchConfigurationBlockDevice { + VolumeType: (String|Mapping)? Encrypted: (Boolean|Mapping)? Iops: (Int|Mapping)? VolumeSize: (Int|Mapping)? DeleteOnTermination: (Boolean|Mapping)? Throughput: (Int|Mapping)? SnapshotId: (String|Mapping)? - VolumeType: (String|Mapping)? +} + +/// MetadataOptions is a property of AWS::AutoScaling::LaunchConfiguration that describes metadata options for the instances. +open class LaunchConfigurationMetadataOptions { + HttpPutResponseHopLimit: (Int|Mapping)? + HttpTokens: (String|Mapping)? + HttpEndpoint: (String|Mapping)? } /// The AWS::AutoScaling::LaunchConfiguration resource specifies the launch configuration that can be used by an Auto Scaling group to configure Amazon EC2 instances. @@ -37,35 +37,29 @@ open class LaunchConfiguration extends cloudformation.Resource { Type = "AWS::AutoScaling::LaunchConfiguration" - /// Provides the name or the Amazon Resource Name (ARN) of the instance profile associated with the IAM role for the instance. The instance profile contains the IAM role. - hidden IamInstanceProfile: (String|Mapping)? - - /// Provides the unique ID of the Amazon Machine Image (AMI) that was assigned during registration. - hidden ImageId: String|Mapping - - /// Provides the name of the EC2 key pair. - hidden KeyName: (String|Mapping)? - /// For Auto Scaling groups that are running in a virtual private cloud (VPC), specifies whether to assign a public IP address to the group's instances. hidden AssociatePublicIpAddress: (Boolean|Mapping)? /// Specifies whether the launch configuration is optimized for EBS I/O (true) or not (false). hidden EbsOptimized: (Boolean|Mapping)? - /// The name of the launch configuration. This name must be unique per Region per account. - hidden LaunchConfigurationName: (String|Mapping)? - - /// The metadata options for the instances. - hidden MetadataOptions: (MetadataOptions)? + /// The tenancy of the instance, either default or dedicated. + hidden PlacementTenancy: (String|Mapping)? /// The maximum hourly price you are willing to pay for any Spot Instances launched to fulfill the request. hidden SpotPrice: (String|Mapping)? - /// The IDs of one or more security groups for the VPC that you specified in the ClassicLinkVPCId property. - hidden ClassicLinkVPCSecurityGroups: (Listing)? + /// Provides the name or the Amazon Resource Name (ARN) of the instance profile associated with the IAM role for the instance. The instance profile contains the IAM role. + hidden IamInstanceProfile: (String|Mapping)? - /// Controls whether instances in this group are launched with detailed (true) or basic (false) monitoring. - hidden InstanceMonitoring: (Boolean|Mapping)? + /// Specifies the instance type of the EC2 instance. + hidden InstanceType: String|Mapping + + /// The ID of the RAM disk to select. + hidden RamDiskId: (String|Mapping)? + + /// The metadata options for the instances. + hidden MetadataOptions: (LaunchConfigurationMetadataOptions)? /// A list that contains the security groups to assign to the instances in the Auto Scaling group. hidden SecurityGroups: (Listing)? @@ -73,47 +67,53 @@ open class LaunchConfiguration extends cloudformation.Resource { /// The Base64-encoded user data to make available to the launched EC2 instances. hidden UserData: (String|Mapping)? + /// Specifies how block devices are exposed to the instance. You can specify virtual devices and EBS volumes. + hidden BlockDeviceMappings: (Listing)? + + /// The ID of a ClassicLink-enabled VPC to link your EC2-Classic instances to. + hidden ClassicLinkVPCId: (String|Mapping)? + + /// Provides the unique ID of the Amazon Machine Image (AMI) that was assigned during registration. + hidden ImageId: String|Mapping + /// Provides the ID of the kernel associated with the EC2 AMI. hidden KernelId: (String|Mapping)? - /// The ID of the RAM disk to select. - hidden RamDiskId: (String|Mapping)? + /// The name of the launch configuration. This name must be unique per Region per account. + hidden LaunchConfigurationName: (String|Mapping)? + + /// The IDs of one or more security groups for the VPC that you specified in the ClassicLinkVPCId property. + hidden ClassicLinkVPCSecurityGroups: (Listing)? /// The ID of the Amazon EC2 instance you want to use to create the launch configuration. hidden InstanceId: (String|Mapping)? - /// Specifies the instance type of the EC2 instance. - hidden InstanceType: String|Mapping - - /// The tenancy of the instance, either default or dedicated. - hidden PlacementTenancy: (String|Mapping)? - - /// Specifies how block devices are exposed to the instance. You can specify virtual devices and EBS volumes. - hidden BlockDeviceMappings: (Listing)? + /// Controls whether instances in this group are launched with detailed (true) or basic (false) monitoring. + hidden InstanceMonitoring: (Boolean|Mapping)? - /// The ID of a ClassicLink-enabled VPC to link your EC2-Classic instances to. - hidden ClassicLinkVPCId: (String|Mapping)? + /// Provides the name of the EC2 key pair. + hidden KeyName: (String|Mapping)? Properties { - ["IamInstanceProfile"] = if (IamInstanceProfile == null) null else IamInstanceProfile - ["ImageId"] = if (ImageId == null) null else ImageId - ["KeyName"] = if (KeyName == null) null else KeyName ["AssociatePublicIpAddress"] = if (AssociatePublicIpAddress == null) null else AssociatePublicIpAddress ["EbsOptimized"] = if (EbsOptimized == null) null else EbsOptimized - ["LaunchConfigurationName"] = if (LaunchConfigurationName == null) null else LaunchConfigurationName - ["MetadataOptions"] = if (MetadataOptions == null) null else MetadataOptions + ["PlacementTenancy"] = if (PlacementTenancy == null) null else PlacementTenancy ["SpotPrice"] = if (SpotPrice == null) null else SpotPrice - ["ClassicLinkVPCSecurityGroups"] = if (ClassicLinkVPCSecurityGroups == null) null else ClassicLinkVPCSecurityGroups - ["InstanceMonitoring"] = if (InstanceMonitoring == null) null else InstanceMonitoring + ["IamInstanceProfile"] = if (IamInstanceProfile == null) null else IamInstanceProfile + ["InstanceType"] = if (InstanceType == null) null else InstanceType + ["RamDiskId"] = if (RamDiskId == null) null else RamDiskId + ["MetadataOptions"] = if (MetadataOptions == null) null else MetadataOptions ["SecurityGroups"] = if (SecurityGroups == null) null else SecurityGroups ["UserData"] = if (UserData == null) null else UserData - ["KernelId"] = if (KernelId == null) null else KernelId - ["RamDiskId"] = if (RamDiskId == null) null else RamDiskId - ["InstanceId"] = if (InstanceId == null) null else InstanceId - ["InstanceType"] = if (InstanceType == null) null else InstanceType - ["PlacementTenancy"] = if (PlacementTenancy == null) null else PlacementTenancy ["BlockDeviceMappings"] = if (BlockDeviceMappings == null) null else BlockDeviceMappings ["ClassicLinkVPCId"] = if (ClassicLinkVPCId == null) null else ClassicLinkVPCId + ["ImageId"] = if (ImageId == null) null else ImageId + ["KernelId"] = if (KernelId == null) null else KernelId + ["LaunchConfigurationName"] = if (LaunchConfigurationName == null) null else LaunchConfigurationName + ["ClassicLinkVPCSecurityGroups"] = if (ClassicLinkVPCSecurityGroups == null) null else ClassicLinkVPCSecurityGroups + ["InstanceId"] = if (InstanceId == null) null else InstanceId + ["InstanceMonitoring"] = if (InstanceMonitoring == null) null else InstanceMonitoring + ["KeyName"] = if (KeyName == null) null else KeyName } } diff --git a/pkl/aws/autoscaling/lifecyclehook.pkl b/pkl/aws/autoscaling/lifecyclehook.pkl index df2229b5..f0b7b52e 100644 --- a/pkl/aws/autoscaling/lifecyclehook.pkl +++ b/pkl/aws/autoscaling/lifecyclehook.pkl @@ -11,6 +11,12 @@ open class LifecycleHook extends cloudformation.Resource { Type = "AWS::AutoScaling::LifecycleHook" + /// The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target, for example, an Amazon SNS topic or an Amazon SQS queue. + hidden RoleARN: (String|Mapping)? + + /// The name of the Auto Scaling group for the lifecycle hook. + hidden AutoScalingGroupName: String|Mapping + /// The action the Auto Scaling group takes when the lifecycle hook timeout elapses or if an unexpected failure occurs. The valid values are CONTINUE and ABANDON (default). hidden DefaultResult: (String|Mapping)? @@ -29,21 +35,15 @@ open class LifecycleHook extends cloudformation.Resource { /// The Amazon Resource Name (ARN) of the notification target that Amazon EC2 Auto Scaling uses to notify you when an instance is in the transition state for the lifecycle hook. You can specify an Amazon SQS queue or an Amazon SNS topic. The notification message includes the following information: lifecycle action token, user account ID, Auto Scaling group name, lifecycle hook name, instance ID, lifecycle transition, and notification metadata. hidden NotificationTargetARN: (String|Mapping)? - /// The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target, for example, an Amazon SNS topic or an Amazon SQS queue. - hidden RoleARN: (String|Mapping)? - - /// The name of the Auto Scaling group for the lifecycle hook. - hidden AutoScalingGroupName: String|Mapping - Properties { + ["RoleARN"] = if (RoleARN == null) null else RoleARN + ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName ["DefaultResult"] = if (DefaultResult == null) null else DefaultResult ["HeartbeatTimeout"] = if (HeartbeatTimeout == null) null else HeartbeatTimeout ["LifecycleHookName"] = if (LifecycleHookName == null) null else LifecycleHookName ["LifecycleTransition"] = if (LifecycleTransition == null) null else LifecycleTransition ["NotificationMetadata"] = if (NotificationMetadata == null) null else NotificationMetadata ["NotificationTargetARN"] = if (NotificationTargetARN == null) null else NotificationTargetARN - ["RoleARN"] = if (RoleARN == null) null else RoleARN - ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName } } diff --git a/pkl/aws/autoscaling/scalingpolicy.pkl b/pkl/aws/autoscaling/scalingpolicy.pkl index db24ca98..ea515537 100644 --- a/pkl/aws/autoscaling/scalingpolicy.pkl +++ b/pkl/aws/autoscaling/scalingpolicy.pkl @@ -6,115 +6,115 @@ module aws.autoscaling.scalingpolicy import "../../cloudformation.pkl" /// -open class PredictiveScalingPredefinedScalingMetric { - ResourceLabel: (String|Mapping)? - PredefinedMetricType: String|Mapping +open class ScalingPolicyPredictiveScalingCustomizedLoadMetric { + MetricDataQueries: Listing } /// -open class PredictiveScalingCustomizedCapacityMetric { - MetricDataQueries: Listing +open class ScalingPolicyStepAdjustment { + MetricIntervalUpperBound: (Number|Mapping)? + MetricIntervalLowerBound: (Number|Mapping)? + ScalingAdjustment: Int|Mapping } /// -open class PredictiveScalingCustomizedScalingMetric { - MetricDataQueries: Listing +open class ScalingPolicyPredictiveScalingCustomizedCapacityMetric { + MetricDataQueries: Listing } /// -open class CustomizedMetricSpecification { - MetricName: String|Mapping - Dimensions: (Listing)? - Statistic: String|Mapping - Unit: (String|Mapping)? - Namespace: String|Mapping +open class ScalingPolicyPredictiveScalingPredefinedScalingMetric { + ResourceLabel: (String|Mapping)? + PredefinedMetricType: String|Mapping } /// -open class PredictiveScalingPredefinedLoadMetric { - ResourceLabel: (String|Mapping)? - PredefinedMetricType: String|Mapping +open class ScalingPolicyPredictiveScalingMetricSpecification { + PredefinedLoadMetricSpecification: (ScalingPolicyPredictiveScalingPredefinedLoadMetric)? + TargetValue: Number|Mapping + PredefinedScalingMetricSpecification: (ScalingPolicyPredictiveScalingPredefinedScalingMetric)? + PredefinedMetricPairSpecification: (ScalingPolicyPredictiveScalingPredefinedMetricPair)? + CustomizedCapacityMetricSpecification: (ScalingPolicyPredictiveScalingCustomizedCapacityMetric)? + CustomizedLoadMetricSpecification: (ScalingPolicyPredictiveScalingCustomizedLoadMetric)? + CustomizedScalingMetricSpecification: (ScalingPolicyPredictiveScalingCustomizedScalingMetric)? } /// -open class PredictiveScalingPredefinedMetricPair { +open class ScalingPolicyPredefinedMetricSpecification { ResourceLabel: (String|Mapping)? PredefinedMetricType: String|Mapping } /// -open class PredictiveScalingCustomizedLoadMetric { - MetricDataQueries: Listing +open class ScalingPolicyMetric { + MetricName: String|Mapping + Dimensions: (Listing)? + Namespace: String|Mapping +} + +/// +open class ScalingPolicyPredictiveScalingCustomizedScalingMetric { + MetricDataQueries: Listing } /// -open class MetricDataQuery { +open class ScalingPolicyMetricDataQuery { Label: (String|Mapping)? - MetricStat: (MetricStat)? + MetricStat: (ScalingPolicyMetricStat)? Id: String|Mapping ReturnData: (Boolean|Mapping)? Expression: (String|Mapping)? } /// -open class Metric { - Dimensions: (Listing)? - Namespace: String|Mapping - MetricName: String|Mapping +open class ScalingPolicyTargetTrackingConfiguration { + CustomizedMetricSpecification: (ScalingPolicyCustomizedMetricSpecification)? + TargetValue: Number|Mapping + DisableScaleIn: (Boolean|Mapping)? + PredefinedMetricSpecification: (ScalingPolicyPredefinedMetricSpecification)? } /// -open class MetricStat { - Metric: Metric - Stat: String|Mapping - Unit: (String|Mapping)? +open class ScalingPolicyMetricDimension { + Value: String|Mapping + Name: String|Mapping } /// -open class PredictiveScalingConfiguration { +open class ScalingPolicyPredictiveScalingConfiguration { + MetricSpecifications: Listing MaxCapacityBreachBehavior: (String|Mapping)? MaxCapacityBuffer: (Int|Mapping)? SchedulingBufferTime: (Int|Mapping)? Mode: (String|Mapping)? - MetricSpecifications: Listing -} - -/// -open class TargetTrackingConfiguration { - DisableScaleIn: (Boolean|Mapping)? - PredefinedMetricSpecification: (PredefinedMetricSpecification)? - CustomizedMetricSpecification: (CustomizedMetricSpecification)? - TargetValue: Number|Mapping } /// -open class MetricDimension { - Value: String|Mapping - Name: String|Mapping +open class ScalingPolicyPredictiveScalingPredefinedLoadMetric { + ResourceLabel: (String|Mapping)? + PredefinedMetricType: String|Mapping } /// -open class PredictiveScalingMetricSpecification { - CustomizedLoadMetricSpecification: (PredictiveScalingCustomizedLoadMetric)? - CustomizedScalingMetricSpecification: (PredictiveScalingCustomizedScalingMetric)? - PredefinedLoadMetricSpecification: (PredictiveScalingPredefinedLoadMetric)? - TargetValue: Number|Mapping - PredefinedScalingMetricSpecification: (PredictiveScalingPredefinedScalingMetric)? - PredefinedMetricPairSpecification: (PredictiveScalingPredefinedMetricPair)? - CustomizedCapacityMetricSpecification: (PredictiveScalingCustomizedCapacityMetric)? +open class ScalingPolicyPredictiveScalingPredefinedMetricPair { + ResourceLabel: (String|Mapping)? + PredefinedMetricType: String|Mapping } /// -open class StepAdjustment { - ScalingAdjustment: Int|Mapping - MetricIntervalUpperBound: (Number|Mapping)? - MetricIntervalLowerBound: (Number|Mapping)? +open class ScalingPolicyMetricStat { + Metric: ScalingPolicyMetric + Stat: String|Mapping + Unit: (String|Mapping)? } /// -open class PredefinedMetricSpecification { - ResourceLabel: (String|Mapping)? - PredefinedMetricType: String|Mapping +open class ScalingPolicyCustomizedMetricSpecification { + MetricName: String|Mapping + Dimensions: (Listing)? + Statistic: String|Mapping + Unit: (String|Mapping)? + Namespace: String|Mapping } /// The AWS::AutoScaling::ScalingPolicy resource specifies an Amazon EC2 Auto Scaling scaling policy so that the Auto Scaling group can scale the number of instances available for your application. @@ -123,51 +123,51 @@ open class ScalingPolicy extends cloudformation.Resource { Type = "AWS::AutoScaling::ScalingPolicy" - /// One of the following policy types: TargetTrackingScaling, StepScaling, SimpleScaling (default), PredictiveScaling - hidden PolicyType: (String|Mapping)? - - /// A predictive scaling policy. Includes support for predefined metrics only. - hidden PredictiveScalingConfiguration: (PredictiveScalingConfiguration)? + /// The aggregation type for the CloudWatch metrics. The valid values are Minimum, Maximum, and Average. If the aggregation type is null, the value is treated as Average. Valid only if the policy type is StepScaling. + hidden MetricAggregationType: (String|Mapping)? /// The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a positive value. Required if the policy type is SimpleScaling. (Not used with any other policy type.) hidden ScalingAdjustment: (Int|Mapping)? + /// The duration of the policy's cooldown period, in seconds. When a cooldown period is specified here, it overrides the default cooldown period defined for the Auto Scaling group. + hidden Cooldown: (String|Mapping)? + /// The name of the Auto Scaling group. hidden AutoScalingGroupName: String|Mapping - /// A target tracking scaling policy. Includes support for predefined or customized metrics. - hidden TargetTrackingConfiguration: (TargetTrackingConfiguration)? - - /// Specifies how the scaling adjustment is interpreted. The valid values are ChangeInCapacity, ExactCapacity, and PercentChangeInCapacity. - hidden AdjustmentType: (String|Mapping)? - - /// The aggregation type for the CloudWatch metrics. The valid values are Minimum, Maximum, and Average. If the aggregation type is null, the value is treated as Average. Valid only if the policy type is StepScaling. - hidden MetricAggregationType: (String|Mapping)? + /// The minimum value to scale by when the adjustment type is PercentChangeInCapacity. For example, suppose that you create a step scaling policy to scale out an Auto Scaling group by 25 percent and you specify a MinAdjustmentMagnitude of 2. If the group has 4 instances and the scaling policy is performed, 25 percent of 4 is 1. However, because you specified a MinAdjustmentMagnitude of 2, Amazon EC2 Auto Scaling scales out the group by 2 instances. + hidden MinAdjustmentMagnitude: (Int|Mapping)? - /// The duration of the policy's cooldown period, in seconds. When a cooldown period is specified here, it overrides the default cooldown period defined for the Auto Scaling group. - hidden Cooldown: (String|Mapping)? + /// One of the following policy types: TargetTrackingScaling, StepScaling, SimpleScaling (default), PredictiveScaling + hidden PolicyType: (String|Mapping)? /// A set of adjustments that enable you to scale based on the size of the alarm breach. Required if the policy type is StepScaling. (Not used with any other policy type.) - hidden StepAdjustments: (Listing)? + hidden StepAdjustments: (Listing)? - /// The minimum value to scale by when the adjustment type is PercentChangeInCapacity. For example, suppose that you create a step scaling policy to scale out an Auto Scaling group by 25 percent and you specify a MinAdjustmentMagnitude of 2. If the group has 4 instances and the scaling policy is performed, 25 percent of 4 is 1. However, because you specified a MinAdjustmentMagnitude of 2, Amazon EC2 Auto Scaling scales out the group by 2 instances. - hidden MinAdjustmentMagnitude: (Int|Mapping)? + /// A predictive scaling policy. Includes support for predefined metrics only. + hidden PredictiveScalingConfiguration: (ScalingPolicyPredictiveScalingConfiguration)? + + /// A target tracking scaling policy. Includes support for predefined or customized metrics. + hidden TargetTrackingConfiguration: (ScalingPolicyTargetTrackingConfiguration)? /// The estimated time, in seconds, until a newly launched instance can contribute to the CloudWatch metrics. If not provided, the default is to use the value from the default cooldown period for the Auto Scaling group. Valid only if the policy type is TargetTrackingScaling or StepScaling. hidden EstimatedInstanceWarmup: (Int|Mapping)? + /// Specifies how the scaling adjustment is interpreted. The valid values are ChangeInCapacity, ExactCapacity, and PercentChangeInCapacity. + hidden AdjustmentType: (String|Mapping)? + Properties { - ["PolicyType"] = if (PolicyType == null) null else PolicyType - ["PredictiveScalingConfiguration"] = if (PredictiveScalingConfiguration == null) null else PredictiveScalingConfiguration - ["ScalingAdjustment"] = if (ScalingAdjustment == null) null else ScalingAdjustment - ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName - ["TargetTrackingConfiguration"] = if (TargetTrackingConfiguration == null) null else TargetTrackingConfiguration - ["AdjustmentType"] = if (AdjustmentType == null) null else AdjustmentType ["MetricAggregationType"] = if (MetricAggregationType == null) null else MetricAggregationType + ["ScalingAdjustment"] = if (ScalingAdjustment == null) null else ScalingAdjustment ["Cooldown"] = if (Cooldown == null) null else Cooldown - ["StepAdjustments"] = if (StepAdjustments == null) null else StepAdjustments + ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName ["MinAdjustmentMagnitude"] = if (MinAdjustmentMagnitude == null) null else MinAdjustmentMagnitude + ["PolicyType"] = if (PolicyType == null) null else PolicyType + ["StepAdjustments"] = if (StepAdjustments == null) null else StepAdjustments + ["PredictiveScalingConfiguration"] = if (PredictiveScalingConfiguration == null) null else PredictiveScalingConfiguration + ["TargetTrackingConfiguration"] = if (TargetTrackingConfiguration == null) null else TargetTrackingConfiguration ["EstimatedInstanceWarmup"] = if (EstimatedInstanceWarmup == null) null else EstimatedInstanceWarmup + ["AdjustmentType"] = if (AdjustmentType == null) null else AdjustmentType } } diff --git a/pkl/aws/autoscaling/scheduledaction.pkl b/pkl/aws/autoscaling/scheduledaction.pkl index 1170ff51..5afab5de 100644 --- a/pkl/aws/autoscaling/scheduledaction.pkl +++ b/pkl/aws/autoscaling/scheduledaction.pkl @@ -11,38 +11,38 @@ open class ScheduledAction extends cloudformation.Resource { Type = "AWS::AutoScaling::ScheduledAction" - /// The minimum size of the Auto Scaling group. - hidden MinSize: (Int|Mapping)? + /// The recurring schedule for the action, in Unix cron syntax format. When StartTime and EndTime are specified with Recurrence , they form the boundaries of when the recurring action starts and stops. + hidden Recurrence: (String|Mapping)? /// The latest scheduled start time to return. If scheduled action names are provided, this parameter is ignored. hidden EndTime: (String|Mapping)? - /// The name of the Auto Scaling group. - hidden AutoScalingGroupName: String|Mapping - /// The earliest scheduled start time to return. If scheduled action names are provided, this parameter is ignored. hidden StartTime: (String|Mapping)? /// The desired capacity is the initial capacity of the Auto Scaling group after the scheduled action runs and the capacity it attempts to maintain. hidden DesiredCapacity: (Int|Mapping)? - /// The recurring schedule for the action, in Unix cron syntax format. When StartTime and EndTime are specified with Recurrence , they form the boundaries of when the recurring action starts and stops. - hidden Recurrence: (String|Mapping)? + /// The minimum size of the Auto Scaling group. + hidden MinSize: (Int|Mapping)? /// The time zone for the cron expression. hidden TimeZone: (String|Mapping)? + /// The name of the Auto Scaling group. + hidden AutoScalingGroupName: String|Mapping + /// The minimum size of the Auto Scaling group. hidden MaxSize: (Int|Mapping)? Properties { - ["MinSize"] = if (MinSize == null) null else MinSize + ["Recurrence"] = if (Recurrence == null) null else Recurrence ["EndTime"] = if (EndTime == null) null else EndTime - ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName ["StartTime"] = if (StartTime == null) null else StartTime ["DesiredCapacity"] = if (DesiredCapacity == null) null else DesiredCapacity - ["Recurrence"] = if (Recurrence == null) null else Recurrence + ["MinSize"] = if (MinSize == null) null else MinSize ["TimeZone"] = if (TimeZone == null) null else TimeZone + ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName ["MaxSize"] = if (MaxSize == null) null else MaxSize } diff --git a/pkl/aws/autoscaling/warmpool.pkl b/pkl/aws/autoscaling/warmpool.pkl index 343d6b34..9e6b4a04 100644 --- a/pkl/aws/autoscaling/warmpool.pkl +++ b/pkl/aws/autoscaling/warmpool.pkl @@ -6,7 +6,7 @@ module aws.autoscaling.warmpool import "../../cloudformation.pkl" /// -open class InstanceReusePolicy { +open class WarmPoolInstanceReusePolicy { ReuseOnScaleIn: (Boolean|Mapping)? } @@ -17,26 +17,26 @@ open class WarmPool extends cloudformation.Resource { /// - hidden AutoScalingGroupName: String|Mapping + hidden PoolState: (String|Mapping)? /// - hidden MaxGroupPreparedCapacity: (Int|Mapping)? + hidden InstanceReusePolicy: (WarmPoolInstanceReusePolicy)? /// - hidden MinSize: (Int|Mapping)? + hidden AutoScalingGroupName: String|Mapping /// - hidden PoolState: (String|Mapping)? + hidden MaxGroupPreparedCapacity: (Int|Mapping)? /// - hidden InstanceReusePolicy: (InstanceReusePolicy)? + hidden MinSize: (Int|Mapping)? Properties { + ["PoolState"] = if (PoolState == null) null else PoolState + ["InstanceReusePolicy"] = if (InstanceReusePolicy == null) null else InstanceReusePolicy ["AutoScalingGroupName"] = if (AutoScalingGroupName == null) null else AutoScalingGroupName ["MaxGroupPreparedCapacity"] = if (MaxGroupPreparedCapacity == null) null else MaxGroupPreparedCapacity ["MinSize"] = if (MinSize == null) null else MinSize - ["PoolState"] = if (PoolState == null) null else PoolState - ["InstanceReusePolicy"] = if (InstanceReusePolicy == null) null else InstanceReusePolicy } } diff --git a/pkl/aws/autoscalingplans/scalingplan.pkl b/pkl/aws/autoscalingplans/scalingplan.pkl index b5c79ede..ffb08766 100644 --- a/pkl/aws/autoscalingplans/scalingplan.pkl +++ b/pkl/aws/autoscalingplans/scalingplan.pkl @@ -6,80 +6,80 @@ module aws.autoscalingplans.scalingplan import "../../cloudformation.pkl" /// -open class ScalingInstruction { - PredictiveScalingMaxCapacityBehavior: (String|Mapping)? - ResourceId: String|Mapping - ScheduledActionBufferTime: (Int|Mapping)? - MinCapacity: Int|Mapping - CustomizedLoadMetricSpecification: (CustomizedLoadMetricSpecification)? - ScalingPolicyUpdateBehavior: (String|Mapping)? - TargetTrackingConfigurations: Listing - MaxCapacity: Int|Mapping - DisableDynamicScaling: (Boolean|Mapping)? - ScalableDimension: String|Mapping - PredefinedLoadMetricSpecification: (PredefinedLoadMetricSpecification)? - PredictiveScalingMode: (String|Mapping)? - ServiceNamespace: String|Mapping - PredictiveScalingMaxCapacityBuffer: (Int|Mapping)? +open class ScalingPlanTagFilter { + Values: (Listing)? + Key: String|Mapping } /// -open class ApplicationSource { - CloudFormationStackARN: (String|Mapping)? - TagFilters: (Listing)? +open class ScalingPlanPredefinedScalingMetricSpecification { + ResourceLabel: (String|Mapping)? + PredefinedScalingMetricType: String|Mapping } /// -open class PredefinedLoadMetricSpecification { - PredefinedLoadMetricType: String|Mapping - ResourceLabel: (String|Mapping)? +open class ScalingPlanTargetTrackingConfiguration { + PredefinedScalingMetricSpecification: (ScalingPlanPredefinedScalingMetricSpecification)? + DisableScaleIn: (Boolean|Mapping)? + ScaleInCooldown: (Int|Mapping)? + EstimatedInstanceWarmup: (Int|Mapping)? + CustomizedScalingMetricSpecification: (ScalingPlanCustomizedScalingMetricSpecification)? + ScaleOutCooldown: (Int|Mapping)? + TargetValue: Number|Mapping } /// -open class PredefinedScalingMetricSpecification { - ResourceLabel: (String|Mapping)? - PredefinedScalingMetricType: String|Mapping +open class ScalingPlanApplicationSource { + CloudFormationStackARN: (String|Mapping)? + TagFilters: (Listing)? } /// -open class MetricDimension { +open class ScalingPlanMetricDimension { Value: String|Mapping Name: String|Mapping } /// -open class TargetTrackingConfiguration { - EstimatedInstanceWarmup: (Int|Mapping)? - CustomizedScalingMetricSpecification: (CustomizedScalingMetricSpecification)? - ScaleOutCooldown: (Int|Mapping)? - TargetValue: Number|Mapping - PredefinedScalingMetricSpecification: (PredefinedScalingMetricSpecification)? - DisableScaleIn: (Boolean|Mapping)? - ScaleInCooldown: (Int|Mapping)? -} - -/// -open class CustomizedLoadMetricSpecification { +open class ScalingPlanCustomizedLoadMetricSpecification { + Statistic: String|Mapping + Dimensions: (Listing)? Unit: (String|Mapping)? Namespace: String|Mapping MetricName: String|Mapping - Statistic: String|Mapping - Dimensions: (Listing)? } /// -open class TagFilter { - Values: (Listing)? - Key: String|Mapping +open class ScalingPlanPredefinedLoadMetricSpecification { + PredefinedLoadMetricType: String|Mapping + ResourceLabel: (String|Mapping)? } /// -open class CustomizedScalingMetricSpecification { - MetricName: String|Mapping - Statistic: String|Mapping - Dimensions: (Listing)? +open class ScalingPlanScalingInstruction { + TargetTrackingConfigurations: Listing + PredictiveScalingMaxCapacityBuffer: (Int|Mapping)? + PredefinedLoadMetricSpecification: (ScalingPlanPredefinedLoadMetricSpecification)? + DisableDynamicScaling: (Boolean|Mapping)? + MinCapacity: Int|Mapping + MaxCapacity: Int|Mapping + PredictiveScalingMode: (String|Mapping)? + ServiceNamespace: String|Mapping + ScalingPolicyUpdateBehavior: (String|Mapping)? + CustomizedLoadMetricSpecification: (ScalingPlanCustomizedLoadMetricSpecification)? + PredictiveScalingMaxCapacityBehavior: (String|Mapping)? + ScalableDimension: String|Mapping + ResourceId: String|Mapping + ScheduledActionBufferTime: (Int|Mapping)? +} + +/// +open class ScalingPlanCustomizedScalingMetricSpecification { + Dimensions: (Listing)? Unit: (String|Mapping)? Namespace: String|Mapping + MetricName: String|Mapping + Statistic: String|Mapping } /// Resource Type definition for AWS::AutoScalingPlans::ScalingPlan @@ -89,10 +89,10 @@ open class ScalingPlan extends cloudformation.Resource { /// - hidden ApplicationSource: ApplicationSource + hidden ApplicationSource: ScalingPlanApplicationSource /// - hidden ScalingInstructions: Listing + hidden ScalingInstructions: Listing Properties { ["ApplicationSource"] = if (ApplicationSource == null) null else ApplicationSource diff --git a/pkl/aws/backup/backupplan.pkl b/pkl/aws/backup/backupplan.pkl index 1b5abf04..f60fb402 100644 --- a/pkl/aws/backup/backupplan.pkl +++ b/pkl/aws/backup/backupplan.pkl @@ -6,40 +6,42 @@ module aws.backup.backupplan import "../../cloudformation.pkl" /// -open class BackupPlanResourceType { +open class BackupPlanBackupPlanResourceType { + AdvancedBackupSettings: (Listing)? + BackupPlanRule: Listing BackupPlanName: String|Mapping - AdvancedBackupSettings: (Listing)? - BackupPlanRule: Listing } +typealias BackupPlanBackupRuleResourceTypeRecoveryPointTags = Mapping + /// -open class BackupRuleResourceType { +open class BackupPlanBackupRuleResourceType { TargetBackupVault: String|Mapping - EnableContinuousBackup: (Boolean|Mapping)? - RecoveryPointTags: (Dynamic)? - CopyActions: (Listing)? - Lifecycle: (LifecycleResourceType)? - RuleName: String|Mapping StartWindowMinutes: (Number|Mapping)? CompletionWindowMinutes: (Number|Mapping)? + RecoveryPointTags: (BackupPlanBackupRuleResourceTypeRecoveryPointTags)? + CopyActions: (Listing)? + RuleName: String|Mapping ScheduleExpression: (String|Mapping)? ScheduleExpressionTimezone: (String|Mapping)? + Lifecycle: (BackupPlanLifecycleResourceType)? + EnableContinuousBackup: (Boolean|Mapping)? } /// -open class AdvancedBackupSettingResourceType { +open class BackupPlanAdvancedBackupSettingResourceType { BackupOptions: Dynamic ResourceType: String|Mapping } /// -open class CopyActionResourceType { +open class BackupPlanCopyActionResourceType { + Lifecycle: (BackupPlanLifecycleResourceType)? DestinationBackupVaultArn: String|Mapping - Lifecycle: (LifecycleResourceType)? } /// -open class LifecycleResourceType { +open class BackupPlanLifecycleResourceType { MoveToColdStorageAfterDays: (Number|Mapping)? DeleteAfterDays: (Number|Mapping)? OptInToArchiveForSupportedResources: (Boolean|Mapping)? @@ -52,10 +54,10 @@ open class BackupPlan extends cloudformation.Resource { /// - hidden BackupPlan: BackupPlanResourceType + hidden BackupPlan: BackupPlanBackupPlanResourceType /// - hidden BackupPlanTags: (Dynamic)? + hidden BackupPlanTags: (BackupPlanBackupPlanBackupPlanTags)? Properties { ["BackupPlan"] = if (BackupPlan == null) null else BackupPlan @@ -63,3 +65,6 @@ open class BackupPlan extends cloudformation.Resource { } } + + +typealias BackupPlanBackupPlanBackupPlanTags = Mapping diff --git a/pkl/aws/backup/backupselection.pkl b/pkl/aws/backup/backupselection.pkl index c4a6ab41..67fe37c4 100644 --- a/pkl/aws/backup/backupselection.pkl +++ b/pkl/aws/backup/backupselection.pkl @@ -6,23 +6,23 @@ module aws.backup.backupselection import "../../cloudformation.pkl" /// -open class BackupSelectionResourceType { +open class BackupSelectionBackupSelectionResourceType { NotResources: (Listing)? Conditions: (Dynamic)? IamRoleArn: String|Mapping - ListOfTags: (Listing)? + ListOfTags: (Listing)? Resources: (Listing)? SelectionName: String|Mapping } /// -open class ConditionParameter { +open class BackupSelectionConditionParameter { ConditionKey: (String|Mapping)? ConditionValue: (String|Mapping)? } /// -open class ConditionResourceType { +open class BackupSelectionConditionResourceType { ConditionValue: String|Mapping ConditionType: String|Mapping ConditionKey: String|Mapping @@ -38,7 +38,7 @@ open class BackupSelection extends cloudformation.Resource { hidden BackupPlanId: String|Mapping /// - hidden BackupSelection: BackupSelectionResourceType + hidden BackupSelection: BackupSelectionBackupSelectionResourceType Properties { ["BackupPlanId"] = if (BackupPlanId == null) null else BackupPlanId diff --git a/pkl/aws/backup/backupvault.pkl b/pkl/aws/backup/backupvault.pkl index 322a1e92..73a181b3 100644 --- a/pkl/aws/backup/backupvault.pkl +++ b/pkl/aws/backup/backupvault.pkl @@ -6,21 +6,20 @@ module aws.backup.backupvault import "../../cloudformation.pkl" /// -open class NotificationObjectType { +open class BackupVaultNotificationObjectType { BackupVaultEvents: Listing SNSTopicArn: String|Mapping } /// -open class LockConfigurationType { +open class BackupVaultLockConfigurationType { + MinRetentionDays: Int|Mapping MaxRetentionDays: (Int|Mapping)? ChangeableForDays: (Int|Mapping)? - MinRetentionDays: Int|Mapping } -/// -open class BackupVaultNamePattern { -} +typealias BackupVaultBackupVaultNamePattern = String|Mapping + /// Resource Type definition for AWS::Backup::BackupVault open class BackupVault extends cloudformation.Resource { @@ -29,30 +28,33 @@ open class BackupVault extends cloudformation.Resource { /// - hidden EncryptionKeyArn: (String|Mapping)? + hidden BackupVaultName: BackupVaultBackupVaultNamePattern /// - hidden Notifications: (NotificationObjectType)? + hidden BackupVaultTags: (BackupVaultBackupVaultBackupVaultTags)? /// - hidden LockConfiguration: (LockConfigurationType)? + hidden EncryptionKeyArn: (String|Mapping)? /// - hidden AccessPolicy: (Dynamic)? + hidden Notifications: (BackupVaultNotificationObjectType)? /// - hidden BackupVaultName: BackupVaultNamePattern + hidden LockConfiguration: (BackupVaultLockConfigurationType)? /// - hidden BackupVaultTags: (Dynamic)? + hidden AccessPolicy: (Dynamic)? Properties { + ["BackupVaultName"] = if (BackupVaultName == null) null else BackupVaultName + ["BackupVaultTags"] = if (BackupVaultTags == null) null else BackupVaultTags ["EncryptionKeyArn"] = if (EncryptionKeyArn == null) null else EncryptionKeyArn ["Notifications"] = if (Notifications == null) null else Notifications ["LockConfiguration"] = if (LockConfiguration == null) null else LockConfiguration ["AccessPolicy"] = if (AccessPolicy == null) null else AccessPolicy - ["BackupVaultName"] = if (BackupVaultName == null) null else BackupVaultName - ["BackupVaultTags"] = if (BackupVaultTags == null) null else BackupVaultTags } } + + +typealias BackupVaultBackupVaultBackupVaultTags = Mapping diff --git a/pkl/aws/backup/framework.pkl b/pkl/aws/backup/framework.pkl index 4220a004..d13376cf 100644 --- a/pkl/aws/backup/framework.pkl +++ b/pkl/aws/backup/framework.pkl @@ -6,20 +6,20 @@ module aws.backup.framework import "../../cloudformation.pkl" /// -open class FrameworkControl { - ControlName: String|Mapping - ControlInputParameters: (Listing)? +open class FrameworkFrameworkControl { + ControlInputParameters: (Listing)? ControlScope: (Dynamic)? + ControlName: String|Mapping } /// -open class ControlInputParameter { +open class FrameworkControlInputParameter { ParameterName: String|Mapping ParameterValue: String|Mapping } /// A key-value pair to associate with a resource. -open class Tag { +open class FrameworkTag { Key: (String|Mapping)? Value: (String|Mapping)? } @@ -30,23 +30,23 @@ open class Framework extends cloudformation.Resource { Type = "AWS::Backup::Framework" + /// Contains detailed information about all of the controls of a framework. Each framework must contain at least one control. + hidden FrameworkControls: Listing + + /// Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair. + hidden FrameworkTags: (Listing)? + /// The unique name of a framework. This name is between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_). hidden FrameworkName: (String(matches(Regex(#"[a-zA-Z][_a-zA-Z0-9]*"#)))|Mapping)? /// An optional description of the framework with a maximum 1,024 characters. hidden FrameworkDescription: (String|Mapping)? - /// Contains detailed information about all of the controls of a framework. Each framework must contain at least one control. - hidden FrameworkControls: Listing - - /// Metadata that you can assign to help organize the frameworks that you create. Each tag is a key-value pair. - hidden FrameworkTags: (Listing)? - Properties { - ["FrameworkName"] = if (FrameworkName == null) null else FrameworkName - ["FrameworkDescription"] = if (FrameworkDescription == null) null else FrameworkDescription ["FrameworkControls"] = if (FrameworkControls == null) null else FrameworkControls ["FrameworkTags"] = if (FrameworkTags == null) null else FrameworkTags + ["FrameworkName"] = if (FrameworkName == null) null else FrameworkName + ["FrameworkDescription"] = if (FrameworkDescription == null) null else FrameworkDescription } } diff --git a/pkl/aws/backup/reportplan.pkl b/pkl/aws/backup/reportplan.pkl index 030d2598..36bed93f 100644 --- a/pkl/aws/backup/reportplan.pkl +++ b/pkl/aws/backup/reportplan.pkl @@ -6,7 +6,7 @@ module aws.backup.reportplan import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class ReportPlanTag { Key: (String|Mapping)? Value: (String|Mapping)? } @@ -17,14 +17,11 @@ open class ReportPlan extends cloudformation.Resource { Type = "AWS::Backup::ReportPlan" - /// The unique name of the report plan. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_). - hidden ReportPlanName: (String(matches(Regex(#"[a-zA-Z][_a-zA-Z0-9]*"#)))|Mapping)? - /// An optional description of the report plan with a maximum of 1,024 characters. hidden ReportPlanDescription: (String(matches(Regex(#".*\S.*"#)))|Mapping)? /// Metadata that you can assign to help organize the report plans that you create. Each tag is a key-value pair. - hidden ReportPlanTags: (Listing)? + hidden ReportPlanTags: (Listing)? /// A structure that contains information about where and how to deliver your reports, specifically your Amazon S3 bucket name, S3 key prefix, and the formats of your reports. hidden ReportDeliveryChannel: Dynamic @@ -32,12 +29,15 @@ open class ReportPlan extends cloudformation.Resource { /// Identifies the report template for the report. Reports are built using a report template. hidden ReportSetting: Dynamic + /// The unique name of the report plan. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_). + hidden ReportPlanName: (String(matches(Regex(#"[a-zA-Z][_a-zA-Z0-9]*"#)))|Mapping)? + Properties { - ["ReportPlanName"] = if (ReportPlanName == null) null else ReportPlanName ["ReportPlanDescription"] = if (ReportPlanDescription == null) null else ReportPlanDescription ["ReportPlanTags"] = if (ReportPlanTags == null) null else ReportPlanTags ["ReportDeliveryChannel"] = if (ReportDeliveryChannel == null) null else ReportDeliveryChannel ["ReportSetting"] = if (ReportSetting == null) null else ReportSetting + ["ReportPlanName"] = if (ReportPlanName == null) null else ReportPlanName } } diff --git a/pkl/aws/backupgateway/hypervisor.pkl b/pkl/aws/backupgateway/hypervisor.pkl index e82eddce..565bae0f 100644 --- a/pkl/aws/backupgateway/hypervisor.pkl +++ b/pkl/aws/backupgateway/hypervisor.pkl @@ -5,19 +5,17 @@ module aws.backupgateway.hypervisor import "../../cloudformation.pkl" -/// -open class SyncMetadataStatus { -} +typealias HypervisorSyncMetadataStatus = String|Mapping + /// -open class Tag { +open class HypervisorTag { Key: String(matches(Regex(#"^([\p{L}\p{Z}\p{N}_.:/=+\-@]*)$"#)))|Mapping Value: String(matches(Regex(#"^[^\x00]*$"#)))|Mapping } -/// -open class HypervisorState { -} +typealias HypervisorHypervisorState = String|Mapping + /// Definition of AWS::BackupGateway::Hypervisor Resource Type open class Hypervisor extends cloudformation.Resource { @@ -25,11 +23,14 @@ open class Hypervisor extends cloudformation.Resource { Type = "AWS::BackupGateway::Hypervisor" + /// + hidden Name: (String(matches(Regex(#"^[a-zA-Z0-9-]*$"#)))|Mapping)? + /// hidden Password: (String(matches(Regex(#"^[ -~]+$"#)))|Mapping)? /// - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// hidden Username: (String(matches(Regex(#"^[ -\.0-\[\]-~]*[!-\.0-\[\]-~][ -\.0-\[\]-~]*$"#)))|Mapping)? @@ -43,17 +44,14 @@ open class Hypervisor extends cloudformation.Resource { /// hidden LogGroupArn: (String(matches(Regex(#"^$|^arn:(aws|aws-cn|aws-us-gov):logs:([a-zA-Z0-9-]+):([0-9]+):log-group:[a-zA-Z0-9_\-\/\.]+:\*$"#)))|Mapping)? - /// - hidden Name: (String(matches(Regex(#"^[a-zA-Z0-9-]*$"#)))|Mapping)? - Properties { + ["Name"] = if (Name == null) null else Name ["Password"] = if (Password == null) null else Password ["Tags"] = if (Tags == null) null else Tags ["Username"] = if (Username == null) null else Username ["Host"] = if (Host == null) null else Host ["KmsKeyArn"] = if (KmsKeyArn == null) null else KmsKeyArn ["LogGroupArn"] = if (LogGroupArn == null) null else LogGroupArn - ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/batch/computeenvironment.pkl b/pkl/aws/batch/computeenvironment.pkl index 9b8cde7b..2057690d 100644 --- a/pkl/aws/batch/computeenvironment.pkl +++ b/pkl/aws/batch/computeenvironment.pkl @@ -5,50 +5,52 @@ module aws.batch.computeenvironment import "../../cloudformation.pkl" +typealias ComputeEnvironmentComputeResourcesTags = Mapping + /// -open class ComputeResources { - AllocationStrategy: (String|Mapping)? - LaunchTemplate: (LaunchTemplateSpecification)? - UpdateToLatestImageVersion: (Boolean|Mapping)? - Ec2Configuration: (Listing)? - ImageId: (String|Mapping)? - InstanceTypes: (Listing)? +open class ComputeEnvironmentComputeResources { + LaunchTemplate: (ComputeEnvironmentLaunchTemplateSpecification)? SpotIamFleetRole: (String|Mapping)? Subnets: Listing - Tags: (Dynamic)? Type: String|Mapping + AllocationStrategy: (String|Mapping)? DesiredvCpus: (Int|Mapping)? - Ec2KeyPair: (String|Mapping)? InstanceRole: (String|Mapping)? - MaxvCpus: Int|Mapping MinvCpus: (Int|Mapping)? - SecurityGroupIds: (Listing)? BidPercentage: (Int|Mapping)? + Ec2Configuration: (Listing)? + Ec2KeyPair: (String|Mapping)? + MaxvCpus: Int|Mapping PlacementGroup: (String|Mapping)? + Tags: (ComputeEnvironmentComputeResourcesTags)? + ImageId: (String|Mapping)? + InstanceTypes: (Listing)? + SecurityGroupIds: (Listing)? + UpdateToLatestImageVersion: (Boolean|Mapping)? } /// -open class Ec2ConfigurationObject { +open class ComputeEnvironmentEc2ConfigurationObject { ImageIdOverride: (String|Mapping)? ImageType: String|Mapping ImageKubernetesVersion: (String|Mapping)? } /// -open class LaunchTemplateSpecification { +open class ComputeEnvironmentLaunchTemplateSpecification { LaunchTemplateId: (String|Mapping)? LaunchTemplateName: (String|Mapping)? Version: (String|Mapping)? } /// -open class UpdatePolicy { +open class ComputeEnvironmentUpdatePolicy { TerminateJobsOnUpdate: (Boolean|Mapping)? JobExecutionTimeoutMinutes: (Int|Mapping)? } /// -open class EksConfiguration { +open class ComputeEnvironmentEksConfiguration { EksClusterArn: String|Mapping KubernetesNamespace: String|Mapping } @@ -60,46 +62,49 @@ open class ComputeEnvironment extends cloudformation.Resource { /// - hidden ComputeEnvironmentName: (String|Mapping)? + hidden TypeProperty: String|Mapping /// - hidden ReplaceComputeEnvironment: (Boolean|Mapping)? + hidden UnmanagedvCpus: (Int|Mapping)? /// - hidden ServiceRole: (String|Mapping)? + hidden ComputeEnvironmentName: (String|Mapping)? - /// - hidden State: (String|Mapping)? + /// A key-value pair to associate with a resource. + hidden Tags: (ComputeEnvironmentComputeEnvironmentTags)? /// - hidden UpdatePolicyProperty: (UpdatePolicy)? + hidden ReplaceComputeEnvironment: (Boolean|Mapping)? /// - hidden ComputeResources: (ComputeResources)? + hidden ServiceRole: (String|Mapping)? - /// A key-value pair to associate with a resource. - hidden Tags: (Dynamic)? + /// + hidden State: (String|Mapping)? /// - hidden TypeProperty: String|Mapping + hidden UpdatePolicyProperty: (ComputeEnvironmentUpdatePolicy)? /// - hidden UnmanagedvCpus: (Int|Mapping)? + hidden EksConfiguration: (ComputeEnvironmentEksConfiguration)? /// - hidden EksConfiguration: (EksConfiguration)? + hidden ComputeResources: (ComputeEnvironmentComputeResources)? Properties { + ["Type"] = if (TypeProperty == null) null else TypeProperty + ["UnmanagedvCpus"] = if (UnmanagedvCpus == null) null else UnmanagedvCpus ["ComputeEnvironmentName"] = if (ComputeEnvironmentName == null) null else ComputeEnvironmentName + ["Tags"] = if (Tags == null) null else Tags ["ReplaceComputeEnvironment"] = if (ReplaceComputeEnvironment == null) null else ReplaceComputeEnvironment ["ServiceRole"] = if (ServiceRole == null) null else ServiceRole ["State"] = if (State == null) null else State ["UpdatePolicy"] = if (UpdatePolicyProperty == null) null else UpdatePolicyProperty - ["ComputeResources"] = if (ComputeResources == null) null else ComputeResources - ["Tags"] = if (Tags == null) null else Tags - ["Type"] = if (TypeProperty == null) null else TypeProperty - ["UnmanagedvCpus"] = if (UnmanagedvCpus == null) null else UnmanagedvCpus ["EksConfiguration"] = if (EksConfiguration == null) null else EksConfiguration + ["ComputeResources"] = if (ComputeResources == null) null else ComputeResources } } + + +typealias ComputeEnvironmentComputeEnvironmentTags = Mapping diff --git a/pkl/aws/batch/jobdefinition.pkl b/pkl/aws/batch/jobdefinition.pkl index 84880f34..0b98e99d 100644 --- a/pkl/aws/batch/jobdefinition.pkl +++ b/pkl/aws/batch/jobdefinition.pkl @@ -6,313 +6,313 @@ module aws.batch.jobdefinition import "../../cloudformation.pkl" /// -open class EksContainerEnvironmentVariable { - Value: (String|Mapping)? - Name: String|Mapping +open class JobDefinitionNodeRangeProperty { + Container: (JobDefinitionContainerProperties)? + InstanceTypes: (Listing)? + TargetNodes: String|Mapping + EcsProperties: (JobDefinitionEcsProperties)? } /// -open class LogConfiguration { - SecretOptions: (Listing)? - Options: (Dynamic)? - LogDriver: String|Mapping +open class JobDefinitionEksSecret { + SecretName: String|Mapping + Optional: (Boolean|Mapping)? } /// -open class VolumesHost { - SourcePath: (String|Mapping)? +open class JobDefinitionMetadata { + Labels: (Dynamic)? } /// -open class Timeout { - AttemptDurationSeconds: (Int|Mapping)? +open class JobDefinitionResourceRequirement { + Value: (String|Mapping)? + Type: (String|Mapping)? } /// -open class FargatePlatformConfiguration { - PlatformVersion: (String|Mapping)? +open class JobDefinitionEksProperties { + PodProperties: (JobDefinitionPodProperties)? } /// -open class EksProperties { - PodProperties: (PodProperties)? +open class JobDefinitionRetryStrategy { + EvaluateOnExit: (Listing)? + Attempts: (Int|Mapping)? } /// -open class Secret { - ValueFrom: String|Mapping - Name: String|Mapping +open class JobDefinitionVolumes { + Host: (JobDefinitionVolumesHost)? + EfsVolumeConfiguration: (JobDefinitionEfsVolumeConfiguration)? + Name: (String|Mapping)? } /// -open class NodeRangeProperty { - Container: (ContainerProperties)? - InstanceTypes: (Listing)? - TargetNodes: String|Mapping - EcsProperties: (EcsProperties)? +open class JobDefinitionRepositoryCredentials { + CredentialsParameter: String|Mapping } /// -open class EksContainerResourceRequirements { - Limits: (Dynamic)? - Requests: (Dynamic)? +open class JobDefinitionEksContainerVolumeMount { + Name: (String|Mapping)? + MountPath: (String|Mapping)? + ReadOnly: (Boolean|Mapping)? } /// -open class NetworkConfiguration { - AssignPublicIp: (String|Mapping)? +open class JobDefinitionEksContainerEnvironmentVariable { + Value: (String|Mapping)? + Name: String|Mapping } /// -open class EcsTaskProperties { - ExecutionRoleArn: (String|Mapping)? - TaskRoleArn: (String|Mapping)? - IpcMode: (String|Mapping)? - Volumes: (Listing)? - NetworkConfiguration: (NetworkConfiguration)? - PlatformVersion: (String|Mapping)? - RuntimePlatform: (RuntimePlatform)? - Containers: (Listing)? - PidMode: (String|Mapping)? - EphemeralStorage: (EphemeralStorage)? +open class JobDefinitionAuthorizationConfig { + Iam: (String|Mapping)? + AccessPointId: (String|Mapping)? } /// -open class TaskContainerProperties { - RepositoryCredentials: (RepositoryCredentials)? - Image: String|Mapping - LogConfiguration: (LogConfiguration)? - User: (String|Mapping)? - Privileged: (Boolean|Mapping)? - Essential: (Boolean|Mapping)? - MountPoints: (Listing)? - DependsOn: (Listing)? - Command: (Listing)? - Ulimits: (Listing)? - Secrets: (Listing)? - ResourceRequirements: (Listing)? - LinuxParameters: (LinuxParameters)? - ReadonlyRootFilesystem: (Boolean|Mapping)? - Name: (String|Mapping)? - Environment: (Listing)? +open class JobDefinitionEvaluateOnExit { + OnReason: (String|Mapping)? + Action: String|Mapping + OnStatusReason: (String|Mapping)? + OnExitCode: (String|Mapping)? } /// -open class EfsVolumeConfiguration { - FileSystemId: String|Mapping - TransitEncryption: (String|Mapping)? - RootDirectory: (String|Mapping)? - TransitEncryptionPort: (Int|Mapping)? - AuthorizationConfig: (AuthorizationConfig)? +open class JobDefinitionUlimit { + SoftLimit: Int|Mapping + HardLimit: Int|Mapping + Name: String|Mapping } /// -open class TaskContainerDependency { - ContainerName: String|Mapping - Condition: String|Mapping +open class JobDefinitionEphemeralStorage { + SizeInGiB: Int|Mapping } /// -open class ContainerProperties { - Privileged: (Boolean|Mapping)? - ReadonlyRootFilesystem: (Boolean|Mapping)? - LogConfiguration: (LogConfiguration)? - Environment: (Listing)? - EphemeralStorage: (EphemeralStorage)? - RepositoryCredentials: (RepositoryCredentials)? - LinuxParameters: (LinuxParameters)? - FargatePlatformConfiguration: (FargatePlatformConfiguration)? +open class JobDefinitionNetworkConfiguration { + AssignPublicIp: (String|Mapping)? +} + +/// +open class JobDefinitionTaskContainerProperties { Image: String|Mapping - Volumes: (Listing)? - NetworkConfiguration: (NetworkConfiguration)? - User: (String|Mapping)? - Memory: (Int|Mapping)? - ResourceRequirements: (Listing)? - MountPoints: (Listing)? - ExecutionRoleArn: (String|Mapping)? - RuntimePlatform: (RuntimePlatform)? - Secrets: (Listing)? - JobRoleArn: (String|Mapping)? - Vcpus: (Int|Mapping)? + Name: (String|Mapping)? Command: (Listing)? - Ulimits: (Listing)? - InstanceType: (String|Mapping)? + Environment: (Listing)? + Secrets: (Listing)? + Privileged: (Boolean|Mapping)? + LogConfiguration: (JobDefinitionLogConfiguration)? + User: (String|Mapping)? + LinuxParameters: (JobDefinitionLinuxParameters)? + ReadonlyRootFilesystem: (Boolean|Mapping)? + Essential: (Boolean|Mapping)? + ResourceRequirements: (Listing)? + MountPoints: (Listing)? + DependsOn: (Listing)? + RepositoryCredentials: (JobDefinitionRepositoryCredentials)? + Ulimits: (Listing)? } /// -open class Device { - Permissions: (Listing)? - HostPath: (String|Mapping)? - ContainerPath: (String|Mapping)? +open class JobDefinitionTmpfs { + ContainerPath: String|Mapping + MountOptions: (Listing)? + Size: Int|Mapping } /// -open class EksHostPath { - Path: (String|Mapping)? +open class JobDefinitionEcsProperties { + TaskProperties: Listing } /// -open class EphemeralStorage { - SizeInGiB: Int|Mapping +open class JobDefinitionTimeout { + AttemptDurationSeconds: (Int|Mapping)? } /// -open class RetryStrategy { - EvaluateOnExit: (Listing)? - Attempts: (Int|Mapping)? +open class JobDefinitionNodeProperties { + MainNode: Int|Mapping + NodeRangeProperties: Listing + NumNodes: Int|Mapping } /// -open class EksEmptyDir { - Medium: (String|Mapping)? - SizeLimit: (String|Mapping)? +open class JobDefinitionPodProperties { + Metadata: (JobDefinitionMetadata)? + ServiceAccountName: (String|Mapping)? + HostNetwork: (Boolean|Mapping)? + ShareProcessNamespace: (Boolean|Mapping)? + InitContainers: (Listing)? + Volumes: (Listing)? + DnsPolicy: (String|Mapping)? + Containers: (Listing)? } /// -open class NodeProperties { - NodeRangeProperties: Listing - NumNodes: Int|Mapping - MainNode: Int|Mapping +open class JobDefinitionLogConfiguration { + SecretOptions: (Listing)? + Options: (Dynamic)? + LogDriver: String|Mapping } /// -open class EksContainerSecurityContext { - RunAsUser: (Int|Mapping)? - RunAsGroup: (Int|Mapping)? - RunAsNonRoot: (Boolean|Mapping)? - Privileged: (Boolean|Mapping)? - ReadOnlyRootFilesystem: (Boolean|Mapping)? +open class JobDefinitionMountPoints { + ReadOnly: (Boolean|Mapping)? + SourceVolume: (String|Mapping)? + ContainerPath: (String|Mapping)? } /// -open class Metadata { - Labels: (Dynamic)? +open class JobDefinitionVolumesHost { + SourcePath: (String|Mapping)? } /// -open class EksSecret { - SecretName: String|Mapping - Optional: (Boolean|Mapping)? +open class JobDefinitionTaskContainerDependency { + Condition: String|Mapping + ContainerName: String|Mapping } /// -open class EvaluateOnExit { - Action: String|Mapping - OnStatusReason: (String|Mapping)? - OnExitCode: (String|Mapping)? - OnReason: (String|Mapping)? +open class JobDefinitionEksContainerSecurityContext { + RunAsGroup: (Int|Mapping)? + RunAsNonRoot: (Boolean|Mapping)? + Privileged: (Boolean|Mapping)? + ReadOnlyRootFilesystem: (Boolean|Mapping)? + RunAsUser: (Int|Mapping)? } /// -open class ResourceRequirement { - Value: (String|Mapping)? - Type: (String|Mapping)? +open class JobDefinitionEksContainerResourceRequirements { + Requests: (Dynamic)? + Limits: (Dynamic)? } /// -open class AuthorizationConfig { - Iam: (String|Mapping)? - AccessPointId: (String|Mapping)? +open class JobDefinitionContainerProperties { + Ulimits: (Listing)? + User: (String|Mapping)? + Memory: (Int|Mapping)? + Privileged: (Boolean|Mapping)? + LinuxParameters: (JobDefinitionLinuxParameters)? + JobRoleArn: (String|Mapping)? + LogConfiguration: (JobDefinitionLogConfiguration)? + Volumes: (Listing)? + Environment: (Listing)? + RepositoryCredentials: (JobDefinitionRepositoryCredentials)? + Secrets: (Listing)? + FargatePlatformConfiguration: (JobDefinitionFargatePlatformConfiguration)? + Image: String|Mapping + ResourceRequirements: (Listing)? + RuntimePlatform: (JobDefinitionRuntimePlatform)? + NetworkConfiguration: (JobDefinitionNetworkConfiguration)? + InstanceType: (String|Mapping)? + ReadonlyRootFilesystem: (Boolean|Mapping)? + ExecutionRoleArn: (String|Mapping)? + Command: (Listing)? + EphemeralStorage: (JobDefinitionEphemeralStorage)? + Vcpus: (Int|Mapping)? + MountPoints: (Listing)? } /// -open class LinuxParameters { +open class JobDefinitionLinuxParameters { + Swappiness: (Int|Mapping)? + Tmpfs: (Listing)? SharedMemorySize: (Int|Mapping)? - Devices: (Listing)? + Devices: (Listing)? InitProcessEnabled: (Boolean|Mapping)? MaxSwap: (Int|Mapping)? - Swappiness: (Int|Mapping)? - Tmpfs: (Listing)? } /// -open class Ulimit { - SoftLimit: Int|Mapping - HardLimit: Int|Mapping - Name: String|Mapping -} - -/// -open class EksContainerVolumeMount { - MountPath: (String|Mapping)? - ReadOnly: (Boolean|Mapping)? - Name: (String|Mapping)? +open class JobDefinitionFargatePlatformConfiguration { + PlatformVersion: (String|Mapping)? } /// -open class Environment { - Value: (String|Mapping)? - Name: (String|Mapping)? +open class JobDefinitionEksEmptyDir { + Medium: (String|Mapping)? + SizeLimit: (String|Mapping)? } /// -open class EksContainer { - Name: (String|Mapping)? - Args: (Listing)? - ImagePullPolicy: (String|Mapping)? - Command: (Listing)? - Image: String|Mapping - Env: (Listing)? - VolumeMounts: (Listing)? - SecurityContext: (EksContainerSecurityContext)? - Resources: (EksContainerResourceRequirements)? +open class JobDefinitionSecret { + ValueFrom: String|Mapping + Name: String|Mapping } /// -open class RuntimePlatform { +open class JobDefinitionRuntimePlatform { OperatingSystemFamily: (String|Mapping)? CpuArchitecture: (String|Mapping)? } /// -open class Volumes { - Host: (VolumesHost)? - EfsVolumeConfiguration: (EfsVolumeConfiguration)? +open class JobDefinitionEnvironment { + Value: (String|Mapping)? Name: (String|Mapping)? } /// -open class PodProperties { - ServiceAccountName: (String|Mapping)? - HostNetwork: (Boolean|Mapping)? - ShareProcessNamespace: (Boolean|Mapping)? - InitContainers: (Listing)? - Volumes: (Listing)? - DnsPolicy: (String|Mapping)? - Containers: (Listing)? - Metadata: (Metadata)? +open class JobDefinitionEfsVolumeConfiguration { + FileSystemId: String|Mapping + TransitEncryption: (String|Mapping)? + RootDirectory: (String|Mapping)? + TransitEncryptionPort: (Int|Mapping)? + AuthorizationConfig: (JobDefinitionAuthorizationConfig)? } /// -open class Tmpfs { - ContainerPath: String|Mapping - MountOptions: (Listing)? - Size: Int|Mapping +open class JobDefinitionEksHostPath { + Path: (String|Mapping)? } /// -open class EcsProperties { - TaskProperties: Listing +open class JobDefinitionEksVolume { + Secret: (JobDefinitionEksSecret)? + EmptyDir: (JobDefinitionEksEmptyDir)? + HostPath: (JobDefinitionEksHostPath)? + Name: String|Mapping } /// -open class RepositoryCredentials { - CredentialsParameter: String|Mapping +open class JobDefinitionEksContainer { + ImagePullPolicy: (String|Mapping)? + Command: (Listing)? + Name: (String|Mapping)? + Env: (Listing)? + Args: (Listing)? + VolumeMounts: (Listing)? + SecurityContext: (JobDefinitionEksContainerSecurityContext)? + Resources: (JobDefinitionEksContainerResourceRequirements)? + Image: String|Mapping } /// -open class EksVolume { - Secret: (EksSecret)? - EmptyDir: (EksEmptyDir)? - HostPath: (EksHostPath)? - Name: String|Mapping +open class JobDefinitionDevice { + Permissions: (Listing)? + HostPath: (String|Mapping)? + ContainerPath: (String|Mapping)? } /// -open class MountPoints { - ReadOnly: (Boolean|Mapping)? - SourceVolume: (String|Mapping)? - ContainerPath: (String|Mapping)? +open class JobDefinitionEcsTaskProperties { + PlatformVersion: (String|Mapping)? + RuntimePlatform: (JobDefinitionRuntimePlatform)? + IpcMode: (String|Mapping)? + ExecutionRoleArn: (String|Mapping)? + TaskRoleArn: (String|Mapping)? + Volumes: (Listing)? + Containers: (Listing)? + NetworkConfiguration: (JobDefinitionNetworkConfiguration)? + PidMode: (String|Mapping)? + EphemeralStorage: (JobDefinitionEphemeralStorage)? } /// Resource Type definition for AWS::Batch::JobDefinition @@ -322,58 +322,58 @@ open class JobDefinition extends cloudformation.Resource { /// - hidden SchedulingPriority: (Int|Mapping)? + hidden EcsProperties: (JobDefinitionEcsProperties)? /// - hidden Tags: (Dynamic)? + hidden PropagateTags: (Boolean|Mapping)? /// - hidden Timeout: (Timeout)? + hidden TypeProperty: String|Mapping /// - hidden PlatformCapabilities: (Listing)? + hidden NodeProperties: (JobDefinitionNodeProperties)? /// - hidden TypeProperty: String|Mapping + hidden SchedulingPriority: (Int|Mapping)? /// - hidden NodeProperties: (NodeProperties)? + hidden Parameters: (Dynamic)? /// - hidden RetryStrategy: (RetryStrategy)? + hidden JobDefinitionName: (String|Mapping)? /// - hidden Parameters: (Dynamic)? + hidden Timeout: (JobDefinitionTimeout)? /// - hidden JobDefinitionName: (String|Mapping)? + hidden PlatformCapabilities: (Listing)? /// - hidden PropagateTags: (Boolean|Mapping)? + hidden EksProperties: (JobDefinitionEksProperties)? /// - hidden EksProperties: (EksProperties)? + hidden ContainerProperties: (JobDefinitionContainerProperties)? /// - hidden ContainerProperties: (ContainerProperties)? + hidden RetryStrategy: (JobDefinitionRetryStrategy)? /// - hidden EcsProperties: (EcsProperties)? + hidden Tags: (Dynamic)? Properties { - ["SchedulingPriority"] = if (SchedulingPriority == null) null else SchedulingPriority - ["Tags"] = if (Tags == null) null else Tags - ["Timeout"] = if (Timeout == null) null else Timeout - ["PlatformCapabilities"] = if (PlatformCapabilities == null) null else PlatformCapabilities + ["EcsProperties"] = if (EcsProperties == null) null else EcsProperties + ["PropagateTags"] = if (PropagateTags == null) null else PropagateTags ["Type"] = if (TypeProperty == null) null else TypeProperty ["NodeProperties"] = if (NodeProperties == null) null else NodeProperties - ["RetryStrategy"] = if (RetryStrategy == null) null else RetryStrategy + ["SchedulingPriority"] = if (SchedulingPriority == null) null else SchedulingPriority ["Parameters"] = if (Parameters == null) null else Parameters ["JobDefinitionName"] = if (JobDefinitionName == null) null else JobDefinitionName - ["PropagateTags"] = if (PropagateTags == null) null else PropagateTags + ["Timeout"] = if (Timeout == null) null else Timeout + ["PlatformCapabilities"] = if (PlatformCapabilities == null) null else PlatformCapabilities ["EksProperties"] = if (EksProperties == null) null else EksProperties ["ContainerProperties"] = if (ContainerProperties == null) null else ContainerProperties - ["EcsProperties"] = if (EcsProperties == null) null else EcsProperties + ["RetryStrategy"] = if (RetryStrategy == null) null else RetryStrategy + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/batch/jobqueue.pkl b/pkl/aws/batch/jobqueue.pkl index ce360119..e347021a 100644 --- a/pkl/aws/batch/jobqueue.pkl +++ b/pkl/aws/batch/jobqueue.pkl @@ -5,26 +5,25 @@ module aws.batch.jobqueue import "../../cloudformation.pkl" -/// -open class ResourceArn { -} +typealias JobQueueResourceArn = String|Mapping + /// -open class ComputeEnvironmentOrder { +open class JobQueueComputeEnvironmentOrder { ComputeEnvironment: String|Mapping Order: Int|Mapping } -typealias JobStateTimeLimitActionAction = "CANCEL" - typealias JobStateTimeLimitActionState = "RUNNABLE" +typealias JobStateTimeLimitActionAction = "CANCEL" + /// -open class JobStateTimeLimitAction { - Action: JobStateTimeLimitActionAction|Mapping +open class JobQueueJobStateTimeLimitAction { MaxTimeSeconds: Int|Mapping Reason: String|Mapping State: JobStateTimeLimitActionState|Mapping + Action: JobStateTimeLimitActionAction|Mapping } /// Resource Type definition for AWS::Batch::JobQueue @@ -33,6 +32,9 @@ open class JobQueue extends cloudformation.Resource { Type = "AWS::Batch::JobQueue" + /// + hidden JobStateTimeLimitActions: (Listing)? + /// hidden Priority: Int|Mapping @@ -40,31 +42,30 @@ open class JobQueue extends cloudformation.Resource { hidden State: (JobQueueState|Mapping)? /// - hidden SchedulingPolicyArn: (ResourceArn)? + hidden SchedulingPolicyArn: (JobQueueResourceArn)? /// A key-value pair to associate with a resource. - hidden Tags: (Dynamic)? + hidden Tags: (JobQueueJobQueueTags)? /// hidden JobQueueName: (String|Mapping)? /// - hidden ComputeEnvironmentOrder: Listing - - /// - hidden JobStateTimeLimitActions: (Listing)? + hidden ComputeEnvironmentOrder: Listing Properties { + ["JobStateTimeLimitActions"] = if (JobStateTimeLimitActions == null) null else JobStateTimeLimitActions ["Priority"] = if (Priority == null) null else Priority ["State"] = if (State == null) null else State ["SchedulingPolicyArn"] = if (SchedulingPolicyArn == null) null else SchedulingPolicyArn ["Tags"] = if (Tags == null) null else Tags ["JobQueueName"] = if (JobQueueName == null) null else JobQueueName ["ComputeEnvironmentOrder"] = if (ComputeEnvironmentOrder == null) null else ComputeEnvironmentOrder - ["JobStateTimeLimitActions"] = if (JobStateTimeLimitActions == null) null else JobStateTimeLimitActions } } typealias JobQueueState = "DISABLED"|"ENABLED" + +typealias JobQueueJobQueueTags = Mapping diff --git a/pkl/aws/batch/schedulingpolicy.pkl b/pkl/aws/batch/schedulingpolicy.pkl index 5a464abe..5800bb76 100644 --- a/pkl/aws/batch/schedulingpolicy.pkl +++ b/pkl/aws/batch/schedulingpolicy.pkl @@ -5,21 +5,20 @@ module aws.batch.schedulingpolicy import "../../cloudformation.pkl" -/// -open class ShareAttributes { - ShareIdentifier: (String|Mapping)? - WeightFactor: (Number|Mapping)? -} +typealias SchedulingPolicyResourceArn = String|Mapping -/// ARN of the Scheduling Policy. -open class ResourceArn { -} /// Fair Share Policy for the Job Queue. -open class FairsharePolicy { +open class SchedulingPolicyFairsharePolicy { ShareDecaySeconds: (Number|Mapping)? ComputeReservation: (Number|Mapping)? - ShareDistribution: (Listing)? + ShareDistribution: (Listing)? +} + +/// +open class SchedulingPolicyShareAttributes { + ShareIdentifier: (String|Mapping)? + WeightFactor: (Number|Mapping)? } /// Resource Type schema for AWS::Batch::SchedulingPolicy @@ -28,19 +27,22 @@ open class SchedulingPolicy extends cloudformation.Resource { Type = "AWS::Batch::SchedulingPolicy" + /// Name of Scheduling Policy. + hidden Name: (String|Mapping)? + /// - hidden FairsharePolicy: (FairsharePolicy)? + hidden FairsharePolicy: (SchedulingPolicyFairsharePolicy)? /// A key-value pair to associate with a resource. - hidden Tags: (Dynamic)? - - /// Name of Scheduling Policy. - hidden Name: (String|Mapping)? + hidden Tags: (SchedulingPolicySchedulingPolicyTags)? Properties { + ["Name"] = if (Name == null) null else Name ["FairsharePolicy"] = if (FairsharePolicy == null) null else FairsharePolicy ["Tags"] = if (Tags == null) null else Tags - ["Name"] = if (Name == null) null else Name } } + + +typealias SchedulingPolicySchedulingPolicyTags = Mapping diff --git a/pkl/aws/billingconductor/billinggroup.pkl b/pkl/aws/billingconductor/billinggroup.pkl index 73d7bd60..769493f9 100644 --- a/pkl/aws/billingconductor/billinggroup.pkl +++ b/pkl/aws/billingconductor/billinggroup.pkl @@ -6,26 +6,25 @@ module aws.billingconductor.billinggroup import "../../cloudformation.pkl" /// -open class BillingGroupStatus { -} - -/// -open class ComputationPreference { +open class BillingGroupComputationPreference { PricingPlanArn: String(matches(Regex(#"arn:aws(-cn)?:billingconductor::[0-9]{12}:pricingplan/[a-zA-Z0-9]{10}"#)))|Mapping } /// -open class AccountGrouping { - AutoAssociate: (Boolean|Mapping)? +open class BillingGroupAccountGrouping { LinkedAccountIds: Listing + AutoAssociate: (Boolean|Mapping)? } /// -open class Tag { +open class BillingGroupTag { Key: String|Mapping Value: String|Mapping } +typealias BillingGroupBillingGroupStatus = String|Mapping + + /// A billing group is a set of linked account which belong to the same end customer. It can be seen as a virtual consolidated billing family. open class BillingGroup extends cloudformation.Resource { @@ -39,24 +38,24 @@ open class BillingGroup extends cloudformation.Resource { hidden PrimaryAccountId: String(matches(Regex(#"[0-9]{12}"#)))|Mapping /// - hidden ComputationPreference: ComputationPreference + hidden ComputationPreference: BillingGroupComputationPreference /// - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// - hidden Name: String(matches(Regex(#"[a-zA-Z0-9_\+=\.\-@]+"#)))|Mapping + hidden AccountGrouping: BillingGroupAccountGrouping /// - hidden AccountGrouping: AccountGrouping + hidden Name: String(matches(Regex(#"[a-zA-Z0-9_\+=\.\-@]+"#)))|Mapping Properties { ["Description"] = if (Description == null) null else Description ["PrimaryAccountId"] = if (PrimaryAccountId == null) null else PrimaryAccountId ["ComputationPreference"] = if (ComputationPreference == null) null else ComputationPreference ["Tags"] = if (Tags == null) null else Tags - ["Name"] = if (Name == null) null else Name ["AccountGrouping"] = if (AccountGrouping == null) null else AccountGrouping + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/billingconductor/customlineitem.pkl b/pkl/aws/billingconductor/customlineitem.pkl index 5f4ba3fd..c0b623b5 100644 --- a/pkl/aws/billingconductor/customlineitem.pkl +++ b/pkl/aws/billingconductor/customlineitem.pkl @@ -5,68 +5,63 @@ module aws.billingconductor.customlineitem import "../../cloudformation.pkl" -/// -open class Tag { - Key: String|Mapping - Value: String|Mapping -} - typealias LineItemFilterAttribute = "LINE_ITEM_TYPE" typealias LineItemFilterMatchOption = "NOT_EQUAL" /// -open class LineItemFilter { +open class CustomLineItemLineItemFilter { Attribute: LineItemFilterAttribute|Mapping MatchOption: LineItemFilterMatchOption|Mapping - Values: Listing + Values: Listing } -/// -open class LineItemFilterValue { -} +typealias CustomLineItemExclusiveEndBillingPeriod = String|Mapping -/// -open class ExclusiveEndBillingPeriod { -} -/// -open class Type { -} +typealias CustomLineItemType = String|Mapping + /// -open class CustomLineItemPercentageChargeDetails { +open class CustomLineItemCustomLineItemPercentageChargeDetails { ChildAssociatedResources: (Listing)? PercentageValue: Number|Mapping } /// -open class CustomLineItemFlatChargeDetails { - ChargeValue: Number|Mapping +open class CustomLineItemBillingPeriodRange { + InclusiveStartBillingPeriod: (CustomLineItemInclusiveStartBillingPeriod)? + ExclusiveEndBillingPeriod: (CustomLineItemExclusiveEndBillingPeriod)? } /// -open class LineItemFilters { +open class CustomLineItemTag { + Key: String|Mapping + Value: String|Mapping } /// -open class CustomLineItemChargeDetails { - Flat: (CustomLineItemFlatChargeDetails)? - Percentage: (CustomLineItemPercentageChargeDetails)? - Type: Type - LineItemFilters: (LineItemFilters)? +open class CustomLineItemCustomLineItemFlatChargeDetails { + ChargeValue: Number|Mapping } -/// -open class InclusiveStartBillingPeriod { -} +typealias CustomLineItemLineItemFilterValue = String|Mapping + + +typealias CustomLineItemLineItemFilters = Listing<(CustomLineItemLineItemFilter)?> + /// -open class BillingPeriodRange { - InclusiveStartBillingPeriod: (InclusiveStartBillingPeriod)? - ExclusiveEndBillingPeriod: (ExclusiveEndBillingPeriod)? +open class CustomLineItemCustomLineItemChargeDetails { + Type: CustomLineItemType + LineItemFilters: (CustomLineItemLineItemFilters)? + Flat: (CustomLineItemCustomLineItemFlatChargeDetails)? + Percentage: (CustomLineItemCustomLineItemPercentageChargeDetails)? } +typealias CustomLineItemInclusiveStartBillingPeriod = String|Mapping + + /// A custom line item is an one time charge that is applied to a specific billing group's bill. open class CustomLineItem extends cloudformation.Resource { @@ -76,32 +71,32 @@ open class CustomLineItem extends cloudformation.Resource { /// hidden Description: (String|Mapping)? + /// Billing Group ARN + hidden BillingGroupArn: String(matches(Regex(#"arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/?[0-9]{12}"#)))|Mapping + /// The account which this custom line item will be charged to hidden AccountId: (String(matches(Regex(#"[0-9]{12}"#)))|Mapping)? /// - hidden Name: String(matches(Regex(#"[a-zA-Z0-9_\+=\.\-@]+"#)))|Mapping + hidden BillingPeriodRange: (CustomLineItemBillingPeriodRange)? /// - hidden BillingPeriodRange: (BillingPeriodRange)? + hidden Name: String(matches(Regex(#"[a-zA-Z0-9_\+=\.\-@]+"#)))|Mapping /// - hidden Tags: (Listing)? + hidden CustomLineItemChargeDetails: (CustomLineItemCustomLineItemChargeDetails)? /// - hidden CustomLineItemChargeDetails: (CustomLineItemChargeDetails)? - - /// Billing Group ARN - hidden BillingGroupArn: String(matches(Regex(#"arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/?[0-9]{12}"#)))|Mapping + hidden Tags: (Listing)? Properties { ["Description"] = if (Description == null) null else Description + ["BillingGroupArn"] = if (BillingGroupArn == null) null else BillingGroupArn ["AccountId"] = if (AccountId == null) null else AccountId - ["Name"] = if (Name == null) null else Name ["BillingPeriodRange"] = if (BillingPeriodRange == null) null else BillingPeriodRange - ["Tags"] = if (Tags == null) null else Tags + ["Name"] = if (Name == null) null else Name ["CustomLineItemChargeDetails"] = if (CustomLineItemChargeDetails == null) null else CustomLineItemChargeDetails - ["BillingGroupArn"] = if (BillingGroupArn == null) null else BillingGroupArn + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/billingconductor/pricingplan.pkl b/pkl/aws/billingconductor/pricingplan.pkl index 443f0260..6c2b1cfb 100644 --- a/pkl/aws/billingconductor/pricingplan.pkl +++ b/pkl/aws/billingconductor/pricingplan.pkl @@ -5,14 +5,13 @@ module aws.billingconductor.pricingplan import "../../cloudformation.pkl" -/// Pricing Rule ARN -open class PricingRuleArn { -} +typealias PricingPlanPricingRuleArn = String|Mapping + /// -open class Tag { - Key: String|Mapping +open class PricingPlanTag { Value: String|Mapping + Key: String|Mapping } /// Pricing Plan enables you to customize your billing details consistent with the usage that accrues in each of your billing groups. @@ -22,22 +21,22 @@ open class PricingPlan extends cloudformation.Resource { /// - hidden Tags: (Listing)? + hidden Description: (String|Mapping)? /// - hidden Name: String(matches(Regex(#"[a-zA-Z0-9_\+=\.\-@]+"#)))|Mapping + hidden Tags: (Listing)? /// - hidden PricingRuleArns: (Listing)? + hidden Name: String(matches(Regex(#"[a-zA-Z0-9_\+=\.\-@]+"#)))|Mapping /// - hidden Description: (String|Mapping)? + hidden PricingRuleArns: (Listing)? Properties { + ["Description"] = if (Description == null) null else Description ["Tags"] = if (Tags == null) null else Tags ["Name"] = if (Name == null) null else Name ["PricingRuleArns"] = if (PricingRuleArns == null) null else PricingRuleArns - ["Description"] = if (Description == null) null else Description } } diff --git a/pkl/aws/billingconductor/pricingrule.pkl b/pkl/aws/billingconductor/pricingrule.pkl index abe29c8b..0388bdca 100644 --- a/pkl/aws/billingconductor/pricingrule.pkl +++ b/pkl/aws/billingconductor/pricingrule.pkl @@ -6,13 +6,13 @@ module aws.billingconductor.pricingrule import "../../cloudformation.pkl" /// -open class Tag { +open class PricingRuleTag { Key: String|Mapping Value: String|Mapping } /// The possible customizable free tier configurations. -open class FreeTier { +open class PricingRuleFreeTier { Activated: Boolean|Mapping } @@ -25,55 +25,55 @@ open class PricingRule extends cloudformation.Resource { /// Pricing rule description hidden Description: (String|Mapping)? + /// The service which a pricing rule is applied on + hidden Service: (String(matches(Regex(#"[a-zA-Z0-9\.\-]+"#)))|Mapping)? + /// Pricing rule name hidden Name: String(matches(Regex(#"[a-zA-Z0-9_\+=\.\-@]+"#)))|Mapping /// Pricing rule modifier percentage hidden ModifierPercentage: (Number|Mapping)? - /// The service which a pricing rule is applied on - hidden Service: (String(matches(Regex(#"[a-zA-Z0-9\.\-]+"#)))|Mapping)? - - /// The seller of services provided by AWS, their affiliates, or third-party providers selling services via AWS Marketplaces. Supported billing entities are AWS, AWS Marketplace, and AISPL. - hidden BillingEntity: (PricingRuleBillingEntity|Mapping)? - /// The set of tiering configurations for the pricing rule. hidden Tiering: (Dynamic)? - /// - hidden Tags: (Listing)? - /// A term used to categorize the granularity of a Pricing Rule. hidden Scope: PricingRuleScope|Mapping + /// One of MARKUP, DISCOUNT or TIERING that describes the behaviour of the pricing rule. + hidden TypeProperty: PricingRuleType|Mapping + + /// The seller of services provided by AWS, their affiliates, or third-party providers selling services via AWS Marketplaces. Supported billing entities are AWS, AWS Marketplace, and AISPL. + hidden BillingEntity: (PricingRuleBillingEntity|Mapping)? + /// The UsageType which a SKU pricing rule is modifying hidden UsageType: (String(matches(Regex(#"^\S+$"#)))|Mapping)? /// The Operation which a SKU pricing rule is modifying hidden Operation: (String(matches(Regex(#"^\S+$"#)))|Mapping)? - /// One of MARKUP, DISCOUNT or TIERING that describes the behaviour of the pricing rule. - hidden TypeProperty: PricingRuleType|Mapping + /// + hidden Tags: (Listing)? Properties { ["Description"] = if (Description == null) null else Description + ["Service"] = if (Service == null) null else Service ["Name"] = if (Name == null) null else Name ["ModifierPercentage"] = if (ModifierPercentage == null) null else ModifierPercentage - ["Service"] = if (Service == null) null else Service - ["BillingEntity"] = if (BillingEntity == null) null else BillingEntity ["Tiering"] = if (Tiering == null) null else Tiering - ["Tags"] = if (Tags == null) null else Tags ["Scope"] = if (Scope == null) null else Scope + ["Type"] = if (TypeProperty == null) null else TypeProperty + ["BillingEntity"] = if (BillingEntity == null) null else BillingEntity ["UsageType"] = if (UsageType == null) null else UsageType ["Operation"] = if (Operation == null) null else Operation - ["Type"] = if (TypeProperty == null) null else TypeProperty + ["Tags"] = if (Tags == null) null else Tags } } -typealias PricingRuleBillingEntity = "AWS"|"AWS Marketplace"|"AISPL" - typealias PricingRuleScope = "GLOBAL"|"SERVICE"|"BILLING_ENTITY"|"SKU" typealias PricingRuleType = "MARKUP"|"DISCOUNT"|"TIERING" + +typealias PricingRuleBillingEntity = "AWS"|"AWS Marketplace"|"AISPL" diff --git a/pkl/aws/budgets/budget.pkl b/pkl/aws/budgets/budget.pkl index 0e62254e..2d33fd4a 100644 --- a/pkl/aws/budgets/budget.pkl +++ b/pkl/aws/budgets/budget.pkl @@ -6,74 +6,74 @@ module aws.budgets.budget import "../../cloudformation.pkl" /// -open class AutoAdjustData { - HistoricalOptions: (HistoricalOptions)? - AutoAdjustType: String|Mapping +open class BudgetBudgetData { + BudgetType: String|Mapping + BudgetLimit: (BudgetSpend)? + TimePeriod: (BudgetTimePeriod)? + AutoAdjustData: (BudgetAutoAdjustData)? + BudgetName: (String|Mapping)? + CostTypes: (BudgetCostTypes)? + TimeUnit: String|Mapping + PlannedBudgetLimits: (Dynamic)? + CostFilters: (Dynamic)? } /// -open class Notification { - ComparisonOperator: String|Mapping - NotificationType: String|Mapping - Threshold: Number|Mapping - ThresholdType: (String|Mapping)? +open class BudgetTimePeriod { + Start: (String|Mapping)? + End: (String|Mapping)? } /// -open class BudgetData { - TimePeriod: (TimePeriod)? - AutoAdjustData: (AutoAdjustData)? - TimeUnit: String|Mapping - PlannedBudgetLimits: (Dynamic)? - BudgetName: (String|Mapping)? - BudgetLimit: (Spend)? - CostFilters: (Dynamic)? - CostTypes: (CostTypes)? - BudgetType: String|Mapping +open class BudgetSpend { + Unit: String|Mapping + Amount: Number|Mapping } /// -open class Spend { - Unit: String|Mapping - Amount: Number|Mapping +open class BudgetNotificationWithSubscribers { + Subscribers: Listing + Notification: BudgetNotification } /// -open class TimePeriod { - Start: (String|Mapping)? - End: (String|Mapping)? +open class BudgetHistoricalOptions { + BudgetAdjustmentPeriod: Int|Mapping } /// -open class NotificationWithSubscribers { - Subscribers: Listing - Notification: Notification +open class BudgetSubscriber { + Address: String|Mapping + SubscriptionType: String|Mapping +} + +/// +open class BudgetAutoAdjustData { + HistoricalOptions: (BudgetHistoricalOptions)? + AutoAdjustType: String|Mapping } /// -open class CostTypes { +open class BudgetCostTypes { IncludeSupport: (Boolean|Mapping)? - IncludeTax: (Boolean|Mapping)? - IncludeUpfront: (Boolean|Mapping)? - UseAmortized: (Boolean|Mapping)? - IncludeRefund: (Boolean|Mapping)? IncludeOtherSubscription: (Boolean|Mapping)? IncludeSubscription: (Boolean|Mapping)? UseBlended: (Boolean|Mapping)? + IncludeUpfront: (Boolean|Mapping)? IncludeDiscount: (Boolean|Mapping)? + IncludeTax: (Boolean|Mapping)? IncludeCredit: (Boolean|Mapping)? IncludeRecurring: (Boolean|Mapping)? + UseAmortized: (Boolean|Mapping)? + IncludeRefund: (Boolean|Mapping)? } /// -open class HistoricalOptions { - BudgetAdjustmentPeriod: Int|Mapping -} - -/// -open class Subscriber { - Address: String|Mapping - SubscriptionType: String|Mapping +open class BudgetNotification { + NotificationType: String|Mapping + Threshold: Number|Mapping + ThresholdType: (String|Mapping)? + ComparisonOperator: String|Mapping } /// Resource Type definition for AWS::Budgets::Budget @@ -83,10 +83,10 @@ open class Budget extends cloudformation.Resource { /// - hidden NotificationsWithSubscribers: (Listing)? + hidden NotificationsWithSubscribers: (Listing)? /// - hidden Budget: BudgetData + hidden Budget: BudgetBudgetData Properties { ["NotificationsWithSubscribers"] = if (NotificationsWithSubscribers == null) null else NotificationsWithSubscribers diff --git a/pkl/aws/budgets/budgetsaction.pkl b/pkl/aws/budgets/budgetsaction.pkl index e23396f3..6a6ad851 100644 --- a/pkl/aws/budgets/budgetsaction.pkl +++ b/pkl/aws/budgets/budgetsaction.pkl @@ -6,49 +6,49 @@ module aws.budgets.budgetsaction import "../../cloudformation.pkl" /// -open class IamActionDefinition { - PolicyArn: String|Mapping - Roles: (Listing)? - Groups: (Listing)? - Users: (Listing)? +open class BudgetsActionDefinition { + IamActionDefinition: (BudgetsActionIamActionDefinition)? + ScpActionDefinition: (BudgetsActionScpActionDefinition)? + SsmActionDefinition: (BudgetsActionSsmActionDefinition)? } +typealias SubscriberType = "SNS"|"EMAIL" + /// -open class ScpActionDefinition { - PolicyId: String|Mapping - TargetIds: Listing +open class BudgetsActionSubscriber { + Type: SubscriberType|Mapping + Address: String|Mapping } -typealias SsmActionDefinitionSubtype = "STOP_EC2_INSTANCES"|"STOP_RDS_INSTANCES" +typealias ActionThresholdType = "PERCENTAGE"|"ABSOLUTE_VALUE" /// -open class SsmActionDefinition { - Subtype: SsmActionDefinitionSubtype|Mapping - Region: String|Mapping - InstanceIds: Listing +open class BudgetsActionActionThreshold { + Value: Number|Mapping + Type: ActionThresholdType|Mapping } /// -open class Definition { - IamActionDefinition: (IamActionDefinition)? - ScpActionDefinition: (ScpActionDefinition)? - SsmActionDefinition: (SsmActionDefinition)? +open class BudgetsActionIamActionDefinition { + Groups: (Listing)? + Users: (Listing)? + PolicyArn: String|Mapping + Roles: (Listing)? } -typealias SubscriberType = "SNS"|"EMAIL" - /// -open class Subscriber { - Type: SubscriberType|Mapping - Address: String|Mapping +open class BudgetsActionScpActionDefinition { + PolicyId: String|Mapping + TargetIds: Listing } -typealias ActionThresholdType = "PERCENTAGE"|"ABSOLUTE_VALUE" +typealias SsmActionDefinitionSubtype = "STOP_EC2_INSTANCES"|"STOP_RDS_INSTANCES" /// -open class ActionThreshold { - Value: Number|Mapping - Type: ActionThresholdType|Mapping +open class BudgetsActionSsmActionDefinition { + Subtype: SsmActionDefinitionSubtype|Mapping + Region: String|Mapping + InstanceIds: Listing } /// An example resource schema demonstrating some basic constructs and validation rules. @@ -58,13 +58,13 @@ open class BudgetsAction extends cloudformation.Resource { /// - hidden ActionType: BudgetsActionActionType|Mapping + hidden ApprovalModel: (BudgetsActionApprovalModel|Mapping)? /// - hidden ActionThreshold: ActionThreshold + hidden Subscribers: Listing /// - hidden ExecutionRoleArn: String|Mapping + hidden Definition: BudgetsActionDefinition /// hidden BudgetName: String|Mapping @@ -73,30 +73,30 @@ open class BudgetsAction extends cloudformation.Resource { hidden NotificationType: BudgetsActionNotificationType|Mapping /// - hidden ApprovalModel: (BudgetsActionApprovalModel|Mapping)? + hidden ActionType: BudgetsActionActionType|Mapping /// - hidden Subscribers: Listing + hidden ActionThreshold: BudgetsActionActionThreshold /// - hidden Definition: Definition + hidden ExecutionRoleArn: String|Mapping Properties { - ["ActionType"] = if (ActionType == null) null else ActionType - ["ActionThreshold"] = if (ActionThreshold == null) null else ActionThreshold - ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn - ["BudgetName"] = if (BudgetName == null) null else BudgetName - ["NotificationType"] = if (NotificationType == null) null else NotificationType ["ApprovalModel"] = if (ApprovalModel == null) null else ApprovalModel ["Subscribers"] = if (Subscribers == null) null else Subscribers ["Definition"] = if (Definition == null) null else Definition + ["BudgetName"] = if (BudgetName == null) null else BudgetName + ["NotificationType"] = if (NotificationType == null) null else NotificationType + ["ActionType"] = if (ActionType == null) null else ActionType + ["ActionThreshold"] = if (ActionThreshold == null) null else ActionThreshold + ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn } } -typealias BudgetsActionActionType = "APPLY_IAM_POLICY"|"APPLY_SCP_POLICY"|"RUN_SSM_DOCUMENTS" +typealias BudgetsActionApprovalModel = "AUTOMATIC"|"MANUAL" typealias BudgetsActionNotificationType = "ACTUAL"|"FORECASTED" -typealias BudgetsActionApprovalModel = "AUTOMATIC"|"MANUAL" +typealias BudgetsActionActionType = "APPLY_IAM_POLICY"|"APPLY_SCP_POLICY"|"RUN_SSM_DOCUMENTS" diff --git a/pkl/aws/cassandra/keyspace.pkl b/pkl/aws/cassandra/keyspace.pkl index c48ab4c0..750e97b9 100644 --- a/pkl/aws/cassandra/keyspace.pkl +++ b/pkl/aws/cassandra/keyspace.pkl @@ -6,7 +6,7 @@ module aws.cassandra.keyspace import "../../cloudformation.pkl" /// -open class Tag { +open class KeyspaceTag { Key: String|Mapping Value: String|Mapping } @@ -14,14 +14,15 @@ open class Tag { typealias ReplicationSpecificationReplicationStrategy = "SINGLE_REGION"|"MULTI_REGION" /// -open class ReplicationSpecification { +open class KeyspaceReplicationSpecification { ReplicationStrategy: (ReplicationSpecificationReplicationStrategy|Mapping)? - RegionList: (RegionList)? + RegionList: (KeyspaceRegionList)? } -/// -open class RegionList { -} +typealias RegionListArray = "ap-northeast-1"|"ap-northeast-2"|"ap-south-1"|"ap-southeast-1"|"ap-southeast-2"|"ca-central-1"|"eu-central-1"|"eu-north-1"|"eu-west-1"|"eu-west-2"|"eu-west-3"|"sa-east-1"|"us-east-1"|"us-east-2"|"us-west-1"|"us-west-2" + +typealias KeyspaceRegionList = Listing<(RegionListArray|Mapping)?> + /// Resource schema for AWS::Cassandra::Keyspace open class Keyspace extends cloudformation.Resource { @@ -33,10 +34,10 @@ open class Keyspace extends cloudformation.Resource { hidden KeyspaceName: (String(matches(Regex(#"^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"#)))|Mapping)? /// - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// - hidden ReplicationSpecification: (ReplicationSpecification)? + hidden ReplicationSpecification: (KeyspaceReplicationSpecification)? Properties { ["KeyspaceName"] = if (KeyspaceName == null) null else KeyspaceName diff --git a/pkl/aws/cassandra/table.pkl b/pkl/aws/cassandra/table.pkl index 73705729..8e2ebc62 100644 --- a/pkl/aws/cassandra/table.pkl +++ b/pkl/aws/cassandra/table.pkl @@ -5,89 +5,86 @@ module aws.cassandra.table import "../../cloudformation.pkl" -typealias ClusteringKeyColumnOrderBy = "ASC"|"DESC" - -/// -open class ClusteringKeyColumn { - OrderBy: (ClusteringKeyColumnOrderBy|Mapping)? - Column: Column +/// Represents replica specifications. +open class TableReplicaSpecification { + ReadCapacityUnits: (Int|Mapping)? + ReadCapacityAutoScaling: (TableAutoScalingSetting)? + Region: String|Mapping } +typealias TableKmsKeyIdentifier = String|Mapping + + /// Throughput for the specified table, which consists of values for ReadCapacityUnits and WriteCapacityUnits -open class ProvisionedThroughput { +open class TableProvisionedThroughput { ReadCapacityUnits: Int|Mapping WriteCapacityUnits: Int|Mapping } -/// A key-value pair to apply to the resource -open class Tag { - Value: String|Mapping - Key: String|Mapping +/// +open class TableColumn { + ColumnName: String(matches(Regex(#"^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"#)))|Mapping + ColumnType: String|Mapping +} + +/// Represents configuration for target tracking scaling policy. +open class TableTargetTrackingScalingPolicyConfiguration { + ScaleOutCooldown: (Int|Mapping)? + TargetValue: Int|Mapping + DisableScaleIn: (Boolean|Mapping)? + ScaleInCooldown: (Int|Mapping)? } -/// The AWS KMS customer master key (CMK) that should be used for the AWS KMS encryption. To specify a CMK, use its key ID, Amazon Resource Name (ARN), alias name, or alias ARN. -open class KmsKeyIdentifier { +typealias TableEncryptionType = String|Mapping + + +/// +open class TableBillingMode { + Mode: TableMode + ProvisionedThroughput: (TableProvisionedThroughput)? } /// Represents configuration for auto scaling. -open class AutoScalingSetting { - ScalingPolicy: (ScalingPolicy)? +open class TableAutoScalingSetting { AutoScalingDisabled: (Boolean|Mapping)? MinimumUnits: (Int|Mapping)? MaximumUnits: (Int|Mapping)? + ScalingPolicy: (TableScalingPolicy)? } -/// Represents scaling policy. -open class ScalingPolicy { - TargetTrackingScalingPolicyConfiguration: (TargetTrackingScalingPolicyConfiguration)? +/// Represents the settings used to enable server-side encryption +open class TableEncryptionSpecification { + EncryptionType: TableEncryptionType + KmsKeyIdentifier: (TableKmsKeyIdentifier)? } -/// Represents replica specifications. -open class ReplicaSpecification { - Region: String|Mapping - ReadCapacityUnits: (Int|Mapping)? - ReadCapacityAutoScaling: (AutoScalingSetting)? +/// Represents the read and write settings used for AutoScaling. +open class TableAutoScalingSpecification { + ReadCapacityAutoScaling: (TableAutoScalingSetting)? + WriteCapacityAutoScaling: (TableAutoScalingSetting)? } -/// -open class BillingMode { - Mode: Mode - ProvisionedThroughput: (ProvisionedThroughput)? +/// Represents scaling policy. +open class TableScalingPolicy { + TargetTrackingScalingPolicyConfiguration: (TableTargetTrackingScalingPolicyConfiguration)? } -/// Represents the settings used to enable server-side encryption -open class EncryptionSpecification { - EncryptionType: EncryptionType - KmsKeyIdentifier: (KmsKeyIdentifier)? +/// A key-value pair to apply to the resource +open class TableTag { + Key: String|Mapping + Value: String|Mapping } -/// Represents configuration for target tracking scaling policy. -open class TargetTrackingScalingPolicyConfiguration { - DisableScaleIn: (Boolean|Mapping)? - ScaleInCooldown: (Int|Mapping)? - ScaleOutCooldown: (Int|Mapping)? - TargetValue: Int|Mapping -} +typealias ClusteringKeyColumnOrderBy = "ASC"|"DESC" /// -open class Column { - ColumnName: String(matches(Regex(#"^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"#)))|Mapping - ColumnType: String|Mapping -} - -/// Capacity mode for the specified table -open class Mode { +open class TableClusteringKeyColumn { + Column: TableColumn + OrderBy: (ClusteringKeyColumnOrderBy|Mapping)? } -/// Server-side encryption type -open class EncryptionType { -} +typealias TableMode = String|Mapping -/// Represents the read and write settings used for AutoScaling. -open class AutoScalingSpecification { - WriteCapacityAutoScaling: (AutoScalingSetting)? - ReadCapacityAutoScaling: (AutoScalingSetting)? -} /// Resource schema for AWS::Cassandra::Table open class Table extends cloudformation.Resource { @@ -95,59 +92,59 @@ open class Table extends cloudformation.Resource { Type = "AWS::Cassandra::Table" - /// - hidden EncryptionSpecification: (EncryptionSpecification)? + /// Non-key columns of the table + hidden RegularColumns: (Listing)? - /// - hidden BillingMode: (BillingMode)? + /// Clustering key columns of the table + hidden ClusteringKeyColumns: (Listing)? - /// Indicates whether point in time recovery is enabled (true) or disabled (false) on the table - hidden PointInTimeRecoveryEnabled: (Boolean|Mapping)? + /// Name for Cassandra keyspace + hidden KeyspaceName: String(matches(Regex(#"^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"#)))|Mapping /// Indicates whether client side timestamps are enabled (true) or disabled (false) on the table. False by default, once it is enabled it cannot be disabled again. hidden ClientSideTimestampsEnabled: (Boolean|Mapping)? + /// An array of key-value pairs to apply to this resource + hidden Tags: (Listing)? + /// Default TTL (Time To Live) in seconds, where zero is disabled. If the value is greater than zero, TTL is enabled for the entire table and an expiration timestamp is added to each column. hidden DefaultTimeToLive: (Int|Mapping)? - /// Name for Cassandra table - hidden TableName: (String(matches(Regex(#"^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"#)))|Mapping)? - - /// Non-key columns of the table - hidden RegularColumns: (Listing)? + /// + hidden EncryptionSpecification: (TableEncryptionSpecification)? - /// Partition key columns of the table - hidden PartitionKeyColumns: Listing + /// + hidden AutoScalingSpecifications: (TableAutoScalingSpecification)? - /// Clustering key columns of the table - hidden ClusteringKeyColumns: (Listing)? + /// Indicates whether point in time recovery is enabled (true) or disabled (false) on the table + hidden PointInTimeRecoveryEnabled: (Boolean|Mapping)? /// - hidden ReplicaSpecifications: (Listing)? + hidden BillingMode: (TableBillingMode)? - /// Name for Cassandra keyspace - hidden KeyspaceName: String(matches(Regex(#"^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"#)))|Mapping - - /// An array of key-value pairs to apply to this resource - hidden Tags: (Listing)? + /// Partition key columns of the table + hidden PartitionKeyColumns: Listing /// - hidden AutoScalingSpecifications: (AutoScalingSpecification)? + hidden ReplicaSpecifications: (Listing)? + + /// Name for Cassandra table + hidden TableName: (String(matches(Regex(#"^[a-zA-Z0-9][a-zA-Z0-9_]{1,47}$"#)))|Mapping)? Properties { - ["EncryptionSpecification"] = if (EncryptionSpecification == null) null else EncryptionSpecification - ["BillingMode"] = if (BillingMode == null) null else BillingMode - ["PointInTimeRecoveryEnabled"] = if (PointInTimeRecoveryEnabled == null) null else PointInTimeRecoveryEnabled - ["ClientSideTimestampsEnabled"] = if (ClientSideTimestampsEnabled == null) null else ClientSideTimestampsEnabled - ["DefaultTimeToLive"] = if (DefaultTimeToLive == null) null else DefaultTimeToLive - ["TableName"] = if (TableName == null) null else TableName ["RegularColumns"] = if (RegularColumns == null) null else RegularColumns - ["PartitionKeyColumns"] = if (PartitionKeyColumns == null) null else PartitionKeyColumns ["ClusteringKeyColumns"] = if (ClusteringKeyColumns == null) null else ClusteringKeyColumns - ["ReplicaSpecifications"] = if (ReplicaSpecifications == null) null else ReplicaSpecifications ["KeyspaceName"] = if (KeyspaceName == null) null else KeyspaceName + ["ClientSideTimestampsEnabled"] = if (ClientSideTimestampsEnabled == null) null else ClientSideTimestampsEnabled ["Tags"] = if (Tags == null) null else Tags + ["DefaultTimeToLive"] = if (DefaultTimeToLive == null) null else DefaultTimeToLive + ["EncryptionSpecification"] = if (EncryptionSpecification == null) null else EncryptionSpecification ["AutoScalingSpecifications"] = if (AutoScalingSpecifications == null) null else AutoScalingSpecifications + ["PointInTimeRecoveryEnabled"] = if (PointInTimeRecoveryEnabled == null) null else PointInTimeRecoveryEnabled + ["BillingMode"] = if (BillingMode == null) null else BillingMode + ["PartitionKeyColumns"] = if (PartitionKeyColumns == null) null else PartitionKeyColumns + ["ReplicaSpecifications"] = if (ReplicaSpecifications == null) null else ReplicaSpecifications + ["TableName"] = if (TableName == null) null else TableName } } diff --git a/pkl/aws/ce/anomalymonitor.pkl b/pkl/aws/ce/anomalymonitor.pkl index 37afa02b..c2598ce7 100644 --- a/pkl/aws/ce/anomalymonitor.pkl +++ b/pkl/aws/ce/anomalymonitor.pkl @@ -5,48 +5,47 @@ module aws.ce.anomalymonitor import "../../cloudformation.pkl" +typealias AnomalyMonitorArn = String|Mapping + + /// A key-value pair to associate with a resource. -open class ResourceTag { +open class AnomalyMonitorResourceTag { Key: String(matches(Regex(#"^(?!aws:).*$"#)))|Mapping Value: String|Mapping } -/// Monitor ARN -open class Arn { -} - /// AWS Cost Anomaly Detection leverages advanced Machine Learning technologies to identify anomalous spend and root causes, so you can quickly take action. You can use Cost Anomaly Detection by creating monitor. open class AnomalyMonitor extends cloudformation.Resource { Type = "AWS::CE::AnomalyMonitor" + /// + hidden MonitorType: AnomalyMonitorMonitorType|Mapping + /// The dimensions to evaluate hidden MonitorDimension: (AnomalyMonitorMonitorDimension|Mapping)? - /// Tags to assign to monitor. - hidden ResourceTags: (Listing)? - /// hidden MonitorSpecification: (String|Mapping)? - /// - hidden MonitorType: AnomalyMonitorMonitorType|Mapping + /// Tags to assign to monitor. + hidden ResourceTags: (Listing)? /// The name of the monitor. hidden MonitorName: String(matches(Regex(#"[\S\s]*"#)))|Mapping Properties { + ["MonitorType"] = if (MonitorType == null) null else MonitorType ["MonitorDimension"] = if (MonitorDimension == null) null else MonitorDimension - ["ResourceTags"] = if (ResourceTags == null) null else ResourceTags ["MonitorSpecification"] = if (MonitorSpecification == null) null else MonitorSpecification - ["MonitorType"] = if (MonitorType == null) null else MonitorType + ["ResourceTags"] = if (ResourceTags == null) null else ResourceTags ["MonitorName"] = if (MonitorName == null) null else MonitorName } } -typealias AnomalyMonitorMonitorDimension = "SERVICE" - typealias AnomalyMonitorMonitorType = "DIMENSIONAL"|"CUSTOM" + +typealias AnomalyMonitorMonitorDimension = "SERVICE" diff --git a/pkl/aws/ce/anomalysubscription.pkl b/pkl/aws/ce/anomalysubscription.pkl index dc482da6..d6790b82 100644 --- a/pkl/aws/ce/anomalysubscription.pkl +++ b/pkl/aws/ce/anomalysubscription.pkl @@ -5,25 +5,24 @@ module aws.ce.anomalysubscription import "../../cloudformation.pkl" -/// Subscription ARN -open class Arn { -} +typealias AnomalySubscriptionArn = String|Mapping + typealias SubscriberStatus = "CONFIRMED"|"DECLINED" typealias SubscriberType = "EMAIL"|"SNS" /// -open class Subscriber { +open class AnomalySubscriptionSubscriber { Address: String(matches(Regex(#"(^[a-zA-Z0-9.!#$%&'*+=?^_‘{|}~-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$)|(^arn:(aws[a-zA-Z-]*):sns:[a-zA-Z0-9-]+:[0-9]{12}:[a-zA-Z0-9_-]+(\.fifo)?$)"#)))|Mapping Status: (SubscriberStatus|Mapping)? Type: SubscriberType|Mapping } /// A key-value pair to associate with a resource. -open class ResourceTag { - Key: String(matches(Regex(#"^(?!aws:).*$"#)))|Mapping +open class AnomalySubscriptionResourceTag { Value: String|Mapping + Key: String(matches(Regex(#"^(?!aws:).*$"#)))|Mapping } /// AWS Cost Anomaly Detection leverages advanced Machine Learning technologies to identify anomalous spend and root causes, so you can quickly take action. Create subscription to be notified @@ -32,35 +31,35 @@ open class AnomalySubscription extends cloudformation.Resource { Type = "AWS::CE::AnomalySubscription" + /// Tags to assign to subscription. + hidden ResourceTags: (Listing)? + /// A list of subscriber - hidden Subscribers: Listing + hidden Subscribers: Listing - /// The dollar value that triggers a notification if the threshold is exceeded. - hidden Threshold: (Number|Mapping)? + /// An Expression object in JSON String format used to specify the anomalies that you want to generate alerts for. + hidden ThresholdExpression: (String|Mapping)? - /// Tags to assign to subscription. - hidden ResourceTags: (Listing)? + /// The frequency at which anomaly reports are sent over email. + hidden Frequency: AnomalySubscriptionFrequency|Mapping /// The name of the subscription. hidden SubscriptionName: String(matches(Regex(#"[\S\s]*"#)))|Mapping /// A list of cost anomaly monitors. - hidden MonitorArnList: Listing - - /// An Expression object in JSON String format used to specify the anomalies that you want to generate alerts for. - hidden ThresholdExpression: (String|Mapping)? + hidden MonitorArnList: Listing - /// The frequency at which anomaly reports are sent over email. - hidden Frequency: AnomalySubscriptionFrequency|Mapping + /// The dollar value that triggers a notification if the threshold is exceeded. + hidden Threshold: (Number|Mapping)? Properties { - ["Subscribers"] = if (Subscribers == null) null else Subscribers - ["Threshold"] = if (Threshold == null) null else Threshold ["ResourceTags"] = if (ResourceTags == null) null else ResourceTags - ["SubscriptionName"] = if (SubscriptionName == null) null else SubscriptionName - ["MonitorArnList"] = if (MonitorArnList == null) null else MonitorArnList + ["Subscribers"] = if (Subscribers == null) null else Subscribers ["ThresholdExpression"] = if (ThresholdExpression == null) null else ThresholdExpression ["Frequency"] = if (Frequency == null) null else Frequency + ["SubscriptionName"] = if (SubscriptionName == null) null else SubscriptionName + ["MonitorArnList"] = if (MonitorArnList == null) null else MonitorArnList + ["Threshold"] = if (Threshold == null) null else Threshold } } diff --git a/pkl/aws/ce/costcategory.pkl b/pkl/aws/ce/costcategory.pkl index 4052b18b..e95fcf64 100644 --- a/pkl/aws/ce/costcategory.pkl +++ b/pkl/aws/ce/costcategory.pkl @@ -5,9 +5,8 @@ module aws.ce.costcategory import "../../cloudformation.pkl" -/// ISO 8601 date time with offset format -open class ZonedDateTime { -} +typealias CostCategoryZonedDateTime = String|Mapping + /// Cost Category enables you to map your cost and usage into meaningful categories. You can use Cost Category to organize your costs using a rule-based engine. open class CostCategory extends cloudformation.Resource { @@ -15,6 +14,12 @@ open class CostCategory extends cloudformation.Resource { Type = "AWS::CE::CostCategory" + /// Json array format of CostCategorySplitChargeRule in Billing and Cost Management API + hidden SplitChargeRules: (String|Mapping)? + + /// The default value for the cost category + hidden DefaultValue: (String|Mapping)? + /// hidden Name: String|Mapping @@ -24,18 +29,12 @@ open class CostCategory extends cloudformation.Resource { /// JSON array format of Expression in Billing and Cost Management API hidden Rules: String|Mapping - /// Json array format of CostCategorySplitChargeRule in Billing and Cost Management API - hidden SplitChargeRules: (String|Mapping)? - - /// The default value for the cost category - hidden DefaultValue: (String|Mapping)? - Properties { + ["SplitChargeRules"] = if (SplitChargeRules == null) null else SplitChargeRules + ["DefaultValue"] = if (DefaultValue == null) null else DefaultValue ["Name"] = if (Name == null) null else Name ["RuleVersion"] = if (RuleVersion == null) null else RuleVersion ["Rules"] = if (Rules == null) null else Rules - ["SplitChargeRules"] = if (SplitChargeRules == null) null else SplitChargeRules - ["DefaultValue"] = if (DefaultValue == null) null else DefaultValue } } diff --git a/pkl/aws/certificatemanager/account.pkl b/pkl/aws/certificatemanager/account.pkl index d4cc5441..055f8070 100644 --- a/pkl/aws/certificatemanager/account.pkl +++ b/pkl/aws/certificatemanager/account.pkl @@ -6,13 +6,12 @@ module aws.certificatemanager.account import "../../cloudformation.pkl" /// -open class ExpiryEventsConfiguration { +open class AccountExpiryEventsConfiguration { DaysBeforeExpiry: (Int|Mapping)? } -/// -open class AccountId { -} +typealias AccountAccountId = String|Mapping + /// Resource schema for AWS::CertificateManager::Account. open class Account extends cloudformation.Resource { @@ -21,7 +20,7 @@ open class Account extends cloudformation.Resource { /// - hidden ExpiryEventsConfiguration: ExpiryEventsConfiguration + hidden ExpiryEventsConfiguration: AccountExpiryEventsConfiguration Properties { ["ExpiryEventsConfiguration"] = if (ExpiryEventsConfiguration == null) null else ExpiryEventsConfiguration diff --git a/pkl/aws/certificatemanager/certificate.pkl b/pkl/aws/certificatemanager/certificate.pkl index c7fe5f2a..992e79d8 100644 --- a/pkl/aws/certificatemanager/certificate.pkl +++ b/pkl/aws/certificatemanager/certificate.pkl @@ -6,14 +6,14 @@ module aws.certificatemanager.certificate import "../../cloudformation.pkl" /// -open class DomainValidationOption { - DomainName: String|Mapping +open class CertificateDomainValidationOption { ValidationDomain: (String|Mapping)? HostedZoneId: (String|Mapping)? + DomainName: String|Mapping } /// -open class Tag { +open class CertificateTag { Key: String|Mapping Value: String|Mapping } @@ -25,38 +25,38 @@ open class Certificate extends cloudformation.Resource { /// - hidden CertificateAuthorityArn: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden DomainName: String|Mapping + hidden KeyAlgorithm: (String|Mapping)? /// - hidden ValidationMethod: (String|Mapping)? + hidden DomainValidationOptions: (Listing)? /// - hidden SubjectAlternativeNames: (Listing)? + hidden CertificateTransparencyLoggingPreference: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden DomainName: String|Mapping /// - hidden KeyAlgorithm: (String|Mapping)? + hidden ValidationMethod: (String|Mapping)? /// - hidden DomainValidationOptions: (Listing)? + hidden SubjectAlternativeNames: (Listing)? /// - hidden CertificateTransparencyLoggingPreference: (String|Mapping)? + hidden CertificateAuthorityArn: (String|Mapping)? Properties { - ["CertificateAuthorityArn"] = if (CertificateAuthorityArn == null) null else CertificateAuthorityArn - ["DomainName"] = if (DomainName == null) null else DomainName - ["ValidationMethod"] = if (ValidationMethod == null) null else ValidationMethod - ["SubjectAlternativeNames"] = if (SubjectAlternativeNames == null) null else SubjectAlternativeNames ["Tags"] = if (Tags == null) null else Tags ["KeyAlgorithm"] = if (KeyAlgorithm == null) null else KeyAlgorithm ["DomainValidationOptions"] = if (DomainValidationOptions == null) null else DomainValidationOptions ["CertificateTransparencyLoggingPreference"] = if (CertificateTransparencyLoggingPreference == null) null else CertificateTransparencyLoggingPreference + ["DomainName"] = if (DomainName == null) null else DomainName + ["ValidationMethod"] = if (ValidationMethod == null) null else ValidationMethod + ["SubjectAlternativeNames"] = if (SubjectAlternativeNames == null) null else SubjectAlternativeNames + ["CertificateAuthorityArn"] = if (CertificateAuthorityArn == null) null else CertificateAuthorityArn } } diff --git a/pkl/aws/chatbot/microsoftteamschannelconfiguration.pkl b/pkl/aws/chatbot/microsoftteamschannelconfiguration.pkl index 7ed48956..01bfc47b 100644 --- a/pkl/aws/chatbot/microsoftteamschannelconfiguration.pkl +++ b/pkl/aws/chatbot/microsoftteamschannelconfiguration.pkl @@ -11,21 +11,18 @@ open class MicrosoftTeamsChannelConfiguration extends cloudformation.Resource { Type = "AWS::Chatbot::MicrosoftTeamsChannelConfiguration" + /// The id of the Microsoft Teams tenant + hidden TeamsTenantId: String(matches(Regex(#"^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$"#)))|Mapping + /// ARNs of SNS topics which delivers notifications to AWS Chatbot, for example CloudWatch alarm notifications. hidden SnsTopicArns: (Listing)? /// The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed 'AdministratorAccess' policy is applied as a default if this is not set. hidden GuardrailPolicies: (Listing)? - /// The id of the Microsoft Teams team - hidden TeamId: String(matches(Regex(#"^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$"#)))|Mapping - /// The id of the Microsoft Teams channel hidden TeamsChannelId: String(matches(Regex(#"^([a-zA-Z0-9-_=+/.,])*%3[aA]([a-zA-Z0-9-_=+/.,])*%40([a-zA-Z0-9-_=+/.,])*$"#)))|Mapping - /// The id of the Microsoft Teams tenant - hidden TeamsTenantId: String(matches(Regex(#"^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$"#)))|Mapping - /// The name of the configuration hidden ConfigurationName: String(matches(Regex(#"^[A-Za-z0-9-_]+$"#)))|Mapping @@ -38,16 +35,19 @@ open class MicrosoftTeamsChannelConfiguration extends cloudformation.Resource { /// Enables use of a user role requirement in your chat configuration hidden UserRoleRequired: (Boolean|Mapping)? + /// The id of the Microsoft Teams team + hidden TeamId: String(matches(Regex(#"^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$"#)))|Mapping + Properties { + ["TeamsTenantId"] = if (TeamsTenantId == null) null else TeamsTenantId ["SnsTopicArns"] = if (SnsTopicArns == null) null else SnsTopicArns ["GuardrailPolicies"] = if (GuardrailPolicies == null) null else GuardrailPolicies - ["TeamId"] = if (TeamId == null) null else TeamId ["TeamsChannelId"] = if (TeamsChannelId == null) null else TeamsChannelId - ["TeamsTenantId"] = if (TeamsTenantId == null) null else TeamsTenantId ["ConfigurationName"] = if (ConfigurationName == null) null else ConfigurationName ["IamRoleArn"] = if (IamRoleArn == null) null else IamRoleArn ["LoggingLevel"] = if (LoggingLevel == null) null else LoggingLevel ["UserRoleRequired"] = if (UserRoleRequired == null) null else UserRoleRequired + ["TeamId"] = if (TeamId == null) null else TeamId } } diff --git a/pkl/aws/chatbot/slackchannelconfiguration.pkl b/pkl/aws/chatbot/slackchannelconfiguration.pkl index af70a503..4b1bb277 100644 --- a/pkl/aws/chatbot/slackchannelconfiguration.pkl +++ b/pkl/aws/chatbot/slackchannelconfiguration.pkl @@ -14,6 +14,15 @@ open class SlackChannelConfiguration extends cloudformation.Resource { /// The id of the Slack workspace hidden SlackWorkspaceId: String(matches(Regex(#"^[0-9A-Z]{1,255}$"#)))|Mapping + /// The ARN of the IAM role that defines the permissions for AWS Chatbot + hidden IamRoleArn: String(matches(Regex(#"^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"#)))|Mapping + + /// Specifies the logging level for this configuration:ERROR,INFO or NONE. This property affects the log entries pushed to Amazon CloudWatch logs + hidden LoggingLevel: (String(matches(Regex(#"^(ERROR|INFO|NONE)$"#)))|Mapping)? + + /// The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed 'AdministratorAccess' policy is applied as a default if this is not set. + hidden GuardrailPolicies: (Listing)? + /// Enables use of a user role requirement in your chat configuration hidden UserRoleRequired: (Boolean|Mapping)? @@ -23,27 +32,18 @@ open class SlackChannelConfiguration extends cloudformation.Resource { /// The name of the configuration hidden ConfigurationName: String(matches(Regex(#"^[A-Za-z0-9-_]+$"#)))|Mapping - /// The ARN of the IAM role that defines the permissions for AWS Chatbot - hidden IamRoleArn: String(matches(Regex(#"^arn:(aws[a-zA-Z-]*)?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"#)))|Mapping - /// ARNs of SNS topics which delivers notifications to AWS Chatbot, for example CloudWatch alarm notifications. hidden SnsTopicArns: (Listing)? - /// Specifies the logging level for this configuration:ERROR,INFO or NONE. This property affects the log entries pushed to Amazon CloudWatch logs - hidden LoggingLevel: (String(matches(Regex(#"^(ERROR|INFO|NONE)$"#)))|Mapping)? - - /// The list of IAM policy ARNs that are applied as channel guardrails. The AWS managed 'AdministratorAccess' policy is applied as a default if this is not set. - hidden GuardrailPolicies: (Listing)? - Properties { ["SlackWorkspaceId"] = if (SlackWorkspaceId == null) null else SlackWorkspaceId + ["IamRoleArn"] = if (IamRoleArn == null) null else IamRoleArn + ["LoggingLevel"] = if (LoggingLevel == null) null else LoggingLevel + ["GuardrailPolicies"] = if (GuardrailPolicies == null) null else GuardrailPolicies ["UserRoleRequired"] = if (UserRoleRequired == null) null else UserRoleRequired ["SlackChannelId"] = if (SlackChannelId == null) null else SlackChannelId ["ConfigurationName"] = if (ConfigurationName == null) null else ConfigurationName - ["IamRoleArn"] = if (IamRoleArn == null) null else IamRoleArn ["SnsTopicArns"] = if (SnsTopicArns == null) null else SnsTopicArns - ["LoggingLevel"] = if (LoggingLevel == null) null else LoggingLevel - ["GuardrailPolicies"] = if (GuardrailPolicies == null) null else GuardrailPolicies } } diff --git a/pkl/aws/cleanrooms/analysistemplate.pkl b/pkl/aws/cleanrooms/analysistemplate.pkl index 1a454adf..b23f1f9b 100644 --- a/pkl/aws/cleanrooms/analysistemplate.pkl +++ b/pkl/aws/cleanrooms/analysistemplate.pkl @@ -6,25 +6,17 @@ module aws.cleanrooms.analysistemplate import "../../cloudformation.pkl" /// -open class TableName { +open class AnalysisTemplateAnalysisSchema { + ReferencedTables: AnalysisTemplateReferencedTables } /// -open class ReferencedTables { -} - -/// -open class AnalysisSchema { - ReferencedTables: ReferencedTables -} - -/// -open class AnalysisSource { +open class AnalysisTemplateAnalysisSource { Text: String|Mapping } /// -open class Tag { +open class AnalysisTemplateTag { Key: String|Mapping Value: String|Mapping } @@ -32,47 +24,53 @@ open class Tag { typealias AnalysisParameterType = "SMALLINT"|"INTEGER"|"BIGINT"|"DECIMAL"|"REAL"|"DOUBLE_PRECISION"|"BOOLEAN"|"CHAR"|"VARCHAR"|"DATE"|"TIMESTAMP"|"TIMESTAMPTZ"|"TIME"|"TIMETZ"|"VARBYTE" /// -open class AnalysisParameter { +open class AnalysisTemplateAnalysisParameter { + DefaultValue: (String|Mapping)? Name: String(matches(Regex(#"[0-9a-zA-Z_]+"#)))|Mapping Type: AnalysisParameterType|Mapping - DefaultValue: (String|Mapping)? } +typealias AnalysisTemplateTableName = String|Mapping + + +typealias AnalysisTemplateReferencedTables = Listing<(AnalysisTemplateTableName)?> + + /// Represents a stored analysis within a collaboration open class AnalysisTemplate extends cloudformation.Resource { Type = "AWS::CleanRooms::AnalysisTemplate" - /// An arbitrary set of tags (key-value pairs) for this cleanrooms analysis template. - hidden Tags: (Listing)? - /// - hidden Description: (String(matches(Regex(#"^[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\n]*$"#)))|Mapping)? + hidden MembershipIdentifier: String(matches(Regex(#"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping - /// - hidden Name: String(matches(Regex(#"^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$"#)))|Mapping + /// The member who can query can provide this placeholder for a literal data value in an analysis template + hidden AnalysisParameters: (Listing)? /// - hidden Format: AnalysisTemplateFormat|Mapping + hidden Description: (String(matches(Regex(#"^[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\\n]*$"#)))|Mapping)? - /// The member who can query can provide this placeholder for a literal data value in an analysis template - hidden AnalysisParameters: (Listing)? + /// An arbitrary set of tags (key-value pairs) for this cleanrooms analysis template. + hidden Tags: (Listing)? /// - hidden MembershipIdentifier: String(matches(Regex(#"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping + hidden Source: AnalysisTemplateAnalysisSource /// - hidden Source: AnalysisSource + hidden Format: AnalysisTemplateFormat|Mapping + + /// + hidden Name: String(matches(Regex(#"^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$"#)))|Mapping Properties { - ["Tags"] = if (Tags == null) null else Tags - ["Description"] = if (Description == null) null else Description - ["Name"] = if (Name == null) null else Name - ["Format"] = if (Format == null) null else Format - ["AnalysisParameters"] = if (AnalysisParameters == null) null else AnalysisParameters ["MembershipIdentifier"] = if (MembershipIdentifier == null) null else MembershipIdentifier + ["AnalysisParameters"] = if (AnalysisParameters == null) null else AnalysisParameters + ["Description"] = if (Description == null) null else Description + ["Tags"] = if (Tags == null) null else Tags ["Source"] = if (Source == null) null else Source + ["Format"] = if (Format == null) null else Format + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/cleanrooms/collaboration.pkl b/pkl/aws/cleanrooms/collaboration.pkl index c0e5c56b..483c4006 100644 --- a/pkl/aws/cleanrooms/collaboration.pkl +++ b/pkl/aws/cleanrooms/collaboration.pkl @@ -6,57 +6,52 @@ module aws.cleanrooms.collaboration import "../../cloudformation.pkl" /// -open class CollaborationQueryLogStatus { +open class CollaborationTag { + Key: String|Mapping + Value: String|Mapping } -/// -open class MemberAbilities { -} +typealias CollaborationName = String|Mapping -/// -open class MemberSpecification { - AccountId: String(matches(Regex(#"^\d+$"#)))|Mapping - MemberAbilities: MemberAbilities - DisplayName: Name - PaymentConfiguration: (PaymentConfiguration)? -} -/// -open class MemberStatus { -} +typealias CollaborationCollaborationQueryLogStatus = String|Mapping -/// -open class Tag { - Key: String|Mapping - Value: String|Mapping -} /// -open class Name { +open class CollaborationMemberSpecification { + DisplayName: CollaborationName + PaymentConfiguration: (CollaborationPaymentConfiguration)? + AccountId: String(matches(Regex(#"^\d+$"#)))|Mapping + MemberAbilities: CollaborationMemberAbilities } +typealias CollaborationMemberStatus = String|Mapping + + /// -open class DataEncryptionMetadata { +open class CollaborationDataEncryptionMetadata { + AllowCleartext: Boolean|Mapping AllowDuplicates: Boolean|Mapping AllowJoinsOnColumnsWithDifferentNames: Boolean|Mapping PreserveNulls: Boolean|Mapping - AllowCleartext: Boolean|Mapping } /// -open class MemberAbility { +open class CollaborationPaymentConfiguration { + QueryCompute: CollaborationQueryComputePaymentConfig } /// -open class PaymentConfiguration { - QueryCompute: QueryComputePaymentConfig -} - -/// -open class QueryComputePaymentConfig { +open class CollaborationQueryComputePaymentConfig { IsResponsible: Boolean|Mapping } +typealias CollaborationMemberAbility = String|Mapping + + +typealias CollaborationMemberAbilities = Listing<(CollaborationMemberAbility)?> + + /// Represents a collaboration between AWS accounts that allows for secure data collaboration open class Collaboration extends cloudformation.Resource { @@ -64,41 +59,41 @@ open class Collaboration extends cloudformation.Resource { /// - hidden CreatorMemberAbilities: MemberAbilities + hidden Members: Listing /// - hidden DataEncryptionMetadata: (DataEncryptionMetadata)? + hidden Name: String(matches(Regex(#"^(?!\s*$)[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t]*$"#)))|Mapping /// - hidden Description: String(matches(Regex(#"^(?!\s*$)[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\n]*$"#)))|Mapping + hidden CreatorMemberAbilities: CollaborationMemberAbilities /// - hidden Members: Listing + hidden CreatorDisplayName: CollaborationName /// - hidden Name: String(matches(Regex(#"^(?!\s*$)[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t]*$"#)))|Mapping + hidden DataEncryptionMetadata: (CollaborationDataEncryptionMetadata)? /// - hidden CreatorPaymentConfiguration: (PaymentConfiguration)? + hidden Description: String(matches(Regex(#"^(?!\s*$)[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\\n]*$"#)))|Mapping /// - hidden CreatorDisplayName: Name + hidden QueryLogStatus: CollaborationCollaborationQueryLogStatus /// - hidden QueryLogStatus: CollaborationQueryLogStatus + hidden CreatorPaymentConfiguration: (CollaborationPaymentConfiguration)? /// An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { - ["CreatorMemberAbilities"] = if (CreatorMemberAbilities == null) null else CreatorMemberAbilities - ["DataEncryptionMetadata"] = if (DataEncryptionMetadata == null) null else DataEncryptionMetadata - ["Description"] = if (Description == null) null else Description ["Members"] = if (Members == null) null else Members ["Name"] = if (Name == null) null else Name - ["CreatorPaymentConfiguration"] = if (CreatorPaymentConfiguration == null) null else CreatorPaymentConfiguration + ["CreatorMemberAbilities"] = if (CreatorMemberAbilities == null) null else CreatorMemberAbilities ["CreatorDisplayName"] = if (CreatorDisplayName == null) null else CreatorDisplayName + ["DataEncryptionMetadata"] = if (DataEncryptionMetadata == null) null else DataEncryptionMetadata + ["Description"] = if (Description == null) null else Description ["QueryLogStatus"] = if (QueryLogStatus == null) null else QueryLogStatus + ["CreatorPaymentConfiguration"] = if (CreatorPaymentConfiguration == null) null else CreatorPaymentConfiguration ["Tags"] = if (Tags == null) null else Tags } diff --git a/pkl/aws/cleanrooms/configuredtable.pkl b/pkl/aws/cleanrooms/configuredtable.pkl index 15da7a9c..2da27f8e 100644 --- a/pkl/aws/cleanrooms/configuredtable.pkl +++ b/pkl/aws/cleanrooms/configuredtable.pkl @@ -6,122 +6,124 @@ module aws.cleanrooms.configuredtable import "../../cloudformation.pkl" /// -open class TableReference { - Glue: GlueTableReference +open class ConfiguredTableGlueTableReference { + DatabaseName: String(matches(Regex(#"^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$"#)))|Mapping + TableName: String(matches(Regex(#"^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$"#)))|Mapping } /// -open class AggregateFunctionName { +open class ConfiguredTableAggregationConstraint { + ColumnName: ConfiguredTableAnalysisRuleColumnName + Minimum: Number|Mapping + Type: ConfiguredTableAggregationType } /// -open class AnalysisMethod { +open class ConfiguredTableAnalysisRuleList { + JoinColumns: Listing + AllowedJoinOperators: (Listing)? + ListColumns: Listing } /// -open class AnalysisRuleList { - JoinColumns: Listing - AllowedJoinOperators: (Listing)? - ListColumns: Listing +open class ConfiguredTableAnalysisRuleAggregation { + DimensionColumns: Listing + ScalarFunctions: Listing + OutputConstraints: Listing + AggregateColumns: Listing + JoinColumns: Listing + AllowedJoinOperators: (Listing)? + JoinRequired: (ConfiguredTableJoinRequiredOption)? } /// -open class AnalysisRuleCustom { - AllowedAnalyses: AllowedAnalyses - AllowedAnalysisProviders: (AllowedAnalysisProviders)? +open class ConfiguredTableAnalysisRule { + Type: ConfiguredTableConfiguredTableAnalysisRuleType + Policy: ConfiguredTableConfiguredTableAnalysisRulePolicy } -/// -open class AnalysisRule { - Type: ConfiguredTableAnalysisRuleType - Policy: ConfiguredTableAnalysisRulePolicy -} +typealias ConfiguredTableConfiguredTableAnalysisRulePolicyV1 = ConfiguredTableConfiguredTableAnalysisRulePolicyV1List|ConfiguredTableConfiguredTableAnalysisRulePolicyV1Aggregation|ConfiguredTableConfiguredTableAnalysisRulePolicyV1Custom -/// -open class AggregateColumn { - ColumnNames: Listing - Function: AggregateFunctionName -} /// -open class AllowedAnalysisProvider { +open class ConfiguredTableConfiguredTableAnalysisRulePolicy { + V1: ConfiguredTableConfiguredTableAnalysisRulePolicyV1 } +typealias ConfiguredTableAllowedAnalysis = String|Mapping + + +typealias ConfiguredTableJoinRequiredOption = String|Mapping + + +typealias ConfiguredTableAllowedAnalysisProviders = Listing<(ConfiguredTableAllowedAnalysisProvider)?> + + +typealias ConfiguredTableScalarFunctions = String|Mapping + + +typealias ConfiguredTableConfiguredTableAnalysisRuleType = String|Mapping + + /// -open class ConfiguredTableAnalysisRulePolicy { - V1: ConfiguredTableAnalysisRulePolicyV1 +open class ConfiguredTableTableReference { + Glue: ConfiguredTableGlueTableReference } /// -open class GlueTableReference { - TableName: String(matches(Regex(#"^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$"#)))|Mapping - DatabaseName: String(matches(Regex(#"^[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?$"#)))|Mapping +open class ConfiguredTableConfiguredTableAnalysisRulePolicyV1Aggregation { + Aggregation: ConfiguredTableAnalysisRuleAggregation } +typealias ConfiguredTableJoinOperator = String|Mapping + + /// -open class Tag { +open class ConfiguredTableTag { Key: String|Mapping Value: String|Mapping } -/// -open class AnalysisRuleColumnName { -} +typealias ConfiguredTableAllowedAnalyses = Listing<(ConfiguredTableAllowedAnalysis)?> -/// -open class AggregationConstraint { - ColumnName: AnalysisRuleColumnName - Minimum: Number|Mapping - Type: AggregationType -} -/// -open class AggregationType { -} +typealias ConfiguredTableAggregateFunctionName = String|Mapping -/// -open class AllowedAnalysisProviders { -} /// -open class ConfiguredTableAnalysisRulePolicyV1 { +open class ConfiguredTableAnalysisRuleCustom { + AllowedAnalyses: ConfiguredTableAllowedAnalyses + AllowedAnalysisProviders: (ConfiguredTableAllowedAnalysisProviders)? } -/// -open class AllowedAnalyses { -} +typealias ConfiguredTableAggregationType = String|Mapping -/// -open class ConfiguredTableAnalysisRuleType { -} /// -open class JoinOperator { +open class ConfiguredTableConfiguredTableAnalysisRulePolicyV1List { + List: ConfiguredTableAnalysisRuleList } /// -open class JoinRequiredOption { +open class ConfiguredTableConfiguredTableAnalysisRulePolicyV1Custom { + Custom: ConfiguredTableAnalysisRuleCustom } -/// -open class ScalarFunctions { -} +typealias ConfiguredTableAllowedAnalysisProvider = String|Mapping -/// -open class AnalysisRuleAggregation { - ScalarFunctions: Listing - OutputConstraints: Listing - AggregateColumns: Listing - JoinColumns: Listing - AllowedJoinOperators: (Listing)? - JoinRequired: (JoinRequiredOption)? - DimensionColumns: Listing -} /// -open class AllowedAnalysis { +open class ConfiguredTableAggregateColumn { + ColumnNames: Listing + Function: ConfiguredTableAggregateFunctionName } +typealias ConfiguredTableAnalysisRuleColumnName = String|Mapping + + +typealias ConfiguredTableAnalysisMethod = String|Mapping + + /// Represents a table that can be associated with collaborations open class ConfiguredTable extends cloudformation.Resource { @@ -129,34 +131,34 @@ open class ConfiguredTable extends cloudformation.Resource { /// - hidden AllowedColumns: Listing - - /// - hidden AnalysisMethod: AnalysisMethod + hidden AnalysisMethod: ConfiguredTableAnalysisMethod /// - hidden Name: String(matches(Regex(#"^(?!\s*$)[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t]*$"#)))|Mapping + hidden AnalysisRules: (Listing)? /// - hidden TableReference: TableReference + hidden TableReference: ConfiguredTableTableReference /// An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration. - hidden Tags: (Listing)? + hidden Tags: (Listing)? + + /// + hidden AllowedColumns: Listing /// - hidden Description: (String(matches(Regex(#"^[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\n]*$"#)))|Mapping)? + hidden Description: (String(matches(Regex(#"^[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\\n]*$"#)))|Mapping)? /// - hidden AnalysisRules: (Listing)? + hidden Name: String(matches(Regex(#"^(?!\s*$)[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t]*$"#)))|Mapping Properties { - ["AllowedColumns"] = if (AllowedColumns == null) null else AllowedColumns ["AnalysisMethod"] = if (AnalysisMethod == null) null else AnalysisMethod - ["Name"] = if (Name == null) null else Name + ["AnalysisRules"] = if (AnalysisRules == null) null else AnalysisRules ["TableReference"] = if (TableReference == null) null else TableReference ["Tags"] = if (Tags == null) null else Tags + ["AllowedColumns"] = if (AllowedColumns == null) null else AllowedColumns ["Description"] = if (Description == null) null else Description - ["AnalysisRules"] = if (AnalysisRules == null) null else AnalysisRules + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/cleanrooms/configuredtableassociation.pkl b/pkl/aws/cleanrooms/configuredtableassociation.pkl index 61c9ee07..8ae80501 100644 --- a/pkl/aws/cleanrooms/configuredtableassociation.pkl +++ b/pkl/aws/cleanrooms/configuredtableassociation.pkl @@ -6,7 +6,7 @@ module aws.cleanrooms.configuredtableassociation import "../../cloudformation.pkl" /// -open class Tag { +open class ConfiguredTableAssociationTag { Key: String|Mapping Value: String|Mapping } @@ -17,14 +17,8 @@ open class ConfiguredTableAssociation extends cloudformation.Resource { Type = "AWS::CleanRooms::ConfiguredTableAssociation" - /// An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration. - hidden Tags: (Listing)? - /// - hidden ConfiguredTableIdentifier: String(matches(Regex(#"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping - - /// - hidden Description: (String(matches(Regex(#"^[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\n]*$"#)))|Mapping)? + hidden Description: (String(matches(Regex(#"^[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDBFF-\uDC00\uDFFF\t\r\\n]*$"#)))|Mapping)? /// hidden MembershipIdentifier: String(matches(Regex(#"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping @@ -35,13 +29,19 @@ open class ConfiguredTableAssociation extends cloudformation.Resource { /// hidden RoleArn: String|Mapping + /// An arbitrary set of tags (key-value pairs) for this cleanrooms collaboration. + hidden Tags: (Listing)? + + /// + hidden ConfiguredTableIdentifier: String(matches(Regex(#"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping + Properties { - ["Tags"] = if (Tags == null) null else Tags - ["ConfiguredTableIdentifier"] = if (ConfiguredTableIdentifier == null) null else ConfiguredTableIdentifier ["Description"] = if (Description == null) null else Description ["MembershipIdentifier"] = if (MembershipIdentifier == null) null else MembershipIdentifier ["Name"] = if (Name == null) null else Name ["RoleArn"] = if (RoleArn == null) null else RoleArn + ["Tags"] = if (Tags == null) null else Tags + ["ConfiguredTableIdentifier"] = if (ConfiguredTableIdentifier == null) null else ConfiguredTableIdentifier } } diff --git a/pkl/aws/cleanrooms/membership.pkl b/pkl/aws/cleanrooms/membership.pkl index 28d8766f..396b8fc2 100644 --- a/pkl/aws/cleanrooms/membership.pkl +++ b/pkl/aws/cleanrooms/membership.pkl @@ -6,49 +6,46 @@ module aws.cleanrooms.membership import "../../cloudformation.pkl" /// -open class MembershipQueryComputePaymentConfig { +open class MembershipMembershipQueryComputePaymentConfig { IsResponsible: Boolean|Mapping } -/// -open class MembershipQueryLogStatus { -} +typealias MembershipMembershipStatus = String|Mapping + + +typealias MembershipMembershipQueryLogStatus = String|Mapping + + +typealias MembershipResultFormat = String|Mapping -/// -open class MembershipStatus { -} /// -open class Tag { - Key: String|Mapping +open class MembershipTag { Value: String|Mapping + Key: String|Mapping } /// -open class ResultFormat { +open class MembershipMembershipPaymentConfiguration { + QueryCompute: MembershipMembershipQueryComputePaymentConfig } /// -open class ProtectedQueryS3OutputConfiguration { - KeyPrefix: (String|Mapping)? - ResultFormat: ResultFormat - Bucket: String|Mapping +open class MembershipMembershipProtectedQueryOutputConfiguration { + S3: MembershipProtectedQueryS3OutputConfiguration } /// -open class MembershipProtectedQueryResultConfiguration { - OutputConfiguration: MembershipProtectedQueryOutputConfiguration +open class MembershipMembershipProtectedQueryResultConfiguration { + OutputConfiguration: MembershipMembershipProtectedQueryOutputConfiguration RoleArn: (String|Mapping)? } /// -open class MembershipPaymentConfiguration { - QueryCompute: MembershipQueryComputePaymentConfig -} - -/// -open class MembershipProtectedQueryOutputConfiguration { - S3: ProtectedQueryS3OutputConfiguration +open class MembershipProtectedQueryS3OutputConfiguration { + ResultFormat: MembershipResultFormat + Bucket: String|Mapping + KeyPrefix: (String|Mapping)? } /// Represents an AWS account that is a part of a collaboration @@ -61,23 +58,23 @@ open class Membership extends cloudformation.Resource { hidden CollaborationIdentifier: String(matches(Regex(#"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"#)))|Mapping /// - hidden QueryLogStatus: MembershipQueryLogStatus + hidden QueryLogStatus: MembershipMembershipQueryLogStatus /// - hidden PaymentConfiguration: (MembershipPaymentConfiguration)? - - /// An arbitrary set of tags (key-value pairs) for this cleanrooms membership. - hidden Tags: (Listing)? + hidden DefaultResultConfiguration: (MembershipMembershipProtectedQueryResultConfiguration)? /// - hidden DefaultResultConfiguration: (MembershipProtectedQueryResultConfiguration)? + hidden PaymentConfiguration: (MembershipMembershipPaymentConfiguration)? + + /// An arbitrary set of tags (key-value pairs) for this cleanrooms membership. + hidden Tags: (Listing)? Properties { ["CollaborationIdentifier"] = if (CollaborationIdentifier == null) null else CollaborationIdentifier ["QueryLogStatus"] = if (QueryLogStatus == null) null else QueryLogStatus + ["DefaultResultConfiguration"] = if (DefaultResultConfiguration == null) null else DefaultResultConfiguration ["PaymentConfiguration"] = if (PaymentConfiguration == null) null else PaymentConfiguration ["Tags"] = if (Tags == null) null else Tags - ["DefaultResultConfiguration"] = if (DefaultResultConfiguration == null) null else DefaultResultConfiguration } } diff --git a/pkl/aws/cloud9/environmentec2.pkl b/pkl/aws/cloud9/environmentec2.pkl index 5e8a7a5b..6823c7fa 100644 --- a/pkl/aws/cloud9/environmentec2.pkl +++ b/pkl/aws/cloud9/environmentec2.pkl @@ -6,13 +6,13 @@ module aws.cloud9.environmentec2 import "../../cloudformation.pkl" /// -open class Repository { +open class EnvironmentEC2Repository { RepositoryUrl: String|Mapping PathComponent: String|Mapping } /// -open class Tag { +open class EnvironmentEC2Tag { Value: String|Mapping Key: String|Mapping } @@ -24,10 +24,10 @@ open class EnvironmentEC2 extends cloudformation.Resource { /// - hidden Repositories: (Listing)? + hidden Repositories: (Listing)? /// - hidden Description: (String|Mapping)? + hidden OwnerArn: (String|Mapping)? /// hidden ConnectionType: (String|Mapping)? @@ -36,10 +36,10 @@ open class EnvironmentEC2 extends cloudformation.Resource { hidden ImageId: String|Mapping /// - hidden InstanceType: String|Mapping + hidden Name: (String|Mapping)? /// - hidden OwnerArn: (String|Mapping)? + hidden Description: (String|Mapping)? /// hidden AutomaticStopTimeMinutes: (Int|Mapping)? @@ -48,22 +48,22 @@ open class EnvironmentEC2 extends cloudformation.Resource { hidden SubnetId: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden InstanceType: String|Mapping /// - hidden Name: (String|Mapping)? + hidden Tags: (Listing)? Properties { ["Repositories"] = if (Repositories == null) null else Repositories - ["Description"] = if (Description == null) null else Description + ["OwnerArn"] = if (OwnerArn == null) null else OwnerArn ["ConnectionType"] = if (ConnectionType == null) null else ConnectionType ["ImageId"] = if (ImageId == null) null else ImageId - ["InstanceType"] = if (InstanceType == null) null else InstanceType - ["OwnerArn"] = if (OwnerArn == null) null else OwnerArn + ["Name"] = if (Name == null) null else Name + ["Description"] = if (Description == null) null else Description ["AutomaticStopTimeMinutes"] = if (AutomaticStopTimeMinutes == null) null else AutomaticStopTimeMinutes ["SubnetId"] = if (SubnetId == null) null else SubnetId + ["InstanceType"] = if (InstanceType == null) null else InstanceType ["Tags"] = if (Tags == null) null else Tags - ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/cloudformation/hookdefaultversion.pkl b/pkl/aws/cloudformation/hookdefaultversion.pkl index 116b35f7..57ae67be 100644 --- a/pkl/aws/cloudformation/hookdefaultversion.pkl +++ b/pkl/aws/cloudformation/hookdefaultversion.pkl @@ -11,21 +11,22 @@ open class HookDefaultVersion extends cloudformation.Resource { Type = "AWS::CloudFormation::HookDefaultVersion" - /// The ID of an existing version of the hook to set as the default. - hidden VersionId: (String(matches(Regex(#"^[A-Za-z0-9-]{1,128}$"#)))|Mapping)? - /// The Amazon Resource Name (ARN) of the type version. hidden TypeVersionArn: (String(matches(Regex(#"^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/.+$"#)))|Mapping)? /// The name of the type being registered. - /// /// + /// + /// /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. hidden TypeName: (String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$"#)))|Mapping)? + /// The ID of an existing version of the hook to set as the default. + hidden VersionId: (String(matches(Regex(#"^[A-Za-z0-9-]{1,128}$"#)))|Mapping)? + Properties { - ["VersionId"] = if (VersionId == null) null else VersionId ["TypeVersionArn"] = if (TypeVersionArn == null) null else TypeVersionArn ["TypeName"] = if (TypeName == null) null else TypeName + ["VersionId"] = if (VersionId == null) null else VersionId } } diff --git a/pkl/aws/cloudformation/hooktypeconfig.pkl b/pkl/aws/cloudformation/hooktypeconfig.pkl index 60851ee2..c0058cc2 100644 --- a/pkl/aws/cloudformation/hooktypeconfig.pkl +++ b/pkl/aws/cloudformation/hooktypeconfig.pkl @@ -11,25 +11,26 @@ open class HookTypeConfig extends cloudformation.Resource { Type = "AWS::CloudFormation::HookTypeConfig" + /// The configuration data for the extension, in this account and region. + hidden Configuration: (String(matches(Regex(#"[\s\S]+"#)))|Mapping)? + + /// An alias by which to refer to this extension configuration data. + hidden ConfigurationAlias: (HookTypeConfigConfigurationAlias|Mapping)? + /// The Amazon Resource Name (ARN) of the type without version number. hidden TypeArn: (String(matches(Regex(#"^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/.+$"#)))|Mapping)? /// The name of the type being registered. - /// /// + /// + /// /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. hidden TypeName: (String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$"#)))|Mapping)? - /// The configuration data for the extension, in this account and region. - hidden Configuration: (String(matches(Regex(#"[\s\S]+"#)))|Mapping)? - - /// An alias by which to refer to this extension configuration data. - hidden ConfigurationAlias: (HookTypeConfigConfigurationAlias|Mapping)? - Properties { - ["TypeArn"] = if (TypeArn == null) null else TypeArn - ["TypeName"] = if (TypeName == null) null else TypeName ["Configuration"] = if (Configuration == null) null else Configuration ["ConfigurationAlias"] = if (ConfigurationAlias == null) null else ConfigurationAlias + ["TypeArn"] = if (TypeArn == null) null else TypeArn + ["TypeName"] = if (TypeName == null) null else TypeName } } diff --git a/pkl/aws/cloudformation/hookversion.pkl b/pkl/aws/cloudformation/hookversion.pkl index bfa8716a..e24751e7 100644 --- a/pkl/aws/cloudformation/hookversion.pkl +++ b/pkl/aws/cloudformation/hookversion.pkl @@ -6,7 +6,7 @@ module aws.cloudformation.hookversion import "../../cloudformation.pkl" /// -open class LoggingConfig { +open class HookVersionLoggingConfig { LogGroupName: (String(matches(Regex(#"^[\.\-_/#A-Za-z0-9]+$"#)))|Mapping)? LogRoleArn: (String|Mapping)? } @@ -17,27 +17,29 @@ open class HookVersion extends cloudformation.Resource { Type = "AWS::CloudFormation::HookVersion" + /// The name of the type being registered. + /// + /// + /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. + hidden TypeName: String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$"#)))|Mapping + /// The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials. hidden ExecutionRoleArn: (String(matches(Regex(#"arn:.+:iam::[0-9]{12}:role/.+"#)))|Mapping)? + /// Specifies logging configuration information for a type. + hidden LoggingConfig: (HookVersionLoggingConfig)? + /// A url to the S3 bucket containing the schema handler package that contains the schema, event handlers, and associated files for the type you want to register. - /// /// + /// + /// /// For information on generating a schema handler package for the type you want to register, see submit in the CloudFormation CLI User Guide. hidden SchemaHandlerPackage: String|Mapping - /// The name of the type being registered. - /// /// - /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. - hidden TypeName: String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$"#)))|Mapping - - /// Specifies logging configuration information for a type. - hidden LoggingConfig: (LoggingConfig)? - Properties { - ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn - ["SchemaHandlerPackage"] = if (SchemaHandlerPackage == null) null else SchemaHandlerPackage ["TypeName"] = if (TypeName == null) null else TypeName + ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn ["LoggingConfig"] = if (LoggingConfig == null) null else LoggingConfig + ["SchemaHandlerPackage"] = if (SchemaHandlerPackage == null) null else SchemaHandlerPackage } } diff --git a/pkl/aws/cloudformation/macro.pkl b/pkl/aws/cloudformation/macro.pkl index 7b6e1fd6..bb56740c 100644 --- a/pkl/aws/cloudformation/macro.pkl +++ b/pkl/aws/cloudformation/macro.pkl @@ -12,26 +12,26 @@ open class Macro extends cloudformation.Resource { /// - hidden Description: (String|Mapping)? + hidden LogGroupName: (String|Mapping)? /// - hidden FunctionName: String|Mapping + hidden LogRoleARN: (String|Mapping)? /// - hidden LogGroupName: (String|Mapping)? + hidden Name: String|Mapping /// - hidden LogRoleARN: (String|Mapping)? + hidden Description: (String|Mapping)? /// - hidden Name: String|Mapping + hidden FunctionName: String|Mapping Properties { - ["Description"] = if (Description == null) null else Description - ["FunctionName"] = if (FunctionName == null) null else FunctionName ["LogGroupName"] = if (LogGroupName == null) null else LogGroupName ["LogRoleARN"] = if (LogRoleARN == null) null else LogRoleARN ["Name"] = if (Name == null) null else Name + ["Description"] = if (Description == null) null else Description + ["FunctionName"] = if (FunctionName == null) null else FunctionName } } diff --git a/pkl/aws/cloudformation/moduledefaultversion.pkl b/pkl/aws/cloudformation/moduledefaultversion.pkl index 92a5f2e2..88ab8bf2 100644 --- a/pkl/aws/cloudformation/moduledefaultversion.pkl +++ b/pkl/aws/cloudformation/moduledefaultversion.pkl @@ -11,19 +11,19 @@ open class ModuleDefaultVersion extends cloudformation.Resource { Type = "AWS::CloudFormation::ModuleDefaultVersion" - /// The name of a module existing in the registry. - hidden ModuleName: (String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::MODULE"#)))|Mapping)? - /// The ID of an existing version of the named module to set as the default. hidden VersionId: (String(matches(Regex(#"^[0-9]{8}$"#)))|Mapping)? /// The Amazon Resource Name (ARN) of the module version to set as the default version. hidden Arn: (String(matches(Regex(#"^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/module/.+/[0-9]{8}$"#)))|Mapping)? + /// The name of a module existing in the registry. + hidden ModuleName: (String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::MODULE"#)))|Mapping)? + Properties { - ["ModuleName"] = if (ModuleName == null) null else ModuleName ["VersionId"] = if (VersionId == null) null else VersionId ["Arn"] = if (Arn == null) null else Arn + ["ModuleName"] = if (ModuleName == null) null else ModuleName } } diff --git a/pkl/aws/cloudformation/moduleversion.pkl b/pkl/aws/cloudformation/moduleversion.pkl index f0a033a5..4a0d1382 100644 --- a/pkl/aws/cloudformation/moduleversion.pkl +++ b/pkl/aws/cloudformation/moduleversion.pkl @@ -12,7 +12,8 @@ open class ModuleVersion extends cloudformation.Resource { /// The name of the module being registered. - /// /// + /// + /// /// Recommended module naming pattern: company_or_organization::service::type::MODULE. hidden ModuleName: String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::MODULE"#)))|Mapping diff --git a/pkl/aws/cloudformation/publictypeversion.pkl b/pkl/aws/cloudformation/publictypeversion.pkl index 1c2880b3..80eb10da 100644 --- a/pkl/aws/cloudformation/publictypeversion.pkl +++ b/pkl/aws/cloudformation/publictypeversion.pkl @@ -11,6 +11,12 @@ open class PublicTypeVersion extends cloudformation.Resource { Type = "AWS::CloudFormation::PublicTypeVersion" + /// The name of the type being registered. + /// + /// + /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. + hidden TypeName: (String(matches(Regex(#"[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}"#)))|Mapping)? + /// A url to the S3 bucket where logs for the testType run will be available hidden LogDeliveryBucket: (String|Mapping)? @@ -23,17 +29,12 @@ open class PublicTypeVersion extends cloudformation.Resource { /// The version number of a public third-party extension hidden PublicVersionNumber: (String|Mapping)? - /// The name of the type being registered. - /// /// - /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. - hidden TypeName: (String(matches(Regex(#"[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}"#)))|Mapping)? - Properties { + ["TypeName"] = if (TypeName == null) null else TypeName ["LogDeliveryBucket"] = if (LogDeliveryBucket == null) null else LogDeliveryBucket ["Type"] = if (TypeProperty == null) null else TypeProperty ["Arn"] = if (Arn == null) null else Arn ["PublicVersionNumber"] = if (PublicVersionNumber == null) null else PublicVersionNumber - ["TypeName"] = if (TypeName == null) null else TypeName } } diff --git a/pkl/aws/cloudformation/resourcedefaultversion.pkl b/pkl/aws/cloudformation/resourcedefaultversion.pkl index fcd3b405..702a7e64 100644 --- a/pkl/aws/cloudformation/resourcedefaultversion.pkl +++ b/pkl/aws/cloudformation/resourcedefaultversion.pkl @@ -18,7 +18,8 @@ open class ResourceDefaultVersion extends cloudformation.Resource { hidden TypeVersionArn: (String(matches(Regex(#"^arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/resource/.+$"#)))|Mapping)? /// The name of the type being registered. - /// /// + /// + /// /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. hidden TypeName: (String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$"#)))|Mapping)? diff --git a/pkl/aws/cloudformation/resourceversion.pkl b/pkl/aws/cloudformation/resourceversion.pkl index d47ccd08..2315feca 100644 --- a/pkl/aws/cloudformation/resourceversion.pkl +++ b/pkl/aws/cloudformation/resourceversion.pkl @@ -6,7 +6,7 @@ module aws.cloudformation.resourceversion import "../../cloudformation.pkl" /// -open class LoggingConfig { +open class ResourceVersionLoggingConfig { LogGroupName: (String(matches(Regex(#"^[\.\-_/#A-Za-z0-9]+$"#)))|Mapping)? LogRoleArn: (String|Mapping)? } @@ -17,27 +17,29 @@ open class ResourceVersion extends cloudformation.Resource { Type = "AWS::CloudFormation::ResourceVersion" - /// The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials. - hidden ExecutionRoleArn: (String|Mapping)? + /// Specifies logging configuration information for a type. + hidden LoggingConfig: (ResourceVersionLoggingConfig)? /// A url to the S3 bucket containing the schema handler package that contains the schema, event handlers, and associated files for the type you want to register. - /// /// + /// + /// /// For information on generating a schema handler package for the type you want to register, see submit in the CloudFormation CLI User Guide. hidden SchemaHandlerPackage: String|Mapping - /// Specifies logging configuration information for a type. - hidden LoggingConfig: (LoggingConfig)? - /// The name of the type being registered. - /// /// + /// + /// /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. hidden TypeName: String(matches(Regex(#"^[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}$"#)))|Mapping + /// The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials. + hidden ExecutionRoleArn: (String|Mapping)? + Properties { - ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn - ["SchemaHandlerPackage"] = if (SchemaHandlerPackage == null) null else SchemaHandlerPackage ["LoggingConfig"] = if (LoggingConfig == null) null else LoggingConfig + ["SchemaHandlerPackage"] = if (SchemaHandlerPackage == null) null else SchemaHandlerPackage ["TypeName"] = if (TypeName == null) null else TypeName + ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn } } diff --git a/pkl/aws/cloudformation/stack.pkl b/pkl/aws/cloudformation/stack.pkl index 939f9c61..ba15834c 100644 --- a/pkl/aws/cloudformation/stack.pkl +++ b/pkl/aws/cloudformation/stack.pkl @@ -6,19 +6,19 @@ module aws.cloudformation.stack import "../../cloudformation.pkl" /// -open class Tag { - Key: String|Mapping - Value: String|Mapping -} - -/// -open class Output { +open class StackOutput { Description: (String|Mapping)? ExportName: (String|Mapping)? OutputKey: (String|Mapping)? OutputValue: (String|Mapping)? } +/// +open class StackTag { + Key: String|Mapping + Value: String|Mapping +} + /// The AWS::CloudFormation::Stack resource nests a stack as a resource in a top-level template. open class Stack extends cloudformation.Resource { @@ -26,69 +26,71 @@ open class Stack extends cloudformation.Resource { /// - hidden TemplateBody: (Dynamic)? + hidden RoleARN: (String|Mapping)? /// - hidden TimeoutInMinutes: (Int|Mapping)? + hidden NotificationARNs: (Listing)? /// - hidden Description: (String|Mapping)? + hidden Parameters: (StackStackParameters)? /// - hidden DisableRollback: (Boolean|Mapping)? + hidden StackName: String|Mapping /// - hidden EnableTerminationProtection: (Boolean|Mapping)? + hidden StackPolicyBody: (Dynamic)? /// - hidden StackName: String|Mapping + hidden StackPolicyURL: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden StackStatusReason: (String|Mapping)? /// - hidden Capabilities: (Listing)? + hidden TimeoutInMinutes: (Int|Mapping)? /// - hidden NotificationARNs: (Listing)? + hidden Description: (String|Mapping)? /// - hidden Parameters: (Dynamic)? + hidden EnableTerminationProtection: (Boolean|Mapping)? /// - hidden StackStatusReason: (String|Mapping)? + hidden TemplateBody: (Dynamic)? /// - hidden TemplateURL: (String|Mapping)? + hidden Capabilities: (Listing)? /// - hidden RoleARN: (String|Mapping)? + hidden DisableRollback: (Boolean|Mapping)? /// - hidden StackPolicyBody: (Dynamic)? + hidden Tags: (Listing)? /// - hidden StackPolicyURL: (String|Mapping)? + hidden TemplateURL: (String|Mapping)? Properties { - ["TemplateBody"] = if (TemplateBody == null) null else TemplateBody + ["RoleARN"] = if (RoleARN == null) null else RoleARN + ["NotificationARNs"] = if (NotificationARNs == null) null else NotificationARNs + ["Parameters"] = if (Parameters == null) null else Parameters + ["StackName"] = if (StackName == null) null else StackName + ["StackPolicyBody"] = if (StackPolicyBody == null) null else StackPolicyBody + ["StackPolicyURL"] = if (StackPolicyURL == null) null else StackPolicyURL + ["StackStatusReason"] = if (StackStatusReason == null) null else StackStatusReason ["TimeoutInMinutes"] = if (TimeoutInMinutes == null) null else TimeoutInMinutes ["Description"] = if (Description == null) null else Description - ["DisableRollback"] = if (DisableRollback == null) null else DisableRollback ["EnableTerminationProtection"] = if (EnableTerminationProtection == null) null else EnableTerminationProtection - ["StackName"] = if (StackName == null) null else StackName - ["Tags"] = if (Tags == null) null else Tags + ["TemplateBody"] = if (TemplateBody == null) null else TemplateBody ["Capabilities"] = if (Capabilities == null) null else Capabilities - ["NotificationARNs"] = if (NotificationARNs == null) null else NotificationARNs - ["Parameters"] = if (Parameters == null) null else Parameters - ["StackStatusReason"] = if (StackStatusReason == null) null else StackStatusReason + ["DisableRollback"] = if (DisableRollback == null) null else DisableRollback + ["Tags"] = if (Tags == null) null else Tags ["TemplateURL"] = if (TemplateURL == null) null else TemplateURL - ["RoleARN"] = if (RoleARN == null) null else RoleARN - ["StackPolicyBody"] = if (StackPolicyBody == null) null else StackPolicyBody - ["StackPolicyURL"] = if (StackPolicyURL == null) null else StackPolicyURL } } +typealias StackStackParameters = Mapping + typealias StackCapabilities = "CAPABILITY_IAM"|"CAPABILITY_NAMED_IAM"|"CAPABILITY_AUTO_EXPAND" diff --git a/pkl/aws/cloudformation/stackset.pkl b/pkl/aws/cloudformation/stackset.pkl index 7cef9dec..6c5cb9bf 100644 --- a/pkl/aws/cloudformation/stackset.pkl +++ b/pkl/aws/cloudformation/stackset.pkl @@ -5,74 +5,68 @@ module aws.cloudformation.stackset import "../../cloudformation.pkl" -/// -open class Capability { -} +typealias StackSetRegionConcurrencyType = String|Mapping -/// The user-specified preferences for how AWS CloudFormation performs a stack set operation. -open class OperationPreferences { - MaxConcurrentCount: (Int|Mapping)? - MaxConcurrentPercentage: (Int|Mapping)? - RegionOrder: (Listing)? - RegionConcurrencyType: (RegionConcurrencyType)? - FailureToleranceCount: (Int|Mapping)? - FailureTolerancePercentage: (Int|Mapping)? + +/// Stack instances in some specific accounts and Regions. +open class StackSetStackInstances { + DeploymentTargets: StackSetDeploymentTargets + Regions: Listing + ParameterOverrides: (Listing)? } typealias DeploymentTargetsAccountFilterType = "NONE"|"UNION"|"INTERSECTION"|"DIFFERENCE" /// The AWS OrganizationalUnitIds or Accounts for which to create stack instances in the specified Regions. -open class DeploymentTargets { - AccountFilterType: (DeploymentTargetsAccountFilterType|Mapping)? - Accounts: (Listing)? +open class StackSetDeploymentTargets { + Accounts: (Listing)? AccountsUrl: (String(matches(Regex(#"(s3://|http(s?)://).+"#)))|Mapping)? - OrganizationalUnitIds: (Listing)? + OrganizationalUnitIds: (Listing)? + AccountFilterType: (DeploymentTargetsAccountFilterType|Mapping)? +} + +/// Tag type enables you to specify a key-value pair that can be used to store information about an AWS CloudFormation StackSet. +open class StackSetTag { + Key: String(matches(Regex(#"^(?!aws:.*)[a-zA-Z0-9\s\:\_\.\/\=\+\-]+$"#)))|Mapping + Value: String|Mapping } +typealias StackSetRegion = String|Mapping + + +typealias StackSetOrganizationalUnitId = String|Mapping + + /// -open class OrganizationalUnitId { +open class StackSetParameter { + ParameterValue: String|Mapping + ParameterKey: String|Mapping } /// -open class AutoDeployment { +open class StackSetAutoDeployment { Enabled: (Boolean|Mapping)? RetainStacksOnAccountRemoval: (Boolean|Mapping)? } -/// AWS account that you want to create stack instances in the specified Region(s) for. -open class Account { -} +typealias StackSetActive = Boolean|Mapping -/// -open class Region { -} -/// The concurrency type of deploying StackSets operations in regions, could be in parallel or one region at a time -open class RegionConcurrencyType { -} +typealias StackSetCapability = String|Mapping -/// When true, StackSets performs non-conflicting operations concurrently and queues conflicting operations. After conflicting operations finish, StackSets starts queued operations in request order. -open class Active { -} -/// -open class Parameter { - ParameterKey: String|Mapping - ParameterValue: String|Mapping +/// The user-specified preferences for how AWS CloudFormation performs a stack set operation. +open class StackSetOperationPreferences { + MaxConcurrentPercentage: (Int|Mapping)? + RegionOrder: (Listing)? + RegionConcurrencyType: (StackSetRegionConcurrencyType)? + FailureToleranceCount: (Int|Mapping)? + FailureTolerancePercentage: (Int|Mapping)? + MaxConcurrentCount: (Int|Mapping)? } -/// Stack instances in some specific accounts and Regions. -open class StackInstances { - DeploymentTargets: DeploymentTargets - Regions: Listing - ParameterOverrides: (Listing)? -} +typealias StackSetAccount = String|Mapping -/// Tag type enables you to specify a key-value pair that can be used to store information about an AWS CloudFormation StackSet. -open class Tag { - Key: String(matches(Regex(#"^(?!aws:.*)[a-zA-Z0-9\s\:\_\.\/\=\+\-]+$"#)))|Mapping - Value: String|Mapping -} /// StackSet as a resource provides one-click experience for provisioning a StackSet and StackInstances open class StackSet extends cloudformation.Resource { @@ -80,72 +74,72 @@ open class StackSet extends cloudformation.Resource { Type = "AWS::CloudFormation::StackSet" - /// The input parameters for the stack set template. - hidden Parameters: (Listing)? + /// The structure that contains the template body, with a minimum length of 1 byte and a maximum length of 51,200 bytes. + hidden TemplateBody: (String|Mapping)? - /// Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that is located in an Amazon S3 bucket. - hidden TemplateURL: (String|Mapping)? + /// Specifies the AWS account that you are acting from. By default, SELF is specified. For self-managed permissions, specify SELF; for service-managed permissions, if you are signed in to the organization's management account, specify SELF. If you are signed in to a delegated administrator account, specify DELEGATED_ADMIN. + hidden CallAs: (StackSetCallAs|Mapping)? - /// In some cases, you must explicitly acknowledge that your stack set template contains certain capabilities in order for AWS CloudFormation to create the stack set and related stack instances. - hidden Capabilities: (Listing)? + /// The name to associate with the stack set. The name must be unique in the Region where you create your stack set. + hidden StackSetName: String(matches(Regex(#"^[a-zA-Z][a-zA-Z0-9\-]{0,127}$"#)))|Mapping + + /// The name of the IAM execution role to use to create the stack set. If you do not specify an execution role, AWS CloudFormation uses the AWSCloudFormationStackSetExecutionRole role for the stack set operation. + hidden ExecutionRoleName: (String|Mapping)? /// - hidden OperationPreferences: (OperationPreferences)? + hidden OperationPreferences: (StackSetOperationPreferences)? + + /// The input parameters for the stack set template. + hidden Parameters: (Listing)? /// Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations. hidden ManagedExecution: (Dynamic)? - /// The Amazon Resource Number (ARN) of the IAM role to use to create this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. - hidden AdministrationRoleARN: (String|Mapping)? - - /// Describes how the IAM roles required for stack set operations are created. By default, SELF-MANAGED is specified. - hidden PermissionModel: StackSetPermissionModel|Mapping + /// Describes whether StackSets automatically deploys to AWS Organizations accounts that are added to the target organization or organizational unit (OU). Specify only if PermissionModel is SERVICE_MANAGED. + hidden AutoDeployment: (StackSetAutoDeployment)? - /// The key-value pairs to associate with this stack set and the stacks created from it. AWS CloudFormation also propagates these tags to supported resources that are created in the stacks. A maximum number of 50 tags can be specified. - hidden Tags: (Listing)? + /// In some cases, you must explicitly acknowledge that your stack set template contains certain capabilities in order for AWS CloudFormation to create the stack set and related stack instances. + hidden Capabilities: (Listing)? - /// The name to associate with the stack set. The name must be unique in the Region where you create your stack set. - hidden StackSetName: String(matches(Regex(#"^[a-zA-Z][a-zA-Z0-9\-]{0,127}$"#)))|Mapping + /// A description of the stack set. You can use the description to identify the stack set's purpose or other important information. + hidden Description: (String|Mapping)? - /// Describes whether StackSets automatically deploys to AWS Organizations accounts that are added to the target organization or organizational unit (OU). Specify only if PermissionModel is SERVICE_MANAGED. - hidden AutoDeployment: (AutoDeployment)? + /// The Amazon Resource Number (ARN) of the IAM role to use to create this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. + hidden AdministrationRoleARN: (String|Mapping)? /// A group of stack instances with parameters in some specific accounts and regions. - hidden StackInstancesGroup: (Listing)? - - /// The structure that contains the template body, with a minimum length of 1 byte and a maximum length of 51,200 bytes. - hidden TemplateBody: (String|Mapping)? + hidden StackInstancesGroup: (Listing)? - /// Specifies the AWS account that you are acting from. By default, SELF is specified. For self-managed permissions, specify SELF; for service-managed permissions, if you are signed in to the organization's management account, specify SELF. If you are signed in to a delegated administrator account, specify DELEGATED_ADMIN. - hidden CallAs: (StackSetCallAs|Mapping)? + /// The key-value pairs to associate with this stack set and the stacks created from it. AWS CloudFormation also propagates these tags to supported resources that are created in the stacks. A maximum number of 50 tags can be specified. + hidden Tags: (Listing)? - /// A description of the stack set. You can use the description to identify the stack set's purpose or other important information. - hidden Description: (String|Mapping)? + /// Describes how the IAM roles required for stack set operations are created. By default, SELF-MANAGED is specified. + hidden PermissionModel: StackSetPermissionModel|Mapping - /// The name of the IAM execution role to use to create the stack set. If you do not specify an execution role, AWS CloudFormation uses the AWSCloudFormationStackSetExecutionRole role for the stack set operation. - hidden ExecutionRoleName: (String|Mapping)? + /// Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that is located in an Amazon S3 bucket. + hidden TemplateURL: (String|Mapping)? Properties { - ["Parameters"] = if (Parameters == null) null else Parameters - ["TemplateURL"] = if (TemplateURL == null) null else TemplateURL - ["Capabilities"] = if (Capabilities == null) null else Capabilities + ["TemplateBody"] = if (TemplateBody == null) null else TemplateBody + ["CallAs"] = if (CallAs == null) null else CallAs + ["StackSetName"] = if (StackSetName == null) null else StackSetName + ["ExecutionRoleName"] = if (ExecutionRoleName == null) null else ExecutionRoleName ["OperationPreferences"] = if (OperationPreferences == null) null else OperationPreferences + ["Parameters"] = if (Parameters == null) null else Parameters ["ManagedExecution"] = if (ManagedExecution == null) null else ManagedExecution - ["AdministrationRoleARN"] = if (AdministrationRoleARN == null) null else AdministrationRoleARN - ["PermissionModel"] = if (PermissionModel == null) null else PermissionModel - ["Tags"] = if (Tags == null) null else Tags - ["StackSetName"] = if (StackSetName == null) null else StackSetName ["AutoDeployment"] = if (AutoDeployment == null) null else AutoDeployment - ["StackInstancesGroup"] = if (StackInstancesGroup == null) null else StackInstancesGroup - ["TemplateBody"] = if (TemplateBody == null) null else TemplateBody - ["CallAs"] = if (CallAs == null) null else CallAs + ["Capabilities"] = if (Capabilities == null) null else Capabilities ["Description"] = if (Description == null) null else Description - ["ExecutionRoleName"] = if (ExecutionRoleName == null) null else ExecutionRoleName + ["AdministrationRoleARN"] = if (AdministrationRoleARN == null) null else AdministrationRoleARN + ["StackInstancesGroup"] = if (StackInstancesGroup == null) null else StackInstancesGroup + ["Tags"] = if (Tags == null) null else Tags + ["PermissionModel"] = if (PermissionModel == null) null else PermissionModel + ["TemplateURL"] = if (TemplateURL == null) null else TemplateURL } } -typealias StackSetPermissionModel = "SERVICE_MANAGED"|"SELF_MANAGED" - typealias StackSetCallAs = "SELF"|"DELEGATED_ADMIN" + +typealias StackSetPermissionModel = "SERVICE_MANAGED"|"SELF_MANAGED" diff --git a/pkl/aws/cloudformation/typeactivation.pkl b/pkl/aws/cloudformation/typeactivation.pkl index acb5fe36..6c707895 100644 --- a/pkl/aws/cloudformation/typeactivation.pkl +++ b/pkl/aws/cloudformation/typeactivation.pkl @@ -6,7 +6,7 @@ module aws.cloudformation.typeactivation import "../../cloudformation.pkl" /// -open class LoggingConfig { +open class TypeActivationLoggingConfig { LogGroupName: (String(matches(Regex(#"^[\.\-_/#A-Za-z0-9]+$"#)))|Mapping)? LogRoleArn: (String|Mapping)? } @@ -17,25 +17,32 @@ open class TypeActivation extends cloudformation.Resource { Type = "AWS::CloudFormation::TypeActivation" - /// The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials. - hidden ExecutionRoleArn: (String|Mapping)? + /// The publisher id assigned by CloudFormation for publishing in this region. + hidden PublisherId: (String(matches(Regex(#"[0-9a-zA-Z]{40}"#)))|Mapping)? - /// Manually updates a previously-enabled type to a new major or minor version, if available. You can also use this parameter to update the value of AutoUpdateEnabled - hidden VersionBump: (TypeActivationVersionBump|Mapping)? + /// Whether to automatically update the extension in this account and region when a new minor version is published by the extension publisher. Major versions released by the publisher must be manually updated. + hidden AutoUpdate: (Boolean|Mapping)? + + /// An alias to assign to the public extension in this account and region. If you specify an alias for the extension, you must then use the alias to refer to the extension in your templates. + hidden TypeNameAlias: (String(matches(Regex(#"[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}"#)))|Mapping)? /// The name of the type being registered. - /// /// + /// + /// /// We recommend that type names adhere to the following pattern: company_or_organization::service::type. hidden TypeName: (String(matches(Regex(#"[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}"#)))|Mapping)? + /// The Amazon Resource Name (ARN) of the IAM execution role to use to register the type. If your resource type calls AWS APIs in any of its handlers, you must create an IAM execution role that includes the necessary permissions to call those AWS APIs, and provision that execution role in your account. CloudFormation then assumes that execution role to provide your resource type with the appropriate credentials. + hidden ExecutionRoleArn: (String|Mapping)? + + /// Specifies logging configuration information for a type. + hidden LoggingConfig: (TypeActivationLoggingConfig)? + /// The Amazon Resource Number (ARN) assigned to the public extension upon publication hidden PublicTypeArn: (String(matches(Regex(#"arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/.+"#)))|Mapping)? - /// Whether to automatically update the extension in this account and region when a new minor version is published by the extension publisher. Major versions released by the publisher must be manually updated. - hidden AutoUpdate: (Boolean|Mapping)? - - /// An alias to assign to the public extension in this account and region. If you specify an alias for the extension, you must then use the alias to refer to the extension in your templates. - hidden TypeNameAlias: (String(matches(Regex(#"[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}"#)))|Mapping)? + /// Manually updates a previously-enabled type to a new major or minor version, if available. You can also use this parameter to update the value of AutoUpdateEnabled + hidden VersionBump: (TypeActivationVersionBump|Mapping)? /// The Major Version of the type you want to enable hidden MajorVersion: (String|Mapping)? @@ -43,23 +50,17 @@ open class TypeActivation extends cloudformation.Resource { /// The kind of extension hidden TypeProperty: (TypeActivationType|Mapping)? - /// The publisher id assigned by CloudFormation for publishing in this region. - hidden PublisherId: (String(matches(Regex(#"[0-9a-zA-Z]{40}"#)))|Mapping)? - - /// Specifies logging configuration information for a type. - hidden LoggingConfig: (LoggingConfig)? - Properties { - ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn - ["VersionBump"] = if (VersionBump == null) null else VersionBump - ["TypeName"] = if (TypeName == null) null else TypeName - ["PublicTypeArn"] = if (PublicTypeArn == null) null else PublicTypeArn + ["PublisherId"] = if (PublisherId == null) null else PublisherId ["AutoUpdate"] = if (AutoUpdate == null) null else AutoUpdate ["TypeNameAlias"] = if (TypeNameAlias == null) null else TypeNameAlias + ["TypeName"] = if (TypeName == null) null else TypeName + ["ExecutionRoleArn"] = if (ExecutionRoleArn == null) null else ExecutionRoleArn + ["LoggingConfig"] = if (LoggingConfig == null) null else LoggingConfig + ["PublicTypeArn"] = if (PublicTypeArn == null) null else PublicTypeArn + ["VersionBump"] = if (VersionBump == null) null else VersionBump ["MajorVersion"] = if (MajorVersion == null) null else MajorVersion ["Type"] = if (TypeProperty == null) null else TypeProperty - ["PublisherId"] = if (PublisherId == null) null else PublisherId - ["LoggingConfig"] = if (LoggingConfig == null) null else LoggingConfig } } diff --git a/pkl/aws/cloudformation/waitcondition.pkl b/pkl/aws/cloudformation/waitcondition.pkl index ae4438be..9458c3ce 100644 --- a/pkl/aws/cloudformation/waitcondition.pkl +++ b/pkl/aws/cloudformation/waitcondition.pkl @@ -12,18 +12,18 @@ open class WaitCondition extends cloudformation.Resource { /// - hidden Handle: (String|Mapping)? + hidden Count: (Int|Mapping)? /// - hidden Timeout: (String|Mapping)? + hidden Handle: (String|Mapping)? /// - hidden Count: (Int|Mapping)? + hidden Timeout: (String|Mapping)? Properties { + ["Count"] = if (Count == null) null else Count ["Handle"] = if (Handle == null) null else Handle ["Timeout"] = if (Timeout == null) null else Timeout - ["Count"] = if (Count == null) null else Count } } diff --git a/pkl/aws/cloudfront/cachepolicy.pkl b/pkl/aws/cloudfront/cachepolicy.pkl index 283cfeaf..8806058e 100644 --- a/pkl/aws/cloudfront/cachepolicy.pkl +++ b/pkl/aws/cloudfront/cachepolicy.pkl @@ -6,42 +6,42 @@ module aws.cloudfront.cachepolicy import "../../cloudformation.pkl" /// -open class ParametersInCacheKeyAndForwardedToOrigin { - CookiesConfig: CookiesConfig - EnableAcceptEncodingBrotli: (Boolean|Mapping)? - EnableAcceptEncodingGzip: Boolean|Mapping - HeadersConfig: HeadersConfig - QueryStringsConfig: QueryStringsConfig -} - -/// -open class QueryStringsConfig { - QueryStrings: (Listing)? - QueryStringBehavior: String(matches(Regex(#"^(none|whitelist|allExcept|all)$"#)))|Mapping -} - -/// -open class CachePolicyConfig { +open class CachePolicyCachePolicyConfig { + ParametersInCacheKeyAndForwardedToOrigin: CachePolicyParametersInCacheKeyAndForwardedToOrigin Comment: (String|Mapping)? DefaultTTL: Number|Mapping MaxTTL: Number|Mapping MinTTL: Number|Mapping Name: String|Mapping - ParametersInCacheKeyAndForwardedToOrigin: ParametersInCacheKeyAndForwardedToOrigin } /// -open class CookiesConfig { +open class CachePolicyCookiesConfig { CookieBehavior: String(matches(Regex(#"^(none|whitelist|allExcept|all)$"#)))|Mapping Cookies: (Listing)? } /// -open class HeadersConfig { +open class CachePolicyHeadersConfig { HeaderBehavior: String(matches(Regex(#"^(none|whitelist)$"#)))|Mapping Headers: (Listing)? } +/// +open class CachePolicyParametersInCacheKeyAndForwardedToOrigin { + CookiesConfig: CachePolicyCookiesConfig + EnableAcceptEncodingBrotli: (Boolean|Mapping)? + EnableAcceptEncodingGzip: Boolean|Mapping + HeadersConfig: CachePolicyHeadersConfig + QueryStringsConfig: CachePolicyQueryStringsConfig +} + +/// +open class CachePolicyQueryStringsConfig { + QueryStringBehavior: String(matches(Regex(#"^(none|whitelist|allExcept|all)$"#)))|Mapping + QueryStrings: (Listing)? +} + /// Resource Type definition for AWS::CloudFront::CachePolicy open class CachePolicy extends cloudformation.Resource { @@ -49,7 +49,7 @@ open class CachePolicy extends cloudformation.Resource { /// - hidden CachePolicyConfig: CachePolicyConfig + hidden CachePolicyConfig: CachePolicyCachePolicyConfig Properties { ["CachePolicyConfig"] = if (CachePolicyConfig == null) null else CachePolicyConfig diff --git a/pkl/aws/cloudfront/cloudfrontoriginaccessidentity.pkl b/pkl/aws/cloudfront/cloudfrontoriginaccessidentity.pkl index 5a02c36d..eeae751b 100644 --- a/pkl/aws/cloudfront/cloudfrontoriginaccessidentity.pkl +++ b/pkl/aws/cloudfront/cloudfrontoriginaccessidentity.pkl @@ -6,7 +6,7 @@ module aws.cloudfront.cloudfrontoriginaccessidentity import "../../cloudformation.pkl" /// -open class CloudFrontOriginAccessIdentityConfig { +open class CloudFrontOriginAccessIdentityCloudFrontOriginAccessIdentityConfig { Comment: String|Mapping } @@ -17,7 +17,7 @@ open class CloudFrontOriginAccessIdentity extends cloudformation.Resource { /// - hidden CloudFrontOriginAccessIdentityConfig: CloudFrontOriginAccessIdentityConfig + hidden CloudFrontOriginAccessIdentityConfig: CloudFrontOriginAccessIdentityCloudFrontOriginAccessIdentityConfig Properties { ["CloudFrontOriginAccessIdentityConfig"] = if (CloudFrontOriginAccessIdentityConfig == null) null else CloudFrontOriginAccessIdentityConfig diff --git a/pkl/aws/cloudfront/continuousdeploymentpolicy.pkl b/pkl/aws/cloudfront/continuousdeploymentpolicy.pkl index f487cb2e..bf3c1b5e 100644 --- a/pkl/aws/cloudfront/continuousdeploymentpolicy.pkl +++ b/pkl/aws/cloudfront/continuousdeploymentpolicy.pkl @@ -5,43 +5,43 @@ module aws.cloudfront.continuousdeploymentpolicy import "../../cloudformation.pkl" -/// -open class SingleHeaderConfig { - Header: String|Mapping - Value: String|Mapping -} - -/// -open class SingleWeightConfig { - SessionStickinessConfig: (SessionStickinessConfig)? - Weight: Number|Mapping -} - typealias TrafficConfigType = "SingleWeight"|"SingleHeader" /// -open class TrafficConfig { - SingleHeaderConfig: (SingleHeaderConfig)? - SingleWeightConfig: (SingleWeightConfig)? +open class ContinuousDeploymentPolicyTrafficConfig { + SingleHeaderConfig: (ContinuousDeploymentPolicySingleHeaderConfig)? + SingleWeightConfig: (ContinuousDeploymentPolicySingleWeightConfig)? Type: TrafficConfigType|Mapping } typealias ContinuousDeploymentPolicyConfigType = "SingleWeight"|"SingleHeader" /// -open class ContinuousDeploymentPolicyConfig { +open class ContinuousDeploymentPolicyContinuousDeploymentPolicyConfig { + StagingDistributionDnsNames: Listing + TrafficConfig: (ContinuousDeploymentPolicyTrafficConfig)? + Type: (ContinuousDeploymentPolicyConfigType|Mapping)? Enabled: Boolean|Mapping SingleHeaderPolicyConfig: (Dynamic)? SingleWeightPolicyConfig: (Dynamic)? - StagingDistributionDnsNames: Listing - TrafficConfig: (TrafficConfig)? - Type: (ContinuousDeploymentPolicyConfigType|Mapping)? } /// -open class SessionStickinessConfig { - MaximumTTL: Int|Mapping +open class ContinuousDeploymentPolicySessionStickinessConfig { IdleTTL: Int|Mapping + MaximumTTL: Int|Mapping +} + +/// +open class ContinuousDeploymentPolicySingleHeaderConfig { + Header: String|Mapping + Value: String|Mapping +} + +/// +open class ContinuousDeploymentPolicySingleWeightConfig { + SessionStickinessConfig: (ContinuousDeploymentPolicySessionStickinessConfig)? + Weight: Number|Mapping } /// Resource Type definition for AWS::CloudFront::ContinuousDeploymentPolicy @@ -51,7 +51,7 @@ open class ContinuousDeploymentPolicy extends cloudformation.Resource { /// - hidden ContinuousDeploymentPolicyConfig: ContinuousDeploymentPolicyConfig + hidden ContinuousDeploymentPolicyConfig: ContinuousDeploymentPolicyContinuousDeploymentPolicyConfig Properties { ["ContinuousDeploymentPolicyConfig"] = if (ContinuousDeploymentPolicyConfig == null) null else ContinuousDeploymentPolicyConfig diff --git a/pkl/aws/cloudfront/distribution.pkl b/pkl/aws/cloudfront/distribution.pkl index a76c2136..beda720a 100644 --- a/pkl/aws/cloudfront/distribution.pkl +++ b/pkl/aws/cloudfront/distribution.pkl @@ -5,8 +5,71 @@ module aws.cloudfront.distribution import "../../cloudformation.pkl" +/// A complex type that identifies ways in which you want to restrict distribution of your content. +open class DistributionRestrictions { + GeoRestriction: DistributionGeoRestriction +} + +/// A complex type that controls whether access logs are written for the distribution. +open class DistributionLogging { + Bucket: String|Mapping + IncludeCookies: (Boolean|Mapping)? + Prefix: (String|Mapping)? +} + +/// A complex type that controls the countries in which your content is distributed. CF determines the location of your users using ``MaxMind`` GeoIP databases. To disable geo restriction, remove the [Restrictions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-restrictions) property from your stack template. +open class DistributionGeoRestriction { + Locations: (Listing)? + RestrictionType: String|Mapping +} + +/// A complex type that contains ``HeaderName`` and ``HeaderValue`` elements, if any, for this distribution. +open class DistributionOriginCustomHeader { + HeaderName: String|Mapping + HeaderValue: String|Mapping +} + +/// A complex type that controls: +/// +/// + Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer. +/// + How long CloudFront caches HTTP status codes in the 4xx and 5xx range. +/// +/// For more information about custom error pages, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide*. +open class DistributionCustomErrorResponse { + ErrorCachingMinTTL: (Number|Mapping)? + ErrorCode: Int|Mapping + ResponseCode: (Int|Mapping)? + ResponsePagePath: (String|Mapping)? +} + +/// A distribution configuration. +open class DistributionDistributionConfig { + Restrictions: (DistributionRestrictions)? + Staging: (Boolean|Mapping)? + DefaultCacheBehavior: DistributionDefaultCacheBehavior + HttpVersion: (String|Mapping)? + Logging: (DistributionLogging)? + OriginGroups: (DistributionOriginGroups)? + WebACLId: (String|Mapping)? + CacheBehaviors: (Listing)? + DefaultRootObject: (String|Mapping)? + Enabled: Boolean|Mapping + S3Origin: (DistributionLegacyS3Origin)? + CustomOrigin: (DistributionLegacyCustomOrigin)? + Origins: (Listing)? + PriceClass: (String|Mapping)? + Aliases: (Listing)? + CNAMEs: (Listing)? + Comment: (String|Mapping)? + ContinuousDeploymentPolicyId: (String|Mapping)? + CustomErrorResponses: (Listing)? + IPV6Enabled: (Boolean|Mapping)? + ViewerCertificate: (DistributionViewerCertificate)? +} + /// An origin. -////// An origin is the location where content is stored, and from which CloudFront gets content to serve to viewers. To specify an origin: +/// +/// An origin is the location where content is stored, and from which CloudFront gets content to serve to viewers. To specify an origin: /// + Use ``S3OriginConfig`` to specify an Amazon S3 bucket that is not configured with static website hosting. /// + Use ``CustomOriginConfig`` to specify all other kinds of origins, including: /// + An Amazon S3 bucket that is configured with static website hosting @@ -17,253 +80,197 @@ import "../../cloudformation.pkl" /// /// /// For the current maximum number of origins that you can specify per distribution, see [General Quotas on Web Distributions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html#limits-web-distributions) in the *Amazon CloudFront Developer Guide* (quotas were formerly referred to as limits). -open class Origin { - ConnectionAttempts: (Int|Mapping)? +open class DistributionOrigin { DomainName: String|Mapping Id: String|Mapping + OriginAccessControlId: (String|Mapping)? + OriginCustomHeaders: (Listing)? + OriginShield: (DistributionOriginShield)? + ConnectionAttempts: (Int|Mapping)? + CustomOriginConfig: (DistributionCustomOriginConfig)? OriginPath: (String|Mapping)? - S3OriginConfig: (S3OriginConfig)? + S3OriginConfig: (DistributionS3OriginConfig)? ConnectionTimeout: (Int|Mapping)? - CustomOriginConfig: (CustomOriginConfig)? - OriginAccessControlId: (String|Mapping)? - OriginCustomHeaders: (Listing)? - OriginShield: (OriginShield)? } -/// A complex data type for the origin groups specified for a distribution. -open class OriginGroups { - Items: (Listing)? - Quantity: Int|Mapping +/// +open class DistributionLegacyS3Origin { + DNSName: String|Mapping + OriginAccessIdentity: (String|Mapping)? } -/// A complex data type for the status codes that you specify that, when returned by a primary origin, trigger CloudFront to failover to a second origin. -open class StatusCodes { - Items: Listing - Quantity: Int|Mapping +/// A complex type that describes how CloudFront processes requests. +/// +/// You must create at least as many cache behaviors (including the default cache behavior) as you have origins if you want CloudFront to serve objects from all of the origins. Each cache behavior specifies the one origin from which you want CloudFront to get objects. If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used. +/// For the current quota (formerly known as limit) on the number of cache behaviors that you can add to a distribution, see [Quotas](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html) in the *Amazon CloudFront Developer Guide*. +/// If you don't want to specify any cache behaviors, include only an empty ``CacheBehaviors`` element. Don't include an empty ``CacheBehavior`` element because this is invalid. +/// To delete all cache behaviors in an exist +open class DistributionCacheBehavior { + AllowedMethods: (Listing)? + CachedMethods: (Listing)? + PathPattern: String|Mapping + TrustedSigners: (Listing)? + CachePolicyId: (String|Mapping)? + ForwardedValues: (DistributionForwardedValues)? + LambdaFunctionAssociations: (Listing)? + RealtimeLogConfigArn: (String|Mapping)? + TrustedKeyGroups: (Listing)? + DefaultTTL: (Number|Mapping)? + FieldLevelEncryptionId: (String|Mapping)? + MaxTTL: (Number|Mapping)? + MinTTL: (Number|Mapping)? + OriginRequestPolicyId: (String|Mapping)? + ResponseHeadersPolicyId: (String|Mapping)? + Compress: (Boolean|Mapping)? + FunctionAssociations: (Listing)? + SmoothStreaming: (Boolean|Mapping)? + TargetOriginId: String|Mapping + ViewerProtocolPolicy: String|Mapping } -/// This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field. -////// If you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*. -/// If you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*. -/// A complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see [How CloudFront Forwards, Caches, and Logs C -open class Cookies { - Forward: String|Mapping - WhitelistedNames: (Listing)? +/// A complex data type for the origins included in an origin group. +open class DistributionOriginGroupMembers { + Items: Listing + Quantity: Int|Mapping } -/// A complex type that contains a Lambda@Edge function association. -open class LambdaFunctionAssociation { +/// A CloudFront function that is associated with a cache behavior in a CloudFront distribution. +open class DistributionFunctionAssociation { EventType: (String|Mapping)? - IncludeBody: (Boolean|Mapping)? - LambdaFunctionARN: (String|Mapping)? -} - -/// A complex type that contains information about the Amazon S3 origin. If the origin is a custom origin or an S3 bucket that is configured as a website endpoint, use the ``CustomOriginConfig`` element instead. -open class S3OriginConfig { - OriginAccessIdentity: (String|Mapping)? + FunctionARN: (String|Mapping)? } /// A complex type that describes the default cache behavior if you don't specify a ``CacheBehavior`` element or if request URLs don't match any of the values of ``PathPattern`` in ``CacheBehavior`` elements. You must create exactly one default cache behavior. -open class DefaultCacheBehavior { - CachePolicyId: (String|Mapping)? - CachedMethods: (Listing)? - ForwardedValues: (ForwardedValues)? - FunctionAssociations: (Listing)? - OriginRequestPolicyId: (String|Mapping)? - SmoothStreaming: (Boolean|Mapping)? +open class DistributionDefaultCacheBehavior { TargetOriginId: String|Mapping - TrustedKeyGroups: (Listing)? + ViewerProtocolPolicy: String|Mapping AllowedMethods: (Listing)? - MaxTTL: (Number|Mapping)? + CachedMethods: (Listing)? + OriginRequestPolicyId: (String|Mapping)? RealtimeLogConfigArn: (String|Mapping)? - Compress: (Boolean|Mapping)? - FieldLevelEncryptionId: (String|Mapping)? - MinTTL: (Number|Mapping)? ResponseHeadersPolicyId: (String|Mapping)? - ViewerProtocolPolicy: String|Mapping + CachePolicyId: (String|Mapping)? + MinTTL: (Number|Mapping)? + ForwardedValues: (DistributionForwardedValues)? + FunctionAssociations: (Listing)? + MaxTTL: (Number|Mapping)? + Compress: (Boolean|Mapping)? DefaultTTL: (Number|Mapping)? - LambdaFunctionAssociations: (Listing)? + SmoothStreaming: (Boolean|Mapping)? + TrustedKeyGroups: (Listing)? TrustedSigners: (Listing)? + FieldLevelEncryptionId: (String|Mapping)? + LambdaFunctionAssociations: (Listing)? } -/// A complex data type that includes information about the failover criteria for an origin group, including the status codes for which CloudFront will failover from the primary origin to the second origin. -open class OriginGroupFailoverCriteria { - StatusCodes: StatusCodes +/// A complex type that contains ``Tag`` key and ``Tag`` value. +open class DistributionTag { + Key: String|Mapping + Value: String|Mapping } -/// -open class LegacyS3Origin { - DNSName: String|Mapping - OriginAccessIdentity: (String|Mapping)? +/// CloudFront Origin Shield. +/// +/// Using Origin Shield can help reduce the load on your origin. For more information, see [Using Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html) in the *Amazon CloudFront Developer Guide*. +open class DistributionOriginShield { + Enabled: (Boolean|Mapping)? + OriginShieldRegion: (String|Mapping)? } /// An origin in an origin group. -open class OriginGroupMember { +open class DistributionOriginGroupMember { OriginId: String|Mapping } -/// A complex type that identifies ways in which you want to restrict distribution of your content. -open class Restrictions { - GeoRestriction: GeoRestriction -} - -/// A complex type that contains ``Tag`` key and ``Tag`` value. -open class Tag { - Key: String|Mapping - Value: String|Mapping +/// A complex type that contains information about the Amazon S3 origin. If the origin is a custom origin or an S3 bucket that is configured as a website endpoint, use the ``CustomOriginConfig`` element instead. +open class DistributionS3OriginConfig { + OriginAccessIdentity: (String|Mapping)? } -/// A complex type that determines the distribution's SSL/TLS configuration for communicating with viewers. -////// If the distribution doesn't use ``Aliases`` (also known as alternate domain names or CNAMEs)?that is, if the distribution uses the CloudFront domain name such as ``d111111abcdef8.cloudfront.net``?set ``CloudFrontDefaultCertificate`` to ``true`` and leave all other fields empty. -/// If the distribution uses ``Aliases`` (alternate domain names or CNAMEs), use the fields in this type to specify the following settings: -/// + Which viewers the distribution accepts HTTPS connections from: only viewers that support [server name indication (SNI)](https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/Server_Name_Indication) (recommended), or all viewers including those that don't support SNI. -/// + To accept HTTPS connections from only viewers that support SNI, set ``SSLSupportMethod`` to ``sni-only``. This is recommended. Most browsers and clients support SNI. (In CloudFormation, the field n -open class ViewerCertificate { - AcmCertificateArn: (String|Mapping)? - CloudFrontDefaultCertificate: (Boolean|Mapping)? - IamCertificateId: (String|Mapping)? - MinimumProtocolVersion: (String|Mapping)? - SslSupportMethod: (String|Mapping)? +/// A complex data type for the origin groups specified for a distribution. +open class DistributionOriginGroups { + Items: (Listing)? + Quantity: Int|Mapping } -/// A custom origin. A custom origin is any origin that is *not* an Amazon S3 bucket, with one exception. An Amazon S3 bucket that is [configured with static website hosting](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) *is* a custom origin. -open class CustomOriginConfig { +/// +open class DistributionLegacyCustomOrigin { + DNSName: String|Mapping HTTPPort: (Int|Mapping)? HTTPSPort: (Int|Mapping)? - OriginKeepaliveTimeout: (Int|Mapping)? OriginProtocolPolicy: String|Mapping - OriginReadTimeout: (Int|Mapping)? - OriginSSLProtocols: (Listing)? + OriginSSLProtocols: Listing } /// This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field. -////// If you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*. +/// +/// If you want to include values in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*. /// If you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*. /// A complex type that specifies how CloudFront handles query strings, cookies, and HTTP headers. -open class ForwardedValues { - Cookies: (Cookies)? +open class DistributionForwardedValues { Headers: (Listing)? QueryString: Boolean|Mapping QueryStringCacheKeys: (Listing)? + Cookies: (DistributionCookies)? } -/// A complex type that controls the countries in which your content is distributed. CF determines the location of your users using ``MaxMind`` GeoIP databases. To disable geo restriction, remove the [Restrictions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-distributionconfig.html#cfn-cloudfront-distribution-distributionconfig-restrictions) property from your stack template. -open class GeoRestriction { - Locations: (Listing)? - RestrictionType: String|Mapping -} - -/// A complex type that contains ``HeaderName`` and ``HeaderValue`` elements, if any, for this distribution. -open class OriginCustomHeader { - HeaderName: String|Mapping - HeaderValue: String|Mapping +/// A complex data type for the status codes that you specify that, when returned by a primary origin, trigger CloudFront to failover to a second origin. +open class DistributionStatusCodes { + Items: Listing + Quantity: Int|Mapping } /// An origin group includes two origins (a primary origin and a second origin to failover to) and a failover criteria that you specify. You create an origin group to support origin failover in CloudFront. When you create or update a distribution, you can specify the origin group instead of a single origin, and CloudFront will failover from the primary origin to the second origin under the failover conditions that you've chosen. -open class OriginGroup { - FailoverCriteria: OriginGroupFailoverCriteria +open class DistributionOriginGroup { + FailoverCriteria: DistributionOriginGroupFailoverCriteria Id: String|Mapping - Members: OriginGroupMembers -} - -/// A complex data type for the origins included in an origin group. -open class OriginGroupMembers { - Items: Listing - Quantity: Int|Mapping + Members: DistributionOriginGroupMembers } -/// A complex type that describes how CloudFront processes requests. -////// You must create at least as many cache behaviors (including the default cache behavior) as you have origins if you want CloudFront to serve objects from all of the origins. Each cache behavior specifies the one origin from which you want CloudFront to get objects. If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used. -/// For the current quota (formerly known as limit) on the number of cache behaviors that you can add to a distribution, see [Quotas](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html) in the *Amazon CloudFront Developer Guide*. -/// If you don't want to specify any cache behaviors, include only an empty ``CacheBehaviors`` element. Don't include an empty ``CacheBehavior`` element because this is invalid. -/// To delete all cache behaviors in an exist -open class CacheBehavior { - MinTTL: (Number|Mapping)? - Compress: (Boolean|Mapping)? - FunctionAssociations: (Listing)? - OriginRequestPolicyId: (String|Mapping)? - RealtimeLogConfigArn: (String|Mapping)? - ResponseHeadersPolicyId: (String|Mapping)? - TargetOriginId: String|Mapping - TrustedKeyGroups: (Listing)? - TrustedSigners: (Listing)? - AllowedMethods: (Listing)? - FieldLevelEncryptionId: (String|Mapping)? - ForwardedValues: (ForwardedValues)? - LambdaFunctionAssociations: (Listing)? - MaxTTL: (Number|Mapping)? - CachedMethods: (Listing)? - DefaultTTL: (Number|Mapping)? - PathPattern: String|Mapping - SmoothStreaming: (Boolean|Mapping)? - ViewerProtocolPolicy: String|Mapping - CachePolicyId: (String|Mapping)? -} - -/// A complex type that controls: -////// + Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer. -/// + How long CloudFront caches HTTP status codes in the 4xx and 5xx range. -/// -/// For more information about custom error pages, see [Customizing Error Responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) in the *Amazon CloudFront Developer Guide*. -open class CustomErrorResponse { - ErrorCachingMinTTL: (Number|Mapping)? - ErrorCode: Int|Mapping - ResponseCode: (Int|Mapping)? - ResponsePagePath: (String|Mapping)? -} - -/// A distribution configuration. -open class DistributionConfig { - Aliases: (Listing)? - Comment: (String|Mapping)? - Logging: (Logging)? - Restrictions: (Restrictions)? - S3Origin: (LegacyS3Origin)? - CNAMEs: (Listing)? - CustomOrigin: (LegacyCustomOrigin)? - Enabled: Boolean|Mapping - IPV6Enabled: (Boolean|Mapping)? - Origins: (Listing)? - WebACLId: (String|Mapping)? - CacheBehaviors: (Listing)? - CustomErrorResponses: (Listing)? - DefaultCacheBehavior: DefaultCacheBehavior - PriceClass: (String|Mapping)? - ContinuousDeploymentPolicyId: (String|Mapping)? - DefaultRootObject: (String|Mapping)? - HttpVersion: (String|Mapping)? - OriginGroups: (OriginGroups)? - Staging: (Boolean|Mapping)? - ViewerCertificate: (ViewerCertificate)? +/// A complex type that contains a Lambda@Edge function association. +open class DistributionLambdaFunctionAssociation { + EventType: (String|Mapping)? + IncludeBody: (Boolean|Mapping)? + LambdaFunctionARN: (String|Mapping)? } -/// A complex type that controls whether access logs are written for the distribution. -open class Logging { - IncludeCookies: (Boolean|Mapping)? - Prefix: (String|Mapping)? - Bucket: String|Mapping +/// A custom origin. A custom origin is any origin that is *not* an Amazon S3 bucket, with one exception. An Amazon S3 bucket that is [configured with static website hosting](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) *is* a custom origin. +open class DistributionCustomOriginConfig { + OriginSSLProtocols: (Listing)? + HTTPPort: (Int|Mapping)? + HTTPSPort: (Int|Mapping)? + OriginKeepaliveTimeout: (Int|Mapping)? + OriginProtocolPolicy: String|Mapping + OriginReadTimeout: (Int|Mapping)? } -/// A CloudFront function that is associated with a cache behavior in a CloudFront distribution. -open class FunctionAssociation { - EventType: (String|Mapping)? - FunctionARN: (String|Mapping)? +/// A complex type that determines the distribution's SSL/TLS configuration for communicating with viewers. +/// +/// If the distribution doesn't use ``Aliases`` (also known as alternate domain names or CNAMEs)?that is, if the distribution uses the CloudFront domain name such as ``d111111abcdef8.cloudfront.net``?set ``CloudFrontDefaultCertificate`` to ``true`` and leave all other fields empty. +/// If the distribution uses ``Aliases`` (alternate domain names or CNAMEs), use the fields in this type to specify the following settings: +/// + Which viewers the distribution accepts HTTPS connections from: only viewers that support [server name indication (SNI)](https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/Server_Name_Indication) (recommended), or all viewers including those that don't support SNI. +/// + To accept HTTPS connections from only viewers that support SNI, set ``SSLSupportMethod`` to ``sni-only``. This is recommended. Most browsers and clients support SNI. (In CloudFormation, the field n +open class DistributionViewerCertificate { + SslSupportMethod: (String|Mapping)? + AcmCertificateArn: (String|Mapping)? + CloudFrontDefaultCertificate: (Boolean|Mapping)? + IamCertificateId: (String|Mapping)? + MinimumProtocolVersion: (String|Mapping)? } -/// -open class LegacyCustomOrigin { - OriginProtocolPolicy: String|Mapping - OriginSSLProtocols: Listing - DNSName: String|Mapping - HTTPPort: (Int|Mapping)? - HTTPSPort: (Int|Mapping)? +/// This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field. +/// +/// If you want to include cookies in the cache key, use a cache policy. For more information, see [Creating cache policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy) in the *Amazon CloudFront Developer Guide*. +/// If you want to send cookies to the origin but not include them in the cache key, use an origin request policy. For more information, see [Creating origin request policies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) in the *Amazon CloudFront Developer Guide*. +/// A complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see [How CloudFront Forwards, Caches, and Logs C +open class DistributionCookies { + Forward: String|Mapping + WhitelistedNames: (Listing)? } -/// CloudFront Origin Shield. -////// Using Origin Shield can help reduce the load on your origin. For more information, see [Using Origin Shield](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html) in the *Amazon CloudFront Developer Guide*. -open class OriginShield { - Enabled: (Boolean|Mapping)? - OriginShieldRegion: (String|Mapping)? +/// A complex data type that includes information about the failover criteria for an origin group, including the status codes for which CloudFront will failover from the primary origin to the second origin. +open class DistributionOriginGroupFailoverCriteria { + StatusCodes: DistributionStatusCodes } /// A distribution tells CloudFront where you want content to be delivered from, and the details about how to track and manage content delivery. @@ -272,15 +279,15 @@ open class Distribution extends cloudformation.Resource { Type = "AWS::CloudFront::Distribution" - /// The distribution's configuration. - hidden DistributionConfig: DistributionConfig - /// A complex type that contains zero or more ``Tag`` elements. - hidden Tags: (Listing)? + hidden Tags: (Listing)? + + /// The distribution's configuration. + hidden DistributionConfig: DistributionDistributionConfig Properties { - ["DistributionConfig"] = if (DistributionConfig == null) null else DistributionConfig ["Tags"] = if (Tags == null) null else Tags + ["DistributionConfig"] = if (DistributionConfig == null) null else DistributionConfig } } diff --git a/pkl/aws/cloudfront/function.pkl b/pkl/aws/cloudfront/function.pkl index 872679b3..7105dcf6 100644 --- a/pkl/aws/cloudfront/function.pkl +++ b/pkl/aws/cloudfront/function.pkl @@ -6,20 +6,20 @@ module aws.cloudfront.function_ import "../../cloudformation.pkl" /// -open class FunctionMetadata { +open class FunctionFunctionMetadata { FunctionARN: (String|Mapping)? } /// -open class KeyValueStoreAssociation { +open class FunctionKeyValueStoreAssociation { KeyValueStoreARN: String|Mapping } /// -open class FunctionConfig { +open class FunctionFunctionConfig { Comment: String|Mapping Runtime: String|Mapping - KeyValueStoreAssociations: (Listing)? + KeyValueStoreAssociations: (Listing)? } /// Resource Type definition for AWS::CloudFront::Function @@ -29,26 +29,26 @@ open class Function extends cloudformation.Resource { /// - hidden FunctionConfig: FunctionConfig + hidden AutoPublish: (Boolean|Mapping)? /// - hidden FunctionMetadata: (FunctionMetadata)? + hidden FunctionCode: String|Mapping /// - hidden Name: String|Mapping + hidden FunctionConfig: FunctionFunctionConfig /// - hidden AutoPublish: (Boolean|Mapping)? + hidden FunctionMetadata: (FunctionFunctionMetadata)? /// - hidden FunctionCode: String|Mapping + hidden Name: String|Mapping Properties { + ["AutoPublish"] = if (AutoPublish == null) null else AutoPublish + ["FunctionCode"] = if (FunctionCode == null) null else FunctionCode ["FunctionConfig"] = if (FunctionConfig == null) null else FunctionConfig ["FunctionMetadata"] = if (FunctionMetadata == null) null else FunctionMetadata ["Name"] = if (Name == null) null else Name - ["AutoPublish"] = if (AutoPublish == null) null else AutoPublish - ["FunctionCode"] = if (FunctionCode == null) null else FunctionCode } } diff --git a/pkl/aws/cloudfront/keygroup.pkl b/pkl/aws/cloudfront/keygroup.pkl index f832eff3..7708d8d4 100644 --- a/pkl/aws/cloudfront/keygroup.pkl +++ b/pkl/aws/cloudfront/keygroup.pkl @@ -6,10 +6,10 @@ module aws.cloudfront.keygroup import "../../cloudformation.pkl" /// -open class KeyGroupConfig { - Items: Listing +open class KeyGroupKeyGroupConfig { Name: String|Mapping Comment: (String|Mapping)? + Items: Listing } /// Resource Type definition for AWS::CloudFront::KeyGroup @@ -19,7 +19,7 @@ open class KeyGroup extends cloudformation.Resource { /// - hidden KeyGroupConfig: KeyGroupConfig + hidden KeyGroupConfig: KeyGroupKeyGroupConfig Properties { ["KeyGroupConfig"] = if (KeyGroupConfig == null) null else KeyGroupConfig diff --git a/pkl/aws/cloudfront/monitoringsubscription.pkl b/pkl/aws/cloudfront/monitoringsubscription.pkl index e3a376c6..26ba9313 100644 --- a/pkl/aws/cloudfront/monitoringsubscription.pkl +++ b/pkl/aws/cloudfront/monitoringsubscription.pkl @@ -6,14 +6,14 @@ module aws.cloudfront.monitoringsubscription import "../../cloudformation.pkl" /// -open class MonitoringSubscription { - RealtimeMetricsSubscriptionConfig: (RealtimeMetricsSubscriptionConfig)? +open class MonitoringSubscriptionMonitoringSubscription { + RealtimeMetricsSubscriptionConfig: (MonitoringSubscriptionRealtimeMetricsSubscriptionConfig)? } typealias RealtimeMetricsSubscriptionConfigRealtimeMetricsSubscriptionStatus = "Enabled"|"Disabled" /// -open class RealtimeMetricsSubscriptionConfig { +open class MonitoringSubscriptionRealtimeMetricsSubscriptionConfig { RealtimeMetricsSubscriptionStatus: RealtimeMetricsSubscriptionConfigRealtimeMetricsSubscriptionStatus|Mapping } @@ -27,7 +27,7 @@ open class MonitoringSubscription extends cloudformation.Resource { hidden DistributionId: String|Mapping /// - hidden MonitoringSubscription: MonitoringSubscription + hidden MonitoringSubscription: MonitoringSubscriptionMonitoringSubscription Properties { ["DistributionId"] = if (DistributionId == null) null else DistributionId diff --git a/pkl/aws/cloudfront/originaccesscontrol.pkl b/pkl/aws/cloudfront/originaccesscontrol.pkl index 0e96a151..f44e6369 100644 --- a/pkl/aws/cloudfront/originaccesscontrol.pkl +++ b/pkl/aws/cloudfront/originaccesscontrol.pkl @@ -6,12 +6,12 @@ module aws.cloudfront.originaccesscontrol import "../../cloudformation.pkl" /// -open class OriginAccessControlConfig { +open class OriginAccessControlOriginAccessControlConfig { + SigningBehavior: String(matches(Regex(#"^(never|no-override|always)$"#)))|Mapping + SigningProtocol: String(matches(Regex(#"^(sigv4)$"#)))|Mapping Description: (String|Mapping)? Name: String|Mapping OriginAccessControlOriginType: String(matches(Regex(#"^(s3|mediastore)$"#)))|Mapping - SigningBehavior: String(matches(Regex(#"^(never|no-override|always)$"#)))|Mapping - SigningProtocol: String(matches(Regex(#"^(sigv4)$"#)))|Mapping } /// Resource Type definition for AWS::CloudFront::OriginAccessControl @@ -21,7 +21,7 @@ open class OriginAccessControl extends cloudformation.Resource { /// - hidden OriginAccessControlConfig: OriginAccessControlConfig + hidden OriginAccessControlConfig: OriginAccessControlOriginAccessControlConfig Properties { ["OriginAccessControlConfig"] = if (OriginAccessControlConfig == null) null else OriginAccessControlConfig diff --git a/pkl/aws/cloudfront/originrequestpolicy.pkl b/pkl/aws/cloudfront/originrequestpolicy.pkl index 15ecc5c8..8cd3a72e 100644 --- a/pkl/aws/cloudfront/originrequestpolicy.pkl +++ b/pkl/aws/cloudfront/originrequestpolicy.pkl @@ -6,32 +6,32 @@ module aws.cloudfront.originrequestpolicy import "../../cloudformation.pkl" /// -open class QueryStringsConfig { - QueryStrings: (Listing)? +open class OriginRequestPolicyOriginRequestPolicyConfig { + Comment: (String|Mapping)? + CookiesConfig: OriginRequestPolicyCookiesConfig + HeadersConfig: OriginRequestPolicyHeadersConfig + Name: String|Mapping + QueryStringsConfig: OriginRequestPolicyQueryStringsConfig +} + +/// +open class OriginRequestPolicyQueryStringsConfig { QueryStringBehavior: String(matches(Regex(#"^(none|whitelist|all|allExcept)$"#)))|Mapping + QueryStrings: (Listing)? } /// -open class CookiesConfig { - Cookies: (Listing)? +open class OriginRequestPolicyCookiesConfig { CookieBehavior: String(matches(Regex(#"^(none|whitelist|all|allExcept)$"#)))|Mapping + Cookies: (Listing)? } /// -open class HeadersConfig { +open class OriginRequestPolicyHeadersConfig { HeaderBehavior: String(matches(Regex(#"^(none|whitelist|allViewer|allViewerAndWhitelistCloudFront|allExcept)$"#)))|Mapping Headers: (Listing)? } -/// -open class OriginRequestPolicyConfig { - CookiesConfig: CookiesConfig - HeadersConfig: HeadersConfig - Name: String|Mapping - QueryStringsConfig: QueryStringsConfig - Comment: (String|Mapping)? -} - /// Resource Type definition for AWS::CloudFront::OriginRequestPolicy open class OriginRequestPolicy extends cloudformation.Resource { @@ -39,7 +39,7 @@ open class OriginRequestPolicy extends cloudformation.Resource { /// - hidden OriginRequestPolicyConfig: OriginRequestPolicyConfig + hidden OriginRequestPolicyConfig: OriginRequestPolicyOriginRequestPolicyConfig Properties { ["OriginRequestPolicyConfig"] = if (OriginRequestPolicyConfig == null) null else OriginRequestPolicyConfig diff --git a/pkl/aws/cloudfront/publickey.pkl b/pkl/aws/cloudfront/publickey.pkl index c3921978..ab4aceee 100644 --- a/pkl/aws/cloudfront/publickey.pkl +++ b/pkl/aws/cloudfront/publickey.pkl @@ -6,11 +6,11 @@ module aws.cloudfront.publickey import "../../cloudformation.pkl" /// -open class PublicKeyConfig { - EncodedKey: String|Mapping +open class PublicKeyPublicKeyConfig { Name: String|Mapping CallerReference: String|Mapping Comment: (String|Mapping)? + EncodedKey: String|Mapping } /// Resource Type definition for AWS::CloudFront::PublicKey @@ -20,7 +20,7 @@ open class PublicKey extends cloudformation.Resource { /// - hidden PublicKeyConfig: PublicKeyConfig + hidden PublicKeyConfig: PublicKeyPublicKeyConfig Properties { ["PublicKeyConfig"] = if (PublicKeyConfig == null) null else PublicKeyConfig diff --git a/pkl/aws/cloudfront/realtimelogconfig.pkl b/pkl/aws/cloudfront/realtimelogconfig.pkl index b4172e18..d65941b1 100644 --- a/pkl/aws/cloudfront/realtimelogconfig.pkl +++ b/pkl/aws/cloudfront/realtimelogconfig.pkl @@ -6,13 +6,13 @@ module aws.cloudfront.realtimelogconfig import "../../cloudformation.pkl" /// -open class EndPoint { - KinesisStreamConfig: KinesisStreamConfig +open class RealtimeLogConfigEndPoint { + KinesisStreamConfig: RealtimeLogConfigKinesisStreamConfig StreamType: String|Mapping } /// -open class KinesisStreamConfig { +open class RealtimeLogConfigKinesisStreamConfig { RoleArn: String|Mapping StreamArn: String|Mapping } @@ -24,10 +24,7 @@ open class RealtimeLogConfig extends cloudformation.Resource { /// - hidden SamplingRate: Number|Mapping - - /// - hidden EndPoints: Listing + hidden EndPoints: Listing /// hidden Fields: Listing @@ -35,11 +32,14 @@ open class RealtimeLogConfig extends cloudformation.Resource { /// hidden Name: String|Mapping + /// + hidden SamplingRate: Number|Mapping + Properties { - ["SamplingRate"] = if (SamplingRate == null) null else SamplingRate ["EndPoints"] = if (EndPoints == null) null else EndPoints ["Fields"] = if (Fields == null) null else Fields ["Name"] = if (Name == null) null else Name + ["SamplingRate"] = if (SamplingRate == null) null else SamplingRate } } diff --git a/pkl/aws/cloudfront/responseheaderspolicy.pkl b/pkl/aws/cloudfront/responseheaderspolicy.pkl index 2a4a94af..051631af 100644 --- a/pkl/aws/cloudfront/responseheaderspolicy.pkl +++ b/pkl/aws/cloudfront/responseheaderspolicy.pkl @@ -6,122 +6,122 @@ module aws.cloudfront.responseheaderspolicy import "../../cloudformation.pkl" /// -open class AccessControlAllowHeaders { - Items: Listing +open class ResponseHeadersPolicyContentTypeOptions { + Override: Boolean|Mapping } /// -open class AccessControlAllowOrigins { - Items: Listing +open class ResponseHeadersPolicyRemoveHeadersConfig { + Items: Listing } /// -open class CorsConfig { - AccessControlAllowMethods: AccessControlAllowMethods - AccessControlAllowOrigins: AccessControlAllowOrigins - AccessControlExposeHeaders: (AccessControlExposeHeaders)? - AccessControlMaxAgeSec: (Int|Mapping)? - OriginOverride: Boolean|Mapping - AccessControlAllowCredentials: Boolean|Mapping - AccessControlAllowHeaders: AccessControlAllowHeaders +open class ResponseHeadersPolicyServerTimingHeadersConfig { + Enabled: Boolean|Mapping + SamplingRate: (Number|Mapping)? } /// -open class CustomHeadersConfig { - Items: Listing +open class ResponseHeadersPolicyCustomHeader { + Header: String|Mapping + Override: Boolean|Mapping + Value: String|Mapping } /// -open class ResponseHeadersPolicyConfig { - Name: String|Mapping - RemoveHeadersConfig: (RemoveHeadersConfig)? - SecurityHeadersConfig: (SecurityHeadersConfig)? - ServerTimingHeadersConfig: (ServerTimingHeadersConfig)? - Comment: (String|Mapping)? - CorsConfig: (CorsConfig)? - CustomHeadersConfig: (CustomHeadersConfig)? +open class ResponseHeadersPolicyStrictTransportSecurity { + AccessControlMaxAgeSec: Int|Mapping + IncludeSubdomains: (Boolean|Mapping)? + Override: Boolean|Mapping + Preload: (Boolean|Mapping)? } /// -open class AccessControlExposeHeaders { +open class ResponseHeadersPolicyAccessControlAllowMethods { Items: Listing } /// -open class FrameOptions { - FrameOption: String(matches(Regex(#"^(DENY|SAMEORIGIN)$"#)))|Mapping - Override: Boolean|Mapping +open class ResponseHeadersPolicyAccessControlAllowHeaders { + Items: Listing } /// -open class ReferrerPolicy { +open class ResponseHeadersPolicyFrameOptions { + FrameOption: String(matches(Regex(#"^(DENY|SAMEORIGIN)$"#)))|Mapping Override: Boolean|Mapping - ReferrerPolicy: String(matches(Regex(#"^(no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|same-origin|strict-origin|strict-origin-when-cross-origin|unsafe-url)$"#)))|Mapping } /// -open class StrictTransportSecurity { - AccessControlMaxAgeSec: Int|Mapping - IncludeSubdomains: (Boolean|Mapping)? - Override: Boolean|Mapping - Preload: (Boolean|Mapping)? +open class ResponseHeadersPolicyAccessControlAllowOrigins { + Items: Listing } /// -open class XSSProtection { - ModeBlock: (Boolean|Mapping)? - Override: Boolean|Mapping - Protection: Boolean|Mapping - ReportUri: (String|Mapping)? +open class ResponseHeadersPolicyResponseHeadersPolicyConfig { + Name: String|Mapping + RemoveHeadersConfig: (ResponseHeadersPolicyRemoveHeadersConfig)? + SecurityHeadersConfig: (ResponseHeadersPolicySecurityHeadersConfig)? + ServerTimingHeadersConfig: (ResponseHeadersPolicyServerTimingHeadersConfig)? + Comment: (String|Mapping)? + CorsConfig: (ResponseHeadersPolicyCorsConfig)? + CustomHeadersConfig: (ResponseHeadersPolicyCustomHeadersConfig)? } /// -open class ContentSecurityPolicy { - ContentSecurityPolicy: String|Mapping - Override: Boolean|Mapping +open class ResponseHeadersPolicyCorsConfig { + AccessControlExposeHeaders: (ResponseHeadersPolicyAccessControlExposeHeaders)? + AccessControlMaxAgeSec: (Int|Mapping)? + OriginOverride: Boolean|Mapping + AccessControlAllowCredentials: Boolean|Mapping + AccessControlAllowHeaders: ResponseHeadersPolicyAccessControlAllowHeaders + AccessControlAllowMethods: ResponseHeadersPolicyAccessControlAllowMethods + AccessControlAllowOrigins: ResponseHeadersPolicyAccessControlAllowOrigins } /// -open class ContentTypeOptions { - Override: Boolean|Mapping +open class ResponseHeadersPolicyCustomHeadersConfig { + Items: Listing } /// -open class CustomHeader { - Header: String|Mapping +open class ResponseHeadersPolicyReferrerPolicy { Override: Boolean|Mapping - Value: String|Mapping + ReferrerPolicy: String(matches(Regex(#"^(no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|same-origin|strict-origin|strict-origin-when-cross-origin|unsafe-url)$"#)))|Mapping } /// -open class RemoveHeader { +open class ResponseHeadersPolicyRemoveHeader { Header: String|Mapping } /// -open class RemoveHeadersConfig { - Items: Listing +open class ResponseHeadersPolicySecurityHeadersConfig { + ReferrerPolicy: (ResponseHeadersPolicyReferrerPolicy)? + StrictTransportSecurity: (ResponseHeadersPolicyStrictTransportSecurity)? + XSSProtection: (ResponseHeadersPolicyXSSProtection)? + ContentSecurityPolicy: (ResponseHeadersPolicyContentSecurityPolicy)? + ContentTypeOptions: (ResponseHeadersPolicyContentTypeOptions)? + FrameOptions: (ResponseHeadersPolicyFrameOptions)? } /// -open class AccessControlAllowMethods { - Items: Listing +open class ResponseHeadersPolicyXSSProtection { + ModeBlock: (Boolean|Mapping)? + Override: Boolean|Mapping + Protection: Boolean|Mapping + ReportUri: (String|Mapping)? } /// -open class SecurityHeadersConfig { - FrameOptions: (FrameOptions)? - ReferrerPolicy: (ReferrerPolicy)? - StrictTransportSecurity: (StrictTransportSecurity)? - XSSProtection: (XSSProtection)? - ContentSecurityPolicy: (ContentSecurityPolicy)? - ContentTypeOptions: (ContentTypeOptions)? +open class ResponseHeadersPolicyContentSecurityPolicy { + Override: Boolean|Mapping + ContentSecurityPolicy: String|Mapping } /// -open class ServerTimingHeadersConfig { - Enabled: Boolean|Mapping - SamplingRate: (Number|Mapping)? +open class ResponseHeadersPolicyAccessControlExposeHeaders { + Items: Listing } /// Resource Type definition for AWS::CloudFront::ResponseHeadersPolicy @@ -131,7 +131,7 @@ open class ResponseHeadersPolicy extends cloudformation.Resource { /// - hidden ResponseHeadersPolicyConfig: ResponseHeadersPolicyConfig + hidden ResponseHeadersPolicyConfig: ResponseHeadersPolicyResponseHeadersPolicyConfig Properties { ["ResponseHeadersPolicyConfig"] = if (ResponseHeadersPolicyConfig == null) null else ResponseHeadersPolicyConfig diff --git a/pkl/aws/cloudfront/streamingdistribution.pkl b/pkl/aws/cloudfront/streamingdistribution.pkl index 853d9283..c6e83db7 100644 --- a/pkl/aws/cloudfront/streamingdistribution.pkl +++ b/pkl/aws/cloudfront/streamingdistribution.pkl @@ -6,39 +6,39 @@ module aws.cloudfront.streamingdistribution import "../../cloudformation.pkl" /// -open class S3Origin { - DomainName: String|Mapping - OriginAccessIdentity: String|Mapping +open class StreamingDistributionTrustedSigners { + Enabled: Boolean|Mapping + AwsAccountNumbers: (Listing)? } /// -open class StreamingDistributionConfig { - Comment: String|Mapping - PriceClass: (String|Mapping)? - S3Origin: S3Origin +open class StreamingDistributionLogging { Enabled: Boolean|Mapping - Aliases: (Listing)? - TrustedSigners: TrustedSigners - Logging: (Logging)? + Prefix: String|Mapping + Bucket: String|Mapping } /// -open class Tag { - Key: String|Mapping - Value: String|Mapping +open class StreamingDistributionS3Origin { + DomainName: String|Mapping + OriginAccessIdentity: String|Mapping } /// -open class TrustedSigners { +open class StreamingDistributionStreamingDistributionConfig { Enabled: Boolean|Mapping - AwsAccountNumbers: (Listing)? + Aliases: (Listing)? + TrustedSigners: StreamingDistributionTrustedSigners + Logging: (StreamingDistributionLogging)? + Comment: String|Mapping + PriceClass: (String|Mapping)? + S3Origin: StreamingDistributionS3Origin } /// -open class Logging { - Bucket: String|Mapping - Enabled: Boolean|Mapping - Prefix: String|Mapping +open class StreamingDistributionTag { + Key: String|Mapping + Value: String|Mapping } /// Resource Type definition for AWS::CloudFront::StreamingDistribution @@ -48,14 +48,14 @@ open class StreamingDistribution extends cloudformation.Resource { /// - hidden StreamingDistributionConfig: StreamingDistributionConfig + hidden Tags: Listing /// - hidden Tags: Listing + hidden StreamingDistributionConfig: StreamingDistributionStreamingDistributionConfig Properties { - ["StreamingDistributionConfig"] = if (StreamingDistributionConfig == null) null else StreamingDistributionConfig ["Tags"] = if (Tags == null) null else Tags + ["StreamingDistributionConfig"] = if (StreamingDistributionConfig == null) null else StreamingDistributionConfig } } diff --git a/pkl/aws/cloudtrail/channel.pkl b/pkl/aws/cloudtrail/channel.pkl index 98e19ae8..a79e3582 100644 --- a/pkl/aws/cloudtrail/channel.pkl +++ b/pkl/aws/cloudtrail/channel.pkl @@ -5,20 +5,8 @@ module aws.cloudtrail.channel import "../../cloudformation.pkl" -/// -open class Timestamp { -} - -/// The Amazon Resource Name (ARN) of a channel. -open class ChannelArn { -} - -/// The name of the channel. -open class ChannelName { -} - /// A key-value pair to associate with a resource. -open class Tag { +open class ChannelTag { Key: String|Mapping Value: String|Mapping } @@ -26,14 +14,22 @@ open class Tag { typealias DestinationType = "EVENT_DATA_STORE" /// The resource that receives events arriving from a channel. -open class Destination { +open class ChannelDestination { Type: DestinationType|Mapping Location: String(matches(Regex(#"(^[a-zA-Z0-9._/\-:]+$)"#)))|Mapping } -/// -open class UUID { -} +typealias ChannelUUID = String|Mapping + + +typealias ChannelTimestamp = String|Mapping + + +typealias ChannelChannelArn = String|Mapping + + +typealias ChannelChannelName = String|Mapping + /// A channel receives events from a specific source (such as an on-premises storage solution or application, or a partner event data source), and delivers the events to one or more event data stores. You use channels to ingest events into CloudTrail from sources outside AWS. open class Channel extends cloudformation.Resource { @@ -41,23 +37,23 @@ open class Channel extends cloudformation.Resource { Type = "AWS::CloudTrail::Channel" + /// One or more resources to which events arriving through a channel are logged and stored. + hidden Destinations: (Listing)? + /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// - hidden Name: (ChannelName)? + hidden Name: (ChannelChannelName)? /// The ARN of an on-premises storage solution or application, or a partner event source. hidden Source: (String(matches(Regex(#"(.*)"#)))|Mapping)? - /// One or more resources to which events arriving through a channel are logged and stored. - hidden Destinations: (Listing)? - Properties { + ["Destinations"] = if (Destinations == null) null else Destinations ["Tags"] = if (Tags == null) null else Tags ["Name"] = if (Name == null) null else Name ["Source"] = if (Source == null) null else Source - ["Destinations"] = if (Destinations == null) null else Destinations } } diff --git a/pkl/aws/cloudtrail/eventdatastore.pkl b/pkl/aws/cloudtrail/eventdatastore.pkl index 1ea8902e..3b29a7b8 100644 --- a/pkl/aws/cloudtrail/eventdatastore.pkl +++ b/pkl/aws/cloudtrail/eventdatastore.pkl @@ -5,36 +5,35 @@ module aws.cloudtrail.eventdatastore import "../../cloudformation.pkl" +/// An arbitrary set of tags (key-value pairs) for this event data store. +open class EventDataStoreTag { + Key: String|Mapping + Value: String|Mapping +} + +/// A string that contains Insights types that are logged on an event data store. +open class EventDataStoreInsightSelector { + InsightType: (String|Mapping)? +} + +typealias EventDataStoreTimestamp = String|Mapping + + /// A single selector statement in an advanced event selector. -open class AdvancedFieldSelector { +open class EventDataStoreAdvancedFieldSelector { + NotEndsWith: (Listing)? Field: String(matches(Regex(#"([\w|\d|\.|_]+)"#)))|Mapping Equals: (Listing)? StartsWith: (Listing)? EndsWith: (Listing)? NotEquals: (Listing)? NotStartsWith: (Listing)? - NotEndsWith: (Listing)? } /// Advanced event selectors let you create fine-grained selectors for the following AWS CloudTrail event record ?elds. They help you control costs by logging only those events that are important to you. -open class AdvancedEventSelector { +open class EventDataStoreAdvancedEventSelector { + FieldSelectors: Listing Name: (String|Mapping)? - FieldSelectors: Listing -} - -/// An arbitrary set of tags (key-value pairs) for this event data store. -open class Tag { - Key: String|Mapping - Value: String|Mapping -} - -/// A string that contains Insights types that are logged on an event data store. -open class InsightSelector { - InsightType: (String|Mapping)? -} - -/// -open class Timestamp { } /// A storage lake of event data against which you can run complex SQL-based queries. An event data store can include events that you have logged on your account from the last 7 to 2557 or 3653 days (about seven or ten years) depending on the selected BillingMode. @@ -43,35 +42,38 @@ open class EventDataStore extends cloudformation.Resource { Type = "AWS::CloudTrail::EventDataStore" - /// Indicates that an event data store is collecting logged events for an organization. - hidden OrganizationEnabled: (Boolean|Mapping)? + /// Lets you enable Insights event logging by specifying the Insights selectors that you want to enable on an existing event data store. Both InsightSelectors and InsightsDestination need to have a value in order to enable Insights events on an event data store. + hidden InsightSelectors: (Listing)? + + /// The ARN of the role used for event data store federation. + hidden FederationRoleArn: (String|Mapping)? /// The mode that the event data store will use to charge for event storage. hidden BillingMode: (String|Mapping)? + /// Indicates whether the event data store is protected from termination. + hidden TerminationProtectionEnabled: (Boolean|Mapping)? + /// Indicates whether the event data store is ingesting events. hidden IngestionEnabled: (Boolean|Mapping)? /// Indicates whether federation is enabled on an event data store. hidden FederationEnabled: (Boolean|Mapping)? - /// The ARN of the role used for event data store federation. - hidden FederationRoleArn: (String|Mapping)? + /// Indicates that an event data store is collecting logged events for an organization. + hidden OrganizationEnabled: (Boolean|Mapping)? /// The retention period, in days. hidden RetentionPeriod: (Int|Mapping)? - /// - hidden Tags: (Listing)? + /// Specifies the KMS key ID to use to encrypt the events delivered by CloudTrail. The value can be an alias name prefixed by 'alias/', a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier. + hidden KmsKeyId: (String|Mapping)? - /// Lets you enable Insights event logging by specifying the Insights selectors that you want to enable on an existing event data store. Both InsightSelectors and InsightsDestination need to have a value in order to enable Insights events on an event data store. - hidden InsightSelectors: (Listing)? + /// Specifies the ARN of the event data store that will collect Insights events. Both InsightSelectors and InsightsDestination need to have a value in order to enable Insights events on an event data store + hidden InsightsDestination: (String|Mapping)? /// The advanced event selectors that were used to select events for the data store. - hidden AdvancedEventSelectors: (Listing)? - - /// Indicates whether the event data store is protected from termination. - hidden TerminationProtectionEnabled: (Boolean|Mapping)? + hidden AdvancedEventSelectors: (Listing)? /// Indicates whether the event data store includes events from all regions, or only from the region in which it was created. hidden MultiRegionEnabled: (Boolean|Mapping)? @@ -79,27 +81,24 @@ open class EventDataStore extends cloudformation.Resource { /// The name of the event data store. hidden Name: (String|Mapping)? - /// Specifies the KMS key ID to use to encrypt the events delivered by CloudTrail. The value can be an alias name prefixed by 'alias/', a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier. - hidden KmsKeyId: (String|Mapping)? - - /// Specifies the ARN of the event data store that will collect Insights events. Both InsightSelectors and InsightsDestination need to have a value in order to enable Insights events on an event data store - hidden InsightsDestination: (String|Mapping)? + /// + hidden Tags: (Listing)? Properties { - ["OrganizationEnabled"] = if (OrganizationEnabled == null) null else OrganizationEnabled + ["InsightSelectors"] = if (InsightSelectors == null) null else InsightSelectors + ["FederationRoleArn"] = if (FederationRoleArn == null) null else FederationRoleArn ["BillingMode"] = if (BillingMode == null) null else BillingMode + ["TerminationProtectionEnabled"] = if (TerminationProtectionEnabled == null) null else TerminationProtectionEnabled ["IngestionEnabled"] = if (IngestionEnabled == null) null else IngestionEnabled ["FederationEnabled"] = if (FederationEnabled == null) null else FederationEnabled - ["FederationRoleArn"] = if (FederationRoleArn == null) null else FederationRoleArn + ["OrganizationEnabled"] = if (OrganizationEnabled == null) null else OrganizationEnabled ["RetentionPeriod"] = if (RetentionPeriod == null) null else RetentionPeriod - ["Tags"] = if (Tags == null) null else Tags - ["InsightSelectors"] = if (InsightSelectors == null) null else InsightSelectors + ["KmsKeyId"] = if (KmsKeyId == null) null else KmsKeyId + ["InsightsDestination"] = if (InsightsDestination == null) null else InsightsDestination ["AdvancedEventSelectors"] = if (AdvancedEventSelectors == null) null else AdvancedEventSelectors - ["TerminationProtectionEnabled"] = if (TerminationProtectionEnabled == null) null else TerminationProtectionEnabled ["MultiRegionEnabled"] = if (MultiRegionEnabled == null) null else MultiRegionEnabled ["Name"] = if (Name == null) null else Name - ["KmsKeyId"] = if (KmsKeyId == null) null else KmsKeyId - ["InsightsDestination"] = if (InsightsDestination == null) null else InsightsDestination + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/cloudtrail/trail.pkl b/pkl/aws/cloudtrail/trail.pkl index 06541c09..89c09034 100644 --- a/pkl/aws/cloudtrail/trail.pkl +++ b/pkl/aws/cloudtrail/trail.pkl @@ -5,41 +5,19 @@ module aws.cloudtrail.trail import "../../cloudformation.pkl" -/// Advanced event selectors let you create fine-grained selectors for the following AWS CloudTrail event record ?elds. They help you control costs by logging only those events that are important to you. -open class AdvancedEventSelector { - Name: (String|Mapping)? - FieldSelectors: Listing -} - -typealias EventSelectorReadWriteType = "All"|"ReadOnly"|"WriteOnly" - -/// The type of email sending events to publish to the event destination. -open class EventSelector { - ExcludeManagementEventSources: (Listing)? - DataResources: (Listing)? - IncludeManagementEvents: (Boolean|Mapping)? - ReadWriteType: (EventSelectorReadWriteType|Mapping)? -} - -/// An arbitrary set of tags (key-value pairs) for this trail. -open class Tag { - Key: String|Mapping - Value: String|Mapping -} - /// A string that contains insight types that are logged on a trail. -open class InsightSelector { +open class TrailInsightSelector { InsightType: (String|Mapping)? } /// CloudTrail supports data event logging for Amazon S3 objects and AWS Lambda functions. You can specify up to 250 resources for an individual event selector, but the total number of data resources cannot exceed 250 across all event selectors in a trail. This limit does not apply if you configure resource logging for all data events. -open class DataResource { - Values: (Listing)? +open class TrailDataResource { Type: String|Mapping + Values: (Listing)? } /// A single selector statement in an advanced event selector. -open class AdvancedFieldSelector { +open class TrailAdvancedFieldSelector { Field: String(matches(Regex(#"([\w|\d|\.|_]+)"#)))|Mapping Equals: (Listing)? StartsWith: (Listing)? @@ -49,20 +27,33 @@ open class AdvancedFieldSelector { NotEndsWith: (Listing)? } -/// Creates a trail that specifies the settings for delivery of log data to an Amazon S3 bucket. A maximum of five trails can exist in a region, irrespective of the region in which they were created. -open class Trail extends cloudformation.Resource { +/// Advanced event selectors let you create fine-grained selectors for the following AWS CloudTrail event record ?elds. They help you control costs by logging only those events that are important to you. +open class TrailAdvancedEventSelector { + Name: (String|Mapping)? + FieldSelectors: Listing +} - Type = "AWS::CloudTrail::Trail" +typealias EventSelectorReadWriteType = "All"|"ReadOnly"|"WriteOnly" +/// The type of email sending events to publish to the event destination. +open class TrailEventSelector { + DataResources: (Listing)? + IncludeManagementEvents: (Boolean|Mapping)? + ReadWriteType: (EventSelectorReadWriteType|Mapping)? + ExcludeManagementEventSources: (Listing)? +} - /// - hidden Tags: (Listing)? +/// An arbitrary set of tags (key-value pairs) for this trail. +open class TrailTag { + Key: String|Mapping + Value: String|Mapping +} - /// Lets you enable Insights event logging by specifying the Insights selectors that you want to enable on an existing trail. - hidden InsightSelectors: (Listing)? +/// Creates a trail that specifies the settings for delivery of log data to an Amazon S3 bucket. A maximum of five trails can exist in a region, irrespective of the region in which they were created. +open class Trail extends cloudformation.Resource { + + Type = "AWS::CloudTrail::Trail" - /// Specifies whether log file validation is enabled. The default is false. - hidden EnableLogFileValidation: (Boolean|Mapping)? /// Whether the CloudTrail is currently logging AWS API calls. hidden IsLogging: Boolean|Mapping @@ -70,26 +61,20 @@ open class Trail extends cloudformation.Resource { /// Specifies the KMS key ID to use to encrypt the logs delivered by CloudTrail. The value can be an alias name prefixed by 'alias/', a fully specified ARN to an alias, a fully specified ARN to a key, or a globally unique identifier. hidden KMSKeyId: (String|Mapping)? - /// Specifies the name of the Amazon S3 bucket designated for publishing log files. See Amazon S3 Bucket Naming Requirements. - hidden S3BucketName: String|Mapping - - /// Specifies the Amazon S3 key prefix that comes after the name of the bucket you have designated for log file delivery. For more information, see Finding Your CloudTrail Log Files. The maximum length is 200 characters. - hidden S3KeyPrefix: (String|Mapping)? - /// Use event selectors to further specify the management and data event settings for your trail. By default, trails created without specific event selectors will be configured to log all read and write management events, and no data events. When an event occurs in your account, CloudTrail evaluates the event selector for all trails. For each trail, if the event matches any event selector, the trail processes and logs the event. If the event doesn't match any event selector, the trail doesn't log the event. You can configure up to five event selectors for a trail. - hidden EventSelectors: (Listing)? - - /// The advanced event selectors that were used to select events for the data store. - hidden AdvancedEventSelectors: (Listing)? + hidden EventSelectors: (Listing)? /// Specifies whether the trail is publishing events from global services such as IAM to the log files. hidden IncludeGlobalServiceEvents: (Boolean|Mapping)? - /// Specifies whether the trail applies only to the current region or to all regions. The default is false. If the trail exists only in the current region and this value is set to true, shadow trails (replications of the trail) will be created in the other regions. If the trail exists in all regions and this value is set to false, the trail will remain in the region where it was created, and its shadow trails in other regions will be deleted. As a best practice, consider using trails that log events in all regions. - hidden IsMultiRegionTrail: (Boolean|Mapping)? + /// The advanced event selectors that were used to select events for the data store. + hidden AdvancedEventSelectors: (Listing)? - /// Specifies whether the trail is created for all accounts in an organization in AWS Organizations, or only for the current AWS account. The default is false, and cannot be true unless the call is made on behalf of an AWS account that is the master account for an organization in AWS Organizations. - hidden IsOrganizationTrail: (Boolean|Mapping)? + /// Specifies the name of the Amazon S3 bucket designated for publishing log files. See Amazon S3 Bucket Naming Requirements. + hidden S3BucketName: String|Mapping + + /// Specifies the Amazon S3 key prefix that comes after the name of the bucket you have designated for log file delivery. For more information, see Finding Your CloudTrail Log Files. The maximum length is 200 characters. + hidden S3KeyPrefix: (String|Mapping)? /// Specifies a log group name using an Amazon Resource Name (ARN), a unique identifier that represents the log group to which CloudTrail logs will be delivered. Not required unless you specify CloudWatchLogsRoleArn. hidden CloudWatchLogsLogGroupArn: (String|Mapping)? @@ -97,29 +82,44 @@ open class Trail extends cloudformation.Resource { /// Specifies the role for the CloudWatch Logs endpoint to assume to write to a user's log group. hidden CloudWatchLogsRoleArn: (String|Mapping)? + /// Specifies whether log file validation is enabled. The default is false. + hidden EnableLogFileValidation: (Boolean|Mapping)? + + /// Lets you enable Insights event logging by specifying the Insights selectors that you want to enable on an existing trail. + hidden InsightSelectors: (Listing)? + /// Specifies the name of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters. hidden SnsTopicName: (String|Mapping)? + /// + hidden Tags: (Listing)? + /// hidden TrailName: (String(matches(Regex(#"(^[a-zA-Z0-9]$)|(^[a-zA-Z0-9]([a-zA-Z0-9\._-])*[a-zA-Z0-9]$)"#)))|Mapping)? + /// Specifies whether the trail applies only to the current region or to all regions. The default is false. If the trail exists only in the current region and this value is set to true, shadow trails (replications of the trail) will be created in the other regions. If the trail exists in all regions and this value is set to false, the trail will remain in the region where it was created, and its shadow trails in other regions will be deleted. As a best practice, consider using trails that log events in all regions. + hidden IsMultiRegionTrail: (Boolean|Mapping)? + + /// Specifies whether the trail is created for all accounts in an organization in AWS Organizations, or only for the current AWS account. The default is false, and cannot be true unless the call is made on behalf of an AWS account that is the master account for an organization in AWS Organizations. + hidden IsOrganizationTrail: (Boolean|Mapping)? + Properties { - ["Tags"] = if (Tags == null) null else Tags - ["InsightSelectors"] = if (InsightSelectors == null) null else InsightSelectors - ["EnableLogFileValidation"] = if (EnableLogFileValidation == null) null else EnableLogFileValidation ["IsLogging"] = if (IsLogging == null) null else IsLogging ["KMSKeyId"] = if (KMSKeyId == null) null else KMSKeyId - ["S3BucketName"] = if (S3BucketName == null) null else S3BucketName - ["S3KeyPrefix"] = if (S3KeyPrefix == null) null else S3KeyPrefix ["EventSelectors"] = if (EventSelectors == null) null else EventSelectors - ["AdvancedEventSelectors"] = if (AdvancedEventSelectors == null) null else AdvancedEventSelectors ["IncludeGlobalServiceEvents"] = if (IncludeGlobalServiceEvents == null) null else IncludeGlobalServiceEvents - ["IsMultiRegionTrail"] = if (IsMultiRegionTrail == null) null else IsMultiRegionTrail - ["IsOrganizationTrail"] = if (IsOrganizationTrail == null) null else IsOrganizationTrail + ["AdvancedEventSelectors"] = if (AdvancedEventSelectors == null) null else AdvancedEventSelectors + ["S3BucketName"] = if (S3BucketName == null) null else S3BucketName + ["S3KeyPrefix"] = if (S3KeyPrefix == null) null else S3KeyPrefix ["CloudWatchLogsLogGroupArn"] = if (CloudWatchLogsLogGroupArn == null) null else CloudWatchLogsLogGroupArn ["CloudWatchLogsRoleArn"] = if (CloudWatchLogsRoleArn == null) null else CloudWatchLogsRoleArn + ["EnableLogFileValidation"] = if (EnableLogFileValidation == null) null else EnableLogFileValidation + ["InsightSelectors"] = if (InsightSelectors == null) null else InsightSelectors ["SnsTopicName"] = if (SnsTopicName == null) null else SnsTopicName + ["Tags"] = if (Tags == null) null else Tags ["TrailName"] = if (TrailName == null) null else TrailName + ["IsMultiRegionTrail"] = if (IsMultiRegionTrail == null) null else IsMultiRegionTrail + ["IsOrganizationTrail"] = if (IsOrganizationTrail == null) null else IsOrganizationTrail } } diff --git a/pkl/aws/cloudwatch/alarm.pkl b/pkl/aws/cloudwatch/alarm.pkl index 8e7dad3d..0c943001 100644 --- a/pkl/aws/cloudwatch/alarm.pkl +++ b/pkl/aws/cloudwatch/alarm.pkl @@ -6,35 +6,35 @@ module aws.cloudwatch.alarm import "../../cloudformation.pkl" /// The Metric property type represents a specific metric. -open class Metric { +open class AlarmMetric { MetricName: (String|Mapping)? - Dimensions: (Listing)? + Dimensions: (Listing)? Namespace: (String|Mapping)? } /// Dimensions are arbitrary name/value pairs that can be associated with a CloudWatch metric. -open class Dimension { - Name: String|Mapping +open class AlarmDimension { Value: String|Mapping + Name: String|Mapping } /// This property type specifies the metric data to return, and whether this call is just retrieving a batch set of data for one metric, or is performing a math expression on metric data. -open class MetricDataQuery { +open class AlarmMetricDataQuery { + Expression: (String|Mapping)? Period: (Int|Mapping)? AccountId: (String|Mapping)? Label: (String|Mapping)? - MetricStat: (MetricStat)? + MetricStat: (AlarmMetricStat)? Id: String|Mapping ReturnData: (Boolean|Mapping)? - Expression: (String|Mapping)? } /// This structure defines the metric to be returned, along with the statistics, period, and units. -open class MetricStat { - Period: Int|Mapping - Metric: Metric +open class AlarmMetricStat { Stat: String|Mapping Unit: (String|Mapping)? + Period: Int|Mapping + Metric: AlarmMetric } /// Resource Type definition for AWS::CloudWatch::Alarm @@ -43,91 +43,91 @@ open class Alarm extends cloudformation.Resource { Type = "AWS::CloudWatch::Alarm" - /// Sets how this alarm is to handle missing data points. Valid values are breaching, notBreaching, ignore, and missing. - hidden TreatMissingData: (String|Mapping)? - - /// The dimensions for the metric associated with the alarm. For an alarm based on a math expression, you can't specify Dimensions. Instead, you use Metrics. - hidden Dimensions: (Listing)? + /// The period in seconds, over which the statistic is applied. + hidden Period: (Int|Mapping)? /// The number of periods over which data is compared to the specified threshold. hidden EvaluationPeriods: Int|Mapping - /// The statistic for the metric associated with the alarm, other than percentile. - hidden Statistic: (String|Mapping)? - - /// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state. - hidden InsufficientDataActions: (Listing)? + /// An array that enables you to create an alarm based on the result of a metric math expression. + hidden Metrics: (Listing)? /// In an alarm based on an anomaly detection model, this is the ID of the ANOMALY_DETECTION_BAND function used as the threshold for the alarm. hidden ThresholdMetricId: (String|Mapping)? - /// The percentile statistic for the metric associated with the alarm. Specify a value between p0.0 and p100. - hidden ExtendedStatistic: (String|Mapping)? + /// Sets how this alarm is to handle missing data points. Valid values are breaching, notBreaching, ignore, and missing. + hidden TreatMissingData: (String|Mapping)? - /// The unit of the metric associated with the alarm. - hidden Unit: (String|Mapping)? + /// The list of actions to execute when this alarm transitions into an ALARM state from any other state. + hidden AlarmActions: (Listing)? + + /// The name of the metric associated with the alarm. + hidden MetricName: (String|Mapping)? /// The name of the alarm. hidden AlarmName: (String|Mapping)? - /// In an alarm based on an anomaly detection model, this is the ID of the ANOMALY_DETECTION_BAND function used as the threshold for the alarm. - hidden Threshold: (Number|Mapping)? + /// The statistic for the metric associated with the alarm, other than percentile. + hidden Statistic: (String|Mapping)? - /// The description of the alarm. - hidden AlarmDescription: (String|Mapping)? + /// Used only for alarms based on percentiles. + hidden EvaluateLowSampleCountPercentile: (String|Mapping)? - /// The arithmetic operation to use when comparing the specified statistic and threshold. - hidden ComparisonOperator: String|Mapping + /// The dimensions for the metric associated with the alarm. For an alarm based on a math expression, you can't specify Dimensions. Instead, you use Metrics. + hidden Dimensions: (Listing)? - /// The period in seconds, over which the statistic is applied. - hidden Period: (Int|Mapping)? + /// The unit of the metric associated with the alarm. + hidden Unit: (String|Mapping)? + + /// The namespace of the metric associated with the alarm. + hidden Namespace: (String|Mapping)? /// The actions to execute when this alarm transitions to the OK state from any other state. hidden OKActions: (Listing)? - /// Indicates whether actions should be executed during any changes to the alarm state. The default is TRUE. - hidden ActionsEnabled: (Boolean|Mapping)? + /// The number of datapoints that must be breaching to trigger the alarm. + hidden DatapointsToAlarm: (Int|Mapping)? - /// An array that enables you to create an alarm based on the result of a metric math expression. - hidden Metrics: (Listing)? + /// In an alarm based on an anomaly detection model, this is the ID of the ANOMALY_DETECTION_BAND function used as the threshold for the alarm. + hidden Threshold: (Number|Mapping)? - /// Used only for alarms based on percentiles. - hidden EvaluateLowSampleCountPercentile: (String|Mapping)? + /// The percentile statistic for the metric associated with the alarm. Specify a value between p0.0 and p100. + hidden ExtendedStatistic: (String|Mapping)? - /// The namespace of the metric associated with the alarm. - hidden Namespace: (String|Mapping)? + /// Indicates whether actions should be executed during any changes to the alarm state. The default is TRUE. + hidden ActionsEnabled: (Boolean|Mapping)? - /// The list of actions to execute when this alarm transitions into an ALARM state from any other state. - hidden AlarmActions: (Listing)? + /// The description of the alarm. + hidden AlarmDescription: (String|Mapping)? - /// The name of the metric associated with the alarm. - hidden MetricName: (String|Mapping)? + /// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state. + hidden InsufficientDataActions: (Listing)? - /// The number of datapoints that must be breaching to trigger the alarm. - hidden DatapointsToAlarm: (Int|Mapping)? + /// The arithmetic operation to use when comparing the specified statistic and threshold. + hidden ComparisonOperator: String|Mapping Properties { - ["TreatMissingData"] = if (TreatMissingData == null) null else TreatMissingData - ["Dimensions"] = if (Dimensions == null) null else Dimensions + ["Period"] = if (Period == null) null else Period ["EvaluationPeriods"] = if (EvaluationPeriods == null) null else EvaluationPeriods - ["Statistic"] = if (Statistic == null) null else Statistic - ["InsufficientDataActions"] = if (InsufficientDataActions == null) null else InsufficientDataActions + ["Metrics"] = if (Metrics == null) null else Metrics ["ThresholdMetricId"] = if (ThresholdMetricId == null) null else ThresholdMetricId - ["ExtendedStatistic"] = if (ExtendedStatistic == null) null else ExtendedStatistic - ["Unit"] = if (Unit == null) null else Unit + ["TreatMissingData"] = if (TreatMissingData == null) null else TreatMissingData + ["AlarmActions"] = if (AlarmActions == null) null else AlarmActions + ["MetricName"] = if (MetricName == null) null else MetricName ["AlarmName"] = if (AlarmName == null) null else AlarmName - ["Threshold"] = if (Threshold == null) null else Threshold - ["AlarmDescription"] = if (AlarmDescription == null) null else AlarmDescription - ["ComparisonOperator"] = if (ComparisonOperator == null) null else ComparisonOperator - ["Period"] = if (Period == null) null else Period - ["OKActions"] = if (OKActions == null) null else OKActions - ["ActionsEnabled"] = if (ActionsEnabled == null) null else ActionsEnabled - ["Metrics"] = if (Metrics == null) null else Metrics + ["Statistic"] = if (Statistic == null) null else Statistic ["EvaluateLowSampleCountPercentile"] = if (EvaluateLowSampleCountPercentile == null) null else EvaluateLowSampleCountPercentile + ["Dimensions"] = if (Dimensions == null) null else Dimensions + ["Unit"] = if (Unit == null) null else Unit ["Namespace"] = if (Namespace == null) null else Namespace - ["AlarmActions"] = if (AlarmActions == null) null else AlarmActions - ["MetricName"] = if (MetricName == null) null else MetricName + ["OKActions"] = if (OKActions == null) null else OKActions ["DatapointsToAlarm"] = if (DatapointsToAlarm == null) null else DatapointsToAlarm + ["Threshold"] = if (Threshold == null) null else Threshold + ["ExtendedStatistic"] = if (ExtendedStatistic == null) null else ExtendedStatistic + ["ActionsEnabled"] = if (ActionsEnabled == null) null else ActionsEnabled + ["AlarmDescription"] = if (AlarmDescription == null) null else AlarmDescription + ["InsufficientDataActions"] = if (InsufficientDataActions == null) null else InsufficientDataActions + ["ComparisonOperator"] = if (ComparisonOperator == null) null else ComparisonOperator } } diff --git a/pkl/aws/cloudwatch/anomalydetector.pkl b/pkl/aws/cloudwatch/anomalydetector.pkl index 16be5ec5..df645887 100644 --- a/pkl/aws/cloudwatch/anomalydetector.pkl +++ b/pkl/aws/cloudwatch/anomalydetector.pkl @@ -6,62 +6,62 @@ module aws.cloudwatch.anomalydetector import "../../cloudformation.pkl" /// -open class MetricDataQuery { - Id: String|Mapping - AccountId: (String|Mapping)? - ReturnData: (Boolean|Mapping)? - Expression: (String|Mapping)? - MetricStat: (MetricStat)? - Label: (String|Mapping)? - Period: (Int|Mapping)? -} - -/// -open class Range { +open class AnomalyDetectorRange { EndTime: String|Mapping StartTime: String|Mapping } /// -open class SingleMetricAnomalyDetector { +open class AnomalyDetectorSingleMetricAnomalyDetector { MetricName: (String|Mapping)? - Dimensions: (Listing)? + Dimensions: (Listing)? Stat: (String|Mapping)? Namespace: (String|Mapping)? } /// -open class MetricMathAnomalyDetector { - MetricDataQueries: (Listing)? +open class AnomalyDetectorMetricMathAnomalyDetector { + MetricDataQueries: (Listing)? } /// -open class Configuration { +open class AnomalyDetectorConfiguration { + ExcludedTimeRanges: (Listing)? MetricTimeZone: (String|Mapping)? - ExcludedTimeRanges: (Listing)? } /// -open class MetricStat { +open class AnomalyDetectorMetricStat { Period: Int|Mapping - Metric: Metric + Metric: AnomalyDetectorMetric Stat: String|Mapping Unit: (String|Mapping)? } /// -open class Metric { - MetricName: String|Mapping - Dimensions: (Listing)? +open class AnomalyDetectorMetric { Namespace: String|Mapping + MetricName: String|Mapping + Dimensions: (Listing)? } /// -open class Dimension { +open class AnomalyDetectorDimension { Value: String|Mapping Name: String|Mapping } +/// +open class AnomalyDetectorMetricDataQuery { + AccountId: (String|Mapping)? + ReturnData: (Boolean|Mapping)? + Expression: (String|Mapping)? + MetricStat: (AnomalyDetectorMetricStat)? + Label: (String|Mapping)? + Period: (Int|Mapping)? + Id: String|Mapping +} + /// Resource Type definition for AWS::CloudWatch::AnomalyDetector open class AnomalyDetector extends cloudformation.Resource { @@ -69,10 +69,7 @@ open class AnomalyDetector extends cloudformation.Resource { /// - hidden Namespace: (String|Mapping)? - - /// - hidden SingleMetricAnomalyDetector: (SingleMetricAnomalyDetector)? + hidden SingleMetricAnomalyDetector: (AnomalyDetectorSingleMetricAnomalyDetector)? /// hidden MetricName: (String|Mapping)? @@ -81,22 +78,25 @@ open class AnomalyDetector extends cloudformation.Resource { hidden Stat: (String|Mapping)? /// - hidden Configuration: (Configuration)? + hidden Configuration: (AnomalyDetectorConfiguration)? /// - hidden MetricMathAnomalyDetector: (MetricMathAnomalyDetector)? + hidden MetricMathAnomalyDetector: (AnomalyDetectorMetricMathAnomalyDetector)? /// - hidden Dimensions: (Listing)? + hidden Dimensions: (Listing)? + + /// + hidden Namespace: (String|Mapping)? Properties { - ["Namespace"] = if (Namespace == null) null else Namespace ["SingleMetricAnomalyDetector"] = if (SingleMetricAnomalyDetector == null) null else SingleMetricAnomalyDetector ["MetricName"] = if (MetricName == null) null else MetricName ["Stat"] = if (Stat == null) null else Stat ["Configuration"] = if (Configuration == null) null else Configuration ["MetricMathAnomalyDetector"] = if (MetricMathAnomalyDetector == null) null else MetricMathAnomalyDetector ["Dimensions"] = if (Dimensions == null) null else Dimensions + ["Namespace"] = if (Namespace == null) null else Namespace } } diff --git a/pkl/aws/cloudwatch/compositealarm.pkl b/pkl/aws/cloudwatch/compositealarm.pkl index 8d4a025a..e13112fc 100644 --- a/pkl/aws/cloudwatch/compositealarm.pkl +++ b/pkl/aws/cloudwatch/compositealarm.pkl @@ -17,41 +17,41 @@ open class CompositeAlarm extends cloudformation.Resource { /// The description of the alarm hidden AlarmDescription: (String|Mapping)? - /// Actions will be suppressed if the suppressor alarm is in the ALARM state. ActionsSuppressor can be an AlarmName or an Amazon Resource Name (ARN) from an existing alarm. - hidden ActionsSuppressor: (String|Mapping)? - - /// Actions will be suppressed if ExtensionPeriod is active. The length of time that actions are suppressed is in seconds. - hidden ActionsSuppressorWaitPeriod: (Int|Mapping)? - - /// Actions will be suppressed if WaitPeriod is active. The length of time that actions are suppressed is in seconds. - hidden ActionsSuppressorExtensionPeriod: (Int|Mapping)? - /// Indicates whether actions should be executed during any changes to the alarm state. The default is TRUE. hidden ActionsEnabled: (Boolean|Mapping)? /// The actions to execute when this alarm transitions to the OK state from any other state. Each action is specified as an Amazon Resource Name (ARN). hidden OKActions: (Listing)? - /// The list of actions to execute when this alarm transitions into an ALARM state from any other state. Specify each action as an Amazon Resource Name (ARN). - hidden AlarmActions: (Listing)? - /// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state. Each action is specified as an Amazon Resource Name (ARN). hidden InsufficientDataActions: (Listing)? /// The name of the Composite Alarm hidden AlarmName: (String|Mapping)? + /// The list of actions to execute when this alarm transitions into an ALARM state from any other state. Specify each action as an Amazon Resource Name (ARN). + hidden AlarmActions: (Listing)? + + /// Actions will be suppressed if the suppressor alarm is in the ALARM state. ActionsSuppressor can be an AlarmName or an Amazon Resource Name (ARN) from an existing alarm. + hidden ActionsSuppressor: (String|Mapping)? + + /// Actions will be suppressed if ExtensionPeriod is active. The length of time that actions are suppressed is in seconds. + hidden ActionsSuppressorWaitPeriod: (Int|Mapping)? + + /// Actions will be suppressed if WaitPeriod is active. The length of time that actions are suppressed is in seconds. + hidden ActionsSuppressorExtensionPeriod: (Int|Mapping)? + Properties { ["AlarmRule"] = if (AlarmRule == null) null else AlarmRule ["AlarmDescription"] = if (AlarmDescription == null) null else AlarmDescription - ["ActionsSuppressor"] = if (ActionsSuppressor == null) null else ActionsSuppressor - ["ActionsSuppressorWaitPeriod"] = if (ActionsSuppressorWaitPeriod == null) null else ActionsSuppressorWaitPeriod - ["ActionsSuppressorExtensionPeriod"] = if (ActionsSuppressorExtensionPeriod == null) null else ActionsSuppressorExtensionPeriod ["ActionsEnabled"] = if (ActionsEnabled == null) null else ActionsEnabled ["OKActions"] = if (OKActions == null) null else OKActions - ["AlarmActions"] = if (AlarmActions == null) null else AlarmActions ["InsufficientDataActions"] = if (InsufficientDataActions == null) null else InsufficientDataActions ["AlarmName"] = if (AlarmName == null) null else AlarmName + ["AlarmActions"] = if (AlarmActions == null) null else AlarmActions + ["ActionsSuppressor"] = if (ActionsSuppressor == null) null else ActionsSuppressor + ["ActionsSuppressorWaitPeriod"] = if (ActionsSuppressorWaitPeriod == null) null else ActionsSuppressorWaitPeriod + ["ActionsSuppressorExtensionPeriod"] = if (ActionsSuppressorExtensionPeriod == null) null else ActionsSuppressorExtensionPeriod } } diff --git a/pkl/aws/cloudwatch/insightrule.pkl b/pkl/aws/cloudwatch/insightrule.pkl index 5d9af445..161ed4a5 100644 --- a/pkl/aws/cloudwatch/insightrule.pkl +++ b/pkl/aws/cloudwatch/insightrule.pkl @@ -5,9 +5,8 @@ module aws.cloudwatch.insightrule import "../../cloudformation.pkl" -/// -open class Tags { -} +typealias InsightRuleTags = Dynamic + /// Resource Type definition for AWS::CloudWatch::InsightRule open class InsightRule extends cloudformation.Resource { @@ -22,7 +21,7 @@ open class InsightRule extends cloudformation.Resource { hidden RuleName: String|Mapping /// - hidden Tags: (Tags)? + hidden Tags: (InsightRuleTags)? /// hidden RuleState: String|Mapping diff --git a/pkl/aws/cloudwatch/metricstream.pkl b/pkl/aws/cloudwatch/metricstream.pkl index 973ce6b2..63a1c5d6 100644 --- a/pkl/aws/cloudwatch/metricstream.pkl +++ b/pkl/aws/cloudwatch/metricstream.pkl @@ -6,25 +6,25 @@ module aws.cloudwatch.metricstream import "../../cloudformation.pkl" /// This structure defines the metrics that will be streamed. -open class MetricStreamFilter { - MetricNames: (Listing)? +open class MetricStreamMetricStreamFilter { Namespace: String|Mapping + MetricNames: (Listing)? } /// This structure specifies a list of additional statistics to stream, and the metrics to stream those additional statistics for. All metrics that match the combination of metric name and namespace will be streamed with the extended statistics, no matter their dimensions. -open class MetricStreamStatisticsConfiguration { +open class MetricStreamMetricStreamStatisticsConfiguration { AdditionalStatistics: Listing - IncludeMetrics: Listing + IncludeMetrics: Listing } /// A structure that specifies the metric name and namespace for one metric that is going to have additional statistics included in the stream. -open class MetricStreamStatisticsMetric { - MetricName: String|Mapping +open class MetricStreamMetricStreamStatisticsMetric { Namespace: String|Mapping + MetricName: String|Mapping } /// Metadata that you can assign to a Metric Stream, consisting of a key-value pair. -open class Tag { +open class MetricStreamTag { Key: String|Mapping Value: String|Mapping } @@ -36,42 +36,42 @@ open class MetricStream extends cloudformation.Resource { /// Define which metrics will be not streamed. Metrics matched by multiple instances of MetricStreamFilter are joined with an OR operation by default. If both IncludeFilters and ExcludeFilters are omitted, all metrics in the account will be streamed. IncludeFilters and ExcludeFilters are mutually exclusive. Default to null. - hidden ExcludeFilters: (Listing)? - - /// If you are creating a metric stream in a monitoring account, specify true to include metrics from source accounts that are linked to this monitoring account, in the metric stream. The default is false. - hidden IncludeLinkedAccountsMetrics: (Boolean|Mapping)? + hidden ExcludeFilters: (Listing)? /// The ARN of the Kinesis Firehose where to stream the data. hidden FirehoseArn: String|Mapping + /// By default, a metric stream always sends the MAX, MIN, SUM, and SAMPLECOUNT statistics for each metric that is streamed. You can use this parameter to have the metric stream also send additional statistics in the stream. This array can have up to 100 members. + hidden StatisticsConfigurations: (Listing)? + + /// Define which metrics will be streamed. Metrics matched by multiple instances of MetricStreamFilter are joined with an OR operation by default. If both IncludeFilters and ExcludeFilters are omitted, all metrics in the account will be streamed. IncludeFilters and ExcludeFilters are mutually exclusive. Default to null. + hidden IncludeFilters: (Listing)? + /// The output format of the data streamed to the Kinesis Firehose. hidden OutputFormat: String|Mapping + /// A set of tags to assign to the delivery stream. + hidden Tags: (Listing)? + /// Name of the metric stream. hidden Name: (String|Mapping)? - /// Define which metrics will be streamed. Metrics matched by multiple instances of MetricStreamFilter are joined with an OR operation by default. If both IncludeFilters and ExcludeFilters are omitted, all metrics in the account will be streamed. IncludeFilters and ExcludeFilters are mutually exclusive. Default to null. - hidden IncludeFilters: (Listing)? - /// The ARN of the role that provides access to the Kinesis Firehose. hidden RoleArn: String|Mapping - /// By default, a metric stream always sends the MAX, MIN, SUM, and SAMPLECOUNT statistics for each metric that is streamed. You can use this parameter to have the metric stream also send additional statistics in the stream. This array can have up to 100 members. - hidden StatisticsConfigurations: (Listing)? - - /// A set of tags to assign to the delivery stream. - hidden Tags: (Listing)? + /// If you are creating a metric stream in a monitoring account, specify true to include metrics from source accounts that are linked to this monitoring account, in the metric stream. The default is false. + hidden IncludeLinkedAccountsMetrics: (Boolean|Mapping)? Properties { ["ExcludeFilters"] = if (ExcludeFilters == null) null else ExcludeFilters - ["IncludeLinkedAccountsMetrics"] = if (IncludeLinkedAccountsMetrics == null) null else IncludeLinkedAccountsMetrics ["FirehoseArn"] = if (FirehoseArn == null) null else FirehoseArn + ["StatisticsConfigurations"] = if (StatisticsConfigurations == null) null else StatisticsConfigurations + ["IncludeFilters"] = if (IncludeFilters == null) null else IncludeFilters ["OutputFormat"] = if (OutputFormat == null) null else OutputFormat + ["Tags"] = if (Tags == null) null else Tags ["Name"] = if (Name == null) null else Name - ["IncludeFilters"] = if (IncludeFilters == null) null else IncludeFilters ["RoleArn"] = if (RoleArn == null) null else RoleArn - ["StatisticsConfigurations"] = if (StatisticsConfigurations == null) null else StatisticsConfigurations - ["Tags"] = if (Tags == null) null else Tags + ["IncludeLinkedAccountsMetrics"] = if (IncludeLinkedAccountsMetrics == null) null else IncludeLinkedAccountsMetrics } } diff --git a/pkl/aws/codeartifact/domain.pkl b/pkl/aws/codeartifact/domain.pkl index 1fcd3419..59360a83 100644 --- a/pkl/aws/codeartifact/domain.pkl +++ b/pkl/aws/codeartifact/domain.pkl @@ -6,7 +6,7 @@ module aws.codeartifact.domain import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class DomainTag { Key: String|Mapping Value: String|Mapping } @@ -21,7 +21,7 @@ open class Domain extends cloudformation.Resource { hidden PermissionsPolicyDocument: (Dynamic)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// The name of the domain. hidden DomainName: String(matches(Regex(#"^([a-z][a-z0-9\-]{0,48}[a-z0-9])$"#)))|Mapping diff --git a/pkl/aws/codeartifact/repository.pkl b/pkl/aws/codeartifact/repository.pkl index 49bb8943..9f488f0e 100644 --- a/pkl/aws/codeartifact/repository.pkl +++ b/pkl/aws/codeartifact/repository.pkl @@ -6,7 +6,7 @@ module aws.codeartifact.repository import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class RepositoryTag { Key: String|Mapping Value: String|Mapping } @@ -17,9 +17,6 @@ open class Repository extends cloudformation.Resource { Type = "AWS::CodeArtifact::Repository" - /// A text description of the repository. - hidden Description: (String|Mapping)? - /// A list of external connections associated with the repository. hidden ExternalConnections: (Listing)? @@ -29,23 +26,26 @@ open class Repository extends cloudformation.Resource { /// The access control resource policy on the provided repository. hidden PermissionsPolicyDocument: (Dynamic)? - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? - /// The name of the repository. hidden RepositoryName: String(matches(Regex(#"^([A-Za-z0-9][A-Za-z0-9._\-]{1,99})$"#)))|Mapping /// The name of the domain that contains the repository. hidden DomainName: String(matches(Regex(#"^([a-z][a-z0-9\-]{0,48}[a-z0-9])$"#)))|Mapping + /// A text description of the repository. + hidden Description: (String|Mapping)? + + /// An array of key-value pairs to apply to this resource. + hidden Tags: (Listing)? + Properties { - ["Description"] = if (Description == null) null else Description ["ExternalConnections"] = if (ExternalConnections == null) null else ExternalConnections ["Upstreams"] = if (Upstreams == null) null else Upstreams ["PermissionsPolicyDocument"] = if (PermissionsPolicyDocument == null) null else PermissionsPolicyDocument - ["Tags"] = if (Tags == null) null else Tags ["RepositoryName"] = if (RepositoryName == null) null else RepositoryName ["DomainName"] = if (DomainName == null) null else DomainName + ["Description"] = if (Description == null) null else Description + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/codebuild/project.pkl b/pkl/aws/codebuild/project.pkl index ef3ec747..2f498411 100644 --- a/pkl/aws/codebuild/project.pkl +++ b/pkl/aws/codebuild/project.pkl @@ -6,48 +6,74 @@ module aws.codebuild.project import "../../cloudformation.pkl" /// -open class SourceAuth { +open class ProjectProjectBuildBatchConfig { + CombineArtifacts: (Boolean|Mapping)? + ServiceRole: (String|Mapping)? + BatchReportMode: (String|Mapping)? + TimeoutInMins: (Int|Mapping)? + Restrictions: (ProjectBatchRestrictions)? +} + +/// +open class ProjectSourceAuth { Resource: (String|Mapping)? Type: String|Mapping } /// -open class ProjectCache { - Modes: (Listing)? - Type: String|Mapping - Location: (String|Mapping)? +open class ProjectLogsConfig { + CloudWatchLogs: (ProjectCloudWatchLogsConfig)? + S3Logs: (ProjectS3LogsConfig)? } /// -open class CloudWatchLogsConfig { - GroupName: (String|Mapping)? - StreamName: (String|Mapping)? +open class ProjectS3LogsConfig { Status: String|Mapping + EncryptionDisabled: (Boolean|Mapping)? + Location: (String|Mapping)? } /// -open class ProjectFileSystemLocation { - MountPoint: String|Mapping - Type: String|Mapping - Identifier: String|Mapping - MountOptions: (String|Mapping)? - Location: String|Mapping +open class ProjectVpcConfig { + Subnets: (Listing)? + VpcId: (String|Mapping)? + SecurityGroupIds: (Listing)? } /// -open class BuildStatusConfig { - Context: (String|Mapping)? - TargetUrl: (String|Mapping)? +open class ProjectProjectFleet { + FleetArn: (String|Mapping)? } /// -open class FilterGroup { +open class ProjectSource { + BuildSpec: (String|Mapping)? + Location: (String|Mapping)? + Type: String|Mapping + ReportBuildStatus: (Boolean|Mapping)? + SourceIdentifier: (String|Mapping)? + GitSubmodulesConfig: (ProjectGitSubmodulesConfig)? + InsecureSsl: (Boolean|Mapping)? + Auth: (ProjectSourceAuth)? + GitCloneDepth: (Int|Mapping)? + BuildStatusConfig: (ProjectBuildStatusConfig)? } /// -open class Artifacts { - OverrideArtifactName: (Boolean|Mapping)? +open class ProjectRegistryCredential { + Credential: String|Mapping + CredentialProvider: String|Mapping +} + +/// +open class ProjectProjectCache { + Modes: (Listing)? + Type: String|Mapping Location: (String|Mapping)? +} + +/// +open class ProjectArtifacts { Path: (String|Mapping)? Type: String|Mapping ArtifactIdentifier: (String|Mapping)? @@ -55,112 +81,85 @@ open class Artifacts { EncryptionDisabled: (Boolean|Mapping)? Name: (String|Mapping)? NamespaceType: (String|Mapping)? + OverrideArtifactName: (Boolean|Mapping)? + Location: (String|Mapping)? } /// -open class BatchRestrictions { - ComputeTypesAllowed: (Listing)? - MaximumBuildsAllowed: (Int|Mapping)? +open class ProjectTag { + Value: String|Mapping + Key: String|Mapping } /// -open class ProjectBuildBatchConfig { - CombineArtifacts: (Boolean|Mapping)? - ServiceRole: (String|Mapping)? - BatchReportMode: (String|Mapping)? - TimeoutInMins: (Int|Mapping)? - Restrictions: (BatchRestrictions)? +open class ProjectProjectSourceVersion { + SourceIdentifier: String|Mapping + SourceVersion: (String|Mapping)? } /// -open class ProjectTriggers { - FilterGroups: (Listing)? - Webhook: (Boolean|Mapping)? - BuildType: (String|Mapping)? +open class ProjectBuildStatusConfig { + Context: (String|Mapping)? + TargetUrl: (String|Mapping)? } /// -open class GitSubmodulesConfig { - FetchSubmodules: Boolean|Mapping +open class ProjectEnvironment { + EnvironmentVariables: (Listing)? + Fleet: (ProjectProjectFleet)? + PrivilegedMode: (Boolean|Mapping)? + ImagePullCredentialsType: (String|Mapping)? + ComputeType: String|Mapping + Type: String|Mapping + Image: String|Mapping + RegistryCredential: (ProjectRegistryCredential)? + Certificate: (String|Mapping)? } /// -open class ProjectSourceVersion { - SourceIdentifier: String|Mapping - SourceVersion: (String|Mapping)? +open class ProjectProjectTriggers { + BuildType: (String|Mapping)? + FilterGroups: (Listing)? + Webhook: (Boolean|Mapping)? } -/// -open class VpcConfig { - VpcId: (String|Mapping)? - SecurityGroupIds: (Listing)? - Subnets: (Listing)? -} +typealias ProjectFilterGroup = Dynamic + /// -open class RegistryCredential { - Credential: String|Mapping - CredentialProvider: String|Mapping +open class ProjectCloudWatchLogsConfig { + StreamName: (String|Mapping)? + Status: String|Mapping + GroupName: (String|Mapping)? } /// -open class Source { - GitCloneDepth: (Int|Mapping)? - GitSubmodulesConfig: (GitSubmodulesConfig)? - Location: (String|Mapping)? - ReportBuildStatus: (Boolean|Mapping)? - Auth: (SourceAuth)? - BuildSpec: (String|Mapping)? - BuildStatusConfig: (BuildStatusConfig)? - InsecureSsl: (Boolean|Mapping)? +open class ProjectProjectFileSystemLocation { + MountPoint: String|Mapping Type: String|Mapping - SourceIdentifier: (String|Mapping)? + Identifier: String|Mapping + MountOptions: (String|Mapping)? + Location: String|Mapping } /// -open class LogsConfig { - CloudWatchLogs: (CloudWatchLogsConfig)? - S3Logs: (S3LogsConfig)? +open class ProjectGitSubmodulesConfig { + FetchSubmodules: Boolean|Mapping } /// -open class Environment { - Fleet: (ProjectFleet)? - Image: String|Mapping - ComputeType: String|Mapping - Certificate: (String|Mapping)? - Type: String|Mapping - EnvironmentVariables: (Listing)? - PrivilegedMode: (Boolean|Mapping)? - ImagePullCredentialsType: (String|Mapping)? - RegistryCredential: (RegistryCredential)? +open class ProjectBatchRestrictions { + MaximumBuildsAllowed: (Int|Mapping)? + ComputeTypesAllowed: (Listing)? } /// -open class EnvironmentVariable { +open class ProjectEnvironmentVariable { Value: String|Mapping Type: (String|Mapping)? Name: String|Mapping } -/// -open class Tag { - Value: String|Mapping - Key: String|Mapping -} - -/// -open class S3LogsConfig { - Status: String|Mapping - EncryptionDisabled: (Boolean|Mapping)? - Location: (String|Mapping)? -} - -/// -open class ProjectFleet { - FleetArn: (String|Mapping)? -} - /// Resource Type definition for AWS::CodeBuild::Project open class Project extends cloudformation.Resource { @@ -168,102 +167,102 @@ open class Project extends cloudformation.Resource { /// - hidden QueuedTimeoutInMinutes: (Int|Mapping)? + hidden SecondarySourceVersions: (Listing)? /// - hidden Cache: (ProjectCache)? + hidden Tags: (Listing)? /// - hidden Source: Source + hidden BadgeEnabled: (Boolean|Mapping)? /// - hidden SourceVersion: (String|Mapping)? + hidden QueuedTimeoutInMinutes: (Int|Mapping)? /// - hidden Artifacts: Artifacts + hidden ResourceAccessRole: (String|Mapping)? /// - hidden SecondarySources: (Listing)? + hidden VpcConfig: (ProjectVpcConfig)? /// - hidden Name: (String|Mapping)? + hidden EncryptionKey: (String|Mapping)? /// - hidden ResourceAccessRole: (String|Mapping)? + hidden FileSystemLocations: (Listing)? /// - hidden LogsConfig: (LogsConfig)? + hidden Description: (String|Mapping)? /// - hidden BadgeEnabled: (Boolean|Mapping)? + hidden Artifacts: ProjectArtifacts /// - hidden SecondarySourceVersions: (Listing)? + hidden Environment: ProjectEnvironment /// - hidden FileSystemLocations: (Listing)? + hidden Name: (String|Mapping)? /// - hidden ConcurrentBuildLimit: (Int|Mapping)? + hidden Cache: (ProjectProjectCache)? /// - hidden BuildBatchConfig: (ProjectBuildBatchConfig)? + hidden SourceVersion: (String|Mapping)? /// - hidden Description: (String|Mapping)? + hidden Triggers: (ProjectProjectTriggers)? /// - hidden EncryptionKey: (String|Mapping)? + hidden Visibility: (String|Mapping)? /// - hidden Environment: Environment + hidden ServiceRole: String|Mapping /// - hidden VpcConfig: (VpcConfig)? + hidden SecondaryArtifacts: (Listing)? /// - hidden SecondaryArtifacts: (Listing)? + hidden ConcurrentBuildLimit: (Int|Mapping)? /// - hidden Tags: (Listing)? + hidden BuildBatchConfig: (ProjectProjectBuildBatchConfig)? /// - hidden Visibility: (String|Mapping)? + hidden Source: ProjectSource /// - hidden ServiceRole: String|Mapping + hidden LogsConfig: (ProjectLogsConfig)? /// - hidden Triggers: (ProjectTriggers)? + hidden TimeoutInMinutes: (Int|Mapping)? /// - hidden TimeoutInMinutes: (Int|Mapping)? + hidden SecondarySources: (Listing)? Properties { + ["SecondarySourceVersions"] = if (SecondarySourceVersions == null) null else SecondarySourceVersions + ["Tags"] = if (Tags == null) null else Tags + ["BadgeEnabled"] = if (BadgeEnabled == null) null else BadgeEnabled ["QueuedTimeoutInMinutes"] = if (QueuedTimeoutInMinutes == null) null else QueuedTimeoutInMinutes - ["Cache"] = if (Cache == null) null else Cache - ["Source"] = if (Source == null) null else Source - ["SourceVersion"] = if (SourceVersion == null) null else SourceVersion - ["Artifacts"] = if (Artifacts == null) null else Artifacts - ["SecondarySources"] = if (SecondarySources == null) null else SecondarySources - ["Name"] = if (Name == null) null else Name ["ResourceAccessRole"] = if (ResourceAccessRole == null) null else ResourceAccessRole - ["LogsConfig"] = if (LogsConfig == null) null else LogsConfig - ["BadgeEnabled"] = if (BadgeEnabled == null) null else BadgeEnabled - ["SecondarySourceVersions"] = if (SecondarySourceVersions == null) null else SecondarySourceVersions + ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig + ["EncryptionKey"] = if (EncryptionKey == null) null else EncryptionKey ["FileSystemLocations"] = if (FileSystemLocations == null) null else FileSystemLocations - ["ConcurrentBuildLimit"] = if (ConcurrentBuildLimit == null) null else ConcurrentBuildLimit - ["BuildBatchConfig"] = if (BuildBatchConfig == null) null else BuildBatchConfig ["Description"] = if (Description == null) null else Description - ["EncryptionKey"] = if (EncryptionKey == null) null else EncryptionKey + ["Artifacts"] = if (Artifacts == null) null else Artifacts ["Environment"] = if (Environment == null) null else Environment - ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig - ["SecondaryArtifacts"] = if (SecondaryArtifacts == null) null else SecondaryArtifacts - ["Tags"] = if (Tags == null) null else Tags + ["Name"] = if (Name == null) null else Name + ["Cache"] = if (Cache == null) null else Cache + ["SourceVersion"] = if (SourceVersion == null) null else SourceVersion + ["Triggers"] = if (Triggers == null) null else Triggers ["Visibility"] = if (Visibility == null) null else Visibility ["ServiceRole"] = if (ServiceRole == null) null else ServiceRole - ["Triggers"] = if (Triggers == null) null else Triggers + ["SecondaryArtifacts"] = if (SecondaryArtifacts == null) null else SecondaryArtifacts + ["ConcurrentBuildLimit"] = if (ConcurrentBuildLimit == null) null else ConcurrentBuildLimit + ["BuildBatchConfig"] = if (BuildBatchConfig == null) null else BuildBatchConfig + ["Source"] = if (Source == null) null else Source + ["LogsConfig"] = if (LogsConfig == null) null else LogsConfig ["TimeoutInMinutes"] = if (TimeoutInMinutes == null) null else TimeoutInMinutes + ["SecondarySources"] = if (SecondarySources == null) null else SecondarySources } } diff --git a/pkl/aws/codebuild/reportgroup.pkl b/pkl/aws/codebuild/reportgroup.pkl index 8a4a7b31..16af8246 100644 --- a/pkl/aws/codebuild/reportgroup.pkl +++ b/pkl/aws/codebuild/reportgroup.pkl @@ -6,25 +6,25 @@ module aws.codebuild.reportgroup import "../../cloudformation.pkl" /// -open class S3ReportExportConfig { - Path: (String|Mapping)? - Bucket: String|Mapping - Packaging: (String|Mapping)? - EncryptionKey: (String|Mapping)? - BucketOwner: (String|Mapping)? - EncryptionDisabled: (Boolean|Mapping)? +open class ReportGroupTag { + Key: String|Mapping + Value: String|Mapping } /// -open class Tag { - Value: String|Mapping - Key: String|Mapping +open class ReportGroupReportExportConfig { + S3Destination: (ReportGroupS3ReportExportConfig)? + ExportConfigType: String|Mapping } /// -open class ReportExportConfig { - S3Destination: (S3ReportExportConfig)? - ExportConfigType: String|Mapping +open class ReportGroupS3ReportExportConfig { + EncryptionDisabled: (Boolean|Mapping)? + Path: (String|Mapping)? + Bucket: String|Mapping + Packaging: (String|Mapping)? + EncryptionKey: (String|Mapping)? + BucketOwner: (String|Mapping)? } /// Resource Type definition for AWS::CodeBuild::ReportGroup @@ -34,26 +34,26 @@ open class ReportGroup extends cloudformation.Resource { /// - hidden Name: (String|Mapping)? + hidden DeleteReports: (Boolean|Mapping)? /// - hidden TypeProperty: String|Mapping + hidden Tags: (Listing)? /// - hidden ExportConfig: ReportExportConfig + hidden Name: (String|Mapping)? /// - hidden DeleteReports: (Boolean|Mapping)? + hidden TypeProperty: String|Mapping /// - hidden Tags: (Listing)? + hidden ExportConfig: ReportGroupReportExportConfig Properties { + ["DeleteReports"] = if (DeleteReports == null) null else DeleteReports + ["Tags"] = if (Tags == null) null else Tags ["Name"] = if (Name == null) null else Name ["Type"] = if (TypeProperty == null) null else TypeProperty ["ExportConfig"] = if (ExportConfig == null) null else ExportConfig - ["DeleteReports"] = if (DeleteReports == null) null else DeleteReports - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/codebuild/sourcecredential.pkl b/pkl/aws/codebuild/sourcecredential.pkl index 61d61a20..fd3b04eb 100644 --- a/pkl/aws/codebuild/sourcecredential.pkl +++ b/pkl/aws/codebuild/sourcecredential.pkl @@ -11,9 +11,6 @@ open class SourceCredential extends cloudformation.Resource { Type = "AWS::CodeBuild::SourceCredential" - /// - hidden Username: (String|Mapping)? - /// hidden ServerType: String|Mapping @@ -23,11 +20,14 @@ open class SourceCredential extends cloudformation.Resource { /// hidden AuthType: String|Mapping + /// + hidden Username: (String|Mapping)? + Properties { - ["Username"] = if (Username == null) null else Username ["ServerType"] = if (ServerType == null) null else ServerType ["Token"] = if (Token == null) null else Token ["AuthType"] = if (AuthType == null) null else AuthType + ["Username"] = if (Username == null) null else Username } } diff --git a/pkl/aws/codecommit/repository.pkl b/pkl/aws/codecommit/repository.pkl index 025f7688..7a535868 100644 --- a/pkl/aws/codecommit/repository.pkl +++ b/pkl/aws/codecommit/repository.pkl @@ -6,31 +6,31 @@ module aws.codecommit.repository import "../../cloudformation.pkl" /// -open class RepositoryTrigger { - Name: String|Mapping - CustomData: (String|Mapping)? - Events: Listing - Branches: (Listing)? - DestinationArn: String|Mapping +open class RepositoryS3 { + ObjectVersion: (String|Mapping)? + Bucket: String|Mapping + Key: String|Mapping } /// -open class Code { - BranchName: (String|Mapping)? - S3: S3 +open class RepositoryTag { + Key: String|Mapping + Value: String|Mapping } /// -open class S3 { - ObjectVersion: (String|Mapping)? - Bucket: String|Mapping - Key: String|Mapping +open class RepositoryRepositoryTrigger { + CustomData: (String|Mapping)? + Events: Listing + Branches: (Listing)? + DestinationArn: String|Mapping + Name: String|Mapping } /// -open class Tag { - Key: String|Mapping - Value: String|Mapping +open class RepositoryCode { + S3: RepositoryS3 + BranchName: (String|Mapping)? } /// Resource Type definition for AWS::CodeCommit::Repository @@ -43,27 +43,27 @@ open class Repository extends cloudformation.Resource { hidden RepositoryDescription: (String|Mapping)? /// - hidden Code: (Code)? + hidden KmsKeyId: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden RepositoryName: String|Mapping /// - hidden KmsKeyId: (String|Mapping)? + hidden Code: (RepositoryCode)? /// - hidden RepositoryName: String|Mapping + hidden Triggers: (Listing)? /// - hidden Triggers: (Listing)? + hidden Tags: (Listing)? Properties { ["RepositoryDescription"] = if (RepositoryDescription == null) null else RepositoryDescription - ["Code"] = if (Code == null) null else Code - ["Tags"] = if (Tags == null) null else Tags ["KmsKeyId"] = if (KmsKeyId == null) null else KmsKeyId ["RepositoryName"] = if (RepositoryName == null) null else RepositoryName + ["Code"] = if (Code == null) null else Code ["Triggers"] = if (Triggers == null) null else Triggers + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/codedeploy/application.pkl b/pkl/aws/codedeploy/application.pkl index 00a6fca9..60b704e0 100644 --- a/pkl/aws/codedeploy/application.pkl +++ b/pkl/aws/codedeploy/application.pkl @@ -6,9 +6,9 @@ module aws.codedeploy.application import "../../cloudformation.pkl" /// -open class Tag { - Value: String|Mapping +open class ApplicationTag { Key: String|Mapping + Value: String|Mapping } /// The AWS::CodeDeploy::Application resource creates an AWS CodeDeploy application @@ -24,7 +24,7 @@ open class Application extends cloudformation.Resource { hidden ComputePlatform: (String|Mapping)? /// The metadata that you apply to CodeDeploy applications to help you organize and categorize them. Each tag consists of a key and an optional value, both of which you define. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["ApplicationName"] = if (ApplicationName == null) null else ApplicationName diff --git a/pkl/aws/codedeploy/deploymentconfig.pkl b/pkl/aws/codedeploy/deploymentconfig.pkl index 19e42cde..9278ec05 100644 --- a/pkl/aws/codedeploy/deploymentconfig.pkl +++ b/pkl/aws/codedeploy/deploymentconfig.pkl @@ -6,43 +6,43 @@ module aws.codedeploy.deploymentconfig import "../../cloudformation.pkl" /// -open class MinimumHealthyHostsPerZone { +open class DeploymentConfigTrafficRoutingConfig { + Type: String|Mapping + TimeBasedLinear: (DeploymentConfigTimeBasedLinear)? + TimeBasedCanary: (DeploymentConfigTimeBasedCanary)? +} + +/// +open class DeploymentConfigMinimumHealthyHostsPerZone { Value: Int|Mapping Type: String|Mapping } /// -open class ZonalConfig { +open class DeploymentConfigZonalConfig { MonitorDurationInSeconds: (Int|Mapping)? - MinimumHealthyHostsPerZone: (MinimumHealthyHostsPerZone)? + MinimumHealthyHostsPerZone: (DeploymentConfigMinimumHealthyHostsPerZone)? FirstZoneMonitorDurationInSeconds: (Int|Mapping)? } /// -open class MinimumHealthyHosts { +open class DeploymentConfigMinimumHealthyHosts { Value: Int|Mapping Type: String|Mapping } /// -open class TimeBasedLinear { +open class DeploymentConfigTimeBasedLinear { LinearInterval: Int|Mapping LinearPercentage: Int|Mapping } /// -open class TimeBasedCanary { +open class DeploymentConfigTimeBasedCanary { CanaryPercentage: Int|Mapping CanaryInterval: Int|Mapping } -/// -open class TrafficRoutingConfig { - TimeBasedLinear: (TimeBasedLinear)? - TimeBasedCanary: (TimeBasedCanary)? - Type: String|Mapping -} - /// Resource Type definition for AWS::CodeDeploy::DeploymentConfig open class DeploymentConfig extends cloudformation.Resource { @@ -56,13 +56,13 @@ open class DeploymentConfig extends cloudformation.Resource { hidden DeploymentConfigName: (String|Mapping)? /// The minimum number of healthy instances that should be available at any time during the deployment. There are two parameters expected in the input: type and value. - hidden MinimumHealthyHosts: (MinimumHealthyHosts)? + hidden MinimumHealthyHosts: (DeploymentConfigMinimumHealthyHosts)? /// The zonal deployment config that specifies how the zonal deployment behaves - hidden ZonalConfig: (ZonalConfig)? + hidden ZonalConfig: (DeploymentConfigZonalConfig)? /// The configuration that specifies how the deployment traffic is routed. - hidden TrafficRoutingConfig: (TrafficRoutingConfig)? + hidden TrafficRoutingConfig: (DeploymentConfigTrafficRoutingConfig)? Properties { ["ComputePlatform"] = if (ComputePlatform == null) null else ComputePlatform diff --git a/pkl/aws/codedeploy/deploymentgroup.pkl b/pkl/aws/codedeploy/deploymentgroup.pkl index decfaf88..5ec9cf80 100644 --- a/pkl/aws/codedeploy/deploymentgroup.pkl +++ b/pkl/aws/codedeploy/deploymentgroup.pkl @@ -6,162 +6,162 @@ module aws.codedeploy.deploymentgroup import "../../cloudformation.pkl" /// -open class TargetGroupPairInfo { - ProdTrafficRoute: (TrafficRoute)? - TestTrafficRoute: (TrafficRoute)? - TargetGroups: (Listing)? +open class DeploymentGroupAlarm { + Name: (String|Mapping)? } /// -open class Alarm { - Name: (String|Mapping)? +open class DeploymentGroupTargetGroupPairInfo { + TargetGroups: (Listing)? + ProdTrafficRoute: (DeploymentGroupTrafficRoute)? + TestTrafficRoute: (DeploymentGroupTrafficRoute)? } /// -open class BlueInstanceTerminationOption { - TerminationWaitTimeInMinutes: (Int|Mapping)? - Action: (String|Mapping)? +open class DeploymentGroupTagFilter { + Value: (String|Mapping)? + Type: (String|Mapping)? + Key: (String|Mapping)? } /// -open class RevisionLocation { - S3Location: (S3Location)? - GitHubLocation: (GitHubLocation)? - RevisionType: (String|Mapping)? +open class DeploymentGroupOnPremisesTagSetListObject { + OnPremisesTagGroup: (Listing)? } /// -open class GreenFleetProvisioningOption { - Action: (String|Mapping)? +open class DeploymentGroupECSService { + ServiceName: String|Mapping + ClusterName: String|Mapping } /// -open class EC2TagSet { - Ec2TagSetList: (Listing)? +open class DeploymentGroupDeploymentReadyOption { + WaitTimeInMinutes: (Int|Mapping)? + ActionOnTimeout: (String|Mapping)? } /// -open class ECSService { - ClusterName: String|Mapping - ServiceName: String|Mapping +open class DeploymentGroupAlarmConfiguration { + Alarms: (Listing)? + IgnorePollAlarmFailure: (Boolean|Mapping)? + Enabled: (Boolean|Mapping)? } /// -open class Tag { - Value: String|Mapping - Key: String|Mapping +open class DeploymentGroupDeploymentStyle { + DeploymentOption: (String|Mapping)? + DeploymentType: (String|Mapping)? } /// -open class TriggerConfig { - TriggerTargetArn: (String|Mapping)? - TriggerName: (String|Mapping)? - TriggerEvents: (Listing)? +open class DeploymentGroupEC2TagSetListObject { + Ec2TagGroup: (Listing)? } /// -open class S3Location { - Version: (String|Mapping)? - Key: String|Mapping - BundleType: (String|Mapping)? - Bucket: String|Mapping - ETag: (String|Mapping)? +open class DeploymentGroupEC2TagFilter { + Value: (String|Mapping)? + Type: (String|Mapping)? + Key: (String|Mapping)? } /// -open class AutoRollbackConfiguration { - Events: (Listing)? - Enabled: (Boolean|Mapping)? +open class DeploymentGroupOnPremisesTagSet { + OnPremisesTagSetList: (Listing)? } /// -open class GitHubLocation { - Repository: String|Mapping - CommitId: String|Mapping +open class DeploymentGroupELBInfo { + Name: (String|Mapping)? } /// -open class EC2TagFilter { - Value: (String|Mapping)? - Type: (String|Mapping)? - Key: (String|Mapping)? +open class DeploymentGroupRevisionLocation { + S3Location: (DeploymentGroupS3Location)? + GitHubLocation: (DeploymentGroupGitHubLocation)? + RevisionType: (String|Mapping)? } /// -open class TargetGroupInfo { - Name: (String|Mapping)? +open class DeploymentGroupEC2TagSet { + Ec2TagSetList: (Listing)? } /// -open class Deployment { - Description: (String|Mapping)? - Revision: RevisionLocation - IgnoreApplicationStopFailures: (Boolean|Mapping)? +open class DeploymentGroupGreenFleetProvisioningOption { + Action: (String|Mapping)? } /// -open class ELBInfo { - Name: (String|Mapping)? +open class DeploymentGroupTriggerConfig { + TriggerEvents: (Listing)? + TriggerTargetArn: (String|Mapping)? + TriggerName: (String|Mapping)? } /// -open class TrafficRoute { - ListenerArns: (Listing)? +open class DeploymentGroupS3Location { + BundleType: (String|Mapping)? + Bucket: String|Mapping + ETag: (String|Mapping)? + Version: (String|Mapping)? + Key: String|Mapping } /// -open class EC2TagSetListObject { - Ec2TagGroup: (Listing)? +open class DeploymentGroupTargetGroupInfo { + Name: (String|Mapping)? } /// -open class AlarmConfiguration { - Alarms: (Listing)? - IgnorePollAlarmFailure: (Boolean|Mapping)? - Enabled: (Boolean|Mapping)? +open class DeploymentGroupDeployment { + Description: (String|Mapping)? + Revision: DeploymentGroupRevisionLocation + IgnoreApplicationStopFailures: (Boolean|Mapping)? } /// -open class BlueGreenDeploymentConfiguration { - GreenFleetProvisioningOption: (GreenFleetProvisioningOption)? - DeploymentReadyOption: (DeploymentReadyOption)? - TerminateBlueInstancesOnDeploymentSuccess: (BlueInstanceTerminationOption)? +open class DeploymentGroupGitHubLocation { + Repository: String|Mapping + CommitId: String|Mapping } /// -open class DeploymentStyle { - DeploymentOption: (String|Mapping)? - DeploymentType: (String|Mapping)? +open class DeploymentGroupLoadBalancerInfo { + TargetGroupInfoList: (Listing)? + ElbInfoList: (Listing)? + TargetGroupPairInfoList: (Listing)? } /// -open class DeploymentReadyOption { - WaitTimeInMinutes: (Int|Mapping)? - ActionOnTimeout: (String|Mapping)? +open class DeploymentGroupAutoRollbackConfiguration { + Events: (Listing)? + Enabled: (Boolean|Mapping)? } /// -open class OnPremisesTagSetListObject { - OnPremisesTagGroup: (Listing)? +open class DeploymentGroupTag { + Value: String|Mapping + Key: String|Mapping } /// -open class OnPremisesTagSet { - OnPremisesTagSetList: (Listing)? +open class DeploymentGroupBlueGreenDeploymentConfiguration { + GreenFleetProvisioningOption: (DeploymentGroupGreenFleetProvisioningOption)? + DeploymentReadyOption: (DeploymentGroupDeploymentReadyOption)? + TerminateBlueInstancesOnDeploymentSuccess: (DeploymentGroupBlueInstanceTerminationOption)? } /// -open class TagFilter { - Value: (String|Mapping)? - Type: (String|Mapping)? - Key: (String|Mapping)? +open class DeploymentGroupTrafficRoute { + ListenerArns: (Listing)? } /// -open class LoadBalancerInfo { - ElbInfoList: (Listing)? - TargetGroupPairInfoList: (Listing)? - TargetGroupInfoList: (Listing)? +open class DeploymentGroupBlueInstanceTerminationOption { + TerminationWaitTimeInMinutes: (Int|Mapping)? + Action: (String|Mapping)? } /// Resource Type definition for AWS::CodeDeploy::DeploymentGroup @@ -171,86 +171,86 @@ open class DeploymentGroup extends cloudformation.Resource { /// - hidden OutdatedInstancesStrategy: (String|Mapping)? + hidden OnPremisesInstanceTagFilters: (Listing)? /// - hidden TriggerConfigurations: (Listing)? + hidden TriggerConfigurations: (Listing)? /// - hidden Deployment: (Deployment)? + hidden Ec2TagFilters: (Listing)? /// - hidden AutoRollbackConfiguration: (AutoRollbackConfiguration)? + hidden TerminationHookEnabled: (Boolean|Mapping)? /// - hidden DeploymentConfigName: (String|Mapping)? + hidden AutoRollbackConfiguration: (DeploymentGroupAutoRollbackConfiguration)? /// - hidden AlarmConfiguration: (AlarmConfiguration)? + hidden DeploymentGroupName: (String|Mapping)? /// - hidden Ec2TagFilters: (Listing)? + hidden LoadBalancerInfo: (DeploymentGroupLoadBalancerInfo)? /// - hidden DeploymentGroupName: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden OnPremisesTagSet: (OnPremisesTagSet)? + hidden DeploymentStyle: (DeploymentGroupDeploymentStyle)? /// - hidden DeploymentStyle: (DeploymentStyle)? + hidden AutoScalingGroups: (Listing)? /// - hidden AutoScalingGroups: (Listing)? + hidden Ec2TagSet: (DeploymentGroupEC2TagSet)? /// - hidden Ec2TagSet: (EC2TagSet)? + hidden OutdatedInstancesStrategy: (String|Mapping)? /// - hidden ServiceRoleArn: String|Mapping + hidden AlarmConfiguration: (DeploymentGroupAlarmConfiguration)? /// - hidden TerminationHookEnabled: (Boolean|Mapping)? + hidden OnPremisesTagSet: (DeploymentGroupOnPremisesTagSet)? /// - hidden ECSServices: (Listing)? + hidden ApplicationName: String|Mapping /// - hidden LoadBalancerInfo: (LoadBalancerInfo)? + hidden BlueGreenDeploymentConfiguration: (DeploymentGroupBlueGreenDeploymentConfiguration)? /// - hidden OnPremisesInstanceTagFilters: (Listing)? + hidden Deployment: (DeploymentGroupDeployment)? /// - hidden ApplicationName: String|Mapping + hidden DeploymentConfigName: (String|Mapping)? /// - hidden BlueGreenDeploymentConfiguration: (BlueGreenDeploymentConfiguration)? + hidden ServiceRoleArn: String|Mapping /// - hidden Tags: (Listing)? + hidden ECSServices: (Listing)? Properties { - ["OutdatedInstancesStrategy"] = if (OutdatedInstancesStrategy == null) null else OutdatedInstancesStrategy + ["OnPremisesInstanceTagFilters"] = if (OnPremisesInstanceTagFilters == null) null else OnPremisesInstanceTagFilters ["TriggerConfigurations"] = if (TriggerConfigurations == null) null else TriggerConfigurations - ["Deployment"] = if (Deployment == null) null else Deployment - ["AutoRollbackConfiguration"] = if (AutoRollbackConfiguration == null) null else AutoRollbackConfiguration - ["DeploymentConfigName"] = if (DeploymentConfigName == null) null else DeploymentConfigName - ["AlarmConfiguration"] = if (AlarmConfiguration == null) null else AlarmConfiguration ["Ec2TagFilters"] = if (Ec2TagFilters == null) null else Ec2TagFilters + ["TerminationHookEnabled"] = if (TerminationHookEnabled == null) null else TerminationHookEnabled + ["AutoRollbackConfiguration"] = if (AutoRollbackConfiguration == null) null else AutoRollbackConfiguration ["DeploymentGroupName"] = if (DeploymentGroupName == null) null else DeploymentGroupName - ["OnPremisesTagSet"] = if (OnPremisesTagSet == null) null else OnPremisesTagSet + ["LoadBalancerInfo"] = if (LoadBalancerInfo == null) null else LoadBalancerInfo + ["Tags"] = if (Tags == null) null else Tags ["DeploymentStyle"] = if (DeploymentStyle == null) null else DeploymentStyle ["AutoScalingGroups"] = if (AutoScalingGroups == null) null else AutoScalingGroups ["Ec2TagSet"] = if (Ec2TagSet == null) null else Ec2TagSet - ["ServiceRoleArn"] = if (ServiceRoleArn == null) null else ServiceRoleArn - ["TerminationHookEnabled"] = if (TerminationHookEnabled == null) null else TerminationHookEnabled - ["ECSServices"] = if (ECSServices == null) null else ECSServices - ["LoadBalancerInfo"] = if (LoadBalancerInfo == null) null else LoadBalancerInfo - ["OnPremisesInstanceTagFilters"] = if (OnPremisesInstanceTagFilters == null) null else OnPremisesInstanceTagFilters + ["OutdatedInstancesStrategy"] = if (OutdatedInstancesStrategy == null) null else OutdatedInstancesStrategy + ["AlarmConfiguration"] = if (AlarmConfiguration == null) null else AlarmConfiguration + ["OnPremisesTagSet"] = if (OnPremisesTagSet == null) null else OnPremisesTagSet ["ApplicationName"] = if (ApplicationName == null) null else ApplicationName ["BlueGreenDeploymentConfiguration"] = if (BlueGreenDeploymentConfiguration == null) null else BlueGreenDeploymentConfiguration - ["Tags"] = if (Tags == null) null else Tags + ["Deployment"] = if (Deployment == null) null else Deployment + ["DeploymentConfigName"] = if (DeploymentConfigName == null) null else DeploymentConfigName + ["ServiceRoleArn"] = if (ServiceRoleArn == null) null else ServiceRoleArn + ["ECSServices"] = if (ECSServices == null) null else ECSServices } } diff --git a/pkl/aws/codeguruprofiler/profilinggroup.pkl b/pkl/aws/codeguruprofiler/profilinggroup.pkl index 9d33627b..ce6d2555 100644 --- a/pkl/aws/codeguruprofiler/profilinggroup.pkl +++ b/pkl/aws/codeguruprofiler/profilinggroup.pkl @@ -6,32 +6,28 @@ module aws.codeguruprofiler.profilinggroup import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { - Key: String|Mapping +open class ProfilingGroupTag { Value: String|Mapping + Key: String|Mapping } -/// Unique identifier for each Channel in the notification configuration of a Profiling Group -open class ChannelId { -} +typealias ProfilingGroupChannelId = String|Mapping + + +typealias ProfilingGroupChannelUri = String|Mapping -/// Unique arn of the resource to be used for notifications. We support a valid SNS topic arn as a channel uri. -open class ChannelUri { -} /// Notification medium for users to get alerted for events that occur in application profile. We support SNS topic as a notification channel. -open class Channel { - channelId: (ChannelId)? - channelUri: ChannelUri +open class ProfilingGroupChannel { + channelId: (ProfilingGroupChannelId)? + channelUri: ProfilingGroupChannelUri } -/// -open class ProfilingGroupArn { -} +typealias ProfilingGroupProfilingGroupArn = String|Mapping + + +typealias ProfilingGroupIamArn = String|Mapping -/// -open class IamArn { -} /// This resource schema represents the Profiling Group resource in the Amazon CodeGuru Profiler service. open class ProfilingGroup extends cloudformation.Resource { @@ -49,10 +45,10 @@ open class ProfilingGroup extends cloudformation.Resource { hidden AgentPermissions: (Dynamic)? /// Configuration for Notification Channels for Anomaly Detection feature in CodeGuru Profiler which enables customers to detect anomalies in the application profile for those methods that represent the highest proportion of CPU time or latency - hidden AnomalyDetectionNotificationConfiguration: (Listing)? + hidden AnomalyDetectionNotificationConfiguration: (Listing)? /// The tags associated with a profiling group. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["ProfilingGroupName"] = if (ProfilingGroupName == null) null else ProfilingGroupName diff --git a/pkl/aws/codegurureviewer/repositoryassociation.pkl b/pkl/aws/codegurureviewer/repositoryassociation.pkl index ec8dad5b..3bad76e7 100644 --- a/pkl/aws/codegurureviewer/repositoryassociation.pkl +++ b/pkl/aws/codegurureviewer/repositoryassociation.pkl @@ -6,9 +6,9 @@ module aws.codegurureviewer.repositoryassociation import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { - Value: String|Mapping +open class RepositoryAssociationTag { Key: String|Mapping + Value: String|Mapping } /// This resource schema represents the RepositoryAssociation resource in the Amazon CodeGuru Reviewer service. @@ -17,15 +17,6 @@ open class RepositoryAssociation extends cloudformation.Resource { Type = "AWS::CodeGuruReviewer::RepositoryAssociation" - /// The name of the S3 bucket associated with an associated S3 repository. It must start with `codeguru-reviewer-`. - hidden BucketName: (String(matches(Regex(#"^\S(.*\S)?$"#)))|Mapping)? - - /// The Amazon Resource Name (ARN) of an AWS CodeStar Connections connection. - hidden ConnectionArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:.+:.+:[0-9]{12}:.+"#)))|Mapping)? - - /// The tags associated with a repository association. - hidden Tags: (Listing)? - /// Name of the repository to be associated. hidden Name: String(matches(Regex(#"^\S[\w.-]*$"#)))|Mapping @@ -35,13 +26,22 @@ open class RepositoryAssociation extends cloudformation.Resource { /// The owner of the repository. For a Bitbucket repository, this is the username for the account that owns the repository. hidden Owner: (String(matches(Regex(#"^\S(.*\S)?$"#)))|Mapping)? + /// The name of the S3 bucket associated with an associated S3 repository. It must start with `codeguru-reviewer-`. + hidden BucketName: (String(matches(Regex(#"^\S(.*\S)?$"#)))|Mapping)? + + /// The Amazon Resource Name (ARN) of an AWS CodeStar Connections connection. + hidden ConnectionArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:.+:.+:[0-9]{12}:.+"#)))|Mapping)? + + /// The tags associated with a repository association. + hidden Tags: (Listing)? + Properties { - ["BucketName"] = if (BucketName == null) null else BucketName - ["ConnectionArn"] = if (ConnectionArn == null) null else ConnectionArn - ["Tags"] = if (Tags == null) null else Tags ["Name"] = if (Name == null) null else Name ["Type"] = if (TypeProperty == null) null else TypeProperty ["Owner"] = if (Owner == null) null else Owner + ["BucketName"] = if (BucketName == null) null else BucketName + ["ConnectionArn"] = if (ConnectionArn == null) null else ConnectionArn + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/codepipeline/customactiontype.pkl b/pkl/aws/codepipeline/customactiontype.pkl index e6803466..6b848366 100644 --- a/pkl/aws/codepipeline/customactiontype.pkl +++ b/pkl/aws/codepipeline/customactiontype.pkl @@ -6,24 +6,24 @@ module aws.codepipeline.customactiontype import "../../cloudformation.pkl" /// The configuration properties for the custom action. -open class ConfigurationProperties { +open class CustomActionTypeConfigurationProperties { + Type: (String|Mapping)? Description: (String|Mapping)? Key: Boolean|Mapping Name: String|Mapping Queryable: (Boolean|Mapping)? Required: Boolean|Mapping Secret: Boolean|Mapping - Type: (String|Mapping)? } /// Returns information about the details of an artifact. -open class ArtifactDetails { +open class CustomActionTypeArtifactDetails { MaximumCount: Int|Mapping MinimumCount: Int|Mapping } /// Settings is a property of the AWS::CodePipeline::CustomActionType resource that provides URLs that users can access to view information about the CodePipeline custom action. -open class Settings { +open class CustomActionTypeSettings { EntityUrlTemplate: (String|Mapping)? ExecutionUrlTemplate: (String|Mapping)? RevisionUrlTemplate: (String|Mapping)? @@ -31,7 +31,7 @@ open class Settings { } /// -open class Tag { +open class CustomActionTypeTag { Value: String|Mapping Key: String|Mapping } @@ -42,39 +42,39 @@ open class CustomActionType extends cloudformation.Resource { Type = "AWS::CodePipeline::CustomActionType" + /// The category of the custom action, such as a build action or a test action. + hidden Category: String|Mapping + /// URLs that provide users information about this custom action. - hidden Settings: (Settings)? + hidden Settings: (CustomActionTypeSettings)? /// Any tags assigned to the custom action. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// The version identifier of the custom action. hidden Version: String|Mapping - /// The provider of the service used in the custom action, such as AWS CodeDeploy. - hidden Provider: String|Mapping - - /// The category of the custom action, such as a build action or a test action. - hidden Category: String|Mapping - /// The configuration properties for the custom action. - hidden ConfigurationProperties: (Listing)? + hidden ConfigurationProperties: (Listing)? /// The details of the input artifact for the action, such as its commit ID. - hidden InputArtifactDetails: ArtifactDetails + hidden InputArtifactDetails: CustomActionTypeArtifactDetails /// The details of the output artifact of the action, such as its commit ID. - hidden OutputArtifactDetails: ArtifactDetails + hidden OutputArtifactDetails: CustomActionTypeArtifactDetails + + /// The provider of the service used in the custom action, such as AWS CodeDeploy. + hidden Provider: String|Mapping Properties { + ["Category"] = if (Category == null) null else Category ["Settings"] = if (Settings == null) null else Settings ["Tags"] = if (Tags == null) null else Tags ["Version"] = if (Version == null) null else Version - ["Provider"] = if (Provider == null) null else Provider - ["Category"] = if (Category == null) null else Category ["ConfigurationProperties"] = if (ConfigurationProperties == null) null else ConfigurationProperties ["InputArtifactDetails"] = if (InputArtifactDetails == null) null else InputArtifactDetails ["OutputArtifactDetails"] = if (OutputArtifactDetails == null) null else OutputArtifactDetails + ["Provider"] = if (Provider == null) null else Provider } } diff --git a/pkl/aws/codepipeline/pipeline.pkl b/pkl/aws/codepipeline/pipeline.pkl index 851092d6..04f804c7 100644 --- a/pkl/aws/codepipeline/pipeline.pkl +++ b/pkl/aws/codepipeline/pipeline.pkl @@ -6,131 +6,131 @@ module aws.codepipeline.pipeline import "../../cloudformation.pkl" /// -open class GitConfiguration { - PullRequest: (Listing)? - Push: (Listing)? - SourceActionName: String|Mapping +open class PipelineVariableDeclaration { + DefaultValue: (String|Mapping)? + Description: (String|Mapping)? + Name: String|Mapping } /// -open class ActionTypeId { - Version: String|Mapping - Provider: String|Mapping - Owner: String|Mapping - Category: String|Mapping +open class PipelineOutputArtifact { + Name: String|Mapping } /// -open class GitPullRequestFilter { - FilePaths: (GitFilePathFilterCriteria)? - Events: (Listing)? - Branches: (GitBranchFilterCriteria)? +open class PipelineGitPushFilter { + FilePaths: (PipelineGitFilePathFilterCriteria)? + Branches: (PipelineGitBranchFilterCriteria)? + Tags: (PipelineGitTagFilterCriteria)? } /// -open class ActionDeclaration { - InputArtifacts: (Listing)? - Region: (String|Mapping)? - Namespace: (String|Mapping)? - TimeoutInMinutes: (Int|Mapping)? - ActionTypeId: ActionTypeId - Configuration: (Dynamic)? - RunOrder: (Int|Mapping)? - Name: String|Mapping - OutputArtifacts: (Listing)? - RoleArn: (String|Mapping)? +open class PipelinePipelineTriggerDeclaration { + GitConfiguration: (PipelineGitConfiguration)? + ProviderType: String|Mapping } /// -open class GitFilePathFilterCriteria { - Includes: (Listing)? - Excludes: (Listing)? +open class PipelineGitPullRequestFilter { + FilePaths: (PipelineGitFilePathFilterCriteria)? + Events: (Listing)? + Branches: (PipelineGitBranchFilterCriteria)? } /// -open class GitBranchFilterCriteria { - Includes: (Listing)? +open class PipelineArtifactStoreMap { + ArtifactStore: PipelineArtifactStore + Region: String|Mapping +} + +/// +open class PipelineGitTagFilterCriteria { Excludes: (Listing)? + Includes: (Listing)? } /// -open class PipelineTriggerDeclaration { - ProviderType: String|Mapping - GitConfiguration: (GitConfiguration)? +open class PipelineActionDeclaration { + Configuration: (Dynamic)? + OutputArtifacts: (Listing)? + Namespace: (String|Mapping)? + RoleArn: (String|Mapping)? + RunOrder: (Int|Mapping)? + ActionTypeId: PipelineActionTypeId + InputArtifacts: (Listing)? + Region: (String|Mapping)? + Name: String|Mapping + TimeoutInMinutes: (Int|Mapping)? } /// -open class EncryptionKey { - Type: String|Mapping - Id: String|Mapping +open class PipelineStageDeclaration { + Blockers: (Listing)? + Actions: Listing + Name: String|Mapping } /// -open class ArtifactStore { +open class PipelineArtifactStore { Type: String|Mapping - EncryptionKey: (EncryptionKey)? + EncryptionKey: (PipelineEncryptionKey)? Location: String|Mapping } /// -open class StageTransition { - StageName: String|Mapping - Reason: String|Mapping +open class PipelineGitFilePathFilterCriteria { + Includes: (Listing)? + Excludes: (Listing)? } /// -open class BlockerDeclaration { +open class PipelineEncryptionKey { Type: String|Mapping - Name: String|Mapping + Id: String|Mapping } /// -open class StageDeclaration { +open class PipelineInputArtifact { Name: String|Mapping - Blockers: (Listing)? - Actions: Listing } /// -open class InputArtifact { - Name: String|Mapping +open class PipelineStageTransition { + StageName: String|Mapping + Reason: String|Mapping } /// -open class VariableDeclaration { - DefaultValue: (String|Mapping)? - Description: (String|Mapping)? - Name: String|Mapping +open class PipelineGitConfiguration { + Push: (Listing)? + SourceActionName: String|Mapping + PullRequest: (Listing)? } /// -open class Tag { +open class PipelineTag { Value: String|Mapping Key: String|Mapping } /// -open class ArtifactStoreMap { - ArtifactStore: ArtifactStore - Region: String|Mapping -} - -/// -open class GitPushFilter { - FilePaths: (GitFilePathFilterCriteria)? - Branches: (GitBranchFilterCriteria)? - Tags: (GitTagFilterCriteria)? +open class PipelineBlockerDeclaration { + Name: String|Mapping + Type: String|Mapping } /// -open class GitTagFilterCriteria { +open class PipelineGitBranchFilterCriteria { Includes: (Listing)? Excludes: (Listing)? } /// -open class OutputArtifact { - Name: String|Mapping +open class PipelineActionTypeId { + Owner: String|Mapping + Category: String|Mapping + Version: String|Mapping + Provider: String|Mapping } /// Resource Type definition for AWS::CodePipeline::Pipeline @@ -140,53 +140,53 @@ open class Pipeline extends cloudformation.Resource { /// - hidden Stages: Listing + hidden Variables: (Listing)? /// - hidden ExecutionMode: (String|Mapping)? + hidden Tags: (Listing)? /// - hidden Tags: (Listing)? + hidden ArtifactStores: (Listing)? /// - hidden DisableInboundStageTransitions: (Listing)? + hidden Stages: Listing /// - hidden RoleArn: String|Mapping + hidden ExecutionMode: (String|Mapping)? /// - hidden ArtifactStores: (Listing)? + hidden RestartExecutionOnUpdate: (Boolean|Mapping)? /// hidden Name: (String|Mapping)? /// - hidden Variables: (Listing)? + hidden ArtifactStore: (PipelineArtifactStore)? /// - hidden ArtifactStore: (ArtifactStore)? + hidden DisableInboundStageTransitions: (Listing)? /// - hidden RestartExecutionOnUpdate: (Boolean|Mapping)? + hidden Triggers: (Listing)? /// - hidden Triggers: (Listing)? + hidden RoleArn: String|Mapping /// hidden PipelineType: (String|Mapping)? Properties { - ["Stages"] = if (Stages == null) null else Stages - ["ExecutionMode"] = if (ExecutionMode == null) null else ExecutionMode + ["Variables"] = if (Variables == null) null else Variables ["Tags"] = if (Tags == null) null else Tags - ["DisableInboundStageTransitions"] = if (DisableInboundStageTransitions == null) null else DisableInboundStageTransitions - ["RoleArn"] = if (RoleArn == null) null else RoleArn ["ArtifactStores"] = if (ArtifactStores == null) null else ArtifactStores + ["Stages"] = if (Stages == null) null else Stages + ["ExecutionMode"] = if (ExecutionMode == null) null else ExecutionMode + ["RestartExecutionOnUpdate"] = if (RestartExecutionOnUpdate == null) null else RestartExecutionOnUpdate ["Name"] = if (Name == null) null else Name - ["Variables"] = if (Variables == null) null else Variables ["ArtifactStore"] = if (ArtifactStore == null) null else ArtifactStore - ["RestartExecutionOnUpdate"] = if (RestartExecutionOnUpdate == null) null else RestartExecutionOnUpdate + ["DisableInboundStageTransitions"] = if (DisableInboundStageTransitions == null) null else DisableInboundStageTransitions ["Triggers"] = if (Triggers == null) null else Triggers + ["RoleArn"] = if (RoleArn == null) null else RoleArn ["PipelineType"] = if (PipelineType == null) null else PipelineType } diff --git a/pkl/aws/codepipeline/webhook.pkl b/pkl/aws/codepipeline/webhook.pkl index 89d8194c..c779cc58 100644 --- a/pkl/aws/codepipeline/webhook.pkl +++ b/pkl/aws/codepipeline/webhook.pkl @@ -6,15 +6,15 @@ module aws.codepipeline.webhook import "../../cloudformation.pkl" /// -open class WebhookFilterRule { - JsonPath: String|Mapping - MatchEquals: (String|Mapping)? +open class WebhookWebhookAuthConfiguration { + AllowedIPRange: (String|Mapping)? + SecretToken: (String|Mapping)? } /// -open class WebhookAuthConfiguration { - AllowedIPRange: (String|Mapping)? - SecretToken: (String|Mapping)? +open class WebhookWebhookFilterRule { + MatchEquals: (String|Mapping)? + JsonPath: String|Mapping } /// Resource Type definition for AWS::CodePipeline::Webhook @@ -24,38 +24,38 @@ open class Webhook extends cloudformation.Resource { /// - hidden TargetPipeline: String|Mapping + hidden TargetPipelineVersion: Int|Mapping /// - hidden Name: (String|Mapping)? + hidden RegisterWithThirdParty: (Boolean|Mapping)? /// - hidden AuthenticationConfiguration: WebhookAuthConfiguration + hidden AuthenticationConfiguration: WebhookWebhookAuthConfiguration /// - hidden Filters: Listing + hidden TargetPipeline: String|Mapping /// - hidden Authentication: String|Mapping + hidden TargetAction: String|Mapping /// - hidden TargetAction: String|Mapping + hidden Filters: Listing /// - hidden TargetPipelineVersion: Int|Mapping + hidden Authentication: String|Mapping /// - hidden RegisterWithThirdParty: (Boolean|Mapping)? + hidden Name: (String|Mapping)? Properties { - ["TargetPipeline"] = if (TargetPipeline == null) null else TargetPipeline - ["Name"] = if (Name == null) null else Name + ["TargetPipelineVersion"] = if (TargetPipelineVersion == null) null else TargetPipelineVersion + ["RegisterWithThirdParty"] = if (RegisterWithThirdParty == null) null else RegisterWithThirdParty ["AuthenticationConfiguration"] = if (AuthenticationConfiguration == null) null else AuthenticationConfiguration + ["TargetPipeline"] = if (TargetPipeline == null) null else TargetPipeline + ["TargetAction"] = if (TargetAction == null) null else TargetAction ["Filters"] = if (Filters == null) null else Filters ["Authentication"] = if (Authentication == null) null else Authentication - ["TargetAction"] = if (TargetAction == null) null else TargetAction - ["TargetPipelineVersion"] = if (TargetPipelineVersion == null) null else TargetPipelineVersion - ["RegisterWithThirdParty"] = if (RegisterWithThirdParty == null) null else RegisterWithThirdParty + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/codestar/githubrepository.pkl b/pkl/aws/codestar/githubrepository.pkl index 012b578d..deea923b 100644 --- a/pkl/aws/codestar/githubrepository.pkl +++ b/pkl/aws/codestar/githubrepository.pkl @@ -6,15 +6,15 @@ module aws.codestar.githubrepository import "../../cloudformation.pkl" /// -open class S3 { - ObjectVersion: (String|Mapping)? - Bucket: String|Mapping - Key: String|Mapping +open class GitHubRepositoryCode { + S3: GitHubRepositoryS3 } /// -open class Code { - S3: S3 +open class GitHubRepositoryS3 { + ObjectVersion: (String|Mapping)? + Bucket: String|Mapping + Key: String|Mapping } /// Resource Type definition for AWS::CodeStar::GitHubRepository @@ -24,38 +24,38 @@ open class GitHubRepository extends cloudformation.Resource { /// - hidden RepositoryName: String|Mapping + hidden ConnectionArn: (String|Mapping)? /// - hidden RepositoryOwner: String|Mapping + hidden RepositoryAccessToken: (String|Mapping)? /// - hidden Code: (Code)? + hidden RepositoryOwner: String|Mapping /// - hidden ConnectionArn: (String|Mapping)? + hidden RepositoryDescription: (String|Mapping)? /// - hidden RepositoryAccessToken: (String|Mapping)? + hidden EnableIssues: (Boolean|Mapping)? /// - hidden IsPrivate: (Boolean|Mapping)? + hidden RepositoryName: String|Mapping /// - hidden RepositoryDescription: (String|Mapping)? + hidden IsPrivate: (Boolean|Mapping)? /// - hidden EnableIssues: (Boolean|Mapping)? + hidden Code: (GitHubRepositoryCode)? Properties { - ["RepositoryName"] = if (RepositoryName == null) null else RepositoryName - ["RepositoryOwner"] = if (RepositoryOwner == null) null else RepositoryOwner - ["Code"] = if (Code == null) null else Code ["ConnectionArn"] = if (ConnectionArn == null) null else ConnectionArn ["RepositoryAccessToken"] = if (RepositoryAccessToken == null) null else RepositoryAccessToken - ["IsPrivate"] = if (IsPrivate == null) null else IsPrivate + ["RepositoryOwner"] = if (RepositoryOwner == null) null else RepositoryOwner ["RepositoryDescription"] = if (RepositoryDescription == null) null else RepositoryDescription ["EnableIssues"] = if (EnableIssues == null) null else EnableIssues + ["RepositoryName"] = if (RepositoryName == null) null else RepositoryName + ["IsPrivate"] = if (IsPrivate == null) null else IsPrivate + ["Code"] = if (Code == null) null else Code } } diff --git a/pkl/aws/codestarconnections/connection.pkl b/pkl/aws/codestarconnections/connection.pkl index ef1218f7..9e3519c9 100644 --- a/pkl/aws/codestarconnections/connection.pkl +++ b/pkl/aws/codestarconnections/connection.pkl @@ -6,9 +6,9 @@ module aws.codestarconnections.connection import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { - Value: String|Mapping +open class ConnectionTag { Key: String|Mapping + Value: String|Mapping } /// Schema for AWS::CodeStarConnections::Connection resource which can be used to connect external source providers with AWS CodePipeline @@ -17,23 +17,23 @@ open class Connection extends cloudformation.Resource { Type = "AWS::CodeStarConnections::Connection" - /// The host arn configured to represent the infrastructure where your third-party provider is installed. You must specify either a ProviderType or a HostArn. - hidden HostArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:.+:.+:[0-9]{12}:.+"#)))|Mapping)? - - /// Specifies the tags applied to a connection. - hidden Tags: (Listing)? - /// The name of the connection. Connection names must be unique in an AWS user account. hidden ConnectionName: String|Mapping /// The name of the external provider where your third-party code repository is configured. You must specify either a ProviderType or a HostArn. hidden ProviderType: (String|Mapping)? + /// The host arn configured to represent the infrastructure where your third-party provider is installed. You must specify either a ProviderType or a HostArn. + hidden HostArn: (String(matches(Regex(#"arn:aws(-[\w]+)*:.+:.+:[0-9]{12}:.+"#)))|Mapping)? + + /// Specifies the tags applied to a connection. + hidden Tags: (Listing)? + Properties { - ["HostArn"] = if (HostArn == null) null else HostArn - ["Tags"] = if (Tags == null) null else Tags ["ConnectionName"] = if (ConnectionName == null) null else ConnectionName ["ProviderType"] = if (ProviderType == null) null else ProviderType + ["HostArn"] = if (HostArn == null) null else HostArn + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/codestarnotifications/notificationrule.pkl b/pkl/aws/codestarnotifications/notificationrule.pkl index c42b6b21..1178a43f 100644 --- a/pkl/aws/codestarnotifications/notificationrule.pkl +++ b/pkl/aws/codestarnotifications/notificationrule.pkl @@ -6,7 +6,7 @@ module aws.codestarnotifications.notificationrule import "../../cloudformation.pkl" /// -open class Target { +open class NotificationRuleTarget { TargetType: String|Mapping TargetAddress: String|Mapping } @@ -18,7 +18,7 @@ open class NotificationRule extends cloudformation.Resource { /// - hidden CreatedBy: (String|Mapping)? + hidden EventTypeIds: Listing /// hidden Status: (NotificationRuleStatus|Mapping)? @@ -27,37 +27,37 @@ open class NotificationRule extends cloudformation.Resource { hidden DetailType: NotificationRuleDetailType|Mapping /// - hidden Targets: Listing + hidden Targets: Listing /// - hidden EventTypeId: (String|Mapping)? + hidden Tags: (NotificationRuleNotificationRuleTags)? /// - hidden TargetAddress: (String|Mapping)? + hidden Name: String(matches(Regex(#"[A-Za-z0-9\-_ ]+$"#)))|Mapping /// - hidden EventTypeIds: Listing + hidden EventTypeId: (String|Mapping)? /// - hidden Resource: String(matches(Regex(#"^arn:aws[^:\s]*:[^:\s]*:[^:\s]*:[0-9]{12}:[^\s]+$"#)))|Mapping + hidden CreatedBy: (String|Mapping)? /// - hidden Tags: (Dynamic)? + hidden TargetAddress: (String|Mapping)? /// - hidden Name: String(matches(Regex(#"[A-Za-z0-9\-_ ]+$"#)))|Mapping + hidden Resource: String(matches(Regex(#"^arn:aws[^:\s]*:[^:\s]*:[^:\s]*:[0-9]{12}:[^\s]+$"#)))|Mapping Properties { - ["CreatedBy"] = if (CreatedBy == null) null else CreatedBy + ["EventTypeIds"] = if (EventTypeIds == null) null else EventTypeIds ["Status"] = if (Status == null) null else Status ["DetailType"] = if (DetailType == null) null else DetailType ["Targets"] = if (Targets == null) null else Targets + ["Tags"] = if (Tags == null) null else Tags + ["Name"] = if (Name == null) null else Name ["EventTypeId"] = if (EventTypeId == null) null else EventTypeId + ["CreatedBy"] = if (CreatedBy == null) null else CreatedBy ["TargetAddress"] = if (TargetAddress == null) null else TargetAddress - ["EventTypeIds"] = if (EventTypeIds == null) null else EventTypeIds ["Resource"] = if (Resource == null) null else Resource - ["Tags"] = if (Tags == null) null else Tags - ["Name"] = if (Name == null) null else Name } } @@ -66,3 +66,5 @@ open class NotificationRule extends cloudformation.Resource { typealias NotificationRuleStatus = "ENABLED"|"DISABLED" typealias NotificationRuleDetailType = "BASIC"|"FULL" + +typealias NotificationRuleNotificationRuleTags = Mapping diff --git a/pkl/aws/cognito/identitypool.pkl b/pkl/aws/cognito/identitypool.pkl index 17144094..5aab6ba9 100644 --- a/pkl/aws/cognito/identitypool.pkl +++ b/pkl/aws/cognito/identitypool.pkl @@ -6,25 +6,25 @@ module aws.cognito.identitypool import "../../cloudformation.pkl" /// -open class CognitoStreams { - StreamingStatus: (String|Mapping)? - StreamName: (String|Mapping)? - RoleArn: (String|Mapping)? -} - -/// -open class PushSync { +open class IdentityPoolPushSync { ApplicationArns: (Listing)? RoleArn: (String|Mapping)? } /// -open class CognitoIdentityProvider { +open class IdentityPoolCognitoIdentityProvider { ServerSideTokenCheck: (Boolean|Mapping)? ProviderName: String|Mapping ClientId: String|Mapping } +/// +open class IdentityPoolCognitoStreams { + StreamingStatus: (String|Mapping)? + StreamName: (String|Mapping)? + RoleArn: (String|Mapping)? +} + /// Resource Type definition for AWS::Cognito::IdentityPool open class IdentityPool extends cloudformation.Resource { @@ -32,50 +32,50 @@ open class IdentityPool extends cloudformation.Resource { /// - hidden CognitoEvents: (Dynamic)? + hidden AllowUnauthenticatedIdentities: Boolean|Mapping /// - hidden IdentityPoolName: (String|Mapping)? + hidden SupportedLoginProviders: (Dynamic)? /// - hidden OpenIdConnectProviderARNs: (Listing)? + hidden CognitoStreams: (IdentityPoolCognitoStreams)? /// - hidden CognitoIdentityProviders: (Listing)? + hidden SamlProviderARNs: (Listing)? /// hidden DeveloperProviderName: (String|Mapping)? /// - hidden PushSync: (PushSync)? + hidden CognitoEvents: (Dynamic)? /// - hidden AllowUnauthenticatedIdentities: Boolean|Mapping + hidden IdentityPoolName: (String|Mapping)? /// - hidden SamlProviderARNs: (Listing)? + hidden CognitoIdentityProviders: (Listing)? /// - hidden SupportedLoginProviders: (Dynamic)? + hidden OpenIdConnectProviderARNs: (Listing)? /// hidden AllowClassicFlow: (Boolean|Mapping)? /// - hidden CognitoStreams: (CognitoStreams)? + hidden PushSync: (IdentityPoolPushSync)? Properties { + ["AllowUnauthenticatedIdentities"] = if (AllowUnauthenticatedIdentities == null) null else AllowUnauthenticatedIdentities + ["SupportedLoginProviders"] = if (SupportedLoginProviders == null) null else SupportedLoginProviders + ["CognitoStreams"] = if (CognitoStreams == null) null else CognitoStreams + ["SamlProviderARNs"] = if (SamlProviderARNs == null) null else SamlProviderARNs + ["DeveloperProviderName"] = if (DeveloperProviderName == null) null else DeveloperProviderName ["CognitoEvents"] = if (CognitoEvents == null) null else CognitoEvents ["IdentityPoolName"] = if (IdentityPoolName == null) null else IdentityPoolName - ["OpenIdConnectProviderARNs"] = if (OpenIdConnectProviderARNs == null) null else OpenIdConnectProviderARNs ["CognitoIdentityProviders"] = if (CognitoIdentityProviders == null) null else CognitoIdentityProviders - ["DeveloperProviderName"] = if (DeveloperProviderName == null) null else DeveloperProviderName - ["PushSync"] = if (PushSync == null) null else PushSync - ["AllowUnauthenticatedIdentities"] = if (AllowUnauthenticatedIdentities == null) null else AllowUnauthenticatedIdentities - ["SamlProviderARNs"] = if (SamlProviderARNs == null) null else SamlProviderARNs - ["SupportedLoginProviders"] = if (SupportedLoginProviders == null) null else SupportedLoginProviders + ["OpenIdConnectProviderARNs"] = if (OpenIdConnectProviderARNs == null) null else OpenIdConnectProviderARNs ["AllowClassicFlow"] = if (AllowClassicFlow == null) null else AllowClassicFlow - ["CognitoStreams"] = if (CognitoStreams == null) null else CognitoStreams + ["PushSync"] = if (PushSync == null) null else PushSync } } diff --git a/pkl/aws/cognito/identitypoolprincipaltag.pkl b/pkl/aws/cognito/identitypoolprincipaltag.pkl index 70e960c9..ce605267 100644 --- a/pkl/aws/cognito/identitypoolprincipaltag.pkl +++ b/pkl/aws/cognito/identitypoolprincipaltag.pkl @@ -12,22 +12,22 @@ open class IdentityPoolPrincipalTag extends cloudformation.Resource { /// - hidden IdentityPoolId: String|Mapping + hidden UseDefaults: (Boolean|Mapping)? /// - hidden IdentityProviderName: String|Mapping + hidden PrincipalTags: (Dynamic)? /// - hidden UseDefaults: (Boolean|Mapping)? + hidden IdentityPoolId: String|Mapping /// - hidden PrincipalTags: (Dynamic)? + hidden IdentityProviderName: String|Mapping Properties { - ["IdentityPoolId"] = if (IdentityPoolId == null) null else IdentityPoolId - ["IdentityProviderName"] = if (IdentityProviderName == null) null else IdentityProviderName ["UseDefaults"] = if (UseDefaults == null) null else UseDefaults ["PrincipalTags"] = if (PrincipalTags == null) null else PrincipalTags + ["IdentityPoolId"] = if (IdentityPoolId == null) null else IdentityPoolId + ["IdentityProviderName"] = if (IdentityProviderName == null) null else IdentityProviderName } } diff --git a/pkl/aws/cognito/identitypoolroleattachment.pkl b/pkl/aws/cognito/identitypoolroleattachment.pkl index 262cec8d..6fa09330 100644 --- a/pkl/aws/cognito/identitypoolroleattachment.pkl +++ b/pkl/aws/cognito/identitypoolroleattachment.pkl @@ -6,7 +6,7 @@ module aws.cognito.identitypoolroleattachment import "../../cloudformation.pkl" /// -open class MappingRule { +open class IdentityPoolRoleAttachmentMappingRule { Claim: String|Mapping MatchType: String|Mapping RoleARN: String|Mapping @@ -14,16 +14,16 @@ open class MappingRule { } /// -open class RulesConfigurationType { - Rules: Listing +open class IdentityPoolRoleAttachmentRulesConfigurationType { + Rules: Listing } /// -open class RoleMapping { - AmbiguousRoleResolution: (String|Mapping)? - RulesConfiguration: (RulesConfigurationType)? +open class IdentityPoolRoleAttachmentRoleMapping { IdentityProvider: (String|Mapping)? Type: String|Mapping + AmbiguousRoleResolution: (String|Mapping)? + RulesConfiguration: (IdentityPoolRoleAttachmentRulesConfigurationType)? } /// Resource Type definition for AWS::Cognito::IdentityPoolRoleAttachment @@ -34,3 +34,22 @@ open class IdentityPoolRoleAttachment extends cloudformation.Resource { /// hidden IdentityPoolId: String|Mapping + + /// + hidden Roles: (IdentityPoolRoleAttachmentIdentityPoolRoleAttachmentRoles)? + + /// + hidden RoleMappings: (IdentityPoolRoleAttachmentIdentityPoolRoleAttachmentRoleMappings)? + + Properties { + ["IdentityPoolId"] = if (IdentityPoolId == null) null else IdentityPoolId + ["Roles"] = if (Roles == null) null else Roles + ["RoleMappings"] = if (RoleMappings == null) null else RoleMappings + } + +} + + +typealias IdentityPoolRoleAttachmentIdentityPoolRoleAttachmentRoles = Mapping + +typealias IdentityPoolRoleAttachmentIdentityPoolRoleAttachmentRoleMappings = Mapping diff --git a/pkl/aws/cognito/userpool.pkl b/pkl/aws/cognito/userpool.pkl index 535ea877..0133ce23 100644 --- a/pkl/aws/cognito/userpool.pkl +++ b/pkl/aws/cognito/userpool.pkl @@ -6,149 +6,149 @@ module aws.cognito.userpool import "../../cloudformation.pkl" /// -open class EmailConfiguration { - SourceArn: (String|Mapping)? - From: (String|Mapping)? - ConfigurationSet: (String|Mapping)? - EmailSendingAccount: (String|Mapping)? - ReplyToEmailAddress: (String|Mapping)? +open class UserPoolCustomEmailSender { + LambdaVersion: (String|Mapping)? + LambdaArn: (String|Mapping)? } /// -open class StringAttributeConstraints { +open class UserPoolStringAttributeConstraints { MaxLength: (String|Mapping)? MinLength: (String|Mapping)? } /// -open class SchemaAttribute { - Mutable: (Boolean|Mapping)? - Name: (String|Mapping)? - NumberAttributeConstraints: (NumberAttributeConstraints)? - StringAttributeConstraints: (StringAttributeConstraints)? - Required: (Boolean|Mapping)? - AttributeDataType: (String|Mapping)? - DeveloperOnlyAttribute: (Boolean|Mapping)? +open class UserPoolAdminCreateUserConfig { + AllowAdminCreateUserOnly: (Boolean|Mapping)? + InviteMessageTemplate: (UserPoolInviteMessageTemplate)? + UnusedAccountValidityDays: (Int|Mapping)? } /// -open class VerificationMessageTemplate { - DefaultEmailOption: (String|Mapping)? - EmailMessage: (String|Mapping)? - EmailMessageByLink: (String|Mapping)? - EmailSubject: (String|Mapping)? - EmailSubjectByLink: (String|Mapping)? - SmsMessage: (String|Mapping)? +open class UserPoolPasswordPolicy { + MinimumLength: (Int|Mapping)? + RequireLowercase: (Boolean|Mapping)? + RequireNumbers: (Boolean|Mapping)? + RequireSymbols: (Boolean|Mapping)? + RequireUppercase: (Boolean|Mapping)? + TemporaryPasswordValidityDays: (Int|Mapping)? } /// -open class InviteMessageTemplate { - EmailMessage: (String|Mapping)? - EmailSubject: (String|Mapping)? - SMSMessage: (String|Mapping)? +open class UserPoolUserPoolAddOns { + AdvancedSecurityMode: (String|Mapping)? } /// -open class DeviceConfiguration { - ChallengeRequiredOnNewDevice: (Boolean|Mapping)? - DeviceOnlyRememberedOnUserPrompt: (Boolean|Mapping)? +open class UserPoolCustomSMSSender { + LambdaVersion: (String|Mapping)? + LambdaArn: (String|Mapping)? } /// -open class AdminCreateUserConfig { - InviteMessageTemplate: (InviteMessageTemplate)? - UnusedAccountValidityDays: (Int|Mapping)? - AllowAdminCreateUserOnly: (Boolean|Mapping)? +open class UserPoolNumberAttributeConstraints { + MinValue: (String|Mapping)? + MaxValue: (String|Mapping)? } /// -open class CustomSMSSender { - LambdaArn: (String|Mapping)? - LambdaVersion: (String|Mapping)? +open class UserPoolPolicies { + PasswordPolicy: (UserPoolPasswordPolicy)? } /// -open class PreTokenGenerationConfig { - LambdaVersion: (String|Mapping)? - LambdaArn: (String|Mapping)? +open class UserPoolLambdaConfig { + PreSignUp: (String|Mapping)? + UserMigration: (String|Mapping)? + PostAuthentication: (String|Mapping)? + CustomMessage: (String|Mapping)? + PreAuthentication: (String|Mapping)? + CustomSMSSender: (UserPoolCustomSMSSender)? + CreateAuthChallenge: (String|Mapping)? + PostConfirmation: (String|Mapping)? + PreTokenGeneration: (String|Mapping)? + KMSKeyID: (String|Mapping)? + DefineAuthChallenge: (String|Mapping)? + CustomEmailSender: (UserPoolCustomEmailSender)? + PreTokenGenerationConfig: (UserPoolPreTokenGenerationConfig)? + VerifyAuthChallengeResponse: (String|Mapping)? } /// -open class SmsConfiguration { - ExternalId: (String|Mapping)? - SnsCallerArn: (String|Mapping)? - SnsRegion: (String|Mapping)? +open class UserPoolEmailConfiguration { + ReplyToEmailAddress: (String|Mapping)? + SourceArn: (String|Mapping)? + From: (String|Mapping)? + ConfigurationSet: (String|Mapping)? + EmailSendingAccount: (String|Mapping)? } /// -open class UserPoolAddOns { - AdvancedSecurityMode: (String|Mapping)? +open class UserPoolDeviceConfiguration { + ChallengeRequiredOnNewDevice: (Boolean|Mapping)? + DeviceOnlyRememberedOnUserPrompt: (Boolean|Mapping)? } /// -open class Policies { - PasswordPolicy: (PasswordPolicy)? +open class UserPoolInviteMessageTemplate { + EmailMessage: (String|Mapping)? + EmailSubject: (String|Mapping)? + SMSMessage: (String|Mapping)? } /// -open class RecoveryOption { - Name: (String|Mapping)? - Priority: (Int|Mapping)? +open class UserPoolUserAttributeUpdateSettings { + AttributesRequireVerificationBeforeUpdate: Listing } /// -open class CustomEmailSender { - LambdaVersion: (String|Mapping)? - LambdaArn: (String|Mapping)? +open class UserPoolRecoveryOption { + Name: (String|Mapping)? + Priority: (Int|Mapping)? } /// -open class LambdaConfig { - CustomEmailSender: (CustomEmailSender)? - VerifyAuthChallengeResponse: (String|Mapping)? - UserMigration: (String|Mapping)? - CustomSMSSender: (CustomSMSSender)? - CustomMessage: (String|Mapping)? - PostConfirmation: (String|Mapping)? - PreAuthentication: (String|Mapping)? - PreSignUp: (String|Mapping)? - PreTokenGeneration: (String|Mapping)? - CreateAuthChallenge: (String|Mapping)? - DefineAuthChallenge: (String|Mapping)? - PostAuthentication: (String|Mapping)? - KMSKeyID: (String|Mapping)? - PreTokenGenerationConfig: (PreTokenGenerationConfig)? +open class UserPoolVerificationMessageTemplate { + SmsMessage: (String|Mapping)? + DefaultEmailOption: (String|Mapping)? + EmailMessage: (String|Mapping)? + EmailMessageByLink: (String|Mapping)? + EmailSubject: (String|Mapping)? + EmailSubjectByLink: (String|Mapping)? } /// -open class NumberAttributeConstraints { - MaxValue: (String|Mapping)? - MinValue: (String|Mapping)? +open class UserPoolAccountRecoverySetting { + RecoveryMechanisms: (Listing)? } /// -open class UsernameConfiguration { - CaseSensitive: (Boolean|Mapping)? +open class UserPoolPreTokenGenerationConfig { + LambdaVersion: (String|Mapping)? + LambdaArn: (String|Mapping)? } /// -open class UserAttributeUpdateSettings { - AttributesRequireVerificationBeforeUpdate: Listing +open class UserPoolSmsConfiguration { + SnsRegion: (String|Mapping)? + ExternalId: (String|Mapping)? + SnsCallerArn: (String|Mapping)? } /// -open class PasswordPolicy { - MinimumLength: (Int|Mapping)? - RequireLowercase: (Boolean|Mapping)? - RequireNumbers: (Boolean|Mapping)? - RequireSymbols: (Boolean|Mapping)? - RequireUppercase: (Boolean|Mapping)? - TemporaryPasswordValidityDays: (Int|Mapping)? +open class UserPoolSchemaAttribute { + AttributeDataType: (String|Mapping)? + DeveloperOnlyAttribute: (Boolean|Mapping)? + Mutable: (Boolean|Mapping)? + Name: (String|Mapping)? + NumberAttributeConstraints: (UserPoolNumberAttributeConstraints)? + StringAttributeConstraints: (UserPoolStringAttributeConstraints)? + Required: (Boolean|Mapping)? } /// -open class AccountRecoverySetting { - RecoveryMechanisms: (Listing)? +open class UserPoolUsernameConfiguration { + CaseSensitive: (Boolean|Mapping)? } /// Resource Type definition for AWS::Cognito::UserPool @@ -158,102 +158,105 @@ open class UserPool extends cloudformation.Resource { /// - hidden LambdaConfig: (LambdaConfig)? + hidden UsernameAttributes: (Listing)? /// - hidden UserAttributeUpdateSettings: (UserAttributeUpdateSettings)? + hidden EmailVerificationMessage: (String|Mapping)? /// - hidden UserPoolName: (String|Mapping)? + hidden SmsVerificationMessage: (String|Mapping)? /// - hidden AccountRecoverySetting: (AccountRecoverySetting)? + hidden EnabledMfas: (Listing)? /// - hidden AdminCreateUserConfig: (AdminCreateUserConfig)? + hidden UsernameConfiguration: (UserPoolUsernameConfiguration)? /// - hidden AliasAttributes: (Listing)? + hidden UserPoolAddOns: (UserPoolUserPoolAddOns)? /// - hidden DeviceConfiguration: (DeviceConfiguration)? + hidden UserPoolName: (String|Mapping)? /// - hidden MfaConfiguration: (String|Mapping)? + hidden AccountRecoverySetting: (UserPoolAccountRecoverySetting)? /// - hidden SmsVerificationMessage: (String|Mapping)? + hidden MfaConfiguration: (String|Mapping)? /// - hidden DeletionProtection: (String|Mapping)? + hidden DeviceConfiguration: (UserPoolDeviceConfiguration)? /// - hidden UsernameConfiguration: (UsernameConfiguration)? + hidden LambdaConfig: (UserPoolLambdaConfig)? /// - hidden UserPoolTags: (Dynamic)? + hidden VerificationMessageTemplate: (UserPoolVerificationMessageTemplate)? /// - hidden Schema: (Listing)? + hidden Policies: (UserPoolPolicies)? /// - hidden UsernameAttributes: (Listing)? + hidden AdminCreateUserConfig: (UserPoolAdminCreateUserConfig)? /// - hidden EmailVerificationMessage: (String|Mapping)? + hidden AliasAttributes: (Listing)? /// - hidden EmailVerificationSubject: (String|Mapping)? + hidden SmsAuthenticationMessage: (String|Mapping)? /// - hidden VerificationMessageTemplate: (VerificationMessageTemplate)? + hidden Schema: (Listing)? /// - hidden SmsAuthenticationMessage: (String|Mapping)? + hidden DeletionProtection: (String|Mapping)? /// - hidden SmsConfiguration: (SmsConfiguration)? + hidden SmsConfiguration: (UserPoolSmsConfiguration)? /// - hidden Policies: (Policies)? + hidden EmailConfiguration: (UserPoolEmailConfiguration)? /// - hidden EmailConfiguration: (EmailConfiguration)? + hidden UserPoolTags: (UserPoolUserPoolUserPoolTags)? /// - hidden EnabledMfas: (Listing)? + hidden EmailVerificationSubject: (String|Mapping)? /// hidden AutoVerifiedAttributes: (Listing)? /// - hidden UserPoolAddOns: (UserPoolAddOns)? + hidden UserAttributeUpdateSettings: (UserPoolUserAttributeUpdateSettings)? Properties { - ["LambdaConfig"] = if (LambdaConfig == null) null else LambdaConfig - ["UserAttributeUpdateSettings"] = if (UserAttributeUpdateSettings == null) null else UserAttributeUpdateSettings + ["UsernameAttributes"] = if (UsernameAttributes == null) null else UsernameAttributes + ["EmailVerificationMessage"] = if (EmailVerificationMessage == null) null else EmailVerificationMessage + ["SmsVerificationMessage"] = if (SmsVerificationMessage == null) null else SmsVerificationMessage + ["EnabledMfas"] = if (EnabledMfas == null) null else EnabledMfas + ["UsernameConfiguration"] = if (UsernameConfiguration == null) null else UsernameConfiguration + ["UserPoolAddOns"] = if (UserPoolAddOns == null) null else UserPoolAddOns ["UserPoolName"] = if (UserPoolName == null) null else UserPoolName ["AccountRecoverySetting"] = if (AccountRecoverySetting == null) null else AccountRecoverySetting - ["AdminCreateUserConfig"] = if (AdminCreateUserConfig == null) null else AdminCreateUserConfig - ["AliasAttributes"] = if (AliasAttributes == null) null else AliasAttributes - ["DeviceConfiguration"] = if (DeviceConfiguration == null) null else DeviceConfiguration ["MfaConfiguration"] = if (MfaConfiguration == null) null else MfaConfiguration - ["SmsVerificationMessage"] = if (SmsVerificationMessage == null) null else SmsVerificationMessage - ["DeletionProtection"] = if (DeletionProtection == null) null else DeletionProtection - ["UsernameConfiguration"] = if (UsernameConfiguration == null) null else UsernameConfiguration - ["UserPoolTags"] = if (UserPoolTags == null) null else UserPoolTags - ["Schema"] = if (Schema == null) null else Schema - ["UsernameAttributes"] = if (UsernameAttributes == null) null else UsernameAttributes - ["EmailVerificationMessage"] = if (EmailVerificationMessage == null) null else EmailVerificationMessage - ["EmailVerificationSubject"] = if (EmailVerificationSubject == null) null else EmailVerificationSubject + ["DeviceConfiguration"] = if (DeviceConfiguration == null) null else DeviceConfiguration + ["LambdaConfig"] = if (LambdaConfig == null) null else LambdaConfig ["VerificationMessageTemplate"] = if (VerificationMessageTemplate == null) null else VerificationMessageTemplate + ["Policies"] = if (Policies == null) null else Policies + ["AdminCreateUserConfig"] = if (AdminCreateUserConfig == null) null else AdminCreateUserConfig + ["AliasAttributes"] = if (AliasAttributes == null) null else AliasAttributes ["SmsAuthenticationMessage"] = if (SmsAuthenticationMessage == null) null else SmsAuthenticationMessage + ["Schema"] = if (Schema == null) null else Schema + ["DeletionProtection"] = if (DeletionProtection == null) null else DeletionProtection ["SmsConfiguration"] = if (SmsConfiguration == null) null else SmsConfiguration - ["Policies"] = if (Policies == null) null else Policies ["EmailConfiguration"] = if (EmailConfiguration == null) null else EmailConfiguration - ["EnabledMfas"] = if (EnabledMfas == null) null else EnabledMfas + ["UserPoolTags"] = if (UserPoolTags == null) null else UserPoolTags + ["EmailVerificationSubject"] = if (EmailVerificationSubject == null) null else EmailVerificationSubject ["AutoVerifiedAttributes"] = if (AutoVerifiedAttributes == null) null else AutoVerifiedAttributes - ["UserPoolAddOns"] = if (UserPoolAddOns == null) null else UserPoolAddOns + ["UserAttributeUpdateSettings"] = if (UserAttributeUpdateSettings == null) null else UserAttributeUpdateSettings } } + + +typealias UserPoolUserPoolUserPoolTags = Mapping diff --git a/pkl/aws/cognito/userpoolclient.pkl b/pkl/aws/cognito/userpoolclient.pkl index c3b12b94..c6265c2f 100644 --- a/pkl/aws/cognito/userpoolclient.pkl +++ b/pkl/aws/cognito/userpoolclient.pkl @@ -6,16 +6,16 @@ module aws.cognito.userpoolclient import "../../cloudformation.pkl" /// -open class AnalyticsConfiguration { +open class UserPoolClientAnalyticsConfiguration { + RoleArn: (String|Mapping)? + UserDataShared: (Boolean|Mapping)? ApplicationArn: (String|Mapping)? ApplicationId: (String|Mapping)? ExternalId: (String|Mapping)? - RoleArn: (String|Mapping)? - UserDataShared: (Boolean|Mapping)? } /// -open class TokenValidityUnits { +open class UserPoolClientTokenValidityUnits { AccessToken: (String|Mapping)? IdToken: (String|Mapping)? RefreshToken: (String|Mapping)? @@ -28,93 +28,93 @@ open class UserPoolClient extends cloudformation.Resource { /// - hidden ClientName: (String|Mapping)? + hidden AllowedOAuthFlows: (Listing)? /// - hidden ExplicitAuthFlows: (Listing)? + hidden AllowedOAuthFlowsUserPoolClient: (Boolean|Mapping)? /// - hidden AccessTokenValidity: (Int|Mapping)? + hidden LogoutURLs: (Listing)? /// hidden CallbackURLs: (Listing)? /// - hidden EnablePropagateAdditionalUserContextData: (Boolean|Mapping)? + hidden DefaultRedirectURI: (String|Mapping)? /// - hidden AuthSessionValidity: (Int|Mapping)? + hidden EnableTokenRevocation: (Boolean|Mapping)? /// - hidden DefaultRedirectURI: (String|Mapping)? + hidden EnablePropagateAdditionalUserContextData: (Boolean|Mapping)? /// - hidden LogoutURLs: (Listing)? + hidden IdTokenValidity: (Int|Mapping)? /// - hidden AnalyticsConfiguration: (AnalyticsConfiguration)? + hidden ReadAttributes: (Listing)? /// - hidden EnableTokenRevocation: (Boolean|Mapping)? + hidden RefreshTokenValidity: (Int|Mapping)? /// - hidden GenerateSecret: (Boolean|Mapping)? + hidden ClientName: (String|Mapping)? /// - hidden WriteAttributes: (Listing)? + hidden AuthSessionValidity: (Int|Mapping)? /// - hidden AllowedOAuthFlows: (Listing)? + hidden WriteAttributes: (Listing)? /// - hidden RefreshTokenValidity: (Int|Mapping)? + hidden PreventUserExistenceErrors: (String|Mapping)? /// - hidden TokenValidityUnits: (TokenValidityUnits)? + hidden GenerateSecret: (Boolean|Mapping)? /// - hidden UserPoolId: String|Mapping + hidden AccessTokenValidity: (Int|Mapping)? /// - hidden AllowedOAuthScopes: (Listing)? + hidden UserPoolId: String|Mapping /// - hidden AllowedOAuthFlowsUserPoolClient: (Boolean|Mapping)? + hidden AnalyticsConfiguration: (UserPoolClientAnalyticsConfiguration)? /// - hidden IdTokenValidity: (Int|Mapping)? + hidden ExplicitAuthFlows: (Listing)? /// - hidden PreventUserExistenceErrors: (String|Mapping)? + hidden TokenValidityUnits: (UserPoolClientTokenValidityUnits)? /// - hidden ReadAttributes: (Listing)? + hidden AllowedOAuthScopes: (Listing)? /// hidden SupportedIdentityProviders: (Listing)? Properties { - ["ClientName"] = if (ClientName == null) null else ClientName - ["ExplicitAuthFlows"] = if (ExplicitAuthFlows == null) null else ExplicitAuthFlows - ["AccessTokenValidity"] = if (AccessTokenValidity == null) null else AccessTokenValidity + ["AllowedOAuthFlows"] = if (AllowedOAuthFlows == null) null else AllowedOAuthFlows + ["AllowedOAuthFlowsUserPoolClient"] = if (AllowedOAuthFlowsUserPoolClient == null) null else AllowedOAuthFlowsUserPoolClient + ["LogoutURLs"] = if (LogoutURLs == null) null else LogoutURLs ["CallbackURLs"] = if (CallbackURLs == null) null else CallbackURLs - ["EnablePropagateAdditionalUserContextData"] = if (EnablePropagateAdditionalUserContextData == null) null else EnablePropagateAdditionalUserContextData - ["AuthSessionValidity"] = if (AuthSessionValidity == null) null else AuthSessionValidity ["DefaultRedirectURI"] = if (DefaultRedirectURI == null) null else DefaultRedirectURI - ["LogoutURLs"] = if (LogoutURLs == null) null else LogoutURLs - ["AnalyticsConfiguration"] = if (AnalyticsConfiguration == null) null else AnalyticsConfiguration ["EnableTokenRevocation"] = if (EnableTokenRevocation == null) null else EnableTokenRevocation - ["GenerateSecret"] = if (GenerateSecret == null) null else GenerateSecret - ["WriteAttributes"] = if (WriteAttributes == null) null else WriteAttributes - ["AllowedOAuthFlows"] = if (AllowedOAuthFlows == null) null else AllowedOAuthFlows + ["EnablePropagateAdditionalUserContextData"] = if (EnablePropagateAdditionalUserContextData == null) null else EnablePropagateAdditionalUserContextData + ["IdTokenValidity"] = if (IdTokenValidity == null) null else IdTokenValidity + ["ReadAttributes"] = if (ReadAttributes == null) null else ReadAttributes ["RefreshTokenValidity"] = if (RefreshTokenValidity == null) null else RefreshTokenValidity - ["TokenValidityUnits"] = if (TokenValidityUnits == null) null else TokenValidityUnits + ["ClientName"] = if (ClientName == null) null else ClientName + ["AuthSessionValidity"] = if (AuthSessionValidity == null) null else AuthSessionValidity + ["WriteAttributes"] = if (WriteAttributes == null) null else WriteAttributes + ["PreventUserExistenceErrors"] = if (PreventUserExistenceErrors == null) null else PreventUserExistenceErrors + ["GenerateSecret"] = if (GenerateSecret == null) null else GenerateSecret + ["AccessTokenValidity"] = if (AccessTokenValidity == null) null else AccessTokenValidity ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId + ["AnalyticsConfiguration"] = if (AnalyticsConfiguration == null) null else AnalyticsConfiguration + ["ExplicitAuthFlows"] = if (ExplicitAuthFlows == null) null else ExplicitAuthFlows + ["TokenValidityUnits"] = if (TokenValidityUnits == null) null else TokenValidityUnits ["AllowedOAuthScopes"] = if (AllowedOAuthScopes == null) null else AllowedOAuthScopes - ["AllowedOAuthFlowsUserPoolClient"] = if (AllowedOAuthFlowsUserPoolClient == null) null else AllowedOAuthFlowsUserPoolClient - ["IdTokenValidity"] = if (IdTokenValidity == null) null else IdTokenValidity - ["PreventUserExistenceErrors"] = if (PreventUserExistenceErrors == null) null else PreventUserExistenceErrors - ["ReadAttributes"] = if (ReadAttributes == null) null else ReadAttributes ["SupportedIdentityProviders"] = if (SupportedIdentityProviders == null) null else SupportedIdentityProviders } diff --git a/pkl/aws/cognito/userpooldomain.pkl b/pkl/aws/cognito/userpooldomain.pkl index 6dc7c965..042b6ffc 100644 --- a/pkl/aws/cognito/userpooldomain.pkl +++ b/pkl/aws/cognito/userpooldomain.pkl @@ -6,7 +6,7 @@ module aws.cognito.userpooldomain import "../../cloudformation.pkl" /// -open class CustomDomainConfigType { +open class UserPoolDomainCustomDomainConfigType { CertificateArn: (String|Mapping)? } @@ -23,7 +23,7 @@ open class UserPoolDomain extends cloudformation.Resource { hidden Domain: String|Mapping /// - hidden CustomDomainConfig: (CustomDomainConfigType)? + hidden CustomDomainConfig: (UserPoolDomainCustomDomainConfigType)? Properties { ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId diff --git a/pkl/aws/cognito/userpoolidentityprovider.pkl b/pkl/aws/cognito/userpoolidentityprovider.pkl index 68d4f19b..019bab0f 100644 --- a/pkl/aws/cognito/userpoolidentityprovider.pkl +++ b/pkl/aws/cognito/userpoolidentityprovider.pkl @@ -12,30 +12,30 @@ open class UserPoolIdentityProvider extends cloudformation.Resource { /// - hidden ProviderName: String|Mapping + hidden ProviderDetails: (Dynamic)? /// - hidden UserPoolId: String|Mapping + hidden ProviderType: String|Mapping /// - hidden AttributeMapping: (Dynamic)? + hidden IdpIdentifiers: (Listing)? /// - hidden ProviderDetails: (Dynamic)? + hidden ProviderName: String|Mapping /// - hidden ProviderType: String|Mapping + hidden UserPoolId: String|Mapping /// - hidden IdpIdentifiers: (Listing)? + hidden AttributeMapping: (Dynamic)? Properties { - ["ProviderName"] = if (ProviderName == null) null else ProviderName - ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId - ["AttributeMapping"] = if (AttributeMapping == null) null else AttributeMapping ["ProviderDetails"] = if (ProviderDetails == null) null else ProviderDetails ["ProviderType"] = if (ProviderType == null) null else ProviderType ["IdpIdentifiers"] = if (IdpIdentifiers == null) null else IdpIdentifiers + ["ProviderName"] = if (ProviderName == null) null else ProviderName + ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId + ["AttributeMapping"] = if (AttributeMapping == null) null else AttributeMapping } } diff --git a/pkl/aws/cognito/userpoolresourceserver.pkl b/pkl/aws/cognito/userpoolresourceserver.pkl index 9612e13f..5043be60 100644 --- a/pkl/aws/cognito/userpoolresourceserver.pkl +++ b/pkl/aws/cognito/userpoolresourceserver.pkl @@ -6,7 +6,7 @@ module aws.cognito.userpoolresourceserver import "../../cloudformation.pkl" /// -open class ResourceServerScopeType { +open class UserPoolResourceServerResourceServerScopeType { ScopeName: String|Mapping ScopeDescription: String|Mapping } @@ -18,22 +18,22 @@ open class UserPoolResourceServer extends cloudformation.Resource { /// - hidden Scopes: (Listing)? + hidden UserPoolId: String|Mapping /// - hidden Name: String|Mapping + hidden Identifier: String|Mapping /// - hidden UserPoolId: String|Mapping + hidden Scopes: (Listing)? /// - hidden Identifier: String|Mapping + hidden Name: String|Mapping Properties { - ["Scopes"] = if (Scopes == null) null else Scopes - ["Name"] = if (Name == null) null else Name ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId ["Identifier"] = if (Identifier == null) null else Identifier + ["Scopes"] = if (Scopes == null) null else Scopes + ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/cognito/userpoolriskconfigurationattachment.pkl b/pkl/aws/cognito/userpoolriskconfigurationattachment.pkl index 933d9ce1..585dc6e7 100644 --- a/pkl/aws/cognito/userpoolriskconfigurationattachment.pkl +++ b/pkl/aws/cognito/userpoolriskconfigurationattachment.pkl @@ -6,58 +6,58 @@ module aws.cognito.userpoolriskconfigurationattachment import "../../cloudformation.pkl" /// -open class AccountTakeoverActionType { - EventAction: String|Mapping - Notify: Boolean|Mapping -} - -/// -open class AccountTakeoverActionsType { - MediumAction: (AccountTakeoverActionType)? - HighAction: (AccountTakeoverActionType)? - LowAction: (AccountTakeoverActionType)? -} - -/// -open class NotifyEmailType { - HtmlBody: (String|Mapping)? +open class UserPoolRiskConfigurationAttachmentNotifyEmailType { Subject: String|Mapping TextBody: (String|Mapping)? + HtmlBody: (String|Mapping)? } /// -open class NotifyConfigurationType { - BlockEmail: (NotifyEmailType)? - MfaEmail: (NotifyEmailType)? - NoActionEmail: (NotifyEmailType)? +open class UserPoolRiskConfigurationAttachmentNotifyConfigurationType { + MfaEmail: (UserPoolRiskConfigurationAttachmentNotifyEmailType)? + NoActionEmail: (UserPoolRiskConfigurationAttachmentNotifyEmailType)? From: (String|Mapping)? ReplyTo: (String|Mapping)? SourceArn: String|Mapping + BlockEmail: (UserPoolRiskConfigurationAttachmentNotifyEmailType)? } /// -open class AccountTakeoverRiskConfigurationType { - NotifyConfiguration: (NotifyConfigurationType)? - Actions: AccountTakeoverActionsType +open class UserPoolRiskConfigurationAttachmentAccountTakeoverRiskConfigurationType { + Actions: UserPoolRiskConfigurationAttachmentAccountTakeoverActionsType + NotifyConfiguration: (UserPoolRiskConfigurationAttachmentNotifyConfigurationType)? } /// -open class RiskExceptionConfigurationType { +open class UserPoolRiskConfigurationAttachmentRiskExceptionConfigurationType { SkippedIPRangeList: (Listing)? BlockedIPRangeList: (Listing)? } /// -open class CompromisedCredentialsActionsType { +open class UserPoolRiskConfigurationAttachmentCompromisedCredentialsActionsType { EventAction: String|Mapping } /// -open class CompromisedCredentialsRiskConfigurationType { - Actions: CompromisedCredentialsActionsType +open class UserPoolRiskConfigurationAttachmentCompromisedCredentialsRiskConfigurationType { + Actions: UserPoolRiskConfigurationAttachmentCompromisedCredentialsActionsType EventFilter: (Listing)? } +/// +open class UserPoolRiskConfigurationAttachmentAccountTakeoverActionType { + Notify: Boolean|Mapping + EventAction: String|Mapping +} + +/// +open class UserPoolRiskConfigurationAttachmentAccountTakeoverActionsType { + HighAction: (UserPoolRiskConfigurationAttachmentAccountTakeoverActionType)? + LowAction: (UserPoolRiskConfigurationAttachmentAccountTakeoverActionType)? + MediumAction: (UserPoolRiskConfigurationAttachmentAccountTakeoverActionType)? +} + /// Resource Type definition for AWS::Cognito::UserPoolRiskConfigurationAttachment open class UserPoolRiskConfigurationAttachment extends cloudformation.Resource { @@ -71,13 +71,13 @@ open class UserPoolRiskConfigurationAttachment extends cloudformation.Resource { hidden ClientId: String|Mapping /// - hidden RiskExceptionConfiguration: (RiskExceptionConfigurationType)? + hidden RiskExceptionConfiguration: (UserPoolRiskConfigurationAttachmentRiskExceptionConfigurationType)? /// - hidden CompromisedCredentialsRiskConfiguration: (CompromisedCredentialsRiskConfigurationType)? + hidden CompromisedCredentialsRiskConfiguration: (UserPoolRiskConfigurationAttachmentCompromisedCredentialsRiskConfigurationType)? /// - hidden AccountTakeoverRiskConfiguration: (AccountTakeoverRiskConfigurationType)? + hidden AccountTakeoverRiskConfiguration: (UserPoolRiskConfigurationAttachmentAccountTakeoverRiskConfigurationType)? Properties { ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId diff --git a/pkl/aws/cognito/userpooluicustomizationattachment.pkl b/pkl/aws/cognito/userpooluicustomizationattachment.pkl index c6d72b38..cb8862c3 100644 --- a/pkl/aws/cognito/userpooluicustomizationattachment.pkl +++ b/pkl/aws/cognito/userpooluicustomizationattachment.pkl @@ -11,19 +11,19 @@ open class UserPoolUICustomizationAttachment extends cloudformation.Resource { Type = "AWS::Cognito::UserPoolUICustomizationAttachment" - /// - hidden CSS: (String|Mapping)? - /// hidden UserPoolId: String|Mapping /// hidden ClientId: String|Mapping + /// + hidden CSS: (String|Mapping)? + Properties { - ["CSS"] = if (CSS == null) null else CSS ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId ["ClientId"] = if (ClientId == null) null else ClientId + ["CSS"] = if (CSS == null) null else CSS } } diff --git a/pkl/aws/cognito/userpooluser.pkl b/pkl/aws/cognito/userpooluser.pkl index f6cea66c..e3c20b42 100644 --- a/pkl/aws/cognito/userpooluser.pkl +++ b/pkl/aws/cognito/userpooluser.pkl @@ -6,7 +6,7 @@ module aws.cognito.userpooluser import "../../cloudformation.pkl" /// -open class AttributeType { +open class UserPoolUserAttributeType { Name: (String|Mapping)? Value: (String|Mapping)? } @@ -18,7 +18,7 @@ open class UserPoolUser extends cloudformation.Resource { /// - hidden UserAttributes: (Listing)? + hidden UserAttributes: (Listing)? /// hidden MessageAction: (String|Mapping)? @@ -30,10 +30,10 @@ open class UserPoolUser extends cloudformation.Resource { hidden UserPoolId: String|Mapping /// - hidden ValidationData: (Listing)? + hidden ValidationData: (Listing)? /// - hidden ClientMetadata: (Dynamic)? + hidden ClientMetadata: (UserPoolUserUserPoolUserClientMetadata)? /// hidden DesiredDeliveryMediums: (Listing)? @@ -53,3 +53,6 @@ open class UserPoolUser extends cloudformation.Resource { } } + + +typealias UserPoolUserUserPoolUserClientMetadata = Mapping diff --git a/pkl/aws/cognito/userpoolusertogroupattachment.pkl b/pkl/aws/cognito/userpoolusertogroupattachment.pkl index 478c5ef1..d2632eda 100644 --- a/pkl/aws/cognito/userpoolusertogroupattachment.pkl +++ b/pkl/aws/cognito/userpoolusertogroupattachment.pkl @@ -11,19 +11,19 @@ open class UserPoolUserToGroupAttachment extends cloudformation.Resource { Type = "AWS::Cognito::UserPoolUserToGroupAttachment" - /// - hidden GroupName: String|Mapping - /// hidden UserPoolId: String|Mapping /// hidden Username: String|Mapping + /// + hidden GroupName: String|Mapping + Properties { - ["GroupName"] = if (GroupName == null) null else GroupName ["UserPoolId"] = if (UserPoolId == null) null else UserPoolId ["Username"] = if (Username == null) null else Username + ["GroupName"] = if (GroupName == null) null else GroupName } } diff --git a/pkl/aws/comprehend/documentclassifier.pkl b/pkl/aws/comprehend/documentclassifier.pkl index 4ee37b09..9c1736bd 100644 --- a/pkl/aws/comprehend/documentclassifier.pkl +++ b/pkl/aws/comprehend/documentclassifier.pkl @@ -5,74 +5,72 @@ module aws.comprehend.documentclassifier import "../../cloudformation.pkl" -typealias AugmentedManifestsListItemSplit = "TRAIN"|"TEST" +typealias DocumentClassifierS3Uri = String|Mapping + + +typealias DocumentClassifierKmsKeyId = String|Mapping + /// -open class AugmentedManifestsListItem { - AttributeNames: Listing - S3Uri: S3Uri - Split: (AugmentedManifestsListItemSplit|Mapping)? +open class DocumentClassifierDocumentClassifierOutputDataConfig { + KmsKeyId: (DocumentClassifierKmsKeyId)? + S3Uri: (DocumentClassifierS3Uri)? } -typealias DocumentReaderConfigDocumentReadAction = "TEXTRACT_DETECT_DOCUMENT_TEXT"|"TEXTRACT_ANALYZE_DOCUMENT" +/// +open class DocumentClassifierDocumentClassifierDocuments { + S3Uri: DocumentClassifierS3Uri + TestS3Uri: (DocumentClassifierS3Uri)? +} typealias DocumentReaderConfigDocumentReadMode = "SERVICE_DEFAULT"|"FORCE_DOCUMENT_READ_ACTION" typealias DocumentReaderConfigFeatureTypes = "TABLES"|"FORMS" +typealias DocumentReaderConfigDocumentReadAction = "TEXTRACT_DETECT_DOCUMENT_TEXT"|"TEXTRACT_ANALYZE_DOCUMENT" + /// -open class DocumentReaderConfig { - DocumentReadAction: DocumentReaderConfigDocumentReadAction|Mapping +open class DocumentClassifierDocumentReaderConfig { DocumentReadMode: (DocumentReaderConfigDocumentReadMode|Mapping)? FeatureTypes: (Listing)? + DocumentReadAction: DocumentReaderConfigDocumentReadAction|Mapping } /// -open class VpcConfig { +open class DocumentClassifierVpcConfig { SecurityGroupIds: Listing Subnets: Listing } -/// -open class KmsKeyId { -} - -/// -open class Tag { - Key: String|Mapping - Value: String|Mapping -} +typealias DocumentClassifierInputDataConfigDocumentType = "PLAIN_TEXT_DOCUMENT"|"SEMI_STRUCTURED_DOCUMENT" typealias DocumentClassifierInputDataConfigDataFormat = "COMPREHEND_CSV"|"AUGMENTED_MANIFEST" -typealias DocumentClassifierInputDataConfigDocumentType = "PLAIN_TEXT_DOCUMENT"|"SEMI_STRUCTURED_DOCUMENT" - /// -open class DocumentClassifierInputDataConfig { - Documents: (DocumentClassifierDocuments)? - DocumentReaderConfig: (DocumentReaderConfig)? - S3Uri: (S3Uri)? - TestS3Uri: (S3Uri)? - AugmentedManifests: (Listing)? +open class DocumentClassifierDocumentClassifierInputDataConfig { + DocumentType: (DocumentClassifierInputDataConfigDocumentType|Mapping)? + Documents: (DocumentClassifierDocumentClassifierDocuments)? + DocumentReaderConfig: (DocumentClassifierDocumentReaderConfig)? + S3Uri: (DocumentClassifierS3Uri)? + TestS3Uri: (DocumentClassifierS3Uri)? + AugmentedManifests: (Listing)? DataFormat: (DocumentClassifierInputDataConfigDataFormat|Mapping)? LabelDelimiter: (String(matches(Regex(#"^[ ~!@#$%^*\-_+=|\\:;\t>?/]$"#)))|Mapping)? - DocumentType: (DocumentClassifierInputDataConfigDocumentType|Mapping)? } -/// -open class DocumentClassifierDocuments { - S3Uri: S3Uri - TestS3Uri: (S3Uri)? -} +typealias AugmentedManifestsListItemSplit = "TRAIN"|"TEST" /// -open class DocumentClassifierOutputDataConfig { - KmsKeyId: (KmsKeyId)? - S3Uri: (S3Uri)? +open class DocumentClassifierAugmentedManifestsListItem { + AttributeNames: Listing + S3Uri: DocumentClassifierS3Uri + Split: (AugmentedManifestsListItemSplit|Mapping)? } /// -open class S3Uri { +open class DocumentClassifierTag { + Key: String|Mapping + Value: String|Mapping } /// Document Classifier enables training document classifier models. @@ -82,59 +80,59 @@ open class DocumentClassifier extends cloudformation.Resource { /// - hidden VolumeKmsKeyId: (KmsKeyId)? + hidden VolumeKmsKeyId: (DocumentClassifierKmsKeyId)? /// - hidden Mode: (DocumentClassifierMode|Mapping)? + hidden DataAccessRoleArn: String(matches(Regex(#"arn:aws(-[^:]+)?:iam::[0-9]{12}:role/.+"#)))|Mapping /// hidden ModelPolicy: (String(matches(Regex(#"[\u0009\u000A\u000D\u0020-\u00FF]+"#)))|Mapping)? /// - hidden DocumentClassifierName: String(matches(Regex(#"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"#)))|Mapping + hidden Tags: (Listing)? /// - hidden VersionName: (String(matches(Regex(#"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"#)))|Mapping)? + hidden InputDataConfig: DocumentClassifierDocumentClassifierInputDataConfig /// - hidden VpcConfig: (VpcConfig)? + hidden OutputDataConfig: (DocumentClassifierDocumentClassifierOutputDataConfig)? /// - hidden LanguageCode: DocumentClassifierLanguageCode|Mapping + hidden VpcConfig: (DocumentClassifierVpcConfig)? /// - hidden ModelKmsKeyId: (KmsKeyId)? + hidden ModelKmsKeyId: (DocumentClassifierKmsKeyId)? /// - hidden OutputDataConfig: (DocumentClassifierOutputDataConfig)? + hidden DocumentClassifierName: String(matches(Regex(#"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"#)))|Mapping /// - hidden Tags: (Listing)? + hidden VersionName: (String(matches(Regex(#"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"#)))|Mapping)? /// - hidden DataAccessRoleArn: String(matches(Regex(#"arn:aws(-[^:]+)?:iam::[0-9]{12}:role/.+"#)))|Mapping + hidden LanguageCode: DocumentClassifierLanguageCode|Mapping /// - hidden InputDataConfig: DocumentClassifierInputDataConfig + hidden Mode: (DocumentClassifierMode|Mapping)? Properties { ["VolumeKmsKeyId"] = if (VolumeKmsKeyId == null) null else VolumeKmsKeyId - ["Mode"] = if (Mode == null) null else Mode + ["DataAccessRoleArn"] = if (DataAccessRoleArn == null) null else DataAccessRoleArn ["ModelPolicy"] = if (ModelPolicy == null) null else ModelPolicy + ["Tags"] = if (Tags == null) null else Tags + ["InputDataConfig"] = if (InputDataConfig == null) null else InputDataConfig + ["OutputDataConfig"] = if (OutputDataConfig == null) null else OutputDataConfig + ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig + ["ModelKmsKeyId"] = if (ModelKmsKeyId == null) null else ModelKmsKeyId ["DocumentClassifierName"] = if (DocumentClassifierName == null) null else DocumentClassifierName ["VersionName"] = if (VersionName == null) null else VersionName - ["VpcConfig"] = if (VpcConfig == null) null else VpcConfig ["LanguageCode"] = if (LanguageCode == null) null else LanguageCode - ["ModelKmsKeyId"] = if (ModelKmsKeyId == null) null else ModelKmsKeyId - ["OutputDataConfig"] = if (OutputDataConfig == null) null else OutputDataConfig - ["Tags"] = if (Tags == null) null else Tags - ["DataAccessRoleArn"] = if (DataAccessRoleArn == null) null else DataAccessRoleArn - ["InputDataConfig"] = if (InputDataConfig == null) null else InputDataConfig + ["Mode"] = if (Mode == null) null else Mode } } -typealias DocumentClassifierMode = "MULTI_CLASS"|"MULTI_LABEL" - typealias DocumentClassifierLanguageCode = "en"|"es"|"fr"|"it"|"de"|"pt" + +typealias DocumentClassifierMode = "MULTI_CLASS"|"MULTI_LABEL" diff --git a/pkl/aws/comprehend/flywheel.pkl b/pkl/aws/comprehend/flywheel.pkl index b1fa21db..fbfeeb58 100644 --- a/pkl/aws/comprehend/flywheel.pkl +++ b/pkl/aws/comprehend/flywheel.pkl @@ -5,36 +5,29 @@ module aws.comprehend.flywheel import "../../cloudformation.pkl" -/// -open class VpcConfig { - SecurityGroupIds: Listing - Subnets: Listing -} +typealias FlywheelKmsKeyId = String|Mapping -/// -open class KmsKeyId { -} /// -open class EntityTypesListItem { - Type: String(matches(Regex(#"^(?![^\n\r\t,]*\\n|\\r|\\t)[^\n\r\t,]+$"#)))|Mapping +open class FlywheelEntityTypesListItem { + Type: String(matches(Regex(#"^(?![^\\n\r\t,]*\\\n|\\r|\\t)[^\\n\r\t,]+$"#)))|Mapping } /// -open class EntityRecognitionConfig { - EntityTypes: (Listing)? +open class FlywheelEntityRecognitionConfig { + EntityTypes: (Listing)? } typealias DocumentClassificationConfigMode = "MULTI_CLASS"|"MULTI_LABEL" /// -open class DocumentClassificationConfig { +open class FlywheelDocumentClassificationConfig { Mode: DocumentClassificationConfigMode|Mapping Labels: (Listing)? } /// -open class Tag { +open class FlywheelTag { Key: String|Mapping Value: String|Mapping } @@ -42,18 +35,24 @@ open class Tag { typealias TaskConfigLanguageCode = "en"|"es"|"fr"|"it"|"de"|"pt" /// -open class TaskConfig { +open class FlywheelTaskConfig { LanguageCode: TaskConfigLanguageCode|Mapping - DocumentClassificationConfig: (DocumentClassificationConfig)? - EntityRecognitionConfig: (EntityRecognitionConfig)? + DocumentClassificationConfig: (FlywheelDocumentClassificationConfig)? + EntityRecognitionConfig: (FlywheelEntityRecognitionConfig)? } /// -open class DataSecurityConfig { - ModelKmsKeyId: (KmsKeyId)? - VolumeKmsKeyId: (KmsKeyId)? - DataLakeKmsKeyId: (KmsKeyId)? - VpcConfig: (VpcConfig)? +open class FlywheelDataSecurityConfig { + ModelKmsKeyId: (FlywheelKmsKeyId)? + VolumeKmsKeyId: (FlywheelKmsKeyId)? + DataLakeKmsKeyId: (FlywheelKmsKeyId)? + VpcConfig: (FlywheelVpcConfig)? +} + +/// +open class FlywheelVpcConfig { + Subnets: Listing + SecurityGroupIds: Listing } /// The AWS::Comprehend::Flywheel resource creates an Amazon Comprehend Flywheel that enables customer to train their model. @@ -63,7 +62,7 @@ open class Flywheel extends cloudformation.Resource { /// - hidden ActiveModelArn: (String(matches(Regex(#"arn:aws(-[^:]+)?:comprehend:[a-zA-Z0-9-]*:[0-9]{12}:(document-classifier|entity-recognizer)/[a-zA-Z0-9](-*[a-zA-Z0-9])*(/version/[a-zA-Z0-9](-*[a-zA-Z0-9])*)?"#)))|Mapping)? + hidden TaskConfig: (FlywheelTaskConfig)? /// hidden DataAccessRoleArn: String(matches(Regex(#"arn:aws(-[^:]+)?:iam::[0-9]{12}:role/.+"#)))|Mapping @@ -72,28 +71,28 @@ open class Flywheel extends cloudformation.Resource { hidden DataLakeS3Uri: String(matches(Regex(#"s3://[a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9](/.*)?"#)))|Mapping /// - hidden FlywheelName: String(matches(Regex(#"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"#)))|Mapping + hidden DataSecurityConfig: (FlywheelDataSecurityConfig)? /// - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// - hidden TaskConfig: (TaskConfig)? + hidden ActiveModelArn: (String(matches(Regex(#"arn:aws(-[^:]+)?:comprehend:[a-zA-Z0-9-]*:[0-9]{12}:(document-classifier|entity-recognizer)/[a-zA-Z0-9](-*[a-zA-Z0-9])*(/version/[a-zA-Z0-9](-*[a-zA-Z0-9])*)?"#)))|Mapping)? /// - hidden DataSecurityConfig: (DataSecurityConfig)? + hidden FlywheelName: String(matches(Regex(#"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"#)))|Mapping /// hidden ModelType: (FlywheelModelType|Mapping)? Properties { - ["ActiveModelArn"] = if (ActiveModelArn == null) null else ActiveModelArn + ["TaskConfig"] = if (TaskConfig == null) null else TaskConfig ["DataAccessRoleArn"] = if (DataAccessRoleArn == null) null else DataAccessRoleArn ["DataLakeS3Uri"] = if (DataLakeS3Uri == null) null else DataLakeS3Uri - ["FlywheelName"] = if (FlywheelName == null) null else FlywheelName - ["Tags"] = if (Tags == null) null else Tags - ["TaskConfig"] = if (TaskConfig == null) null else TaskConfig ["DataSecurityConfig"] = if (DataSecurityConfig == null) null else DataSecurityConfig + ["Tags"] = if (Tags == null) null else Tags + ["ActiveModelArn"] = if (ActiveModelArn == null) null else ActiveModelArn + ["FlywheelName"] = if (FlywheelName == null) null else FlywheelName ["ModelType"] = if (ModelType == null) null else ModelType } diff --git a/pkl/aws/config/aggregationauthorization.pkl b/pkl/aws/config/aggregationauthorization.pkl index ac90364f..65321652 100644 --- a/pkl/aws/config/aggregationauthorization.pkl +++ b/pkl/aws/config/aggregationauthorization.pkl @@ -6,7 +6,7 @@ module aws.config.aggregationauthorization import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class AggregationAuthorizationTag { Key: String|Mapping Value: String|Mapping } @@ -24,7 +24,7 @@ open class AggregationAuthorization extends cloudformation.Resource { hidden AuthorizedAwsRegion: String|Mapping /// The tags for the AggregationAuthorization. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["AuthorizedAccountId"] = if (AuthorizedAccountId == null) null else AuthorizedAccountId diff --git a/pkl/aws/config/configrule.pkl b/pkl/aws/config/configrule.pkl index fa05a7e7..adcb7112 100644 --- a/pkl/aws/config/configrule.pkl +++ b/pkl/aws/config/configrule.pkl @@ -6,7 +6,7 @@ module aws.config.configrule import "../../cloudformation.pkl" /// Defines which resources trigger an evaluation for an CC rule. The scope can include one or more resource types, a combination of a tag key and value, or a combination of one resource type and one resource ID. Specify a scope to constrain which resources trigger an evaluation for a rule. Otherwise, evaluations for the rule are triggered when any resource in your recording group changes in configuration. -open class Scope { +open class ConfigRuleScope { TagKey: (String|Mapping)? ComplianceResourceTypes: (Listing)? TagValue: (String|Mapping)? @@ -14,34 +14,35 @@ open class Scope { } /// Provides the CustomPolicyDetails, the rule owner (```` for managed rules, ``CUSTOM_POLICY`` for Custom Policy rules, and ``CUSTOM_LAMBDA`` for Custom Lambda rules), the rule identifier, and the events that cause the evaluation of your AWS resources. -open class CustomPolicyDetails { - EnableDebugLogDelivery: (Boolean|Mapping)? +open class ConfigRuleCustomPolicyDetails { PolicyText: (String|Mapping)? PolicyRuntime: (String|Mapping)? + EnableDebugLogDelivery: (Boolean|Mapping)? } /// Provides the source and the message types that trigger CC to evaluate your AWS resources against a rule. It also provides the frequency with which you want CC to run evaluations for the rule if the trigger type is periodic. You can specify the parameter values for ``SourceDetail`` only for custom rules. -open class SourceDetail { +open class ConfigRuleSourceDetail { + MessageType: String|Mapping EventSource: String|Mapping MaximumExecutionFrequency: (String|Mapping)? - MessageType: String|Mapping } /// Provides the CustomPolicyDetails, the rule owner (```` for managed rules, ``CUSTOM_POLICY`` for Custom Policy rules, and ``CUSTOM_LAMBDA`` for Custom Lambda rules), the rule identifier, and the events that cause the evaluation of your AWS resources. -open class Source { +open class ConfigRuleSource { + CustomPolicyDetails: (ConfigRuleCustomPolicyDetails)? SourceIdentifier: (String|Mapping)? Owner: String|Mapping - SourceDetails: (Listing)? - CustomPolicyDetails: (CustomPolicyDetails)? + SourceDetails: (Listing)? } /// The configuration object for CC rule evaluation mode. The supported valid values are Detective or Proactive. -open class EvaluationModeConfiguration { +open class ConfigRuleEvaluationModeConfiguration { Mode: (String|Mapping)? } /// You must first create and start the CC configuration recorder in order to create CC managed rules with CFNlong. For more information, see [Managing the Configuration Recorder](https://docs.aws.amazon.com/config/latest/developerguide/stop-start-recorder.html). -////// Adds or updates an CC rule to evaluate if your AWS resources comply with your desired configurations. For information on how many CC rules you can have per account, see [Service Limits](https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html) in the *Developer Guide*. +/// +/// Adds or updates an CC rule to evaluate if your AWS resources comply with your desired configurations. For information on how many CC rules you can have per account, see [Service Limits](https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html) in the *Developer Guide*. /// There are two types of rules: *Managed Rules* and *Custom Rules*. You can use the ``ConfigRule`` resource to create both CC Managed Rules and CC Custom Rules. /// CC Managed Rules are predefined, customizable rules created by CC. For a list of managed rules, see [List of Managed Rules](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html). If you are adding an CC managed rule, you must specify the rule's identifier for the ``SourceIdentifier`` key. /// CC Custom Rules are rules that you create from scratch. There are two ways to create CC custom rules: with Lambda functions ([Developer Guide](https://docs.aws.amazon.com/config/latest/developerguide/gettingstarted-concepts.html#gettingstarted-concepts-function)) and with CFNGUARDshort ([Guard GitHub Repository](https://docs.aws.amazon.com/https://github.com/aws-cloudformation/cloudformation-guard)), a policy-as-code language. CC custom rules created with LAMlong are called *Custom Lambda Rules* and CC custom rules created with CFNGUARDshort are called *Custom Policy Rules*. @@ -54,44 +55,46 @@ open class ConfigRule extends cloudformation.Resource { Type = "AWS::Config::ConfigRule" - /// The description that you provide for the CC rule. - hidden Description: (String|Mapping)? + /// A string, in JSON format, that is passed to the CC rule Lambda function. + hidden InputParameters: (Dynamic)? - /// Defines which resources can trigger an evaluation for the rule. The scope can include one or more resource types, a combination of one resource type and one resource ID, or a combination of a tag key and value. Specify a scope to constrain the resources that can trigger an evaluation for the rule. If you do not specify a scope, evaluations are triggered when any resource in the recording group changes. - /// /// The scope can be empty. - hidden Scope: (Scope)? + /// A name for the CC rule. If you don't specify a name, CFN generates a unique physical ID and uses that ID for the rule name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html). + hidden ConfigRuleName: (String|Mapping)? /// Provides the rule owner (```` for managed rules, ``CUSTOM_POLICY`` for Custom Policy rules, and ``CUSTOM_LAMBDA`` for Custom Lambda rules), the rule identifier, and the notifications that cause the function to evaluate your AWS resources. - hidden Source: Source + hidden Source: ConfigRuleSource /// The modes the CC rule can be evaluated in. The valid values are distinct objects. By default, the value is Detective evaluation mode only. - hidden EvaluationModes: (Listing)? + hidden EvaluationModes: (Listing)? - /// A name for the CC rule. If you don't specify a name, CFN generates a unique physical ID and uses that ID for the rule name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html). - hidden ConfigRuleName: (String|Mapping)? + /// The description that you provide for the CC rule. + hidden Description: (String|Mapping)? + + /// Defines which resources can trigger an evaluation for the rule. The scope can include one or more resource types, a combination of one resource type and one resource ID, or a combination of a tag key and value. Specify a scope to constrain the resources that can trigger an evaluation for the rule. If you do not specify a scope, evaluations are triggered when any resource in the recording group changes. + /// + /// The scope can be empty. + hidden Scope: (ConfigRuleScope)? /// Indicates whether an AWS resource or CC rule is compliant and provides the number of contributors that affect the compliance. hidden Compliance: (Dynamic)? /// The maximum frequency with which CC runs evaluations for a rule. You can specify a value for ``MaximumExecutionFrequency`` when: - /// /// + You are using an AWS managed rule that is triggered at a periodic frequency. + /// + /// + You are using an AWS managed rule that is triggered at a periodic frequency. /// + Your custom rule is triggered when CC delivers the configuration snapshot. For more information, see [ConfigSnapshotDeliveryProperties](https://docs.aws.amazon.com/config/latest/APIReference/API_ConfigSnapshotDeliveryProperties.html). /// /// By default, rules with a periodic trigger are evaluated every 24 hours. To change the frequency, specify a valid value for the ``MaximumExecutionFrequency`` parameter. hidden MaximumExecutionFrequency: (String|Mapping)? - /// A string, in JSON format, that is passed to the CC rule Lambda function. - hidden InputParameters: (Dynamic)? - Properties { - ["Description"] = if (Description == null) null else Description - ["Scope"] = if (Scope == null) null else Scope + ["InputParameters"] = if (InputParameters == null) null else InputParameters + ["ConfigRuleName"] = if (ConfigRuleName == null) null else ConfigRuleName ["Source"] = if (Source == null) null else Source ["EvaluationModes"] = if (EvaluationModes == null) null else EvaluationModes - ["ConfigRuleName"] = if (ConfigRuleName == null) null else ConfigRuleName + ["Description"] = if (Description == null) null else Description + ["Scope"] = if (Scope == null) null else Scope ["Compliance"] = if (Compliance == null) null else Compliance ["MaximumExecutionFrequency"] = if (MaximumExecutionFrequency == null) null else MaximumExecutionFrequency - ["InputParameters"] = if (InputParameters == null) null else InputParameters } } diff --git a/pkl/aws/config/configurationaggregator.pkl b/pkl/aws/config/configurationaggregator.pkl index d72e920d..06c3063e 100644 --- a/pkl/aws/config/configurationaggregator.pkl +++ b/pkl/aws/config/configurationaggregator.pkl @@ -6,21 +6,21 @@ module aws.config.configurationaggregator import "../../cloudformation.pkl" /// -open class AccountAggregationSource { +open class ConfigurationAggregatorAccountAggregationSource { AllAwsRegions: (Boolean|Mapping)? AwsRegions: (Listing)? AccountIds: Listing } /// -open class OrganizationAggregationSource { +open class ConfigurationAggregatorOrganizationAggregationSource { + RoleArn: String|Mapping AllAwsRegions: (Boolean|Mapping)? AwsRegions: (Listing)? - RoleArn: String|Mapping } /// A key-value pair to associate with a resource. -open class Tag { +open class ConfigurationAggregatorTag { Key: String|Mapping Value: String|Mapping } @@ -31,23 +31,23 @@ open class ConfigurationAggregator extends cloudformation.Resource { Type = "AWS::Config::ConfigurationAggregator" + /// The tags for the configuration aggregator. + hidden Tags: (Listing)? + /// - hidden AccountAggregationSources: (Listing)? + hidden AccountAggregationSources: (Listing)? /// The name of the aggregator. hidden ConfigurationAggregatorName: (String(matches(Regex(#"[\w\-]+"#)))|Mapping)? /// - hidden OrganizationAggregationSource: (OrganizationAggregationSource)? - - /// The tags for the configuration aggregator. - hidden Tags: (Listing)? + hidden OrganizationAggregationSource: (ConfigurationAggregatorOrganizationAggregationSource)? Properties { + ["Tags"] = if (Tags == null) null else Tags ["AccountAggregationSources"] = if (AccountAggregationSources == null) null else AccountAggregationSources ["ConfigurationAggregatorName"] = if (ConfigurationAggregatorName == null) null else ConfigurationAggregatorName ["OrganizationAggregationSource"] = if (OrganizationAggregationSource == null) null else OrganizationAggregationSource - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/config/configurationrecorder.pkl b/pkl/aws/config/configurationrecorder.pkl index d3578c6e..622aabb5 100644 --- a/pkl/aws/config/configurationrecorder.pkl +++ b/pkl/aws/config/configurationrecorder.pkl @@ -6,34 +6,34 @@ module aws.config.configurationrecorder import "../../cloudformation.pkl" /// -open class RecordingStrategy { +open class ConfigurationRecorderRecordingStrategy { UseOnly: String|Mapping } /// -open class ExclusionByResourceTypes { +open class ConfigurationRecorderExclusionByResourceTypes { ResourceTypes: Listing } /// -open class RecordingModeOverride { +open class ConfigurationRecorderRecordingModeOverride { + Description: (String|Mapping)? ResourceTypes: Listing RecordingFrequency: String|Mapping - Description: (String|Mapping)? } /// -open class RecordingGroup { - RecordingStrategy: (RecordingStrategy)? - ExclusionByResourceTypes: (ExclusionByResourceTypes)? - AllSupported: (Boolean|Mapping)? +open class ConfigurationRecorderRecordingGroup { IncludeGlobalResourceTypes: (Boolean|Mapping)? ResourceTypes: (Listing)? + RecordingStrategy: (ConfigurationRecorderRecordingStrategy)? + ExclusionByResourceTypes: (ConfigurationRecorderExclusionByResourceTypes)? + AllSupported: (Boolean|Mapping)? } /// -open class RecordingMode { - RecordingModeOverrides: (Listing)? +open class ConfigurationRecorderRecordingMode { + RecordingModeOverrides: (Listing)? RecordingFrequency: String|Mapping } @@ -44,22 +44,22 @@ open class ConfigurationRecorder extends cloudformation.Resource { /// - hidden RoleARN: String|Mapping + hidden RecordingMode: (ConfigurationRecorderRecordingMode)? /// - hidden Name: (String|Mapping)? + hidden RoleARN: String|Mapping /// - hidden RecordingGroup: (RecordingGroup)? + hidden Name: (String|Mapping)? /// - hidden RecordingMode: (RecordingMode)? + hidden RecordingGroup: (ConfigurationRecorderRecordingGroup)? Properties { + ["RecordingMode"] = if (RecordingMode == null) null else RecordingMode ["RoleARN"] = if (RoleARN == null) null else RoleARN ["Name"] = if (Name == null) null else Name ["RecordingGroup"] = if (RecordingGroup == null) null else RecordingGroup - ["RecordingMode"] = if (RecordingMode == null) null else RecordingMode } } diff --git a/pkl/aws/config/conformancepack.pkl b/pkl/aws/config/conformancepack.pkl index 9aa6bf08..ebcf8253 100644 --- a/pkl/aws/config/conformancepack.pkl +++ b/pkl/aws/config/conformancepack.pkl @@ -5,29 +5,24 @@ module aws.config.conformancepack import "../../cloudformation.pkl" -/// Key part of key-value pair with value being parameter value -open class ParameterName { -} +typealias ConformancePackParameterValue = String|Mapping -/// Value part of key-value pair with key being parameter Name -open class ParameterValue { -} /// Input parameters in the form of key-value pairs for the conformance pack. -open class ConformancePackInputParameter { - ParameterValue: ParameterValue - ParameterName: ParameterName +open class ConformancePackConformancePackInputParameter { + ParameterName: ConformancePackParameterName + ParameterValue: ConformancePackParameterValue } +typealias ConformancePackParameterName = String|Mapping + + /// A conformance pack is a collection of AWS Config rules and remediation actions that can be easily deployed as a single entity in an account and a region or across an entire AWS Organization. open class ConformancePack extends cloudformation.Resource { Type = "AWS::Config::ConformancePack" - /// The prefix for delivery S3 bucket. - hidden DeliveryS3KeyPrefix: (String|Mapping)? - /// A string containing full conformance pack template body. You can only specify one of the template body or template S3Uri fields. hidden TemplateBody: (String|Mapping)? @@ -38,7 +33,7 @@ open class ConformancePack extends cloudformation.Resource { hidden TemplateSSMDocumentDetails: (Dynamic)? /// A list of ConformancePackInputParameter objects. - hidden ConformancePackInputParameters: (Listing)? + hidden ConformancePackInputParameters: (Listing)? /// Name of the conformance pack which will be assigned as the unique identifier. hidden ConformancePackName: String(matches(Regex(#"[a-zA-Z][-a-zA-Z0-9]*"#)))|Mapping @@ -46,14 +41,17 @@ open class ConformancePack extends cloudformation.Resource { /// AWS Config stores intermediate files while processing conformance pack template. hidden DeliveryS3Bucket: (String|Mapping)? + /// The prefix for delivery S3 bucket. + hidden DeliveryS3KeyPrefix: (String|Mapping)? + Properties { - ["DeliveryS3KeyPrefix"] = if (DeliveryS3KeyPrefix == null) null else DeliveryS3KeyPrefix ["TemplateBody"] = if (TemplateBody == null) null else TemplateBody ["TemplateS3Uri"] = if (TemplateS3Uri == null) null else TemplateS3Uri ["TemplateSSMDocumentDetails"] = if (TemplateSSMDocumentDetails == null) null else TemplateSSMDocumentDetails ["ConformancePackInputParameters"] = if (ConformancePackInputParameters == null) null else ConformancePackInputParameters ["ConformancePackName"] = if (ConformancePackName == null) null else ConformancePackName ["DeliveryS3Bucket"] = if (DeliveryS3Bucket == null) null else DeliveryS3Bucket + ["DeliveryS3KeyPrefix"] = if (DeliveryS3KeyPrefix == null) null else DeliveryS3KeyPrefix } } diff --git a/pkl/aws/config/deliverychannel.pkl b/pkl/aws/config/deliverychannel.pkl index 6963397d..bf11cc60 100644 --- a/pkl/aws/config/deliverychannel.pkl +++ b/pkl/aws/config/deliverychannel.pkl @@ -6,7 +6,7 @@ module aws.config.deliverychannel import "../../cloudformation.pkl" /// -open class ConfigSnapshotDeliveryProperties { +open class DeliveryChannelConfigSnapshotDeliveryProperties { DeliveryFrequency: (String|Mapping)? } @@ -26,7 +26,7 @@ open class DeliveryChannel extends cloudformation.Resource { hidden S3KeyPrefix: (String|Mapping)? /// - hidden ConfigSnapshotDeliveryProperties: (ConfigSnapshotDeliveryProperties)? + hidden ConfigSnapshotDeliveryProperties: (DeliveryChannelConfigSnapshotDeliveryProperties)? /// hidden S3BucketName: String|Mapping diff --git a/pkl/aws/config/organizationconfigrule.pkl b/pkl/aws/config/organizationconfigrule.pkl index 3d56535d..5299570f 100644 --- a/pkl/aws/config/organizationconfigrule.pkl +++ b/pkl/aws/config/organizationconfigrule.pkl @@ -6,43 +6,43 @@ module aws.config.organizationconfigrule import "../../cloudformation.pkl" /// -open class OrganizationManagedRuleMetadata { - ResourceTypesScope: (Listing)? - MaximumExecutionFrequency: (String|Mapping)? - InputParameters: (String|Mapping)? +open class OrganizationConfigRuleOrganizationManagedRuleMetadata { TagKeyScope: (String|Mapping)? TagValueScope: (String|Mapping)? Description: (String|Mapping)? ResourceIdScope: (String|Mapping)? RuleIdentifier: String|Mapping + ResourceTypesScope: (Listing)? + MaximumExecutionFrequency: (String|Mapping)? + InputParameters: (String|Mapping)? } /// -open class OrganizationCustomRuleMetadata { - ResourceTypesScope: (Listing)? - TagValueScope: (String|Mapping)? - Description: (String|Mapping)? +open class OrganizationConfigRuleOrganizationCustomRuleMetadata { ResourceIdScope: (String|Mapping)? LambdaFunctionArn: String|Mapping OrganizationConfigRuleTriggerTypes: Listing + Description: (String|Mapping)? + TagValueScope: (String|Mapping)? + ResourceTypesScope: (Listing)? MaximumExecutionFrequency: (String|Mapping)? InputParameters: (String|Mapping)? TagKeyScope: (String|Mapping)? } /// -open class OrganizationCustomPolicyRuleMetadata { - DebugLogDeliveryAccounts: (Listing)? - ResourceTypesScope: (Listing)? +open class OrganizationConfigRuleOrganizationCustomPolicyRuleMetadata { TagKeyScope: (String|Mapping)? TagValueScope: (String|Mapping)? - Runtime: String|Mapping - PolicyText: String|Mapping Description: (String|Mapping)? ResourceIdScope: (String|Mapping)? + DebugLogDeliveryAccounts: (Listing)? + InputParameters: (String|Mapping)? + Runtime: String|Mapping + PolicyText: String|Mapping OrganizationConfigRuleTriggerTypes: (Listing)? + ResourceTypesScope: (Listing)? MaximumExecutionFrequency: (String|Mapping)? - InputParameters: (String|Mapping)? } /// Resource Type definition for AWS::Config::OrganizationConfigRule @@ -52,26 +52,26 @@ open class OrganizationConfigRule extends cloudformation.Resource { /// - hidden OrganizationManagedRuleMetadata: (OrganizationManagedRuleMetadata)? + hidden OrganizationCustomRuleMetadata: (OrganizationConfigRuleOrganizationCustomRuleMetadata)? /// - hidden ExcludedAccounts: (Listing)? + hidden OrganizationManagedRuleMetadata: (OrganizationConfigRuleOrganizationManagedRuleMetadata)? /// - hidden OrganizationConfigRuleName: String|Mapping + hidden ExcludedAccounts: (Listing)? /// - hidden OrganizationCustomPolicyRuleMetadata: (OrganizationCustomPolicyRuleMetadata)? + hidden OrganizationConfigRuleName: String|Mapping /// - hidden OrganizationCustomRuleMetadata: (OrganizationCustomRuleMetadata)? + hidden OrganizationCustomPolicyRuleMetadata: (OrganizationConfigRuleOrganizationCustomPolicyRuleMetadata)? Properties { + ["OrganizationCustomRuleMetadata"] = if (OrganizationCustomRuleMetadata == null) null else OrganizationCustomRuleMetadata ["OrganizationManagedRuleMetadata"] = if (OrganizationManagedRuleMetadata == null) null else OrganizationManagedRuleMetadata ["ExcludedAccounts"] = if (ExcludedAccounts == null) null else ExcludedAccounts ["OrganizationConfigRuleName"] = if (OrganizationConfigRuleName == null) null else OrganizationConfigRuleName ["OrganizationCustomPolicyRuleMetadata"] = if (OrganizationCustomPolicyRuleMetadata == null) null else OrganizationCustomPolicyRuleMetadata - ["OrganizationCustomRuleMetadata"] = if (OrganizationCustomRuleMetadata == null) null else OrganizationCustomRuleMetadata } } diff --git a/pkl/aws/config/organizationconformancepack.pkl b/pkl/aws/config/organizationconformancepack.pkl index 2a43f14e..3e7589d4 100644 --- a/pkl/aws/config/organizationconformancepack.pkl +++ b/pkl/aws/config/organizationconformancepack.pkl @@ -5,23 +5,20 @@ module aws.config.organizationconformancepack import "../../cloudformation.pkl" -/// -open class ParameterValue { -} +typealias OrganizationConformancePackAccountId = String|Mapping -/// -open class AccountId { -} /// Input parameters in the form of key-value pairs for the conformance pack. -open class ConformancePackInputParameter { - ParameterValue: ParameterValue - ParameterName: ParameterName +open class OrganizationConformancePackConformancePackInputParameter { + ParameterName: OrganizationConformancePackParameterName + ParameterValue: OrganizationConformancePackParameterValue } -/// -open class ParameterName { -} +typealias OrganizationConformancePackParameterName = String|Mapping + + +typealias OrganizationConformancePackParameterValue = String|Mapping + /// Resource schema for AWS::Config::OrganizationConformancePack. open class OrganizationConformancePack extends cloudformation.Resource { @@ -29,6 +26,12 @@ open class OrganizationConformancePack extends cloudformation.Resource { Type = "AWS::Config::OrganizationConformancePack" + /// Location of file containing the template body. + hidden TemplateS3Uri: (String(matches(Regex(#"s3://.*"#)))|Mapping)? + + /// A string containing full conformance pack template body. + hidden TemplateBody: (String|Mapping)? + /// AWS Config stores intermediate files while processing conformance pack template. hidden DeliveryS3Bucket: (String|Mapping)? @@ -36,28 +39,22 @@ open class OrganizationConformancePack extends cloudformation.Resource { hidden DeliveryS3KeyPrefix: (String|Mapping)? /// A list of ConformancePackInputParameter objects. - hidden ConformancePackInputParameters: (Listing)? + hidden ConformancePackInputParameters: (Listing)? /// A list of AWS accounts to be excluded from an organization conformance pack while deploying a conformance pack. - hidden ExcludedAccounts: (Listing)? + hidden ExcludedAccounts: (Listing)? /// The name of the organization conformance pack. hidden OrganizationConformancePackName: String(matches(Regex(#"[a-zA-Z][-a-zA-Z0-9]*"#)))|Mapping - /// Location of file containing the template body. - hidden TemplateS3Uri: (String(matches(Regex(#"s3://.*"#)))|Mapping)? - - /// A string containing full conformance pack template body. - hidden TemplateBody: (String|Mapping)? - Properties { + ["TemplateS3Uri"] = if (TemplateS3Uri == null) null else TemplateS3Uri + ["TemplateBody"] = if (TemplateBody == null) null else TemplateBody ["DeliveryS3Bucket"] = if (DeliveryS3Bucket == null) null else DeliveryS3Bucket ["DeliveryS3KeyPrefix"] = if (DeliveryS3KeyPrefix == null) null else DeliveryS3KeyPrefix ["ConformancePackInputParameters"] = if (ConformancePackInputParameters == null) null else ConformancePackInputParameters ["ExcludedAccounts"] = if (ExcludedAccounts == null) null else ExcludedAccounts ["OrganizationConformancePackName"] = if (OrganizationConformancePackName == null) null else OrganizationConformancePackName - ["TemplateS3Uri"] = if (TemplateS3Uri == null) null else TemplateS3Uri - ["TemplateBody"] = if (TemplateBody == null) null else TemplateBody } } diff --git a/pkl/aws/config/remediationconfiguration.pkl b/pkl/aws/config/remediationconfiguration.pkl index 6b3ce111..bb394640 100644 --- a/pkl/aws/config/remediationconfiguration.pkl +++ b/pkl/aws/config/remediationconfiguration.pkl @@ -6,12 +6,12 @@ module aws.config.remediationconfiguration import "../../cloudformation.pkl" /// -open class ExecutionControls { - SsmControls: (SsmControls)? +open class RemediationConfigurationExecutionControls { + SsmControls: (RemediationConfigurationSsmControls)? } /// -open class SsmControls { +open class RemediationConfigurationSsmControls { ErrorPercentage: (Int|Mapping)? ConcurrentExecutionRatePercentage: (Int|Mapping)? } @@ -23,46 +23,46 @@ open class RemediationConfiguration extends cloudformation.Resource { /// - hidden TargetId: String|Mapping + hidden TargetType: String|Mapping /// - hidden Automatic: (Boolean|Mapping)? + hidden RetryAttemptSeconds: (Int|Mapping)? /// - hidden ExecutionControls: (ExecutionControls)? + hidden MaximumAutomaticAttempts: (Int|Mapping)? /// - hidden Parameters: (Dynamic)? + hidden TargetVersion: (String|Mapping)? /// - hidden ConfigRuleName: String|Mapping + hidden ExecutionControls: (RemediationConfigurationExecutionControls)? /// - hidden MaximumAutomaticAttempts: (Int|Mapping)? + hidden ResourceType: (String|Mapping)? /// - hidden TargetVersion: (String|Mapping)? + hidden TargetId: String|Mapping /// - hidden TargetType: String|Mapping + hidden Automatic: (Boolean|Mapping)? /// - hidden ResourceType: (String|Mapping)? + hidden Parameters: (Dynamic)? /// - hidden RetryAttemptSeconds: (Int|Mapping)? + hidden ConfigRuleName: String|Mapping Properties { + ["TargetType"] = if (TargetType == null) null else TargetType + ["RetryAttemptSeconds"] = if (RetryAttemptSeconds == null) null else RetryAttemptSeconds + ["MaximumAutomaticAttempts"] = if (MaximumAutomaticAttempts == null) null else MaximumAutomaticAttempts + ["TargetVersion"] = if (TargetVersion == null) null else TargetVersion + ["ExecutionControls"] = if (ExecutionControls == null) null else ExecutionControls + ["ResourceType"] = if (ResourceType == null) null else ResourceType ["TargetId"] = if (TargetId == null) null else TargetId ["Automatic"] = if (Automatic == null) null else Automatic - ["ExecutionControls"] = if (ExecutionControls == null) null else ExecutionControls ["Parameters"] = if (Parameters == null) null else Parameters ["ConfigRuleName"] = if (ConfigRuleName == null) null else ConfigRuleName - ["MaximumAutomaticAttempts"] = if (MaximumAutomaticAttempts == null) null else MaximumAutomaticAttempts - ["TargetVersion"] = if (TargetVersion == null) null else TargetVersion - ["TargetType"] = if (TargetType == null) null else TargetType - ["ResourceType"] = if (ResourceType == null) null else ResourceType - ["RetryAttemptSeconds"] = if (RetryAttemptSeconds == null) null else RetryAttemptSeconds } } diff --git a/pkl/aws/config/storedquery.pkl b/pkl/aws/config/storedquery.pkl index 97494fe1..12764b29 100644 --- a/pkl/aws/config/storedquery.pkl +++ b/pkl/aws/config/storedquery.pkl @@ -6,7 +6,7 @@ module aws.config.storedquery import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class StoredQueryTag { Key: String|Mapping Value: String|Mapping } @@ -27,7 +27,7 @@ open class StoredQuery extends cloudformation.Resource { hidden QueryExpression: String(matches(Regex(#"[\s\S]*"#)))|Mapping /// The tags for the stored query. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["QueryName"] = if (QueryName == null) null else QueryName diff --git a/pkl/aws/connect/approvedorigin.pkl b/pkl/aws/connect/approvedorigin.pkl index 933e62e6..74f877e1 100644 --- a/pkl/aws/connect/approvedorigin.pkl +++ b/pkl/aws/connect/approvedorigin.pkl @@ -5,13 +5,11 @@ module aws.connect.approvedorigin import "../../cloudformation.pkl" -/// Domain name to be added to the allowlist of instance -open class Origin { -} +typealias ApprovedOriginOrigin = String|Mapping + + +typealias ApprovedOriginInstanceId = String|Mapping -/// Amazon Connect instance identifier -open class InstanceId { -} /// Resource Type definition for AWS::Connect::ApprovedOrigin open class ApprovedOrigin extends cloudformation.Resource { @@ -20,10 +18,10 @@ open class ApprovedOrigin extends cloudformation.Resource { /// - hidden Origin: Origin + hidden Origin: ApprovedOriginOrigin /// - hidden InstanceId: InstanceId + hidden InstanceId: ApprovedOriginInstanceId Properties { ["Origin"] = if (Origin == null) null else Origin diff --git a/pkl/aws/connect/contactflow.pkl b/pkl/aws/connect/contactflow.pkl index 17429516..3ab03cf4 100644 --- a/pkl/aws/connect/contactflow.pkl +++ b/pkl/aws/connect/contactflow.pkl @@ -6,7 +6,7 @@ module aws.connect.contactflow import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class ContactFlowTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping Value: String|Mapping } @@ -17,6 +17,9 @@ open class ContactFlow extends cloudformation.Resource { Type = "AWS::Connect::ContactFlow" + /// The identifier of the Amazon Connect instance (ARN). + hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + /// The name of the contact flow. hidden Name: String|Mapping @@ -33,19 +36,16 @@ open class ContactFlow extends cloudformation.Resource { hidden TypeProperty: ContactFlowType|Mapping /// One or more tags. - hidden Tags: (Listing)? - - /// The identifier of the Amazon Connect instance (ARN). - hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + hidden Tags: (Listing)? Properties { + ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn ["Name"] = if (Name == null) null else Name ["Content"] = if (Content == null) null else Content ["Description"] = if (Description == null) null else Description ["State"] = if (State == null) null else State ["Type"] = if (TypeProperty == null) null else TypeProperty ["Tags"] = if (Tags == null) null else Tags - ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn } } diff --git a/pkl/aws/connect/contactflowmodule.pkl b/pkl/aws/connect/contactflowmodule.pkl index a8fa5f3a..fb86fcaa 100644 --- a/pkl/aws/connect/contactflowmodule.pkl +++ b/pkl/aws/connect/contactflowmodule.pkl @@ -6,7 +6,7 @@ module aws.connect.contactflowmodule import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class ContactFlowModuleTag { Key: String|Mapping Value: String|Mapping } @@ -17,6 +17,12 @@ open class ContactFlowModule extends cloudformation.Resource { Type = "AWS::Connect::ContactFlowModule" + /// The name of the contact flow module. + hidden Name: String(matches(Regex(#".*\S.*"#)))|Mapping + + /// The content of the contact flow module in JSON format. + hidden Content: String|Mapping + /// The description of the contact flow module. hidden Description: (String(matches(Regex(#".*\S.*"#)))|Mapping)? @@ -24,24 +30,18 @@ open class ContactFlowModule extends cloudformation.Resource { hidden State: (String|Mapping)? /// One or more tags. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// The identifier of the Amazon Connect instance (ARN). hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping - /// The name of the contact flow module. - hidden Name: String(matches(Regex(#".*\S.*"#)))|Mapping - - /// The content of the contact flow module in JSON format. - hidden Content: String|Mapping - Properties { + ["Name"] = if (Name == null) null else Name + ["Content"] = if (Content == null) null else Content ["Description"] = if (Description == null) null else Description ["State"] = if (State == null) null else State ["Tags"] = if (Tags == null) null else Tags ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn - ["Name"] = if (Name == null) null else Name - ["Content"] = if (Content == null) null else Content } } diff --git a/pkl/aws/connect/evaluationform.pkl b/pkl/aws/connect/evaluationform.pkl index 383d64a2..db182513 100644 --- a/pkl/aws/connect/evaluationform.pkl +++ b/pkl/aws/connect/evaluationform.pkl @@ -5,136 +5,133 @@ module aws.connect.evaluationform import "../../cloudformation.pkl" -/// The score of an answer option. -open class Score { -} +typealias EvaluationFormQuestionQuestionType = "NUMERIC"|"SINGLESELECT"|"TEXT" -/// The evaluation form section. -open class EvaluationFormSection { +/// The evaluation form question. +open class EvaluationFormEvaluationFormQuestion { Title: String|Mapping Instructions: (String|Mapping)? - RefId: RefId - Items: (Listing)? - Weight: (Weight)? -} - -/// The properties of the numeric question. -open class EvaluationFormNumericQuestionProperties { - MinValue: Int|Mapping - MaxValue: Int|Mapping - Options: (Listing)? - Automation: (EvaluationFormNumericQuestionAutomation)? + RefId: EvaluationFormRefId + NotApplicableEnabled: (Boolean|Mapping)? + QuestionType: EvaluationFormQuestionQuestionType|Mapping + QuestionTypeProperties: (EvaluationFormEvaluationFormQuestionTypeProperties)? + Weight: (EvaluationFormWeight)? } -typealias EvaluationFormSingleSelectQuestionPropertiesDisplayAs = "DROPDOWN"|"RADIO" - -/// The properties of the single-select question. -open class EvaluationFormSingleSelectQuestionProperties { - Options: Listing - DisplayAs: (EvaluationFormSingleSelectQuestionPropertiesDisplayAs|Mapping)? - Automation: (EvaluationFormSingleSelectQuestionAutomation)? +/// The evaluation form item. +open class EvaluationFormEvaluationFormItem { + Question: (EvaluationFormEvaluationFormQuestion)? + Section: (EvaluationFormEvaluationFormSection)? } -/// The properties of the question. -open class EvaluationFormQuestionTypeProperties { - Numeric: (EvaluationFormNumericQuestionProperties)? - SingleSelect: (EvaluationFormSingleSelectQuestionProperties)? -} +typealias EvaluationFormWeight = Number|Mapping -/// The identifier to reference the item. -open class RefId { -} /// The automation properties for the numeric question. -open class EvaluationFormNumericQuestionAutomation { - PropertyValue: NumericQuestionPropertyValueAutomation -} - -typealias NumericQuestionPropertyValueAutomationLabel = "OVERALL_CUSTOMER_SENTIMENT_SCORE"|"OVERALL_AGENT_SENTIMENT_SCORE"|"NON_TALK_TIME"|"NON_TALK_TIME_PERCENTAGE"|"NUMBER_OF_INTERRUPTIONS"|"CONTACT_DURATION"|"AGENT_INTERACTION_DURATION"|"CUSTOMER_HOLD_TIME" - -/// The automation property name of the question. -open class NumericQuestionPropertyValueAutomation { - Label: NumericQuestionPropertyValueAutomationLabel|Mapping +open class EvaluationFormEvaluationFormNumericQuestionAutomation { + PropertyValue: EvaluationFormNumericQuestionPropertyValueAutomation } -/// The evaluation form item. -open class EvaluationFormItem { - Question: (EvaluationFormQuestion)? - Section: (EvaluationFormSection)? +/// The automation properties for the single-select question. +open class EvaluationFormEvaluationFormSingleSelectQuestionAutomation { + Options: Listing + DefaultOptionRefId: (EvaluationFormRefId)? } /// The option ranges used for scoring in numeric questions. -open class EvaluationFormNumericQuestionOption { - Score: (Score)? - AutomaticFail: (Boolean|Mapping)? +open class EvaluationFormEvaluationFormNumericQuestionOption { MinValue: Int|Mapping MaxValue: Int|Mapping + Score: (EvaluationFormScore)? + AutomaticFail: (Boolean|Mapping)? } -/// The automation option for the single-select question. -open class EvaluationFormSingleSelectQuestionAutomationOption { - RuleCategory: SingleSelectQuestionRuleCategoryAutomation +typealias SingleSelectQuestionRuleCategoryAutomationCondition = "PRESENT"|"NOT_PRESENT" + +/// The automation option based on Rules categories. +open class EvaluationFormSingleSelectQuestionRuleCategoryAutomation { + Category: String|Mapping + Condition: SingleSelectQuestionRuleCategoryAutomationCondition|Mapping + OptionRefId: EvaluationFormRefId } /// The option for a question. -open class EvaluationFormSingleSelectQuestionOption { - Score: (Score)? - AutomaticFail: (Boolean|Mapping)? - RefId: RefId +open class EvaluationFormEvaluationFormSingleSelectQuestionOption { + RefId: EvaluationFormRefId Text: String|Mapping + Score: (EvaluationFormScore)? + AutomaticFail: (Boolean|Mapping)? } -typealias EvaluationFormQuestionQuestionType = "NUMERIC"|"SINGLESELECT"|"TEXT" +typealias NumericQuestionPropertyValueAutomationLabel = "OVERALL_CUSTOMER_SENTIMENT_SCORE"|"OVERALL_AGENT_SENTIMENT_SCORE"|"NON_TALK_TIME"|"NON_TALK_TIME_PERCENTAGE"|"NUMBER_OF_INTERRUPTIONS"|"CONTACT_DURATION"|"AGENT_INTERACTION_DURATION"|"CUSTOMER_HOLD_TIME" -/// The evaluation form question. -open class EvaluationFormQuestion { - QuestionTypeProperties: (EvaluationFormQuestionTypeProperties)? - Weight: (Weight)? - Title: String|Mapping - Instructions: (String|Mapping)? - RefId: RefId - NotApplicableEnabled: (Boolean|Mapping)? - QuestionType: EvaluationFormQuestionQuestionType|Mapping +/// The automation property name of the question. +open class EvaluationFormNumericQuestionPropertyValueAutomation { + Label: NumericQuestionPropertyValueAutomationLabel|Mapping } -typealias ScoringStrategyMode = "QUESTION_ONLY"|"SECTION_ONLY" +/// A key-value pair to associate with a resource. +open class EvaluationFormTag { + Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping +} -typealias ScoringStrategyStatus = "ENABLED"|"DISABLED" +typealias EvaluationFormScore = Int|Mapping -/// The scoring strategy. -open class ScoringStrategy { - Mode: ScoringStrategyMode|Mapping - Status: ScoringStrategyStatus|Mapping + +/// The evaluation form section. +open class EvaluationFormEvaluationFormSection { + Title: String|Mapping + Instructions: (String|Mapping)? + RefId: EvaluationFormRefId + Items: (Listing)? + Weight: (EvaluationFormWeight)? } -/// A key-value pair to associate with a resource. -open class Tag { - Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping - Value: String|Mapping +/// The automation option for the single-select question. +open class EvaluationFormEvaluationFormSingleSelectQuestionAutomationOption { + RuleCategory: EvaluationFormSingleSelectQuestionRuleCategoryAutomation } /// The evaluation form base item. -open class EvaluationFormBaseItem { - Section: EvaluationFormSection +open class EvaluationFormEvaluationFormBaseItem { + Section: EvaluationFormEvaluationFormSection } -typealias SingleSelectQuestionRuleCategoryAutomationCondition = "PRESENT"|"NOT_PRESENT" +/// The properties of the numeric question. +open class EvaluationFormEvaluationFormNumericQuestionProperties { + MinValue: Int|Mapping + MaxValue: Int|Mapping + Options: (Listing)? + Automation: (EvaluationFormEvaluationFormNumericQuestionAutomation)? +} -/// The automation option based on Rules categories. -open class SingleSelectQuestionRuleCategoryAutomation { - Category: String|Mapping - Condition: SingleSelectQuestionRuleCategoryAutomationCondition|Mapping - OptionRefId: RefId +typealias EvaluationFormRefId = String|Mapping + + +typealias EvaluationFormSingleSelectQuestionPropertiesDisplayAs = "DROPDOWN"|"RADIO" + +/// The properties of the single-select question. +open class EvaluationFormEvaluationFormSingleSelectQuestionProperties { + Options: Listing + DisplayAs: (EvaluationFormSingleSelectQuestionPropertiesDisplayAs|Mapping)? + Automation: (EvaluationFormEvaluationFormSingleSelectQuestionAutomation)? } -/// The automation properties for the single-select question. -open class EvaluationFormSingleSelectQuestionAutomation { - Options: Listing - DefaultOptionRefId: (RefId)? +/// The properties of the question. +open class EvaluationFormEvaluationFormQuestionTypeProperties { + Numeric: (EvaluationFormEvaluationFormNumericQuestionProperties)? + SingleSelect: (EvaluationFormEvaluationFormSingleSelectQuestionProperties)? } -/// The item weight used for scoring. -open class Weight { +typealias ScoringStrategyMode = "QUESTION_ONLY"|"SECTION_ONLY" + +typealias ScoringStrategyStatus = "ENABLED"|"DISABLED" + +/// The scoring strategy. +open class EvaluationFormScoringStrategy { + Mode: ScoringStrategyMode|Mapping + Status: ScoringStrategyStatus|Mapping } /// Resource Type definition for AWS::Connect::EvaluationForm @@ -143,6 +140,12 @@ open class EvaluationForm extends cloudformation.Resource { Type = "AWS::Connect::EvaluationForm" + /// The status of the evaluation form. + hidden Status: EvaluationFormStatus|Mapping + + /// One or more tags. + hidden Tags: (Listing)? + /// The title of the evaluation form. hidden Title: String|Mapping @@ -153,25 +156,19 @@ open class EvaluationForm extends cloudformation.Resource { hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping /// The list of evaluation form items. - hidden Items: Listing + hidden Items: Listing /// The scoring strategy. - hidden ScoringStrategy: (ScoringStrategy)? - - /// The status of the evaluation form. - hidden Status: EvaluationFormStatus|Mapping - - /// One or more tags. - hidden Tags: (Listing)? + hidden ScoringStrategy: (EvaluationFormScoringStrategy)? Properties { + ["Status"] = if (Status == null) null else Status + ["Tags"] = if (Tags == null) null else Tags ["Title"] = if (Title == null) null else Title ["Description"] = if (Description == null) null else Description ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn ["Items"] = if (Items == null) null else Items ["ScoringStrategy"] = if (ScoringStrategy == null) null else ScoringStrategy - ["Status"] = if (Status == null) null else Status - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/connect/hoursofoperation.pkl b/pkl/aws/connect/hoursofoperation.pkl index dd279728..021e2fa4 100644 --- a/pkl/aws/connect/hoursofoperation.pkl +++ b/pkl/aws/connect/hoursofoperation.pkl @@ -5,33 +5,39 @@ module aws.connect.hoursofoperation import "../../cloudformation.pkl" -/// The start time or end time for an hours of operation. -open class HoursOfOperationTimeSlice { - Hours: Int|Mapping - Minutes: Int|Mapping -} - typealias HoursOfOperationConfigDay = "SUNDAY"|"MONDAY"|"TUESDAY"|"WEDNESDAY"|"THURSDAY"|"FRIDAY"|"SATURDAY" /// Contains information about the hours of operation. -open class HoursOfOperationConfig { +open class HoursOfOperationHoursOfOperationConfig { + StartTime: HoursOfOperationHoursOfOperationTimeSlice + EndTime: HoursOfOperationHoursOfOperationTimeSlice Day: HoursOfOperationConfigDay|Mapping - StartTime: HoursOfOperationTimeSlice - EndTime: HoursOfOperationTimeSlice } /// A key-value pair to associate with a resource. -open class Tag { +open class HoursOfOperationTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping Value: String|Mapping } +/// The start time or end time for an hours of operation. +open class HoursOfOperationHoursOfOperationTimeSlice { + Minutes: Int|Mapping + Hours: Int|Mapping +} + /// Resource Type definition for AWS::Connect::HoursOfOperation open class HoursOfOperation extends cloudformation.Resource { Type = "AWS::Connect::HoursOfOperation" + /// One or more tags. + hidden Tags: (Listing)? + + /// The identifier of the Amazon Connect instance. + hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + /// The name of the hours of operation. hidden Name: String|Mapping @@ -42,21 +48,15 @@ open class HoursOfOperation extends cloudformation.Resource { hidden TimeZone: String|Mapping /// Configuration information for the hours of operation: day, start time, and end time. - hidden Config: Listing - - /// One or more tags. - hidden Tags: (Listing)? - - /// The identifier of the Amazon Connect instance. - hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + hidden Config: Listing Properties { + ["Tags"] = if (Tags == null) null else Tags + ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn ["Name"] = if (Name == null) null else Name ["Description"] = if (Description == null) null else Description ["TimeZone"] = if (TimeZone == null) null else TimeZone ["Config"] = if (Config == null) null else Config - ["Tags"] = if (Tags == null) null else Tags - ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn } } diff --git a/pkl/aws/connect/instance.pkl b/pkl/aws/connect/instance.pkl index 43c641c4..9f418cb1 100644 --- a/pkl/aws/connect/instance.pkl +++ b/pkl/aws/connect/instance.pkl @@ -5,50 +5,43 @@ module aws.connect.instance import "../../cloudformation.pkl" -/// Boolean flag which enables CONTACT_LENS on an instance. -open class ContactLens { -} +typealias InstanceContactLens = Boolean|Mapping + + +typealias InstanceEarlyMedia = Boolean|Mapping -/// Boolean flag which enables AUTO_RESOLVE_BEST_VOICES on an instance. -open class AutoResolveBestVoices { -} -/// Boolean flag which enables EARLY_MEDIA on an instance. -open class EarlyMedia { +/// +open class InstanceAttributes { + InboundCalls: InstanceInboundCalls + OutboundCalls: InstanceOutboundCalls + ContactflowLogs: (InstanceContactflowLogs)? + ContactLens: (InstanceContactLens)? + AutoResolveBestVoices: (InstanceAutoResolveBestVoices)? + UseCustomTTSVoices: (InstanceUseCustomTTSVoices)? + EarlyMedia: (InstanceEarlyMedia)? } /// A key-value pair to associate with a resource. -open class Tag { +open class InstanceTag { Key: String|Mapping Value: String|Mapping } -/// Mandatory element which enables inbound calls on new instance. -open class InboundCalls { -} +typealias InstanceInboundCalls = Boolean|Mapping -/// Boolean flag which enables CONTACTFLOW_LOGS on an instance. -open class ContactflowLogs { -} -/// Boolean flag which enables USE_CUSTOM_TTS_VOICES on an instance. -open class UseCustomTTSVoices { -} +typealias InstanceOutboundCalls = Boolean|Mapping -/// -open class Attributes { - UseCustomTTSVoices: (UseCustomTTSVoices)? - EarlyMedia: (EarlyMedia)? - InboundCalls: InboundCalls - OutboundCalls: OutboundCalls - ContactflowLogs: (ContactflowLogs)? - ContactLens: (ContactLens)? - AutoResolveBestVoices: (AutoResolveBestVoices)? -} -/// Mandatory element which enables outbound calls on new instance. -open class OutboundCalls { -} +typealias InstanceContactflowLogs = Boolean|Mapping + + +typealias InstanceAutoResolveBestVoices = Boolean|Mapping + + +typealias InstanceUseCustomTTSVoices = Boolean|Mapping + /// Resource Type definition for AWS::Connect::Instance open class Instance extends cloudformation.Resource { @@ -56,26 +49,26 @@ open class Instance extends cloudformation.Resource { Type = "AWS::Connect::Instance" + /// Specifies the type of directory integration for new instance. + hidden IdentityManagementType: InstanceIdentityManagementType|Mapping + + /// The attributes for the instance. + hidden Attributes: InstanceAttributes + /// Alias of the new directory created as part of new instance creation. hidden InstanceAlias: (String(matches(Regex(#"^(?!d-)([\da-zA-Z]+)([-]*[\da-zA-Z])*$"#)))|Mapping)? /// Existing directoryId user wants to map to the new Connect instance. hidden DirectoryId: (String(matches(Regex(#"^d-[0-9a-f]{10}$"#)))|Mapping)? - /// The attributes for the instance. - hidden Attributes: Attributes - - /// Specifies the type of directory integration for new instance. - hidden IdentityManagementType: InstanceIdentityManagementType|Mapping - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { + ["IdentityManagementType"] = if (IdentityManagementType == null) null else IdentityManagementType + ["Attributes"] = if (Attributes == null) null else Attributes ["InstanceAlias"] = if (InstanceAlias == null) null else InstanceAlias ["DirectoryId"] = if (DirectoryId == null) null else DirectoryId - ["Attributes"] = if (Attributes == null) null else Attributes - ["IdentityManagementType"] = if (IdentityManagementType == null) null else IdentityManagementType ["Tags"] = if (Tags == null) null else Tags } diff --git a/pkl/aws/connect/instancestorageconfig.pkl b/pkl/aws/connect/instancestorageconfig.pkl index 5c6a9986..0cdc3eea 100644 --- a/pkl/aws/connect/instancestorageconfig.pkl +++ b/pkl/aws/connect/instancestorageconfig.pkl @@ -5,76 +5,66 @@ module aws.connect.instancestorageconfig import "../../cloudformation.pkl" -/// An ARN is a unique AWS resource identifier. -open class KinesisStreamArn { -} +typealias InstanceStorageConfigEncryptionType = String|Mapping -/// An associationID is automatically generated when a storage config is associated with an instance -open class AssociationId { -} -/// Prefixes are used to infer logical hierarchy -open class Prefix { +/// +open class InstanceStorageConfigKinesisFirehoseConfig { + FirehoseArn: InstanceStorageConfigFirehoseDeliveryStreamArn } -/// Specifies default encryption using AWS KMS-Managed Keys -open class EncryptionType { -} +typealias InstanceStorageConfigFirehoseDeliveryStreamArn = String|Mapping + /// -open class S3Config { - BucketName: BucketName - BucketPrefix: Prefix - EncryptionConfig: (EncryptionConfig)? +open class InstanceStorageConfigEncryptionConfig { + EncryptionType: InstanceStorageConfigEncryptionType + KeyId: InstanceStorageConfigKeyId } +typealias InstanceStorageConfigAssociationId = String|Mapping + + /// -open class KinesisStreamConfig { - StreamArn: KinesisStreamArn +open class InstanceStorageConfigKinesisVideoStreamConfig { + Prefix: InstanceStorageConfigPrefix + RetentionPeriodHours: InstanceStorageConfigHours + EncryptionConfig: InstanceStorageConfigEncryptionConfig } -/// Specifies the storage type to be associated with the instance -open class StorageType { -} +typealias InstanceStorageConfigHours = Number|Mapping -/// A name for the S3 Bucket -open class BucketName { -} -/// An ARN is a unique AWS resource identifier. -open class FirehoseDeliveryStreamArn { -} +typealias InstanceStorageConfigKinesisStreamArn = String|Mapping + + +typealias InstanceStorageConfigStorageType = String|Mapping + /// -open class EncryptionConfig { - EncryptionType: EncryptionType - KeyId: KeyId +open class InstanceStorageConfigKinesisStreamConfig { + StreamArn: InstanceStorageConfigKinesisStreamArn } -/// Specifies the type of storage resource available for the instance -open class InstanceStorageResourceType { -} +typealias InstanceStorageConfigKeyId = String|Mapping -/// Number of hours -open class Hours { -} -/// Specifies the encryption key id -open class KeyId { -} +typealias InstanceStorageConfigBucketName = String|Mapping -/// -open class KinesisVideoStreamConfig { - Prefix: Prefix - RetentionPeriodHours: Hours - EncryptionConfig: EncryptionConfig -} /// -open class KinesisFirehoseConfig { - FirehoseArn: FirehoseDeliveryStreamArn +open class InstanceStorageConfigS3Config { + BucketName: InstanceStorageConfigBucketName + BucketPrefix: InstanceStorageConfigPrefix + EncryptionConfig: (InstanceStorageConfigEncryptionConfig)? } +typealias InstanceStorageConfigPrefix = String|Mapping + + +typealias InstanceStorageConfigInstanceStorageResourceType = String|Mapping + + /// Resource Type definition for AWS::Connect::InstanceStorageConfig open class InstanceStorageConfig extends cloudformation.Resource { @@ -85,22 +75,22 @@ open class InstanceStorageConfig extends cloudformation.Resource { hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping /// - hidden ResourceType: InstanceStorageResourceType + hidden ResourceType: InstanceStorageConfigInstanceStorageResourceType /// - hidden StorageType: StorageType + hidden StorageType: InstanceStorageConfigStorageType /// - hidden S3Config: (S3Config)? + hidden S3Config: (InstanceStorageConfigS3Config)? /// - hidden KinesisVideoStreamConfig: (KinesisVideoStreamConfig)? + hidden KinesisVideoStreamConfig: (InstanceStorageConfigKinesisVideoStreamConfig)? /// - hidden KinesisStreamConfig: (KinesisStreamConfig)? + hidden KinesisStreamConfig: (InstanceStorageConfigKinesisStreamConfig)? /// - hidden KinesisFirehoseConfig: (KinesisFirehoseConfig)? + hidden KinesisFirehoseConfig: (InstanceStorageConfigKinesisFirehoseConfig)? Properties { ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn diff --git a/pkl/aws/connect/integrationassociation.pkl b/pkl/aws/connect/integrationassociation.pkl index 1d5dbab8..792daa5e 100644 --- a/pkl/aws/connect/integrationassociation.pkl +++ b/pkl/aws/connect/integrationassociation.pkl @@ -5,21 +5,17 @@ module aws.connect.integrationassociation import "../../cloudformation.pkl" -/// Amazon Connect instance identifier -open class InstanceId { -} +typealias IntegrationAssociationIntegrationType = String|Mapping -/// Identifier of the association with Connect Instance -open class IntegrationAssociationId { -} -/// ARN of Integration being associated with the instance -open class IntegrationArn { -} +typealias IntegrationAssociationInstanceId = String|Mapping + + +typealias IntegrationAssociationIntegrationAssociationId = String|Mapping + + +typealias IntegrationAssociationIntegrationArn = String|Mapping -/// Specifies the integration type to be associated with the instance -open class IntegrationType { -} /// Resource Type definition for AWS::Connect::IntegrationAssociation open class IntegrationAssociation extends cloudformation.Resource { @@ -28,18 +24,18 @@ open class IntegrationAssociation extends cloudformation.Resource { /// - hidden IntegrationType: IntegrationType + hidden IntegrationArn: IntegrationAssociationIntegrationArn /// - hidden InstanceId: InstanceId + hidden IntegrationType: IntegrationAssociationIntegrationType /// - hidden IntegrationArn: IntegrationArn + hidden InstanceId: IntegrationAssociationInstanceId Properties { + ["IntegrationArn"] = if (IntegrationArn == null) null else IntegrationArn ["IntegrationType"] = if (IntegrationType == null) null else IntegrationType ["InstanceId"] = if (InstanceId == null) null else InstanceId - ["IntegrationArn"] = if (IntegrationArn == null) null else IntegrationArn } } diff --git a/pkl/aws/connect/phonenumber.pkl b/pkl/aws/connect/phonenumber.pkl index 1f7f4bce..f97debde 100644 --- a/pkl/aws/connect/phonenumber.pkl +++ b/pkl/aws/connect/phonenumber.pkl @@ -6,9 +6,9 @@ module aws.connect.phonenumber import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { - Value: String|Mapping +open class PhoneNumberTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } /// Resource Type definition for AWS::Connect::PhoneNumber @@ -17,14 +17,17 @@ open class PhoneNumber extends cloudformation.Resource { Type = "AWS::Connect::PhoneNumber" - /// The phone number type - hidden TypeProperty: (String(matches(Regex(#"TOLL_FREE|DID|UIFN|SHARED|THIRD_PARTY_DID|THIRD_PARTY_TF|SHORT_CODE"#)))|Mapping)? - /// The phone number country code. hidden CountryCode: (String(matches(Regex(#"^[A-Z]{2}"#)))|Mapping)? /// One or more tags. - hidden Tags: (Listing)? + hidden Tags: (Listing)? + + /// The phone number prefix. + hidden Prefix: (String(matches(Regex(#"^\+[0-9]{1,15}"#)))|Mapping)? + + /// The source phone number arn. + hidden SourcePhoneNumberArn: (String|Mapping)? /// The ARN of the target the phone number is claimed to. hidden TargetArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:(instance|traffic-distribution-group)/[-a-zA-Z0-9]*$"#)))|Mapping @@ -32,20 +35,17 @@ open class PhoneNumber extends cloudformation.Resource { /// The description of the phone number. hidden Description: (String|Mapping)? - /// The phone number prefix. - hidden Prefix: (String(matches(Regex(#"^\+[0-9]{1,15}"#)))|Mapping)? - - /// The source phone number arn. - hidden SourcePhoneNumberArn: (String|Mapping)? + /// The phone number type + hidden TypeProperty: (String(matches(Regex(#"TOLL_FREE|DID|UIFN|SHARED|THIRD_PARTY_DID|THIRD_PARTY_TF|SHORT_CODE"#)))|Mapping)? Properties { - ["Type"] = if (TypeProperty == null) null else TypeProperty ["CountryCode"] = if (CountryCode == null) null else CountryCode ["Tags"] = if (Tags == null) null else Tags - ["TargetArn"] = if (TargetArn == null) null else TargetArn - ["Description"] = if (Description == null) null else Description ["Prefix"] = if (Prefix == null) null else Prefix ["SourcePhoneNumberArn"] = if (SourcePhoneNumberArn == null) null else SourcePhoneNumberArn + ["TargetArn"] = if (TargetArn == null) null else TargetArn + ["Description"] = if (Description == null) null else Description + ["Type"] = if (TypeProperty == null) null else TypeProperty } } diff --git a/pkl/aws/connect/prompt.pkl b/pkl/aws/connect/prompt.pkl index 0f5a89bd..633b224d 100644 --- a/pkl/aws/connect/prompt.pkl +++ b/pkl/aws/connect/prompt.pkl @@ -6,7 +6,7 @@ module aws.connect.prompt import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class PromptTag { Key: String|Mapping Value: String|Mapping } @@ -17,8 +17,11 @@ open class Prompt extends cloudformation.Resource { Type = "AWS::Connect::Prompt" + /// S3 URI of the customer's audio file for creating prompts resource.. + hidden S3Uri: (String(matches(Regex(#"s3://\S+/.+|https://\S+\.s3(\.\S+)?\.amazonaws\.com/\S+"#)))|Mapping)? + /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// The identifier of the Amazon Connect instance. hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping @@ -29,15 +32,12 @@ open class Prompt extends cloudformation.Resource { /// The description of the prompt. hidden Description: (String|Mapping)? - /// S3 URI of the customer's audio file for creating prompts resource.. - hidden S3Uri: (String(matches(Regex(#"s3://\S+/.+|https://\S+\.s3(\.\S+)?\.amazonaws\.com/\S+"#)))|Mapping)? - Properties { + ["S3Uri"] = if (S3Uri == null) null else S3Uri ["Tags"] = if (Tags == null) null else Tags ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn ["Name"] = if (Name == null) null else Name ["Description"] = if (Description == null) null else Description - ["S3Uri"] = if (S3Uri == null) null else S3Uri } } diff --git a/pkl/aws/connect/queue.pkl b/pkl/aws/connect/queue.pkl index 62d67144..45fbffda 100644 --- a/pkl/aws/connect/queue.pkl +++ b/pkl/aws/connect/queue.pkl @@ -6,41 +6,35 @@ module aws.connect.queue import "../../cloudformation.pkl" /// The outbound caller ID name, number, and outbound whisper flow. -open class OutboundCallerConfig { - OutboundCallerIdName: (OutboundCallerIdName)? - OutboundCallerIdNumberArn: (OutboundCallerIdNumberArn)? - OutboundFlowArn: (OutboundFlowArn)? +open class QueueOutboundCallerConfig { + OutboundCallerIdName: (QueueOutboundCallerIdName)? + OutboundCallerIdNumberArn: (QueueOutboundCallerIdNumberArn)? + OutboundFlowArn: (QueueOutboundFlowArn)? } -/// The Amazon Resource Name (ARN) for the quick connect. -open class QuickConnectArn { -} +typealias QueueQuickConnectArn = String|Mapping -/// The caller ID name. -open class OutboundCallerIdName { -} -/// The caller ID number. -open class OutboundCallerIdNumberArn { -} +typealias QueueOutboundCallerIdName = String|Mapping + + +typealias QueueOutboundCallerIdNumberArn = String|Mapping + + +typealias QueueOutboundFlowArn = String|Mapping -/// The outbound whisper flow to be used during an outbound call. -open class OutboundFlowArn { -} /// A key-value pair to associate with a resource. -open class Tag { - Key: Key - Value: Value +open class QueueTag { + Key: QueueKey + Value: QueueValue } -/// The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. -open class Key { -} +typealias QueueKey = String|Mapping + + +typealias QueueValue = String|Mapping -/// The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. -open class Value { -} /// Resource Type definition for AWS::Connect::Queue open class Queue extends cloudformation.Resource { @@ -51,40 +45,40 @@ open class Queue extends cloudformation.Resource { /// The description of the queue. hidden Description: (String|Mapping)? - /// The maximum number of contacts that can be in the queue before it is considered full. - hidden MaxContacts: (Int|Mapping)? + /// The status of the queue. + hidden Status: (QueueStatus|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// The identifier of the Amazon Connect instance. hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + /// The identifier for the hours of operation. + hidden HoursOfOperationArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/operating-hours/[-a-zA-Z0-9]*$"#)))|Mapping + + /// The maximum number of contacts that can be in the queue before it is considered full. + hidden MaxContacts: (Int|Mapping)? + /// The name of the queue. hidden Name: String|Mapping /// The outbound caller ID name, number, and outbound whisper flow. - hidden OutboundCallerConfig: (OutboundCallerConfig)? - - /// The status of the queue. - hidden Status: (QueueStatus|Mapping)? + hidden OutboundCallerConfig: (QueueOutboundCallerConfig)? /// The quick connects available to agents who are working the queue. - hidden QuickConnectArns: (Listing)? - - /// The identifier for the hours of operation. - hidden HoursOfOperationArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/operating-hours/[-a-zA-Z0-9]*$"#)))|Mapping + hidden QuickConnectArns: (Listing)? Properties { ["Description"] = if (Description == null) null else Description - ["MaxContacts"] = if (MaxContacts == null) null else MaxContacts + ["Status"] = if (Status == null) null else Status ["Tags"] = if (Tags == null) null else Tags ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn + ["HoursOfOperationArn"] = if (HoursOfOperationArn == null) null else HoursOfOperationArn + ["MaxContacts"] = if (MaxContacts == null) null else MaxContacts ["Name"] = if (Name == null) null else Name ["OutboundCallerConfig"] = if (OutboundCallerConfig == null) null else OutboundCallerConfig - ["Status"] = if (Status == null) null else Status ["QuickConnectArns"] = if (QuickConnectArns == null) null else QuickConnectArns - ["HoursOfOperationArn"] = if (HoursOfOperationArn == null) null else HoursOfOperationArn } } diff --git a/pkl/aws/connect/quickconnect.pkl b/pkl/aws/connect/quickconnect.pkl index 332c0d36..776dd51a 100644 --- a/pkl/aws/connect/quickconnect.pkl +++ b/pkl/aws/connect/quickconnect.pkl @@ -5,55 +5,50 @@ module aws.connect.quickconnect import "../../cloudformation.pkl" -/// The phone number in E.164 format. -open class PhoneNumber { +/// Configuration settings for the quick connect. +open class QuickConnectQuickConnectConfig { + QuickConnectType: QuickConnectQuickConnectType + PhoneConfig: (QuickConnectPhoneNumberQuickConnectConfig)? + QueueConfig: (QuickConnectQueueQuickConnectConfig)? + UserConfig: (QuickConnectUserQuickConnectConfig)? } -/// The queue configuration. This is required only if QuickConnectType is QUEUE. -open class QueueQuickConnectConfig { - ContactFlowArn: ContactFlowArn - QueueArn: QueueArn -} +typealias QuickConnectQuickConnectType = String|Mapping -/// Configuration settings for the quick connect. -open class QuickConnectConfig { - QuickConnectType: QuickConnectType - PhoneConfig: (PhoneNumberQuickConnectConfig)? - QueueConfig: (QueueQuickConnectConfig)? - UserConfig: (UserQuickConnectConfig)? -} -/// A key-value pair to associate with a resource. -open class Tag { - Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping - Value: String|Mapping +/// The user configuration. This is required only if QuickConnectType is USER. +open class QuickConnectUserQuickConnectConfig { + ContactFlowArn: QuickConnectContactFlowArn + UserArn: QuickConnectUserArn } -/// The identifier of the contact flow. -open class ContactFlowArn { -} +typealias QuickConnectPhoneNumber = String|Mapping -/// The identifier for the queue. -open class QueueArn { -} -/// The identifier of the user. -open class UserArn { -} +typealias QuickConnectContactFlowArn = String|Mapping + + +typealias QuickConnectUserArn = String|Mapping + /// The phone configuration. This is required only if QuickConnectType is PHONE_NUMBER. -open class PhoneNumberQuickConnectConfig { - PhoneNumber: PhoneNumber +open class QuickConnectPhoneNumberQuickConnectConfig { + PhoneNumber: QuickConnectPhoneNumber } -/// The user configuration. This is required only if QuickConnectType is USER. -open class UserQuickConnectConfig { - ContactFlowArn: ContactFlowArn - UserArn: UserArn +/// The queue configuration. This is required only if QuickConnectType is QUEUE. +open class QuickConnectQueueQuickConnectConfig { + ContactFlowArn: QuickConnectContactFlowArn + QueueArn: QuickConnectQueueArn } -/// The type of quick connect. In the Amazon Connect console, when you create a quick connect, you are prompted to assign one of the following types: Agent (USER), External (PHONE_NUMBER), or Queue (QUEUE). -open class QuickConnectType { +typealias QuickConnectQueueArn = String|Mapping + + +/// A key-value pair to associate with a resource. +open class QuickConnectTag { + Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } /// Resource Type definition for AWS::Connect::QuickConnect @@ -62,6 +57,12 @@ open class QuickConnect extends cloudformation.Resource { Type = "AWS::Connect::QuickConnect" + /// Configuration settings for the quick connect. + hidden QuickConnectConfig: QuickConnectQuickConnectConfig + + /// One or more tags. + hidden Tags: (Listing)? + /// The identifier of the Amazon Connect instance. hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping @@ -71,18 +72,12 @@ open class QuickConnect extends cloudformation.Resource { /// The description of the quick connect. hidden Description: (String|Mapping)? - /// Configuration settings for the quick connect. - hidden QuickConnectConfig: QuickConnectConfig - - /// One or more tags. - hidden Tags: (Listing)? - Properties { + ["QuickConnectConfig"] = if (QuickConnectConfig == null) null else QuickConnectConfig + ["Tags"] = if (Tags == null) null else Tags ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn ["Name"] = if (Name == null) null else Name ["Description"] = if (Description == null) null else Description - ["QuickConnectConfig"] = if (QuickConnectConfig == null) null else QuickConnectConfig - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/connect/routingprofile.pkl b/pkl/aws/connect/routingprofile.pkl index c59afc8b..3cb79847 100644 --- a/pkl/aws/connect/routingprofile.pkl +++ b/pkl/aws/connect/routingprofile.pkl @@ -5,59 +5,53 @@ module aws.connect.routingprofile import "../../cloudformation.pkl" -/// The Amazon Resource Name (ARN) for the queue. -open class QueueArn { -} +typealias RoutingProfilePriority = Int|Mapping -/// Contains information about the queue and channel for which priority and delay can be set. -open class RoutingProfileQueueConfig { - Delay: Delay - Priority: Priority - QueueReference: RoutingProfileQueueReference + +typealias RoutingProfileQueueArn = String|Mapping + + +/// A key-value pair to associate with a resource. +open class RoutingProfileTag { + Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } +typealias RoutingProfileChannel = String|Mapping + + /// Defines the cross-channel routing behavior that allows an agent working on a contact in one channel to be offered a contact from a different channel. -open class CrossChannelBehavior { - BehaviorType: BehaviorType +open class RoutingProfileCrossChannelBehavior { + BehaviorType: RoutingProfileBehaviorType } /// Contains information about which channels are supported, and how many contacts an agent can have on a channel simultaneously. -open class MediaConcurrency { - CrossChannelBehavior: (CrossChannelBehavior)? - Channel: Channel - Concurrency: Concurrency +open class RoutingProfileMediaConcurrency { + CrossChannelBehavior: (RoutingProfileCrossChannelBehavior)? + Channel: RoutingProfileChannel + Concurrency: RoutingProfileConcurrency } -/// The delay, in seconds, a contact should wait in the queue before they are routed to an available agent. -open class Delay { +/// Contains the channel and queue identifier for a routing profile. +open class RoutingProfileRoutingProfileQueueReference { + Channel: RoutingProfileChannel + QueueArn: RoutingProfileQueueArn } -/// The order in which contacts are to be handled for the queue. -open class Priority { -} +typealias RoutingProfileConcurrency = Int|Mapping -/// Contains the channel and queue identifier for a routing profile. -open class RoutingProfileQueueReference { - Channel: Channel - QueueArn: QueueArn -} -/// A key-value pair to associate with a resource. -open class Tag { - Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping - Value: String|Mapping -} +typealias RoutingProfileBehaviorType = String|Mapping -/// The channels that agents can handle in the Contact Control Panel (CCP). -open class Channel { -} -/// The number of contacts an agent can have on a channel simultaneously. -open class Concurrency { -} +typealias RoutingProfileDelay = Int|Mapping + -/// Specifies the other channels that can be routed to an agent handling their current channel. -open class BehaviorType { +/// Contains information about the queue and channel for which priority and delay can be set. +open class RoutingProfileRoutingProfileQueueConfig { + Delay: RoutingProfileDelay + Priority: RoutingProfilePriority + QueueReference: RoutingProfileRoutingProfileQueueReference } /// Resource Type definition for AWS::Connect::RoutingProfile @@ -66,17 +60,11 @@ open class RoutingProfile extends cloudformation.Resource { Type = "AWS::Connect::RoutingProfile" - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? - - /// Whether agents with this routing profile will have their routing order calculated based on longest idle time or time since their last inbound contact. - hidden AgentAvailabilityTimer: (RoutingProfileAgentAvailabilityTimer|Mapping)? - /// The identifier of the Amazon Connect instance. hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping - /// The channels agents can handle in the Contact Control Panel (CCP) for this routing profile. - hidden MediaConcurrencies: Listing + /// The description of the routing profile. + hidden Description: String|Mapping /// The identifier of the default outbound queue for this routing profile. hidden DefaultOutboundQueueArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$"#)))|Mapping @@ -84,21 +72,27 @@ open class RoutingProfile extends cloudformation.Resource { /// The name of the routing profile. hidden Name: String|Mapping - /// The description of the routing profile. - hidden Description: String|Mapping + /// The channels agents can handle in the Contact Control Panel (CCP) for this routing profile. + hidden MediaConcurrencies: Listing /// The queues to associate with this routing profile. - hidden QueueConfigs: (Listing)? + hidden QueueConfigs: (Listing)? + + /// An array of key-value pairs to apply to this resource. + hidden Tags: (Listing)? + + /// Whether agents with this routing profile will have their routing order calculated based on longest idle time or time since their last inbound contact. + hidden AgentAvailabilityTimer: (RoutingProfileAgentAvailabilityTimer|Mapping)? Properties { - ["Tags"] = if (Tags == null) null else Tags - ["AgentAvailabilityTimer"] = if (AgentAvailabilityTimer == null) null else AgentAvailabilityTimer ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn - ["MediaConcurrencies"] = if (MediaConcurrencies == null) null else MediaConcurrencies + ["Description"] = if (Description == null) null else Description ["DefaultOutboundQueueArn"] = if (DefaultOutboundQueueArn == null) null else DefaultOutboundQueueArn ["Name"] = if (Name == null) null else Name - ["Description"] = if (Description == null) null else Description + ["MediaConcurrencies"] = if (MediaConcurrencies == null) null else MediaConcurrencies ["QueueConfigs"] = if (QueueConfigs == null) null else QueueConfigs + ["Tags"] = if (Tags == null) null else Tags + ["AgentAvailabilityTimer"] = if (AgentAvailabilityTimer == null) null else AgentAvailabilityTimer } } diff --git a/pkl/aws/connect/rule.pkl b/pkl/aws/connect/rule.pkl index e3ad008e..cbc4017c 100644 --- a/pkl/aws/connect/rule.pkl +++ b/pkl/aws/connect/rule.pkl @@ -4,3 +4,172 @@ module aws.connect.rule import "../../cloudformation.pkl" + +/// The field of the case. +open class RuleField { + Id: String|Mapping + Value: RuleFieldValue +} + +typealias ReferenceType = "URL"|"ATTACHMENT"|"NUMBER"|"STRING"|"DATE"|"EMAIL" + +/// A contact reference. +open class RuleReference { + Value: String(matches(Regex(#"^(/|https:)"#)))|Mapping + Type: ReferenceType|Mapping +} + +typealias RuleEndAssociatedTasksAction = Dynamic + + +typealias RuleAssignContactCategoryActions = Listing<(RuleAssignContactCategoryAction)?> + + +typealias RuleEndAssociatedTasksActions = Listing<(RuleEndAssociatedTasksAction)?> + + +typealias RuleUserArn = String|Mapping + + +typealias RuleTaskActions = Listing<(RuleTaskAction)?> + + +/// The list of actions that will be executed when a rule is triggered. +open class RuleActions { + EventBridgeActions: (RuleEventBridgeActions)? + TaskActions: (RuleTaskActions)? + SendNotificationActions: (RuleSendNotificationActions)? + CreateCaseActions: (RuleCreateCaseActions)? + UpdateCaseActions: (RuleUpdateCaseActions)? + EndAssociatedTasksActions: (RuleEndAssociatedTasksActions)? + AssignContactCategoryActions: (RuleAssignContactCategoryActions)? +} + +/// The definition for update case action. +open class RuleUpdateCaseAction { + Fields: RuleFields +} + +typealias RuleSendNotificationActions = Listing<(RuleSendNotificationAction)?> + + +typealias RuleUpdateCaseActions = Listing<(RuleUpdateCaseAction)?> + + +typealias RuleTaskActionReferences = Mapping + +/// The definition of task action. +open class RuleTaskAction { + Name: String|Mapping + Description: (String|Mapping)? + ContactFlowArn: String(matches(Regex(#"^$|arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$"#)))|Mapping + References: (RuleTaskActionReferences)? +} + +typealias RuleAssignContactCategoryAction = Dynamic + + +/// The definition for create case action. +open class RuleCreateCaseAction { + Fields: RuleFields + TemplateId: String|Mapping +} + +typealias SendNotificationActionContentType = "PLAIN_TEXT" + +typealias SendNotificationActionDeliveryMethod = "EMAIL" + +/// The definition for sending notification action. +open class RuleSendNotificationAction { + Content: String|Mapping + ContentType: SendNotificationActionContentType|Mapping + Recipient: RuleNotificationRecipientType + DeliveryMethod: SendNotificationActionDeliveryMethod|Mapping + Subject: (String|Mapping)? +} + +typealias RuleEventBridgeActions = Listing<(RuleEventBridgeAction)?> + + +typealias RuleCreateCaseActions = Listing<(RuleCreateCaseAction)?> + + +typealias RuleTriggerEventSourceEventSourceName = "OnContactEvaluationSubmit"|"OnPostCallAnalysisAvailable"|"OnRealTimeCallAnalysisAvailable"|"OnRealTimeChatAnalysisAvailable"|"OnPostChatAnalysisAvailable"|"OnZendeskTicketCreate"|"OnZendeskTicketStatusUpdate"|"OnSalesforceCaseCreate"|"OnMetricDataUpdate"|"OnCaseCreate"|"OnCaseUpdate" + +/// The event source that will trigger the rule. +open class RuleRuleTriggerEventSource { + EventSourceName: RuleTriggerEventSourceEventSourceName|Mapping + IntegrationAssociationArn: (String(matches(Regex(#"^$|arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/integration-association/[-a-zA-Z0-9]*$"#)))|Mapping)? +} + +/// The value of the field. +open class RuleFieldValue { + StringValue: (String|Mapping)? + BooleanValue: (Boolean|Mapping)? + DoubleValue: (Number|Mapping)? + EmptyValue: (Dynamic)? +} + +/// The definition for event bridge action. +open class RuleEventBridgeAction { + Name: String(matches(Regex(#"^[a-zA-Z0-9._-]{1,100}$"#)))|Mapping +} + +/// A key-value pair to associate with a resource. +open class RuleTag { + Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping +} + +typealias RuleNotificationRecipientTypeUserTags = Mapping + +/// The type of notification recipient. +open class RuleNotificationRecipientType { + UserTags: (RuleNotificationRecipientTypeUserTags)? + UserArns: (Listing)? +} + +typealias RuleFields = Listing<(RuleField)?> + + +/// Resource Type definition for AWS:Connect::Rule +open class Rule extends cloudformation.Resource { + + Type = "AWS::Connect::Rule" + + + /// The event source that triggers the rule. + hidden TriggerEventSource: RuleRuleTriggerEventSource + + /// The conditions of a rule. + hidden Function: String|Mapping + + /// The list of actions that will be executed when a rule is triggered. + hidden Actions: RuleActions + + /// The publish status of a rule, either draft or published. + hidden PublishStatus: RulePublishStatus|Mapping + + /// One or more tags. + hidden Tags: (Listing)? + + /// The name of the rule. + hidden Name: String(matches(Regex(#"^[a-zA-Z0-9._-]{1,200}$"#)))|Mapping + + /// The Amazon Resource Name (ARN) of the instance. + hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + + Properties { + ["TriggerEventSource"] = if (TriggerEventSource == null) null else TriggerEventSource + ["Function"] = if (Function == null) null else Function + ["Actions"] = if (Actions == null) null else Actions + ["PublishStatus"] = if (PublishStatus == null) null else PublishStatus + ["Tags"] = if (Tags == null) null else Tags + ["Name"] = if (Name == null) null else Name + ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn + } + +} + + +typealias RulePublishStatus = "DRAFT"|"PUBLISHED" diff --git a/pkl/aws/connect/securitykey.pkl b/pkl/aws/connect/securitykey.pkl index b8c591f9..33f171cf 100644 --- a/pkl/aws/connect/securitykey.pkl +++ b/pkl/aws/connect/securitykey.pkl @@ -5,17 +5,14 @@ module aws.connect.securitykey import "../../cloudformation.pkl" -/// A valid security key in PEM format. -open class Key { -} +typealias SecurityKeyKey = String|Mapping -/// Amazon Connect instance identifier -open class InstanceId { -} -/// An associationID is automatically generated when a storage config is associated with an instance -open class AssociationId { -} +typealias SecurityKeyInstanceId = String|Mapping + + +typealias SecurityKeyAssociationId = String|Mapping + /// Resource Type definition for AWS::Connect::SecurityKey open class SecurityKey extends cloudformation.Resource { @@ -24,10 +21,10 @@ open class SecurityKey extends cloudformation.Resource { /// - hidden Key: Key + hidden Key: SecurityKeyKey /// - hidden InstanceId: InstanceId + hidden InstanceId: SecurityKeyInstanceId Properties { ["Key"] = if (Key == null) null else Key diff --git a/pkl/aws/connect/tasktemplate.pkl b/pkl/aws/connect/tasktemplate.pkl index 322690b9..0d4c09cc 100644 --- a/pkl/aws/connect/tasktemplate.pkl +++ b/pkl/aws/connect/tasktemplate.pkl @@ -5,77 +5,69 @@ module aws.connect.tasktemplate import "../../cloudformation.pkl" +typealias TaskTemplateFieldValue = String|Mapping + + +typealias TaskTemplateFieldType = String|Mapping + + +typealias TaskTemplateFieldOption = String|Mapping + + +/// Invisible field info +open class TaskTemplateInvisibleFieldInfo { + Id: TaskTemplateFieldIdentifier +} + /// the identifier (name) for the task template field -open class FieldIdentifier { +open class TaskTemplateFieldIdentifier { Name: String|Mapping } -/// Single select field identifier -open class FieldOption { +/// A key-value pair to associate with a resource. +open class TaskTemplateTag { + Value: String|Mapping + Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping } +typealias TaskTemplateReadOnlyTaskTemplateFields = Listing<(TaskTemplateReadOnlyFieldInfo)?> + + /// ReadOnly field info -open class ReadOnlyFieldInfo { - Id: FieldIdentifier +open class TaskTemplateReadOnlyFieldInfo { + Id: TaskTemplateFieldIdentifier } /// the default value for the task template's field -open class FieldValue { +open class TaskTemplateDefaultFieldValue { + Id: TaskTemplateFieldIdentifier + DefaultValue: TaskTemplateFieldValue } -/// The type of the task template's field -open class FieldType { -} +typealias TaskTemplateInvisibleTaskTemplateFields = Listing<(TaskTemplateInvisibleFieldInfo)?> -/// A task template field object. -open class Field { - SingleSelectOptions: (Listing)? - Id: FieldIdentifier - Description: (String|Mapping)? - Type: FieldType -} -/// The list of the task template's read only fields -open class ReadOnlyTaskTemplateFields { +/// Required field info +open class TaskTemplateRequiredFieldInfo { + Id: TaskTemplateFieldIdentifier } -/// the default value for the task template's field -open class DefaultFieldValue { - Id: FieldIdentifier - DefaultValue: FieldValue -} +typealias TaskTemplateClientToken = String|Mapping -/// The list of the task template's invisible fields -open class InvisibleTaskTemplateFields { -} -/// The list of the task template's required fields -open class RequiredTaskTemplateFields { +/// A task template field object. +open class TaskTemplateField { + Id: TaskTemplateFieldIdentifier + Description: (String|Mapping)? + Type: TaskTemplateFieldType + SingleSelectOptions: (Listing)? } -/// A key-value pair to associate with a resource. -open class Tag { - Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping - Value: String|Mapping -} +typealias TaskTemplateRequiredTaskTemplateFields = Listing<(TaskTemplateRequiredFieldInfo)?> -/// The status of the task template -open class Status { -} -/// Invisible field info -open class InvisibleFieldInfo { - Id: FieldIdentifier -} +typealias TaskTemplateStatus = String|Mapping -/// Required field info -open class RequiredFieldInfo { - Id: FieldIdentifier -} - -/// the client token string in uuid format -open class ClientToken { -} /// Resource Type definition for AWS::Connect::TaskTemplate. open class TaskTemplate extends cloudformation.Resource { @@ -84,16 +76,16 @@ open class TaskTemplate extends cloudformation.Resource { /// - hidden Defaults: (Listing)? + hidden Defaults: (Listing)? /// The list of task template's fields - hidden Fields: (Listing)? + hidden Fields: (Listing)? - /// The identifier (arn) of the instance. - hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + /// + hidden Status: (TaskTemplateStatus)? - /// The description of the task template. - hidden Description: (String|Mapping)? + /// + hidden ClientToken: (TaskTemplateClientToken)? /// The identifier of the contact flow. hidden ContactFlowArn: (String(matches(Regex(#"^$|arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$"#)))|Mapping)? @@ -104,26 +96,26 @@ open class TaskTemplate extends cloudformation.Resource { /// The name of the task template. hidden Name: (String|Mapping)? - /// - hidden Status: (Status)? - - /// - hidden ClientToken: (ClientToken)? + /// The description of the task template. + hidden Description: (String|Mapping)? /// One or more tags. - hidden Tags: (Listing)? + hidden Tags: (Listing)? + + /// The identifier (arn) of the instance. + hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping Properties { ["Defaults"] = if (Defaults == null) null else Defaults ["Fields"] = if (Fields == null) null else Fields - ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn - ["Description"] = if (Description == null) null else Description + ["Status"] = if (Status == null) null else Status + ["ClientToken"] = if (ClientToken == null) null else ClientToken ["ContactFlowArn"] = if (ContactFlowArn == null) null else ContactFlowArn ["Constraints"] = if (Constraints == null) null else Constraints ["Name"] = if (Name == null) null else Name - ["Status"] = if (Status == null) null else Status - ["ClientToken"] = if (ClientToken == null) null else ClientToken + ["Description"] = if (Description == null) null else Description ["Tags"] = if (Tags == null) null else Tags + ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn } } diff --git a/pkl/aws/connect/trafficdistributiongroup.pkl b/pkl/aws/connect/trafficdistributiongroup.pkl index 030c66e5..7b614f33 100644 --- a/pkl/aws/connect/trafficdistributiongroup.pkl +++ b/pkl/aws/connect/trafficdistributiongroup.pkl @@ -6,7 +6,7 @@ module aws.connect.trafficdistributiongroup import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class TrafficDistributionGroupTag { Key: String|Mapping Value: String|Mapping } @@ -17,9 +17,6 @@ open class TrafficDistributionGroup extends cloudformation.Resource { Type = "AWS::Connect::TrafficDistributionGroup" - /// The identifier of the Amazon Connect instance that has been replicated. - hidden InstanceArn: String(matches(Regex(#"^arn:(aws|aws-us-gov):connect:[a-z]{2}-[a-z]+-[0-9]{1}:[0-9]{1,20}:instance/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"#)))|Mapping - /// A description for the traffic distribution group. hidden Description: (String(matches(Regex(#"(^[\S].*[\S]$)|(^[\S]$)"#)))|Mapping)? @@ -27,13 +24,16 @@ open class TrafficDistributionGroup extends cloudformation.Resource { hidden Name: String(matches(Regex(#"(^[\S].*[\S]$)|(^[\S]$)"#)))|Mapping /// One or more tags. - hidden Tags: (Listing)? + hidden Tags: (Listing)? + + /// The identifier of the Amazon Connect instance that has been replicated. + hidden InstanceArn: String(matches(Regex(#"^arn:(aws|aws-us-gov):connect:[a-z]{2}-[a-z]+-[0-9]{1}:[0-9]{1,20}:instance/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"#)))|Mapping Properties { - ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn ["Description"] = if (Description == null) null else Description ["Name"] = if (Name == null) null else Name ["Tags"] = if (Tags == null) null else Tags + ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn } } diff --git a/pkl/aws/connect/user.pkl b/pkl/aws/connect/user.pkl index 3592e42e..e62ade62 100644 --- a/pkl/aws/connect/user.pkl +++ b/pkl/aws/connect/user.pkl @@ -5,88 +5,75 @@ module aws.connect.user import "../../cloudformation.pkl" -/// The last name. This is required if you are using Amazon Connect or SAML for identity management. -open class LastName { +/// Contains information about the phone configuration settings for a user. +open class UserUserPhoneConfig { + AfterContactWorkTimeLimit: (UserAfterContactWorkTimeLimit)? + AutoAccept: (UserAutoAccept)? + DeskPhoneNumber: (UserDeskPhoneNumber)? + PhoneType: UserPhoneType } -/// The Auto accept setting. -open class AutoAccept { -} +typealias UserLevel = Number|Mapping -/// The value of user's proficiency. You must use value of predefined attribute present in the Amazon Connect instance. -open class AttributeValue { -} -/// The first name. This is required if you are using Amazon Connect or SAML for identity management. -open class FirstName { -} +typealias UserFirstName = String|Mapping -/// The After Call Work (ACW) timeout setting, in seconds. -open class AfterContactWorkTimeLimit { -} -/// Contains information about the identity of a user. -open class UserIdentityInfo { - FirstName: (FirstName)? - LastName: (LastName)? - Email: (Email)? - SecondaryEmail: (SecondaryEmail)? - Mobile: (Mobile)? -} +typealias UserAfterContactWorkTimeLimit = Int|Mapping -/// The name of user's proficiency. You must use name of predefined attribute present in the Amazon Connect instance. -open class AttributeName { -} -/// Proficiency of a user. -open class UserProficiency { - Level: Level - AttributeName: AttributeName - AttributeValue: AttributeValue -} +typealias UserDeskPhoneNumber = String|Mapping -/// The email address. If you are using SAML for identity management and include this parameter, an error is returned. -open class Email { -} -/// The secondary email address. If you provide a secondary email, the user receives email notifications -- other than password reset notifications -- to this email address instead of to their primary email address. -open class SecondaryEmail { -} +typealias UserAttributeName = String|Mapping -/// The phone number for the user's desk phone. -open class DeskPhoneNumber { -} -/// The phone type. -open class PhoneType { -} +typealias UserEmail = String|Mapping -/// Contains information about the phone configuration settings for a user. -open class UserPhoneConfig { - AutoAccept: (AutoAccept)? - DeskPhoneNumber: (DeskPhoneNumber)? - PhoneType: PhoneType - AfterContactWorkTimeLimit: (AfterContactWorkTimeLimit)? -} -/// The mobile phone number. -open class Mobile { -} +typealias UserMobile = String|Mapping -/// The identifier of the security profile for the user. -open class SecurityProfileArn { -} /// A key-value pair to associate with a resource. -open class Tag { - Value: String|Mapping +open class UserTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } -/// The level of the proficiency. The valid values are 1, 2, 3, 4 and 5. -open class Level { +typealias UserAutoAccept = Boolean|Mapping + + +typealias UserPhoneType = String|Mapping + + +typealias UserAttributeValue = String|Mapping + + +typealias UserSecondaryEmail = String|Mapping + + +/// Proficiency of a user. +open class UserUserProficiency { + AttributeName: UserAttributeName + AttributeValue: UserAttributeValue + Level: UserLevel +} + +typealias UserLastName = String|Mapping + + +/// Contains information about the identity of a user. +open class UserUserIdentityInfo { + SecondaryEmail: (UserSecondaryEmail)? + Mobile: (UserMobile)? + FirstName: (UserFirstName)? + LastName: (UserLastName)? + Email: (UserEmail)? } +typealias UserSecurityProfileArn = String|Mapping + + /// Resource Type definition for AWS::Connect::User open class User extends cloudformation.Resource { @@ -96,6 +83,21 @@ open class User extends cloudformation.Resource { /// The identifier of the Amazon Connect instance. hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping + /// The identifier of the routing profile for the user. + hidden RoutingProfileArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/routing-profile/[-a-zA-Z0-9]*$"#)))|Mapping + + /// The information about the identity of the user. + hidden IdentityInfo: (UserUserIdentityInfo)? + + /// One or more security profile arns for the user + hidden SecurityProfileArns: Listing + + /// One or more tags. + hidden Tags: (Listing)? + + /// The identifier of the user account in the directory used for identity management. + hidden DirectoryUserId: (String|Mapping)? + /// The identifier of the hierarchy group for the user. hidden HierarchyGroupArn: (String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/agent-group/[-a-zA-Z0-9]*$"#)))|Mapping)? @@ -106,38 +108,23 @@ open class User extends cloudformation.Resource { hidden Password: (String(matches(Regex(#"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\S]{8,64}$"#)))|Mapping)? /// The phone settings for the user. - hidden PhoneConfig: UserPhoneConfig + hidden PhoneConfig: UserUserPhoneConfig /// One or more predefined attributes assigned to a user, with a level that indicates how skilled they are. - hidden UserProficiencies: (Listing)? - - /// The identifier of the user account in the directory used for identity management. - hidden DirectoryUserId: (String|Mapping)? - - /// The identifier of the routing profile for the user. - hidden RoutingProfileArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/routing-profile/[-a-zA-Z0-9]*$"#)))|Mapping - - /// The information about the identity of the user. - hidden IdentityInfo: (UserIdentityInfo)? - - /// One or more security profile arns for the user - hidden SecurityProfileArns: Listing - - /// One or more tags. - hidden Tags: (Listing)? + hidden UserProficiencies: (Listing)? Properties { ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn + ["RoutingProfileArn"] = if (RoutingProfileArn == null) null else RoutingProfileArn + ["IdentityInfo"] = if (IdentityInfo == null) null else IdentityInfo + ["SecurityProfileArns"] = if (SecurityProfileArns == null) null else SecurityProfileArns + ["Tags"] = if (Tags == null) null else Tags + ["DirectoryUserId"] = if (DirectoryUserId == null) null else DirectoryUserId ["HierarchyGroupArn"] = if (HierarchyGroupArn == null) null else HierarchyGroupArn ["Username"] = if (Username == null) null else Username ["Password"] = if (Password == null) null else Password ["PhoneConfig"] = if (PhoneConfig == null) null else PhoneConfig ["UserProficiencies"] = if (UserProficiencies == null) null else UserProficiencies - ["DirectoryUserId"] = if (DirectoryUserId == null) null else DirectoryUserId - ["RoutingProfileArn"] = if (RoutingProfileArn == null) null else RoutingProfileArn - ["IdentityInfo"] = if (IdentityInfo == null) null else IdentityInfo - ["SecurityProfileArns"] = if (SecurityProfileArns == null) null else SecurityProfileArns - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/connect/userhierarchygroup.pkl b/pkl/aws/connect/userhierarchygroup.pkl index b39ee847..8de93714 100644 --- a/pkl/aws/connect/userhierarchygroup.pkl +++ b/pkl/aws/connect/userhierarchygroup.pkl @@ -5,39 +5,38 @@ module aws.connect.userhierarchygroup import "../../cloudformation.pkl" -/// The Amazon Resource Name (ARN) for the user hierarchy group. -open class UserHierarchyGroupArn { -} - /// A key-value pair to associate with a resource. -open class Tag { +open class UserHierarchyGroupTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping Value: String|Mapping } +typealias UserHierarchyGroupUserHierarchyGroupArn = String|Mapping + + /// Resource Type definition for AWS::Connect::UserHierarchyGroup open class UserHierarchyGroup extends cloudformation.Resource { Type = "AWS::Connect::UserHierarchyGroup" - /// One or more tags. - hidden Tags: (Listing)? - /// The identifier of the Amazon Connect instance. hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping /// The Amazon Resource Name (ARN) for the parent user hierarchy group. - hidden ParentGroupArn: (UserHierarchyGroupArn)? + hidden ParentGroupArn: (UserHierarchyGroupUserHierarchyGroupArn)? /// The name of the user hierarchy group. hidden Name: String|Mapping + /// One or more tags. + hidden Tags: (Listing)? + Properties { - ["Tags"] = if (Tags == null) null else Tags ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn ["ParentGroupArn"] = if (ParentGroupArn == null) null else ParentGroupArn ["Name"] = if (Name == null) null else Name + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/connect/view.pkl b/pkl/aws/connect/view.pkl index c775f16b..f635eee7 100644 --- a/pkl/aws/connect/view.pkl +++ b/pkl/aws/connect/view.pkl @@ -6,9 +6,9 @@ module aws.connect.view import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { - Value: String|Mapping +open class ViewTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } /// Resource Type definition for AWS::Connect::View @@ -17,15 +17,9 @@ open class View extends cloudformation.Resource { Type = "AWS::Connect::View" - /// One or more tags. - hidden Tags: (Listing)? - /// The Amazon Resource Name (ARN) of the instance. hidden InstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping - /// The actions of the view in an array. - hidden Actions: Listing - /// The name of the view. hidden Name: String(matches(Regex(#"^([\p{L}\p{N}_.:\/=+\-@]+[\p{L}\p{Z}\p{N}_.:\/=+\-@]*)$"#)))|Mapping @@ -35,13 +29,19 @@ open class View extends cloudformation.Resource { /// The template of the view as JSON. hidden Template: Dynamic + /// The actions of the view in an array. + hidden Actions: Listing + + /// One or more tags. + hidden Tags: (Listing)? + Properties { - ["Tags"] = if (Tags == null) null else Tags ["InstanceArn"] = if (InstanceArn == null) null else InstanceArn - ["Actions"] = if (Actions == null) null else Actions ["Name"] = if (Name == null) null else Name ["Description"] = if (Description == null) null else Description ["Template"] = if (Template == null) null else Template + ["Actions"] = if (Actions == null) null else Actions + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/connect/viewversion.pkl b/pkl/aws/connect/viewversion.pkl index 2910cc86..f719b34d 100644 --- a/pkl/aws/connect/viewversion.pkl +++ b/pkl/aws/connect/viewversion.pkl @@ -11,19 +11,19 @@ open class ViewVersion extends cloudformation.Resource { Type = "AWS::Connect::ViewVersion" + /// The Amazon Resource Name (ARN) of the view for which a version is being created. + hidden ViewArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/view/[-:a-zA-Z0-9]*$"#)))|Mapping + /// The description for the view version. hidden VersionDescription: (String(matches(Regex(#"^([\p{L}\p{N}_.:\/=+\-@,]+[\p{L}\p{Z}\p{N}_.:\/=+\-@,]*)$"#)))|Mapping)? /// The view content hash to be checked. hidden ViewContentSha256: (String(matches(Regex(#"^[a-zA-Z0-9]{64}$"#)))|Mapping)? - /// The Amazon Resource Name (ARN) of the view for which a version is being created. - hidden ViewArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/view/[-:a-zA-Z0-9]*$"#)))|Mapping - Properties { + ["ViewArn"] = if (ViewArn == null) null else ViewArn ["VersionDescription"] = if (VersionDescription == null) null else VersionDescription ["ViewContentSha256"] = if (ViewContentSha256 == null) null else ViewContentSha256 - ["ViewArn"] = if (ViewArn == null) null else ViewArn } } diff --git a/pkl/aws/connectcampaigns/campaign.pkl b/pkl/aws/connectcampaigns/campaign.pkl index bdd0b5cc..e3186c2c 100644 --- a/pkl/aws/connectcampaigns/campaign.pkl +++ b/pkl/aws/connectcampaigns/campaign.pkl @@ -5,47 +5,47 @@ module aws.connectcampaigns.campaign import "../../cloudformation.pkl" -/// Predictive Dialer config -open class PredictiveDialerConfig { - BandwidthAllocation: Number|Mapping - DialingCapacity: (Number|Mapping)? -} - -/// Progressive Dialer config -open class ProgressiveDialerConfig { - BandwidthAllocation: Number|Mapping - DialingCapacity: (Number|Mapping)? -} - /// Agentless Dialer config -open class AgentlessDialerConfig { +open class CampaignAgentlessDialerConfig { DialingCapacity: (Number|Mapping)? } /// The configuration used for answering machine detection during outbound calls -open class AnswerMachineDetectionConfig { +open class CampaignAnswerMachineDetectionConfig { EnableAnswerMachineDetection: Boolean|Mapping } /// A key-value pair to associate with a resource. -open class Tag { +open class CampaignTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping Value: String|Mapping } /// The possible types of dialer config parameters -open class DialerConfig { - AgentlessDialerConfig: (AgentlessDialerConfig)? - ProgressiveDialerConfig: (ProgressiveDialerConfig)? - PredictiveDialerConfig: (PredictiveDialerConfig)? +open class CampaignDialerConfig { + ProgressiveDialerConfig: (CampaignProgressiveDialerConfig)? + PredictiveDialerConfig: (CampaignPredictiveDialerConfig)? + AgentlessDialerConfig: (CampaignAgentlessDialerConfig)? } /// The configuration used for outbound calls. -open class OutboundCallConfig { - ConnectContactFlowArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$"#)))|Mapping +open class CampaignOutboundCallConfig { ConnectSourcePhoneNumber: (String|Mapping)? ConnectQueueArn: (String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/queue/[-a-zA-Z0-9]*$"#)))|Mapping)? - AnswerMachineDetectionConfig: (AnswerMachineDetectionConfig)? + AnswerMachineDetectionConfig: (CampaignAnswerMachineDetectionConfig)? + ConnectContactFlowArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*/contact-flow/[-a-zA-Z0-9]*$"#)))|Mapping +} + +/// Predictive Dialer config +open class CampaignPredictiveDialerConfig { + BandwidthAllocation: Number|Mapping + DialingCapacity: (Number|Mapping)? +} + +/// Progressive Dialer config +open class CampaignProgressiveDialerConfig { + BandwidthAllocation: Number|Mapping + DialingCapacity: (Number|Mapping)? } /// Definition of AWS::ConnectCampaigns::Campaign Resource Type @@ -54,27 +54,27 @@ open class Campaign extends cloudformation.Resource { Type = "AWS::ConnectCampaigns::Campaign" - /// One or more tags. - hidden Tags: (Listing)? - - /// Amazon Connect Instance Arn - hidden ConnectInstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping - /// - hidden DialerConfig: DialerConfig + hidden DialerConfig: CampaignDialerConfig /// Amazon Connect Campaign Name hidden Name: String|Mapping /// - hidden OutboundCallConfig: OutboundCallConfig + hidden OutboundCallConfig: CampaignOutboundCallConfig + + /// One or more tags. + hidden Tags: (Listing)? + + /// Amazon Connect Instance Arn + hidden ConnectInstanceArn: String(matches(Regex(#"^arn:aws[-a-z0-9]*:connect:[-a-z0-9]*:[0-9]{12}:instance/[-a-zA-Z0-9]*$"#)))|Mapping Properties { - ["Tags"] = if (Tags == null) null else Tags - ["ConnectInstanceArn"] = if (ConnectInstanceArn == null) null else ConnectInstanceArn ["DialerConfig"] = if (DialerConfig == null) null else DialerConfig ["Name"] = if (Name == null) null else Name ["OutboundCallConfig"] = if (OutboundCallConfig == null) null else OutboundCallConfig + ["Tags"] = if (Tags == null) null else Tags + ["ConnectInstanceArn"] = if (ConnectInstanceArn == null) null else ConnectInstanceArn } } diff --git a/pkl/aws/controltower/enabledcontrol.pkl b/pkl/aws/controltower/enabledcontrol.pkl index 57a76ef6..1cb603e0 100644 --- a/pkl/aws/controltower/enabledcontrol.pkl +++ b/pkl/aws/controltower/enabledcontrol.pkl @@ -4,3 +4,73 @@ module aws.controltower.enabledcontrol import "../../cloudformation.pkl" + +typealias EnabledControlEnabledControlParameterValue0Array = EnabledControlEnabledControlParameterValue0Array0|EnabledControlEnabledControlParameterValue0Array1|EnabledControlEnabledControlParameterValue0Array2|EnabledControlEnabledControlParameterValue0Array3 + +typealias EnabledControlEnabledControlParameterValue0 = Listing<(EnabledControlEnabledControlParameterValue0Array)?> + + +typealias EnabledControlEnabledControlParameterValue0Array1 = Number|Mapping + + +typealias EnabledControlEnabledControlParameterValue2 = Number|Mapping + + +typealias EnabledControlEnabledControlParameterValue4 = Boolean|Mapping + + +/// A key-value pair to associate with a resource. +open class EnabledControlTag { + Key: String|Mapping + Value: String|Mapping +} + +typealias EnabledControlEnabledControlParameterValue = EnabledControlEnabledControlParameterValue0|EnabledControlEnabledControlParameterValue1|EnabledControlEnabledControlParameterValue2|EnabledControlEnabledControlParameterValue3|EnabledControlEnabledControlParameterValue4 + +/// +open class EnabledControlEnabledControlParameter { + Value: EnabledControlEnabledControlParameterValue + Key: String|Mapping +} + +typealias EnabledControlEnabledControlParameterValue0Array0 = String|Mapping + + +typealias EnabledControlEnabledControlParameterValue0Array2 = Dynamic + + +typealias EnabledControlEnabledControlParameterValue0Array3 = Boolean|Mapping + + +typealias EnabledControlEnabledControlParameterValue1 = String|Mapping + + +typealias EnabledControlEnabledControlParameterValue3 = Dynamic + + +/// Enables a control on a specified target. +open class EnabledControl extends cloudformation.Resource { + + Type = "AWS::ControlTower::EnabledControl" + + + /// Arn of the control. + hidden ControlIdentifier: String(matches(Regex(#"^arn:aws[0-9a-zA-Z_\-:\/]+$"#)))|Mapping + + /// Arn for Organizational unit to which the control needs to be applied + hidden TargetIdentifier: String(matches(Regex(#"^arn:aws[0-9a-zA-Z_\-:\/]+$"#)))|Mapping + + /// Parameters to configure the enabled control behavior. + hidden Parameters: (Listing)? + + /// A set of tags to assign to the enabled control. + hidden Tags: (Listing)? + + Properties { + ["ControlIdentifier"] = if (ControlIdentifier == null) null else ControlIdentifier + ["TargetIdentifier"] = if (TargetIdentifier == null) null else TargetIdentifier + ["Parameters"] = if (Parameters == null) null else Parameters + ["Tags"] = if (Tags == null) null else Tags + } + +} diff --git a/pkl/aws/cur/reportdefinition.pkl b/pkl/aws/cur/reportdefinition.pkl index a4f6743f..aea90126 100644 --- a/pkl/aws/cur/reportdefinition.pkl +++ b/pkl/aws/cur/reportdefinition.pkl @@ -11,17 +11,11 @@ open class ReportDefinition extends cloudformation.Resource { Type = "AWS::CUR::ReportDefinition" - /// The format that AWS saves the report in. - hidden Format: ReportDefinitionFormat|Mapping - - /// The S3 bucket where AWS delivers the report. - hidden S3Bucket: String(matches(Regex(#"[A-Za-z0-9_\.\-]+"#)))|Mapping - /// The prefix that AWS adds to the report name when AWS delivers the report. Your prefix can't include spaces. hidden S3Prefix: String(matches(Regex(#"[0-9A-Za-z!\-_.*\'()/]*"#)))|Mapping - /// The region of the S3 bucket that AWS delivers the report into. - hidden S3Region: String|Mapping + /// A list of manifests that you want Amazon Web Services to create for this report. + hidden AdditionalArtifacts: (Listing)? /// The name of the report that you want to create. The name must be unique, is case sensitive, and can't include spaces. hidden ReportName: String(matches(Regex(#"[0-9A-Za-z!\-_.*\'()]+"#)))|Mapping @@ -29,14 +23,11 @@ open class ReportDefinition extends cloudformation.Resource { /// The granularity of the line items in the report. hidden TimeUnit: ReportDefinitionTimeUnit|Mapping - /// The compression format that AWS uses for the report. - hidden Compression: ReportDefinitionCompression|Mapping - - /// A list of strings that indicate additional content that Amazon Web Services includes in the report, such as individual resource IDs. - hidden AdditionalSchemaElements: (Listing)? + /// The S3 bucket where AWS delivers the report. + hidden S3Bucket: String(matches(Regex(#"[A-Za-z0-9_\.\-]+"#)))|Mapping - /// A list of manifests that you want Amazon Web Services to create for this report. - hidden AdditionalArtifacts: (Listing)? + /// The region of the S3 bucket that AWS delivers the report into. + hidden S3Region: String|Mapping /// Whether you want Amazon Web Services to update your reports after they have been finalized if Amazon Web Services detects charges related to previous months. These charges can include refunds, credits, or support fees. hidden RefreshClosedReports: Boolean|Mapping @@ -47,32 +38,41 @@ open class ReportDefinition extends cloudformation.Resource { /// The Amazon resource name of the billing view. You can get this value by using the billing view service public APIs. hidden BillingViewArn: (String(matches(Regex(#"(arn:aws(-cn)?:billing::[0-9]{12}:billingview/)?[a-zA-Z0-9_\+=\.\-@].{1,30}"#)))|Mapping)? + /// The format that AWS saves the report in. + hidden Format: ReportDefinitionFormat|Mapping + + /// The compression format that AWS uses for the report. + hidden Compression: ReportDefinitionCompression|Mapping + + /// A list of strings that indicate additional content that Amazon Web Services includes in the report, such as individual resource IDs. + hidden AdditionalSchemaElements: (Listing)? + Properties { - ["Format"] = if (Format == null) null else Format - ["S3Bucket"] = if (S3Bucket == null) null else S3Bucket ["S3Prefix"] = if (S3Prefix == null) null else S3Prefix - ["S3Region"] = if (S3Region == null) null else S3Region + ["AdditionalArtifacts"] = if (AdditionalArtifacts == null) null else AdditionalArtifacts ["ReportName"] = if (ReportName == null) null else ReportName ["TimeUnit"] = if (TimeUnit == null) null else TimeUnit - ["Compression"] = if (Compression == null) null else Compression - ["AdditionalSchemaElements"] = if (AdditionalSchemaElements == null) null else AdditionalSchemaElements - ["AdditionalArtifacts"] = if (AdditionalArtifacts == null) null else AdditionalArtifacts + ["S3Bucket"] = if (S3Bucket == null) null else S3Bucket + ["S3Region"] = if (S3Region == null) null else S3Region ["RefreshClosedReports"] = if (RefreshClosedReports == null) null else RefreshClosedReports ["ReportVersioning"] = if (ReportVersioning == null) null else ReportVersioning ["BillingViewArn"] = if (BillingViewArn == null) null else BillingViewArn + ["Format"] = if (Format == null) null else Format + ["Compression"] = if (Compression == null) null else Compression + ["AdditionalSchemaElements"] = if (AdditionalSchemaElements == null) null else AdditionalSchemaElements } } -typealias ReportDefinitionFormat = "textORcsv"|"Parquet" +typealias ReportDefinitionAdditionalArtifacts = "REDSHIFT"|"QUICKSIGHT"|"ATHENA" typealias ReportDefinitionTimeUnit = "HOURLY"|"DAILY"|"MONTHLY" -typealias ReportDefinitionCompression = "ZIP"|"GZIP"|"Parquet" +typealias ReportDefinitionReportVersioning = "CREATE_NEW_REPORT"|"OVERWRITE_REPORT" -typealias ReportDefinitionAdditionalSchemaElements = "RESOURCES" +typealias ReportDefinitionFormat = "textORcsv"|"Parquet" -typealias ReportDefinitionAdditionalArtifacts = "REDSHIFT"|"QUICKSIGHT"|"ATHENA" +typealias ReportDefinitionCompression = "ZIP"|"GZIP"|"Parquet" -typealias ReportDefinitionReportVersioning = "CREATE_NEW_REPORT"|"OVERWRITE_REPORT" +typealias ReportDefinitionAdditionalSchemaElements = "RESOURCES" diff --git a/pkl/aws/customerprofiles/calculatedattributedefinition.pkl b/pkl/aws/customerprofiles/calculatedattributedefinition.pkl index 5a18327f..ac444f9e 100644 --- a/pkl/aws/customerprofiles/calculatedattributedefinition.pkl +++ b/pkl/aws/customerprofiles/calculatedattributedefinition.pkl @@ -5,97 +5,83 @@ module aws.customerprofiles.calculatedattributedefinition import "../../cloudformation.pkl" -/// The details of a single attribute item specified in the mathematical expression. -open class AttributeItem { - Name: AttributeName -} +typealias CalculatedAttributeDefinitionDisplayName = String|Mapping -/// A list of attribute items specified in the mathematical expression. -open class AttributeList { -} -/// Mathematical expression that is performed on attribute items provided in the attribute list. Each element in the expression should follow the structure of "{ObjectTypeName.AttributeName}". -open class Expression { +/// The conditions including range, object count, and threshold for the calculated attribute. +open class CalculatedAttributeDefinitionConditions { + Range: (CalculatedAttributeDefinitionRange)? + ObjectCount: (CalculatedAttributeDefinitionObjectCount)? + Threshold: (CalculatedAttributeDefinitionThreshold)? } -/// The operator of the threshold. -open class ThresholdOperator { +/// Mathematical expression and a list of attribute items specified in that expression. +open class CalculatedAttributeDefinitionAttributeDetails { + Attributes: CalculatedAttributeDefinitionAttributeList + Expression: CalculatedAttributeDefinitionExpression } -/// A key-value pair to associate with a resource. -open class Tag { - Key: String|Mapping - Value: String|Mapping -} +typealias CalculatedAttributeDefinitionObjectCount = Int|Mapping + + +typealias CalculatedAttributeDefinitionThresholdValue = String|Mapping -/// The description of the calculated attribute. -open class Description { -} /// The threshold for the calculated attribute. -open class Threshold { - Value: ThresholdValue - Operator: ThresholdOperator +open class CalculatedAttributeDefinitionThreshold { + Value: CalculatedAttributeDefinitionThresholdValue + Operator: CalculatedAttributeDefinitionThresholdOperator } -/// The unique name of the domain. -open class DomainName { -} +typealias CalculatedAttributeDefinitionDomainName = String|Mapping -/// The unique name of the calculated attribute. -open class CalculatedAttributeName { -} -/// The amount of time of the specified unit. -open class RangeValue { +typealias CalculatedAttributeDefinitionAttributeName = String|Mapping + + +typealias CalculatedAttributeDefinitionRangeValue = Int|Mapping + + +typealias CalculatedAttributeDefinitionTags = Listing<(CalculatedAttributeDefinitionTag)?> + + +/// The details of a single attribute item specified in the mathematical expression. +open class CalculatedAttributeDefinitionAttributeItem { + Name: CalculatedAttributeDefinitionAttributeName } +typealias CalculatedAttributeDefinitionThresholdOperator = String|Mapping + + +typealias CalculatedAttributeDefinitionDescription = String|Mapping + + +typealias CalculatedAttributeDefinitionAttributeList = Listing<(CalculatedAttributeDefinitionAttributeItem)?> + + /// The relative time period over which data is included in the aggregation. -open class Range { - Value: RangeValue - Unit: RangeUnit +open class CalculatedAttributeDefinitionRange { + Value: CalculatedAttributeDefinitionRangeValue + Unit: CalculatedAttributeDefinitionRangeUnit } -/// The number of profile objects used for the calculated attribute. -open class ObjectCount { +/// A key-value pair to associate with a resource. +open class CalculatedAttributeDefinitionTag { + Key: String|Mapping + Value: String|Mapping } -/// The conditions including range, object count, and threshold for the calculated attribute. -open class Conditions { - Range: (Range)? - ObjectCount: (ObjectCount)? - Threshold: (Threshold)? -} +typealias CalculatedAttributeDefinitionCalculatedAttributeName = String|Mapping -/// The display name of the calculated attribute. -open class DisplayName { -} -/// The name of an attribute defined in a profile object type. -open class AttributeName { -} +typealias CalculatedAttributeDefinitionExpression = String|Mapping -/// Mathematical expression and a list of attribute items specified in that expression. -open class AttributeDetails { - Attributes: AttributeList - Expression: Expression -} -/// The unit of time. -open class RangeUnit { -} +typealias CalculatedAttributeDefinitionRangeUnit = String|Mapping -/// The value of the threshold. -open class ThresholdValue { -} -/// The aggregation operation to perform for the calculated attribute. -open class Statistic { -} +typealias CalculatedAttributeDefinitionStatistic = String|Mapping -/// An array of key-value pairs to apply to this resource. -open class Tags { -} /// A calculated attribute definition for Customer Profiles open class CalculatedAttributeDefinition extends cloudformation.Resource { @@ -104,38 +90,38 @@ open class CalculatedAttributeDefinition extends cloudformation.Resource { /// - hidden DisplayName: (DisplayName)? + hidden Conditions: (CalculatedAttributeDefinitionConditions)? /// - hidden Description: (Description)? + hidden DomainName: CalculatedAttributeDefinitionDomainName /// - hidden Statistic: Statistic + hidden CalculatedAttributeName: CalculatedAttributeDefinitionCalculatedAttributeName /// - hidden DomainName: DomainName + hidden DisplayName: (CalculatedAttributeDefinitionDisplayName)? /// - hidden CalculatedAttributeName: CalculatedAttributeName + hidden Description: (CalculatedAttributeDefinitionDescription)? /// - hidden AttributeDetails: AttributeDetails + hidden Tags: (CalculatedAttributeDefinitionTags)? /// - hidden Conditions: (Conditions)? + hidden AttributeDetails: CalculatedAttributeDefinitionAttributeDetails /// - hidden Tags: (Tags)? + hidden Statistic: CalculatedAttributeDefinitionStatistic Properties { - ["DisplayName"] = if (DisplayName == null) null else DisplayName - ["Description"] = if (Description == null) null else Description - ["Statistic"] = if (Statistic == null) null else Statistic + ["Conditions"] = if (Conditions == null) null else Conditions ["DomainName"] = if (DomainName == null) null else DomainName ["CalculatedAttributeName"] = if (CalculatedAttributeName == null) null else CalculatedAttributeName - ["AttributeDetails"] = if (AttributeDetails == null) null else AttributeDetails - ["Conditions"] = if (Conditions == null) null else Conditions + ["DisplayName"] = if (DisplayName == null) null else DisplayName + ["Description"] = if (Description == null) null else Description ["Tags"] = if (Tags == null) null else Tags + ["AttributeDetails"] = if (AttributeDetails == null) null else AttributeDetails + ["Statistic"] = if (Statistic == null) null else Statistic } } diff --git a/pkl/aws/customerprofiles/domain.pkl b/pkl/aws/customerprofiles/domain.pkl index 9dae944b..af309aab 100644 --- a/pkl/aws/customerprofiles/domain.pkl +++ b/pkl/aws/customerprofiles/domain.pkl @@ -5,119 +5,108 @@ module aws.customerprofiles.domain import "../../cloudformation.pkl" -/// The S3 location where Identity Resolution Jobs write result files. -open class S3ExportingConfig { - S3BucketName: String(matches(Regex(#"^[a-z0-9.-]+$"#)))|Mapping - S3KeyName: (String(matches(Regex(#".*"#)))|Mapping)? -} - -/// Configuration information about the auto-merging process. -open class AutoMerging { +/// The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the GetMatches API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3. +open class DomainMatching { Enabled: Boolean|Mapping - ConflictResolution: (ConflictResolution)? - Consolidation: (Consolidation)? - MinAllowedConfidenceScoreForMerging: (Number|Mapping)? + AutoMerging: (DomainAutoMerging)? + ExportingConfig: (DomainExportingConfig)? + JobSchedule: (DomainJobSchedule)? } -/// A single rule level of the MatchRules. Configures how the rule-based matching process should match profiles. -open class MatchingRuleAttributeList { +/// A list of matching attributes that represent matching criteria. If two profiles meet at least one of the requirements in the matching attributes list, they will be merged. +open class DomainConsolidation { + MatchingAttributesList: Listing } typealias AttributeTypesSelectorAttributeMatchingModel = "ONE_TO_ONE"|"MANY_TO_MANY" /// Configures information about the AttributeTypesSelector where the rule-based identity resolution uses to match profiles. -open class AttributeTypesSelector { +open class DomainAttributeTypesSelector { AttributeMatchingModel: AttributeTypesSelectorAttributeMatchingModel|Mapping Address: (Listing)? EmailAddress: (Listing)? PhoneNumber: (Listing)? } -/// The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the GetMatches API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3. -open class Matching { - AutoMerging: (AutoMerging)? - ExportingConfig: (ExportingConfig)? - JobSchedule: (JobSchedule)? - Enabled: Boolean|Mapping +/// +open class DomainTag { + Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } /// Usage-specific statistics about the domain. -open class DomainStats { - ProfileCount: (Number|Mapping)? - TotalSize: (Number|Mapping)? +open class DomainDomainStats { MeteringProfileCount: (Number|Mapping)? ObjectCount: (Number|Mapping)? + ProfileCount: (Number|Mapping)? + TotalSize: (Number|Mapping)? } -/// -open class MatchingAttributes { -} - -/// A list of matching attributes that represent matching criteria. If two profiles meet at least one of the requirements in the matching attributes list, they will be merged. -open class Consolidation { - MatchingAttributesList: Listing -} - -/// Configuration information for exporting Identity Resolution results, for example, to an S3 bucket. -open class ExportingConfig { - S3Exporting: (S3ExportingConfig)? -} +typealias DomainMatchingRuleAttributeList = Listing<(String|Mapping)?> -typealias ConflictResolutionConflictResolvingModel = "RECENCY"|"SOURCE" -/// How the auto-merging process should resolve conflicts between different profiles. For example, if Profile A and Profile B have the same FirstName and LastName (and that is the matching criteria), which EmailAddress should be used? -open class ConflictResolution { - ConflictResolvingModel: ConflictResolutionConflictResolvingModel|Mapping - SourceName: (String|Mapping)? +/// The S3 location where Identity Resolution Jobs write result files. +open class DomainS3ExportingConfig { + S3BucketName: String(matches(Regex(#"^[a-z0-9.-]+$"#)))|Mapping + S3KeyName: (String(matches(Regex(#".*"#)))|Mapping)? } typealias JobScheduleDayOfTheWeek = "SUNDAY"|"MONDAY"|"TUESDAY"|"WEDNESDAY"|"THURSDAY"|"FRIDAY"|"SATURDAY" /// The day and time when do you want to start the Identity Resolution Job every week. -open class JobSchedule { - DayOfTheWeek: JobScheduleDayOfTheWeek|Mapping +open class DomainJobSchedule { Time: String(matches(Regex(#"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"#)))|Mapping + DayOfTheWeek: JobScheduleDayOfTheWeek|Mapping } -/// Specifies how does the rule-based matching process should match profiles. -open class MatchingRule { - Rule: MatchingRuleAttributeList +typealias ConflictResolutionConflictResolvingModel = "RECENCY"|"SOURCE" + +/// How the auto-merging process should resolve conflicts between different profiles. For example, if Profile A and Profile B have the same FirstName and LastName (and that is the matching criteria), which EmailAddress should be used? +open class DomainConflictResolution { + ConflictResolvingModel: ConflictResolutionConflictResolvingModel|Mapping + SourceName: (String|Mapping)? } typealias RuleBasedMatchingStatus = "PENDING"|"IN_PROGRESS"|"ACTIVE" /// The process of matching duplicate profiles using the Rule-Based matching. If RuleBasedMatching = true, Amazon Connect Customer Profiles will start to match and merge your profiles according to your configuration in the RuleBasedMatchingRequest. You can use the ListRuleBasedMatches and GetSimilarProfiles API to return and review the results. Also, if you have configured ExportingConfig in the RuleBasedMatchingRequest, you can download the results from S3. -open class RuleBasedMatching { - ConflictResolution: (ConflictResolution)? - ExportingConfig: (ExportingConfig)? - MatchingRules: (Listing)? +open class DomainRuleBasedMatching { + ExportingConfig: (DomainExportingConfig)? + MatchingRules: (Listing)? MaxAllowedRuleLevelForMatching: (Int|Mapping)? MaxAllowedRuleLevelForMerging: (Int|Mapping)? Status: (RuleBasedMatchingStatus|Mapping)? Enabled: Boolean|Mapping - AttributeTypesSelector: (AttributeTypesSelector)? + AttributeTypesSelector: (DomainAttributeTypesSelector)? + ConflictResolution: (DomainConflictResolution)? } -/// -open class Tag { - Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping - Value: String|Mapping +/// Configuration information about the auto-merging process. +open class DomainAutoMerging { + Enabled: Boolean|Mapping + ConflictResolution: (DomainConflictResolution)? + Consolidation: (DomainConsolidation)? + MinAllowedConfidenceScoreForMerging: (Number|Mapping)? } -/// A domain defined for 3rd party data source in Profile Service -open class Domain extends cloudformation.Resource { +typealias DomainMatchingAttributes = Listing<(String|Mapping)?> - Type = "AWS::CustomerProfiles::Domain" +/// Configuration information for exporting Identity Resolution results, for example, to an S3 bucket. +open class DomainExportingConfig { + S3Exporting: (DomainS3ExportingConfig)? +} - /// The URL of the SQS dead letter queue - hidden DeadLetterQueueUrl: (String|Mapping)? +/// Specifies how does the rule-based matching process should match profiles. +open class DomainMatchingRule { + Rule: DomainMatchingRuleAttributeList +} - /// The default number of days until the data within the domain expires. - hidden DefaultExpirationDays: Int|Mapping +/// A domain defined for 3rd party data source in Profile Service +open class Domain extends cloudformation.Resource { + + Type = "AWS::CustomerProfiles::Domain" - /// - hidden RuleBasedMatching: (RuleBasedMatching)? /// The unique name of the domain. hidden DomainName: String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping @@ -126,19 +115,28 @@ open class Domain extends cloudformation.Resource { hidden DefaultEncryptionKey: (String|Mapping)? /// - hidden Matching: (Matching)? + hidden Matching: (DomainMatching)? /// The tags (keys and values) associated with the domain - hidden Tags: (Listing)? + hidden Tags: (Listing)? + + /// The URL of the SQS dead letter queue + hidden DeadLetterQueueUrl: (String|Mapping)? + + /// The default number of days until the data within the domain expires. + hidden DefaultExpirationDays: Int|Mapping + + /// + hidden RuleBasedMatching: (DomainRuleBasedMatching)? Properties { - ["DeadLetterQueueUrl"] = if (DeadLetterQueueUrl == null) null else DeadLetterQueueUrl - ["DefaultExpirationDays"] = if (DefaultExpirationDays == null) null else DefaultExpirationDays - ["RuleBasedMatching"] = if (RuleBasedMatching == null) null else RuleBasedMatching ["DomainName"] = if (DomainName == null) null else DomainName ["DefaultEncryptionKey"] = if (DefaultEncryptionKey == null) null else DefaultEncryptionKey ["Matching"] = if (Matching == null) null else Matching ["Tags"] = if (Tags == null) null else Tags + ["DeadLetterQueueUrl"] = if (DeadLetterQueueUrl == null) null else DeadLetterQueueUrl + ["DefaultExpirationDays"] = if (DefaultExpirationDays == null) null else DefaultExpirationDays + ["RuleBasedMatching"] = if (RuleBasedMatching == null) null else RuleBasedMatching } } diff --git a/pkl/aws/customerprofiles/eventstream.pkl b/pkl/aws/customerprofiles/eventstream.pkl index a6c9b067..a71a2efa 100644 --- a/pkl/aws/customerprofiles/eventstream.pkl +++ b/pkl/aws/customerprofiles/eventstream.pkl @@ -5,18 +5,16 @@ module aws.customerprofiles.eventstream import "../../cloudformation.pkl" -/// A key-value pair to associate with a resource. -open class Tag { - Value: String|Mapping - Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping -} +typealias EventStreamUri = String|Mapping -/// The StreamARN of the destination to deliver profile events to. For example, arn:aws:kinesis:region:account-id:stream/stream-name -open class Uri { -} -/// The status of enabling the Kinesis stream as a destination for export. -open class Status { +typealias EventStreamStatus = String|Mapping + + +/// A key-value pair to associate with a resource. +open class EventStreamTag { + Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping + Value: String|Mapping } /// An Event Stream resource of Amazon Connect Customer Profiles @@ -25,23 +23,23 @@ open class EventStream extends cloudformation.Resource { Type = "AWS::CustomerProfiles::EventStream" + /// + hidden Uri: EventStreamUri + + /// The tags used to organize, track, or control access for this resource. + hidden Tags: (Listing)? + /// The unique name of the domain. hidden DomainName: String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping /// The name of the event stream. hidden EventStreamName: String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping - /// - hidden Uri: Uri - - /// The tags used to organize, track, or control access for this resource. - hidden Tags: (Listing)? - Properties { - ["DomainName"] = if (DomainName == null) null else DomainName - ["EventStreamName"] = if (EventStreamName == null) null else EventStreamName ["Uri"] = if (Uri == null) null else Uri ["Tags"] = if (Tags == null) null else Tags + ["DomainName"] = if (DomainName == null) null else DomainName + ["EventStreamName"] = if (EventStreamName == null) null else EventStreamName } } diff --git a/pkl/aws/customerprofiles/integration.pkl b/pkl/aws/customerprofiles/integration.pkl index 176ca03d..d296ecea 100644 --- a/pkl/aws/customerprofiles/integration.pkl +++ b/pkl/aws/customerprofiles/integration.pkl @@ -5,184 +5,177 @@ module aws.customerprofiles.integration import "../../cloudformation.pkl" -/// -open class DestinationField { -} +typealias IntegrationZendeskConnectorOperator = String|Mapping + /// -open class FlowDefinition { - SourceFlowConfig: SourceFlowConfig - FlowName: String(matches(Regex(#"[a-zA-Z0-9][\w!@#.-]+"#)))|Mapping - Description: (String(matches(Regex(#"[\w!@#\-.?,\s]*"#)))|Mapping)? - KmsArn: String(matches(Regex(#"arn:aws:kms:.*:[0-9]+:.*"#)))|Mapping - Tasks: Listing - TriggerConfig: TriggerConfig +open class IntegrationSourceConnectorProperties { + Marketo: (IntegrationMarketoSourceProperties)? + S3: (IntegrationS3SourceProperties)? + Salesforce: (IntegrationSalesforceSourceProperties)? + ServiceNow: (IntegrationServiceNowSourceProperties)? + Zendesk: (IntegrationZendeskSourceProperties)? } +typealias IntegrationTriggerType = String|Mapping + + /// -open class SalesforceSourceProperties { - EnableDynamicFieldUpdate: (Boolean|Mapping)? - IncludeDeletedRecords: (Boolean|Mapping)? - Object: Object +open class IntegrationZendeskSourceProperties { + Object: IntegrationObject } /// -open class ServiceNowSourceProperties { - Object: Object +open class IntegrationServiceNowSourceProperties { + Object: IntegrationObject } /// -open class ConnectorType { +open class IntegrationSalesforceSourceProperties { + Object: IntegrationObject + EnableDynamicFieldUpdate: (Boolean|Mapping)? + IncludeDeletedRecords: (Boolean|Mapping)? } +typealias IntegrationSalesforceConnectorOperator = String|Mapping + + /// -open class SalesforceConnectorOperator { +open class IntegrationFlowDefinition { + KmsArn: String(matches(Regex(#"arn:aws:kms:.*:[0-9]+:.*"#)))|Mapping + Tasks: Listing + TriggerConfig: IntegrationTriggerConfig + SourceFlowConfig: IntegrationSourceFlowConfig + FlowName: String(matches(Regex(#"[a-zA-Z0-9][\w!@#.-]+"#)))|Mapping + Description: (String(matches(Regex(#"[\w!@#\-.?,\s]*"#)))|Mapping)? } /// -open class Task { - ConnectorOperator: (ConnectorOperator)? - SourceFields: Listing - DestinationField: (DestinationField)? - TaskType: TaskType - TaskProperties: (Listing)? +open class IntegrationObjectTypeMapping { + Key: String|Mapping + Value: String(matches(Regex(#"^[a-zA-Z_][a-zA-Z_0-9-]*$"#)))|Mapping } /// -open class Date { +open class IntegrationTaskPropertiesMap { + OperatorPropertyKey: IntegrationOperatorPropertiesKeys + Property: String(matches(Regex(#".+"#)))|Mapping } +typealias IntegrationOperatorPropertiesKeys = String|Mapping + + +typealias IntegrationServiceNowConnectorOperator = String|Mapping + + /// -open class Tag { +open class IntegrationTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping Value: String|Mapping } /// -open class IncrementalPullConfig { - DatetimeTypeFieldName: (String|Mapping)? +open class IntegrationTriggerProperties { + Scheduled: (IntegrationScheduledTriggerProperties)? } -/// -open class MarketoConnectorOperator { -} +typealias ScheduledTriggerPropertiesDataPullMode = "Incremental"|"Complete" /// -open class S3ConnectorOperator { +open class IntegrationScheduledTriggerProperties { + ScheduleEndTime: (IntegrationDate)? + Timezone: (String(matches(Regex(#".*"#)))|Mapping)? + ScheduleOffset: (Int|Mapping)? + FirstExecutionFrom: (IntegrationDate)? + ScheduleExpression: String(matches(Regex(#".*"#)))|Mapping + DataPullMode: (ScheduledTriggerPropertiesDataPullMode|Mapping)? + ScheduleStartTime: (IntegrationDate)? } /// -open class TriggerProperties { - Scheduled: (ScheduledTriggerProperties)? +open class IntegrationIncrementalPullConfig { + DatetimeTypeFieldName: (String|Mapping)? } -/// -open class MarketoSourceProperties { - Object: Object -} +typealias IntegrationOperator = String|Mapping -/// -open class S3SourceProperties { - BucketName: String(matches(Regex(#"\S+"#)))|Mapping - BucketPrefix: (String(matches(Regex(#".*"#)))|Mapping)? -} -/// -open class SourceConnectorProperties { - ServiceNow: (ServiceNowSourceProperties)? - Zendesk: (ZendeskSourceProperties)? - Marketo: (MarketoSourceProperties)? - S3: (S3SourceProperties)? - Salesforce: (SalesforceSourceProperties)? -} +typealias IntegrationDestinationField = String|Mapping -/// -open class ConnectorOperator { - ServiceNow: (ServiceNowConnectorOperator)? - Zendesk: (ZendeskConnectorOperator)? - Marketo: (MarketoConnectorOperator)? - S3: (S3ConnectorOperator)? - Salesforce: (SalesforceConnectorOperator)? -} /// -open class ZendeskConnectorOperator { +open class IntegrationMarketoSourceProperties { + Object: IntegrationObject } -/// -open class Object { -} +typealias IntegrationConnectorType = String|Mapping -/// -open class ServiceNowConnectorOperator { -} -/// -open class ObjectTypeMapping { - Key: String|Mapping - Value: String(matches(Regex(#"^[a-zA-Z_][a-zA-Z_0-9-]*$"#)))|Mapping -} +typealias IntegrationMarketoConnectorOperator = String|Mapping + /// -open class SourceFlowConfig { - ConnectorType: ConnectorType +open class IntegrationSourceFlowConfig { + IncrementalPullConfig: (IntegrationIncrementalPullConfig)? + SourceConnectorProperties: IntegrationSourceConnectorProperties + ConnectorType: IntegrationConnectorType ConnectorProfileName: (String(matches(Regex(#"[\w/!@#+=.-]+"#)))|Mapping)? - IncrementalPullConfig: (IncrementalPullConfig)? - SourceConnectorProperties: SourceConnectorProperties } /// -open class TriggerType { +open class IntegrationS3SourceProperties { + BucketName: String(matches(Regex(#"\S+"#)))|Mapping + BucketPrefix: (String(matches(Regex(#".*"#)))|Mapping)? } -typealias ScheduledTriggerPropertiesDataPullMode = "Incremental"|"Complete" - /// -open class ScheduledTriggerProperties { - ScheduleOffset: (Int|Mapping)? - FirstExecutionFrom: (Date)? - ScheduleExpression: String(matches(Regex(#".*"#)))|Mapping - DataPullMode: (ScheduledTriggerPropertiesDataPullMode|Mapping)? - ScheduleStartTime: (Date)? - ScheduleEndTime: (Date)? - Timezone: (String(matches(Regex(#".*"#)))|Mapping)? +open class IntegrationTask { + ConnectorOperator: (IntegrationConnectorOperator)? + SourceFields: Listing + DestinationField: (IntegrationDestinationField)? + TaskType: IntegrationTaskType + TaskProperties: (Listing)? } /// -open class TriggerConfig { - TriggerType: TriggerType - TriggerProperties: (TriggerProperties)? +open class IntegrationConnectorOperator { + S3: (IntegrationS3ConnectorOperator)? + Salesforce: (IntegrationSalesforceConnectorOperator)? + ServiceNow: (IntegrationServiceNowConnectorOperator)? + Zendesk: (IntegrationZendeskConnectorOperator)? + Marketo: (IntegrationMarketoConnectorOperator)? } -/// -open class OperatorPropertiesKeys { -} +typealias IntegrationObject = String|Mapping -/// -open class TaskType { -} -/// -open class Operator { -} +typealias IntegrationS3ConnectorOperator = String|Mapping + + +typealias IntegrationTaskType = String|Mapping -/// -open class TaskPropertiesMap { - OperatorPropertyKey: OperatorPropertiesKeys - Property: String(matches(Regex(#".+"#)))|Mapping -} /// -open class ZendeskSourceProperties { - Object: Object +open class IntegrationTriggerConfig { + TriggerType: IntegrationTriggerType + TriggerProperties: (IntegrationTriggerProperties)? } +typealias IntegrationDate = Number|Mapping + + /// The resource schema for creating an Amazon Connect Customer Profiles Integration. open class Integration extends cloudformation.Resource { Type = "AWS::CustomerProfiles::Integration" + /// The tags (keys and values) associated with the integration + hidden Tags: (Listing)? + + /// The mapping between 3rd party event types and ObjectType names + hidden ObjectTypeNames: (Listing)? + /// The unique name of the domain. hidden DomainName: String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping @@ -190,24 +183,18 @@ open class Integration extends cloudformation.Resource { hidden Uri: (String|Mapping)? /// - hidden FlowDefinition: (FlowDefinition)? + hidden FlowDefinition: (IntegrationFlowDefinition)? /// The name of the ObjectType defined for the 3rd party data in Profile Service hidden ObjectTypeName: (String(matches(Regex(#"^[a-zA-Z_][a-zA-Z_0-9-]*$"#)))|Mapping)? - /// The tags (keys and values) associated with the integration - hidden Tags: (Listing)? - - /// The mapping between 3rd party event types and ObjectType names - hidden ObjectTypeNames: (Listing)? - Properties { + ["Tags"] = if (Tags == null) null else Tags + ["ObjectTypeNames"] = if (ObjectTypeNames == null) null else ObjectTypeNames ["DomainName"] = if (DomainName == null) null else DomainName ["Uri"] = if (Uri == null) null else Uri ["FlowDefinition"] = if (FlowDefinition == null) null else FlowDefinition ["ObjectTypeName"] = if (ObjectTypeName == null) null else ObjectTypeName - ["Tags"] = if (Tags == null) null else Tags - ["ObjectTypeNames"] = if (ObjectTypeNames == null) null else ObjectTypeNames } } diff --git a/pkl/aws/customerprofiles/objecttype.pkl b/pkl/aws/customerprofiles/objecttype.pkl index db60deee..acde1a08 100644 --- a/pkl/aws/customerprofiles/objecttype.pkl +++ b/pkl/aws/customerprofiles/objecttype.pkl @@ -6,36 +6,36 @@ module aws.customerprofiles.objecttype import "../../cloudformation.pkl" /// -open class Tag { +open class ObjectTypeTag { Key: String(matches(Regex(#"^(?!aws:)[a-zA-Z+-=._:/]+$"#)))|Mapping Value: String|Mapping } /// -open class FieldMap { +open class ObjectTypeFieldMap { Name: (String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping)? - ObjectTypeField: (ObjectTypeField)? + ObjectTypeField: (ObjectTypeObjectTypeField)? } typealias ObjectTypeFieldContentType = "STRING"|"NUMBER"|"PHONE_NUMBER"|"EMAIL_ADDRESS"|"NAME" /// Represents a field in a ProfileObjectType. -open class ObjectTypeField { +open class ObjectTypeObjectTypeField { + ContentType: (ObjectTypeFieldContentType|Mapping)? Source: (String|Mapping)? Target: (String|Mapping)? - ContentType: (ObjectTypeFieldContentType|Mapping)? } /// -open class KeyMap { +open class ObjectTypeKeyMap { Name: (String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping)? - ObjectTypeKeyList: (Listing)? + ObjectTypeKeyList: (Listing)? } typealias ObjectTypeKeyStandardIdentifiers = "PROFILE"|"UNIQUE"|"SECONDARY"|"LOOKUP_ONLY"|"NEW_ONLY"|"ASSET"|"CASE"|"ORDER" /// An object that defines the Key element of a ProfileObject. A Key is a special element that can be used to search for a customer profile. -open class ObjectTypeKey { +open class ObjectTypeObjectTypeKey { FieldNames: (Listing)? StandardIdentifiers: (Listing)? } @@ -46,20 +46,20 @@ open class ObjectType extends cloudformation.Resource { Type = "AWS::CustomerProfiles::ObjectType" - /// The default encryption key - hidden EncryptionKey: (String|Mapping)? + /// The tags (keys and values) associated with the integration. + hidden Tags: (Listing)? - /// The default number of days until the data within the domain expires. - hidden ExpirationDays: (Int|Mapping)? + /// A unique identifier for the object template. + hidden TemplateId: (String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping)? - /// A list of the name and ObjectType field. - hidden Fields: (Listing)? + /// Description of the profile object type. + hidden Description: String|Mapping - /// A list of unique keys that can be used to map data to the profile. - hidden Keys: (Listing)? + /// The unique name of the domain. + hidden DomainName: String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping - /// A unique identifier for the object template. - hidden TemplateId: (String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping)? + /// The default number of days until the data within the domain expires. + hidden ExpirationDays: (Int|Mapping)? /// Indicates whether a profile should be created when data is received. hidden AllowProfileCreation: (Boolean|Mapping)? @@ -67,30 +67,30 @@ open class ObjectType extends cloudformation.Resource { /// The format of your sourceLastUpdatedTimestamp that was previously set up. hidden SourceLastUpdatedTimestampFormat: (String|Mapping)? - /// The tags (keys and values) associated with the integration. - hidden Tags: (Listing)? + /// A list of the name and ObjectType field. + hidden Fields: (Listing)? - /// The unique name of the domain. - hidden DomainName: String(matches(Regex(#"^[a-zA-Z0-9_-]+$"#)))|Mapping + /// A list of unique keys that can be used to map data to the profile. + hidden Keys: (Listing)? /// The name of the profile object type. hidden ObjectTypeName: String(matches(Regex(#"^[a-zA-Z_][a-zA-Z_0-9-]*$"#)))|Mapping - /// Description of the profile object type. - hidden Description: String|Mapping + /// The default encryption key + hidden EncryptionKey: (String|Mapping)? Properties { - ["EncryptionKey"] = if (EncryptionKey == null) null else EncryptionKey - ["ExpirationDays"] = if (ExpirationDays == null) null else ExpirationDays - ["Fields"] = if (Fields == null) null else Fields - ["Keys"] = if (Keys == null) null else Keys + ["Tags"] = if (Tags == null) null else Tags ["TemplateId"] = if (TemplateId == null) null else TemplateId + ["Description"] = if (Description == null) null else Description + ["DomainName"] = if (DomainName == null) null else DomainName + ["ExpirationDays"] = if (ExpirationDays == null) null else ExpirationDays ["AllowProfileCreation"] = if (AllowProfileCreation == null) null else AllowProfileCreation ["SourceLastUpdatedTimestampFormat"] = if (SourceLastUpdatedTimestampFormat == null) null else SourceLastUpdatedTimestampFormat - ["Tags"] = if (Tags == null) null else Tags - ["DomainName"] = if (DomainName == null) null else DomainName + ["Fields"] = if (Fields == null) null else Fields + ["Keys"] = if (Keys == null) null else Keys ["ObjectTypeName"] = if (ObjectTypeName == null) null else ObjectTypeName - ["Description"] = if (Description == null) null else Description + ["EncryptionKey"] = if (EncryptionKey == null) null else EncryptionKey } } diff --git a/pkl/aws/databrew/dataset.pkl b/pkl/aws/databrew/dataset.pkl index 0c596736..4cd26bd5 100644 --- a/pkl/aws/databrew/dataset.pkl +++ b/pkl/aws/databrew/dataset.pkl @@ -6,127 +6,126 @@ module aws.databrew.dataset import "../../cloudformation.pkl" /// -open class DataCatalogInputDefinition { +open class DatasetDataCatalogInputDefinition { + TempDirectory: (DatasetS3Location)? CatalogId: (String|Mapping)? DatabaseName: (String|Mapping)? TableName: (String|Mapping)? - TempDirectory: (S3Location)? } -/// -open class DatabaseInputDefinition { - GlueConnectionName: String|Mapping - DatabaseTableName: (String|Mapping)? - TempDirectory: (S3Location)? - QueryString: (String|Mapping)? +/// Path options for dataset +open class DatasetPathOptions { + FilesLimit: (DatasetFilesLimit)? + LastModifiedDateCondition: (DatasetFilterExpression)? + Parameters: (Listing)? } -typealias DatasetParameterType = "String"|"Number"|"Datetime" - -/// -open class DatasetParameter { - Name: PathParameterName - Type: DatasetParameterType|Mapping - DatetimeOptions: (DatetimeOptions)? - CreateColumn: (Boolean|Mapping)? - Filter: (FilterExpression)? +/// A key-value pair to associate dataset parameter name with its definition. +open class DatasetPathParameter { + PathParameterName: DatasetPathParameterName + DatasetParameter: DatasetDatasetParameter } -/// -open class DatetimeOptions { - LocaleCode: (String(matches(Regex(#"^[A-Za-z0-9_\.#@\-]+$"#)))|Mapping)? - Format: String|Mapping - TimezoneOffset: (String(matches(Regex(#"^(Z|[-+](\d|\d{2}|\d{2}:?\d{2}))$"#)))|Mapping)? +/// Input location +open class DatasetS3Location { + Bucket: String|Mapping + Key: (String|Mapping)? } +typealias FilesLimitOrderedBy = "LAST_MODIFIED_DATE" + +typealias FilesLimitOrder = "ASCENDING"|"DESCENDING" + /// -open class FilterExpression { - Expression: String(matches(Regex(#"^[><0-9A-Za-z_.,:)(!= ]+$"#)))|Mapping - ValuesMap: Listing +open class DatasetFilesLimit { + MaxFiles: Int|Mapping + OrderedBy: (FilesLimitOrderedBy|Mapping)? + Order: (FilesLimitOrder|Mapping)? } /// Csv options -open class CsvOptions { +open class DatasetCsvOptions { Delimiter: (String|Mapping)? HeaderRow: (Boolean|Mapping)? } -/// Input location -open class S3Location { - Key: (String|Mapping)? - Bucket: String|Mapping +/// Format options for dataset +open class DatasetFormatOptions { + Json: (DatasetJsonOptions)? + Excel: (DatasetExcelOptions)? + Csv: (DatasetCsvOptions)? } -/// Path options for dataset -open class PathOptions { - Parameters: (Listing)? - FilesLimit: (FilesLimit)? - LastModifiedDateCondition: (FilterExpression)? +/// +open class DatasetMetadata { + SourceArn: (String|Mapping)? } -/// A key-value pair to associate expression variable names with their values -open class FilterValue { - Value: String|Mapping - ValueReference: String(matches(Regex(#"^:[A-Za-z0-9_]+$"#)))|Mapping -} +typealias DatasetPathParameterName = String|Mapping + /// -open class ExcelOptions { - SheetIndexes: (Listing)? - HeaderRow: (Boolean|Mapping)? - SheetNames: (Listing)? +open class DatasetFilterExpression { + Expression: String(matches(Regex(#"^[><0-9A-Za-z_.,:)(!= ]+$"#)))|Mapping + ValuesMap: Listing } -/// Format options for dataset -open class FormatOptions { - Excel: (ExcelOptions)? - Csv: (CsvOptions)? - Json: (JsonOptions)? +/// Input +open class DatasetInput { + S3InputDefinition: (DatasetS3Location)? + DataCatalogInputDefinition: (DatasetDataCatalogInputDefinition)? + DatabaseInputDefinition: (DatasetDatabaseInputDefinition)? + Metadata: (DatasetMetadata)? } -typealias FilesLimitOrder = "ASCENDING"|"DESCENDING" - -typealias FilesLimitOrderedBy = "LAST_MODIFIED_DATE" +/// +open class DatasetDatabaseInputDefinition { + QueryString: (String|Mapping)? + GlueConnectionName: String|Mapping + DatabaseTableName: (String|Mapping)? + TempDirectory: (DatasetS3Location)? +} /// -open class FilesLimit { - Order: (FilesLimitOrder|Mapping)? - MaxFiles: Int|Mapping - OrderedBy: (FilesLimitOrderedBy|Mapping)? +open class DatasetExcelOptions { + HeaderRow: (Boolean|Mapping)? + SheetNames: (Listing)? + SheetIndexes: (Listing)? } -/// A key-value pair to associate dataset parameter name with its definition. -open class PathParameter { - PathParameterName: PathParameterName - DatasetParameter: DatasetParameter +typealias DatasetParameterType = "String"|"Number"|"Datetime" + +/// +open class DatasetDatasetParameter { + Name: DatasetPathParameterName + Type: DatasetParameterType|Mapping + DatetimeOptions: (DatasetDatetimeOptions)? + CreateColumn: (Boolean|Mapping)? + Filter: (DatasetFilterExpression)? } -/// Parameter name -open class PathParameterName { +/// Json options +open class DatasetJsonOptions { + MultiLine: (Boolean|Mapping)? } /// A key-value pair to associate with a resource. -open class Tag { +open class DatasetTag { Key: String|Mapping Value: String|Mapping } -/// Json options -open class JsonOptions { - MultiLine: (Boolean|Mapping)? +/// A key-value pair to associate expression variable names with their values +open class DatasetFilterValue { + ValueReference: String(matches(Regex(#"^:[A-Za-z0-9_]+$"#)))|Mapping + Value: String|Mapping } /// -open class Metadata { - SourceArn: (String|Mapping)? -} - -/// Input -open class Input { - S3InputDefinition: (S3Location)? - DataCatalogInputDefinition: (DataCatalogInputDefinition)? - DatabaseInputDefinition: (DatabaseInputDefinition)? - Metadata: (Metadata)? +open class DatasetDatetimeOptions { + Format: String|Mapping + TimezoneOffset: (String(matches(Regex(#"^(Z|[-+](\d|\d{2}|\d{2}:?\d{2}))$"#)))|Mapping)? + LocaleCode: (String(matches(Regex(#"^[A-Za-z0-9_\.#@\-]+$"#)))|Mapping)? } /// Resource schema for AWS::DataBrew::Dataset. @@ -135,9 +134,6 @@ open class Dataset extends cloudformation.Resource { Type = "AWS::DataBrew::Dataset" - /// - hidden Tags: (Listing)? - /// Dataset name hidden Name: String|Mapping @@ -145,21 +141,24 @@ open class Dataset extends cloudformation.Resource { hidden Format: (DatasetFormat|Mapping)? /// Format options for dataset - hidden FormatOptions: (FormatOptions)? + hidden FormatOptions: (DatasetFormatOptions)? /// Input - hidden Input: Input + hidden Input: DatasetInput /// PathOptions - hidden PathOptions: (PathOptions)? + hidden PathOptions: (DatasetPathOptions)? + + /// + hidden Tags: (Listing)? Properties { - ["Tags"] = if (Tags == null) null else Tags ["Name"] = if (Name == null) null else Name ["Format"] = if (Format == null) null else Format ["FormatOptions"] = if (FormatOptions == null) null else FormatOptions ["Input"] = if (Input == null) null else Input ["PathOptions"] = if (PathOptions == null) null else PathOptions + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/databrew/job.pkl b/pkl/aws/databrew/job.pkl index 85d49778..b41321f4 100644 --- a/pkl/aws/databrew/job.pkl +++ b/pkl/aws/databrew/job.pkl @@ -5,160 +5,155 @@ module aws.databrew.job import "../../cloudformation.pkl" -/// -open class EntityDetectorConfiguration { - EntityTypes: Listing - AllowedStatistics: (AllowedStatistics)? +/// Configuration to attach Rulesets to the job +open class JobValidationConfiguration { + RulesetArn: String|Mapping + ValidationMode: (JobValidationMode)? } -/// -open class AllowedStatistics { - Statistics: Listing +typealias JobValidationMode = String|Mapping + + +/// Job Sample +open class JobJobSample { + Mode: (JobSampleMode)? + Size: (JobJobSize)? +} + +/// Format options for job Output +open class JobOutputFormatOptions { + Csv: (JobCsvOutputOptions)? } /// -open class S3TableOutputOptions { - Location: S3Location +open class JobDatabaseTableOutputOptions { + TempDirectory: (JobS3Location)? + TableName: String|Mapping } -typealias OutputCompressionFormat = "GZIP"|"LZ4"|"SNAPPY"|"BZIP2"|"DEFLATE"|"LZO"|"BROTLI"|"ZSTD"|"ZLIB" +typealias JobStatistic = String|Mapping -typealias OutputFormat = "CSV"|"JSON"|"PARQUET"|"GLUEPARQUET"|"AVRO"|"ORC"|"XML"|"TABLEAUHYPER" -/// -open class Output { - MaxOutputFiles: (Int|Mapping)? - CompressionFormat: (OutputCompressionFormat|Mapping)? - Format: (OutputFormat|Mapping)? - FormatOptions: (OutputFormatOptions)? - PartitionColumns: (Listing)? - Location: S3Location - Overwrite: (Boolean|Mapping)? +/// A key-value pair to associate with a resource. +open class JobTag { + Value: String|Mapping + Key: String|Mapping } /// -open class Recipe { - Name: String|Mapping - Version: (String|Mapping)? +open class JobAllowedStatistics { + Statistics: Listing } -/// S3 Output location -open class S3Location { - Key: (String|Mapping)? - BucketOwner: (String|Mapping)? - Bucket: String|Mapping -} +typealias JobParameterMap = Mapping -/// Output location -open class OutputLocation { - Bucket: String|Mapping - Key: (String|Mapping)? - BucketOwner: (String|Mapping)? -} /// -open class ValidationMode { +open class JobS3TableOutputOptions { + Location: JobS3Location } -/// Format options for job Output -open class OutputFormatOptions { - Csv: (CsvOutputOptions)? +/// +open class JobProfileConfiguration { + DatasetStatisticsConfiguration: (JobStatisticsConfiguration)? + ProfileColumns: (Listing)? + ColumnStatisticsConfigurations: (Listing)? + EntityDetectorConfiguration: (JobEntityDetectorConfiguration)? } -/// Job Sample -open class JobSample { - Mode: (SampleMode)? - Size: (JobSize)? +/// +open class JobStatisticsConfiguration { + IncludedStatistics: (Listing)? + Overrides: (Listing)? } +typealias OutputCompressionFormat = "GZIP"|"LZ4"|"SNAPPY"|"BZIP2"|"DEFLATE"|"LZO"|"BROTLI"|"ZSTD"|"ZLIB" + +typealias OutputFormat = "CSV"|"JSON"|"PARQUET"|"GLUEPARQUET"|"AVRO"|"ORC"|"XML"|"TABLEAUHYPER" + /// -open class ProfileConfiguration { - DatasetStatisticsConfiguration: (StatisticsConfiguration)? - ProfileColumns: (Listing)? - ColumnStatisticsConfigurations: (Listing)? - EntityDetectorConfiguration: (EntityDetectorConfiguration)? +open class JobOutput { + MaxOutputFiles: (Int|Mapping)? + CompressionFormat: (OutputCompressionFormat|Mapping)? + Format: (OutputFormat|Mapping)? + FormatOptions: (JobOutputFormatOptions)? + PartitionColumns: (Listing)? + Location: JobS3Location + Overwrite: (Boolean|Mapping)? } /// Output Csv options -open class CsvOutputOptions { +open class JobCsvOutputOptions { Delimiter: (String|Mapping)? } -/// -open class ColumnStatisticsConfiguration { - Selectors: (Listing)? - Statistics: StatisticsConfiguration +/// Output location +open class JobOutputLocation { + Bucket: String|Mapping + Key: (String|Mapping)? + BucketOwner: (String|Mapping)? } -/// -open class Statistic { -} +typealias JobSampleMode = String|Mapping + /// -open class DataCatalogOutput { +open class JobDataCatalogOutput { + DatabaseOptions: (JobDatabaseTableOutputOptions)? Overwrite: (Boolean|Mapping)? CatalogId: (String|Mapping)? DatabaseName: String|Mapping TableName: String|Mapping - S3Options: (S3TableOutputOptions)? - DatabaseOptions: (DatabaseTableOutputOptions)? -} - -/// Sample configuration mode for profile jobs. -open class SampleMode { + S3Options: (JobS3TableOutputOptions)? } -/// -open class StatisticsConfiguration { - IncludedStatistics: (Listing)? - Overrides: (Listing)? -} - -/// -open class StatisticOverride { - Statistic: Statistic - Parameters: ParameterMap -} +typealias JobJobSize = Int|Mapping -/// Configuration to attach Rulesets to the job -open class ValidationConfiguration { - RulesetArn: String|Mapping - ValidationMode: (ValidationMode)? -} typealias DatabaseOutputDatabaseOutputMode = "NEW_TABLE" /// -open class DatabaseOutput { +open class JobDatabaseOutput { GlueConnectionName: String|Mapping DatabaseOutputMode: (DatabaseOutputDatabaseOutputMode|Mapping)? - DatabaseOptions: DatabaseTableOutputOptions + DatabaseOptions: JobDatabaseTableOutputOptions } -/// A key-value pair to associate with a resource. -open class Tag { - Key: String|Mapping - Value: String|Mapping +/// S3 Output location +open class JobS3Location { + BucketOwner: (String|Mapping)? + Bucket: String|Mapping + Key: (String|Mapping)? } /// -open class ParameterMap { -} - -/// Sample configuration size for profile jobs. -open class JobSize { +open class JobColumnStatisticsConfiguration { + Statistics: JobStatisticsConfiguration + Selectors: (Listing)? } /// -open class ColumnSelector { +open class JobColumnSelector { Regex: (String|Mapping)? Name: (String|Mapping)? } /// -open class DatabaseTableOutputOptions { - TempDirectory: (S3Location)? - TableName: String|Mapping +open class JobRecipe { + Name: String|Mapping + Version: (String|Mapping)? +} + +/// +open class JobStatisticOverride { + Statistic: JobStatistic + Parameters: JobParameterMap +} + +/// +open class JobEntityDetectorConfiguration { + AllowedStatistics: (JobAllowedStatistics)? + EntityTypes: Listing } /// Resource schema for AWS::DataBrew::Job. @@ -167,94 +162,94 @@ open class Job extends cloudformation.Resource { Type = "AWS::DataBrew::Job" - /// Log subscription - hidden LogSubscription: (JobLogSubscription|Mapping)? + /// Output location + hidden OutputLocation: (JobOutputLocation)? - /// Max capacity - hidden MaxCapacity: (Int|Mapping)? + /// + hidden Tags: (Listing)? + + /// Timeout + hidden Timeout: (Int|Mapping)? /// - hidden Outputs: (Listing)? + hidden DataCatalogOutputs: (Listing)? /// - hidden DatabaseOutputs: (Listing)? + hidden DatabaseOutputs: (Listing)? - /// Timeout - hidden Timeout: (Int|Mapping)? + /// Max capacity + hidden MaxCapacity: (Int|Mapping)? - /// Encryption Key Arn - hidden EncryptionKeyArn: (String|Mapping)? + /// Role arn + hidden RoleArn: String|Mapping /// Encryption mode hidden EncryptionMode: (JobEncryptionMode|Mapping)? - /// Job name - hidden Name: String|Mapping + /// Job Sample + hidden JobSample: (JobJobSample)? - /// Max retries - hidden MaxRetries: (Int|Mapping)? + /// Profile Job configuration + hidden ProfileConfiguration: (JobProfileConfiguration)? - /// Output location - hidden OutputLocation: (OutputLocation)? + /// Dataset name + hidden DatasetName: (String|Mapping)? - /// Role arn - hidden RoleArn: String|Mapping + /// Encryption Key Arn + hidden EncryptionKeyArn: (String|Mapping)? - /// - hidden DataCatalogOutputs: (Listing)? + /// Log subscription + hidden LogSubscription: (JobLogSubscription|Mapping)? + + /// Max retries + hidden MaxRetries: (Int|Mapping)? /// - hidden Recipe: (Recipe)? + hidden Outputs: (Listing)? + + /// Project name + hidden ProjectName: (String|Mapping)? /// - hidden Tags: (Listing)? + hidden Recipe: (JobRecipe)? /// Data quality rules configuration - hidden ValidationConfigurations: (Listing)? + hidden ValidationConfigurations: (Listing)? - /// Dataset name - hidden DatasetName: (String|Mapping)? + /// Job name + hidden Name: String|Mapping /// Job type hidden TypeProperty: JobType|Mapping - /// Project name - hidden ProjectName: (String|Mapping)? - - /// Job Sample - hidden JobSample: (JobSample)? - - /// Profile Job configuration - hidden ProfileConfiguration: (ProfileConfiguration)? - Properties { - ["LogSubscription"] = if (LogSubscription == null) null else LogSubscription - ["MaxCapacity"] = if (MaxCapacity == null) null else MaxCapacity - ["Outputs"] = if (Outputs == null) null else Outputs - ["DatabaseOutputs"] = if (DatabaseOutputs == null) null else DatabaseOutputs + ["OutputLocation"] = if (OutputLocation == null) null else OutputLocation + ["Tags"] = if (Tags == null) null else Tags ["Timeout"] = if (Timeout == null) null else Timeout - ["EncryptionKeyArn"] = if (EncryptionKeyArn == null) null else EncryptionKeyArn + ["DataCatalogOutputs"] = if (DataCatalogOutputs == null) null else DataCatalogOutputs + ["DatabaseOutputs"] = if (DatabaseOutputs == null) null else DatabaseOutputs + ["MaxCapacity"] = if (MaxCapacity == null) null else MaxCapacity + ["RoleArn"] = if (RoleArn == null) null else RoleArn ["EncryptionMode"] = if (EncryptionMode == null) null else EncryptionMode - ["Name"] = if (Name == null) null else Name + ["JobSample"] = if (JobSample == null) null else JobSample + ["ProfileConfiguration"] = if (ProfileConfiguration == null) null else ProfileConfiguration + ["DatasetName"] = if (DatasetName == null) null else DatasetName + ["EncryptionKeyArn"] = if (EncryptionKeyArn == null) null else EncryptionKeyArn + ["LogSubscription"] = if (LogSubscription == null) null else LogSubscription ["MaxRetries"] = if (MaxRetries == null) null else MaxRetries - ["OutputLocation"] = if (OutputLocation == null) null else OutputLocation - ["RoleArn"] = if (RoleArn == null) null else RoleArn - ["DataCatalogOutputs"] = if (DataCatalogOutputs == null) null else DataCatalogOutputs + ["Outputs"] = if (Outputs == null) null else Outputs + ["ProjectName"] = if (ProjectName == null) null else ProjectName ["Recipe"] = if (Recipe == null) null else Recipe - ["Tags"] = if (Tags == null) null else Tags ["ValidationConfigurations"] = if (ValidationConfigurations == null) null else ValidationConfigurations - ["DatasetName"] = if (DatasetName == null) null else DatasetName + ["Name"] = if (Name == null) null else Name ["Type"] = if (TypeProperty == null) null else TypeProperty - ["ProjectName"] = if (ProjectName == null) null else ProjectName - ["JobSample"] = if (JobSample == null) null else JobSample - ["ProfileConfiguration"] = if (ProfileConfiguration == null) null else ProfileConfiguration } } -typealias JobLogSubscription = "ENABLE"|"DISABLE" - typealias JobEncryptionMode = "SSE-KMS"|"SSE-S3" +typealias JobLogSubscription = "ENABLE"|"DISABLE" + typealias JobType = "PROFILE"|"RECIPE" diff --git a/pkl/aws/databrew/project.pkl b/pkl/aws/databrew/project.pkl index fb64d333..6b0038c2 100644 --- a/pkl/aws/databrew/project.pkl +++ b/pkl/aws/databrew/project.pkl @@ -8,13 +8,13 @@ import "../../cloudformation.pkl" typealias SampleType = "FIRST_N"|"LAST_N"|"RANDOM" /// -open class Sample { +open class ProjectSample { Size: (Int|Mapping)? Type: SampleType|Mapping } /// A key-value pair to associate with a resource. -open class Tag { +open class ProjectTag { Key: String|Mapping Value: String|Mapping } @@ -25,6 +25,12 @@ open class Project extends cloudformation.Resource { Type = "AWS::DataBrew::Project" + /// Sample + hidden Sample: (ProjectSample)? + + /// + hidden Tags: (Listing)? + /// Dataset name hidden DatasetName: String|Mapping @@ -37,19 +43,13 @@ open class Project extends cloudformation.Resource { /// Role arn hidden RoleArn: String|Mapping - /// Sample - hidden Sample: (Sample)? - - /// - hidden Tags: (Listing)? - Properties { + ["Sample"] = if (Sample == null) null else Sample + ["Tags"] = if (Tags == null) null else Tags ["DatasetName"] = if (DatasetName == null) null else DatasetName ["Name"] = if (Name == null) null else Name ["RecipeName"] = if (RecipeName == null) null else RecipeName ["RoleArn"] = if (RoleArn == null) null else RoleArn - ["Sample"] = if (Sample == null) null else Sample - ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/databrew/recipe.pkl b/pkl/aws/databrew/recipe.pkl index 2af091c6..19e94bc4 100644 --- a/pkl/aws/databrew/recipe.pkl +++ b/pkl/aws/databrew/recipe.pkl @@ -4,3 +4,141 @@ module aws.databrew.recipe import "../../cloudformation.pkl" + +/// +open class RecipeRecipeStep { + Action: RecipeAction + ConditionExpressions: (Listing)? +} + +/// +open class RecipeAction { + Operation: String|Mapping +} + +/// Condition expressions applied to the step action +open class RecipeConditionExpression { + Condition: String|Mapping + Value: (String|Mapping)? + TargetColumn: String|Mapping +} + +/// +open class RecipeRecipeParameters { + EndValue: (String|Mapping)? + Limit: (String|Mapping)? + ColumnRange: (String|Mapping)? + CustomStopWords: (String|Mapping)? + Value1: (String|Mapping)? + ColumnDataType: (String|Mapping)? + JoinType: (String|Mapping)? + Units: (String|Mapping)? + Delimiter: (String|Mapping)? + IncludeInSplit: (String|Mapping)? + EndPattern: (String|Mapping)? + SourceColumn: (String|Mapping)? + SampleType: (String|Mapping)? + TargetIndex: (String|Mapping)? + RemoveCustomCharacters: (String|Mapping)? + StartPattern: (String|Mapping)? + MultiLine: (Boolean|Mapping)? + NumRowsAfter: (String|Mapping)? + RemoveLeadingAndTrailingPunctuation: (String|Mapping)? + OrderByColumns: (String|Mapping)? + StepIndex: (String|Mapping)? + OrderByColumn: (String|Mapping)? + GroupByAggFunctionOptions: (String|Mapping)? + NumRowsBefore: (String|Mapping)? + StartValue: (String|Mapping)? + UpperBound: (String|Mapping)? + Base: (String|Mapping)? + DeleteOtherRows: (String|Mapping)? + PatternOption2: (String|Mapping)? + Position: (String|Mapping)? + UseNewDataFrame: (String|Mapping)? + RemoveSpecialCharacters: (String|Mapping)? + TrueString: (String|Mapping)? + Value: (String|Mapping)? + CustomCharacters: (String|Mapping)? + PatternOption1: (String|Mapping)? + StepCount: (String|Mapping)? + DateTimeParameters: (String|Mapping)? + HiddenColumns: (String|Mapping)? + LowerBound: (String|Mapping)? + Pattern: (String|Mapping)? + SampleSize: (String|Mapping)? + CategoryMap: (String|Mapping)? + EndPosition: (String|Mapping)? + ModeType: (String|Mapping)? + RightColumns: (String|Mapping)? + DateAddValue: (String|Mapping)? + Interval: (String|Mapping)? + RemoveCustomValue: (String|Mapping)? + RemoveSourceColumn: (String|Mapping)? + ViewFrame: (String|Mapping)? + DateTimeFormat: (String|Mapping)? + FalseString: (String|Mapping)? + RemoveNumbers: (String|Mapping)? + CollapseConsecutiveWhitespace: (String|Mapping)? + MapType: (String|Mapping)? + IsText: (String|Mapping)? + Input: (Dynamic)? + TargetColumnNames: (String|Mapping)? + ValueColumn: (String|Mapping)? + SourceColumns: (String|Mapping)? + TimeZone: (String|Mapping)? + RemoveAllPunctuation: (String|Mapping)? + RemoveAllQuotes: (String|Mapping)? + TargetColumn: (String|Mapping)? + NumRows: (String|Mapping)? + Other: (String|Mapping)? + PatternOptions: (String|Mapping)? + StemmingMode: (String|Mapping)? + GroupByColumns: (String|Mapping)? + RemoveLeadingAndTrailingQuotes: (String|Mapping)? + StartPosition: (String|Mapping)? + StopWordsMode: (String|Mapping)? + Value2: (String|Mapping)? + CaseStatement: (String|Mapping)? + CharsToRemove: (String|Mapping)? + RemoveLeadingAndTrailingWhitespace: (String|Mapping)? + StartColumnIndex: (String|Mapping)? + UnpivotColumn: (String|Mapping)? + ExpandContractions: (String|Mapping)? + LeftColumns: (String|Mapping)? + RemoveAllWhitespace: (String|Mapping)? + SheetNames: (Listing)? + AggregateFunction: (String|Mapping)? + IgnoreCase: (String|Mapping)? + SourceColumn2: (String|Mapping)? + TargetDateFormat: (String|Mapping)? + JoinKeys: (String|Mapping)? + SecondInput: (String|Mapping)? + SourceColumn1: (String|Mapping)? + SheetIndexes: (Listing)? + TokenizerPattern: (String|Mapping)? + DatasetsColumns: (String|Mapping)? + Period: (String|Mapping)? + SecondaryInputs: (Listing)? + Strategy: (String|Mapping)? + UdfLang: (String|Mapping)? + CustomValue: (String|Mapping)? + Exponent: (String|Mapping)? + Count: (String|Mapping)? + RemoveLetters: (String|Mapping)? +} + +typealias RecipeParameterMap = Mapping + + +/// A key-value pair to associate with a resource. +open class RecipeTag { + Key: String|Mapping + Value: String|Mapping +} + +/// Secondary input +open class RecipeSecondaryInput { + S3InputDefinition: (RecipeS3Location)? + DataCatalogInputDefinition: (RecipeDataCatalogInputDefinition)? +} diff --git a/pkl/aws/databrew/ruleset.pkl b/pkl/aws/databrew/ruleset.pkl index 562ffed6..06855b9d 100644 --- a/pkl/aws/databrew/ruleset.pkl +++ b/pkl/aws/databrew/ruleset.pkl @@ -5,92 +5,5 @@ module aws.databrew.ruleset import "../../cloudformation.pkl" -/// Boolean value to disable/enable a rule -open class Disabled { -} +typealias RulesetValuesMap = Listing<(RulesetSubstitutionValue)?> -/// A key-value pair to associate expression's substitution variable names with their values -open class SubstitutionValue { - ValueReference: String(matches(Regex(#"^:[A-Za-z0-9_]+$"#)))|Mapping - Value: String|Mapping -} - -/// -open class ValuesMap { -} - -/// Threshold type for a rule -open class ThresholdType { -} - -/// Selector of a column from a dataset for profile job configuration. One selector includes either a column name or a regular expression -open class ColumnSelector { - Regex: (String|Mapping)? - Name: (String|Mapping)? -} - -/// Data quality rule for a target resource (dataset) -open class Rule { - ColumnSelectors: (Listing)? - Name: String|Mapping - Disabled: (Disabled)? - CheckExpression: Expression - SubstitutionMap: (ValuesMap)? - Threshold: (Threshold)? -} - -/// A key-value pair to associate with a resource -open class Tag { - Key: String|Mapping - Value: String|Mapping -} - -/// Expression with rule conditions -open class Expression { -} - -/// Threshold value for a rule -open class ThresholdValue { -} - -/// Threshold unit for a rule -open class ThresholdUnit { -} - -/// -open class Threshold { - Value: ThresholdValue - Type: (ThresholdType)? - Unit: (ThresholdUnit)? -} - -/// Resource schema for AWS::DataBrew::Ruleset. -open class Ruleset extends cloudformation.Resource { - - Type = "AWS::DataBrew::Ruleset" - - - /// Arn of the target resource (dataset) to apply the ruleset to - hidden TargetArn: String|Mapping - - /// List of the data quality rules in the ruleset - hidden Rules: Listing - - /// - hidden Tags: (Listing)? - - /// Name of the Ruleset - hidden Name: String|Mapping - - /// Description of the Ruleset - hidden Description: (String|Mapping)? - - Properties { - ["TargetArn"] = if (TargetArn == null) null else TargetArn - ["Rules"] = if (Rules == null) null else Rules - ["Tags"] = if (Tags == null) null else Tags - ["Name"] = if (Name == null) null else Name - ["Description"] = if (Description == null) null else Description - } - -} diff --git a/pkl/aws/databrew/schedule.pkl b/pkl/aws/databrew/schedule.pkl index 9afd0974..99372e9c 100644 --- a/pkl/aws/databrew/schedule.pkl +++ b/pkl/aws/databrew/schedule.pkl @@ -5,12 +5,11 @@ module aws.databrew.schedule import "../../cloudformation.pkl" -/// Job name -open class JobName { -} +typealias ScheduleJobName = String + /// A key-value pair to associate with a resource. -open class Tag { +open class ScheduleTag { Key: String|Mapping Value: String|Mapping } @@ -21,23 +20,23 @@ open class Schedule extends cloudformation.Resource { Type = "AWS::DataBrew::Schedule" - /// - hidden JobNames: (Listing)? - - /// Schedule cron - hidden CronExpression: String|Mapping - /// Schedule Name hidden Name: String|Mapping /// - hidden Tags: (Listing)? + hidden Tags: (Listing)? + + /// + hidden JobNames: (Listing)? + + /// Schedule cron + hidden CronExpression: String|Mapping Properties { - ["JobNames"] = if (JobNames == null) null else JobNames - ["CronExpression"] = if (CronExpression == null) null else CronExpression ["Name"] = if (Name == null) null else Name ["Tags"] = if (Tags == null) null else Tags + ["JobNames"] = if (JobNames == null) null else JobNames + ["CronExpression"] = if (CronExpression == null) null else CronExpression } } diff --git a/pkl/aws/datapipeline/pipeline.pkl b/pkl/aws/datapipeline/pipeline.pkl index 06f775c2..5bf9b775 100644 --- a/pkl/aws/datapipeline/pipeline.pkl +++ b/pkl/aws/datapipeline/pipeline.pkl @@ -6,41 +6,41 @@ module aws.datapipeline.pipeline import "../../cloudformation.pkl" /// -open class ParameterObject { - Attributes: Listing - Id: String|Mapping -} - -/// -open class ParameterAttribute { +open class PipelineField { Key: String|Mapping - StringValue: String|Mapping + RefValue: (String|Mapping)? + StringValue: (String|Mapping)? } /// -open class ParameterValue { +open class PipelinePipelineObject { + Fields: Listing Id: String|Mapping - StringValue: String|Mapping + Name: String|Mapping } /// -open class Field { - RefValue: (String|Mapping)? - StringValue: (String|Mapping)? +open class PipelinePipelineTag { Key: String|Mapping + Value: String|Mapping } /// -open class PipelineObject { - Fields: Listing +open class PipelineParameterObject { Id: String|Mapping - Name: String|Mapping + Attributes: Listing } /// -open class PipelineTag { +open class PipelineParameterAttribute { Key: String|Mapping - Value: String|Mapping + StringValue: String|Mapping +} + +/// +open class PipelineParameterValue { + Id: String|Mapping + StringValue: String|Mapping } /// An example resource schema demonstrating some basic constructs and validation rules. @@ -49,35 +49,35 @@ open class Pipeline extends cloudformation.Resource { Type = "AWS::DataPipeline::Pipeline" + /// A description of the pipeline. + hidden Description: (String|Mapping)? + + /// The name of the pipeline. + hidden Name: String|Mapping + /// The parameter objects used with the pipeline. - hidden ParameterObjects: (Listing)? + hidden ParameterObjects: (Listing)? /// The parameter values used with the pipeline. - hidden ParameterValues: (Listing)? + hidden ParameterValues: (Listing)? /// The objects that define the pipeline. These objects overwrite the existing pipeline definition. Not all objects, fields, and values can be updated. For information about restrictions, see Editing Your Pipeline in the AWS Data Pipeline Developer Guide. - hidden PipelineObjects: (Listing)? + hidden PipelineObjects: (Listing)? /// A list of arbitrary tags (key-value pairs) to associate with the pipeline, which you can use to control permissions. For more information, see Controlling Access to Pipelines and Resources in the AWS Data Pipeline Developer Guide. - hidden PipelineTags: (Listing)? + hidden PipelineTags: (Listing)? /// Indicates whether to validate and start the pipeline or stop an active pipeline. By default, the value is set to true. hidden Activate: (Boolean|Mapping)? - /// A description of the pipeline. - hidden Description: (String|Mapping)? - - /// The name of the pipeline. - hidden Name: String|Mapping - Properties { + ["Description"] = if (Description == null) null else Description + ["Name"] = if (Name == null) null else Name ["ParameterObjects"] = if (ParameterObjects == null) null else ParameterObjects ["ParameterValues"] = if (ParameterValues == null) null else ParameterValues ["PipelineObjects"] = if (PipelineObjects == null) null else PipelineObjects ["PipelineTags"] = if (PipelineTags == null) null else PipelineTags ["Activate"] = if (Activate == null) null else Activate - ["Description"] = if (Description == null) null else Description - ["Name"] = if (Name == null) null else Name } } diff --git a/pkl/aws/datasync/agent.pkl b/pkl/aws/datasync/agent.pkl index 9d139296..5180fdd3 100644 --- a/pkl/aws/datasync/agent.pkl +++ b/pkl/aws/datasync/agent.pkl @@ -6,7 +6,7 @@ module aws.datasync.agent import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class AgentTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } @@ -33,7 +33,7 @@ open class Agent extends cloudformation.Resource { hidden VpcEndpointId: (String(matches(Regex(#"^vpce-[0-9a-f]{17}$"#)))|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["AgentName"] = if (AgentName == null) null else AgentName diff --git a/pkl/aws/datasync/locationazureblob.pkl b/pkl/aws/datasync/locationazureblob.pkl index 4d03e534..4be61b68 100644 --- a/pkl/aws/datasync/locationazureblob.pkl +++ b/pkl/aws/datasync/locationazureblob.pkl @@ -6,12 +6,12 @@ module aws.datasync.locationazureblob import "../../cloudformation.pkl" /// Specifies the shared access signature (SAS) that DataSync uses to access your Azure Blob Storage container. -open class AzureBlobSasConfiguration { +open class LocationAzureBlobAzureBlobSasConfiguration { AzureBlobSasToken: String(matches(Regex(#"(^.+$)"#)))|Mapping } /// A key-value pair to associate with a resource. -open class Tag { +open class LocationAzureBlobTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } @@ -25,43 +25,43 @@ open class LocationAzureBlob extends cloudformation.Resource { /// The Amazon Resource Names (ARNs) of agents to use for an Azure Blob Location. hidden AgentArns: Listing - /// The specific authentication type that you want DataSync to use to access your Azure Blob Container. - hidden AzureBlobAuthenticationType: LocationAzureBlobAzureBlobAuthenticationType|Mapping + /// + hidden AzureBlobSasConfiguration: (LocationAzureBlobAzureBlobSasConfiguration)? + + /// The URL of the Azure Blob container that was described. + hidden AzureBlobContainerUrl: (String(matches(Regex(#"^https://[A-Za-z0-9]((.|-+)?[A-Za-z0-9]){0,252}/[a-z0-9](-?[a-z0-9]){2,62}$"#)))|Mapping)? /// Specifies a blob type for the objects you're transferring into your Azure Blob Storage container. hidden AzureBlobType: (LocationAzureBlobAzureBlobType|Mapping)? - /// The subdirectory in the Azure Blob Container that is used to read data from the Azure Blob Source Location. - hidden Subdirectory: (String(matches(Regex(#"^[\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}\p{C}]*$"#)))|Mapping)? + /// Specifies an access tier for the objects you're transferring into your Azure Blob Storage container. + hidden AzureAccessTier: (LocationAzureBlobAzureAccessTier|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? - - /// - hidden AzureBlobSasConfiguration: (AzureBlobSasConfiguration)? + hidden Tags: (Listing)? - /// The URL of the Azure Blob container that was described. - hidden AzureBlobContainerUrl: (String(matches(Regex(#"^https://[A-Za-z0-9]((.|-+)?[A-Za-z0-9]){0,252}/[a-z0-9](-?[a-z0-9]){2,62}$"#)))|Mapping)? + /// The specific authentication type that you want DataSync to use to access your Azure Blob Container. + hidden AzureBlobAuthenticationType: LocationAzureBlobAzureBlobAuthenticationType|Mapping - /// Specifies an access tier for the objects you're transferring into your Azure Blob Storage container. - hidden AzureAccessTier: (LocationAzureBlobAzureAccessTier|Mapping)? + /// The subdirectory in the Azure Blob Container that is used to read data from the Azure Blob Source Location. + hidden Subdirectory: (String(matches(Regex(#"^[\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}\p{C}]*$"#)))|Mapping)? Properties { ["AgentArns"] = if (AgentArns == null) null else AgentArns - ["AzureBlobAuthenticationType"] = if (AzureBlobAuthenticationType == null) null else AzureBlobAuthenticationType - ["AzureBlobType"] = if (AzureBlobType == null) null else AzureBlobType - ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory - ["Tags"] = if (Tags == null) null else Tags ["AzureBlobSasConfiguration"] = if (AzureBlobSasConfiguration == null) null else AzureBlobSasConfiguration ["AzureBlobContainerUrl"] = if (AzureBlobContainerUrl == null) null else AzureBlobContainerUrl + ["AzureBlobType"] = if (AzureBlobType == null) null else AzureBlobType ["AzureAccessTier"] = if (AzureAccessTier == null) null else AzureAccessTier + ["Tags"] = if (Tags == null) null else Tags + ["AzureBlobAuthenticationType"] = if (AzureBlobAuthenticationType == null) null else AzureBlobAuthenticationType + ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory } } -typealias LocationAzureBlobAzureBlobAuthenticationType = "SAS" - typealias LocationAzureBlobAzureBlobType = "BLOCK" typealias LocationAzureBlobAzureAccessTier = "HOT"|"COOL"|"ARCHIVE" + +typealias LocationAzureBlobAzureBlobAuthenticationType = "SAS" diff --git a/pkl/aws/datasync/locationefs.pkl b/pkl/aws/datasync/locationefs.pkl index 906fd856..5dd812c3 100644 --- a/pkl/aws/datasync/locationefs.pkl +++ b/pkl/aws/datasync/locationefs.pkl @@ -6,13 +6,13 @@ module aws.datasync.locationefs import "../../cloudformation.pkl" /// The subnet and security group that DataSync uses to access target EFS file system. -open class Ec2Config { +open class LocationEFSEc2Config { SecurityGroupArns: Listing SubnetArn: String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):ec2:[a-z\-0-9]*:[0-9]{12}:subnet/.*$"#)))|Mapping } /// A key-value pair to associate with a resource. -open class Tag { +open class LocationEFSTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } @@ -23,8 +23,11 @@ open class LocationEFS extends cloudformation.Resource { Type = "AWS::DataSync::LocationEFS" - /// - hidden Ec2Config: Ec2Config + /// An array of key-value pairs to apply to this resource. + hidden Tags: (Listing)? + + /// The Amazon Resource Name (ARN) for the Amazon EFS file system. + hidden EfsFilesystemArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):elasticfilesystem:[a-z\-0-9]*:[0-9]{12}:file-system/fs-.*$"#)))|Mapping)? /// The Amazon Resource Name (ARN) for the Amazon EFS Access point that DataSync uses when accessing the EFS file system. hidden AccessPointArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):elasticfilesystem:[a-z\-0-9]+:[0-9]{12}:access-point/fsap-[0-9a-f]{8,40}$"#)))|Mapping)? @@ -35,23 +38,20 @@ open class LocationEFS extends cloudformation.Resource { /// Protocol that is used for encrypting the traffic exchanged between the DataSync Agent and the EFS file system. hidden InTransitEncryption: (LocationEFSInTransitEncryption|Mapping)? - /// The Amazon Resource Name (ARN) for the Amazon EFS file system. - hidden EfsFilesystemArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):elasticfilesystem:[a-z\-0-9]*:[0-9]{12}:file-system/fs-.*$"#)))|Mapping)? - /// A subdirectory in the location's path. This subdirectory in the EFS file system is used to read data from the EFS source location or write data to the EFS destination. hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + /// + hidden Ec2Config: LocationEFSEc2Config Properties { - ["Ec2Config"] = if (Ec2Config == null) null else Ec2Config + ["Tags"] = if (Tags == null) null else Tags + ["EfsFilesystemArn"] = if (EfsFilesystemArn == null) null else EfsFilesystemArn ["AccessPointArn"] = if (AccessPointArn == null) null else AccessPointArn ["FileSystemAccessRoleArn"] = if (FileSystemAccessRoleArn == null) null else FileSystemAccessRoleArn ["InTransitEncryption"] = if (InTransitEncryption == null) null else InTransitEncryption - ["EfsFilesystemArn"] = if (EfsFilesystemArn == null) null else EfsFilesystemArn ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory - ["Tags"] = if (Tags == null) null else Tags + ["Ec2Config"] = if (Ec2Config == null) null else Ec2Config } } diff --git a/pkl/aws/datasync/locationfsxlustre.pkl b/pkl/aws/datasync/locationfsxlustre.pkl index 4ceb113f..51aff5e9 100644 --- a/pkl/aws/datasync/locationfsxlustre.pkl +++ b/pkl/aws/datasync/locationfsxlustre.pkl @@ -6,9 +6,9 @@ module aws.datasync.locationfsxlustre import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { - Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping +open class LocationFSxLustreTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping + Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } /// Resource schema for AWS::DataSync::LocationFSxLustre. @@ -27,7 +27,7 @@ open class LocationFSxLustre extends cloudformation.Resource { hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["FsxFilesystemArn"] = if (FsxFilesystemArn == null) null else FsxFilesystemArn diff --git a/pkl/aws/datasync/locationfsxontap.pkl b/pkl/aws/datasync/locationfsxontap.pkl index 84f0d3af..127e0d53 100644 --- a/pkl/aws/datasync/locationfsxontap.pkl +++ b/pkl/aws/datasync/locationfsxontap.pkl @@ -5,43 +5,43 @@ module aws.datasync.locationfsxontap import "../../cloudformation.pkl" +/// SMB protocol configuration for FSx ONTAP file system. +open class LocationFSxONTAPSMB { + MountOptions: LocationFSxONTAPSmbMountOptions + Domain: (String(matches(Regex(#"^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$"#)))|Mapping)? + Password: String(matches(Regex(#"^.{0,104}$"#)))|Mapping + User: String(matches(Regex(#"^[^\x5B\x5D\\/:;|=,+*?]{1,104}$"#)))|Mapping +} + +typealias NfsMountOptionsVersion = "AUTOMATIC"|"NFS3"|"NFS4_0"|"NFS4_1" + +/// The NFS mount options that DataSync can use to mount your NFS share. +open class LocationFSxONTAPNfsMountOptions { + Version: (NfsMountOptionsVersion|Mapping)? +} + typealias SmbMountOptionsVersion = "AUTOMATIC"|"SMB2"|"SMB3" /// The mount options used by DataSync to access the SMB server. -open class SmbMountOptions { +open class LocationFSxONTAPSmbMountOptions { Version: (SmbMountOptionsVersion|Mapping)? } /// A key-value pair to associate with a resource. -open class Tag { - Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping +open class LocationFSxONTAPTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping + Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } /// Configuration settings for NFS or SMB protocol. -open class Protocol { - NFS: (NFS)? - SMB: (SMB)? +open class LocationFSxONTAPProtocol { + NFS: (LocationFSxONTAPNFS)? + SMB: (LocationFSxONTAPSMB)? } /// NFS protocol configuration for FSx ONTAP file system. -open class NFS { - MountOptions: NfsMountOptions -} - -/// SMB protocol configuration for FSx ONTAP file system. -open class SMB { - MountOptions: SmbMountOptions - Domain: (String(matches(Regex(#"^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$"#)))|Mapping)? - Password: String(matches(Regex(#"^.{0,104}$"#)))|Mapping - User: String(matches(Regex(#"^[^\x5B\x5D\\/:;|=,+*?]{1,104}$"#)))|Mapping -} - -typealias NfsMountOptionsVersion = "AUTOMATIC"|"NFS3"|"NFS4_0"|"NFS4_1" - -/// The NFS mount options that DataSync can use to mount your NFS share. -open class NfsMountOptions { - Version: (NfsMountOptionsVersion|Mapping)? +open class LocationFSxONTAPNFS { + MountOptions: LocationFSxONTAPNfsMountOptions } /// Resource schema for AWS::DataSync::LocationFSxONTAP. @@ -50,27 +50,27 @@ open class LocationFSxONTAP extends cloudformation.Resource { Type = "AWS::DataSync::LocationFSxONTAP" - /// The ARNs of the security groups that are to use to configure the FSx ONTAP file system. - hidden SecurityGroupArns: Listing - - /// - hidden Protocol: (Protocol)? - /// A subdirectory in the location's path. hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// The Amazon Resource Name (ARN) for the FSx ONTAP SVM. hidden StorageVirtualMachineArn: String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\-0-9]+:[0-9]{12}:storage-virtual-machine/fs-[0-9a-f]+/svm-[0-9a-f]{17,}$"#)))|Mapping + /// The ARNs of the security groups that are to use to configure the FSx ONTAP file system. + hidden SecurityGroupArns: Listing + + /// + hidden Protocol: (LocationFSxONTAPProtocol)? + Properties { - ["SecurityGroupArns"] = if (SecurityGroupArns == null) null else SecurityGroupArns - ["Protocol"] = if (Protocol == null) null else Protocol ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory ["Tags"] = if (Tags == null) null else Tags ["StorageVirtualMachineArn"] = if (StorageVirtualMachineArn == null) null else StorageVirtualMachineArn + ["SecurityGroupArns"] = if (SecurityGroupArns == null) null else SecurityGroupArns + ["Protocol"] = if (Protocol == null) null else Protocol } } diff --git a/pkl/aws/datasync/locationfsxopenzfs.pkl b/pkl/aws/datasync/locationfsxopenzfs.pkl index 0f02526b..bf7416e6 100644 --- a/pkl/aws/datasync/locationfsxopenzfs.pkl +++ b/pkl/aws/datasync/locationfsxopenzfs.pkl @@ -5,27 +5,27 @@ module aws.datasync.locationfsxopenzfs import "../../cloudformation.pkl" +typealias MountOptionsVersion = "AUTOMATIC"|"NFS3"|"NFS4_0"|"NFS4_1" + +/// The NFS mount options that DataSync can use to mount your NFS share. +open class LocationFSxOpenZFSMountOptions { + Version: (MountOptionsVersion|Mapping)? +} + /// A key-value pair to associate with a resource. -open class Tag { +open class LocationFSxOpenZFSTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } /// Configuration settings for an NFS or SMB protocol, currently only support NFS -open class Protocol { - NFS: (NFS)? +open class LocationFSxOpenZFSProtocol { + NFS: (LocationFSxOpenZFSNFS)? } /// FSx OpenZFS file system NFS protocol information -open class NFS { - MountOptions: MountOptions -} - -typealias MountOptionsVersion = "AUTOMATIC"|"NFS3"|"NFS4_0"|"NFS4_1" - -/// The NFS mount options that DataSync can use to mount your NFS share. -open class MountOptions { - Version: (MountOptionsVersion|Mapping)? +open class LocationFSxOpenZFSNFS { + MountOptions: LocationFSxOpenZFSMountOptions } /// Resource schema for AWS::DataSync::LocationFSxOpenZFS. @@ -38,7 +38,7 @@ open class LocationFSxOpenZFS extends cloudformation.Resource { hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// The Amazon Resource Name (ARN) for the FSx OpenZFS file system. hidden FsxFilesystemArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\-0-9]+:[0-9]{12}:file-system/fs-[0-9a-f]+$"#)))|Mapping)? @@ -47,7 +47,7 @@ open class LocationFSxOpenZFS extends cloudformation.Resource { hidden SecurityGroupArns: Listing /// - hidden Protocol: Protocol + hidden Protocol: LocationFSxOpenZFSProtocol Properties { ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory diff --git a/pkl/aws/datasync/locationfsxwindows.pkl b/pkl/aws/datasync/locationfsxwindows.pkl index efb6ea25..d5d206e0 100644 --- a/pkl/aws/datasync/locationfsxwindows.pkl +++ b/pkl/aws/datasync/locationfsxwindows.pkl @@ -6,7 +6,7 @@ module aws.datasync.locationfsxwindows import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class LocationFSxWindowsTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } @@ -17,17 +17,14 @@ open class LocationFSxWindows extends cloudformation.Resource { Type = "AWS::DataSync::LocationFSxWindows" - /// The Amazon Resource Name (ARN) for the FSx for Windows file system. - hidden FsxFilesystemArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\-0-9]*:[0-9]{12}:file-system/fs-.*$"#)))|Mapping)? + /// The name of the Windows domain that the FSx for Windows server belongs to. + hidden Domain: (String(matches(Regex(#"^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$"#)))|Mapping)? /// The user who has the permissions to access files and folders in the FSx for Windows file system. hidden User: String(matches(Regex(#"^[^\x5B\x5D\\/:;|=,+*?]{1,104}$"#)))|Mapping - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? - - /// The name of the Windows domain that the FSx for Windows server belongs to. - hidden Domain: (String(matches(Regex(#"^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$"#)))|Mapping)? + /// The Amazon Resource Name (ARN) for the FSx for Windows file system. + hidden FsxFilesystemArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):fsx:[a-z\-0-9]*:[0-9]{12}:file-system/fs-.*$"#)))|Mapping)? /// The password of the user who has the permissions to access files and folders in the FSx for Windows file system. hidden Password: (String(matches(Regex(#"^.{0,104}$"#)))|Mapping)? @@ -38,14 +35,17 @@ open class LocationFSxWindows extends cloudformation.Resource { /// A subdirectory in the location's path. hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? + /// An array of key-value pairs to apply to this resource. + hidden Tags: (Listing)? + Properties { - ["FsxFilesystemArn"] = if (FsxFilesystemArn == null) null else FsxFilesystemArn - ["User"] = if (User == null) null else User - ["Tags"] = if (Tags == null) null else Tags ["Domain"] = if (Domain == null) null else Domain + ["User"] = if (User == null) null else User + ["FsxFilesystemArn"] = if (FsxFilesystemArn == null) null else FsxFilesystemArn ["Password"] = if (Password == null) null else Password ["SecurityGroupArns"] = if (SecurityGroupArns == null) null else SecurityGroupArns ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory + ["Tags"] = if (Tags == null) null else Tags } } diff --git a/pkl/aws/datasync/locationhdfs.pkl b/pkl/aws/datasync/locationhdfs.pkl index b7f8cec4..e4c3889b 100644 --- a/pkl/aws/datasync/locationhdfs.pkl +++ b/pkl/aws/datasync/locationhdfs.pkl @@ -6,15 +6,15 @@ module aws.datasync.locationhdfs import "../../cloudformation.pkl" /// HDFS Name Node IP and port information. -open class NameNode { +open class LocationHDFSNameNode { Hostname: String(matches(Regex(#"^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])$"#)))|Mapping Port: Int|Mapping } /// A key-value pair to associate with a resource. -open class Tag { - Key: String|Mapping +open class LocationHDFSTag { Value: String|Mapping + Key: String|Mapping } typealias QopConfigurationRpcProtection = "AUTHENTICATION"|"INTEGRITY"|"PRIVACY"|"DISABLED" @@ -22,7 +22,7 @@ typealias QopConfigurationRpcProtection = "AUTHENTICATION"|"INTEGRITY"|"PRIVACY" typealias QopConfigurationDataTransferProtection = "AUTHENTICATION"|"INTEGRITY"|"PRIVACY"|"DISABLED" /// Configuration information for RPC Protection and Data Transfer Protection. These parameters can be set to AUTHENTICATION, INTEGRITY, or PRIVACY. The default value is PRIVACY. -open class QopConfiguration { +open class LocationHDFSQopConfiguration { RpcProtection: (QopConfigurationRpcProtection|Mapping)? DataTransferProtection: (QopConfigurationDataTransferProtection|Mapping)? } @@ -33,14 +33,11 @@ open class LocationHDFS extends cloudformation.Resource { Type = "AWS::DataSync::LocationHDFS" - /// Size of chunks (blocks) in bytes that the data is divided into when stored in the HDFS cluster. - hidden BlockSize: (Int|Mapping)? - - /// The Base64 string representation of the Keytab file. - hidden KerberosKeytab: (String|Mapping)? + /// The string representation of the Krb5Conf file, or the presigned URL to access the Krb5.conf file within an S3 bucket. + hidden KerberosKrb5Conf: (String|Mapping)? - /// The authentication mode used to determine identity of user. - hidden AuthenticationType: LocationHDFSAuthenticationType|Mapping + /// Number of copies of each block that exists inside the HDFS cluster. + hidden ReplicationFactor: (Int|Mapping)? /// The user name that has read and write permissions on the specified HDFS cluster. hidden SimpleUser: (String(matches(Regex(#"^[_.A-Za-z0-9][-_.A-Za-z0-9]*$"#)))|Mapping)? @@ -48,44 +45,47 @@ open class LocationHDFS extends cloudformation.Resource { /// The unique identity, or principal, to which Kerberos can assign tickets. hidden KerberosPrincipal: (String(matches(Regex(#"^.+$"#)))|Mapping)? - /// An array of Name Node(s) of the HDFS location. - hidden NameNodes: Listing - - /// Number of copies of each block that exists inside the HDFS cluster. - hidden ReplicationFactor: (Int|Mapping)? + /// The authentication mode used to determine identity of user. + hidden AuthenticationType: LocationHDFSAuthenticationType|Mapping /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? - /// ARN(s) of the agent(s) to use for an HDFS location. - hidden AgentArns: Listing + /// An array of Name Node(s) of the HDFS location. + hidden NameNodes: Listing - /// The identifier for the Key Management Server where the encryption keys that encrypt data inside HDFS clusters are stored. - hidden KmsKeyProviderUri: (String(matches(Regex(#"^kms:\/\/http[s]?@(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])(;(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9]))*:[0-9]{1,5}\/kms$"#)))|Mapping)? + /// Size of chunks (blocks) in bytes that the data is divided into when stored in the HDFS cluster. + hidden BlockSize: (Int|Mapping)? /// - hidden QopConfiguration: (QopConfiguration)? - - /// The string representation of the Krb5Conf file, or the presigned URL to access the Krb5.conf file within an S3 bucket. - hidden KerberosKrb5Conf: (String|Mapping)? + hidden QopConfiguration: (LocationHDFSQopConfiguration)? /// The subdirectory in HDFS that is used to read data from the HDFS source location or write data to the HDFS destination. hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? + /// The identifier for the Key Management Server where the encryption keys that encrypt data inside HDFS clusters are stored. + hidden KmsKeyProviderUri: (String(matches(Regex(#"^kms:\/\/http[s]?@(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])(;(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9]))*:[0-9]{1,5}\/kms$"#)))|Mapping)? + + /// The Base64 string representation of the Keytab file. + hidden KerberosKeytab: (String|Mapping)? + + /// ARN(s) of the agent(s) to use for an HDFS location. + hidden AgentArns: Listing + Properties { - ["BlockSize"] = if (BlockSize == null) null else BlockSize - ["KerberosKeytab"] = if (KerberosKeytab == null) null else KerberosKeytab - ["AuthenticationType"] = if (AuthenticationType == null) null else AuthenticationType + ["KerberosKrb5Conf"] = if (KerberosKrb5Conf == null) null else KerberosKrb5Conf + ["ReplicationFactor"] = if (ReplicationFactor == null) null else ReplicationFactor ["SimpleUser"] = if (SimpleUser == null) null else SimpleUser ["KerberosPrincipal"] = if (KerberosPrincipal == null) null else KerberosPrincipal - ["NameNodes"] = if (NameNodes == null) null else NameNodes - ["ReplicationFactor"] = if (ReplicationFactor == null) null else ReplicationFactor + ["AuthenticationType"] = if (AuthenticationType == null) null else AuthenticationType ["Tags"] = if (Tags == null) null else Tags - ["AgentArns"] = if (AgentArns == null) null else AgentArns - ["KmsKeyProviderUri"] = if (KmsKeyProviderUri == null) null else KmsKeyProviderUri + ["NameNodes"] = if (NameNodes == null) null else NameNodes + ["BlockSize"] = if (BlockSize == null) null else BlockSize ["QopConfiguration"] = if (QopConfiguration == null) null else QopConfiguration - ["KerberosKrb5Conf"] = if (KerberosKrb5Conf == null) null else KerberosKrb5Conf ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory + ["KmsKeyProviderUri"] = if (KmsKeyProviderUri == null) null else KmsKeyProviderUri + ["KerberosKeytab"] = if (KerberosKeytab == null) null else KerberosKeytab + ["AgentArns"] = if (AgentArns == null) null else AgentArns } } diff --git a/pkl/aws/datasync/locationnfs.pkl b/pkl/aws/datasync/locationnfs.pkl index 6952291f..8271ad89 100644 --- a/pkl/aws/datasync/locationnfs.pkl +++ b/pkl/aws/datasync/locationnfs.pkl @@ -5,24 +5,24 @@ module aws.datasync.locationnfs import "../../cloudformation.pkl" +/// A key-value pair to associate with a resource. +open class LocationNFSTag { + Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping + Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping +} + typealias MountOptionsVersion = "AUTOMATIC"|"NFS3"|"NFS4_0"|"NFS4_1" /// The NFS mount options that DataSync can use to mount your NFS share. -open class MountOptions { +open class LocationNFSMountOptions { Version: (MountOptionsVersion|Mapping)? } /// Contains a list of Amazon Resource Names (ARNs) of agents that are used to connect an NFS server. -open class OnPremConfig { +open class LocationNFSOnPremConfig { AgentArns: Listing } -/// A key-value pair to associate with a resource. -open class Tag { - Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping - Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping -} - /// Resource schema for AWS::DataSync::LocationNFS open class LocationNFS extends cloudformation.Resource { @@ -30,10 +30,10 @@ open class LocationNFS extends cloudformation.Resource { /// - hidden MountOptions: (MountOptions)? + hidden MountOptions: (LocationNFSMountOptions)? /// - hidden OnPremConfig: OnPremConfig + hidden OnPremConfig: LocationNFSOnPremConfig /// The name of the NFS server. This value is the IP address or DNS name of the NFS server. hidden ServerHostname: (String(matches(Regex(#"^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])$"#)))|Mapping)? @@ -42,7 +42,7 @@ open class LocationNFS extends cloudformation.Resource { hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["MountOptions"] = if (MountOptions == null) null else MountOptions diff --git a/pkl/aws/datasync/locationobjectstorage.pkl b/pkl/aws/datasync/locationobjectstorage.pkl index cbf25c73..4e2e1fb3 100644 --- a/pkl/aws/datasync/locationobjectstorage.pkl +++ b/pkl/aws/datasync/locationobjectstorage.pkl @@ -6,7 +6,7 @@ module aws.datasync.locationobjectstorage import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { +open class LocationObjectStorageTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } @@ -20,42 +20,42 @@ open class LocationObjectStorage extends cloudformation.Resource { /// Optional. The access key is used if credentials are required to access the self-managed object storage server. hidden AccessKey: (String(matches(Regex(#"^.+$"#)))|Mapping)? + /// The Amazon Resource Name (ARN) of the agents associated with the self-managed object storage server location. + hidden AgentArns: Listing + + /// The port that your self-managed server accepts inbound network traffic on. + hidden ServerPort: (Int|Mapping)? + + /// The protocol that the object storage server uses to communicate. + hidden ServerProtocol: (LocationObjectStorageServerProtocol|Mapping)? + /// The name of the bucket on the self-managed object storage server. hidden BucketName: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? /// Optional. The secret key is used if credentials are required to access the self-managed object storage server. hidden SecretKey: (String(matches(Regex(#"^.+$"#)))|Mapping)? - /// The Amazon Resource Name (ARN) of the agents associated with the self-managed object storage server location. - hidden AgentArns: Listing - /// X.509 PEM content containing a certificate authority or chain to trust. hidden ServerCertificate: (String|Mapping)? /// The name of the self-managed object storage server. This value is the IP address or Domain Name Service (DNS) name of the object storage server. hidden ServerHostname: (String(matches(Regex(#"^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])$"#)))|Mapping)? - /// The port that your self-managed server accepts inbound network traffic on. - hidden ServerPort: (Int|Mapping)? - - /// The protocol that the object storage server uses to communicate. - hidden ServerProtocol: (LocationObjectStorageServerProtocol|Mapping)? - /// The subdirectory in the self-managed object storage server that is used to read data from. hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\p{Zs}]*$"#)))|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? Properties { ["AccessKey"] = if (AccessKey == null) null else AccessKey + ["AgentArns"] = if (AgentArns == null) null else AgentArns + ["ServerPort"] = if (ServerPort == null) null else ServerPort + ["ServerProtocol"] = if (ServerProtocol == null) null else ServerProtocol ["BucketName"] = if (BucketName == null) null else BucketName ["SecretKey"] = if (SecretKey == null) null else SecretKey - ["AgentArns"] = if (AgentArns == null) null else AgentArns ["ServerCertificate"] = if (ServerCertificate == null) null else ServerCertificate ["ServerHostname"] = if (ServerHostname == null) null else ServerHostname - ["ServerPort"] = if (ServerPort == null) null else ServerPort - ["ServerProtocol"] = if (ServerProtocol == null) null else ServerProtocol ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory ["Tags"] = if (Tags == null) null else Tags } diff --git a/pkl/aws/datasync/locations3.pkl b/pkl/aws/datasync/locations3.pkl index ab491068..6c063290 100644 --- a/pkl/aws/datasync/locations3.pkl +++ b/pkl/aws/datasync/locations3.pkl @@ -6,12 +6,12 @@ module aws.datasync.locations3 import "../../cloudformation.pkl" /// The Amazon Resource Name (ARN) of the AWS IAM role that is used to access an Amazon S3 bucket. -open class S3Config { +open class LocationS3S3Config { BucketAccessRoleArn: String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$"#)))|Mapping } /// A key-value pair to associate with a resource. -open class Tag { +open class LocationS3Tag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } @@ -22,27 +22,27 @@ open class LocationS3 extends cloudformation.Resource { Type = "AWS::DataSync::LocationS3" + /// The Amazon Resource Name (ARN) of the Amazon S3 bucket. + hidden S3BucketArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):s3:[a-z\-0-9]*:[0-9]*:.*$"#)))|Mapping)? + + /// A subdirectory in the Amazon S3 bucket. This subdirectory in Amazon S3 is used to read data from the S3 source location or write data to the S3 destination. + hidden Subdirectory: (String(matches(Regex(#"^[\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}\p{C}]*$"#)))|Mapping)? + /// The Amazon S3 storage class you want to store your files in when this location is used as a task destination. hidden S3StorageClass: (LocationS3S3StorageClass|Mapping)? /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// - hidden S3Config: S3Config - - /// The Amazon Resource Name (ARN) of the Amazon S3 bucket. - hidden S3BucketArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):s3:[a-z\-0-9]*:[0-9]*:.*$"#)))|Mapping)? - - /// A subdirectory in the Amazon S3 bucket. This subdirectory in Amazon S3 is used to read data from the S3 source location or write data to the S3 destination. - hidden Subdirectory: (String(matches(Regex(#"^[\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}\p{C}]*$"#)))|Mapping)? + hidden S3Config: LocationS3S3Config Properties { + ["S3BucketArn"] = if (S3BucketArn == null) null else S3BucketArn + ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory ["S3StorageClass"] = if (S3StorageClass == null) null else S3StorageClass ["Tags"] = if (Tags == null) null else Tags ["S3Config"] = if (S3Config == null) null else S3Config - ["S3BucketArn"] = if (S3BucketArn == null) null else S3BucketArn - ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory } } diff --git a/pkl/aws/datasync/locationsmb.pkl b/pkl/aws/datasync/locationsmb.pkl index fd2db381..f8c18b1c 100644 --- a/pkl/aws/datasync/locationsmb.pkl +++ b/pkl/aws/datasync/locationsmb.pkl @@ -5,19 +5,19 @@ module aws.datasync.locationsmb import "../../cloudformation.pkl" +/// A key-value pair to associate with a resource. +open class LocationSMBTag { + Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping + Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping +} + typealias MountOptionsVersion = "AUTOMATIC"|"SMB1"|"SMB2_0"|"SMB2"|"SMB3" /// The mount options used by DataSync to access the SMB server. -open class MountOptions { +open class LocationSMBMountOptions { Version: (MountOptionsVersion|Mapping)? } -/// A key-value pair to associate with a resource. -open class Tag { - Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping - Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping -} - /// Resource schema for AWS::DataSync::LocationSMB. open class LocationSMB extends cloudformation.Resource { @@ -25,38 +25,38 @@ open class LocationSMB extends cloudformation.Resource { /// - hidden MountOptions: (MountOptions)? - - /// The subdirectory in the SMB file system that is used to read data from the SMB source location or write data to the SMB destination - hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? - - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? - - /// The name of the SMB server. This value is the IP address or Domain Name Service (DNS) name of the SMB server. - hidden ServerHostname: (String(matches(Regex(#"^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])$"#)))|Mapping)? + hidden MountOptions: (LocationSMBMountOptions)? /// The user who can mount the share, has the permissions to access files and folders in the SMB share. hidden User: String(matches(Regex(#"^[^\x5B\x5D\\/:;|=,+*?]{1,104}$"#)))|Mapping + /// An array of key-value pairs to apply to this resource. + hidden Tags: (Listing)? + /// The Amazon Resource Names (ARNs) of agents to use for a Simple Message Block (SMB) location. hidden AgentArns: Listing /// The name of the Windows domain that the SMB server belongs to. hidden Domain: (String(matches(Regex(#"^([A-Za-z0-9]+[A-Za-z0-9-.]*)*[A-Za-z0-9-]*[A-Za-z0-9]$"#)))|Mapping)? + /// The subdirectory in the SMB file system that is used to read data from the SMB source location or write data to the SMB destination + hidden Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\$\p{Zs}]+$"#)))|Mapping)? + /// The password of the user who can mount the share and has the permissions to access files and folders in the SMB share. hidden Password: (String(matches(Regex(#"^.{0,104}$"#)))|Mapping)? + /// The name of the SMB server. This value is the IP address or Domain Name Service (DNS) name of the SMB server. + hidden ServerHostname: (String(matches(Regex(#"^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])$"#)))|Mapping)? + Properties { ["MountOptions"] = if (MountOptions == null) null else MountOptions - ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory - ["Tags"] = if (Tags == null) null else Tags - ["ServerHostname"] = if (ServerHostname == null) null else ServerHostname ["User"] = if (User == null) null else User + ["Tags"] = if (Tags == null) null else Tags ["AgentArns"] = if (AgentArns == null) null else AgentArns ["Domain"] = if (Domain == null) null else Domain + ["Subdirectory"] = if (Subdirectory == null) null else Subdirectory ["Password"] = if (Password == null) null else Password + ["ServerHostname"] = if (ServerHostname == null) null else ServerHostname } } diff --git a/pkl/aws/datasync/storagesystem.pkl b/pkl/aws/datasync/storagesystem.pkl index 67a4b2bb..56b02597 100644 --- a/pkl/aws/datasync/storagesystem.pkl +++ b/pkl/aws/datasync/storagesystem.pkl @@ -5,59 +5,59 @@ module aws.datasync.storagesystem import "../../cloudformation.pkl" +/// A key-value pair to associate with a resource. +open class StorageSystemTag { + Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping + Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping +} + /// The server name and network port required to connect with the management interface of the on-premises storage system. -open class ServerConfiguration { +open class StorageSystemServerConfiguration { ServerHostname: String(matches(Regex(#"^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9\-]*[A-Za-z0-9])$"#)))|Mapping ServerPort: (Int|Mapping)? } /// The username and password for accessing your on-premises storage system's management interface. -open class ServerCredentials { +open class StorageSystemServerCredentials { Username: String|Mapping Password: String|Mapping } -/// A key-value pair to associate with a resource. -open class Tag { - Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping - Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping -} - /// Resource schema for AWS::DataSync::StorageSystem. open class StorageSystem extends cloudformation.Resource { Type = "AWS::DataSync::StorageSystem" + /// An array of key-value pairs to apply to this resource. + hidden Tags: (Listing)? + /// - hidden ServerConfiguration: ServerConfiguration + hidden ServerCredentials: (StorageSystemServerCredentials)? + + /// The ARN of the Amazon CloudWatch log group used to monitor and log discovery job events. + hidden CloudWatchLogGroupArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):logs:[a-z\-0-9]+:[0-9]{12}:log-group:([^:\*]*)(:\*)?$"#)))|Mapping)? /// A familiar name for the on-premises storage system. hidden Name: (String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping)? - /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + /// The ARN of the DataSync agent that connects to and reads from the on-premises storage system's management interface. + hidden AgentArns: Listing /// - hidden ServerCredentials: (ServerCredentials)? + hidden ServerConfiguration: StorageSystemServerConfiguration /// The type of on-premises storage system that DataSync Discovery will analyze. hidden SystemType: StorageSystemSystemType|Mapping - /// The ARN of the DataSync agent that connects to and reads from the on-premises storage system's management interface. - hidden AgentArns: Listing - - /// The ARN of the Amazon CloudWatch log group used to monitor and log discovery job events. - hidden CloudWatchLogGroupArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):logs:[a-z\-0-9]+:[0-9]{12}:log-group:([^:\*]*)(:\*)?$"#)))|Mapping)? - Properties { - ["ServerConfiguration"] = if (ServerConfiguration == null) null else ServerConfiguration - ["Name"] = if (Name == null) null else Name ["Tags"] = if (Tags == null) null else Tags ["ServerCredentials"] = if (ServerCredentials == null) null else ServerCredentials - ["SystemType"] = if (SystemType == null) null else SystemType - ["AgentArns"] = if (AgentArns == null) null else AgentArns ["CloudWatchLogGroupArn"] = if (CloudWatchLogGroupArn == null) null else CloudWatchLogGroupArn + ["Name"] = if (Name == null) null else Name + ["AgentArns"] = if (AgentArns == null) null else AgentArns + ["ServerConfiguration"] = if (ServerConfiguration == null) null else ServerConfiguration + ["SystemType"] = if (SystemType == null) null else SystemType } } diff --git a/pkl/aws/datasync/task.pkl b/pkl/aws/datasync/task.pkl index 2eb62514..eb862750 100644 --- a/pkl/aws/datasync/task.pkl +++ b/pkl/aws/datasync/task.pkl @@ -5,120 +5,118 @@ module aws.datasync.task import "../../cloudformation.pkl" -/// Specifies the Amazon S3 bucket where DataSync uploads your task report. -open class TaskReportConfigDestinationS3 { - Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\p{Zs}]*$"#)))|Mapping)? - BucketAccessRoleArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$"#)))|Mapping)? - S3BucketArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):(s3|s3-outposts):[a-z\-0-9]*:[0-9]*:.*$"#)))|Mapping)? +typealias FilterRuleFilterType = "SIMPLE_PATTERN" + +/// Specifies which files folders and objects to include or exclude when transferring files from source to destination. +open class TaskFilterRule { + FilterType: (FilterRuleFilterType|Mapping)? + Value: (String(matches(Regex(#"^[^\x00]+$"#)))|Mapping)? } -typealias ManifestConfigAction = "TRANSFER" +typealias TaskReportConfigOutputType = "SUMMARY_ONLY"|"STANDARD" -typealias ManifestConfigFormat = "CSV" +typealias TaskReportConfigReportLevel = "ERRORS_ONLY"|"SUCCESSES_AND_ERRORS" -/// Configures a manifest, which is a list of files or objects that you want DataSync to transfer. -open class ManifestConfig { - Action: (ManifestConfigAction|Mapping)? - Format: (ManifestConfigFormat|Mapping)? - Source: Dynamic +typealias TaskReportConfigObjectVersionIds = "INCLUDE"|"NONE" + +/// Specifies how you want to configure a task report, which provides detailed information about for your Datasync transfer. +open class TaskTaskReportConfig { + Overrides: (Dynamic)? + Destination: Dynamic + OutputType: TaskReportConfigOutputType|Mapping + ReportLevel: (TaskReportConfigReportLevel|Mapping)? + ObjectVersionIds: (TaskReportConfigObjectVersionIds|Mapping)? } -/// Specifies the S3 bucket where you're hosting the manifest that you want AWS DataSync to use. -open class ManifestConfigSourceS3 { - ManifestObjectPath: (String(matches(Regex(#"^[\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}\p{C}]*$"#)))|Mapping)? +/// Specifies the Amazon S3 bucket where DataSync uploads your task report. +open class TaskTaskReportConfigDestinationS3 { + Subdirectory: (String(matches(Regex(#"^[a-zA-Z0-9_\-\+\./\(\)\p{Zs}]*$"#)))|Mapping)? BucketAccessRoleArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$"#)))|Mapping)? S3BucketArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):(s3|s3-outposts):[a-z\-0-9]*:[0-9]*:.*$"#)))|Mapping)? - ManifestObjectVersionId: (String(matches(Regex(#"^.+$"#)))|Mapping)? } -/// Specifies the schedule you want your task to use for repeated executions. -open class TaskSchedule { - ScheduleExpression: String(matches(Regex(#"^[a-zA-Z0-9\ \_\*\?\,\|\^\-\/\#\s\(\)\+]*$"#)))|Mapping +/// Specifies the S3 bucket where you're hosting the manifest that you want AWS DataSync to use. +open class TaskManifestConfigSourceS3 { + S3BucketArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):(s3|s3-outposts):[a-z\-0-9]*:[0-9]*:.*$"#)))|Mapping)? + ManifestObjectVersionId: (String(matches(Regex(#"^.+$"#)))|Mapping)? + ManifestObjectPath: (String(matches(Regex(#"^[\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}\p{C}]*$"#)))|Mapping)? + BucketAccessRoleArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$"#)))|Mapping)? } -typealias OptionsMtime = "NONE"|"PRESERVE" +typealias OptionsSecurityDescriptorCopyFlags = "NONE"|"OWNER_DACL"|"OWNER_DACL_SACL" + +typealias OptionsObjectTags = "PRESERVE"|"NONE" + +typealias OptionsGid = "NONE"|"INT_VALUE"|"NAME"|"BOTH" + +typealias OptionsLogLevel = "OFF"|"BASIC"|"TRANSFER" typealias OptionsPreserveDeletedFiles = "PRESERVE"|"REMOVE" typealias OptionsPreserveDevices = "NONE"|"PRESERVE" -typealias OptionsTransferMode = "CHANGED"|"ALL" - typealias OptionsUid = "NONE"|"INT_VALUE"|"NAME"|"BOTH" -typealias OptionsObjectTags = "PRESERVE"|"NONE" +typealias OptionsPosixPermissions = "NONE"|"PRESERVE" -typealias OptionsLogLevel = "OFF"|"BASIC"|"TRANSFER" +typealias OptionsTaskQueueing = "ENABLED"|"DISABLED" typealias OptionsVerifyMode = "POINT_IN_TIME_CONSISTENT"|"ONLY_FILES_TRANSFERRED"|"NONE" typealias OptionsAtime = "NONE"|"BEST_EFFORT" -typealias OptionsGid = "NONE"|"INT_VALUE"|"NAME"|"BOTH" +typealias OptionsMtime = "NONE"|"PRESERVE" typealias OptionsOverwriteMode = "ALWAYS"|"NEVER" -typealias OptionsPosixPermissions = "NONE"|"PRESERVE" - -typealias OptionsSecurityDescriptorCopyFlags = "NONE"|"OWNER_DACL"|"OWNER_DACL_SACL" - -typealias OptionsTaskQueueing = "ENABLED"|"DISABLED" +typealias OptionsTransferMode = "CHANGED"|"ALL" /// Represents the options that are available to control the behavior of a StartTaskExecution operation. -open class Options { - Mtime: (OptionsMtime|Mapping)? - PreserveDeletedFiles: (OptionsPreserveDeletedFiles|Mapping)? - PreserveDevices: (OptionsPreserveDevices|Mapping)? - TransferMode: (OptionsTransferMode|Mapping)? - Uid: (OptionsUid|Mapping)? +open class TaskOptions { + SecurityDescriptorCopyFlags: (OptionsSecurityDescriptorCopyFlags|Mapping)? ObjectTags: (OptionsObjectTags|Mapping)? BytesPerSecond: (Int|Mapping)? + Gid: (OptionsGid|Mapping)? LogLevel: (OptionsLogLevel|Mapping)? + PreserveDeletedFiles: (OptionsPreserveDeletedFiles|Mapping)? + PreserveDevices: (OptionsPreserveDevices|Mapping)? + Uid: (OptionsUid|Mapping)? + PosixPermissions: (OptionsPosixPermissions|Mapping)? + TaskQueueing: (OptionsTaskQueueing|Mapping)? VerifyMode: (OptionsVerifyMode|Mapping)? Atime: (OptionsAtime|Mapping)? - Gid: (OptionsGid|Mapping)? + Mtime: (OptionsMtime|Mapping)? OverwriteMode: (OptionsOverwriteMode|Mapping)? - PosixPermissions: (OptionsPosixPermissions|Mapping)? - SecurityDescriptorCopyFlags: (OptionsSecurityDescriptorCopyFlags|Mapping)? - TaskQueueing: (OptionsTaskQueueing|Mapping)? + TransferMode: (OptionsTransferMode|Mapping)? } -typealias FilterRuleFilterType = "SIMPLE_PATTERN" +typealias TaskDestinationNetworkInterfaceArns = Listing<(String(matches(Regex(#"^arn:aws[\-a-z]{0,}:ec2:[a-z\-0-9]*:[0-9]{12}:network-interface/eni-[0-9a-f]+$"#)))|Mapping)?> -/// Specifies which files folders and objects to include or exclude when transferring files from source to destination. -open class FilterRule { - FilterType: (FilterRuleFilterType|Mapping)? - Value: (String(matches(Regex(#"^[^\x00]+$"#)))|Mapping)? -} /// A key-value pair to associate with a resource. -open class Tag { +open class TaskTag { Key: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:/-]+$"#)))|Mapping Value: String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping } -typealias TaskReportConfigOutputType = "SUMMARY_ONLY"|"STANDARD" - -typealias TaskReportConfigReportLevel = "ERRORS_ONLY"|"SUCCESSES_AND_ERRORS" +typealias ManifestConfigAction = "TRANSFER" -typealias TaskReportConfigObjectVersionIds = "INCLUDE"|"NONE" +typealias ManifestConfigFormat = "CSV" -/// Specifies how you want to configure a task report, which provides detailed information about for your Datasync transfer. -open class TaskReportConfig { - Destination: Dynamic - OutputType: TaskReportConfigOutputType|Mapping - ReportLevel: (TaskReportConfigReportLevel|Mapping)? - ObjectVersionIds: (TaskReportConfigObjectVersionIds|Mapping)? - Overrides: (Dynamic)? +/// Configures a manifest, which is a list of files or objects that you want DataSync to transfer. +open class TaskManifestConfig { + Action: (ManifestConfigAction|Mapping)? + Format: (ManifestConfigFormat|Mapping)? + Source: Dynamic } -/// The Amazon Resource Names (ARNs) of the source ENIs (Elastic Network Interfaces) that were created for your subnet. -open class SourceNetworkInterfaceArns { +/// Specifies the schedule you want your task to use for repeated executions. +open class TaskTaskSchedule { + ScheduleExpression: String(matches(Regex(#"^[a-zA-Z0-9\ \_\*\?\,\|\^\-\/\#\s\(\)\+]*$"#)))|Mapping } -/// The Amazon Resource Names (ARNs) of the destination ENIs (Elastic Network Interfaces) that were created for your subnet. -open class DestinationNetworkInterfaceArns { -} +typealias TaskSourceNetworkInterfaceArns = Listing<(String(matches(Regex(#"^arn:aws[\-a-z]{0,}:ec2:[a-z\-0-9]*:[0-9]{12}:network-interface/eni-[0-9a-f]+$"#)))|Mapping)?> + /// Resource schema for AWS::DataSync::Task. open class Task extends cloudformation.Resource { @@ -127,50 +125,50 @@ open class Task extends cloudformation.Resource { /// An array of key-value pairs to apply to this resource. - hidden Tags: (Listing)? + hidden Tags: (Listing)? - /// The ARN of an AWS storage resource's location. - hidden DestinationLocationArn: String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$"#)))|Mapping + /// The ARN of the Amazon CloudWatch log group that is used to monitor and log events in the task. + hidden CloudWatchLogGroupArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):logs:[a-z\-0-9]*:[0-9]{12}:log-group:([^:\*]*)(:\*)?$"#)))|Mapping)? /// The name of a task. This value is a text reference that is used to identify the task in the console. hidden Name: (String(matches(Regex(#"^[a-zA-Z0-9\s+=._:@/-]+$"#)))|Mapping)? /// - hidden Options: (Options)? - - /// The ARN of the Amazon CloudWatch log group that is used to monitor and log events in the task. - hidden CloudWatchLogGroupArn: (String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):logs:[a-z\-0-9]*:[0-9]{12}:log-group:([^:\*]*)(:\*)?$"#)))|Mapping)? + hidden TaskReportConfig: (TaskTaskReportConfig)? /// - hidden TaskReportConfig: (TaskReportConfig)? + hidden ManifestConfig: (TaskManifestConfig)? + + /// The ARN of the source location for the task. + hidden SourceLocationArn: String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$"#)))|Mapping /// - hidden Excludes: (Listing)? + hidden Excludes: (Listing)? /// - hidden ManifestConfig: (ManifestConfig)? + hidden Options: (TaskOptions)? /// - hidden Schedule: (TaskSchedule)? + hidden Schedule: (TaskTaskSchedule)? /// - hidden Includes: (Listing)? + hidden Includes: (Listing)? - /// The ARN of the source location for the task. - hidden SourceLocationArn: String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$"#)))|Mapping + /// The ARN of an AWS storage resource's location. + hidden DestinationLocationArn: String(matches(Regex(#"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\-0-9]+:[0-9]{12}:location/loc-[0-9a-z]{17}$"#)))|Mapping Properties { ["Tags"] = if (Tags == null) null else Tags - ["DestinationLocationArn"] = if (DestinationLocationArn == null) null else DestinationLocationArn - ["Name"] = if (Name == null) null else Name - ["Options"] = if (Options == null) null else Options ["CloudWatchLogGroupArn"] = if (CloudWatchLogGroupArn == null) null else CloudWatchLogGroupArn + ["Name"] = if (Name == null) null else Name ["TaskReportConfig"] = if (TaskReportConfig == null) null else TaskReportConfig - ["Excludes"] = if (Excludes == null) null else Excludes ["ManifestConfig"] = if (ManifestConfig == null) null else ManifestConfig + ["SourceLocationArn"] = if (SourceLocationArn == null) null else SourceLocationArn + ["Excludes"] = if (Excludes == null) null else Excludes + ["Options"] = if (Options == null) null else Options ["Schedule"] = if (Schedule == null) null else Schedule ["Includes"] = if (Includes == null) null else Includes - ["SourceLocationArn"] = if (SourceLocationArn == null) null else SourceLocationArn + ["DestinationLocationArn"] = if (DestinationLocationArn == null) null else DestinationLocationArn } } diff --git a/pkl/aws/dax/cluster.pkl b/pkl/aws/dax/cluster.pkl index e89edcaa..5e8696a6 100644 --- a/pkl/aws/dax/cluster.pkl +++ b/pkl/aws/dax/cluster.pkl @@ -6,7 +6,7 @@ module aws.dax.cluster import "../../cloudformation.pkl" /// -open class SSESpecification { +open class ClusterSSESpecification { SSEEnabled: (Boolean|Mapping)? } @@ -17,62 +17,62 @@ open class Cluster extends cloudformation.Resource { /// - hidden ClusterEndpointEncryptionType: (String|Mapping)? + hidden SSESpecification: (ClusterSSESpecification)? /// - hidden NotificationTopicARN: (String|Mapping)? + hidden PreferredMaintenanceWindow: (String|Mapping)? /// - hidden SecurityGroupIds: (Listing)? + hidden NotificationTopicARN: (String|Mapping)? /// - hidden AvailabilityZones: (Listing)? + hidden NodeType: String|Mapping /// - hidden Description: (String|Mapping)? + hidden ReplicationFactor: Int|Mapping /// hidden ParameterGroupName: (String|Mapping)? /// - hidden IAMRoleARN: String|Mapping + hidden AvailabilityZones: (Listing)? /// - hidden SubnetGroupName: (String|Mapping)? + hidden ClusterEndpointEncryptionType: (String|Mapping)? /// - hidden PreferredMaintenanceWindow: (String|Mapping)? + hidden Description: (String|Mapping)? /// - hidden ClusterName: (String|Mapping)? + hidden IAMRoleARN: String|Mapping /// - hidden ReplicationFactor: Int|Mapping + hidden SecurityGroupIds: (Listing)? /// - hidden NodeType: String|Mapping + hidden ClusterName: (String|Mapping)? /// hidden Tags: (Dynamic)? /// - hidden SSESpecification: (SSESpecification)? + hidden SubnetGroupName: (String|Mapping)? Properties { - ["ClusterEndpointEncryptionType"] = if (ClusterEndpointEncryptionType == null) null else ClusterEndpointEncryptionType + ["SSESpecification"] = if (SSESpecification == null) null else SSESpecification + ["PreferredMaintenanceWindow"] = if (PreferredMaintenanceWindow == null) null else PreferredMaintenanceWindow ["NotificationTopicARN"] = if (NotificationTopicARN == null) null else NotificationTopicARN - ["SecurityGroupIds"] = if (SecurityGroupIds == null) null else SecurityGroupIds + ["NodeType"] = if (NodeType == null) null else NodeType + ["ReplicationFactor"] = if (ReplicationFactor == null) null else ReplicationFactor + ["ParameterGroupName"] = if (ParameterGroupName == null) null else ParameterGroupName ["AvailabilityZones"] = if (AvailabilityZones == null) null else AvailabilityZones + ["ClusterEndpointEncryptionType"] = if (ClusterEndpointEncryptionType == null) null else ClusterEndpointEncryptionType ["Description"] = if (Description == null) null else Description - ["ParameterGroupName"] = if (ParameterGroupName == null) null else ParameterGroupName ["IAMRoleARN"] = if (IAMRoleARN == null) null else IAMRoleARN - ["SubnetGroupName"] = if (SubnetGroupName == null) null else SubnetGroupName - ["PreferredMaintenanceWindow"] = if (PreferredMaintenanceWindow == null) null else PreferredMaintenanceWindow + ["SecurityGroupIds"] = if (SecurityGroupIds == null) null else SecurityGroupIds ["ClusterName"] = if (ClusterName == null) null else ClusterName - ["ReplicationFactor"] = if (ReplicationFactor == null) null else ReplicationFactor - ["NodeType"] = if (NodeType == null) null else NodeType ["Tags"] = if (Tags == null) null else Tags - ["SSESpecification"] = if (SSESpecification == null) null else SSESpecification + ["SubnetGroupName"] = if (SubnetGroupName == null) null else SubnetGroupName } } diff --git a/pkl/aws/dax/parametergroup.pkl b/pkl/aws/dax/parametergroup.pkl index a0da384c..cb0dd5d7 100644 --- a/pkl/aws/dax/parametergroup.pkl +++ b/pkl/aws/dax/parametergroup.pkl @@ -11,19 +11,19 @@ open class ParameterGroup extends cloudformation.Resource { Type = "AWS::DAX::ParameterGroup" - /// - hidden ParameterGroupName: (String|Mapping)? - /// hidden ParameterNameValues: (Dynamic)? /// hidden Description: (String|Mapping)? + /// + hidden ParameterGroupName: (String|Mapping)? + Properties { - ["ParameterGroupName"] = if (ParameterGroupName == null) null else ParameterGroupName ["ParameterNameValues"] = if (ParameterNameValues == null) null else ParameterNameValues ["Description"] = if (Description == null) null else Description + ["ParameterGroupName"] = if (ParameterGroupName == null) null else ParameterGroupName } } diff --git a/pkl/aws/detective/graph.pkl b/pkl/aws/detective/graph.pkl index e1019cf0..2f8ea23f 100644 --- a/pkl/aws/detective/graph.pkl +++ b/pkl/aws/detective/graph.pkl @@ -6,9 +6,9 @@ module aws.detective.graph import "../../cloudformation.pkl" /// A key-value pair to associate with a resource. -open class Tag { - Key: (String|Mapping)? +open class GraphTag { Value: (String|Mapping)? + Key: (String|Mapping)? } /// Resource schema for AWS::Detective::Graph @@ -18,7 +18,7 @@ open class Graph extends cloudformation.Resource { /// - hidden Tags: (Listing)? + hidden Tags: (Listing)? /// Indicates whether to automatically enable new organization accounts as member accounts in the organization behavior graph. hidden AutoEnableMembers: (Boolean|Mapping)? diff --git a/pkl/aws/detective/memberinvitation.pkl b/pkl/aws/detective/memberinvitation.pkl index 063069b6..a1e923c9 100644 --- a/pkl/aws/detective/memberinvitation.pkl +++ b/pkl/aws/detective/memberinvitation.pkl @@ -11,6 +11,12 @@ open class MemberInvitation extends cloudformation.Resource { Type = "AWS::Detective::MemberInvitation" + /// The root email address for the account to be invited, for validation. Updating this field has no effect. + hidden MemberEmailAddress: String(matches(Regex(#".*@.*"#)))|Mapping + + /// When set to true, invitation emails are not sent to the member accounts. Member accounts must still accept the invitation before they are added to the behavior graph. Updating this field has no effect. + hidden DisableEmailNotification: (Boolean|Mapping)? + /// A message to be included in the email invitation sent to the invited account. Updating this field has no effect. hidden Message: (String|Mapping)? @@ -20,18 +26,12 @@ open class MemberInvitation extends cloudformation.Resource { /// The AWS account ID to be invited to join the graph as a member hidden MemberId: String(matches(Regex(#"[0-9]{12}"#)))|Mapping - /// The root email address for the account to be invited, for validation. Updating this field has no effect. - hidden MemberEmailAddress: String(matches(Regex(#".*@.*"#)))|Mapping - - /// When set to true, invitation emails are not sent to the member accounts. Member accounts must still accept the invitation before they are added to the behavior graph. Updating this field has no effect. - hidden DisableEmailNotification: (Boolean|Mapping)? - Properties { + ["MemberEmailAddress"] = if (MemberEmailAddress == null) null else MemberEmailAddress + ["DisableEmailNotification"] = if (DisableEmailNotification == null) null else DisableEmailNotification ["Message"] = if (Message == null) null else Message ["GraphArn"] = if (GraphArn == null) null else GraphArn ["MemberId"] = if (MemberId == null) null else MemberId - ["MemberEmailAddress"] = if (MemberEmailAddress == null) null else MemberEmailAddress - ["DisableEmailNotification"] = if (DisableEmailNotification == null) null else DisableEmailNotification } } diff --git a/pkl/aws/devopsguru/loganomalydetectionintegration.pkl b/pkl/aws/devopsguru/loganomalydetectionintegration.pkl index 082a561b..13413fbe 100644 --- a/pkl/aws/devopsguru/loganomalydetectionintegration.pkl +++ b/pkl/aws/devopsguru/loganomalydetectionintegration.pkl @@ -5,9 +5,8 @@ module aws.devopsguru.loganomalydetectionintegration import "../../cloudformation.pkl" -/// User account id, used as the primary identifier for the resource -open class AccountId { -} +typealias LogAnomalyDetectionIntegrationAccountId = String + /// This resource schema represents the LogAnomalyDetectionIntegration resource in the Amazon DevOps Guru. open class LogAnomalyDetectionIntegration extends cloudformation.Resource { diff --git a/pkl/aws/devopsguru/notificationchannel.pkl b/pkl/aws/devopsguru/notificationchannel.pkl index d21d3fe6..03a575f9 100644 --- a/pkl/aws/devopsguru/notificationchannel.pkl +++ b/pkl/aws/devopsguru/notificationchannel.pkl @@ -5,39 +5,35 @@ module aws.devopsguru.notificationchannel import "../../cloudformation.pkl" -/// Information about filters of a notification channel configured in DevOpsGuru to filter for insights. -open class NotificationFilterConfig { - Severities: (InsightSeveritiesFilterList)? - MessageTypes: (NotificationMessageTypesFilterList)? -} +typealias NotificationChannelInsightSeverity = "LOW"|"MEDIUM"|"HIGH" -/// DevOps Guru Insight Severity Enum -open class InsightSeverity { -} -/// DevOps Guru NotificationMessageType Enum -open class NotificationMessageType { -} +typealias NotificationChannelNotificationMessageType = "NEW_INSIGHT"|"CLOSED_INSIGHT"|"NEW_ASSOCIATION"|"SEVERITY_UPGRADED"|"NEW_RECOMMENDATION" -/// DevOps Guru insight severities to filter for -open class InsightSeveritiesFilterList { -} -/// DevOps Guru message types to filter for -open class NotificationMessageTypesFilterList { -} +typealias NotificationChannelInsightSeveritiesFilterList = Listing<(NotificationChannelInsightSeverity)?> + + +typealias NotificationChannelNotificationMessageTypesFilterList = Listing<(NotificationChannelNotificationMessageType)?> + /// Information about notification channels you have configured with DevOps Guru. -open class NotificationChannelConfig { - Sns: (SnsChannelConfig)? - Filters: (NotificationFilterConfig)? +open class NotificationChannelNotificationChannelConfig { + Sns: (NotificationChannelSnsChannelConfig)? + Filters: (NotificationChannelNotificationFilterConfig)? } /// Information about a notification channel configured in DevOps Guru to send notifications when insights are created. -open class SnsChannelConfig { +open class NotificationChannelSnsChannelConfig { TopicArn: (String(matches(Regex(#"^arn:aws[a-z0-9-]*:sns:[a-z0-9-]+:\d{12}:[^:]+$"#)))|Mapping)? } +/// Information about filters of a notification channel configured in DevOpsGuru to filter for insights. +open class NotificationChannelNotificationFilterConfig { + Severities: (NotificationChannelInsightSeveritiesFilterList)? + MessageTypes: (NotificationChannelNotificationMessageTypesFilterList)? +} + /// This resource schema represents the NotificationChannel resource in the Amazon DevOps Guru. open class NotificationChannel extends cloudformation.Resource { @@ -45,7 +41,7 @@ open class NotificationChannel extends cloudformation.Resource { /// - hidden Config: NotificationChannelConfig + hidden Config: NotificationChannelNotificationChannelConfig Properties { ["Config"] = if (Config == null) null else Config diff --git a/pkl/aws/devopsguru/resourcecollection.pkl b/pkl/aws/devopsguru/resourcecollection.pkl index fa27f01e..f640c82c 100644 --- a/pkl/aws/devopsguru/resourcecollection.pkl +++ b/pkl/aws/devopsguru/resourcecollection.pkl @@ -5,27 +5,26 @@ module aws.devopsguru.resourcecollection import "../../cloudformation.pkl" -/// Information about a filter used to specify which AWS resources are analyzed for anomalous behavior by DevOps Guru. -open class ResourceCollectionFilter { - CloudFormation: (CloudFormationCollectionFilter)? - Tags: (TagCollections)? -} +typealias ResourceCollectionTagCollections = Listing<(ResourceCollectionTagCollection)?> -/// CloudFormation resource for DevOps Guru to monitor -open class CloudFormationCollectionFilter { - StackNames: (Listing)? -} - -/// Tagged resources for DevOps Guru to monitor -open class TagCollections { -} /// Tagged resource for DevOps Guru to monitor -open class TagCollection { +open class ResourceCollectionTagCollection { AppBoundaryKey: (String|Mapping)? TagValues: (Listing)? } +/// Information about a filter used to specify which AWS resources are analyzed for anomalous behavior by DevOps Guru. +open class ResourceCollectionResourceCollectionFilter { + CloudFormation: (ResourceCollectionCloudFormationCollectionFilter)? + Tags: (ResourceCollectionTagCollections)? +} + +/// CloudFormation resource for DevOps Guru to monitor +open class ResourceCollectionCloudFormationCollectionFilter { + StackNames: (Listing)? +} + /// This resource schema represents the ResourceCollection resource in the Amazon DevOps Guru. open class ResourceCollection extends cloudformation.Resource { @@ -33,7 +32,7 @@ open class ResourceCollection extends cloudformation.Resource { /// - hidden ResourceCollectionFilter: ResourceCollectionFilter + hidden ResourceCollectionFilter: ResourceCollectionResourceCollectionFilter Properties { ["ResourceCollectionFilter"] = if (ResourceCollectionFilter == null) null else ResourceCollectionFilter diff --git a/pkl/aws/directoryservice/microsoftad.pkl b/pkl/aws/directoryservice/microsoftad.pkl index 0299b4e7..daafdec7 100644 --- a/pkl/aws/directoryservice/microsoftad.pkl +++ b/pkl/aws/directoryservice/microsoftad.pkl @@ -6,7 +6,7 @@ module aws.directoryservice.microsoftad import "../../cloudformation.pkl" /// -open class VpcSettings { +open class MicrosoftADVpcSettings { SubnetIds: Listing VpcId: String|Mapping } @@ -18,33 +18,33 @@ open class MicrosoftAD extends cloudformation.Resource { /// - hidden Password: String|Mapping + hidden EnableSso: (Boolean|Mapping)? /// - hidden VpcSettings: VpcSettings + hidden Name: String|Mapping /// - hidden CreateAlias: (Boolean|Mapping)? + hidden VpcSettings: MicrosoftADVpcSettings /// - hidden Edition: (String|Mapping)? + hidden CreateAlias: (Boolean|Mapping)? /// - hidden EnableSso: (Boolean|Mapping)? + hidden Edition: (String|Mapping)? /// - hidden Name: String|Mapping + hidden Password: String|Mapping /// hidden ShortName: (String|Mapping)? Properties { - ["Password"] = if (Password == null) null else Password + ["EnableSso"] = if (EnableSso == null) null else EnableSso + ["Name"] = if (Name == null) null else Name ["VpcSettings"] = if (VpcSettings == null) null else VpcSettings ["CreateAlias"] = if (CreateAlias == null) null else CreateAlias ["Edition"] = if (Edition == null) null else Edition - ["EnableSso"] = if (EnableSso == null) null else EnableSso - ["Name"] = if (Name == null) null else Name + ["Password"] = if (Password == null) null else Password ["ShortName"] = if (ShortName == null) null else ShortName } diff --git a/pkl/aws/directoryservice/simplead.pkl b/pkl/aws/directoryservice/simplead.pkl index eaf31f1e..01b09b7a 100644 --- a/pkl/aws/directoryservice/simplead.pkl +++ b/pkl/aws/directoryservice/simplead.pkl @@ -6,7 +6,7 @@ module aws.directoryservice.simplead import "../../cloudformation.pkl" /// -open class VpcSettings { +open class SimpleADVpcSettings { SubnetIds: Listing VpcId: String|Mapping } @@ -17,6 +17,15 @@ open class SimpleAD extends cloudformation.Resource { Type = "AWS::DirectoryService::SimpleAD" + /// VPC settings of the Simple AD directory server in AWS. + hidden VpcSettings: SimpleADVpcSettings + + /// Whether to enable single sign-on for a Simple Active Directory in AWS. + hidden EnableSso: (Boolean|Mapping)? + + /// The NetBIOS name for your domain. + hidden ShortName: (String|Mapping)? + /// Description for the directory. hidden Description: (String|Mapping)? @@ -32,24 +41,15 @@ open class SimpleAD extends cloudformation.Resource { /// The name of the configuration set. hidden CreateAlias: (Boolean|Mapping)? - /// VPC settings of the Simple AD directory server in AWS. - hidden VpcSettings: VpcSettings - - /// Whether to enable single sign-on for a Simple Active Directory in AWS. - hidden EnableSso: (Boolean|Mapping)? - - /// The NetBIOS name for your domain. - hidden ShortName: (String|Mapping)? - Properties { + ["VpcSettings"] = if (VpcSettings == null) null else VpcSettings + ["EnableSso"] = if (EnableSso == null) null else EnableSso + ["ShortName"] = if (ShortName == null) null else ShortName ["Description"] = if (Description == null) null else Description ["Name"] = if (Name == null) null else Name ["Password"] = if (Password == null) null else Password ["Size"] = if (Size == null) null else Size ["CreateAlias"] = if (CreateAlias == null) null else CreateAlias - ["VpcSettings"] = if (VpcSettings == null) null else VpcSettings - ["EnableSso"] = if (EnableSso == null) null else EnableSso - ["ShortName"] = if (ShortName == null) null else ShortName } } diff --git a/pkl/aws/dlm/lifecyclepolicy.pkl b/pkl/aws/dlm/lifecyclepolicy.pkl index 131a4672..fe27f07f 100644 --- a/pkl/aws/dlm/lifecyclepolicy.pkl +++ b/pkl/aws/dlm/lifecyclepolicy.pkl @@ -6,191 +6,188 @@ module aws.dlm.lifecyclepolicy import "../../cloudformation.pkl" /// -open class PolicyDetails { - RetainInterval: (Int|Mapping)? - ResourceLocations: (Listing)? - CopyTags: (Boolean|Mapping)? - Schedules: (Listing)? - EventSource: (EventSource)? - TargetTags: (Listing)? - Actions: (Listing)? - ResourceTypes: (Listing)? - Parameters: (Parameters)? - ExtendDeletion: (Boolean|Mapping)? - Exclusions: (Exclusions)? - ResourceType: (String|Mapping)? - PolicyLanguage: (String|Mapping)? - CreateInterval: (Int|Mapping)? - CrossRegionCopyTargets: (CrossRegionCopyTargets)? - PolicyType: (String|Mapping)? +open class LifecyclePolicyFastRestoreRule { + IntervalUnit: (String|Mapping)? + Count: (Int|Mapping)? + AvailabilityZones: (Listing)? + Interval: (Int|Mapping)? } /// -open class CrossRegionCopyRule { - CmkArn: (String|Mapping)? - RetainRule: (CrossRegionCopyRetainRule)? - CopyTags: (Boolean|Mapping)? - TargetRegion: (String|Mapping)? - Target: (String|Mapping)? - DeprecateRule: (CrossRegionCopyDeprecateRule)? - Encrypted: Boolean|Mapping +open class LifecyclePolicyEventParameters { + SnapshotOwner: Listing + DescriptionRegex: (String|Mapping)? + EventType: String|Mapping } /// -open class ExcludeTags { +open class LifecyclePolicyRetentionArchiveTier { + IntervalUnit: (String|Mapping)? + Count: (Int|Mapping)? + Interval: (Int|Mapping)? } /// -open class ArchiveRetainRule { - RetentionArchiveTier: RetentionArchiveTier +open class LifecyclePolicyShareRule { + UnshareInterval: (Int|Mapping)? + TargetAccounts: (Listing)? + UnshareIntervalUnit: (String|Mapping)? } /// -open class FastRestoreRule { - Count: (Int|Mapping)? - AvailabilityZones: (Listing)? - Interval: (Int|Mapping)? - IntervalUnit: (String|Mapping)? +open class LifecyclePolicyCrossRegionCopyRule { + Target: (String|Mapping)? + DeprecateRule: (LifecyclePolicyCrossRegionCopyDeprecateRule)? + Encrypted: Boolean|Mapping + CmkArn: (String|Mapping)? + RetainRule: (LifecyclePolicyCrossRegionCopyRetainRule)? + CopyTags: (Boolean|Mapping)? + TargetRegion: (String|Mapping)? } /// -open class ArchiveRule { - RetainRule: ArchiveRetainRule +open class LifecyclePolicyPolicyDetails { + ExtendDeletion: (Boolean|Mapping)? + ResourceType: (String|Mapping)? + CrossRegionCopyTargets: (LifecyclePolicyCrossRegionCopyTargets)? + ResourceLocations: (Listing)? + PolicyLanguage: (String|Mapping)? + PolicyType: (String|Mapping)? + Actions: (Listing)? + EventSource: (LifecyclePolicyEventSource)? + TargetTags: (Listing)? + ResourceTypes: (Listing)? + CreateInterval: (Int|Mapping)? + RetainInterval: (Int|Mapping)? + Schedules: (Listing)? + Parameters: (LifecyclePolicyParameters)? + Exclusions: (LifecyclePolicyExclusions)? + CopyTags: (Boolean|Mapping)? } /// -open class CreateRule { - IntervalUnit: (String|Mapping)? - Scripts: (Listing